@howssatoshi/quantumcss 1.8.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -10
- package/dist/quantum.min.css +10 -1
- package/examples/admin-panel.html +317 -600
- package/examples/analytics-dashboard.html +136 -299
- package/examples/blog.css +297 -0
- package/examples/blog.html +216 -0
- package/examples/chat-messaging.html +43 -70
- package/examples/email-client.css +582 -0
- package/examples/email-client.html +432 -0
- package/examples/gaming-portal.css +352 -0
- package/examples/gaming-portal.html +239 -0
- package/examples/images/eric.png +0 -0
- package/examples/index.html +342 -259
- package/examples/kitchen-sink.html +332 -94
- package/examples/music-streaming.html +32 -91
- package/examples/news.html +199 -0
- package/examples/nova-shop.css +984 -0
- package/examples/portfolio.html +235 -0
- package/examples/shopping.html +812 -0
- package/examples/starlight.html +11 -9
- package/examples/task.md +12 -0
- package/examples/travel.html +514 -0
- package/examples/video-streaming.html +310 -92
- package/package.json +9 -3
- package/src/cli.js +5 -5
- package/src/defaults.js +19 -16
- package/src/generator.js +12 -3
- package/src/starlight.js +20 -15
- package/src/styles/quantum-animations.css +13 -13
- package/src/styles/quantum-base.css +110 -58
- package/src/styles/quantum-components.css +2379 -349
- package/src/styles/quantum-icons.css +345 -0
- package/src/styles/starlight.css +2702 -1054
- package/dist/index.html +0 -232
- package/dist/quantum.css +0 -2374
- package/examples/blog-template.html +0 -287
- package/examples/email-template.html +0 -712
- package/examples/gaming-template.html +0 -340
- package/examples/gradient-test.html +0 -124
- package/examples/news-template.html +0 -317
- package/examples/portfolio-resume.html +0 -647
- package/examples/shopping/images/headset.jpg +0 -0
- package/examples/shopping/images/sneakers.jpg +0 -0
- package/examples/shopping/images/windbreaker.jpg +0 -0
- package/examples/shopping/index.html +0 -338
- package/examples/theme-test.html +0 -159
- package/examples/travel/index.html +0 -275
- package/examples/verify_fixes.html +0 -52
- package/examples/verify_presets.html +0 -32
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@howssatoshi/quantumcss",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "Advanced utility-first CSS framework with JIT generation and modern components",
|
|
5
5
|
"main": "dist/quantum.min.css",
|
|
6
6
|
"bin": {
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
"watch": "node scripts/build.js --watch",
|
|
20
20
|
"docs": "node scripts/build.js --docs",
|
|
21
21
|
"generate": "node src/cli.js",
|
|
22
|
-
"generate:watch": "node src/cli.js --watch"
|
|
22
|
+
"generate:watch": "node src/cli.js --watch",
|
|
23
|
+
"harvest:icons": "node scripts/harvest-icons.js",
|
|
24
|
+
"release": "node scripts/release.js"
|
|
23
25
|
},
|
|
24
26
|
"repository": {
|
|
25
27
|
"type": "git",
|
|
@@ -44,8 +46,12 @@
|
|
|
44
46
|
"node": ">=14.0.0"
|
|
45
47
|
},
|
|
46
48
|
"dependencies": {
|
|
49
|
+
"autoprefixer": "^10.4.27",
|
|
47
50
|
"chokidar": "^5.0.0",
|
|
48
|
-
"
|
|
51
|
+
"cssnano": "^7.1.3",
|
|
52
|
+
"glob": "^13.0.0",
|
|
53
|
+
"parse5": "^8.0.0",
|
|
54
|
+
"postcss": "^8.5.8"
|
|
49
55
|
},
|
|
50
56
|
"devDependencies": {
|
|
51
57
|
"@eslint/js": "^9.39.2",
|
package/src/cli.js
CHANGED
|
@@ -115,12 +115,12 @@ function build(outputPath = 'dist/quantum.css') {
|
|
|
115
115
|
function scaffold(template, targetPath = 'index.html') {
|
|
116
116
|
const templatesDir = path.resolve(__dirname, '../examples');
|
|
117
117
|
const templateMap = {
|
|
118
|
-
gaming: 'gaming-
|
|
119
|
-
blog: 'blog
|
|
120
|
-
travel: 'travel
|
|
121
|
-
shopping: 'shopping
|
|
118
|
+
gaming: 'gaming-portal.html',
|
|
119
|
+
blog: 'blog.html',
|
|
120
|
+
travel: 'travel.html',
|
|
121
|
+
shopping: 'shopping.html',
|
|
122
122
|
starlight: 'starlight.html',
|
|
123
|
-
news: 'news
|
|
123
|
+
news: 'news.html',
|
|
124
124
|
docs: 'kitchen-sink.html'
|
|
125
125
|
};
|
|
126
126
|
|
package/src/defaults.js
CHANGED
|
@@ -35,6 +35,7 @@ const defaultTheme = {
|
|
|
35
35
|
starlight: {
|
|
36
36
|
blue: '#00d4ff', peach: '#ffb38a', orange: '#ff7e5f', deep: '#08081a',
|
|
37
37
|
},
|
|
38
|
+
accent: '#00d4ff',
|
|
38
39
|
transparent: 'transparent',
|
|
39
40
|
},
|
|
40
41
|
spacing: {
|
|
@@ -149,7 +150,7 @@ const utilityMaps = {
|
|
|
149
150
|
value: ['rgba(255, 255, 255, 0.03)', 'blur(16px)', 'blur(16px)', '1px', 'solid', 'rgba(255, 255, 255, 0.1)']
|
|
150
151
|
},
|
|
151
152
|
'bg-starlight': { property: 'background', value: 'linear-gradient(135deg, var(--q-color-starlight-peach) 0%, var(--q-color-starlight-blue) 100%)' },
|
|
152
|
-
'text-gradient
|
|
153
|
+
'text-gradient': {
|
|
153
154
|
property: ['background', '-webkit-background-clip', '-webkit-text-fill-color', 'display'],
|
|
154
155
|
value: ['linear-gradient(to right, var(--q-color-starlight-peach), var(--q-color-starlight-blue))', 'text', 'transparent', 'inline-block']
|
|
155
156
|
},
|
|
@@ -162,10 +163,10 @@ const utilityMaps = {
|
|
|
162
163
|
value: ['rgba(255, 255, 255, 0.05)', 'blur(16px)', 'blur(16px)', 'rgba(255, 255, 255, 0.1)', '1px', 'solid']
|
|
163
164
|
},
|
|
164
165
|
'theme-glass-dark': {
|
|
165
|
-
property: ['background-color', '
|
|
166
|
-
value: ['rgba(255, 255, 255, 0.05)', '
|
|
166
|
+
property: ['background-color', 'border-color', 'border-width', 'border-style'],
|
|
167
|
+
value: ['rgba(255, 255, 255, 0.05)', 'rgba(255, 255, 255, 0.1)', '1px', 'solid']
|
|
167
168
|
},
|
|
168
|
-
'
|
|
169
|
+
'dialog-bg': {
|
|
169
170
|
property: ['background-color', 'backdrop-filter', '-webkit-backdrop-filter'],
|
|
170
171
|
value: ['rgba(8, 8, 26, 0.05) !important', 'blur(24px) !important', 'blur(24px) !important']
|
|
171
172
|
},
|
|
@@ -186,22 +187,24 @@ const utilityMaps = {
|
|
|
186
187
|
'search-container': 'relative block w-full h-12',
|
|
187
188
|
'search-input': 'pl-12 w-full h-12',
|
|
188
189
|
'search-icon': 'absolute left-4 top-1_2 -translate-y-1_2 pointer-events-none z-10 w-5 h-5',
|
|
189
|
-
'nav-glass': 'nav-base theme-glass-dark',
|
|
190
|
+
'nav-glass': 'nav-base theme-glass-dark border-b',
|
|
190
191
|
'starlight-card': 'card-base theme-glass-dark',
|
|
191
192
|
'starlight-card-interactive': 'card-base theme-glass-dark hover:border-white_20 hover:-translate-y-1 transition-all duration-300',
|
|
192
|
-
'
|
|
193
|
-
'starlight-
|
|
193
|
+
'nav-header': 'nav-base theme-glass-dark w-full sticky top-0 z-50 border-b',
|
|
194
|
+
'starlight-nav': 'nav-header',
|
|
195
|
+
'starlight-navbar': 'nav-header border-white_10',
|
|
194
196
|
'starlight-hero': 'container mx-auto px-6 py-16 md:py-24 text-center relative overflow-hidden',
|
|
195
197
|
'starlight-footer': 'border-t border-white_10 py-12 mt-20 bg-black_20 backdrop-blur-md',
|
|
196
|
-
'
|
|
198
|
+
'aside-nav': 'flex flex-col h-full backdrop-blur-xl border-r border-white_10',
|
|
199
|
+
'starlight-sidebar-nav': 'aside-nav p-6',
|
|
197
200
|
'nav-reverse': { property: 'flex-direction', value: 'row-reverse' },
|
|
198
201
|
'nav-center': { property: 'display', value: 'grid' },
|
|
199
202
|
'hamburger-left': { property: 'order', value: '-1' },
|
|
200
|
-
'
|
|
201
|
-
'
|
|
202
|
-
'
|
|
203
|
-
'
|
|
204
|
-
'
|
|
203
|
+
'search': 'search-container theme-glass-dark rounded-xl',
|
|
204
|
+
'dashboard': 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8',
|
|
205
|
+
'gallery': 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4',
|
|
206
|
+
'form': 'card-base theme-glass-dark grid grid-cols-1 md:grid-cols-2 gap-8 items-start',
|
|
207
|
+
'dialog': 'dialog-base modal-fixed theme-glass-dark dialog-bg ani-scale-in',
|
|
205
208
|
'starlight-sidebar': 'flex flex-col h-screen w-72 fixed left-0 top-0 bg-black_40 backdrop-blur-xl border-r border-white_10 p-6 z-40',
|
|
206
209
|
'starlight-feed-card': 'flex flex-col bg-white_03 backdrop-blur-md border border-white_10 rounded-2xl p-6 transition-all duration-300 ease',
|
|
207
210
|
'starlight-auth-form': 'flex flex-col max-w-md mx-auto bg-white_05 backdrop-blur-xl border border-white_10 rounded-2xl p-10 shadow-2xl',
|
|
@@ -262,9 +265,9 @@ const utilityMaps = {
|
|
|
262
265
|
'starlight-breadcrumb-separator': 'text-white_40',
|
|
263
266
|
'starlight-breadcrumb-current': 'font-medium',
|
|
264
267
|
|
|
265
|
-
'
|
|
266
|
-
'
|
|
267
|
-
'
|
|
268
|
+
'gallery-grid': 'grid gap-4',
|
|
269
|
+
'gallery-item': 'relative aspect-video rounded-lg overflow-hidden',
|
|
270
|
+
'gallery-overlay': 'absolute inset-0 flex items-end p-4 bg-gradient-to-t from-black_80 to-transparent opacity-0 transition-opacity',
|
|
268
271
|
|
|
269
272
|
'starlight-progress': 'flex items-center gap-3',
|
|
270
273
|
'starlight-progress-bar': 'flex-1 h-2 bg-white_10 rounded-full overflow-hidden',
|
package/src/generator.js
CHANGED
|
@@ -122,6 +122,9 @@ function generateCSS(configPath) {
|
|
|
122
122
|
regex: new RegExp(`\\s${v}="([^"]+)"`, 'g')
|
|
123
123
|
}));
|
|
124
124
|
|
|
125
|
+
const jitLimit = (config.jit && config.jit.limit) || 10000;
|
|
126
|
+
const jitWarnAt = (config.jit && config.jit.warnAt) || (jitLimit * 0.8);
|
|
127
|
+
|
|
125
128
|
files.forEach(file => {
|
|
126
129
|
try {
|
|
127
130
|
const content = fs.readFileSync(file, 'utf8');
|
|
@@ -129,7 +132,9 @@ function generateCSS(configPath) {
|
|
|
129
132
|
// 1. Match standard class="..."
|
|
130
133
|
let match;
|
|
131
134
|
while ((match = classAttrRegex.exec(content)) !== null) {
|
|
132
|
-
match[1].split(/\s+/).forEach(cls => {
|
|
135
|
+
match[1].split(/\s+/).forEach(cls => {
|
|
136
|
+
if (cls && rawClasses.size < jitLimit) rawClasses.add(cls);
|
|
137
|
+
});
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
// 2. Match attribute lanes (e.g., md="flex gap-4")
|
|
@@ -137,7 +142,7 @@ function generateCSS(configPath) {
|
|
|
137
142
|
regex.lastIndex = 0;
|
|
138
143
|
while ((match = regex.exec(content)) !== null) {
|
|
139
144
|
match[1].split(/\s+/).forEach(cls => {
|
|
140
|
-
if (cls) {
|
|
145
|
+
if (cls && rawClasses.size < jitLimit) {
|
|
141
146
|
// We convert attribute-based utilities to a canonical internal format
|
|
142
147
|
// using the __ separator, which getRulesForClass already understands.
|
|
143
148
|
rawClasses.add(`${variant}__${cls}`);
|
|
@@ -150,6 +155,10 @@ function generateCSS(configPath) {
|
|
|
150
155
|
}
|
|
151
156
|
});
|
|
152
157
|
|
|
158
|
+
if (rawClasses.size >= jitWarnAt) {
|
|
159
|
+
console.warn(`⚠️ JIT Warning: Generated ${rawClasses.size} utilities, approaching limit of ${jitLimit}.`);
|
|
160
|
+
}
|
|
161
|
+
|
|
153
162
|
const utilities = new Set();
|
|
154
163
|
const responsiveUtils = {
|
|
155
164
|
sm: new Set(), md: new Set(), lg: new Set(), xl: new Set(), '2xl': new Set(),
|
|
@@ -162,7 +171,7 @@ function generateCSS(configPath) {
|
|
|
162
171
|
* @returns {string} The escaped selector
|
|
163
172
|
*/
|
|
164
173
|
const escapeSelector = (cls) => {
|
|
165
|
-
return cls.replace(/([:.[\]
|
|
174
|
+
return cls.replace(/([:.[\]\\/])/g, '\\$1');
|
|
166
175
|
};
|
|
167
176
|
|
|
168
177
|
const sideMap = {
|
package/src/starlight.js
CHANGED
|
@@ -439,7 +439,7 @@ const Starlight = {
|
|
|
439
439
|
iconSelector: {
|
|
440
440
|
light: '.sun-icon, [data-theme-icon="light"]',
|
|
441
441
|
dark: '.moon-icon, [data-theme-icon="dark"]',
|
|
442
|
-
auto: '.
|
|
442
|
+
auto: '.q-icon-display, [data-theme-icon="auto"]'
|
|
443
443
|
},
|
|
444
444
|
autoDetect: true
|
|
445
445
|
};
|
|
@@ -457,25 +457,30 @@ const Starlight = {
|
|
|
457
457
|
* @param {string} effectiveTheme - The actual theme being displayed
|
|
458
458
|
*/
|
|
459
459
|
const updateIcons = (theme, effectiveTheme) => {
|
|
460
|
-
const
|
|
460
|
+
const autoIconSelector = config.iconSelector.auto;
|
|
461
|
+
const hasAutoIcon = autoIconSelector && document.querySelector(autoIconSelector) !== null;
|
|
461
462
|
|
|
463
|
+
if (theme === 'auto' && hasAutoIcon) {
|
|
464
|
+
// Auto mode with auto icon: show only auto icon
|
|
465
|
+
document.querySelectorAll(autoIconSelector).forEach(icon => {
|
|
466
|
+
icon.classList.remove('hidden');
|
|
467
|
+
});
|
|
468
|
+
// Hide light/dark icons
|
|
469
|
+
const lightSelector = config.iconSelector.light;
|
|
470
|
+
const darkSelector = config.iconSelector.dark;
|
|
471
|
+
document.querySelectorAll(`${lightSelector}, ${darkSelector}`).forEach(icon => {
|
|
472
|
+
icon.classList.add('hidden');
|
|
473
|
+
});
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// Otherwise use normal theme-based visibility
|
|
462
478
|
config.themes.forEach(t => {
|
|
463
479
|
const selector = config.iconSelector[t];
|
|
464
480
|
if (selector) {
|
|
465
481
|
document.querySelectorAll(selector).forEach(icon => {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
const isAutoIcon = t === 'auto';
|
|
469
|
-
const isEffectiveIcon = t === effectiveTheme;
|
|
470
|
-
|
|
471
|
-
if (hasAutoIcon) {
|
|
472
|
-
icon.classList.toggle('hidden', !isAutoIcon);
|
|
473
|
-
} else {
|
|
474
|
-
icon.classList.toggle('hidden', !isEffectiveIcon);
|
|
475
|
-
}
|
|
476
|
-
} else {
|
|
477
|
-
icon.classList.toggle('hidden', t !== theme);
|
|
478
|
-
}
|
|
482
|
+
const isEffective = theme === 'auto' ? t === effectiveTheme : t === theme;
|
|
483
|
+
icon.classList.toggle('hidden', !isEffective);
|
|
479
484
|
});
|
|
480
485
|
}
|
|
481
486
|
});
|
|
@@ -53,42 +53,42 @@
|
|
|
53
53
|
.ani-svg-draw {
|
|
54
54
|
stroke-dasharray: 1000;
|
|
55
55
|
stroke-dashoffset: 1000;
|
|
56
|
-
animation: svg-draw
|
|
56
|
+
animation: svg-draw 3s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
.ani-float {
|
|
60
|
-
animation: float-y 6s
|
|
60
|
+
animation: float-y 6s ease-in-out infinite;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
.ani-fade-in {
|
|
64
|
-
animation: fadeIn
|
|
64
|
+
animation: fadeIn 0.3s ease-out forwards;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
.ani-slide-up {
|
|
68
|
-
animation: slideUp
|
|
68
|
+
animation: slideUp 0.3s ease-out forwards;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
.ani-slide-down {
|
|
72
|
-
animation: slideDown
|
|
72
|
+
animation: slideDown 0.3s ease-out forwards;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
.ani-scale-in {
|
|
76
|
-
animation: scaleIn
|
|
76
|
+
animation: scaleIn 0.2s ease-out forwards;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.ani-spin {
|
|
80
|
-
animation: spin 1s
|
|
80
|
+
animation: spin 1s linear infinite;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
/* Staggered Animations */
|
|
84
|
-
.ani-stagger-1 { animation-delay:
|
|
85
|
-
.ani-stagger-2 { animation-delay:
|
|
86
|
-
.ani-stagger-3 { animation-delay:
|
|
87
|
-
.ani-stagger-4 { animation-delay:
|
|
88
|
-
.ani-stagger-5 { animation-delay:
|
|
84
|
+
.ani-stagger-1 { animation-delay: 0.1s; }
|
|
85
|
+
.ani-stagger-2 { animation-delay: 0.2s; }
|
|
86
|
+
.ani-stagger-3 { animation-delay: 0.3s; }
|
|
87
|
+
.ani-stagger-4 { animation-delay: 0.4s; }
|
|
88
|
+
.ani-stagger-5 { animation-delay: 0.5s; }
|
|
89
89
|
|
|
90
90
|
/* Speed Modifiers */
|
|
91
|
-
.ani-fast { animation-duration:
|
|
91
|
+
.ani-fast { animation-duration: 0.5s !important; }
|
|
92
92
|
.ani-slow { animation-duration: 8s !important; }
|
|
93
93
|
.ani-slower { animation-duration: 15s !important; }
|
|
94
94
|
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* QuantumCSS
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* 1. Core layer MUST NEVER reference brand-specific tokens (e.g., --q-color-starlight).
|
|
7
|
-
* 2. Core layer MUST ONLY use semantic tokens (e.g., --q-color-primary, --q-color-bg).
|
|
8
|
-
* 3. Aesthetics (gradients, specific colors) are injected by the Theme layer.
|
|
9
|
-
* 4. This file contains the non-optional compliance and reset layers.
|
|
2
|
+
* QuantumCSS + Starlight UI
|
|
3
|
+
* Advanced utility-first framework with ethereal cosmic aesthetics
|
|
4
|
+
* Version: 1.7.3
|
|
5
|
+
* Features: Modern CSS, JIT Engine, Starlight Components, Dark Mode
|
|
10
6
|
*/
|
|
11
7
|
|
|
12
8
|
@import 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap';
|
|
@@ -33,29 +29,6 @@
|
|
|
33
29
|
--q-color-error: #ef4444;
|
|
34
30
|
--q-color-neutral: #6b7280;
|
|
35
31
|
|
|
36
|
-
/* Semantic Color Tokens (Core Layer) */
|
|
37
|
-
--q-color-bg: var(--q-bg-primary);
|
|
38
|
-
--q-color-bg-muted: color-mix(in srgb, var(--q-color-bg), var(--q-color-neutral) 5%);
|
|
39
|
-
--q-color-surface: var(--q-card-bg);
|
|
40
|
-
--q-color-surface-elevated: color-mix(in srgb, var(--q-color-surface), white 2%);
|
|
41
|
-
--q-color-border: var(--q-card-border);
|
|
42
|
-
--q-color-border-strong: color-mix(in srgb, var(--q-color-border), white 10%);
|
|
43
|
-
|
|
44
|
-
--q-color-text: var(--q-text-primary);
|
|
45
|
-
--q-color-text-muted: var(--q-text-secondary);
|
|
46
|
-
--q-color-text-inverse: #000;
|
|
47
|
-
|
|
48
|
-
--q-color-primary-hover: var(--q-color-primary-600);
|
|
49
|
-
--q-color-success-soft: color-mix(in srgb, var(--q-color-success) 15%, transparent);
|
|
50
|
-
--q-color-warning-soft: color-mix(in srgb, var(--q-color-warning) 15%, transparent);
|
|
51
|
-
--q-color-danger: var(--q-color-error);
|
|
52
|
-
--q-color-danger-soft: color-mix(in srgb, var(--q-color-danger) 15%, transparent);
|
|
53
|
-
--q-color-info: var(--q-color-primary);
|
|
54
|
-
--q-color-info-soft: color-mix(in srgb, var(--q-color-info) 15%, transparent);
|
|
55
|
-
|
|
56
|
-
--q-color-link: var(--q-color-primary);
|
|
57
|
-
--q-color-link-hover: var(--q-color-primary-hover);
|
|
58
|
-
|
|
59
32
|
/* Typography */
|
|
60
33
|
--q-font-sans: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
|
|
61
34
|
--q-font-serif: Georgia, Cambria, serif;
|
|
@@ -94,18 +67,19 @@
|
|
|
94
67
|
--q-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 10%), 0 8px 10px -6px rgb(0 0 0 / 10%);
|
|
95
68
|
--q-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 25%);
|
|
96
69
|
|
|
97
|
-
/* Animation
|
|
98
|
-
--q-duration-
|
|
99
|
-
--q-duration-
|
|
100
|
-
--q-duration-
|
|
101
|
-
--q-duration-
|
|
102
|
-
--q-duration-
|
|
103
|
-
|
|
70
|
+
/* Animation */
|
|
71
|
+
--q-duration-75: 75ms;
|
|
72
|
+
--q-duration-100: 100ms;
|
|
73
|
+
--q-duration-150: 150ms;
|
|
74
|
+
--q-duration-200: 200ms;
|
|
75
|
+
--q-duration-300: 300ms;
|
|
76
|
+
--q-duration-500: 500ms;
|
|
77
|
+
--q-duration-700: 700ms;
|
|
78
|
+
--q-duration-1000: 1000ms;
|
|
104
79
|
--q-ease-linear: linear;
|
|
105
80
|
--q-ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
106
81
|
--q-ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
107
82
|
--q-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
108
|
-
--q-ease-emphasized: cubic-bezier(0.2, 0, 0, 1);
|
|
109
83
|
|
|
110
84
|
/* --- Starlight Specific Tokens --- */
|
|
111
85
|
--q-color-starlight: var(--q-color-starlight-blue);
|
|
@@ -138,9 +112,9 @@
|
|
|
138
112
|
--q-glass-blur: blur(16px);
|
|
139
113
|
|
|
140
114
|
/* Transitions */
|
|
141
|
-
--q-transition-fast:
|
|
142
|
-
--q-transition-base:
|
|
143
|
-
--q-transition-slow:
|
|
115
|
+
--q-transition-fast: 150ms ease-in-out;
|
|
116
|
+
--q-transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
117
|
+
--q-transition-slow: 400ms ease-in-out;
|
|
144
118
|
}
|
|
145
119
|
|
|
146
120
|
/* High Contrast (Accessibility) Mode Support */
|
|
@@ -201,7 +175,7 @@ html {
|
|
|
201
175
|
font-size: 16px;
|
|
202
176
|
-webkit-font-smoothing: antialiased;
|
|
203
177
|
-moz-osx-font-smoothing: grayscale;
|
|
204
|
-
background-color: var(--q-
|
|
178
|
+
background-color: var(--q-bg-primary);
|
|
205
179
|
scrollbar-width: thin;
|
|
206
180
|
scrollbar-color: var(--q-color-starlight-blue) transparent;
|
|
207
181
|
}
|
|
@@ -210,6 +184,10 @@ body {
|
|
|
210
184
|
line-height: inherit;
|
|
211
185
|
}
|
|
212
186
|
|
|
187
|
+
ul, ol {
|
|
188
|
+
list-style: none;
|
|
189
|
+
}
|
|
190
|
+
|
|
213
191
|
input, textarea, select, button {
|
|
214
192
|
font-family: inherit;
|
|
215
193
|
font-size: inherit;
|
|
@@ -584,6 +562,7 @@ textarea {
|
|
|
584
562
|
.font-semibold { font-weight: 600; }
|
|
585
563
|
.font-bold { font-weight: 700; }
|
|
586
564
|
.font-extrabold { font-weight: 800; }
|
|
565
|
+
.font-black { font-weight: 900; }
|
|
587
566
|
|
|
588
567
|
.text-left { text-align: left; }
|
|
589
568
|
.text-center { text-align: center; }
|
|
@@ -591,8 +570,10 @@ textarea {
|
|
|
591
570
|
.text-justify { text-align: justify; }
|
|
592
571
|
|
|
593
572
|
/* Color Utilities */
|
|
594
|
-
.text-primary { color: var(--q-
|
|
595
|
-
.text-secondary { color: var(--q-
|
|
573
|
+
.text-primary { color: var(--q-text-primary); }
|
|
574
|
+
.text-secondary { color: var(--q-text-secondary); }
|
|
575
|
+
.text-muted { color: var(--q-text-muted); }
|
|
576
|
+
.text-accent { color: var(--q-color-primary); }
|
|
596
577
|
.text-success { color: var(--q-color-success); }
|
|
597
578
|
.text-warning { color: var(--q-color-warning); }
|
|
598
579
|
.text-error { color: var(--q-color-error); }
|
|
@@ -600,7 +581,9 @@ textarea {
|
|
|
600
581
|
.text-white { color: #fff; }
|
|
601
582
|
.text-black { color: #000; }
|
|
602
583
|
|
|
603
|
-
.bg-primary { background-color: var(--q-
|
|
584
|
+
.bg-primary { background-color: var(--q-bg-primary); }
|
|
585
|
+
.bg-surface { background-color: var(--q-color-surface); }
|
|
586
|
+
.bg-accent { background-color: var(--q-color-primary); }
|
|
604
587
|
.bg-secondary { background-color: var(--q-color-secondary); }
|
|
605
588
|
.bg-success { background-color: var(--q-color-success); }
|
|
606
589
|
.bg-warning { background-color: var(--q-color-warning); }
|
|
@@ -772,13 +755,13 @@ textarea {
|
|
|
772
755
|
.transition-all {
|
|
773
756
|
transition-property: all;
|
|
774
757
|
transition-timing-function: var(--q-ease-in-out);
|
|
775
|
-
transition-duration: var(--q-duration-
|
|
758
|
+
transition-duration: var(--q-duration-150);
|
|
776
759
|
}
|
|
777
760
|
|
|
778
761
|
.transition-colors {
|
|
779
762
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
|
780
763
|
transition-timing-function: var(--q-ease-in-out);
|
|
781
|
-
transition-duration: var(--q-duration-
|
|
764
|
+
transition-duration: var(--q-duration-150);
|
|
782
765
|
}
|
|
783
766
|
|
|
784
767
|
/* Transform Utilities */
|
|
@@ -832,6 +815,8 @@ textarea {
|
|
|
832
815
|
|
|
833
816
|
/* Z-Index Utilities */
|
|
834
817
|
.z-auto { z-index: auto; }
|
|
818
|
+
.z-n10 { z-index: -10; }
|
|
819
|
+
.z-n1 { z-index: -1; }
|
|
835
820
|
.z-0 { z-index: 0; }
|
|
836
821
|
.z-10 { z-index: 10; }
|
|
837
822
|
.z-20 { z-index: 20; }
|
|
@@ -885,12 +870,14 @@ textarea {
|
|
|
885
870
|
color: var(--q-color-primary-600);
|
|
886
871
|
}
|
|
887
872
|
|
|
888
|
-
/* Reduced Motion
|
|
873
|
+
/* Reduced Motion Support */
|
|
889
874
|
@media (prefers-reduced-motion: reduce) {
|
|
890
|
-
|
|
891
|
-
|
|
875
|
+
*,
|
|
876
|
+
*::before,
|
|
877
|
+
*::after {
|
|
878
|
+
animation-duration: 0.01ms !important;
|
|
892
879
|
animation-iteration-count: 1 !important;
|
|
893
|
-
transition-duration:
|
|
880
|
+
transition-duration: 0.01ms !important;
|
|
894
881
|
scroll-behavior: auto !important;
|
|
895
882
|
}
|
|
896
883
|
}
|
|
@@ -937,6 +924,39 @@ html[data-theme="light"] {
|
|
|
937
924
|
--q-text-primary: var(--q-light-text);
|
|
938
925
|
--q-text-secondary: var(--q-light-text-muted);
|
|
939
926
|
--q-text-muted: var(--q-light-text-muted);
|
|
927
|
+
|
|
928
|
+
--q-card-bg: color-mix(in srgb, #fff, transparent 5%);
|
|
929
|
+
--q-card-border: color-mix(in srgb, #000, transparent 90%);
|
|
930
|
+
--q-card-shadow: 0 10px 40px rgb(0 0 0 / 10%);
|
|
931
|
+
|
|
932
|
+
--q-btn-primary-bg: linear-gradient(135deg, var(--q-color-starlight-peach) 40%, var(--q-color-starlight-blue) 100%);
|
|
933
|
+
--q-btn-primary-hover-bg: linear-gradient(135deg, var(--q-color-starlight-peach) 50%, var(--q-color-starlight-blue) 110%);
|
|
934
|
+
--q-btn-primary-color: #fff;
|
|
935
|
+
|
|
936
|
+
--q-input-bg: #fff;
|
|
937
|
+
--q-input-border: #cbd5e1;
|
|
938
|
+
|
|
939
|
+
--q-dropdown-bg: rgba(255, 255, 255, 0.98);
|
|
940
|
+
--q-dropdown-border: color-mix(in srgb, #000, transparent 82%);
|
|
941
|
+
--q-dropdown-shadow: 0 15px 50px rgba(0, 0, 0, 0.12);
|
|
942
|
+
|
|
943
|
+
--q-glass-bg: color-mix(in srgb, #fff, transparent 15%);
|
|
944
|
+
--q-glass-border: color-mix(in srgb, #000, transparent 82%);
|
|
945
|
+
|
|
946
|
+
--q-color-bg: var(--q-bg-primary);
|
|
947
|
+
--q-color-surface: var(--q-card-bg);
|
|
948
|
+
--q-color-border: var(--q-card-border);
|
|
949
|
+
--q-color-border-strong: color-mix(in srgb, var(--q-color-border), black 15%);
|
|
950
|
+
--q-color-text: var(--q-text-primary);
|
|
951
|
+
|
|
952
|
+
--q-color-bg-muted: color-mix(in srgb, var(--q-color-bg), black 10%);
|
|
953
|
+
|
|
954
|
+
--q-skeleton-bg: color-mix(in srgb, var(--q-color-bg), black 10%);
|
|
955
|
+
--q-skeleton-shimmer: color-mix(in srgb, var(--q-color-bg), black 5%);
|
|
956
|
+
|
|
957
|
+
/* Highlights & Highlights Transparency */
|
|
958
|
+
--q-highlight-bg: color-mix(in srgb, var(--q-color-primary), transparent 80%);
|
|
959
|
+
--q-highlight-border: color-mix(in srgb, var(--q-color-primary), transparent 60%);
|
|
940
960
|
|
|
941
961
|
scrollbar-color: var(--q-color-starlight-blue) transparent;
|
|
942
962
|
}
|
|
@@ -946,16 +966,49 @@ html[data-theme="dark"] {
|
|
|
946
966
|
|
|
947
967
|
--q-bg-primary: var(--q-color-starlight-deep);
|
|
948
968
|
--q-text-primary: #f1f5f9;
|
|
969
|
+
|
|
970
|
+
--q-card-bg: color-mix(in srgb, #fff, transparent 94%);
|
|
971
|
+
--q-card-border: color-mix(in srgb, #fff, transparent 88%);
|
|
972
|
+
--q-card-shadow: 0 25px 50px -12px rgb(0 0 0 / 60%);
|
|
973
|
+
|
|
974
|
+
--q-btn-primary-bg: #00d4ff;
|
|
975
|
+
--q-btn-primary-hover-bg: #00b8e6;
|
|
976
|
+
--q-btn-primary-color: #fff;
|
|
977
|
+
|
|
978
|
+
--q-input-bg: color-mix(in srgb, #fff, transparent 92%);
|
|
979
|
+
--q-input-border: color-mix(in srgb, #fff, transparent 75%);
|
|
980
|
+
|
|
981
|
+
--q-dropdown-bg: color-mix(in srgb, #08081a, transparent 15%);
|
|
982
|
+
--q-dropdown-border: color-mix(in srgb, #fff, transparent 80%);
|
|
983
|
+
--q-dropdown-shadow: 0 30px 60px rgba(0, 0, 0, 0.5);
|
|
984
|
+
|
|
985
|
+
--q-glass-bg: color-mix(in srgb, #fff, transparent 90%);
|
|
986
|
+
--q-glass-border: color-mix(in srgb, #fff, transparent 85%);
|
|
987
|
+
|
|
988
|
+
--q-color-bg: var(--q-bg-primary);
|
|
989
|
+
--q-color-surface: var(--q-card-bg);
|
|
990
|
+
--q-color-border: var(--q-card-border);
|
|
991
|
+
--q-color-border-strong: color-mix(in srgb, var(--q-color-border), white 15%);
|
|
992
|
+
--q-color-text: var(--q-text-primary);
|
|
993
|
+
|
|
994
|
+
--q-color-bg-muted: color-mix(in srgb, var(--q-color-bg), white 10%);
|
|
995
|
+
|
|
996
|
+
--q-skeleton-bg: color-mix(in srgb, var(--q-color-surface), white 5%);
|
|
997
|
+
--q-skeleton-shimmer: color-mix(in srgb, var(--q-color-surface), white 10%);
|
|
998
|
+
|
|
999
|
+
/* Highlights & Highlights Transparency */
|
|
1000
|
+
--q-highlight-bg: color-mix(in srgb, var(--q-color-primary), transparent 60%);
|
|
1001
|
+
--q-highlight-border: color-mix(in srgb, var(--q-color-primary), transparent 40%);
|
|
949
1002
|
}
|
|
950
1003
|
|
|
951
1004
|
/* Force theme colors on body to override template-specific hardcoded styles */
|
|
952
1005
|
html[data-theme="light"] body {
|
|
953
|
-
background: var(--q-light-bg) !important;
|
|
1006
|
+
background-color: var(--q-light-bg) !important;
|
|
954
1007
|
color: var(--q-light-text);
|
|
955
1008
|
}
|
|
956
1009
|
|
|
957
1010
|
html[data-theme="dark"] body {
|
|
958
|
-
background: var(--q-color-starlight-deep) !important;
|
|
1011
|
+
background-color: var(--q-color-starlight-deep) !important;
|
|
959
1012
|
color: #f1f5f9;
|
|
960
1013
|
}
|
|
961
1014
|
|
|
@@ -1000,12 +1053,11 @@ html[data-theme="light"] :focus, html[data-theme="light"] :focus-visible {
|
|
|
1000
1053
|
body {
|
|
1001
1054
|
margin: 0;
|
|
1002
1055
|
min-height: 100vh;
|
|
1003
|
-
background-color:
|
|
1056
|
+
background-color: transparent;
|
|
1004
1057
|
color: var(--q-text-primary);
|
|
1005
1058
|
transition: background-color var(--q-transition-slow), color var(--q-transition-slow);
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1059
|
+
position: relative;
|
|
1060
|
+
z-index: 1;
|
|
1009
1061
|
}
|
|
1010
1062
|
|
|
1011
1063
|
|