@jaimevalasek/aioson 1.30.1 → 1.30.2

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.
Files changed (90) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/docs/design-previews/cognitive-core-ui-auth.html +95 -0
  3. package/docs/design-previews/cognitive-core-ui-kanban.html +231 -0
  4. package/docs/design-previews/cognitive-core-ui-list-detail.html +174 -0
  5. package/docs/design-previews/cognitive-core-ui-preview.css +1315 -0
  6. package/docs/design-previews/cognitive-core-ui-settings.html +142 -0
  7. package/docs/design-previews/cognitive-core-ui-website.html +190 -1009
  8. package/docs/design-previews/cognitive-core-ui.html +281 -463
  9. package/docs/design-previews/index.html +83 -31
  10. package/package.json +1 -1
  11. package/src/constants.js +567 -511
  12. package/template/.aioson/docs/play/README.md +2 -0
  13. package/template/.aioson/docs/play/agent-usage-guide.md +7 -1
  14. package/template/.aioson/docs/play/app-compatibility-guide.md +6 -1
  15. package/template/.aioson/docs/play/auth-services-and-testing.md +16 -1
  16. package/template/.aioson/docs/play/manifest-and-runtime.md +23 -0
  17. package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +266 -243
  18. package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -293
  19. package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -827
  20. package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -250
  21. package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -585
  22. package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -365
  23. package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +485 -482
  24. package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +386 -387
  25. package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +228 -205
  26. package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -338
  27. package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -977
  28. package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -218
  29. package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -326
  30. package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -461
  31. package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -293
  32. package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -352
  33. package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +233 -210
  34. package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -319
  35. package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -365
  36. package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -196
  37. package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -244
  38. package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -235
  39. package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -215
  40. package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -295
  41. package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +239 -203
  42. package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -339
  43. package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +417 -407
  44. package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +289 -272
  45. package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +525 -524
  46. package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +279 -279
  47. package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +355 -289
  48. package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +443 -437
  49. package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +245 -222
  50. package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -159
  51. package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -498
  52. package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -236
  53. package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -274
  54. package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -355
  55. package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -198
  56. package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -307
  57. package/template/.aioson/skills/design/interface-design/SKILL.md +68 -47
  58. package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -105
  59. package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -101
  60. package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +92 -71
  61. package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -74
  62. package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -173
  63. package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +236 -213
  64. package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -228
  65. package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -855
  66. package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -334
  67. package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -342
  68. package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -286
  69. package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -458
  70. package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -723
  71. package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +83 -62
  72. package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -74
  73. package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -116
  74. package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -47
  75. package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -215
  76. package/template/.aioson/skills/design/pt.squarespace.com/.skill-meta.json +31 -31
  77. package/template/.aioson/skills/design/pt.squarespace.com/SKILL.md +94 -66
  78. package/template/.aioson/skills/design/pt.squarespace.com/references/components.md +366 -366
  79. package/template/.aioson/skills/design/pt.squarespace.com/references/design-tokens.md +150 -150
  80. package/template/.aioson/skills/design/pt.squarespace.com/references/motion.md +270 -270
  81. package/template/.aioson/skills/design/pt.squarespace.com/references/patterns.md +189 -189
  82. package/template/.aioson/skills/design/pt.squarespace.com/references/websites.md +161 -161
  83. package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +232 -209
  84. package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -324
  85. package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -508
  86. package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -223
  87. package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -374
  88. package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -356
  89. package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -288
  90. package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -289
