@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,508 +1,508 @@
1
- # Components — Warm Craft UI
2
-
3
- Reusable component specifications. Every component must use tokens from `design-tokens.md`. Never hardcode colors, sizes, or radii.
4
-
5
- ---
6
-
7
- ## Navigation
8
-
9
- ### Top Bar
10
- ```
11
- height: 64px
12
- background: var(--bg-surface)
13
- border-bottom: 1px solid var(--border-subtle)
14
- shadow: var(--shadow-xs)
15
- padding: 0 var(--space-6)
16
- display: flex; align-items: center; justify-content: space-between
17
- ```
18
-
19
- Content slots:
20
- - **Left:** Logo (mark or wordmark, max-height 28px)
21
- - **Center:** Search bar (optional, rounded pill `var(--radius-full)`, `var(--bg-elevated)` background, max-width 480px)
22
- - **Right:** Notification icon + User avatar (rounded full, 36px)
23
-
24
- ### Sidebar Navigation
25
- ```
26
- width: 240px
27
- background: var(--bg-void)
28
- padding: var(--space-4) var(--space-3)
29
- border-right: 1px solid var(--border-subtle)
30
- ```
31
-
32
- Nav item:
33
- ```
34
- height: var(--control-md) /* 40px */
35
- padding: 0 var(--space-3)
36
- border-radius: var(--radius-lg)
37
- font: var(--font-body), var(--text-sm), var(--weight-medium)
38
- color: var(--text-secondary)
39
- transition: var(--transition-fast)
40
- display: flex; align-items: center; gap: var(--space-3)
41
- icon: 20px, stroke-width 1.5
42
-
43
- hover:
44
- background: var(--bg-elevated)
45
- color: var(--text-primary)
46
-
47
- active:
48
- background: var(--bg-elevated)
49
- color: var(--text-heading)
50
- font-weight: var(--weight-semibold)
51
- ```
52
-
53
- Nav section label:
54
- ```
55
- font: var(--font-body), var(--text-xs), var(--weight-medium)
56
- color: var(--text-muted)
57
- letter-spacing: var(--tracking-wider)
58
- text-transform: uppercase
59
- padding: var(--space-6) var(--space-3) var(--space-2)
60
- ```
61
-
62
- ### Bottom Tab Bar (mobile)
63
- ```
64
- height: 56px
65
- background: var(--bg-surface)
66
- border-top: 1px solid var(--border-subtle)
67
- display: flex; justify-content: space-around; align-items: center
68
-
69
- tab item:
70
- icon: 24px
71
- label: var(--text-xs), var(--weight-medium)
72
- color: var(--text-muted)
73
- gap: var(--space-1)
74
-
75
- active:
76
- color: var(--accent)
77
- ```
78
-
79
- ---
80
-
81
- ## Cards
82
-
83
- ### Base Card
84
- ```
85
- background: var(--bg-surface)
86
- border: 1px solid var(--border-subtle)
87
- border-radius: var(--radius-xl)
88
- padding: var(--space-6)
89
- shadow: var(--shadow-sm)
90
- transition: var(--transition-base)
91
-
92
- hover (when clickable):
93
- shadow: var(--shadow-md)
94
- transform: translateY(-1px)
95
- border-color: var(--border-medium)
96
- ```
97
-
98
- ### Stat Card
99
- ```
100
- extends: Base Card
101
- padding: var(--space-5) var(--space-6)
102
-
103
- number:
104
- font: var(--font-display), var(--text-4xl), var(--weight-bold)
105
- color: var(--text-heading)
106
- letter-spacing: var(--tracking-tight)
107
-
108
- label:
109
- font: var(--font-body), var(--text-sm), var(--weight-medium)
110
- color: var(--text-secondary)
111
- margin-top: var(--space-1)
112
-
113
- trend:
114
- font: var(--font-body), var(--text-sm), var(--weight-medium)
115
- color: var(--semantic-green) or var(--semantic-red)
116
- includes: arrow icon + percentage
117
- ```
118
-
119
- ### Feature Card
120
- ```
121
- extends: Base Card
122
- padding: var(--space-8)
123
- border-radius: var(--radius-2xl)
124
-
125
- icon area:
126
- width: 48px; height: 48px
127
- background: var(--accent-subtle)
128
- border-radius: var(--radius-lg)
129
- display: flex; align-items: center; justify-content: center
130
- icon color: var(--accent)
131
-
132
- title:
133
- font: var(--font-display), var(--text-xl), var(--weight-semibold)
134
- color: var(--text-heading)
135
- margin-top: var(--space-4)
136
-
137
- description:
138
- font: var(--font-body), var(--text-base), var(--weight-normal)
139
- color: var(--text-secondary)
140
- line-height: var(--leading-relaxed)
141
- margin-top: var(--space-2)
142
- ```
143
-
144
- ### Media Card
145
- ```
146
- extends: Base Card
147
- padding: 0
148
- overflow: hidden
149
- border-radius: var(--radius-2xl)
150
-
151
- media:
152
- width: 100%
153
- aspect-ratio: 16/9 or 4/3
154
- object-fit: cover
155
-
156
- body:
157
- padding: var(--space-5) var(--space-6)
158
-
159
- title:
160
- font: var(--font-display), var(--text-lg), var(--weight-semibold)
161
- color: var(--text-heading)
162
-
163
- meta:
164
- font: var(--font-body), var(--text-sm)
165
- color: var(--text-secondary)
166
- margin-top: var(--space-2)
167
- ```
168
-
169
- ---
170
-
171
- ## Buttons
172
-
173
- ### Primary Button
174
- ```
175
- height: var(--control-md)
176
- padding: 0 var(--space-5)
177
- background: var(--accent)
178
- color: var(--accent-contrast)
179
- border: none
180
- border-radius: var(--radius-lg)
181
- font: var(--font-body), var(--text-sm), var(--weight-semibold)
182
- cursor: pointer
183
- transition: var(--transition-fast)
184
-
185
- hover:
186
- background: var(--accent-hover)
187
-
188
- active:
189
- transform: scale(0.98)
190
-
191
- disabled:
192
- opacity: 0.5
193
- pointer-events: none
194
- ```
195
-
196
- ### Secondary Button
197
- ```
198
- extends: Primary (dimensions, font, radius)
199
- background: transparent
200
- color: var(--text-heading)
201
- border: 1px solid var(--border-medium)
202
-
203
- hover:
204
- background: var(--bg-elevated)
205
- border-color: var(--border-strong)
206
- ```
207
-
208
- ### Ghost Button
209
- ```
210
- extends: Primary (dimensions, font)
211
- background: transparent
212
- color: var(--text-secondary)
213
- border: none
214
-
215
- hover:
216
- background: var(--bg-elevated)
217
- color: var(--text-heading)
218
- ```
219
-
220
- ### Large CTA (hero sections)
221
- ```
222
- height: var(--control-xl)
223
- padding: 0 var(--space-8)
224
- border-radius: var(--radius-xl)
225
- font-size: var(--text-base)
226
- shadow: var(--shadow-md)
227
-
228
- hover:
229
- shadow: var(--shadow-lg)
230
- transform: translateY(-1px)
231
- ```
232
-
233
- ---
234
-
235
- ## Forms
236
-
237
- ### Text Input
238
- ```
239
- height: var(--control-md)
240
- padding: 0 var(--space-4)
241
- background: var(--bg-surface)
242
- border: 1px solid var(--border-medium)
243
- border-radius: var(--radius-md)
244
- font: var(--font-body), var(--text-base)
245
- color: var(--text-heading)
246
- transition: var(--transition-fast)
247
-
248
- placeholder:
249
- color: var(--text-muted)
250
-
251
- focus:
252
- border-color: var(--accent)
253
- box-shadow: 0 0 0 3px var(--accent-dim)
254
- outline: none
255
-
256
- error:
257
- border-color: var(--semantic-red)
258
- box-shadow: 0 0 0 3px var(--semantic-red-dim)
259
- ```
260
-
261
- ### Label
262
- ```
263
- font: var(--font-body), var(--text-sm), var(--weight-medium)
264
- color: var(--text-heading)
265
- margin-bottom: var(--space-2)
266
- display: block
267
- ```
268
-
269
- ### Helper Text
270
- ```
271
- font: var(--font-body), var(--text-sm)
272
- color: var(--text-secondary)
273
- margin-top: var(--space-1)
274
- ```
275
-
276
- ### Error Message
277
- ```
278
- font: var(--font-body), var(--text-sm), var(--weight-medium)
279
- color: var(--semantic-red)
280
- margin-top: var(--space-1)
281
- ```
282
-
283
- ### Textarea
284
- ```
285
- extends: Text Input
286
- min-height: 120px
287
- padding: var(--space-3) var(--space-4)
288
- resize: vertical
289
- line-height: var(--leading-normal)
290
- ```
291
-
292
- ### Select
293
- ```
294
- extends: Text Input
295
- appearance: none
296
- background-image: chevron-down SVG
297
- background-position: right var(--space-3) center
298
- background-repeat: no-repeat
299
- padding-right: var(--space-10)
300
- ```
301
-
302
- ### Checkbox / Radio
303
- ```
304
- width: 20px; height: 20px
305
- border: 2px solid var(--border-strong)
306
- border-radius: var(--radius-sm) (checkbox) or var(--radius-full) (radio)
307
- transition: var(--transition-fast)
308
-
309
- checked:
310
- background: var(--accent)
311
- border-color: var(--accent)
312
- color: var(--accent-contrast) (checkmark)
313
- ```
314
-
315
- ### Toggle Switch
316
- ```
317
- width: 44px; height: 24px
318
- border-radius: var(--radius-full)
319
- background: var(--border-strong)
320
- transition: var(--transition-base)
321
-
322
- thumb:
323
- width: 20px; height: 20px
324
- border-radius: var(--radius-full)
325
- background: white
326
- shadow: var(--shadow-sm)
327
-
328
- checked:
329
- background: var(--accent)
330
- thumb: translate right
331
- ```
332
-
333
- ---
334
-
335
- ## Data Display
336
-
337
- ### Table
338
- ```
339
- width: 100%
340
- border-collapse: separate
341
- border-spacing: 0
342
-
343
- header row:
344
- background: var(--bg-elevated)
345
- font: var(--font-body), var(--text-sm), var(--weight-semibold)
346
- color: var(--text-heading)
347
- text-align: left
348
- padding: var(--space-3) var(--space-4)
349
- border-bottom: 1px solid var(--border-medium)
350
-
351
- body row:
352
- font: var(--font-body), var(--text-sm)
353
- color: var(--text-primary)
354
- padding: var(--space-3) var(--space-4)
355
- border-bottom: 1px solid var(--border-subtle)
356
- transition: var(--transition-fast)
357
-
358
- hover:
359
- background: var(--bg-elevated)
360
-
361
- first cell + last cell:
362
- border-radius: var(--radius-lg) on outer corners (first and last row)
363
- ```
364
-
365
- ### Badge
366
- ```
367
- display: inline-flex; align-items: center
368
- height: 24px
369
- padding: 0 var(--space-3)
370
- border-radius: var(--radius-full)
371
- font: var(--font-body), var(--text-xs), var(--weight-medium)
372
-
373
- variants:
374
- default: background: var(--bg-elevated), color: var(--text-secondary)
375
- accent: background: var(--accent-dim), color: var(--accent-strong)
376
- success: background: var(--semantic-green-dim), color: var(--semantic-green)
377
- warning: background: var(--semantic-amber-dim), color: var(--semantic-amber)
378
- error: background: var(--semantic-red-dim), color: var(--semantic-red)
379
- ```
380
-
381
- ### Avatar
382
- ```
383
- border-radius: var(--radius-full)
384
- object-fit: cover
385
-
386
- sizes:
387
- xs: 24px
388
- sm: 32px
389
- md: 40px
390
- lg: 56px
391
- xl: 80px
392
-
393
- fallback:
394
- background: var(--accent-dim)
395
- color: var(--accent)
396
- font: var(--font-body), var(--weight-semibold)
397
- display: flex; align-items: center; justify-content: center
398
- (shows initials)
399
- ```
400
-
401
- ### Empty State
402
- ```
403
- text-align: center
404
- padding: var(--space-16) var(--space-8)
405
-
406
- illustration:
407
- max-width: 240px
408
- margin: 0 auto var(--space-6)
409
- (warm, hand-drawn style — never cold geometric)
410
-
411
- title:
412
- font: var(--font-display), var(--text-xl), var(--weight-semibold)
413
- color: var(--text-heading)
414
-
415
- description:
416
- font: var(--font-body), var(--text-base)
417
- color: var(--text-secondary)
418
- max-width: 400px
419
- margin: var(--space-2) auto var(--space-6)
420
-
421
- action:
422
- Primary Button
423
- ```
424
-
425
- ---
426
-
427
- ## Feedback
428
-
429
- ### Toast / Notification
430
- ```
431
- background: var(--bg-surface)
432
- border: 1px solid var(--border-medium)
433
- border-radius: var(--radius-xl)
434
- padding: var(--space-4) var(--space-5)
435
- shadow: var(--shadow-lg)
436
- max-width: 420px
437
- display: flex; gap: var(--space-3); align-items: flex-start
438
-
439
- icon: 20px, colored by semantic type
440
- title: var(--font-body), var(--text-sm), var(--weight-semibold), var(--text-heading)
441
- message: var(--font-body), var(--text-sm), var(--text-secondary)
442
- dismiss: Ghost Button, icon-only, top-right
443
- ```
444
-
445
- ### Modal
446
- ```
447
- background: var(--bg-surface)
448
- border: 1px solid var(--border-subtle)
449
- border-radius: var(--radius-2xl)
450
- shadow: var(--shadow-xl)
451
- padding: var(--space-8)
452
- max-width: 480px
453
- width: 90vw
454
-
455
- backdrop:
456
- background: rgba(45, 40, 35, 0.40)
457
- backdrop-filter: blur(4px)
458
-
459
- title:
460
- font: var(--font-display), var(--text-xl), var(--weight-semibold)
461
- color: var(--text-heading)
462
-
463
- body:
464
- font: var(--font-body), var(--text-base)
465
- color: var(--text-primary)
466
- margin-top: var(--space-4)
467
-
468
- actions:
469
- margin-top: var(--space-6)
470
- display: flex; gap: var(--space-3); justify-content: flex-end
471
- ```
472
-
473
- ### Tooltip
474
- ```
475
- background: var(--text-heading)
476
- color: var(--text-inverse)
477
- padding: var(--space-2) var(--space-3)
478
- border-radius: var(--radius-md)
479
- font: var(--font-body), var(--text-xs), var(--weight-medium)
480
- shadow: var(--shadow-md)
481
- max-width: 240px
482
- ```
483
-
484
- ### Progress Bar
485
- ```
486
- height: 8px
487
- background: var(--bg-elevated)
488
- border-radius: var(--radius-full)
489
- overflow: hidden
490
-
491
- fill:
492
- height: 100%
493
- background: var(--accent)
494
- border-radius: var(--radius-full)
495
- transition: width var(--transition-slow)
496
- ```
497
-
498
- ### Skeleton Loader
499
- ```
500
- background: var(--bg-elevated)
501
- border-radius: var(--radius-md) (for text) or var(--radius-xl) (for cards)
502
- animation: warm-pulse 1.8s ease-in-out infinite
503
-
504
- @keyframes warm-pulse {
505
- 0%, 100% { opacity: 1; }
506
- 50% { opacity: 0.5; }
507
- }
508
- ```
1
+ # Components — Warm Craft UI
2
+
3
+ Reusable component specifications. Every component must use tokens from `design-tokens.md`. Never hardcode colors, sizes, or radii.
4
+
5
+ ---
6
+
7
+ ## Navigation
8
+
9
+ ### Top Bar
10
+ ```
11
+ height: 64px
12
+ background: var(--bg-surface)
13
+ border-bottom: 1px solid var(--border-subtle)
14
+ shadow: var(--shadow-xs)
15
+ padding: 0 var(--space-6)
16
+ display: flex; align-items: center; justify-content: space-between
17
+ ```
18
+
19
+ Content slots:
20
+ - **Left:** Logo (mark or wordmark, max-height 28px)
21
+ - **Center:** Search bar (optional, rounded pill `var(--radius-full)`, `var(--bg-elevated)` background, max-width 480px)
22
+ - **Right:** Notification icon + User avatar (rounded full, 36px)
23
+
24
+ ### Sidebar Navigation
25
+ ```
26
+ width: 240px
27
+ background: var(--bg-void)
28
+ padding: var(--space-4) var(--space-3)
29
+ border-right: 1px solid var(--border-subtle)
30
+ ```
31
+
32
+ Nav item:
33
+ ```
34
+ height: var(--control-md) /* 40px */
35
+ padding: 0 var(--space-3)
36
+ border-radius: var(--radius-lg)
37
+ font: var(--font-body), var(--text-sm), var(--weight-medium)
38
+ color: var(--text-secondary)
39
+ transition: var(--transition-fast)
40
+ display: flex; align-items: center; gap: var(--space-3)
41
+ icon: 20px, stroke-width 1.5
42
+
43
+ hover:
44
+ background: var(--bg-elevated)
45
+ color: var(--text-primary)
46
+
47
+ active:
48
+ background: var(--bg-elevated)
49
+ color: var(--text-heading)
50
+ font-weight: var(--weight-semibold)
51
+ ```
52
+
53
+ Nav section label:
54
+ ```
55
+ font: var(--font-body), var(--text-xs), var(--weight-medium)
56
+ color: var(--text-muted)
57
+ letter-spacing: var(--tracking-wider)
58
+ text-transform: uppercase
59
+ padding: var(--space-6) var(--space-3) var(--space-2)
60
+ ```
61
+
62
+ ### Bottom Tab Bar (mobile)
63
+ ```
64
+ height: 56px
65
+ background: var(--bg-surface)
66
+ border-top: 1px solid var(--border-subtle)
67
+ display: flex; justify-content: space-around; align-items: center
68
+
69
+ tab item:
70
+ icon: 24px
71
+ label: var(--text-xs), var(--weight-medium)
72
+ color: var(--text-muted)
73
+ gap: var(--space-1)
74
+
75
+ active:
76
+ color: var(--accent)
77
+ ```
78
+
79
+ ---
80
+
81
+ ## Cards
82
+
83
+ ### Base Card
84
+ ```
85
+ background: var(--bg-surface)
86
+ border: 1px solid var(--border-subtle)
87
+ border-radius: var(--radius-xl)
88
+ padding: var(--space-6)
89
+ shadow: var(--shadow-sm)
90
+ transition: var(--transition-base)
91
+
92
+ hover (when clickable):
93
+ shadow: var(--shadow-md)
94
+ transform: translateY(-1px)
95
+ border-color: var(--border-medium)
96
+ ```
97
+
98
+ ### Stat Card
99
+ ```
100
+ extends: Base Card
101
+ padding: var(--space-5) var(--space-6)
102
+
103
+ number:
104
+ font: var(--font-display), var(--text-4xl), var(--weight-bold)
105
+ color: var(--text-heading)
106
+ letter-spacing: var(--tracking-tight)
107
+
108
+ label:
109
+ font: var(--font-body), var(--text-sm), var(--weight-medium)
110
+ color: var(--text-secondary)
111
+ margin-top: var(--space-1)
112
+
113
+ trend:
114
+ font: var(--font-body), var(--text-sm), var(--weight-medium)
115
+ color: var(--semantic-green) or var(--semantic-red)
116
+ includes: arrow icon + percentage
117
+ ```
118
+
119
+ ### Feature Card
120
+ ```
121
+ extends: Base Card
122
+ padding: var(--space-8)
123
+ border-radius: var(--radius-2xl)
124
+
125
+ icon area:
126
+ width: 48px; height: 48px
127
+ background: var(--accent-subtle)
128
+ border-radius: var(--radius-lg)
129
+ display: flex; align-items: center; justify-content: center
130
+ icon color: var(--accent)
131
+
132
+ title:
133
+ font: var(--font-display), var(--text-xl), var(--weight-semibold)
134
+ color: var(--text-heading)
135
+ margin-top: var(--space-4)
136
+
137
+ description:
138
+ font: var(--font-body), var(--text-base), var(--weight-normal)
139
+ color: var(--text-secondary)
140
+ line-height: var(--leading-relaxed)
141
+ margin-top: var(--space-2)
142
+ ```
143
+
144
+ ### Media Card
145
+ ```
146
+ extends: Base Card
147
+ padding: 0
148
+ overflow: hidden
149
+ border-radius: var(--radius-2xl)
150
+
151
+ media:
152
+ width: 100%
153
+ aspect-ratio: 16/9 or 4/3
154
+ object-fit: cover
155
+
156
+ body:
157
+ padding: var(--space-5) var(--space-6)
158
+
159
+ title:
160
+ font: var(--font-display), var(--text-lg), var(--weight-semibold)
161
+ color: var(--text-heading)
162
+
163
+ meta:
164
+ font: var(--font-body), var(--text-sm)
165
+ color: var(--text-secondary)
166
+ margin-top: var(--space-2)
167
+ ```
168
+
169
+ ---
170
+
171
+ ## Buttons
172
+
173
+ ### Primary Button
174
+ ```
175
+ height: var(--control-md)
176
+ padding: 0 var(--space-5)
177
+ background: var(--accent)
178
+ color: var(--accent-contrast)
179
+ border: none
180
+ border-radius: var(--radius-lg)
181
+ font: var(--font-body), var(--text-sm), var(--weight-semibold)
182
+ cursor: pointer
183
+ transition: var(--transition-fast)
184
+
185
+ hover:
186
+ background: var(--accent-hover)
187
+
188
+ active:
189
+ transform: scale(0.98)
190
+
191
+ disabled:
192
+ opacity: 0.5
193
+ pointer-events: none
194
+ ```
195
+
196
+ ### Secondary Button
197
+ ```
198
+ extends: Primary (dimensions, font, radius)
199
+ background: transparent
200
+ color: var(--text-heading)
201
+ border: 1px solid var(--border-medium)
202
+
203
+ hover:
204
+ background: var(--bg-elevated)
205
+ border-color: var(--border-strong)
206
+ ```
207
+
208
+ ### Ghost Button
209
+ ```
210
+ extends: Primary (dimensions, font)
211
+ background: transparent
212
+ color: var(--text-secondary)
213
+ border: none
214
+
215
+ hover:
216
+ background: var(--bg-elevated)
217
+ color: var(--text-heading)
218
+ ```
219
+
220
+ ### Large CTA (hero sections)
221
+ ```
222
+ height: var(--control-xl)
223
+ padding: 0 var(--space-8)
224
+ border-radius: var(--radius-xl)
225
+ font-size: var(--text-base)
226
+ shadow: var(--shadow-md)
227
+
228
+ hover:
229
+ shadow: var(--shadow-lg)
230
+ transform: translateY(-1px)
231
+ ```
232
+
233
+ ---
234
+
235
+ ## Forms
236
+
237
+ ### Text Input
238
+ ```
239
+ height: var(--control-md)
240
+ padding: 0 var(--space-4)
241
+ background: var(--bg-surface)
242
+ border: 1px solid var(--border-medium)
243
+ border-radius: var(--radius-md)
244
+ font: var(--font-body), var(--text-base)
245
+ color: var(--text-heading)
246
+ transition: var(--transition-fast)
247
+
248
+ placeholder:
249
+ color: var(--text-muted)
250
+
251
+ focus:
252
+ border-color: var(--accent)
253
+ box-shadow: 0 0 0 3px var(--accent-dim)
254
+ outline: none
255
+
256
+ error:
257
+ border-color: var(--semantic-red)
258
+ box-shadow: 0 0 0 3px var(--semantic-red-dim)
259
+ ```
260
+
261
+ ### Label
262
+ ```
263
+ font: var(--font-body), var(--text-sm), var(--weight-medium)
264
+ color: var(--text-heading)
265
+ margin-bottom: var(--space-2)
266
+ display: block
267
+ ```
268
+
269
+ ### Helper Text
270
+ ```
271
+ font: var(--font-body), var(--text-sm)
272
+ color: var(--text-secondary)
273
+ margin-top: var(--space-1)
274
+ ```
275
+
276
+ ### Error Message
277
+ ```
278
+ font: var(--font-body), var(--text-sm), var(--weight-medium)
279
+ color: var(--semantic-red)
280
+ margin-top: var(--space-1)
281
+ ```
282
+
283
+ ### Textarea
284
+ ```
285
+ extends: Text Input
286
+ min-height: 120px
287
+ padding: var(--space-3) var(--space-4)
288
+ resize: vertical
289
+ line-height: var(--leading-normal)
290
+ ```
291
+
292
+ ### Select
293
+ ```
294
+ extends: Text Input
295
+ appearance: none
296
+ background-image: chevron-down SVG
297
+ background-position: right var(--space-3) center
298
+ background-repeat: no-repeat
299
+ padding-right: var(--space-10)
300
+ ```
301
+
302
+ ### Checkbox / Radio
303
+ ```
304
+ width: 20px; height: 20px
305
+ border: 2px solid var(--border-strong)
306
+ border-radius: var(--radius-sm) (checkbox) or var(--radius-full) (radio)
307
+ transition: var(--transition-fast)
308
+
309
+ checked:
310
+ background: var(--accent)
311
+ border-color: var(--accent)
312
+ color: var(--accent-contrast) (checkmark)
313
+ ```
314
+
315
+ ### Toggle Switch
316
+ ```
317
+ width: 44px; height: 24px
318
+ border-radius: var(--radius-full)
319
+ background: var(--border-strong)
320
+ transition: var(--transition-base)
321
+
322
+ thumb:
323
+ width: 20px; height: 20px
324
+ border-radius: var(--radius-full)
325
+ background: white
326
+ shadow: var(--shadow-sm)
327
+
328
+ checked:
329
+ background: var(--accent)
330
+ thumb: translate right
331
+ ```
332
+
333
+ ---
334
+
335
+ ## Data Display
336
+
337
+ ### Table
338
+ ```
339
+ width: 100%
340
+ border-collapse: separate
341
+ border-spacing: 0
342
+
343
+ header row:
344
+ background: var(--bg-elevated)
345
+ font: var(--font-body), var(--text-sm), var(--weight-semibold)
346
+ color: var(--text-heading)
347
+ text-align: left
348
+ padding: var(--space-3) var(--space-4)
349
+ border-bottom: 1px solid var(--border-medium)
350
+
351
+ body row:
352
+ font: var(--font-body), var(--text-sm)
353
+ color: var(--text-primary)
354
+ padding: var(--space-3) var(--space-4)
355
+ border-bottom: 1px solid var(--border-subtle)
356
+ transition: var(--transition-fast)
357
+
358
+ hover:
359
+ background: var(--bg-elevated)
360
+
361
+ first cell + last cell:
362
+ border-radius: var(--radius-lg) on outer corners (first and last row)
363
+ ```
364
+
365
+ ### Badge
366
+ ```
367
+ display: inline-flex; align-items: center
368
+ height: 24px
369
+ padding: 0 var(--space-3)
370
+ border-radius: var(--radius-full)
371
+ font: var(--font-body), var(--text-xs), var(--weight-medium)
372
+
373
+ variants:
374
+ default: background: var(--bg-elevated), color: var(--text-secondary)
375
+ accent: background: var(--accent-dim), color: var(--accent-strong)
376
+ success: background: var(--semantic-green-dim), color: var(--semantic-green)
377
+ warning: background: var(--semantic-amber-dim), color: var(--semantic-amber)
378
+ error: background: var(--semantic-red-dim), color: var(--semantic-red)
379
+ ```
380
+
381
+ ### Avatar
382
+ ```
383
+ border-radius: var(--radius-full)
384
+ object-fit: cover
385
+
386
+ sizes:
387
+ xs: 24px
388
+ sm: 32px
389
+ md: 40px
390
+ lg: 56px
391
+ xl: 80px
392
+
393
+ fallback:
394
+ background: var(--accent-dim)
395
+ color: var(--accent)
396
+ font: var(--font-body), var(--weight-semibold)
397
+ display: flex; align-items: center; justify-content: center
398
+ (shows initials)
399
+ ```
400
+
401
+ ### Empty State
402
+ ```
403
+ text-align: center
404
+ padding: var(--space-16) var(--space-8)
405
+
406
+ illustration:
407
+ max-width: 240px
408
+ margin: 0 auto var(--space-6)
409
+ (warm, hand-drawn style — never cold geometric)
410
+
411
+ title:
412
+ font: var(--font-display), var(--text-xl), var(--weight-semibold)
413
+ color: var(--text-heading)
414
+
415
+ description:
416
+ font: var(--font-body), var(--text-base)
417
+ color: var(--text-secondary)
418
+ max-width: 400px
419
+ margin: var(--space-2) auto var(--space-6)
420
+
421
+ action:
422
+ Primary Button
423
+ ```
424
+
425
+ ---
426
+
427
+ ## Feedback
428
+
429
+ ### Toast / Notification
430
+ ```
431
+ background: var(--bg-surface)
432
+ border: 1px solid var(--border-medium)
433
+ border-radius: var(--radius-xl)
434
+ padding: var(--space-4) var(--space-5)
435
+ shadow: var(--shadow-lg)
436
+ max-width: 420px
437
+ display: flex; gap: var(--space-3); align-items: flex-start
438
+
439
+ icon: 20px, colored by semantic type
440
+ title: var(--font-body), var(--text-sm), var(--weight-semibold), var(--text-heading)
441
+ message: var(--font-body), var(--text-sm), var(--text-secondary)
442
+ dismiss: Ghost Button, icon-only, top-right
443
+ ```
444
+
445
+ ### Modal
446
+ ```
447
+ background: var(--bg-surface)
448
+ border: 1px solid var(--border-subtle)
449
+ border-radius: var(--radius-2xl)
450
+ shadow: var(--shadow-xl)
451
+ padding: var(--space-8)
452
+ max-width: 480px
453
+ width: min(100%, 42rem)
454
+
455
+ backdrop:
456
+ background: rgba(45, 40, 35, 0.40)
457
+ backdrop-filter: blur(4px)
458
+
459
+ title:
460
+ font: var(--font-display), var(--text-xl), var(--weight-semibold)
461
+ color: var(--text-heading)
462
+
463
+ body:
464
+ font: var(--font-body), var(--text-base)
465
+ color: var(--text-primary)
466
+ margin-top: var(--space-4)
467
+
468
+ actions:
469
+ margin-top: var(--space-6)
470
+ display: flex; gap: var(--space-3); justify-content: flex-end
471
+ ```
472
+
473
+ ### Tooltip
474
+ ```
475
+ background: var(--text-heading)
476
+ color: var(--text-inverse)
477
+ padding: var(--space-2) var(--space-3)
478
+ border-radius: var(--radius-md)
479
+ font: var(--font-body), var(--text-xs), var(--weight-medium)
480
+ shadow: var(--shadow-md)
481
+ max-width: 240px
482
+ ```
483
+
484
+ ### Progress Bar
485
+ ```
486
+ height: 8px
487
+ background: var(--bg-elevated)
488
+ border-radius: var(--radius-full)
489
+ overflow: hidden
490
+
491
+ fill:
492
+ height: 100%
493
+ background: var(--accent)
494
+ border-radius: var(--radius-full)
495
+ transition: width var(--transition-slow)
496
+ ```
497
+
498
+ ### Skeleton Loader
499
+ ```
500
+ background: var(--bg-elevated)
501
+ border-radius: var(--radius-md) (for text) or var(--radius-xl) (for cards)
502
+ animation: warm-pulse 1.8s ease-in-out infinite
503
+
504
+ @keyframes warm-pulse {
505
+ 0%, 100% { opacity: 1; }
506
+ 50% { opacity: 0.5; }
507
+ }
508
+ ```