@jaimevalasek/aioson 1.30.0 → 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 (93) hide show
  1. package/CHANGELOG.md +18 -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 +578 -514
  12. package/template/.aioson/docs/integrations/dashboard-app-form-publish-mapping.md +183 -0
  13. package/template/.aioson/docs/play/README.md +74 -0
  14. package/template/.aioson/docs/play/agent-usage-guide.md +112 -0
  15. package/template/.aioson/docs/play/app-compatibility-guide.md +117 -0
  16. package/template/.aioson/docs/play/auth-services-and-testing.md +235 -0
  17. package/template/.aioson/docs/play/llm-data-and-bindings.md +238 -0
  18. package/template/.aioson/docs/play/manifest-and-runtime.md +267 -0
  19. package/template/.aioson/docs/play/source-map.md +104 -0
  20. package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +266 -243
  21. package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -293
  22. package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -827
  23. package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -250
  24. package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -585
  25. package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -365
  26. package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +485 -482
  27. package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +386 -387
  28. package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +228 -205
  29. package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -338
  30. package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -977
  31. package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -218
  32. package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -326
  33. package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -461
  34. package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -293
  35. package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -352
  36. package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +233 -210
  37. package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -319
  38. package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -365
  39. package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -196
  40. package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -244
  41. package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -235
  42. package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -215
  43. package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -295
  44. package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +239 -203
  45. package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -339
  46. package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +417 -407
  47. package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +289 -272
  48. package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +525 -524
  49. package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +279 -279
  50. package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +355 -289
  51. package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +443 -437
  52. package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +245 -222
  53. package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -159
  54. package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -498
  55. package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -236
  56. package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -274
  57. package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -355
  58. package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -198
  59. package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -307
  60. package/template/.aioson/skills/design/interface-design/SKILL.md +68 -47
  61. package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -105
  62. package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -101
  63. package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +92 -71
  64. package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -74
  65. package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -173
  66. package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +236 -213
  67. package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -228
  68. package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -855
  69. package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -334
  70. package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -342
  71. package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -286
  72. package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -458
  73. package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -723
  74. package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +83 -62
  75. package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -74
  76. package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -116
  77. package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -47
  78. package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -215
  79. package/template/.aioson/skills/design/pt.squarespace.com/.skill-meta.json +31 -31
  80. package/template/.aioson/skills/design/pt.squarespace.com/SKILL.md +94 -66
  81. package/template/.aioson/skills/design/pt.squarespace.com/references/components.md +366 -366
  82. package/template/.aioson/skills/design/pt.squarespace.com/references/design-tokens.md +150 -150
  83. package/template/.aioson/skills/design/pt.squarespace.com/references/motion.md +270 -270
  84. package/template/.aioson/skills/design/pt.squarespace.com/references/patterns.md +189 -189
  85. package/template/.aioson/skills/design/pt.squarespace.com/references/websites.md +161 -161
  86. package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +232 -209
  87. package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -324
  88. package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -508
  89. package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -223
  90. package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -374
  91. package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -356
  92. package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -288
  93. 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.