@@ -1,585 +1,585 @@
1
- # Design Tokens — Aurora Command UI
2
-
3
- This is the source of truth for all CSS custom properties. Apply shared tokens on `:root`, theme-specific tokens on `[data-theme]`. Never hardcode values in components.
4
-
5
- ---
6
-
7
- ## Typography strategy
8
-
9
- Default to **system fonts** first. Add Google Fonts when the agent determines the stack and context justifies them.
10
-
11
- **System font stack (default — works everywhere, no CDN needed):**
12
- ```css
13
- --font-display: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", system-ui, sans-serif;
14
- --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", system-ui, sans-serif;
15
- --font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
16
- ```
17
-
18
- **Google Fonts (optional — use when building a polished product explicitly):**
19
- ```css
20
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap');
21
-
22
- --font-display: 'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
23
- --font-body: 'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
24
- --font-mono: 'JetBrains Mono', ui-monospace, monospace;
25
- ```
26
-
27
- ---
28
-
29
- ## Complete CSS Variables
30
-
31
- Include this full block in every Aurora Command project.
32
-
33
- ```css
34
- /* ═══════════════════════════════════════════
35
- SHARED TOKENS — :root (non-theme-specific)
36
- ═══════════════════════════════════════════ */
37
- :root {
38
- /* Typography */
39
- --font-display: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
40
- --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
41
- --font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
42
-
43
- /* Font Sizes */
44
- --text-xs: 0.72rem; /* 11.5px — mono labels, micro badges */
45
- --text-sm: 0.82rem; /* 13px */
46
- --text-base: 0.95rem; /* 15px — default body */
47
- --text-lg: 1rem; /* 16px */
48
- --text-xl: 1.25rem; /* 20px */
49
- --text-2xl: 1.6rem; /* 25.6px */
50
- --text-3xl: 2.2rem; /* 35px */
51
- --text-4xl: 3rem; /* 48px — stat numbers */
52
- --text-5xl: 4rem; /* 64px — hero headings */
53
-
54
- /* Font Weights */
55
- --weight-light: 300;
56
- --weight-normal: 400;
57
- --weight-medium: 500;
58
- --weight-semibold: 600;
59
- --weight-bold: 700;
60
- --weight-black: 800;
61
-
62
- /* Letter Spacing */
63
- --tracking-tight: -0.025em;
64
- --tracking-normal: 0;
65
- --tracking-wide: 0.04em;
66
- --tracking-wider: 0.08em;
67
- --tracking-widest: 0.12em;
68
-
69
- /* Line Height */
70
- --leading-none: 1;
71
- --leading-tight: 1.08;
72
- --leading-snug: 1.24;
73
- --leading-normal: 1.5;
74
- --leading-relaxed: 1.68;
75
-
76
- /* Spacing */
77
- --space-0: 0;
78
- --space-1: 0.25rem; /* 4px */
79
- --space-2: 0.5rem; /* 8px */
80
- --space-3: 0.75rem; /* 12px */
81
- --space-4: 1rem; /* 16px */
82
- --space-5: 1.25rem; /* 20px */
83
- --space-6: 1.5rem; /* 24px */
84
- --space-8: 2rem; /* 32px */
85
- --space-10: 2.5rem; /* 40px */
86
- --space-12: 3rem; /* 48px */
87
- --space-16: 4rem; /* 64px */
88
- --space-20: 5rem; /* 80px */
89
- --space-24: 6rem; /* 96px */
90
- --space-32: 8rem; /* 128px — hero sections */
91
-
92
- /* Border Radius */
93
- --radius-sm: 0.375rem; /* 6px — badges, chips */
94
- --radius-md: 0.625rem; /* 10px — inputs, buttons */
95
- --radius-lg: 0.875rem; /* 14px — small cards */
96
- --radius-xl: 1.125rem; /* 18px — standard glass cards */
97
- --radius-2xl: 1.5rem; /* 24px — large glass cards */
98
- --radius-3xl: 2rem; /* 32px — hero glass cards */
99
- --radius-full: 9999px; /* pills, avatars, toggles */
100
-
101
- /* Interactive element heights */
102
- --control-xs: 1.75rem; /* 28px — compact chips */
103
- --control-sm: 2rem; /* 32px — compact controls */
104
- --control-md: 2.5rem; /* 40px — standard inputs */
105
- --control-lg: 2.75rem; /* 44px — primary buttons */
106
-
107
- /* Layout */
108
- --sidebar-width: 210px;
109
- --content-sm: 480px;
110
- --content-md: 640px;
111
- --content-lg: 800px;
112
- --content-xl: 1024px;
113
- --content-max: 1280px;
114
- --nav-height: 60px;
115
- --nav-height-web: 68px;
116
-
117
- /* Transitions */
118
- --transition-fast: 140ms ease;
119
- --transition-base: 200ms ease;
120
- --transition-slow: 300ms cubic-bezier(0.16, 1, 0.3, 1);
121
- --transition-glass: backdrop-filter 300ms ease, background 300ms ease, border-color 300ms ease, box-shadow 300ms ease;
122
- --transition-hero: 600ms cubic-bezier(0.16, 1, 0.3, 1);
123
- --transition-theme: background 240ms ease, color 240ms ease, border-color 240ms ease, box-shadow 240ms ease;
124
-
125
- /* Focus */
126
- --focus-ring-width: 2px;
127
- --focus-ring-offset: 2px;
128
-
129
- /* Z-index */
130
- --z-base: 0;
131
- --z-elevated: 10;
132
- --z-dropdown: 20;
133
- --z-sticky: 30;
134
- --z-modal: 50;
135
- --z-toast: 60;
136
- }
137
-
138
- /* ═══════════════════════════════════════════
139
- DARK THEME (default)
140
- ═══════════════════════════════════════════ */
141
- [data-theme="dark"] {
142
- /* ── Aurora Substrate ── */
143
- --bg-void: #040609;
144
- --bg-base: #060910;
145
- --bg-gradient: linear-gradient(135deg, #060910 0%, #0A0818 30%, #060C1A 70%, #08060F 100%);
146
-
147
- /* ── Dark Glass Surfaces ── */
148
- /* These are DARK TINTED — aurora shows through, not bright/white */
149
- --glass-shell: rgba(8, 12, 22, 0.75); /* top bar, sidebar */
150
- --glass-surface: rgba(10, 14, 26, 0.65); /* standard cards */
151
- --glass-elevated: rgba(14, 20, 36, 0.75); /* hover, nested cards */
152
- --glass-overlay: rgba(6, 10, 18, 0.85); /* modals, drawers */
153
-
154
- /* ── Glass System Tokens ── */
155
- --glass-border: rgba(255, 255, 255, 0.10);
156
- --glass-border-strong: rgba(255, 255, 255, 0.18);
157
- --glass-border-accent: rgba(0, 200, 232, 0.30);
158
- --glass-highlight: linear-gradient(180deg, rgba(255,255,255,0.07) 0%, transparent 50%);
159
-
160
- /* Fallback (when backdrop-filter is unsupported) */
161
- --glass-fallback: rgba(8, 12, 22, 0.95);
162
-
163
- /* ── Blur Levels ── */
164
- --glass-blur-sm: blur(8px); /* working surfaces, dense data panels */
165
- --glass-blur-md: blur(16px); /* standard glass cards */
166
- --glass-blur-lg: blur(24px); /* sidebar, top bar, elevated modals */
167
- --glass-blur-xl: blur(40px); /* decorative orbs, extreme blur elements */
168
-
169
- /* ── Accents ── */
170
- --accent-primary: #00C8E8; /* teal-electric — operational, active states */
171
- --accent-violet: #7C3AED; /* violet — highlights, CTAs */
172
- --accent-gradient: linear-gradient(135deg, #00C8E8, #7C3AED);
173
- --accent-primary-dim: rgba(0, 200, 232, 0.15);
174
- --accent-violet-dim: rgba(124, 58, 237, 0.15);
175
- --accent-glow: rgba(0, 200, 232, 0.12);
176
- --accent-violet-glow: rgba(124, 58, 237, 0.18);
177
- --accent-contrast: #04090F; /* text on accent background */
178
-
179
- /* ── Text ── */
180
- --text-heading: #F0F4FA;
181
- --text-primary: #C8D4E8;
182
- --text-secondary: #8898B0;
183
- --text-muted: #556070;
184
- --text-accent: #00C8E8;
185
- --text-inverse: #04090F;
186
-
187
- /* ── Semantic Colors ── */
188
- --semantic-green: #00D68F;
189
- --semantic-green-dim: rgba(0, 214, 143, 0.15);
190
- --semantic-amber: #F4A91D;
191
- --semantic-amber-dim: rgba(244, 169, 29, 0.15);
192
- --semantic-red: #FF5A67;
193
- --semantic-red-dim: rgba(255, 90, 103, 0.15);
194
- --semantic-purple: #A78BFA;
195
- --semantic-purple-dim: rgba(167, 139, 250, 0.15);
196
- --semantic-blue: #38BDF8;
197
- --semantic-blue-dim: rgba(56, 189, 248, 0.15);
198
-
199
- /* ── Shadows — teal-electric tinted ── */
200
- --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.30);
201
- --shadow-md: 0 8px 24px rgba(0, 0, 0, 0.40);
202
- --shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.50);
203
- --shadow-glow: 0 0 30px rgba(0, 200, 232, 0.12), 0 8px 24px rgba(0, 0, 0, 0.40);
204
- --shadow-glow-strong: 0 0 50px rgba(0, 200, 232, 0.22), 0 0 20px rgba(0, 200, 232, 0.12);
205
- --shadow-violet-glow: 0 0 30px rgba(124, 58, 237, 0.20), 0 8px 24px rgba(0, 0, 0, 0.40);
206
- --shadow-inner: inset 0 1px 0 rgba(255, 255, 255, 0.07);
207
-
208
- /* ── Borders (non-glass elements) ── */
209
- --border-subtle: rgba(255, 255, 255, 0.06);
210
- --border-medium: rgba(255, 255, 255, 0.10);
211
- --border-strong: rgba(255, 255, 255, 0.16);
212
- --border-accent: rgba(0, 200, 232, 0.26);
213
- --border-accent-strong: rgba(0, 200, 232, 0.50);
214
-
215
- /* Scrollbar */
216
- --scrollbar-track: #060910;
217
- --scrollbar-thumb: rgba(14, 20, 36, 0.90);
218
- }
219
-
220
- /* ═══════════════════════════════════════════
221
- LIGHT THEME (soft aurora — lavender-gray)
222
- ═══════════════════════════════════════════ */
223
- [data-theme="light"] {
224
- /* ── Light Aurora Substrate ── */
225
- --bg-void: #E5E4EF;
226
- --bg-base: #EDEEF6;
227
- --bg-gradient: linear-gradient(135deg, #EDEEF6 0%, #E0DFEF 30%, #D8DEF0 70%, #EAE6F2 100%);
228
-
229
- /* ── White Glass Surfaces ── */
230
- --glass-shell: rgba(255, 255, 255, 0.70);
231
- --glass-surface: rgba(255, 255, 255, 0.60);
232
- --glass-elevated: rgba(255, 255, 255, 0.80);
233
- --glass-overlay: rgba(255, 255, 255, 0.40);
234
-
235
- --glass-border: rgba(255, 255, 255, 0.50);
236
- --glass-border-strong: rgba(255, 255, 255, 0.70);
237
- --glass-border-accent: rgba(0, 150, 180, 0.30);
238
- --glass-highlight: linear-gradient(180deg, rgba(255,255,255,0.30) 0%, transparent 50%);
239
-
240
- --glass-fallback: rgba(255, 255, 255, 0.95);
241
-
242
- /* Blur levels same as dark */
243
- --glass-blur-sm: blur(8px);
244
- --glass-blur-md: blur(16px);
245
- --glass-blur-lg: blur(24px);
246
- --glass-blur-xl: blur(40px);
247
-
248
- /* ── Accents (shifted for light legibility) ── */
249
- --accent-primary: #0096B0;
250
- --accent-violet: #6D28D9;
251
- --accent-gradient: linear-gradient(135deg, #0096B0, #6D28D9);
252
- --accent-primary-dim: rgba(0, 150, 176, 0.12);
253
- --accent-violet-dim: rgba(109, 40, 217, 0.10);
254
- --accent-glow: rgba(0, 150, 176, 0.10);
255
- --accent-violet-glow: rgba(109, 40, 217, 0.12);
256
- --accent-contrast: #FFFFFF;
257
-
258
- /* ── Text ── */
259
- --text-heading: #0F1520;
260
- --text-primary: #2A3548;
261
- --text-secondary: #5A6880;
262
- --text-muted: #8898A8;
263
- --text-accent: #0096B0;
264
- --text-inverse: #FFFFFF;
265
-
266
- /* ── Semantic Colors ── */
267
- --semantic-green: #059669;
268
- --semantic-green-dim: rgba(5, 150, 105, 0.10);
269
- --semantic-amber: #D97706;
270
- --semantic-amber-dim: rgba(217, 119, 6, 0.10);
271
- --semantic-red: #DC2626;
272
- --semantic-red-dim: rgba(220, 38, 38, 0.10);
273
- --semantic-purple: #7C3AED;
274
- --semantic-purple-dim: rgba(124, 58, 237, 0.10);
275
- --semantic-blue: #2563EB;
276
- --semantic-blue-dim: rgba(37, 99, 235, 0.10);
277
-
278
- /* ── Shadows — tinted with light teal ── */
279
- --shadow-sm: 0 1px 3px rgba(0, 150, 176, 0.06);
280
- --shadow-md: 0 8px 24px rgba(0, 150, 176, 0.10);
281
- --shadow-lg: 0 16px 48px rgba(0, 150, 176, 0.14);
282
- --shadow-glow: 0 0 30px rgba(0, 150, 176, 0.12), 0 8px 24px rgba(15, 21, 32, 0.08);
283
- --shadow-glow-strong: 0 0 50px rgba(0, 150, 176, 0.20), 0 0 20px rgba(0, 150, 176, 0.10);
284
- --shadow-violet-glow: 0 0 30px rgba(109, 40, 217, 0.14), 0 8px 24px rgba(15, 21, 32, 0.08);
285
- --shadow-inner: inset 0 1px 0 rgba(255, 255, 255, 0.50);
286
-
287
- /* ── Borders ── */
288
- --border-subtle: rgba(15, 21, 32, 0.07);
289
- --border-medium: rgba(15, 21, 32, 0.12);
290
- --border-strong: rgba(15, 21, 32, 0.18);
291
- --border-accent: rgba(0, 150, 176, 0.22);
292
- --border-accent-strong: rgba(0, 150, 176, 0.40);
293
-
294
- /* Scrollbar */
295
- --scrollbar-track: #EDEEF6;
296
- --scrollbar-thumb: rgba(200, 210, 230, 0.80);
297
- }
298
-
299
- /* ═══════════════════════════════════════════
300
- BASE STYLES
301
- ═══════════════════════════════════════════ */
302
- html, body {
303
- min-height: 100vh;
304
- margin: 0;
305
- -webkit-font-smoothing: antialiased;
306
- -moz-osx-font-smoothing: grayscale;
307
- }
308
-
309
- /* Aurora substrate — must be on the root element */
310
- body[data-theme], #app[data-theme], .aurora-shell[data-theme] {
311
- background: var(--bg-gradient);
312
- background-attachment: fixed;
313
- font-family: var(--font-body);
314
- color: var(--text-primary);
315
- transition: var(--transition-theme);
316
- }
317
-
318
- *, *::before, *::after { box-sizing: border-box; }
319
-
320
- /* Custom scrollbar */
321
- ::-webkit-scrollbar { width: 6px; height: 6px; }
322
- ::-webkit-scrollbar-track { background: var(--scrollbar-track); }
323
- ::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: var(--radius-full); }
324
- ::-webkit-scrollbar-thumb:hover { background: var(--border-medium); }
325
- ```
326
-
327
- ---
328
-
329
- ## Glass Tokens — Usage Guide
330
-
331
- ### The three glass levels
332
-
333
- ```css
334
- /* Level 1 — Shell (sidebar, top bar) */
335
- .glass-shell {
336
- background: var(--glass-shell); /* dark: rgba(8,12,22,0.75) */
337
- backdrop-filter: var(--glass-blur-lg);
338
- border-color: var(--glass-border);
339
- }
340
-
341
- /* Level 2 — Surface cards (standard content containers) */
342
- .glass-surface {
343
- background: var(--glass-surface); /* dark: rgba(10,14,26,0.65) */
344
- backdrop-filter: var(--glass-blur-md);
345
- border-color: var(--glass-border);
346
- }
347
-
348
- /* Level 3 — Elevated (hover state, nested cards, modals) */
349
- .glass-elevated {
350
- background: var(--glass-elevated); /* dark: rgba(14,20,36,0.75) */
351
- backdrop-filter: var(--glass-blur-md);
352
- border-color: var(--glass-border-strong);
353
- }
354
- ```
355
-
356
- ### Mandatory @supports fallback
357
-
358
- Every glass surface must have a fallback for browsers that do not support `backdrop-filter`:
359
-
360
- ```css
361
- .glass-card {
362
- background: var(--glass-fallback); /* solid fallback */
363
- }
364
-
365
- @supports (backdrop-filter: blur(1px)) {
366
- .glass-card {
367
- background: var(--glass-surface);
368
- backdrop-filter: var(--glass-blur-md);
369
- }
370
- }
371
- ```
372
-
373
- ### Top reflection pseudo-element
374
-
375
- Every glass card must have the `::before` reflection. This is what makes the glass feel real.
376
-
377
- ```css
378
- .glass-card {
379
- position: relative;
380
- overflow: hidden;
381
- }
382
- .glass-card::before {
383
- content: '';
384
- position: absolute;
385
- top: 0; left: 0; right: 0;
386
- height: 50%;
387
- background: var(--glass-highlight);
388
- pointer-events: none;
389
- border-radius: inherit;
390
- }
391
- ```
392
-
393
- ---
394
-
395
- ## Typography Patterns
396
-
397
- ### Mono Rail — the command spine
398
-
399
- The most distinctive element of this skill. Use it exclusively for section headers, stat labels, metadata rails, IDs, and timestamps.
400
-
401
- ```css
402
- .mono-rail {
403
- font-family: var(--font-mono);
404
- font-size: var(--text-xs);
405
- font-weight: var(--weight-semibold);
406
- letter-spacing: var(--tracking-widest);
407
- text-transform: uppercase;
408
- color: var(--text-muted);
409
- }
410
- ```
411
-
412
- **Do not overuse** — if every text element is uppercase mono, the command rails lose their authority.
413
-
414
- ### Display Heading
415
-
416
- ```css
417
- .display-heading {
418
- font-family: var(--font-display);
419
- font-weight: var(--weight-bold);
420
- letter-spacing: var(--tracking-tight);
421
- line-height: var(--leading-tight);
422
- color: var(--text-heading);
423
- }
424
- /* Sizes: --text-5xl (hero) · --text-3xl (page title) · --text-2xl (section) · --text-xl (card title) */
425
- ```
426
-
427
- ### Stat Number (standard)
428
-
429
- ```css
430
- .stat-number {
431
- font-family: var(--font-display);
432
- font-size: var(--text-4xl);
433
- font-weight: var(--weight-bold);
434
- line-height: var(--leading-none);
435
- color: var(--text-heading);
436
- font-variant-numeric: tabular-nums;
437
- font-feature-settings: "tnum" 1;
438
- }
439
- ```
440
-
441
- ### Gradient Stat Number (hero metric only)
442
-
443
- Use for the single most important metric on the page — not all stats.
444
-
445
- ```css
446
- .stat-number--gradient {
447
- background: var(--accent-gradient);
448
- -webkit-background-clip: text;
449
- -webkit-text-fill-color: transparent;
450
- background-clip: text;
451
- font-size: var(--text-4xl);
452
- font-weight: var(--weight-bold);
453
- line-height: var(--leading-none);
454
- font-variant-numeric: tabular-nums;
455
- }
456
- ```
457
-
458
- ### Body Text
459
-
460
- ```css
461
- .body-text {
462
- font-family: var(--font-body);
463
- font-size: var(--text-base);
464
- font-weight: var(--weight-normal);
465
- line-height: var(--leading-relaxed);
466
- color: var(--text-primary);
467
- }
468
- ```
469
-
470
- ---
471
-
472
- ## Token Scope Guardrails
473
-
474
- **Rule 1:** Typography, spacing, radius, and transition tokens belong in `:root` — NOT in `[data-theme]`.
475
-
476
- **Rule 2:** Theme-specific colors and glass surfaces belong in `[data-theme]`.
477
-
478
- **Rule 3:** If `body` consumes `var(--font-body)`, that variable must exist in `:root` or a scope `body` inherits.
479
-
480
- **Rule 4:** If the theme lives on a container (`.shell[data-theme]`), either keep typography in `:root`, or apply `font-family` directly on that shell element.
481
-
482
- **Unsafe (font breaks silently):**
483
- ```css
484
- /* WRONG — body cannot inherit from .shell */
485
- .shell[data-theme="dark"] { --font-body: 'Inter', sans-serif; }
486
- body { font-family: var(--font-body); }
487
- ```
488
-
489
- **Safe:**
490
- ```css
491
- :root { --font-body: 'Inter', system-ui, sans-serif; }
492
- body { font-family: var(--font-body); }
493
- .shell[data-theme="dark"] { --bg-base: #060910; }
494
- ```
495
-
496
- ---
497
-
498
- ## Compact Density Scale
499
-
500
- For dashboards, admin panels, settings, and any dense operational UI.
501
-
502
- ### Card container scale
503
-
504
- | Level | Use | Padding | Border Radius |
505
- |---|---|---|---|
506
- | L1 — page glass card | top-level section | `var(--space-5)` | `var(--radius-xl)` (18px) |
507
- | L2 — nested glass card | card inside a card | `var(--space-4)` | `var(--radius-lg)` (14px) |
508
- | L3 — inset block | disclosure body, info block | `10px` | `var(--radius-md)` (10px) |
509
-
510
- Between L1 cards: `gap: var(--space-3)` (not `--space-6`).
511
-
512
- ### Form controls — operational context
513
-
514
- ```
515
- Input : px-3 py-2 text-xs border-radius: var(--radius-md) (~32px height)
516
- Select : px-3 py-2 text-xs border-radius: var(--radius-md)
517
- Label : font-mono text-[0.65rem] mb: var(--space-1)
518
- Button : px-3 py-2 text-xs border-radius: var(--radius-md)
519
- ```
520
-
521
- ### Badges — compact
522
-
523
- ```
524
- Status : px-2 py-0.5 text-[0.6rem] rounded-full
525
- Tag : px-2 py-0.5 text-[0.58rem] rounded-full
526
- ```
527
-
528
- ### List rows
529
-
530
- ```
531
- Row padding : py-2 (8px) — not py-3 or py-4
532
- Row gap : gap-2.5 (10px)
533
- ```
534
-
535
- ---
536
-
537
- ## Chart Palette
538
-
539
- Consistent chart colors across all dashboards:
540
-
541
- ```css
542
- --chart-1: var(--accent-primary); /* #00C8E8 teal — primary series */
543
- --chart-2: var(--accent-violet); /* #7C3AED violet — secondary series */
544
- --chart-3: var(--semantic-green); /* #00D68F emerald — positive metric */
545
- --chart-4: var(--semantic-amber); /* #F4A91D amber — warning/neutral */
546
- --chart-5: var(--semantic-purple); /* #A78BFA purple — tertiary series */
547
- --chart-6: var(--semantic-blue); /* #38BDF8 blue — informational */
548
-
549
- /* Area/gradient chart fills */
550
- --chart-fill-1: linear-gradient(180deg, rgba(0, 200, 232, 0.25) 0%, rgba(0, 200, 232, 0) 100%);
551
- --chart-fill-2: linear-gradient(180deg, rgba(124, 58, 237, 0.20) 0%, rgba(124, 58, 237, 0) 100%);
552
- --chart-fill-3: linear-gradient(180deg, rgba(0, 214, 143, 0.20) 0%, rgba(0, 214, 143, 0) 100%);
553
- --chart-fill-4: linear-gradient(180deg, rgba(244, 169, 29, 0.20) 0%, rgba(244, 169, 29, 0) 100%);
554
- ```
555
-
556
- Chart rules:
557
- - Area charts: always gradient fill (top color → transparent), never solid fill. The fade reveals the glass panel below.
558
- - Grid lines: `rgba(255,255,255,0.06)` on dark, `rgba(0,0,0,0.06)` on light.
559
- - Tooltips: glass card (glass-surface + blur-sm + luminous border) — never a solid white box.
560
- - Axis labels: `var(--text-muted)`, `var(--text-xs)`.
561
-
562
- ---
563
-
564
- ## Interaction Guardrails
565
-
566
- 1. Primary actions on accent backgrounds must use `var(--accent-contrast)`.
567
- 2. Hover states must preserve or improve text contrast — never reduce it.
568
- 3. Focus styles must be visible on both themes: `outline: var(--focus-ring-width) solid var(--accent-primary)` with `outline-offset: var(--focus-ring-offset)`.
569
- 4. Glass hover: `var(--glass-surface)` → `var(--glass-elevated)`, `200ms`.
570
- 5. One accent gradient family and two neutral text tiers — do not add decorative colors.
571
-
572
- ---
573
-
574
- ## Non-Negotiable Rules
575
-
576
- 1. Aurora gradient substrate is mandatory. Never place glass panels over a solid background.
577
- 2. Dark glass opacity must reveal the aurora — keep alpha at or below 0.75.
578
- 3. Use the token system — never freestyle hex values.
579
- 4. Teal-electric and violet are the only accents — never introduce a third accent color.
580
- 5. Mono labels are structural rails — use them for section headers, stat labels, and metadata only.
581
- 6. Always include `@supports (backdrop-filter: blur(1px))` fallback for every glass surface.
582
- 7. One gradient stat number per viewport (the hero metric). Do not gradient-text all stats.
583
- 8. Compact density for operational UI — never carry marketing spacing into dense dashboards.
584
- 9. Shadows must be tinted with `rgba(0,200,232,...)` — never solid black shadows.
585
- 10. Every glass card must pass WCAG AA for body text over its dark glass surface.
1
+ # Design Tokens — Aurora Command UI
2
+
3
+ This is the source of truth for all CSS custom properties. Apply shared tokens on `:root`, theme-specific tokens on `[data-theme]`. Never hardcode values in components.
4
+
5
+ ---
6
+
7
+ ## Typography strategy
8
+
9
+ Default to **system fonts** first. Add Google Fonts when the agent determines the stack and context justifies them.
10
+
11
+ **System font stack (default — works everywhere, no CDN needed):**
12
+ ```css
13
+ --font-display: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", system-ui, sans-serif;
14
+ --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", system-ui, sans-serif;
15
+ --font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
16
+ ```
17
+
18
+ **Google Fonts (optional — use when building a polished product explicitly):**
19
+ ```css
20
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap');
21
+
22
+ --font-display: 'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
23
+ --font-body: 'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
24
+ --font-mono: 'JetBrains Mono', ui-monospace, monospace;
25
+ ```
26
+
27
+ ---
28
+
29
+ ## Complete CSS Variables
30
+
31
+ Include this full block in every Aurora Command project.
32
+
33
+ ```css
34
+ /* ═══════════════════════════════════════════
35
+ SHARED TOKENS — :root (non-theme-specific)
36
+ ═══════════════════════════════════════════ */
37
+ :root {
38
+ /* Typography */
39
+ --font-display: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
40
+ --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
41
+ --font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
42
+
43
+ /* Font Sizes */
44
+ --text-xs: 0.72rem; /* 11.5px — mono labels, micro badges */
45
+ --text-sm: 0.82rem; /* 13px */
46
+ --text-base: 0.95rem; /* 15px — default body */
47
+ --text-lg: 1rem; /* 16px */
48
+ --text-xl: 1.25rem; /* 20px */
49
+ --text-2xl: 1.6rem; /* 25.6px */
50
+ --text-3xl: 2.2rem; /* 35px */
51
+ --text-4xl: 3rem; /* 48px — stat numbers */
52
+ --text-5xl: 4rem; /* 64px — hero headings */
53
+
54
+ /* Font Weights */
55
+ --weight-light: 300;
56
+ --weight-normal: 400;
57
+ --weight-medium: 500;
58
+ --weight-semibold: 600;
59
+ --weight-bold: 700;
60
+ --weight-black: 800;
61
+
62
+ /* Letter Spacing */
63
+ --tracking-tight: 0;
64
+ --tracking-normal: 0;
65
+ --tracking-wide: 0.04em;
66
+ --tracking-wider: 0.08em;
67
+ --tracking-widest: 0.12em;
68
+
69
+ /* Line Height */
70
+ --leading-none: 1;
71
+ --leading-tight: 1.08;
72
+ --leading-snug: 1.24;
73
+ --leading-normal: 1.5;
74
+ --leading-relaxed: 1.68;
75
+
76
+ /* Spacing */
77
+ --space-0: 0;
78
+ --space-1: 0.25rem; /* 4px */
79
+ --space-2: 0.5rem; /* 8px */
80
+ --space-3: 0.75rem; /* 12px */
81
+ --space-4: 1rem; /* 16px */
82
+ --space-5: 1.25rem; /* 20px */
83
+ --space-6: 1.5rem; /* 24px */
84
+ --space-8: 2rem; /* 32px */
85
+ --space-10: 2.5rem; /* 40px */
86
+ --space-12: 3rem; /* 48px */
87
+ --space-16: 4rem; /* 64px */
88
+ --space-20: 5rem; /* 80px */
89
+ --space-24: 6rem; /* 96px */
90
+ --space-32: 8rem; /* 128px — hero sections */
91
+
92
+ /* Border Radius */
93
+ --radius-sm: 0.375rem; /* 6px — badges, chips */
94
+ --radius-md: 0.625rem; /* 10px — inputs, buttons */
95
+ --radius-lg: 0.875rem; /* 14px — small cards */
96
+ --radius-xl: 1.125rem; /* 18px — standard glass cards */
97
+ --radius-2xl: 1.5rem; /* 24px — large glass cards */
98
+ --radius-3xl: 2rem; /* 32px — hero glass cards */
99
+ --radius-full: 9999px; /* pills, avatars, toggles */
100
+
101
+ /* Interactive element heights */
102
+ --control-xs: 1.75rem; /* 28px — compact chips */
103
+ --control-sm: 2rem; /* 32px — compact controls */
104
+ --control-md: 2.5rem; /* 40px — standard inputs */
105
+ --control-lg: 2.75rem; /* 44px — primary buttons */
106
+
107
+ /* Layout */
108
+ --sidebar-width: 210px;
109
+ --content-sm: 480px;
110
+ --content-md: 640px;
111
+ --content-lg: 800px;
112
+ --content-xl: 1024px;
113
+ --content-max: 1280px;
114
+ --nav-height: 60px;
115
+ --nav-height-web: 68px;
116
+
117
+ /* Transitions */
118
+ --transition-fast: 140ms ease;
119
+ --transition-base: 200ms ease;
120
+ --transition-slow: 300ms cubic-bezier(0.16, 1, 0.3, 1);
121
+ --transition-glass: backdrop-filter 300ms ease, background 300ms ease, border-color 300ms ease, box-shadow 300ms ease;
122
+ --transition-hero: 600ms cubic-bezier(0.16, 1, 0.3, 1);
123
+ --transition-theme: background 240ms ease, color 240ms ease, border-color 240ms ease, box-shadow 240ms ease;
124
+
125
+ /* Focus */
126
+ --focus-ring-width: 2px;
127
+ --focus-ring-offset: 2px;
128
+
129
+ /* Z-index */
130
+ --z-base: 0;
131
+ --z-elevated: 10;
132
+ --z-dropdown: 20;
133
+ --z-sticky: 30;
134
+ --z-modal: 50;
135
+ --z-toast: 60;
136
+ }
137
+
138
+ /* ═══════════════════════════════════════════
139
+ DARK THEME (default)
140
+ ═══════════════════════════════════════════ */
141
+ [data-theme="dark"] {
142
+ /* ── Aurora Substrate ── */
143
+ --bg-void: #040609;
144
+ --bg-base: #060910;
145
+ --bg-gradient: linear-gradient(135deg, #060910 0%, #0A0818 30%, #060C1A 70%, #08060F 100%);
146
+
147
+ /* ── Dark Glass Surfaces ── */
148
+ /* These are DARK TINTED — aurora shows through, not bright/white */
149
+ --glass-shell: rgba(8, 12, 22, 0.75); /* top bar, sidebar */
150
+ --glass-surface: rgba(10, 14, 26, 0.65); /* standard cards */
151
+ --glass-elevated: rgba(14, 20, 36, 0.75); /* hover, nested cards */
152
+ --glass-overlay: rgba(6, 10, 18, 0.85); /* modals, drawers */
153
+
154
+ /* ── Glass System Tokens ── */
155
+ --glass-border: rgba(255, 255, 255, 0.10);
156
+ --glass-border-strong: rgba(255, 255, 255, 0.18);
157
+ --glass-border-accent: rgba(0, 200, 232, 0.30);
158
+ --glass-highlight: linear-gradient(180deg, rgba(255,255,255,0.07) 0%, transparent 50%);
159
+
160
+ /* Fallback (when backdrop-filter is unsupported) */
161
+ --glass-fallback: rgba(8, 12, 22, 0.95);
162
+
163
+ /* ── Blur Levels ── */
164
+ --glass-blur-sm: blur(8px); /* working surfaces, dense data panels */
165
+ --glass-blur-md: blur(16px); /* standard glass cards */
166
+ --glass-blur-lg: blur(24px); /* sidebar, top bar, elevated modals */
167
+ --glass-blur-xl: blur(40px); /* ambient field diffusion, media backdrops */
168
+
169
+ /* ── Accents ── */
170
+ --accent-primary: #00C8E8; /* teal-electric — operational, active states */
171
+ --accent-violet: #7C3AED; /* violet — highlights, CTAs */
172
+ --accent-gradient: linear-gradient(135deg, #00C8E8, #7C3AED);
173
+ --accent-primary-dim: rgba(0, 200, 232, 0.15);
174
+ --accent-violet-dim: rgba(124, 58, 237, 0.15);
175
+ --accent-glow: rgba(0, 200, 232, 0.12);
176
+ --accent-violet-glow: rgba(124, 58, 237, 0.18);
177
+ --accent-contrast: #04090F; /* text on accent background */
178
+
179
+ /* ── Text ── */
180
+ --text-heading: #F0F4FA;
181
+ --text-primary: #C8D4E8;
182
+ --text-secondary: #8898B0;
183
+ --text-muted: #556070;
184
+ --text-accent: #00C8E8;
185
+ --text-inverse: #04090F;
186
+
187
+ /* ── Semantic Colors ── */
188
+ --semantic-green: #00D68F;
189
+ --semantic-green-dim: rgba(0, 214, 143, 0.15);
190
+ --semantic-amber: #F4A91D;
191
+ --semantic-amber-dim: rgba(244, 169, 29, 0.15);
192
+ --semantic-red: #FF5A67;
193
+ --semantic-red-dim: rgba(255, 90, 103, 0.15);
194
+ --semantic-purple: #A78BFA;
195
+ --semantic-purple-dim: rgba(167, 139, 250, 0.15);
196
+ --semantic-blue: #38BDF8;
197
+ --semantic-blue-dim: rgba(56, 189, 248, 0.15);
198
+
199
+ /* ── Shadows — teal-electric tinted ── */
200
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.30);
201
+ --shadow-md: 0 8px 24px rgba(0, 0, 0, 0.40);
202
+ --shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.50);
203
+ --shadow-glow: 0 0 30px rgba(0, 200, 232, 0.12), 0 8px 24px rgba(0, 0, 0, 0.40);
204
+ --shadow-glow-strong: 0 0 50px rgba(0, 200, 232, 0.22), 0 0 20px rgba(0, 200, 232, 0.12);
205
+ --shadow-violet-glow: 0 0 30px rgba(124, 58, 237, 0.20), 0 8px 24px rgba(0, 0, 0, 0.40);
206
+ --shadow-inner: inset 0 1px 0 rgba(255, 255, 255, 0.07);
207
+
208
+ /* ── Borders (non-glass elements) ── */
209
+ --border-subtle: rgba(255, 255, 255, 0.06);
210
+ --border-medium: rgba(255, 255, 255, 0.10);
211
+ --border-strong: rgba(255, 255, 255, 0.16);
212
+ --border-accent: rgba(0, 200, 232, 0.26);
213
+ --border-accent-strong: rgba(0, 200, 232, 0.50);
214
+
215
+ /* Scrollbar */
216
+ --scrollbar-track: #060910;
217
+ --scrollbar-thumb: rgba(14, 20, 36, 0.90);
218
+ }
219
+
220
+ /* ═══════════════════════════════════════════
221
+ LIGHT THEME (soft aurora — lavender-gray)
222
+ ═══════════════════════════════════════════ */
223
+ [data-theme="light"] {
224
+ /* ── Light Aurora Substrate ── */
225
+ --bg-void: #E5E4EF;
226
+ --bg-base: #EDEEF6;
227
+ --bg-gradient: linear-gradient(135deg, #EDEEF6 0%, #E0DFEF 30%, #D8DEF0 70%, #EAE6F2 100%);
228
+
229
+ /* ── White Glass Surfaces ── */
230
+ --glass-shell: rgba(255, 255, 255, 0.70);
231
+ --glass-surface: rgba(255, 255, 255, 0.60);
232
+ --glass-elevated: rgba(255, 255, 255, 0.80);
233
+ --glass-overlay: rgba(255, 255, 255, 0.40);
234
+
235
+ --glass-border: rgba(255, 255, 255, 0.50);
236
+ --glass-border-strong: rgba(255, 255, 255, 0.70);
237
+ --glass-border-accent: rgba(0, 150, 180, 0.30);
238
+ --glass-highlight: linear-gradient(180deg, rgba(255,255,255,0.30) 0%, transparent 50%);
239
+
240
+ --glass-fallback: rgba(255, 255, 255, 0.95);
241
+
242
+ /* Blur levels same as dark */
243
+ --glass-blur-sm: blur(8px);
244
+ --glass-blur-md: blur(16px);
245
+ --glass-blur-lg: blur(24px);
246
+ --glass-blur-xl: blur(40px);
247
+
248
+ /* ── Accents (shifted for light legibility) ── */
249
+ --accent-primary: #0096B0;
250
+ --accent-violet: #6D28D9;
251
+ --accent-gradient: linear-gradient(135deg, #0096B0, #6D28D9);
252
+ --accent-primary-dim: rgba(0, 150, 176, 0.12);
253
+ --accent-violet-dim: rgba(109, 40, 217, 0.10);
254
+ --accent-glow: rgba(0, 150, 176, 0.10);
255
+ --accent-violet-glow: rgba(109, 40, 217, 0.12);
256
+ --accent-contrast: #FFFFFF;
257
+
258
+ /* ── Text ── */
259
+ --text-heading: #0F1520;
260
+ --text-primary: #2A3548;
261
+ --text-secondary: #5A6880;
262
+ --text-muted: #8898A8;
263
+ --text-accent: #0096B0;
264
+ --text-inverse: #FFFFFF;
265
+
266
+ /* ── Semantic Colors ── */
267
+ --semantic-green: #059669;
268
+ --semantic-green-dim: rgba(5, 150, 105, 0.10);
269
+ --semantic-amber: #D97706;
270
+ --semantic-amber-dim: rgba(217, 119, 6, 0.10);
271
+ --semantic-red: #DC2626;
272
+ --semantic-red-dim: rgba(220, 38, 38, 0.10);
273
+ --semantic-purple: #7C3AED;
274
+ --semantic-purple-dim: rgba(124, 58, 237, 0.10);
275
+ --semantic-blue: #2563EB;
276
+ --semantic-blue-dim: rgba(37, 99, 235, 0.10);
277
+
278
+ /* ── Shadows — tinted with light teal ── */
279
+ --shadow-sm: 0 1px 3px rgba(0, 150, 176, 0.06);
280
+ --shadow-md: 0 8px 24px rgba(0, 150, 176, 0.10);
281
+ --shadow-lg: 0 16px 48px rgba(0, 150, 176, 0.14);
282
+ --shadow-glow: 0 0 30px rgba(0, 150, 176, 0.12), 0 8px 24px rgba(15, 21, 32, 0.08);
283
+ --shadow-glow-strong: 0 0 50px rgba(0, 150, 176, 0.20), 0 0 20px rgba(0, 150, 176, 0.10);
284
+ --shadow-violet-glow: 0 0 30px rgba(109, 40, 217, 0.14), 0 8px 24px rgba(15, 21, 32, 0.08);
285
+ --shadow-inner: inset 0 1px 0 rgba(255, 255, 255, 0.50);
286
+
287
+ /* ── Borders ── */
288
+ --border-subtle: rgba(15, 21, 32, 0.07);
289
+ --border-medium: rgba(15, 21, 32, 0.12);
290
+ --border-strong: rgba(15, 21, 32, 0.18);
291
+ --border-accent: rgba(0, 150, 176, 0.22);
292
+ --border-accent-strong: rgba(0, 150, 176, 0.40);
293
+
294
+ /* Scrollbar */
295
+ --scrollbar-track: #EDEEF6;
296
+ --scrollbar-thumb: rgba(200, 210, 230, 0.80);
297
+ }
298
+
299
+ /* ═══════════════════════════════════════════
300
+ BASE STYLES
301
+ ═══════════════════════════════════════════ */
302
+ html, body {
303
+ min-height: 100vh;
304
+ margin: 0;
305
+ -webkit-font-smoothing: antialiased;
306
+ -moz-osx-font-smoothing: grayscale;
307
+ }
308
+
309
+ /* Aurora substrate — must be on the root element */
310
+ body[data-theme], #app[data-theme], .aurora-shell[data-theme] {
311
+ background: var(--bg-gradient);
312
+ background-attachment: fixed;
313
+ font-family: var(--font-body);
314
+ color: var(--text-primary);
315
+ transition: var(--transition-theme);
316
+ }
317
+
318
+ *, *::before, *::after { box-sizing: border-box; }
319
+
320
+ /* Custom scrollbar */
321
+ ::-webkit-scrollbar { width: 6px; height: 6px; }
322
+ ::-webkit-scrollbar-track { background: var(--scrollbar-track); }
323
+ ::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: var(--radius-full); }
324
+ ::-webkit-scrollbar-thumb:hover { background: var(--border-medium); }
325
+ ```
326
+
327
+ ---
328
+
329
+ ## Glass Tokens — Usage Guide
330
+
331
+ ### The three glass levels
332
+
333
+ ```css
334
+ /* Level 1 — Shell (sidebar, top bar) */
335
+ .glass-shell {
336
+ background: var(--glass-shell); /* dark: rgba(8,12,22,0.75) */
337
+ backdrop-filter: var(--glass-blur-lg);
338
+ border-color: var(--glass-border);
339
+ }
340
+
341
+ /* Level 2 — Surface cards (standard content containers) */
342
+ .glass-surface {
343
+ background: var(--glass-surface); /* dark: rgba(10,14,26,0.65) */
344
+ backdrop-filter: var(--glass-blur-md);
345
+ border-color: var(--glass-border);
346
+ }
347
+
348
+ /* Level 3 — Elevated (hover state, nested cards, modals) */
349
+ .glass-elevated {
350
+ background: var(--glass-elevated); /* dark: rgba(14,20,36,0.75) */
351
+ backdrop-filter: var(--glass-blur-md);
352
+ border-color: var(--glass-border-strong);
353
+ }
354
+ ```
355
+
356
+ ### Mandatory @supports fallback
357
+
358
+ Every glass surface must have a fallback for browsers that do not support `backdrop-filter`:
359
+
360
+ ```css
361
+ .glass-card {
362
+ background: var(--glass-fallback); /* solid fallback */
363
+ }
364
+
365
+ @supports (backdrop-filter: blur(1px)) {
366
+ .glass-card {
367
+ background: var(--glass-surface);
368
+ backdrop-filter: var(--glass-blur-md);
369
+ }
370
+ }
371
+ ```
372
+
373
+ ### Top reflection pseudo-element
374
+
375
+ Every glass card must have the `::before` reflection. This is what makes the glass feel real.
376
+
377
+ ```css
378
+ .glass-card {
379
+ position: relative;
380
+ overflow: hidden;
381
+ }
382
+ .glass-card::before {
383
+ content: '';
384
+ position: absolute;
385
+ top: 0; left: 0; right: 0;
386
+ height: 50%;
387
+ background: var(--glass-highlight);
388
+ pointer-events: none;
389
+ border-radius: inherit;
390
+ }
391
+ ```
392
+
393
+ ---
394
+
395
+ ## Typography Patterns
396
+
397
+ ### Mono Rail — the command spine
398
+
399
+ The most distinctive element of this skill. Use it exclusively for section headers, stat labels, metadata rails, IDs, and timestamps.
400
+
401
+ ```css
402
+ .mono-rail {
403
+ font-family: var(--font-mono);
404
+ font-size: var(--text-xs);
405
+ font-weight: var(--weight-semibold);
406
+ letter-spacing: var(--tracking-widest);
407
+ text-transform: uppercase;
408
+ color: var(--text-muted);
409
+ }
410
+ ```
411
+
412
+ **Do not overuse** — if every text element is uppercase mono, the command rails lose their authority.
413
+
414
+ ### Display Heading
415
+
416
+ ```css
417
+ .display-heading {
418
+ font-family: var(--font-display);
419
+ font-weight: var(--weight-bold);
420
+ letter-spacing: var(--tracking-tight);
421
+ line-height: var(--leading-tight);
422
+ color: var(--text-heading);
423
+ }
424
+ /* Sizes: --text-5xl (hero) · --text-3xl (page title) · --text-2xl (section) · --text-xl (card title) */
425
+ ```
426
+
427
+ ### Stat Number (standard)
428
+
429
+ ```css
430
+ .stat-number {
431
+ font-family: var(--font-display);
432
+ font-size: var(--text-4xl);
433
+ font-weight: var(--weight-bold);
434
+ line-height: var(--leading-none);
435
+ color: var(--text-heading);
436
+ font-variant-numeric: tabular-nums;
437
+ font-feature-settings: "tnum" 1;
438
+ }
439
+ ```
440
+
441
+ ### Gradient Stat Number (hero metric only)
442
+
443
+ Use for the single most important metric on the page — not all stats.
444
+
445
+ ```css
446
+ .stat-number--gradient {
447
+ background: var(--accent-gradient);
448
+ -webkit-background-clip: text;
449
+ -webkit-text-fill-color: transparent;
450
+ background-clip: text;
451
+ font-size: var(--text-4xl);
452
+ font-weight: var(--weight-bold);
453
+ line-height: var(--leading-none);
454
+ font-variant-numeric: tabular-nums;
455
+ }
456
+ ```
457
+
458
+ ### Body Text
459
+
460
+ ```css
461
+ .body-text {
462
+ font-family: var(--font-body);
463
+ font-size: var(--text-base);
464
+ font-weight: var(--weight-normal);
465
+ line-height: var(--leading-relaxed);
466
+ color: var(--text-primary);
467
+ }
468
+ ```
469
+
470
+ ---
471
+
472
+ ## Token Scope Guardrails
473
+
474
+ **Rule 1:** Typography, spacing, radius, and transition tokens belong in `:root` — NOT in `[data-theme]`.
475
+
476
+ **Rule 2:** Theme-specific colors and glass surfaces belong in `[data-theme]`.
477
+
478
+ **Rule 3:** If `body` consumes `var(--font-body)`, that variable must exist in `:root` or a scope `body` inherits.
479
+
480
+ **Rule 4:** If the theme lives on a container (`.shell[data-theme]`), either keep typography in `:root`, or apply `font-family` directly on that shell element.
481
+
482
+ **Unsafe (font breaks silently):**
483
+ ```css
484
+ /* WRONG — body cannot inherit from .shell */
485
+ .shell[data-theme="dark"] { --font-body: 'Inter', sans-serif; }
486
+ body { font-family: var(--font-body); }
487
+ ```
488
+
489
+ **Safe:**
490
+ ```css
491
+ :root { --font-body: 'Inter', system-ui, sans-serif; }
492
+ body { font-family: var(--font-body); }
493
+ .shell[data-theme="dark"] { --bg-base: #060910; }
494
+ ```
495
+
496
+ ---
497
+
498
+ ## Compact Density Scale
499
+
500
+ For dashboards, admin panels, settings, and any dense operational UI.
501
+
502
+ ### Card container scale
503
+
504
+ | Level | Use | Padding | Border Radius |
505
+ |---|---|---|---|
506
+ | L1 — page glass card | top-level section | `var(--space-5)` | `var(--radius-xl)` (18px) |
507
+ | L2 — nested glass card | card inside a card | `var(--space-4)` | `var(--radius-lg)` (14px) |
508
+ | L3 — inset block | disclosure body, info block | `10px` | `var(--radius-md)` (10px) |
509
+
510
+ Between L1 cards: `gap: var(--space-3)` (not `--space-6`).
511
+
512
+ ### Form controls — operational context
513
+
514
+ ```
515
+ Input : px-3 py-2 text-xs border-radius: var(--radius-md) (~32px height)
516
+ Select : px-3 py-2 text-xs border-radius: var(--radius-md)
517
+ Label : font-mono text-[0.65rem] mb: var(--space-1)
518
+ Button : px-3 py-2 text-xs border-radius: var(--radius-md)
519
+ ```
520
+
521
+ ### Badges — compact
522
+
523
+ ```
524
+ Status : px-2 py-0.5 text-[0.6rem] rounded-full
525
+ Tag : px-2 py-0.5 text-[0.58rem] rounded-full
526
+ ```
527
+
528
+ ### List rows
529
+
530
+ ```
531
+ Row padding : py-2 (8px) — not py-3 or py-4
532
+ Row gap : gap-2.5 (10px)
533
+ ```
534
+
535
+ ---
536
+
537
+ ## Chart Palette
538
+
539
+ Consistent chart colors across all dashboards:
540
+
541
+ ```css
542
+ --chart-1: var(--accent-primary); /* #00C8E8 teal — primary series */
543
+ --chart-2: var(--accent-violet); /* #7C3AED violet — secondary series */
544
+ --chart-3: var(--semantic-green); /* #00D68F emerald — positive metric */
545
+ --chart-4: var(--semantic-amber); /* #F4A91D amber — warning/neutral */
546
+ --chart-5: var(--semantic-purple); /* #A78BFA purple — tertiary series */
547
+ --chart-6: var(--semantic-blue); /* #38BDF8 blue — informational */
548
+
549
+ /* Area/gradient chart fills */
550
+ --chart-fill-1: linear-gradient(180deg, rgba(0, 200, 232, 0.25) 0%, rgba(0, 200, 232, 0) 100%);
551
+ --chart-fill-2: linear-gradient(180deg, rgba(124, 58, 237, 0.20) 0%, rgba(124, 58, 237, 0) 100%);
552
+ --chart-fill-3: linear-gradient(180deg, rgba(0, 214, 143, 0.20) 0%, rgba(0, 214, 143, 0) 100%);
553
+ --chart-fill-4: linear-gradient(180deg, rgba(244, 169, 29, 0.20) 0%, rgba(244, 169, 29, 0) 100%);
554
+ ```
555
+
556
+ Chart rules:
557
+ - Area charts: always gradient fill (top color → transparent), never solid fill. The fade reveals the glass panel below.
558
+ - Grid lines: `rgba(255,255,255,0.06)` on dark, `rgba(0,0,0,0.06)` on light.
559
+ - Tooltips: glass card (glass-surface + blur-sm + luminous border) — never a solid white box.
560
+ - Axis labels: `var(--text-muted)`, `var(--text-xs)`.
561
+
562
+ ---
563
+
564
+ ## Interaction Guardrails
565
+
566
+ 1. Primary actions on accent backgrounds must use `var(--accent-contrast)`.
567
+ 2. Hover states must preserve or improve text contrast — never reduce it.
568
+ 3. Focus styles must be visible on both themes: `outline: var(--focus-ring-width) solid var(--accent-primary)` with `outline-offset: var(--focus-ring-offset)`.
569
+ 4. Glass hover: `var(--glass-surface)` → `var(--glass-elevated)`, `200ms`.
570
+ 5. One accent gradient family and two neutral text tiers — do not add decorative colors.
571
+
572
+ ---
573
+
574
+ ## Non-Negotiable Rules
575
+
576
+ 1. Aurora gradient substrate is mandatory. Never place glass panels over a solid background.
577
+ 2. Dark glass opacity must reveal the aurora — keep alpha at or below 0.75.
578
+ 3. Use the token system — never freestyle hex values.
579
+ 4. Teal-electric and violet are the only accents — never introduce a third accent color.
580
+ 5. Mono labels are structural rails — use them for section headers, stat labels, and metadata only.
581
+ 6. Always include `@supports (backdrop-filter: blur(1px))` fallback for every glass surface.
582
+ 7. One gradient stat number per viewport (the hero metric). Do not gradient-text all stats.
583
+ 8. Compact density for operational UI — never carry marketing spacing into dense dashboards.
584
+ 9. Shadows must be tinted with `rgba(0,200,232,...)` — never solid black shadows.
585
+ 10. Every glass card must pass WCAG AA for body text over its dark glass surface.