@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,827 +1,827 @@
1
- # Components — Aurora Command UI
2
-
3
- Read after `design-tokens.md`. All components use CSS variables and adapt to dark/light themes automatically. Every container-type component is a glass surface.
4
-
5
- Code examples use JSX inline style notation as **design specifications** — read property-value pairs as spec, then adapt syntax to the active stack (HTML, Vue, Blade, etc.). The shorthand `TG` means `{ transition: 'var(--transition-glass)' }`.
6
-
7
- ---
8
-
9
- ## Glass Rules (read first)
10
-
11
- Before building any component:
12
-
13
- 1. **Substrate required**: glass only works over the aurora gradient background. Confirm `body` or root container has `background: var(--bg-gradient); background-attachment: fixed` before building.
14
- 2. **Top reflection on every glass container**: every glass card must have `::before` with `var(--glass-highlight)`. This is what makes the glass feel real.
15
- 3. **Minimum 2 depth layers**: never place a glass card directly adjacent to another glass card of the same opacity without context differentiation.
16
- 4. **@supports fallback**: every glass surface must degrade gracefully when `backdrop-filter` is unsupported.
17
- 5. **Text contrast over dark glass**: dark glass can make text illegible. Verify WCAG AA — increase `--glass-surface` alpha toward `--glass-elevated` if needed.
18
- 6. **Mono rails are section structure** — not component decoration. Use them in section headers, stat labels, and metadata zones only.
19
-
20
- ---
21
-
22
- ## 1. Glass Card (fundamental component)
23
-
24
- Every container-type component inherits from this. It is the atomic building block of the system.
25
-
26
- ```
27
- Structure:
28
- position: relative
29
- overflow: hidden
30
- background: var(--glass-surface)
31
- backdrop-filter: var(--glass-blur-md)
32
- border: 1px solid var(--glass-border)
33
- border-radius: var(--radius-xl)
34
- box-shadow: var(--shadow-md), var(--shadow-inner)
35
- padding: var(--space-5)
36
-
37
- ::before (top reflection):
38
- content: ''
39
- position: absolute
40
- top: 0; left: 0; right: 0
41
- height: 50%
42
- background: var(--glass-highlight)
43
- pointer-events: none
44
- border-radius: inherit
45
-
46
- Hover:
47
- background: var(--glass-elevated)
48
- box-shadow: var(--shadow-glow), var(--shadow-inner)
49
- transition: var(--transition-glass)
50
-
51
- @supports (backdrop-filter: blur(1px)):
52
- background: var(--glass-surface)
53
- backdrop-filter: var(--glass-blur-md)
54
- Fallback (no @supports):
55
- background: var(--glass-fallback)
56
- ```
57
-
58
- Variants:
59
- - `glass-card--sm`: `padding: var(--space-4)`, `border-radius: var(--radius-lg)`
60
- - `glass-card--lg`: `padding: var(--space-8)`, `border-radius: var(--radius-2xl)`, `backdrop-filter: var(--glass-blur-lg)`
61
- - `glass-card--hero`: `padding: var(--space-10)`, `border-radius: var(--radius-3xl)`, `backdrop-filter: var(--glass-blur-lg)`
62
- - `glass-card--featured`: adds `box-shadow: var(--shadow-glow-strong)` + `border: 1px solid var(--glass-border-accent)`
63
- - `glass-card--shell`: uses `var(--glass-shell)` + `var(--glass-blur-lg)` — for sidebar and top bar surfaces
64
-
65
- ---
66
-
67
- ## 2. Glass Top Navigation Bar
68
-
69
- ```
70
- ┌──────────────────────────────────────────────────────────────┐
71
- │ [Logo] AppName Link Link Link [Theme ☀] [Avatar] │
72
- └──────────────────────────────────────────────────────────────┘
73
- ```
74
-
75
- ```css
76
- .top-bar {
77
- position: sticky;
78
- top: 0;
79
- z-index: var(--z-sticky);
80
- height: var(--nav-height);
81
- background: var(--glass-shell);
82
- backdrop-filter: var(--glass-blur-lg);
83
- border-bottom: 1px solid var(--glass-border);
84
- }
85
- @supports (backdrop-filter: blur(1px)) {
86
- .top-bar {
87
- background: var(--glass-shell);
88
- backdrop-filter: var(--glass-blur-lg);
89
- }
90
- }
91
- ```
92
-
93
- - Logo: 32px square, `background: var(--accent-primary-dim)`, `border: 1px solid var(--glass-border-accent)`, `border-radius: var(--radius-md)`, icon in `var(--accent-primary)`
94
- - Brand name: `font-family: var(--font-mono)`, `--weight-bold`, `--text-base`, `--text-heading`, `letter-spacing: var(--tracking-wide)`
95
- - Nav links: `--text-base`, `color: var(--text-secondary)`. Hover: `var(--text-primary)`. Active: `var(--text-accent)`.
96
- - Theme toggle: see Component 16.
97
-
98
- ---
99
-
100
- ## 3. Stat Card
101
-
102
- Glass card with mono label + large number. The primary KPI component.
103
-
104
- ```jsx
105
- <div style={{
106
- background: 'var(--glass-surface)',
107
- backdropFilter: 'var(--glass-blur-md)',
108
- border: '1px solid var(--glass-border)',
109
- borderRadius: 'var(--radius-xl)',
110
- padding: 'var(--space-4) var(--space-5)',
111
- boxShadow: 'var(--shadow-md), var(--shadow-inner)',
112
- minWidth: 140, flex: 1, position: 'relative', overflow: 'hidden',
113
- ...TG,
114
- }}>
115
- {/* ::before reflection in CSS */}
116
- <div style={{
117
- fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)',
118
- color: 'var(--text-muted)', letterSpacing: 'var(--tracking-widest)',
119
- textTransform: 'uppercase', fontWeight: 600, marginBottom: 'var(--space-1)'
120
- }}>LABEL</div>
121
- <div style={{ display: 'flex', alignItems: 'baseline', gap: 4 }}>
122
- <span style={{
123
- fontFamily: 'var(--font-display)', fontSize: 'var(--text-4xl)', fontWeight: 700,
124
- color: 'var(--text-heading)', lineHeight: 1, fontVariantNumeric: 'tabular-nums'
125
- }}>42</span>
126
- <span style={{ fontSize: 'var(--text-lg)', color: 'var(--text-muted)' }}>/100</span>
127
- </div>
128
- <div style={{ fontSize: 'var(--text-sm)', color: 'var(--text-muted)', marginTop: 'var(--space-1)' }}>
129
- subtitle text
130
- </div>
131
- </div>
132
- ```
133
-
134
- **Hero variant** (gradient stat number — use only once per viewport):
135
- ```css
136
- .stat-number--hero {
137
- background: var(--accent-gradient);
138
- -webkit-background-clip: text;
139
- -webkit-text-fill-color: transparent;
140
- background-clip: text;
141
- }
142
- ```
143
-
144
- **Semantic variants**: replace number color with `var(--semantic-green)`, `var(--semantic-red)`, or `var(--semantic-amber)`.
145
-
146
- ---
147
-
148
- ## 4. Glass Sidebar
149
-
150
- ```
151
- ┌───────────────────┐
152
- │ SECTION LABEL │ ← mono rail
153
- │ ● Item Active │ ← glass-elevated + border-left accent
154
- │ ○ Item │ ← text-secondary
155
- │ │
156
- │ SECTION LABEL │
157
- │ ○ Item │
158
- └───────────────────┘
159
- ```
160
-
161
- ```css
162
- .sidebar {
163
- width: var(--sidebar-width); /* 210px */
164
- height: 100vh;
165
- position: fixed;
166
- top: 0; left: 0;
167
- background: var(--glass-shell);
168
- backdrop-filter: var(--glass-blur-lg);
169
- border-right: 1px solid var(--glass-border);
170
- padding: var(--space-6) 0;
171
- overflow-y: auto;
172
- }
173
- @supports (backdrop-filter: blur(1px)) {
174
- .sidebar { background: var(--glass-shell); backdrop-filter: var(--glass-blur-lg); }
175
- }
176
-
177
- .sidebar-section-label {
178
- font-family: var(--font-mono);
179
- font-size: var(--text-xs);
180
- font-weight: var(--weight-semibold);
181
- letter-spacing: var(--tracking-widest);
182
- text-transform: uppercase;
183
- color: var(--text-muted);
184
- padding: var(--space-2) var(--space-4);
185
- margin-top: var(--space-4);
186
- }
187
-
188
- .sidebar-item {
189
- display: flex;
190
- align-items: center;
191
- gap: var(--space-3);
192
- padding: var(--space-2) var(--space-4);
193
- border-radius: var(--radius-md);
194
- font-size: var(--text-base);
195
- color: var(--text-secondary);
196
- cursor: pointer;
197
- transition: var(--transition-glass);
198
- margin: 0 var(--space-2);
199
- }
200
- .sidebar-item:hover {
201
- background: var(--glass-elevated);
202
- color: var(--text-primary);
203
- }
204
- .sidebar-item.active {
205
- background: var(--glass-elevated);
206
- border-left: 3px solid var(--accent-primary);
207
- color: var(--text-heading);
208
- padding-left: calc(var(--space-4) - 3px);
209
- }
210
- .sidebar-item.active .sidebar-icon {
211
- color: var(--accent-primary);
212
- }
213
- ```
214
-
215
- ---
216
-
217
- ## 5. Section Header (mono rail)
218
-
219
- The structural backbone. Every content zone begins with one.
220
-
221
- ```jsx
222
- <div style={{
223
- display: 'flex', alignItems: 'center', gap: 'var(--space-3)',
224
- padding: 'var(--space-6) 0 var(--space-3)',
225
- }}>
226
- <span style={{ color: 'var(--accent-primary)', fontSize: 'var(--text-lg)' }}>⚡</span>
227
- <div>
228
- <div style={{
229
- fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)', fontWeight: 600,
230
- letterSpacing: 'var(--tracking-widest)', textTransform: 'uppercase',
231
- color: 'var(--text-muted)',
232
- }}>SECTION LABEL</div>
233
- <div style={{
234
- fontFamily: 'var(--font-display)', fontSize: 'var(--text-xl)', fontWeight: 700,
235
- color: 'var(--text-heading)', letterSpacing: 'var(--tracking-tight)',
236
- }}>Section Title</div>
237
- </div>
238
- </div>
239
- ```
240
-
241
- Simple variant (mono-only, no title — for dense dashboards):
242
- ```jsx
243
- <div style={{
244
- fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)', fontWeight: 600,
245
- letterSpacing: 'var(--tracking-widest)', textTransform: 'uppercase',
246
- color: 'var(--text-muted)',
247
- padding: 'var(--space-4) 0 var(--space-2)',
248
- display: 'flex', alignItems: 'center', gap: 'var(--space-2)',
249
- }}>
250
- <span>—</span> SECTION NAME
251
- </div>
252
- ```
253
-
254
- ---
255
-
256
- ## 6. Tab Navigation
257
-
258
- ```jsx
259
- <div style={{
260
- display: 'flex',
261
- background: 'var(--glass-shell)',
262
- backdropFilter: 'var(--glass-blur-md)',
263
- borderBottom: '1px solid var(--glass-border)',
264
- padding: '0 var(--space-6)',
265
- overflowX: 'auto',
266
- }}>
267
- <button style={{
268
- fontFamily: 'var(--font-body)', fontSize: 'var(--text-base)',
269
- color: isActive ? 'var(--text-accent)' : 'var(--text-secondary)',
270
- background: 'none', border: 'none',
271
- padding: 'var(--space-3) var(--space-4)',
272
- borderBottom: `3px solid ${isActive ? 'var(--accent-primary)' : 'transparent'}`,
273
- cursor: 'pointer',
274
- transition: 'color 150ms ease, border-color 150ms ease',
275
- display: 'flex', alignItems: 'center', gap: 'var(--space-2)',
276
- }}>
277
- <span>icon</span> Label
278
- </button>
279
- </div>
280
- ```
281
-
282
- Hover (non-active): `background: var(--glass-elevated)`, `border-radius: var(--radius-md) var(--radius-md) 0 0`.
283
-
284
- ---
285
-
286
- ## 7. Badge / Chip
287
-
288
- Three variants — mono font, uppercase, `letter-spacing: var(--tracking-wider)`, `font-size: var(--text-xs)`.
289
-
290
- **Accent badge** (active, primary, teal):
291
- ```jsx
292
- {
293
- background: 'var(--accent-primary-dim)',
294
- color: 'var(--accent-primary)',
295
- border: '1px solid var(--glass-border-accent)',
296
- fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)', fontWeight: 600,
297
- letterSpacing: 'var(--tracking-wider)', textTransform: 'uppercase',
298
- padding: '2px 10px', borderRadius: 'var(--radius-sm)',
299
- }
300
- ```
301
-
302
- **Violet badge** (CTA, highlight, escalation):
303
- ```jsx
304
- {
305
- background: 'var(--accent-violet-dim)',
306
- color: 'var(--accent-violet)',
307
- border: '1px solid rgba(124,58,237,0.30)',
308
- /* same font styles as accent */
309
- }
310
- ```
311
-
312
- **Glass badge** (neutral tag):
313
- ```jsx
314
- {
315
- background: 'var(--glass-surface)',
316
- backdropFilter: 'var(--glass-blur-sm)',
317
- color: 'var(--text-secondary)',
318
- border: '1px solid var(--glass-border)',
319
- /* same font styles */
320
- }
321
- ```
322
-
323
- **Semantic badges** (status):
324
- ```
325
- Success: background var(--semantic-green-dim), color var(--semantic-green)
326
- Danger: background var(--semantic-red-dim), color var(--semantic-red)
327
- Warning: background var(--semantic-amber-dim), color var(--semantic-amber)
328
- Info: background var(--semantic-blue-dim), color var(--semantic-blue)
329
- ```
330
-
331
- Status dot: `5px × 5px`, `border-radius: 50%`, `background: currentColor`, `display: inline-block`, `margin-right: 5px`.
332
-
333
- ---
334
-
335
- ## 8. Progress Bar
336
-
337
- Standard (command fill):
338
- ```jsx
339
- <div style={{
340
- height: 5, background: 'var(--glass-border)',
341
- borderRadius: 'var(--radius-full)', overflow: 'hidden',
342
- }}>
343
- <div style={{
344
- height: '100%', borderRadius: 'var(--radius-full)',
345
- background: 'var(--accent-primary)', width: `${pct}%`,
346
- transition: 'width 400ms cubic-bezier(0.16, 1, 0.3, 1)',
347
- }} />
348
- </div>
349
- ```
350
-
351
- **Gradient fill** (hero metric bar — use once per panel):
352
- ```css
353
- background: var(--accent-gradient);
354
- ```
355
-
356
- **Semantic fills**: `var(--semantic-green)`, `var(--semantic-red)`, `var(--semantic-amber)`.
357
-
358
- ---
359
-
360
- ## 9. Data Table (glass container)
361
-
362
- ```
363
- ┌───────────────────────────────────────────────────┐ ← glass card
364
- │ NAME ▲ CATEGORY STOCK STATUS PRICE │ ← mono header
365
- ├───────────────────────────────────────────────────┤
366
- │ Product Laptops 23 [●OK] $12,000 │
367
- │ Product Phones 5 [●Low] $8,000 │
368
- └───────────────────────────────────────────────────┘
369
- ```
370
-
371
- The table lives inside a Glass Card container:
372
-
373
- ```css
374
- .table-container {
375
- background: var(--glass-surface);
376
- backdrop-filter: var(--glass-blur-md);
377
- border: 1px solid var(--glass-border);
378
- border-radius: var(--radius-xl);
379
- overflow: hidden;
380
- position: relative;
381
- }
382
-
383
- table {
384
- width: 100%;
385
- border-collapse: separate;
386
- border-spacing: 0 2px;
387
- }
388
-
389
- thead th {
390
- padding: 12px 16px;
391
- font-family: var(--font-mono);
392
- font-size: var(--text-xs);
393
- letter-spacing: var(--tracking-widest);
394
- text-transform: uppercase;
395
- color: var(--text-muted);
396
- text-align: left;
397
- font-weight: 600;
398
- background: var(--glass-shell);
399
- border-bottom: 1px solid var(--glass-border);
400
- }
401
-
402
- tbody td {
403
- padding: 12px 16px;
404
- background: transparent;
405
- border-bottom: 1px solid var(--glass-border);
406
- color: var(--text-primary);
407
- font-size: var(--text-base);
408
- font-variant-numeric: tabular-nums;
409
- transition: var(--transition-glass);
410
- }
411
-
412
- tbody tr:hover td {
413
- background: var(--glass-elevated);
414
- }
415
- ```
416
-
417
- Rules: never `border-collapse: collapse` with `tr` backgrounds — use `td` surfaces. Numbers must have `font-variant-numeric: tabular-nums`.
418
-
419
- ---
420
-
421
- ## 10. Modal / Detail Overlay
422
-
423
- ```
424
- ┌─────── backdrop (glass-overlay blur, z-modal) ───────┐
425
- │ │
426
- │ ┌─ Glass Card max-w: 640px ───────────────────┐ │
427
- │ │ ::before top reflection │ │
428
- │ │ HEADER: mono label + title + close │ │
429
- │ │ ───────────────────────── │ │
430
- │ │ BODY: stat cards, progress, badges, etc. │ │
431
- │ └─────────────────────────────────────────────┘ │
432
- │ │
433
- └────────────────────────────────────────────────────────┘
434
- ```
435
-
436
- ```css
437
- .modal-backdrop {
438
- position: fixed; inset: 0;
439
- background: rgba(4, 6, 9, 0.70);
440
- backdrop-filter: var(--glass-blur-sm);
441
- z-index: var(--z-modal);
442
- display: flex; align-items: center; justify-content: center;
443
- }
444
- .modal-content {
445
- background: var(--glass-overlay);
446
- backdrop-filter: var(--glass-blur-lg);
447
- border: 1px solid var(--glass-border-strong);
448
- border-radius: var(--radius-2xl);
449
- box-shadow: var(--shadow-glow);
450
- max-width: 640px; width: calc(100% - 32px);
451
- position: relative; overflow: hidden;
452
- padding: var(--space-8);
453
- z-index: calc(var(--z-modal) + 1);
454
- }
455
- ```
456
-
457
- Animation: `scale-materialize` from `motion.md`.
458
-
459
- ---
460
-
461
- ## 11. Form Elements
462
-
463
- **Input:**
464
- ```css
465
- .glass-input {
466
- height: var(--control-md);
467
- padding: 0 var(--space-3);
468
- background: var(--glass-surface);
469
- backdrop-filter: var(--glass-blur-sm);
470
- border: 1px solid var(--glass-border);
471
- border-radius: var(--radius-md);
472
- color: var(--text-primary);
473
- font-size: var(--text-sm);
474
- font-family: var(--font-body);
475
- outline: none;
476
- transition: var(--transition-glass);
477
- }
478
- .glass-input:focus {
479
- border-color: var(--glass-border-accent);
480
- box-shadow: 0 0 0 3px var(--accent-primary-dim);
481
- }
482
- .glass-input::placeholder { color: var(--text-muted); }
483
- ```
484
-
485
- **Label:** mono rail style (xs, muted, uppercase, tracking-widest). `margin-bottom: var(--space-1)`.
486
-
487
- ---
488
-
489
- ## 12. Button — Primary (gradient)
490
-
491
- ```css
492
- .btn-primary {
493
- height: var(--control-lg);
494
- padding: 0 var(--space-6);
495
- background: var(--accent-gradient);
496
- color: var(--accent-contrast);
497
- border: none;
498
- border-radius: var(--radius-md);
499
- font-family: var(--font-body);
500
- font-size: var(--text-sm);
501
- font-weight: var(--weight-semibold);
502
- letter-spacing: var(--tracking-wide);
503
- cursor: pointer;
504
- box-shadow: var(--shadow-glow);
505
- transition: var(--transition-base), filter 120ms ease, transform 120ms ease;
506
- }
507
- .btn-primary:hover {
508
- filter: brightness(1.08);
509
- box-shadow: var(--shadow-glow-strong);
510
- transform: translateY(-1px);
511
- }
512
- .btn-primary:active { filter: brightness(0.95); transform: translateY(0); }
513
- .btn-primary:focus-visible {
514
- outline: var(--focus-ring-width) solid var(--accent-primary);
515
- outline-offset: var(--focus-ring-offset);
516
- }
517
- ```
518
-
519
- ---
520
-
521
- ## 13. Button — Glass (secondary)
522
-
523
- ```css
524
- .btn-glass {
525
- height: var(--control-lg);
526
- padding: 0 var(--space-5);
527
- background: var(--glass-surface);
528
- backdrop-filter: var(--glass-blur-sm);
529
- border: 1px solid var(--glass-border);
530
- border-radius: var(--radius-md);
531
- color: var(--text-primary);
532
- font-family: var(--font-body);
533
- font-size: var(--text-sm);
534
- font-weight: var(--weight-medium);
535
- cursor: pointer;
536
- transition: var(--transition-glass);
537
- }
538
- .btn-glass:hover {
539
- background: var(--glass-elevated);
540
- border-color: var(--glass-border-strong);
541
- }
542
- ```
543
-
544
- ---
545
-
546
- ## 14. Button — Ghost
547
-
548
- ```css
549
- .btn-ghost {
550
- height: var(--control-md);
551
- padding: 0 var(--space-4);
552
- background: transparent;
553
- border: none;
554
- border-radius: var(--radius-md);
555
- color: var(--text-secondary);
556
- font-family: var(--font-body);
557
- font-size: var(--text-sm);
558
- cursor: pointer;
559
- transition: background var(--transition-fast), color var(--transition-fast);
560
- }
561
- .btn-ghost:hover {
562
- background: var(--glass-surface);
563
- color: var(--text-primary);
564
- }
565
- ```
566
-
567
- ---
568
-
569
- ## 15. Toggle Switch
570
-
571
- ```css
572
- .toggle {
573
- width: 44px; height: 24px;
574
- background: var(--glass-border);
575
- border-radius: var(--radius-full);
576
- position: relative;
577
- cursor: pointer;
578
- transition: background var(--transition-base);
579
- }
580
- .toggle.checked { background: var(--accent-gradient); }
581
- .toggle-thumb {
582
- width: 18px; height: 18px;
583
- background: white;
584
- border-radius: var(--radius-full);
585
- box-shadow: var(--shadow-sm);
586
- position: absolute; top: 3px; left: 3px;
587
- transition: transform var(--transition-base);
588
- }
589
- .toggle.checked .toggle-thumb { transform: translateX(20px); }
590
- ```
591
-
592
- ---
593
-
594
- ## 16. Theme Toggle
595
-
596
- ```jsx
597
- <button style={{
598
- width: 36, height: 36,
599
- borderRadius: 'var(--radius-md)',
600
- border: '1px solid var(--glass-border)',
601
- background: 'var(--glass-surface)',
602
- backdropFilter: 'var(--glass-blur-sm)',
603
- color: 'var(--text-secondary)',
604
- cursor: 'pointer',
605
- display: 'flex', alignItems: 'center', justifyContent: 'center',
606
- fontSize: '1rem',
607
- transition: 'var(--transition-glass)',
608
- }}>
609
- {theme === 'dark' ? '☀' : '☾'}
610
- </button>
611
- ```
612
-
613
- Hover: `background: var(--glass-elevated)`, `border-color: var(--glass-border-accent)`, `color: var(--accent-primary)`.
614
-
615
- ---
616
-
617
- ## 17. Profile Header Card
618
-
619
- ```
620
- ┌───────────────────────────────────────────────────────────┐ ← glass-card--lg
621
- │ ::before reflection │
622
- │ [Avatar 96px] ENTITY NAME [Badge][Badge] │
623
- │ Role (italic, accent) │
624
- │ ✦ TAGLINE (mono, xs, muted) │
625
- │ │
626
- │ [StatCard] [StatCard] [StatCard] │
627
- └───────────────────────────────────────────────────────────┘
628
- ```
629
-
630
- - Avatar: `96px`, `border-radius: var(--radius-lg)`, `border: 2px solid var(--glass-border-strong)`
631
- - Name: `--text-3xl`, `--weight-bold`, `--tracking-tight`, gradient text on the name if it is the identity hero
632
- - Role: `color: var(--text-accent)`, `font-style: italic`, `--text-lg`
633
- - Tagline: mono rail style, `--text-xs`, `--text-muted`, uppercase, `--tracking-widest`
634
- - Stats: Stat Card components, `min-width: 130px`
635
-
636
- ---
637
-
638
- ## 18. DNA / Trait Panel
639
-
640
- The identity card for any entity — labeled progress bars with color semantic fills + tag cluster.
641
-
642
- ```
643
- ┌─────────────────────────────────────────┐ ← glass card
644
- │ ✦ TRAIT ANALYSIS │ ← mono section label
645
- │ │
646
- │ DIMENSION ████████████████░░░░ 80% │ ← progress row
647
- │ DIMENSION ██████████░░░░░░░░░ 52% │
648
- │ DIMENSION █████████████░░░░░░ 68% │
649
- │ │
650
- │ [Badge] [Badge] [Badge] [Badge] │ ← glass chips
651
- └─────────────────────────────────────────┘
652
- ```
653
-
654
- Label: `min-width: 90px`, mono rail style. Bar: `flex: 1`, Progress Bar component. Value: mono, `--text-sm`, `--text-secondary`, `min-width: 40px; text-align: right`. Tags: `flex-wrap`, `gap: var(--space-2)`.
655
-
656
- ---
657
-
658
- ## 19. Alert / Signal Chip
659
-
660
- Operational signals for dashboards. Always inline with status dot.
661
-
662
- ```css
663
- .alert-chip {
664
- display: inline-flex;
665
- align-items: center;
666
- gap: var(--space-2);
667
- padding: 4px 10px;
668
- background: var(--glass-surface);
669
- backdrop-filter: var(--glass-blur-sm);
670
- border: 1px solid var(--glass-border);
671
- border-radius: var(--radius-full);
672
- font-family: var(--font-mono);
673
- font-size: var(--text-xs);
674
- font-weight: 600;
675
- letter-spacing: var(--tracking-wider);
676
- text-transform: uppercase;
677
- }
678
- /* Critical: border-color var(--semantic-red), color var(--semantic-red) */
679
- /* Warning: border-color var(--semantic-amber), color var(--semantic-amber) */
680
- /* Active: border-color var(--glass-border-accent), color var(--accent-primary) */
681
- ```
682
-
683
- ---
684
-
685
- ## 20. Status Tape
686
-
687
- A full-width operational status strip placed above the main dashboard content. Signals at a glance.
688
-
689
- ```
690
- ┌── glass-shell, full width ──────────────────────────────────────┐
691
- │ SYSTEM STATUS: ● OPERATIONAL │ [●ALERT 3] [●WARN 12] [●OK 47]│
692
- └─────────────────────────────────────────────────────────────────┘
693
- ```
694
-
695
- ```css
696
- .status-tape {
697
- width: 100%;
698
- display: flex;
699
- align-items: center;
700
- gap: var(--space-4);
701
- padding: var(--space-2) var(--space-6);
702
- background: var(--glass-shell);
703
- backdrop-filter: var(--glass-blur-md);
704
- border-bottom: 1px solid var(--glass-border);
705
- font-family: var(--font-mono);
706
- font-size: var(--text-xs);
707
- font-weight: 600;
708
- letter-spacing: var(--tracking-wider);
709
- text-transform: uppercase;
710
- color: var(--text-muted);
711
- }
712
- .status-tape .divider {
713
- width: 1px; height: 16px;
714
- background: var(--glass-border);
715
- }
716
- ```
717
-
718
- ---
719
-
720
- ## 21. Toast / Notification
721
-
722
- Auto-dismissing glass notification at bottom-right.
723
-
724
- ```css
725
- .toast {
726
- background: var(--glass-overlay);
727
- backdrop-filter: var(--glass-blur-lg);
728
- border: 1px solid var(--glass-border-strong);
729
- border-radius: var(--radius-xl);
730
- box-shadow: var(--shadow-glow);
731
- padding: var(--space-4) var(--space-5);
732
- display: flex; align-items: center; gap: var(--space-3);
733
- border-left: 3px solid; /* color from severity */
734
- min-width: 280px; max-width: 400px;
735
- position: fixed;
736
- bottom: var(--space-6); right: var(--space-6);
737
- z-index: var(--z-toast);
738
- }
739
- ```
740
-
741
- ---
742
-
743
- ## 22. Empty State
744
-
745
- ```css
746
- .empty-state {
747
- display: flex; flex-direction: column; align-items: center;
748
- gap: var(--space-4); padding: var(--space-16) var(--space-6);
749
- text-align: center;
750
- }
751
- .empty-icon-area {
752
- width: 80px; height: 80px;
753
- background: var(--glass-surface);
754
- backdrop-filter: var(--glass-blur-sm);
755
- border: 1px solid var(--glass-border);
756
- border-radius: var(--radius-2xl);
757
- display: flex; align-items: center; justify-content: center;
758
- font-size: 2rem;
759
- position: relative; overflow: hidden;
760
- }
761
- .empty-title {
762
- font-size: var(--text-base);
763
- font-weight: var(--weight-semibold);
764
- color: var(--text-heading);
765
- }
766
- .empty-description {
767
- font-size: var(--text-sm);
768
- color: var(--text-secondary);
769
- max-width: 280px;
770
- line-height: var(--leading-relaxed);
771
- }
772
- ```
773
-
774
- ---
775
-
776
- ## 23. Skeleton Loader
777
-
778
- Glass surface with aurora shimmer — matches the dark glass environment.
779
-
780
- ```css
781
- .skeleton {
782
- position: relative;
783
- overflow: hidden;
784
- background: var(--glass-surface);
785
- border-radius: var(--radius-md);
786
- }
787
- .skeleton::after {
788
- content: '';
789
- position: absolute; inset: 0;
790
- background: linear-gradient(
791
- 90deg,
792
- transparent 0%,
793
- rgba(0, 200, 232, 0.06) 50%,
794
- transparent 100%
795
- );
796
- transform: translateX(-100%);
797
- animation: aurora-shimmer 1.5s infinite;
798
- }
799
- @keyframes aurora-shimmer {
800
- to { transform: translateX(100%); }
801
- }
802
- @media (prefers-reduced-motion: reduce) {
803
- .skeleton::after { animation: none; }
804
- }
805
- ```
806
-
807
- ---
808
-
809
- ## 24. Tooltip
810
-
811
- Small glass bubble on hover.
812
-
813
- ```css
814
- .tooltip {
815
- background: var(--glass-overlay);
816
- backdrop-filter: var(--glass-blur-md);
817
- border: 1px solid var(--glass-border-strong);
818
- border-radius: var(--radius-md);
819
- padding: var(--space-2) var(--space-3);
820
- font-size: var(--text-xs);
821
- color: var(--text-primary);
822
- box-shadow: var(--shadow-md);
823
- pointer-events: none;
824
- z-index: var(--z-toast);
825
- white-space: nowrap;
826
- }
827
- ```
1
+ # Components — Aurora Command UI
2
+
3
+ Read after `design-tokens.md`. All components use CSS variables and adapt to dark/light themes automatically. Every container-type component is a glass surface.
4
+
5
+ Code examples use JSX inline style notation as **design specifications** — read property-value pairs as spec, then adapt syntax to the active stack (HTML, Vue, Blade, etc.). The shorthand `TG` means `{ transition: 'var(--transition-glass)' }`.
6
+
7
+ ---
8
+
9
+ ## Glass Rules (read first)
10
+
11
+ Before building any component:
12
+
13
+ 1. **Substrate required**: glass only works over the aurora gradient background. Confirm `body` or root container has `background: var(--bg-gradient); background-attachment: fixed` before building.
14
+ 2. **Top reflection on every glass container**: every glass card must have `::before` with `var(--glass-highlight)`. This is what makes the glass feel real.
15
+ 3. **Minimum 2 depth layers**: never place a glass card directly adjacent to another glass card of the same opacity without context differentiation.
16
+ 4. **@supports fallback**: every glass surface must degrade gracefully when `backdrop-filter` is unsupported.
17
+ 5. **Text contrast over dark glass**: dark glass can make text illegible. Verify WCAG AA — increase `--glass-surface` alpha toward `--glass-elevated` if needed.
18
+ 6. **Mono rails are section structure** — not component decoration. Use them in section headers, stat labels, and metadata zones only.
19
+
20
+ ---
21
+
22
+ ## 1. Glass Card (fundamental component)
23
+
24
+ Every container-type component inherits from this. It is the atomic building block of the system.
25
+
26
+ ```
27
+ Structure:
28
+ position: relative
29
+ overflow: hidden
30
+ background: var(--glass-surface)
31
+ backdrop-filter: var(--glass-blur-md)
32
+ border: 1px solid var(--glass-border)
33
+ border-radius: var(--radius-xl)
34
+ box-shadow: var(--shadow-md), var(--shadow-inner)
35
+ padding: var(--space-5)
36
+
37
+ ::before (top reflection):
38
+ content: ''
39
+ position: absolute
40
+ top: 0; left: 0; right: 0
41
+ height: 50%
42
+ background: var(--glass-highlight)
43
+ pointer-events: none
44
+ border-radius: inherit
45
+
46
+ Hover:
47
+ background: var(--glass-elevated)
48
+ box-shadow: var(--shadow-glow), var(--shadow-inner)
49
+ transition: var(--transition-glass)
50
+
51
+ @supports (backdrop-filter: blur(1px)):
52
+ background: var(--glass-surface)
53
+ backdrop-filter: var(--glass-blur-md)
54
+ Fallback (no @supports):
55
+ background: var(--glass-fallback)
56
+ ```
57
+
58
+ Variants:
59
+ - `glass-card--sm`: `padding: var(--space-4)`, `border-radius: var(--radius-lg)`
60
+ - `glass-card--lg`: `padding: var(--space-8)`, `border-radius: var(--radius-2xl)`, `backdrop-filter: var(--glass-blur-lg)`
61
+ - `glass-card--hero`: `padding: var(--space-10)`, `border-radius: var(--radius-3xl)`, `backdrop-filter: var(--glass-blur-lg)`
62
+ - `glass-card--featured`: adds `box-shadow: var(--shadow-glow-strong)` + `border: 1px solid var(--glass-border-accent)`
63
+ - `glass-card--shell`: uses `var(--glass-shell)` + `var(--glass-blur-lg)` — for sidebar and top bar surfaces
64
+
65
+ ---
66
+
67
+ ## 2. Glass Top Navigation Bar
68
+
69
+ ```
70
+ ┌──────────────────────────────────────────────────────────────┐
71
+ │ [Logo] AppName Link Link Link [Theme ☀] [Avatar] │
72
+ └──────────────────────────────────────────────────────────────┘
73
+ ```
74
+
75
+ ```css
76
+ .top-bar {
77
+ position: sticky;
78
+ top: 0;
79
+ z-index: var(--z-sticky);
80
+ height: var(--nav-height);
81
+ background: var(--glass-shell);
82
+ backdrop-filter: var(--glass-blur-lg);
83
+ border-bottom: 1px solid var(--glass-border);
84
+ }
85
+ @supports (backdrop-filter: blur(1px)) {
86
+ .top-bar {
87
+ background: var(--glass-shell);
88
+ backdrop-filter: var(--glass-blur-lg);
89
+ }
90
+ }
91
+ ```
92
+
93
+ - Logo: 32px square, `background: var(--accent-primary-dim)`, `border: 1px solid var(--glass-border-accent)`, `border-radius: var(--radius-md)`, icon in `var(--accent-primary)`
94
+ - Brand name: `font-family: var(--font-mono)`, `--weight-bold`, `--text-base`, `--text-heading`, `letter-spacing: var(--tracking-wide)`
95
+ - Nav links: `--text-base`, `color: var(--text-secondary)`. Hover: `var(--text-primary)`. Active: `var(--text-accent)`.
96
+ - Theme toggle: see Component 16.
97
+
98
+ ---
99
+
100
+ ## 3. Stat Card
101
+
102
+ Glass card with mono label + large number. The primary KPI component.
103
+
104
+ ```jsx
105
+ <div style={{
106
+ background: 'var(--glass-surface)',
107
+ backdropFilter: 'var(--glass-blur-md)',
108
+ border: '1px solid var(--glass-border)',
109
+ borderRadius: 'var(--radius-xl)',
110
+ padding: 'var(--space-4) var(--space-5)',
111
+ boxShadow: 'var(--shadow-md), var(--shadow-inner)',
112
+ minWidth: 140, flex: 1, position: 'relative', overflow: 'hidden',
113
+ ...TG,
114
+ }}>
115
+ {/* ::before reflection in CSS */}
116
+ <div style={{
117
+ fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)',
118
+ color: 'var(--text-muted)', letterSpacing: 'var(--tracking-widest)',
119
+ textTransform: 'uppercase', fontWeight: 600, marginBottom: 'var(--space-1)'
120
+ }}>LABEL</div>
121
+ <div style={{ display: 'flex', alignItems: 'baseline', gap: 4 }}>
122
+ <span style={{
123
+ fontFamily: 'var(--font-display)', fontSize: 'var(--text-4xl)', fontWeight: 700,
124
+ color: 'var(--text-heading)', lineHeight: 1, fontVariantNumeric: 'tabular-nums'
125
+ }}>42</span>
126
+ <span style={{ fontSize: 'var(--text-lg)', color: 'var(--text-muted)' }}>/100</span>
127
+ </div>
128
+ <div style={{ fontSize: 'var(--text-sm)', color: 'var(--text-muted)', marginTop: 'var(--space-1)' }}>
129
+ subtitle text
130
+ </div>
131
+ </div>
132
+ ```
133
+
134
+ **Hero variant** (gradient stat number — use only once per viewport):
135
+ ```css
136
+ .stat-number--hero {
137
+ background: var(--accent-gradient);
138
+ -webkit-background-clip: text;
139
+ -webkit-text-fill-color: transparent;
140
+ background-clip: text;
141
+ }
142
+ ```
143
+
144
+ **Semantic variants**: replace number color with `var(--semantic-green)`, `var(--semantic-red)`, or `var(--semantic-amber)`.
145
+
146
+ ---
147
+
148
+ ## 4. Glass Sidebar
149
+
150
+ ```
151
+ ┌───────────────────┐
152
+ │ SECTION LABEL │ ← mono rail
153
+ │ ● Item Active │ ← glass-elevated + border-left accent
154
+ │ ○ Item │ ← text-secondary
155
+ │ │
156
+ │ SECTION LABEL │
157
+ │ ○ Item │
158
+ └───────────────────┘
159
+ ```
160
+
161
+ ```css
162
+ .sidebar {
163
+ width: var(--sidebar-width); /* 210px */
164
+ height: 100vh;
165
+ position: fixed;
166
+ top: 0; left: 0;
167
+ background: var(--glass-shell);
168
+ backdrop-filter: var(--glass-blur-lg);
169
+ border-right: 1px solid var(--glass-border);
170
+ padding: var(--space-6) 0;
171
+ overflow-y: auto;
172
+ }
173
+ @supports (backdrop-filter: blur(1px)) {
174
+ .sidebar { background: var(--glass-shell); backdrop-filter: var(--glass-blur-lg); }
175
+ }
176
+
177
+ .sidebar-section-label {
178
+ font-family: var(--font-mono);
179
+ font-size: var(--text-xs);
180
+ font-weight: var(--weight-semibold);
181
+ letter-spacing: var(--tracking-widest);
182
+ text-transform: uppercase;
183
+ color: var(--text-muted);
184
+ padding: var(--space-2) var(--space-4);
185
+ margin-top: var(--space-4);
186
+ }
187
+
188
+ .sidebar-item {
189
+ display: flex;
190
+ align-items: center;
191
+ gap: var(--space-3);
192
+ padding: var(--space-2) var(--space-4);
193
+ border-radius: var(--radius-md);
194
+ font-size: var(--text-base);
195
+ color: var(--text-secondary);
196
+ cursor: pointer;
197
+ transition: var(--transition-glass);
198
+ margin: 0 var(--space-2);
199
+ }
200
+ .sidebar-item:hover {
201
+ background: var(--glass-elevated);
202
+ color: var(--text-primary);
203
+ }
204
+ .sidebar-item.active {
205
+ background: var(--glass-elevated);
206
+ border-left: 3px solid var(--accent-primary);
207
+ color: var(--text-heading);
208
+ padding-left: calc(var(--space-4) - 3px);
209
+ }
210
+ .sidebar-item.active .sidebar-icon {
211
+ color: var(--accent-primary);
212
+ }
213
+ ```
214
+
215
+ ---
216
+
217
+ ## 5. Section Header (mono rail)
218
+
219
+ The structural backbone. Every content zone begins with one.
220
+
221
+ ```jsx
222
+ <div style={{
223
+ display: 'flex', alignItems: 'center', gap: 'var(--space-3)',
224
+ padding: 'var(--space-6) 0 var(--space-3)',
225
+ }}>
226
+ <span style={{ color: 'var(--accent-primary)', fontSize: 'var(--text-lg)' }}>⚡</span>
227
+ <div>
228
+ <div style={{
229
+ fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)', fontWeight: 600,
230
+ letterSpacing: 'var(--tracking-widest)', textTransform: 'uppercase',
231
+ color: 'var(--text-muted)',
232
+ }}>SECTION LABEL</div>
233
+ <div style={{
234
+ fontFamily: 'var(--font-display)', fontSize: 'var(--text-xl)', fontWeight: 700,
235
+ color: 'var(--text-heading)', letterSpacing: 'var(--tracking-tight)',
236
+ }}>Section Title</div>
237
+ </div>
238
+ </div>
239
+ ```
240
+
241
+ Simple variant (mono-only, no title — for dense dashboards):
242
+ ```jsx
243
+ <div style={{
244
+ fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)', fontWeight: 600,
245
+ letterSpacing: 'var(--tracking-widest)', textTransform: 'uppercase',
246
+ color: 'var(--text-muted)',
247
+ padding: 'var(--space-4) 0 var(--space-2)',
248
+ display: 'flex', alignItems: 'center', gap: 'var(--space-2)',
249
+ }}>
250
+ <span>—</span> SECTION NAME
251
+ </div>
252
+ ```
253
+
254
+ ---
255
+
256
+ ## 6. Tab Navigation
257
+
258
+ ```jsx
259
+ <div style={{
260
+ display: 'flex',
261
+ background: 'var(--glass-shell)',
262
+ backdropFilter: 'var(--glass-blur-md)',
263
+ borderBottom: '1px solid var(--glass-border)',
264
+ padding: '0 var(--space-6)',
265
+ overflowX: 'auto',
266
+ }}>
267
+ <button style={{
268
+ fontFamily: 'var(--font-body)', fontSize: 'var(--text-base)',
269
+ color: isActive ? 'var(--text-accent)' : 'var(--text-secondary)',
270
+ background: 'none', border: 'none',
271
+ padding: 'var(--space-3) var(--space-4)',
272
+ borderBottom: `3px solid ${isActive ? 'var(--accent-primary)' : 'transparent'}`,
273
+ cursor: 'pointer',
274
+ transition: 'color 150ms ease, border-color 150ms ease',
275
+ display: 'flex', alignItems: 'center', gap: 'var(--space-2)',
276
+ }}>
277
+ <span>icon</span> Label
278
+ </button>
279
+ </div>
280
+ ```
281
+
282
+ Hover (non-active): `background: var(--glass-elevated)`, `border-radius: var(--radius-md) var(--radius-md) 0 0`.
283
+
284
+ ---
285
+
286
+ ## 7. Badge / Chip
287
+
288
+ Three variants — mono font, uppercase, `letter-spacing: var(--tracking-wider)`, `font-size: var(--text-xs)`.
289
+
290
+ **Accent badge** (active, primary, teal):
291
+ ```jsx
292
+ {
293
+ background: 'var(--accent-primary-dim)',
294
+ color: 'var(--accent-primary)',
295
+ border: '1px solid var(--glass-border-accent)',
296
+ fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)', fontWeight: 600,
297
+ letterSpacing: 'var(--tracking-wider)', textTransform: 'uppercase',
298
+ padding: '2px 10px', borderRadius: 'var(--radius-sm)',
299
+ }
300
+ ```
301
+
302
+ **Violet badge** (CTA, highlight, escalation):
303
+ ```jsx
304
+ {
305
+ background: 'var(--accent-violet-dim)',
306
+ color: 'var(--accent-violet)',
307
+ border: '1px solid rgba(124,58,237,0.30)',
308
+ /* same font styles as accent */
309
+ }
310
+ ```
311
+
312
+ **Glass badge** (neutral tag):
313
+ ```jsx
314
+ {
315
+ background: 'var(--glass-surface)',
316
+ backdropFilter: 'var(--glass-blur-sm)',
317
+ color: 'var(--text-secondary)',
318
+ border: '1px solid var(--glass-border)',
319
+ /* same font styles */
320
+ }
321
+ ```
322
+
323
+ **Semantic badges** (status):
324
+ ```
325
+ Success: background var(--semantic-green-dim), color var(--semantic-green)
326
+ Danger: background var(--semantic-red-dim), color var(--semantic-red)
327
+ Warning: background var(--semantic-amber-dim), color var(--semantic-amber)
328
+ Info: background var(--semantic-blue-dim), color var(--semantic-blue)
329
+ ```
330
+
331
+ Status dot: `5px × 5px`, `border-radius: 50%`, `background: currentColor`, `display: inline-block`, `margin-right: 5px`.
332
+
333
+ ---
334
+
335
+ ## 8. Progress Bar
336
+
337
+ Standard (command fill):
338
+ ```jsx
339
+ <div style={{
340
+ height: 5, background: 'var(--glass-border)',
341
+ borderRadius: 'var(--radius-full)', overflow: 'hidden',
342
+ }}>
343
+ <div style={{
344
+ height: '100%', borderRadius: 'var(--radius-full)',
345
+ background: 'var(--accent-primary)', width: `${pct}%`,
346
+ transition: 'width 400ms cubic-bezier(0.16, 1, 0.3, 1)',
347
+ }} />
348
+ </div>
349
+ ```
350
+
351
+ **Gradient fill** (hero metric bar — use once per panel):
352
+ ```css
353
+ background: var(--accent-gradient);
354
+ ```
355
+
356
+ **Semantic fills**: `var(--semantic-green)`, `var(--semantic-red)`, `var(--semantic-amber)`.
357
+
358
+ ---
359
+
360
+ ## 9. Data Table (glass container)
361
+
362
+ ```
363
+ ┌───────────────────────────────────────────────────┐ ← glass card
364
+ │ NAME ▲ CATEGORY STOCK STATUS PRICE │ ← mono header
365
+ ├───────────────────────────────────────────────────┤
366
+ │ Product Laptops 23 [●OK] $12,000 │
367
+ │ Product Phones 5 [●Low] $8,000 │
368
+ └───────────────────────────────────────────────────┘
369
+ ```
370
+
371
+ The table lives inside a Glass Card container:
372
+
373
+ ```css
374
+ .table-container {
375
+ background: var(--glass-surface);
376
+ backdrop-filter: var(--glass-blur-md);
377
+ border: 1px solid var(--glass-border);
378
+ border-radius: var(--radius-xl);
379
+ overflow: hidden;
380
+ position: relative;
381
+ }
382
+
383
+ table {
384
+ width: 100%;
385
+ border-collapse: separate;
386
+ border-spacing: 0 2px;
387
+ }
388
+
389
+ thead th {
390
+ padding: 12px 16px;
391
+ font-family: var(--font-mono);
392
+ font-size: var(--text-xs);
393
+ letter-spacing: var(--tracking-widest);
394
+ text-transform: uppercase;
395
+ color: var(--text-muted);
396
+ text-align: left;
397
+ font-weight: 600;
398
+ background: var(--glass-shell);
399
+ border-bottom: 1px solid var(--glass-border);
400
+ }
401
+
402
+ tbody td {
403
+ padding: 12px 16px;
404
+ background: transparent;
405
+ border-bottom: 1px solid var(--glass-border);
406
+ color: var(--text-primary);
407
+ font-size: var(--text-base);
408
+ font-variant-numeric: tabular-nums;
409
+ transition: var(--transition-glass);
410
+ }
411
+
412
+ tbody tr:hover td {
413
+ background: var(--glass-elevated);
414
+ }
415
+ ```
416
+
417
+ Rules: never `border-collapse: collapse` with `tr` backgrounds — use `td` surfaces. Numbers must have `font-variant-numeric: tabular-nums`.
418
+
419
+ ---
420
+
421
+ ## 10. Modal / Detail Overlay
422
+
423
+ ```
424
+ ┌─────── backdrop (glass-overlay blur, z-modal) ───────┐
425
+ │ │
426
+ │ ┌─ Glass Card max-w: 640px ───────────────────┐ │
427
+ │ │ ::before top reflection │ │
428
+ │ │ HEADER: mono label + title + close │ │
429
+ │ │ ───────────────────────── │ │
430
+ │ │ BODY: stat cards, progress, badges, etc. │ │
431
+ │ └─────────────────────────────────────────────┘ │
432
+ │ │
433
+ └────────────────────────────────────────────────────────┘
434
+ ```
435
+
436
+ ```css
437
+ .modal-backdrop {
438
+ position: fixed; inset: 0;
439
+ background: rgba(4, 6, 9, 0.70);
440
+ backdrop-filter: var(--glass-blur-sm);
441
+ z-index: var(--z-modal);
442
+ display: flex; align-items: center; justify-content: center;
443
+ }
444
+ .modal-content {
445
+ background: var(--glass-overlay);
446
+ backdrop-filter: var(--glass-blur-lg);
447
+ border: 1px solid var(--glass-border-strong);
448
+ border-radius: var(--radius-2xl);
449
+ box-shadow: var(--shadow-glow);
450
+ max-width: 640px; width: calc(100% - 32px);
451
+ position: relative; overflow: hidden;
452
+ padding: var(--space-8);
453
+ z-index: calc(var(--z-modal) + 1);
454
+ }
455
+ ```
456
+
457
+ Animation: `scale-materialize` from `motion.md`.
458
+
459
+ ---
460
+
461
+ ## 11. Form Elements
462
+
463
+ **Input:**
464
+ ```css
465
+ .glass-input {
466
+ height: var(--control-md);
467
+ padding: 0 var(--space-3);
468
+ background: var(--glass-surface);
469
+ backdrop-filter: var(--glass-blur-sm);
470
+ border: 1px solid var(--glass-border);
471
+ border-radius: var(--radius-md);
472
+ color: var(--text-primary);
473
+ font-size: var(--text-sm);
474
+ font-family: var(--font-body);
475
+ outline: none;
476
+ transition: var(--transition-glass);
477
+ }
478
+ .glass-input:focus {
479
+ border-color: var(--glass-border-accent);
480
+ box-shadow: 0 0 0 3px var(--accent-primary-dim);
481
+ }
482
+ .glass-input::placeholder { color: var(--text-muted); }
483
+ ```
484
+
485
+ **Label:** mono rail style (xs, muted, uppercase, tracking-widest). `margin-bottom: var(--space-1)`.
486
+
487
+ ---
488
+
489
+ ## 12. Button — Primary (gradient)
490
+
491
+ ```css
492
+ .btn-primary {
493
+ height: var(--control-lg);
494
+ padding: 0 var(--space-6);
495
+ background: var(--accent-gradient);
496
+ color: var(--accent-contrast);
497
+ border: none;
498
+ border-radius: var(--radius-md);
499
+ font-family: var(--font-body);
500
+ font-size: var(--text-sm);
501
+ font-weight: var(--weight-semibold);
502
+ letter-spacing: var(--tracking-wide);
503
+ cursor: pointer;
504
+ box-shadow: var(--shadow-glow);
505
+ transition: var(--transition-base), filter 120ms ease, transform 120ms ease;
506
+ }
507
+ .btn-primary:hover {
508
+ filter: brightness(1.08);
509
+ box-shadow: var(--shadow-glow-strong);
510
+ transform: translateY(-1px);
511
+ }
512
+ .btn-primary:active { filter: brightness(0.95); transform: translateY(0); }
513
+ .btn-primary:focus-visible {
514
+ outline: var(--focus-ring-width) solid var(--accent-primary);
515
+ outline-offset: var(--focus-ring-offset);
516
+ }
517
+ ```
518
+
519
+ ---
520
+
521
+ ## 13. Button — Glass (secondary)
522
+
523
+ ```css
524
+ .btn-glass {
525
+ height: var(--control-lg);
526
+ padding: 0 var(--space-5);
527
+ background: var(--glass-surface);
528
+ backdrop-filter: var(--glass-blur-sm);
529
+ border: 1px solid var(--glass-border);
530
+ border-radius: var(--radius-md);
531
+ color: var(--text-primary);
532
+ font-family: var(--font-body);
533
+ font-size: var(--text-sm);
534
+ font-weight: var(--weight-medium);
535
+ cursor: pointer;
536
+ transition: var(--transition-glass);
537
+ }
538
+ .btn-glass:hover {
539
+ background: var(--glass-elevated);
540
+ border-color: var(--glass-border-strong);
541
+ }
542
+ ```
543
+
544
+ ---
545
+
546
+ ## 14. Button — Ghost
547
+
548
+ ```css
549
+ .btn-ghost {
550
+ height: var(--control-md);
551
+ padding: 0 var(--space-4);
552
+ background: transparent;
553
+ border: none;
554
+ border-radius: var(--radius-md);
555
+ color: var(--text-secondary);
556
+ font-family: var(--font-body);
557
+ font-size: var(--text-sm);
558
+ cursor: pointer;
559
+ transition: background var(--transition-fast), color var(--transition-fast);
560
+ }
561
+ .btn-ghost:hover {
562
+ background: var(--glass-surface);
563
+ color: var(--text-primary);
564
+ }
565
+ ```
566
+
567
+ ---
568
+
569
+ ## 15. Toggle Switch
570
+
571
+ ```css
572
+ .toggle {
573
+ width: 44px; height: 24px;
574
+ background: var(--glass-border);
575
+ border-radius: var(--radius-full);
576
+ position: relative;
577
+ cursor: pointer;
578
+ transition: background var(--transition-base);
579
+ }
580
+ .toggle.checked { background: var(--accent-gradient); }
581
+ .toggle-thumb {
582
+ width: 18px; height: 18px;
583
+ background: white;
584
+ border-radius: var(--radius-full);
585
+ box-shadow: var(--shadow-sm);
586
+ position: absolute; top: 3px; left: 3px;
587
+ transition: transform var(--transition-base);
588
+ }
589
+ .toggle.checked .toggle-thumb { transform: translateX(20px); }
590
+ ```
591
+
592
+ ---
593
+
594
+ ## 16. Theme Toggle
595
+
596
+ ```jsx
597
+ <button style={{
598
+ width: 36, height: 36,
599
+ borderRadius: 'var(--radius-md)',
600
+ border: '1px solid var(--glass-border)',
601
+ background: 'var(--glass-surface)',
602
+ backdropFilter: 'var(--glass-blur-sm)',
603
+ color: 'var(--text-secondary)',
604
+ cursor: 'pointer',
605
+ display: 'flex', alignItems: 'center', justifyContent: 'center',
606
+ fontSize: '1rem',
607
+ transition: 'var(--transition-glass)',
608
+ }}>
609
+ {theme === 'dark' ? '☀' : '☾'}
610
+ </button>
611
+ ```
612
+
613
+ Hover: `background: var(--glass-elevated)`, `border-color: var(--glass-border-accent)`, `color: var(--accent-primary)`.
614
+
615
+ ---
616
+
617
+ ## 17. Profile Header Card
618
+
619
+ ```
620
+ ┌───────────────────────────────────────────────────────────┐ ← glass-card--lg
621
+ │ ::before reflection │
622
+ │ [Avatar 96px] ENTITY NAME [Badge][Badge] │
623
+ │ Role (italic, accent) │
624
+ │ ✦ TAGLINE (mono, xs, muted) │
625
+ │ │
626
+ │ [StatCard] [StatCard] [StatCard] │
627
+ └───────────────────────────────────────────────────────────┘
628
+ ```
629
+
630
+ - Avatar: `96px`, `border-radius: var(--radius-lg)`, `border: 2px solid var(--glass-border-strong)`
631
+ - Name: `--text-3xl`, `--weight-bold`, `--tracking-tight`, gradient text on the name if it is the identity hero
632
+ - Role: `color: var(--text-accent)`, `font-style: italic`, `--text-lg`
633
+ - Tagline: mono rail style, `--text-xs`, `--text-muted`, uppercase, `--tracking-widest`
634
+ - Stats: Stat Card components, `min-width: 130px`
635
+
636
+ ---
637
+
638
+ ## 18. DNA / Trait Panel
639
+
640
+ The identity card for any entity — labeled progress bars with color semantic fills + tag cluster.
641
+
642
+ ```
643
+ ┌─────────────────────────────────────────┐ ← glass card
644
+ │ ✦ TRAIT ANALYSIS │ ← mono section label
645
+ │ │
646
+ │ DIMENSION ████████████████░░░░ 80% │ ← progress row
647
+ │ DIMENSION ██████████░░░░░░░░░ 52% │
648
+ │ DIMENSION █████████████░░░░░░ 68% │
649
+ │ │
650
+ │ [Badge] [Badge] [Badge] [Badge] │ ← glass chips
651
+ └─────────────────────────────────────────┘
652
+ ```
653
+
654
+ Label: `min-width: 90px`, mono rail style. Bar: `flex: 1`, Progress Bar component. Value: mono, `--text-sm`, `--text-secondary`, `min-width: 40px; text-align: right`. Tags: `flex-wrap`, `gap: var(--space-2)`.
655
+
656
+ ---
657
+
658
+ ## 19. Alert / Signal Chip
659
+
660
+ Operational signals for dashboards. Always inline with status dot.
661
+
662
+ ```css
663
+ .alert-chip {
664
+ display: inline-flex;
665
+ align-items: center;
666
+ gap: var(--space-2);
667
+ padding: 4px 10px;
668
+ background: var(--glass-surface);
669
+ backdrop-filter: var(--glass-blur-sm);
670
+ border: 1px solid var(--glass-border);
671
+ border-radius: var(--radius-full);
672
+ font-family: var(--font-mono);
673
+ font-size: var(--text-xs);
674
+ font-weight: 600;
675
+ letter-spacing: var(--tracking-wider);
676
+ text-transform: uppercase;
677
+ }
678
+ /* Critical: border-color var(--semantic-red), color var(--semantic-red) */
679
+ /* Warning: border-color var(--semantic-amber), color var(--semantic-amber) */
680
+ /* Active: border-color var(--glass-border-accent), color var(--accent-primary) */
681
+ ```
682
+
683
+ ---
684
+
685
+ ## 20. Status Tape
686
+
687
+ A full-width operational status strip placed above the main dashboard content. Signals at a glance.
688
+
689
+ ```
690
+ ┌── glass-shell, full width ──────────────────────────────────────┐
691
+ │ SYSTEM STATUS: ● OPERATIONAL │ [●ALERT 3] [●WARN 12] [●OK 47]│
692
+ └─────────────────────────────────────────────────────────────────┘
693
+ ```
694
+
695
+ ```css
696
+ .status-tape {
697
+ width: 100%;
698
+ display: flex;
699
+ align-items: center;
700
+ gap: var(--space-4);
701
+ padding: var(--space-2) var(--space-6);
702
+ background: var(--glass-shell);
703
+ backdrop-filter: var(--glass-blur-md);
704
+ border-bottom: 1px solid var(--glass-border);
705
+ font-family: var(--font-mono);
706
+ font-size: var(--text-xs);
707
+ font-weight: 600;
708
+ letter-spacing: var(--tracking-wider);
709
+ text-transform: uppercase;
710
+ color: var(--text-muted);
711
+ }
712
+ .status-tape .divider {
713
+ width: 1px; height: 16px;
714
+ background: var(--glass-border);
715
+ }
716
+ ```
717
+
718
+ ---
719
+
720
+ ## 21. Toast / Notification
721
+
722
+ Auto-dismissing glass notification at bottom-right.
723
+
724
+ ```css
725
+ .toast {
726
+ background: var(--glass-overlay);
727
+ backdrop-filter: var(--glass-blur-lg);
728
+ border: 1px solid var(--glass-border-strong);
729
+ border-radius: var(--radius-xl);
730
+ box-shadow: var(--shadow-glow);
731
+ padding: var(--space-4) var(--space-5);
732
+ display: flex; align-items: center; gap: var(--space-3);
733
+ border-left: 3px solid; /* color from severity */
734
+ min-width: 280px; max-width: 400px;
735
+ position: fixed;
736
+ bottom: var(--space-6); right: var(--space-6);
737
+ z-index: var(--z-toast);
738
+ }
739
+ ```
740
+
741
+ ---
742
+
743
+ ## 22. Empty State
744
+
745
+ ```css
746
+ .empty-state {
747
+ display: flex; flex-direction: column; align-items: center;
748
+ gap: var(--space-4); padding: var(--space-16) var(--space-6);
749
+ text-align: center;
750
+ }
751
+ .empty-icon-area {
752
+ width: 80px; height: 80px;
753
+ background: var(--glass-surface);
754
+ backdrop-filter: var(--glass-blur-sm);
755
+ border: 1px solid var(--glass-border);
756
+ border-radius: var(--radius-2xl);
757
+ display: flex; align-items: center; justify-content: center;
758
+ font-size: 2rem;
759
+ position: relative; overflow: hidden;
760
+ }
761
+ .empty-title {
762
+ font-size: var(--text-base);
763
+ font-weight: var(--weight-semibold);
764
+ color: var(--text-heading);
765
+ }
766
+ .empty-description {
767
+ font-size: var(--text-sm);
768
+ color: var(--text-secondary);
769
+ max-width: 280px;
770
+ line-height: var(--leading-relaxed);
771
+ }
772
+ ```
773
+
774
+ ---
775
+
776
+ ## 23. Skeleton Loader
777
+
778
+ Glass surface with aurora shimmer — matches the dark glass environment.
779
+
780
+ ```css
781
+ .skeleton {
782
+ position: relative;
783
+ overflow: hidden;
784
+ background: var(--glass-surface);
785
+ border-radius: var(--radius-md);
786
+ }
787
+ .skeleton::after {
788
+ content: '';
789
+ position: absolute; inset: 0;
790
+ background: linear-gradient(
791
+ 90deg,
792
+ transparent 0%,
793
+ rgba(0, 200, 232, 0.06) 50%,
794
+ transparent 100%
795
+ );
796
+ transform: translateX(-100%);
797
+ animation: aurora-shimmer 1.5s infinite;
798
+ }
799
+ @keyframes aurora-shimmer {
800
+ to { transform: translateX(100%); }
801
+ }
802
+ @media (prefers-reduced-motion: reduce) {
803
+ .skeleton::after { animation: none; }
804
+ }
805
+ ```
806
+
807
+ ---
808
+
809
+ ## 24. Tooltip
810
+
811
+ Small glass bubble on hover.
812
+
813
+ ```css
814
+ .tooltip {
815
+ background: var(--glass-overlay);
816
+ backdrop-filter: var(--glass-blur-md);
817
+ border: 1px solid var(--glass-border-strong);
818
+ border-radius: var(--radius-md);
819
+ padding: var(--space-2) var(--space-3);
820
+ font-size: var(--text-xs);
821
+ color: var(--text-primary);
822
+ box-shadow: var(--shadow-md);
823
+ pointer-events: none;
824
+ z-index: var(--z-toast);
825
+ white-space: nowrap;
826
+ }
827
+ ```