@hirobius/design-system 0.8.1

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 (111) hide show
  1. package/LICENSE/main.tsx +21 -0
  2. package/README.md +124 -0
  3. package/dist/chunks/TokenDisplayContext-B3gxyQN7.js +95 -0
  4. package/dist/chunks/form-DnGRy27o.js +63 -0
  5. package/dist/cn.js +8 -0
  6. package/dist/contexts.js +133 -0
  7. package/dist/form.js +62 -0
  8. package/dist/hirobius-ui.js +5611 -0
  9. package/dist/manifest.js +28 -0
  10. package/dist/tokens.css +1 -0
  11. package/dist/tokens.js +693 -0
  12. package/dist/types/src/app/components/activity-feed.d.ts +43 -0
  13. package/dist/types/src/app/components/alert.d.ts +18 -0
  14. package/dist/types/src/app/components/asset-img.d.ts +54 -0
  15. package/dist/types/src/app/components/avatar.d.ts +23 -0
  16. package/dist/types/src/app/components/badge.d.ts +20 -0
  17. package/dist/types/src/app/components/breadcrumb.d.ts +26 -0
  18. package/dist/types/src/app/components/button.d.ts +37 -0
  19. package/dist/types/src/app/components/callout.d.ts +23 -0
  20. package/dist/types/src/app/components/card.d.ts +119 -0
  21. package/dist/types/src/app/components/checkbox.d.ts +20 -0
  22. package/dist/types/src/app/components/cinematic-link.d.ts +13 -0
  23. package/dist/types/src/app/components/code-block.d.ts +29 -0
  24. package/dist/types/src/app/components/combobox.d.ts +46 -0
  25. package/dist/types/src/app/components/component-instance-matrix.d.ts +21 -0
  26. package/dist/types/src/app/components/container.d.ts +31 -0
  27. package/dist/types/src/app/components/dialog.d.ts +73 -0
  28. package/dist/types/src/app/components/disclosure.d.ts +32 -0
  29. package/dist/types/src/app/components/divider.d.ts +21 -0
  30. package/dist/types/src/app/components/doc-link-card.d.ts +26 -0
  31. package/dist/types/src/app/components/empty-state.d.ts +24 -0
  32. package/dist/types/src/app/components/error-boundary.d.ts +25 -0
  33. package/dist/types/src/app/components/error-pattern.d.ts +9 -0
  34. package/dist/types/src/app/components/field.d.ts +25 -0
  35. package/dist/types/src/app/components/form.d.ts +106 -0
  36. package/dist/types/src/app/components/foundation-swatch.d.ts +39 -0
  37. package/dist/types/src/app/components/grid.d.ts +65 -0
  38. package/dist/types/src/app/components/heading-stack.d.ts +42 -0
  39. package/dist/types/src/app/components/history-card.d.ts +12 -0
  40. package/dist/types/src/app/components/icon-button.d.ts +23 -0
  41. package/dist/types/src/app/components/icon.d.ts +30 -0
  42. package/dist/types/src/app/components/info-page.d.ts +10 -0
  43. package/dist/types/src/app/components/inline-code.d.ts +12 -0
  44. package/dist/types/src/app/components/inline-link.d.ts +17 -0
  45. package/dist/types/src/app/components/input.d.ts +46 -0
  46. package/dist/types/src/app/components/lab/tokenUtils.d.ts +38 -0
  47. package/dist/types/src/app/components/menu.d.ts +56 -0
  48. package/dist/types/src/app/components/nav-group.d.ts +24 -0
  49. package/dist/types/src/app/components/nav-item.d.ts +21 -0
  50. package/dist/types/src/app/components/not-found-pattern.d.ts +1 -0
  51. package/dist/types/src/app/components/page.d.ts +43 -0
  52. package/dist/types/src/app/components/pagination.d.ts +24 -0
  53. package/dist/types/src/app/components/popover.d.ts +44 -0
  54. package/dist/types/src/app/components/progress.d.ts +25 -0
  55. package/dist/types/src/app/components/radio.d.ts +18 -0
  56. package/dist/types/src/app/components/segmented-control.d.ts +33 -0
  57. package/dist/types/src/app/components/skeleton.d.ts +25 -0
  58. package/dist/types/src/app/components/sketch.d.ts +13 -0
  59. package/dist/types/src/app/components/slider.d.ts +22 -0
  60. package/dist/types/src/app/components/spinner.d.ts +20 -0
  61. package/dist/types/src/app/components/stack.d.ts +39 -0
  62. package/dist/types/src/app/components/stat.d.ts +24 -0
  63. package/dist/types/src/app/components/status-list-item.d.ts +25 -0
  64. package/dist/types/src/app/components/status-tile.d.ts +22 -0
  65. package/dist/types/src/app/components/stepper-field.d.ts +13 -0
  66. package/dist/types/src/app/components/surface-padding.d.ts +18 -0
  67. package/dist/types/src/app/components/surface.d.ts +30 -0
  68. package/dist/types/src/app/components/table.d.ts +40 -0
  69. package/dist/types/src/app/components/tabs.d.ts +27 -0
  70. package/dist/types/src/app/components/tag.d.ts +32 -0
  71. package/dist/types/src/app/components/text-lockup.d.ts +38 -0
  72. package/dist/types/src/app/components/text.d.ts +26 -0
  73. package/dist/types/src/app/components/tile-grid.d.ts +17 -0
  74. package/dist/types/src/app/components/toast.d.ts +56 -0
  75. package/dist/types/src/app/components/toggle.d.ts +18 -0
  76. package/dist/types/src/app/components/token.d.ts +59 -0
  77. package/dist/types/src/app/components/tooltip.d.ts +33 -0
  78. package/dist/types/src/app/context/DemoStateContext.d.ts +21 -0
  79. package/dist/types/src/app/context/FontContext.d.ts +4 -0
  80. package/dist/types/src/app/context/LanguageContext.d.ts +23 -0
  81. package/dist/types/src/app/context/RouterContext.d.ts +61 -0
  82. package/dist/types/src/app/context/TenantContext.d.ts +29 -0
  83. package/dist/types/src/app/context/ThemeContext.d.ts +18 -0
  84. package/dist/types/src/app/context/TokenDisplayContext.d.ts +11 -0
  85. package/dist/types/src/app/context/index.d.ts +19 -0
  86. package/dist/types/src/app/data/manifest-types.d.ts +128 -0
  87. package/dist/types/src/app/design-system/generated-token-refs.d.ts +586 -0
  88. package/dist/types/src/app/design-system/generated-token-values.d.ts +223 -0
  89. package/dist/types/src/app/design-system/theme.d.ts +32 -0
  90. package/dist/types/src/app/design-system/tokens.d.ts +333 -0
  91. package/dist/types/src/app/hooks/useFocusVisible.d.ts +9 -0
  92. package/dist/types/src/app/hooks/useInteractionState.d.ts +27 -0
  93. package/dist/types/src/app/layouts/CaseStudyLayout.d.ts +21 -0
  94. package/dist/types/src/app/layouts/DocLayout.d.ts +16 -0
  95. package/dist/types/src/app/layouts/EmbeddedDocLayoutContext.d.ts +6 -0
  96. package/dist/types/src/app/lib/nav-active.d.ts +16 -0
  97. package/dist/types/src/app/lib/navLevels.d.ts +4 -0
  98. package/dist/types/src/app/pages/hds/HdsSystemDocLayout.d.ts +7 -0
  99. package/dist/types/src/form/hds-form.d.ts +61 -0
  100. package/dist/types/src/form/index.d.ts +30 -0
  101. package/dist/types/src/form/use-hds-form.d.ts +23 -0
  102. package/dist/types/src/index.d.ts +2276 -0
  103. package/dist/types/src/lib/deprecation.d.ts +4 -0
  104. package/dist/types/src/lib/manifest-entry.d.ts +3 -0
  105. package/dist/types/src/lib/utils.d.ts +3 -0
  106. package/dist/variables.css +461 -0
  107. package/hirobius.tokens.json +2220 -0
  108. package/package.json +366 -0
  109. package/protocol/envelope.mjs +201 -0
  110. package/protocol/figma-snapshot.schema.json +190 -0
  111. package/public/hds-manifest.json +11230 -0
@@ -0,0 +1,2220 @@
1
+ {
2
+ "$schema": "https://www.designtokens.org/schemas/2025.10/format.json",
3
+ "$description": "Adrian Milsap hirobius design tokens - W3C DTCG 2025.10 compliant, Figma SDS architecture",
4
+ "primitive": {
5
+ "$description": "Base values used as inputs to derived token layers.",
6
+ "color": {
7
+ "$type": "color",
8
+ "neutral": {
9
+ "50": {
10
+ "$value": "#fafafa",
11
+ "$description": "Specific value within the neutral range at a defined lightness step."
12
+ },
13
+ "100": {
14
+ "$value": "#f5f5f5",
15
+ "$description": "Specific value within the neutral range at a defined lightness step."
16
+ },
17
+ "200": {
18
+ "$value": "#e5e5e5",
19
+ "$description": "Specific value within the neutral range at a defined lightness step."
20
+ },
21
+ "300": {
22
+ "$value": "#d4d4d4",
23
+ "$description": "Specific value within the neutral range at a defined lightness step."
24
+ },
25
+ "400": {
26
+ "$value": "#a3a3a3",
27
+ "$description": "Specific value within the neutral range at a defined lightness step."
28
+ },
29
+ "500": {
30
+ "$value": "#737373",
31
+ "$description": "Specific value within the neutral range at a defined lightness step."
32
+ },
33
+ "600": {
34
+ "$value": "#525252",
35
+ "$description": "Specific value within the neutral range at a defined lightness step."
36
+ },
37
+ "700": {
38
+ "$value": "#404040",
39
+ "$description": "Specific value within the neutral range at a defined lightness step."
40
+ },
41
+ "800": {
42
+ "$value": "#262626",
43
+ "$description": "Specific value within the neutral range at a defined lightness step."
44
+ },
45
+ "850": {
46
+ "$value": "#1a1a1a",
47
+ "$description": "Specific value within the neutral range at a defined lightness step."
48
+ },
49
+ "900": {
50
+ "$value": "#111111",
51
+ "$description": "Specific value within the neutral range at a defined lightness step."
52
+ },
53
+ "950": {
54
+ "$value": "#0a0a0a",
55
+ "$description": "Specific value within the neutral range at a defined lightness step."
56
+ },
57
+ "$description": "Discrete values within the neutral range at defined lightness steps.",
58
+ "white": {
59
+ "$value": "#ffffff",
60
+ "$description": "Specific value within the neutral range at a defined lightness step."
61
+ },
62
+ "black": {
63
+ "$value": "#000000",
64
+ "$description": "Specific value within the neutral range at a defined lightness step."
65
+ }
66
+ },
67
+ "blue": {
68
+ "50": {
69
+ "$value": "oklch(0.96 0.03 266.54)",
70
+ "$description": "Specific value within the blue range at a defined lightness step."
71
+ },
72
+ "100": {
73
+ "$value": "oklch(0.92 0.04 266.54)",
74
+ "$description": "Specific value within the blue range at a defined lightness step."
75
+ },
76
+ "200": {
77
+ "$value": "oklch(0.88 0.07 266.54)",
78
+ "$description": "Specific value within the blue range at a defined lightness step."
79
+ },
80
+ "300": {
81
+ "$value": "oklch(0.70 0.2903 266.54)",
82
+ "$description": "Specific value within the blue range at a defined lightness step."
83
+ },
84
+ "400": {
85
+ "$value": "oklch(0.65 0.2903 266.54)",
86
+ "$description": "Specific value within the blue range at a defined lightness step."
87
+ },
88
+ "450": {
89
+ "$value": "oklch(0.56 0.29 266.60)",
90
+ "$description": "Specific value within the blue range at a defined lightness step."
91
+ },
92
+ "500": {
93
+ "$value": "#1E2EFD",
94
+ "$description": "Specific value within the blue range at a defined lightness step."
95
+ },
96
+ "600": {
97
+ "$value": "oklch(0.45 0.2903 266.54)",
98
+ "$description": "Specific value within the blue range at a defined lightness step."
99
+ },
100
+ "700": {
101
+ "$value": "oklch(0.44 0.2903 266.54)",
102
+ "$description": "Specific value within the blue range at a defined lightness step."
103
+ },
104
+ "800": {
105
+ "$value": "oklch(0.30 0.07 266.54)",
106
+ "$description": "Specific value within the blue range at a defined lightness step."
107
+ },
108
+ "900": {
109
+ "$value": "oklch(0.22 0.05 266.54)",
110
+ "$description": "Specific value within the blue range at a defined lightness step."
111
+ },
112
+ "$description": "Discrete values within the blue range at defined lightness steps."
113
+ },
114
+ "red": {
115
+ "50": {
116
+ "$value": "#fef2f2",
117
+ "$description": "Specific value within the red range at a defined lightness step."
118
+ },
119
+ "400": {
120
+ "$value": "#f87171",
121
+ "$description": "Specific value within the red range at a defined lightness step."
122
+ },
123
+ "700": {
124
+ "$value": "#b91c1c",
125
+ "$description": "Specific value within the red range at a defined lightness step."
126
+ },
127
+ "950": {
128
+ "$value": "#450a0a",
129
+ "$description": "Specific value within the red range at a defined lightness step."
130
+ },
131
+ "$description": "Discrete values within the red range at defined lightness steps."
132
+ },
133
+ "green": {
134
+ "50": {
135
+ "$value": "#ecfdf5",
136
+ "$description": "Specific value within the green range at a defined lightness step."
137
+ },
138
+ "400": {
139
+ "$value": "#34d399",
140
+ "$description": "Specific value within the green range at a defined lightness step."
141
+ },
142
+ "700": {
143
+ "$value": "#047857",
144
+ "$description": "Specific value within the green range at a defined lightness step."
145
+ },
146
+ "950": {
147
+ "$value": "#022c22",
148
+ "$description": "Specific value within the green range at a defined lightness step."
149
+ },
150
+ "$description": "Discrete values within the green range at defined lightness steps."
151
+ },
152
+ "amber": {
153
+ "50": {
154
+ "$value": "#fffbeb",
155
+ "$description": "Specific value within the amber range at a defined lightness step."
156
+ },
157
+ "400": {
158
+ "$value": "#fbbf24",
159
+ "$description": "Specific value within the amber range at a defined lightness step."
160
+ },
161
+ "800": {
162
+ "$value": "#92400e",
163
+ "$description": "Specific value within the amber range at a defined lightness step."
164
+ },
165
+ "950": {
166
+ "$value": "#451a03",
167
+ "$description": "Specific value within the amber range at a defined lightness step."
168
+ },
169
+ "$description": "Discrete values within the amber range at defined lightness steps."
170
+ },
171
+ "stone": {
172
+ "$description": "Warm stone/brown palette for Concrete Creations brand accent ramp. PLACEHOLDER values pending final brand identity work.",
173
+ "100": {
174
+ "$value": "#F5EFE7",
175
+ "$description": "Stone 100 — near-white warm tint; accent-subtle surface."
176
+ },
177
+ "400": {
178
+ "$value": "#D0B492",
179
+ "$description": "Stone 400 — light warm tone; dark-mode pressed accent."
180
+ },
181
+ "450": {
182
+ "$value": "#BC9D7E",
183
+ "$description": "Stone 450 — medium warm tone; dark-mode hover accent."
184
+ },
185
+ "500": {
186
+ "$value": "#A8896A",
187
+ "$description": "Stone 500 — mid warm tone; dark-mode rest accent."
188
+ },
189
+ "600": {
190
+ "$value": "#8B6F47",
191
+ "$description": "Stone 600 — primary warm stone; light-mode rest accent and CTA surface."
192
+ },
193
+ "700": {
194
+ "$value": "#75593A",
195
+ "$description": "Stone 700 — darker warm stone; light-mode hover accent."
196
+ },
197
+ "800": {
198
+ "$value": "#5C432A",
199
+ "$description": "Stone 800 — deep warm stone; light-mode pressed accent."
200
+ },
201
+ "950": {
202
+ "$value": "#3A2E1F",
203
+ "$description": "Stone 950 — near-black warm tone; dark-mode subtle accent surface."
204
+ }
205
+ },
206
+ "projectBrand": {
207
+ "microsoftGameDev": {
208
+ "100": {
209
+ "$value": "#E5E5FC",
210
+ "$description": "Light support tone for the Microsoft Game Dev project brand."
211
+ },
212
+ "500": {
213
+ "$value": "#6d31fb",
214
+ "$description": "Primary accent tone for the Microsoft Game Dev project brand."
215
+ },
216
+ "900": {
217
+ "$value": "oklch(0.22 0.16 304)",
218
+ "$description": "Dark support tone for the Microsoft Game Dev project brand."
219
+ },
220
+ "$description": "Project-specific brand colors used in portfolio contexts."
221
+ },
222
+ "$description": "Project-specific brand color families reserved for portfolio surfaces."
223
+ }
224
+ },
225
+ "space": {
226
+ "0": {
227
+ "$value": {
228
+ "value": 0,
229
+ "unit": "px"
230
+ }
231
+ },
232
+ "1": {
233
+ "$value": {
234
+ "value": 4,
235
+ "unit": "px"
236
+ }
237
+ },
238
+ "2": {
239
+ "$value": {
240
+ "value": 8,
241
+ "unit": "px"
242
+ }
243
+ },
244
+ "3": {
245
+ "$value": {
246
+ "value": 12,
247
+ "unit": "px"
248
+ }
249
+ },
250
+ "4": {
251
+ "$value": {
252
+ "value": 16,
253
+ "unit": "px"
254
+ }
255
+ },
256
+ "5": {
257
+ "$value": {
258
+ "value": 20,
259
+ "unit": "px"
260
+ }
261
+ },
262
+ "6": {
263
+ "$value": {
264
+ "value": 24,
265
+ "unit": "px"
266
+ }
267
+ },
268
+ "7": {
269
+ "$value": {
270
+ "value": 28,
271
+ "unit": "px"
272
+ }
273
+ },
274
+ "8": {
275
+ "$value": {
276
+ "value": 32,
277
+ "unit": "px"
278
+ }
279
+ },
280
+ "10": {
281
+ "$value": {
282
+ "value": 40,
283
+ "unit": "px"
284
+ }
285
+ },
286
+ "12": {
287
+ "$value": {
288
+ "value": 48,
289
+ "unit": "px"
290
+ }
291
+ },
292
+ "16": {
293
+ "$value": {
294
+ "value": 64,
295
+ "unit": "px"
296
+ }
297
+ },
298
+ "20": {
299
+ "$value": {
300
+ "value": 80,
301
+ "unit": "px"
302
+ }
303
+ },
304
+ "24": {
305
+ "$value": {
306
+ "value": 96,
307
+ "unit": "px"
308
+ }
309
+ },
310
+ "32": {
311
+ "$value": {
312
+ "value": 128,
313
+ "unit": "px"
314
+ }
315
+ },
316
+ "$type": "dimension",
317
+ "$description": "Dimensional increments within the 4px base-unit spatial system.",
318
+ "px1": {
319
+ "$value": {
320
+ "value": 1,
321
+ "unit": "px"
322
+ }
323
+ },
324
+ "px2": {
325
+ "$value": {
326
+ "value": 2,
327
+ "unit": "px"
328
+ }
329
+ },
330
+ "px6": {
331
+ "$value": {
332
+ "value": 6,
333
+ "unit": "px"
334
+ }
335
+ },
336
+ "px10": {
337
+ "$value": {
338
+ "value": 10,
339
+ "unit": "px"
340
+ }
341
+ }
342
+ },
343
+ "blur": {
344
+ "8": {
345
+ "$value": {
346
+ "value": 8,
347
+ "unit": "px"
348
+ },
349
+ "$description": "8px blur step."
350
+ },
351
+ "16": {
352
+ "$value": {
353
+ "value": 16,
354
+ "unit": "px"
355
+ },
356
+ "$description": "Fullscreen backdrop blur for portfolio lightbox overlays."
357
+ },
358
+ "$type": "dimension",
359
+ "$description": "Backdrop blur strengths for frosted overlays and fullscreen media treatments."
360
+ },
361
+ "radius": {
362
+ "0": {
363
+ "$value": {
364
+ "value": 0,
365
+ "unit": "px"
366
+ }
367
+ },
368
+ "2": {
369
+ "$value": {
370
+ "value": 2,
371
+ "unit": "px"
372
+ }
373
+ },
374
+ "4": {
375
+ "$value": {
376
+ "value": 4,
377
+ "unit": "px"
378
+ }
379
+ },
380
+ "8": {
381
+ "$value": {
382
+ "value": 8,
383
+ "unit": "px"
384
+ }
385
+ },
386
+ "12": {
387
+ "$value": {
388
+ "value": 12,
389
+ "unit": "px"
390
+ }
391
+ },
392
+ "$type": "dimension",
393
+ "full": {
394
+ "$value": {
395
+ "value": 9999,
396
+ "unit": "px"
397
+ }
398
+ }
399
+ },
400
+ "typography": {
401
+ "family": {
402
+ "$type": "fontFamily",
403
+ "primary": {
404
+ "$value": [
405
+ "Satoshi",
406
+ "system-ui",
407
+ "-apple-system",
408
+ "BlinkMacSystemFont",
409
+ "Segoe UI",
410
+ "sans-serif"
411
+ ],
412
+ "$description": "Self-hosted Satoshi (ITF) body typeface; falls back to system-ui sans-serif stack."
413
+ },
414
+ "display": {
415
+ "$value": [
416
+ "Clash Display",
417
+ "system-ui",
418
+ "-apple-system",
419
+ "BlinkMacSystemFont",
420
+ "Segoe UI",
421
+ "sans-serif"
422
+ ],
423
+ "$description": "Display face: Clash Display ITF, bound to display/h1/h2/h3 composites."
424
+ },
425
+ "mono": {
426
+ "$value": ["Geist Mono", "Courier New", "monospace"],
427
+ "$description": "Monospace face: Geist Mono. Falls back to Courier New, monospace."
428
+ }
429
+ },
430
+ "size": {
431
+ "$type": "dimension",
432
+ "2xs": {
433
+ "$value": {
434
+ "value": 10,
435
+ "unit": "px"
436
+ }
437
+ },
438
+ "xs": {
439
+ "$value": {
440
+ "value": 13,
441
+ "unit": "px"
442
+ }
443
+ },
444
+ "sm": {
445
+ "$value": {
446
+ "value": 15,
447
+ "unit": "px"
448
+ }
449
+ },
450
+ "base": {
451
+ "$value": {
452
+ "value": 17,
453
+ "unit": "px"
454
+ }
455
+ },
456
+ "lg": {
457
+ "$value": {
458
+ "value": 20,
459
+ "unit": "px"
460
+ }
461
+ },
462
+ "xl": {
463
+ "$value": {
464
+ "value": 24,
465
+ "unit": "px"
466
+ }
467
+ },
468
+ "2xl": {
469
+ "$value": {
470
+ "value": 30,
471
+ "unit": "px"
472
+ }
473
+ },
474
+ "3xl": {
475
+ "$value": {
476
+ "value": 36,
477
+ "unit": "px"
478
+ }
479
+ },
480
+ "4xl": {
481
+ "$value": {
482
+ "value": 48,
483
+ "unit": "px"
484
+ }
485
+ },
486
+ "5xl": {
487
+ "$value": {
488
+ "value": 80,
489
+ "unit": "px"
490
+ }
491
+ },
492
+ "7xl": {
493
+ "$value": {
494
+ "value": 72,
495
+ "unit": "px"
496
+ },
497
+ "$description": "Swiss-canon display size. Static desktop value; fluid in theme.css."
498
+ }
499
+ },
500
+ "weight": {
501
+ "$type": "fontWeight",
502
+ "light": {
503
+ "$value": 300,
504
+ "$description": "Swiss-canon heading weight. Display and h1/h2 composites only."
505
+ },
506
+ "regular": {
507
+ "$value": 400
508
+ },
509
+ "medium": {
510
+ "$value": 500
511
+ },
512
+ "semibold": {
513
+ "$value": 600
514
+ },
515
+ "bold": {
516
+ "$value": 700
517
+ }
518
+ },
519
+ "lineHeight": {
520
+ "$type": "number",
521
+ "compact": {
522
+ "$value": 0.95
523
+ },
524
+ "none": {
525
+ "$value": 1
526
+ },
527
+ "tight": {
528
+ "$value": 1.25
529
+ },
530
+ "snug": {
531
+ "$value": 1.375,
532
+ "$description": "Swiss-canon snug rhythm (10t-5). Used by h2/h3 composites for tight-but-readable heading lines."
533
+ },
534
+ "normal": {
535
+ "$value": 1.5
536
+ },
537
+ "relaxed": {
538
+ "$value": 1.625,
539
+ "$description": "Swiss-canon relaxed rhythm (10t-5). Used by body/small/mono composites for long-form prose comfort."
540
+ }
541
+ },
542
+ "letterSpacing": {
543
+ "$type": "dimension",
544
+ "tighter": {
545
+ "$value": {
546
+ "value": -0.02,
547
+ "unit": "em"
548
+ }
549
+ },
550
+ "tight": {
551
+ "$value": {
552
+ "value": -0.01,
553
+ "unit": "em"
554
+ }
555
+ },
556
+ "normal": {
557
+ "$value": {
558
+ "value": 0,
559
+ "unit": "em"
560
+ }
561
+ },
562
+ "wide": {
563
+ "$value": {
564
+ "value": 0.01,
565
+ "unit": "em"
566
+ }
567
+ },
568
+ "wider": {
569
+ "$value": {
570
+ "value": 0.02,
571
+ "unit": "em"
572
+ }
573
+ },
574
+ "caps": {
575
+ "$value": {
576
+ "value": 0.06,
577
+ "unit": "em"
578
+ },
579
+ "$description": "All-caps tracking for eyebrow / kicker labels. Always pairs with text-transform: uppercase."
580
+ }
581
+ }
582
+ },
583
+ "duration": {
584
+ "$type": "duration",
585
+ "instant": {
586
+ "$value": {
587
+ "value": 100,
588
+ "unit": "ms"
589
+ },
590
+ "$description": "Fixed elapsed time interval in milliseconds."
591
+ },
592
+ "short": {
593
+ "$value": {
594
+ "value": 150,
595
+ "unit": "ms"
596
+ },
597
+ "$description": "Fixed elapsed time interval in milliseconds."
598
+ },
599
+ "medium": {
600
+ "$value": {
601
+ "value": 250,
602
+ "unit": "ms"
603
+ },
604
+ "$description": "Fixed elapsed time interval in milliseconds."
605
+ },
606
+ "long": {
607
+ "$value": {
608
+ "value": 400,
609
+ "unit": "ms"
610
+ },
611
+ "$description": "Fixed elapsed time interval in milliseconds."
612
+ }
613
+ },
614
+ "easing": {
615
+ "$type": "cubicBezier",
616
+ "emphasized": {
617
+ "$value": [0.4, 0, 0.2, 1],
618
+ "$description": "Cubic bezier with balanced input and output tangents."
619
+ },
620
+ "decelerate": {
621
+ "$value": [0, 0, 0.2, 1],
622
+ "$description": "Cubic bezier with steep initial gain and constrained tail velocity."
623
+ },
624
+ "accelerate": {
625
+ "$value": [0.4, 0, 1, 1],
626
+ "$description": "Cubic bezier with restrained initial gain and steep terminal velocity."
627
+ },
628
+ "elastic": {
629
+ "$type": "spring",
630
+ "$value": {
631
+ "type": "spring",
632
+ "stiffness": 300,
633
+ "damping": 20,
634
+ "mass": 1
635
+ },
636
+ "$description": "Spring response defined by stiffness, damping, and mass parameters."
637
+ }
638
+ },
639
+ "shadow": {
640
+ "color": {
641
+ "$type": "color",
642
+ "$value": "220 13% 18%",
643
+ "$description": "HSL channels for shadow-color alpha compositing. Light: cool neutral; dark: black.",
644
+ "$extensions": {
645
+ "com.figma.variables": {
646
+ "modes": {
647
+ "Light": "220 13% 18%",
648
+ "Dark": "0 0% 0%"
649
+ }
650
+ }
651
+ }
652
+ }
653
+ },
654
+ "breakpoint": {
655
+ "$description": "Discrete viewport thresholds expressed as dimensions.",
656
+ "xs": {
657
+ "$type": "dimension",
658
+ "$value": {
659
+ "value": 375,
660
+ "unit": "px"
661
+ }
662
+ },
663
+ "sm": {
664
+ "$type": "dimension",
665
+ "$value": {
666
+ "value": 640,
667
+ "unit": "px"
668
+ }
669
+ },
670
+ "md": {
671
+ "$type": "dimension",
672
+ "$value": {
673
+ "value": 768,
674
+ "unit": "px"
675
+ }
676
+ },
677
+ "lg": {
678
+ "$type": "dimension",
679
+ "$value": {
680
+ "value": 1024,
681
+ "unit": "px"
682
+ }
683
+ },
684
+ "xl": {
685
+ "$type": "dimension",
686
+ "$value": {
687
+ "value": 1280,
688
+ "unit": "px"
689
+ }
690
+ }
691
+ },
692
+ "size": {
693
+ "8": {
694
+ "$type": "dimension",
695
+ "$value": {
696
+ "value": 8,
697
+ "unit": "px"
698
+ },
699
+ "$description": "8px size step."
700
+ },
701
+ "10": {
702
+ "$type": "dimension",
703
+ "$value": {
704
+ "value": 10,
705
+ "unit": "px"
706
+ },
707
+ "$description": "10px size step."
708
+ },
709
+ "12": {
710
+ "$type": "dimension",
711
+ "$value": {
712
+ "value": 12,
713
+ "unit": "px"
714
+ },
715
+ "$description": "12px size step."
716
+ },
717
+ "16": {
718
+ "$type": "dimension",
719
+ "$value": {
720
+ "value": 16,
721
+ "unit": "px"
722
+ },
723
+ "$description": "16px size step."
724
+ },
725
+ "20": {
726
+ "$type": "dimension",
727
+ "$value": {
728
+ "value": 20,
729
+ "unit": "px"
730
+ },
731
+ "$description": "20px size step."
732
+ },
733
+ "24": {
734
+ "$type": "dimension",
735
+ "$value": {
736
+ "value": 24,
737
+ "unit": "px"
738
+ },
739
+ "$description": "24px size step."
740
+ },
741
+ "32": {
742
+ "$type": "dimension",
743
+ "$value": {
744
+ "value": 32,
745
+ "unit": "px"
746
+ },
747
+ "$description": "32px size step."
748
+ },
749
+ "40": {
750
+ "$type": "dimension",
751
+ "$value": {
752
+ "value": 40,
753
+ "unit": "px"
754
+ },
755
+ "$description": "40px size step."
756
+ },
757
+ "48": {
758
+ "$type": "dimension",
759
+ "$value": {
760
+ "value": 48,
761
+ "unit": "px"
762
+ },
763
+ "$description": "48px size step."
764
+ },
765
+ "64": {
766
+ "$type": "dimension",
767
+ "$value": {
768
+ "value": 64,
769
+ "unit": "px"
770
+ },
771
+ "$description": "64px size step."
772
+ },
773
+ "80": {
774
+ "$type": "dimension",
775
+ "$value": {
776
+ "value": 80,
777
+ "unit": "px"
778
+ },
779
+ "$description": "80px size step."
780
+ },
781
+ "96": {
782
+ "$type": "dimension",
783
+ "$value": {
784
+ "value": 96,
785
+ "unit": "px"
786
+ },
787
+ "$description": "96px size step."
788
+ },
789
+ "$description": "Unaliased dimensional values.",
790
+ "interactive": {
791
+ "$description": "Interactive control size minimums.",
792
+ "min": {
793
+ "$type": "dimension",
794
+ "$value": {
795
+ "value": 44,
796
+ "unit": "px"
797
+ },
798
+ "$description": "Minimum interactive hit target size."
799
+ }
800
+ },
801
+ "width": {
802
+ "96": {
803
+ "$type": "dimension",
804
+ "$value": {
805
+ "value": 96,
806
+ "unit": "px"
807
+ },
808
+ "$description": "96px width step."
809
+ },
810
+ "760": {
811
+ "$type": "dimension",
812
+ "$value": {
813
+ "value": 760,
814
+ "unit": "px"
815
+ }
816
+ },
817
+ "1200": {
818
+ "$type": "dimension",
819
+ "$value": {
820
+ "value": 1200,
821
+ "unit": "px"
822
+ }
823
+ },
824
+ "50ch": {
825
+ "$type": "dimension",
826
+ "$value": {
827
+ "value": 50,
828
+ "unit": "ch"
829
+ }
830
+ }
831
+ }
832
+ },
833
+ "grid": {
834
+ "columns": {
835
+ "1": {
836
+ "$type": "number",
837
+ "$value": 1
838
+ },
839
+ "2": {
840
+ "$type": "number",
841
+ "$value": 2
842
+ },
843
+ "3": {
844
+ "$type": "number",
845
+ "$value": 3
846
+ }
847
+ }
848
+ },
849
+ "zIndex": {
850
+ "0": {
851
+ "$type": "number",
852
+ "$value": 0
853
+ },
854
+ "10": {
855
+ "$type": "number",
856
+ "$value": 10
857
+ },
858
+ "100": {
859
+ "$type": "number",
860
+ "$value": 100
861
+ },
862
+ "1000": {
863
+ "$type": "number",
864
+ "$value": 1000
865
+ },
866
+ "$description": "Discrete stacking levels along the z axis."
867
+ },
868
+ "borderWidth": {
869
+ "$type": "dimension",
870
+ "xs": {
871
+ "$value": {
872
+ "value": 1,
873
+ "unit": "px"
874
+ }
875
+ },
876
+ "sm": {
877
+ "$value": {
878
+ "value": 2,
879
+ "unit": "px"
880
+ }
881
+ },
882
+ "md": {
883
+ "$value": {
884
+ "value": 4,
885
+ "unit": "px"
886
+ }
887
+ }
888
+ }
889
+ },
890
+ "semantic": {
891
+ "motion": {
892
+ "$type": "motion",
893
+ "productive": {
894
+ "$value": {
895
+ "duration": "{primitive.duration.short}",
896
+ "easing": "{primitive.easing.decelerate}"
897
+ },
898
+ "$description": "For micro-interactions and status changes. No deformation."
899
+ },
900
+ "expressive": {
901
+ "$value": {
902
+ "duration": "{primitive.duration.medium}",
903
+ "easing": "{primitive.easing.elastic}"
904
+ },
905
+ "$description": "For teaching moments and significant UI entries. Includes physics-based squish."
906
+ },
907
+ "spatial": {
908
+ "$value": {
909
+ "duration": "{primitive.duration.long}",
910
+ "easing": "{primitive.easing.emphasized}"
911
+ },
912
+ "$description": "For elements traveling long distances across the viewport."
913
+ },
914
+ "exit": {
915
+ "$value": {
916
+ "duration": "{primitive.duration.instant}",
917
+ "easing": "{primitive.easing.accelerate}"
918
+ },
919
+ "$description": "For elements being removed from the DOM."
920
+ }
921
+ },
922
+ "color": {
923
+ "$type": "color",
924
+ "surface": {
925
+ "page": {
926
+ "$value": "{primitive.color.neutral.white}",
927
+ "$description": "Main page background",
928
+ "$extensions": {
929
+ "com.figma.variables": {
930
+ "modes": {
931
+ "Light": "{primitive.color.neutral.white}",
932
+ "Dark": "{primitive.color.neutral.black}"
933
+ }
934
+ }
935
+ }
936
+ },
937
+ "raised": {
938
+ "$value": "{primitive.color.neutral.50}",
939
+ "$description": "Subtle elevated surface (cards, sections)",
940
+ "$extensions": {
941
+ "com.figma.variables": {
942
+ "modes": {
943
+ "Light": "{primitive.color.neutral.50}",
944
+ "Dark": "{primitive.color.neutral.950}"
945
+ }
946
+ }
947
+ }
948
+ },
949
+ "overlay": {
950
+ "$value": "{primitive.color.neutral.100}",
951
+ "$description": "Deeper surface layer",
952
+ "$extensions": {
953
+ "com.figma.variables": {
954
+ "modes": {
955
+ "Light": "{primitive.color.neutral.100}",
956
+ "Dark": "{primitive.color.neutral.850}"
957
+ }
958
+ }
959
+ }
960
+ },
961
+ "inverse": {
962
+ "$value": "{primitive.color.neutral.black}",
963
+ "$description": "Inverted background for contrast sections",
964
+ "$extensions": {
965
+ "com.figma.variables": {
966
+ "modes": {
967
+ "Light": "{primitive.color.neutral.black}",
968
+ "Dark": "{primitive.color.neutral.white}"
969
+ }
970
+ }
971
+ }
972
+ },
973
+ "accent": {
974
+ "$value": "{primitive.color.blue.500}",
975
+ "$description": "Accent-colored background",
976
+ "$extensions": {
977
+ "com.figma.variables": {
978
+ "modes": {
979
+ "Light": "{primitive.color.blue.500}",
980
+ "Dark": "{primitive.color.blue.500}"
981
+ }
982
+ }
983
+ }
984
+ },
985
+ "accentSubtle": {
986
+ "$value": "{primitive.color.blue.50}",
987
+ "$description": "Faint accent tint for hover states or highlights",
988
+ "$extensions": {
989
+ "com.figma.variables": {
990
+ "modes": {
991
+ "Light": "{primitive.color.blue.50}",
992
+ "Dark": "{primitive.color.blue.900}"
993
+ }
994
+ }
995
+ }
996
+ }
997
+ },
998
+ "content": {
999
+ "primary": {
1000
+ "$value": "{primitive.color.neutral.900}",
1001
+ "$extensions": {
1002
+ "com.figma.variables": {
1003
+ "modes": {
1004
+ "Light": "{primitive.color.neutral.900}",
1005
+ "Dark": "{primitive.color.neutral.100}"
1006
+ }
1007
+ }
1008
+ }
1009
+ },
1010
+ "secondary": {
1011
+ "$value": "{primitive.color.neutral.600}",
1012
+ "$extensions": {
1013
+ "com.figma.variables": {
1014
+ "modes": {
1015
+ "Light": "{primitive.color.neutral.600}",
1016
+ "Dark": "{primitive.color.neutral.400}"
1017
+ }
1018
+ }
1019
+ }
1020
+ },
1021
+ "disabled": {
1022
+ "$value": "{primitive.color.neutral.300}",
1023
+ "$extensions": {
1024
+ "com.figma.variables": {
1025
+ "modes": {
1026
+ "Light": "{primitive.color.neutral.300}",
1027
+ "Dark": "{primitive.color.neutral.600}"
1028
+ }
1029
+ }
1030
+ }
1031
+ },
1032
+ "inverse": {
1033
+ "$value": "{primitive.color.neutral.100}",
1034
+ "$extensions": {
1035
+ "com.figma.variables": {
1036
+ "modes": {
1037
+ "Light": "{primitive.color.neutral.100}",
1038
+ "Dark": "{primitive.color.neutral.900}"
1039
+ }
1040
+ }
1041
+ }
1042
+ },
1043
+ "accent": {
1044
+ "$value": "{primitive.color.blue.500}",
1045
+ "$extensions": {
1046
+ "com.figma.variables": {
1047
+ "modes": {
1048
+ "Light": "{primitive.color.blue.500}",
1049
+ "Dark": "{primitive.color.blue.300}"
1050
+ }
1051
+ }
1052
+ }
1053
+ },
1054
+ "onAccent": {
1055
+ "$value": "{primitive.color.neutral.white}",
1056
+ "$extensions": {
1057
+ "com.figma.variables": {
1058
+ "modes": {
1059
+ "Light": "{primitive.color.neutral.white}",
1060
+ "Dark": "{primitive.color.neutral.white}"
1061
+ }
1062
+ }
1063
+ }
1064
+ }
1065
+ },
1066
+ "border": {
1067
+ "default": {
1068
+ "$value": "{primitive.color.neutral.200}",
1069
+ "$extensions": {
1070
+ "com.figma.variables": {
1071
+ "modes": {
1072
+ "Light": "{primitive.color.neutral.200}",
1073
+ "Dark": "{primitive.color.neutral.700}"
1074
+ }
1075
+ }
1076
+ }
1077
+ },
1078
+ "subdued": {
1079
+ "$value": "{primitive.color.neutral.200}",
1080
+ "$extensions": {
1081
+ "com.figma.variables": {
1082
+ "modes": {
1083
+ "Light": "{primitive.color.neutral.200}",
1084
+ "Dark": "{primitive.color.neutral.800}"
1085
+ }
1086
+ }
1087
+ }
1088
+ },
1089
+ "subtle": {
1090
+ "$value": "{primitive.color.neutral.100}",
1091
+ "$description": "Lowest-contrast border for resting hairline edges on flat surfaces.",
1092
+ "$extensions": {
1093
+ "com.figma.variables": {
1094
+ "modes": {
1095
+ "Light": "{primitive.color.neutral.100}",
1096
+ "Dark": "{primitive.color.neutral.850}"
1097
+ }
1098
+ }
1099
+ }
1100
+ },
1101
+ "strong": {
1102
+ "$value": "{primitive.color.neutral.300}",
1103
+ "$extensions": {
1104
+ "com.figma.variables": {
1105
+ "modes": {
1106
+ "Light": "{primitive.color.neutral.300}",
1107
+ "Dark": "{primitive.color.neutral.600}"
1108
+ }
1109
+ }
1110
+ }
1111
+ },
1112
+ "accent": {
1113
+ "$value": "{primitive.color.blue.500}",
1114
+ "$extensions": {
1115
+ "com.figma.variables": {
1116
+ "modes": {
1117
+ "Light": "{primitive.color.blue.500}",
1118
+ "Dark": "{primitive.color.blue.500}"
1119
+ }
1120
+ }
1121
+ }
1122
+ }
1123
+ },
1124
+ "feedback": {
1125
+ "error": {
1126
+ "$type": "color",
1127
+ "$value": "{primitive.color.red.700}",
1128
+ "$extensions": {
1129
+ "com.figma.variables": {
1130
+ "modes": {
1131
+ "Light": "{primitive.color.red.700}",
1132
+ "Dark": "{primitive.color.red.400}"
1133
+ }
1134
+ }
1135
+ }
1136
+ },
1137
+ "success": {
1138
+ "$type": "color",
1139
+ "$value": "{primitive.color.green.700}",
1140
+ "$extensions": {
1141
+ "com.figma.variables": {
1142
+ "modes": {
1143
+ "Light": "{primitive.color.green.700}",
1144
+ "Dark": "{primitive.color.green.400}"
1145
+ }
1146
+ }
1147
+ }
1148
+ },
1149
+ "warning": {
1150
+ "$type": "color",
1151
+ "$value": "{primitive.color.amber.800}",
1152
+ "$extensions": {
1153
+ "com.figma.variables": {
1154
+ "modes": {
1155
+ "Light": "{primitive.color.amber.800}",
1156
+ "Dark": "{primitive.color.amber.400}"
1157
+ }
1158
+ }
1159
+ }
1160
+ },
1161
+ "info": {
1162
+ "$type": "color",
1163
+ "$value": "{primitive.color.blue.500}",
1164
+ "$extensions": {
1165
+ "com.figma.variables": {
1166
+ "modes": {
1167
+ "Light": "{primitive.color.blue.500}",
1168
+ "Dark": "{primitive.color.blue.300}"
1169
+ }
1170
+ }
1171
+ }
1172
+ },
1173
+ "bg": {
1174
+ "error": {
1175
+ "$type": "color",
1176
+ "$value": "{primitive.color.red.50}",
1177
+ "$extensions": {
1178
+ "com.figma.variables": {
1179
+ "modes": {
1180
+ "Light": "{primitive.color.red.50}",
1181
+ "Dark": "{primitive.color.red.950}"
1182
+ }
1183
+ }
1184
+ }
1185
+ },
1186
+ "success": {
1187
+ "$type": "color",
1188
+ "$value": "{primitive.color.green.50}",
1189
+ "$extensions": {
1190
+ "com.figma.variables": {
1191
+ "modes": {
1192
+ "Light": "{primitive.color.green.50}",
1193
+ "Dark": "{primitive.color.green.950}"
1194
+ }
1195
+ }
1196
+ }
1197
+ },
1198
+ "warning": {
1199
+ "$type": "color",
1200
+ "$value": "{primitive.color.amber.50}",
1201
+ "$extensions": {
1202
+ "com.figma.variables": {
1203
+ "modes": {
1204
+ "Light": "{primitive.color.amber.50}",
1205
+ "Dark": "{primitive.color.amber.950}"
1206
+ }
1207
+ }
1208
+ }
1209
+ },
1210
+ "info": {
1211
+ "$type": "color",
1212
+ "$value": "{primitive.color.blue.50}",
1213
+ "$extensions": {
1214
+ "com.figma.variables": {
1215
+ "modes": {
1216
+ "Light": "{primitive.color.blue.50}",
1217
+ "Dark": "{primitive.color.blue.900}"
1218
+ }
1219
+ }
1220
+ }
1221
+ }
1222
+ }
1223
+ }
1224
+ },
1225
+ "space": {
1226
+ "$type": "dimension",
1227
+ "$description": "Semantic spacing tiers: subgrid, component, layout, section.",
1228
+ "subgrid": {
1229
+ "hairline": {
1230
+ "$value": "{primitive.space.px1}",
1231
+ "$description": "1px border offset and hairline spacing."
1232
+ },
1233
+ "xs": {
1234
+ "$value": "{primitive.space.px2}",
1235
+ "$description": "2px vertical rhythm nudge and baseline adjustment."
1236
+ },
1237
+ "gap": {
1238
+ "$value": "{primitive.space.1}",
1239
+ "$description": "4px cap-height and inline cluster spacing."
1240
+ }
1241
+ },
1242
+ "component": {
1243
+ "gap": {
1244
+ "$value": "{primitive.space.2}",
1245
+ "$description": "8px label\u2194input rhythm and closely coupled control spacing."
1246
+ },
1247
+ "medium": {
1248
+ "$value": "{primitive.space.3}",
1249
+ "$description": "12px adjacent form fields and medium intra-component gaps."
1250
+ },
1251
+ "padding": {
1252
+ "$value": "{primitive.space.6}",
1253
+ "$description": "24px default inset for cards, forms, panels, and grouped surfaces."
1254
+ }
1255
+ },
1256
+ "layout": {
1257
+ "tight": {
1258
+ "$value": "{primitive.space.4}",
1259
+ "$description": "16px default HdsStack gap and inter-component spacing."
1260
+ },
1261
+ "normal": {
1262
+ "$value": "{primitive.space.6}",
1263
+ "$description": "24px column gutters and sidebar gutter spacing."
1264
+ },
1265
+ "gutter": {
1266
+ "$value": "{primitive.space.6}",
1267
+ "$description": "24px column and region gutters (alias for layout.normal)."
1268
+ },
1269
+ "inset": {
1270
+ "$value": "{primitive.space.8}",
1271
+ "$description": "32px major block separation and inset inter-component gaps."
1272
+ },
1273
+ "spacious": {
1274
+ "$value": "{primitive.space.12}",
1275
+ "$description": "48px section break and whitespace separator between major content blocks."
1276
+ }
1277
+ },
1278
+ "section": {
1279
+ "stack": {
1280
+ "$value": "{primitive.space.20}",
1281
+ "$description": "80px vertical rhythm between page sections and major editorial blocks."
1282
+ },
1283
+ "inset": {
1284
+ "$value": "{primitive.space.24}",
1285
+ "$description": "96px hero and landing-page inset padding."
1286
+ },
1287
+ "heroMax": {
1288
+ "$value": "{primitive.space.32}",
1289
+ "$description": "128px maximum hero region padding for extra-large displays."
1290
+ }
1291
+ },
1292
+ "sidebar": {
1293
+ "indent": {
1294
+ "$value": "{primitive.space.3}",
1295
+ "$description": "12px indent level for nested sidebar and TOC groups."
1296
+ },
1297
+ "gap": {
1298
+ "$value": "{primitive.space.4}",
1299
+ "$description": "16px vertical spacing between items in sidebar and TOC stacks."
1300
+ },
1301
+ "sectionGap": {
1302
+ "$value": "{primitive.space.3}",
1303
+ "$description": "12px spacing between sidebar sections and grouped rail blocks."
1304
+ },
1305
+ "railPadding": {
1306
+ "$value": "{primitive.space.5}",
1307
+ "$description": "20px outer padding for sidebar and TOC rails."
1308
+ }
1309
+ }
1310
+ },
1311
+ "layout": {
1312
+ "width": {
1313
+ "content": {
1314
+ "$type": "dimension",
1315
+ "$value": "{primitive.size.width.760}",
1316
+ "$description": "Max width for prose/content (760px). Use with HdsContainer for centered text blocks."
1317
+ },
1318
+ "max": {
1319
+ "$type": "dimension",
1320
+ "$value": "{primitive.size.width.1200}",
1321
+ "$description": "Max width for full-layout containers (1200px). Use with HdsContainer for page layouts."
1322
+ }
1323
+ },
1324
+ "container": {
1325
+ "maxWidth": {
1326
+ "$type": "dimension",
1327
+ "$value": "{primitive.size.width.1200}"
1328
+ }
1329
+ },
1330
+ "content": {
1331
+ "maxWidth": {
1332
+ "$type": "dimension",
1333
+ "$value": "{primitive.size.width.760}"
1334
+ }
1335
+ },
1336
+ "prose": {
1337
+ "maxWidth": {
1338
+ "$type": "dimension",
1339
+ "$value": "{primitive.size.width.50ch}"
1340
+ }
1341
+ },
1342
+ "section": {
1343
+ "paddingY": {
1344
+ "$type": "dimension",
1345
+ "$value": "{primitive.space.20}"
1346
+ }
1347
+ },
1348
+ "grid": {
1349
+ "gap": {
1350
+ "$type": "dimension",
1351
+ "$value": "{primitive.space.8}"
1352
+ },
1353
+ "columns": {
1354
+ "mobile": {
1355
+ "$type": "number",
1356
+ "$value": "{primitive.grid.columns.1}"
1357
+ },
1358
+ "tablet": {
1359
+ "$type": "number",
1360
+ "$value": "{primitive.grid.columns.2}"
1361
+ },
1362
+ "desktop": {
1363
+ "$type": "number",
1364
+ "$value": "{primitive.grid.columns.3}"
1365
+ }
1366
+ }
1367
+ }
1368
+ },
1369
+ "typography": {
1370
+ "$type": "typography",
1371
+ "$description": "8-style Swiss-canon type ramp: display, h1\u2013h3, body, small, caption, mono.",
1372
+ "display": {
1373
+ "$value": {
1374
+ "fontFamily": "{primitive.typography.family.display}",
1375
+ "fontSize": "{primitive.typography.size.7xl}",
1376
+ "fontWeight": "{primitive.typography.weight.medium}",
1377
+ "letterSpacing": "{primitive.typography.letterSpacing.tight}",
1378
+ "lineHeight": "{primitive.typography.lineHeight.none}"
1379
+ },
1380
+ "$description": "Display headline. 72px / Clash Display 500 / leading-none.",
1381
+ "$extensions": {
1382
+ "com.figma.variables": {
1383
+ "fontSize": "clamp(40px, 8vw, 72px)",
1384
+ "note": "Figma stores the 72px desktop-max static value. Browser CSS overrides with fluid scaling (40px min \u2192 72px max). See src/styles/theme.css."
1385
+ }
1386
+ }
1387
+ },
1388
+ "h1": {
1389
+ "$value": {
1390
+ "fontFamily": "{primitive.typography.family.display}",
1391
+ "fontSize": "{primitive.typography.size.4xl}",
1392
+ "fontWeight": "{primitive.typography.weight.medium}",
1393
+ "letterSpacing": "{primitive.typography.letterSpacing.tight}",
1394
+ "lineHeight": "{primitive.typography.lineHeight.tight}"
1395
+ },
1396
+ "$description": "Primary section headings (h1). 48px / Clash Display medium 500 / leading-tight.",
1397
+ "$extensions": {
1398
+ "com.figma.variables": {
1399
+ "fontSize": "clamp(32px, 6vw, 48px)",
1400
+ "note": "Figma stores the 48px desktop-max static value. Browser CSS overrides with fluid scaling (32px min \u2192 48px max). See src/styles/theme.css."
1401
+ }
1402
+ }
1403
+ },
1404
+ "h2": {
1405
+ "$value": {
1406
+ "fontFamily": "{primitive.typography.family.display}",
1407
+ "fontSize": "{primitive.typography.size.2xl}",
1408
+ "fontWeight": "{primitive.typography.weight.medium}",
1409
+ "letterSpacing": "{primitive.typography.letterSpacing.tight}",
1410
+ "lineHeight": "42px"
1411
+ },
1412
+ "$description": "Secondary section headings (h2). Clash Display medium, 30px, line-height 42px.",
1413
+ "$extensions": {
1414
+ "com.figma.variables": {
1415
+ "fontSize": "clamp(24px, 3.5vw, 30px)",
1416
+ "note": "Figma stores the 30px desktop-max static value. Browser CSS overrides with fluid scaling (24px min \u2192 30px max). See src/styles/theme.css."
1417
+ }
1418
+ }
1419
+ },
1420
+ "h3": {
1421
+ "$value": {
1422
+ "fontFamily": "{primitive.typography.family.display}",
1423
+ "fontSize": "{primitive.typography.size.lg}",
1424
+ "fontWeight": "{primitive.typography.weight.medium}",
1425
+ "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1426
+ "lineHeight": "28px"
1427
+ },
1428
+ "$description": "Component and card headers (h3). 20px / Clash Display medium 500 / leading-snug.",
1429
+ "$extensions": {
1430
+ "com.figma.variables": {
1431
+ "fontSize": "clamp(18px, 2vw, 20px)",
1432
+ "note": "Figma stores the 20px desktop-max static value. Browser CSS overrides with fluid scaling (18px min \u2192 20px max). See src/styles/theme.css."
1433
+ }
1434
+ }
1435
+ },
1436
+ "body": {
1437
+ "$value": {
1438
+ "fontFamily": "{primitive.typography.family.primary}",
1439
+ "fontSize": "{primitive.typography.size.base}",
1440
+ "fontWeight": "{primitive.typography.weight.medium}",
1441
+ "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1442
+ "lineHeight": "28px",
1443
+ "maxWidth": {
1444
+ "value": 60,
1445
+ "unit": "ch"
1446
+ }
1447
+ },
1448
+ "$description": "Body prose. Satoshi medium, 17px, line-height 28px, max 60ch measure."
1449
+ },
1450
+ "ui": {
1451
+ "$value": {
1452
+ "fontFamily": "{primitive.typography.family.primary}",
1453
+ "fontSize": "{primitive.typography.size.sm}",
1454
+ "fontWeight": "{primitive.typography.weight.medium}",
1455
+ "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1456
+ "lineHeight": "24px",
1457
+ "maxWidth": {
1458
+ "value": 60,
1459
+ "unit": "ch"
1460
+ }
1461
+ },
1462
+ "$description": "UI text for nav, labels, captions. Satoshi medium, 15px, line-height 24px."
1463
+ },
1464
+ "eyebrow": {
1465
+ "$value": {
1466
+ "fontFamily": "{primitive.typography.family.primary}",
1467
+ "fontSize": "{primitive.typography.size.xs}",
1468
+ "fontWeight": "{primitive.typography.weight.medium}",
1469
+ "letterSpacing": "{primitive.typography.letterSpacing.caps}",
1470
+ "lineHeight": "20px",
1471
+ "textTransform": "uppercase"
1472
+ },
1473
+ "$description": "Eyebrow / kicker label. Satoshi medium, 13px, caps tracking, uppercase."
1474
+ },
1475
+ "mono": {
1476
+ "$value": {
1477
+ "fontFamily": "{primitive.typography.family.mono}",
1478
+ "fontSize": "{primitive.typography.size.xs}",
1479
+ "fontWeight": "{primitive.typography.weight.regular}",
1480
+ "letterSpacing": "{primitive.typography.letterSpacing.normal}",
1481
+ "lineHeight": "20px",
1482
+ "maxWidth": {
1483
+ "value": 60,
1484
+ "unit": "ch"
1485
+ }
1486
+ },
1487
+ "$description": "Monospace for code, token names, shortcuts. Geist Mono regular, 13px."
1488
+ },
1489
+ "lineHeight": {
1490
+ "none": {
1491
+ "$type": "number",
1492
+ "$value": "{primitive.typography.lineHeight.none}",
1493
+ "$description": "Semantic alias for leading-none (1). Display text and badge spans."
1494
+ }
1495
+ }
1496
+ },
1497
+ "docs": {
1498
+ "$description": "Doc-page spacing scale: section, paragraph, inline rhythm.",
1499
+ "space": {
1500
+ "$type": "dimension",
1501
+ "section": {
1502
+ "$value": "{primitive.space.12}",
1503
+ "$description": "48px between H2 sections \u2014 generous section break for doc pages."
1504
+ },
1505
+ "paragraph": {
1506
+ "$value": "{primitive.space.6}",
1507
+ "$description": "24px between paragraphs \u2014 comfortable prose rhythm for long-form doc content."
1508
+ },
1509
+ "inline": {
1510
+ "$value": "{primitive.space.2}",
1511
+ "$description": "8px inline cluster spacing \u2014 gap between metadata badges, inline icons, doc-page chips."
1512
+ }
1513
+ }
1514
+ },
1515
+ "accent": {
1516
+ "$type": "color",
1517
+ "rest": {
1518
+ "$value": "{primitive.color.blue.500}",
1519
+ "$description": "Default accent fill for interactive elements at rest.",
1520
+ "$extensions": {
1521
+ "com.figma.variables": {
1522
+ "modes": {
1523
+ "Light": "{primitive.color.blue.500}",
1524
+ "Dark": "{primitive.color.blue.500}"
1525
+ }
1526
+ }
1527
+ }
1528
+ },
1529
+ "hover": {
1530
+ "$value": "{primitive.color.blue.600}",
1531
+ "$description": "Accent fill on pointer hover.",
1532
+ "$extensions": {
1533
+ "com.figma.variables": {
1534
+ "modes": {
1535
+ "Light": "{primitive.color.blue.600}",
1536
+ "Dark": "{primitive.color.blue.450}"
1537
+ }
1538
+ }
1539
+ }
1540
+ },
1541
+ "pressed": {
1542
+ "$value": "{primitive.color.blue.700}",
1543
+ "$description": "Accent fill during active press.",
1544
+ "$extensions": {
1545
+ "com.figma.variables": {
1546
+ "modes": {
1547
+ "Light": "{primitive.color.blue.700}",
1548
+ "Dark": "{primitive.color.blue.400}"
1549
+ }
1550
+ }
1551
+ }
1552
+ },
1553
+ "inactive": {
1554
+ "$value": "{primitive.color.blue.200}",
1555
+ "$description": "Accent fill for inactive or unselected accent elements.",
1556
+ "$extensions": {
1557
+ "com.figma.variables": {
1558
+ "modes": {
1559
+ "Light": "{primitive.color.blue.200}",
1560
+ "Dark": "{primitive.color.blue.200}"
1561
+ }
1562
+ }
1563
+ }
1564
+ },
1565
+ "disabled": {
1566
+ "$value": "{primitive.color.blue.100}",
1567
+ "$description": "Accent fill for disabled accent elements.",
1568
+ "$extensions": {
1569
+ "com.figma.variables": {
1570
+ "modes": {
1571
+ "Light": "{primitive.color.blue.100}",
1572
+ "Dark": "{primitive.color.blue.100}"
1573
+ }
1574
+ }
1575
+ }
1576
+ },
1577
+ "content": {
1578
+ "$value": "{primitive.color.blue.500}",
1579
+ "$description": "Text and icon color on neutral surfaces with accent intent.",
1580
+ "$extensions": {
1581
+ "com.figma.variables": {
1582
+ "modes": {
1583
+ "Light": "{primitive.color.blue.500}",
1584
+ "Dark": "{primitive.color.blue.300}"
1585
+ }
1586
+ }
1587
+ }
1588
+ },
1589
+ "contentHover": {
1590
+ "$value": "{primitive.color.blue.600}",
1591
+ "$description": "Accent content color on pointer hover.",
1592
+ "$extensions": {
1593
+ "com.figma.variables": {
1594
+ "modes": {
1595
+ "Light": "{primitive.color.blue.600}",
1596
+ "Dark": "{primitive.color.blue.200}"
1597
+ }
1598
+ }
1599
+ }
1600
+ },
1601
+ "subtle": {
1602
+ "$value": "{primitive.color.blue.50}",
1603
+ "$description": "Low-emphasis accent tint for hover backgrounds and selection highlights.",
1604
+ "$extensions": {
1605
+ "com.figma.variables": {
1606
+ "modes": {
1607
+ "Light": "{primitive.color.blue.50}",
1608
+ "Dark": "{primitive.color.blue.900}"
1609
+ }
1610
+ }
1611
+ }
1612
+ }
1613
+ },
1614
+ "radius": {
1615
+ "action": {
1616
+ "$type": "dimension",
1617
+ "$value": "{primitive.radius.12}",
1618
+ "$description": "Corner radius for interactive action elements like buttons and inputs."
1619
+ }
1620
+ },
1621
+ "borderWidth": {
1622
+ "default": {
1623
+ "$type": "dimension",
1624
+ "$value": "{primitive.borderWidth.xs}",
1625
+ "$description": "Default hairline border weight for surfaces and inputs."
1626
+ },
1627
+ "emphasis": {
1628
+ "$type": "dimension",
1629
+ "$value": "{primitive.borderWidth.sm}",
1630
+ "$description": "Stronger border weight for focus rings and active indicators."
1631
+ }
1632
+ },
1633
+ "shadow": {
1634
+ "$type": "shadow",
1635
+ "subtle": {
1636
+ "$value": "0 1px 2px hsl(var(--primitive-shadow-color) / 0.04), 0 1px 1px hsl(var(--primitive-shadow-color) / 0.06)",
1637
+ "$description": "Resting elevation shadow for raised surfaces (cards, inline panels)."
1638
+ },
1639
+ "floating": {
1640
+ "$value": "0 4px 6px hsl(var(--primitive-shadow-color) / 0.05), 0 10px 15px hsl(var(--primitive-shadow-color) / 0.08)",
1641
+ "$description": "Hover/floating elevation for menus, popovers, and tooltips."
1642
+ },
1643
+ "overlay": {
1644
+ "$value": "0 10px 15px hsl(var(--primitive-shadow-color) / 0.08), 0 25px 50px hsl(var(--primitive-shadow-color) / 0.12)",
1645
+ "$description": "Modal/dialog elevation for full-screen overlays."
1646
+ }
1647
+ },
1648
+ "elevation": {
1649
+ "$type": "elevation",
1650
+ "flat": {
1651
+ "$value": {
1652
+ "surface": "{semantic.color.surface.page}",
1653
+ "shadow": null,
1654
+ "border": "{semantic.color.border.subtle}"
1655
+ },
1656
+ "$description": "Flat surface (no shadow, hairline border) for embedded panels."
1657
+ },
1658
+ "raised": {
1659
+ "$value": {
1660
+ "surface": "{semantic.color.surface.raised}",
1661
+ "shadow": "{semantic.shadow.subtle}",
1662
+ "border": null
1663
+ },
1664
+ "$description": "Resting card / panel elevation."
1665
+ },
1666
+ "floating": {
1667
+ "$value": {
1668
+ "surface": "{semantic.color.surface.raised}",
1669
+ "shadow": "{semantic.shadow.floating}",
1670
+ "border": null
1671
+ },
1672
+ "$description": "Hover, menu, and popover elevation."
1673
+ },
1674
+ "overlay": {
1675
+ "$value": {
1676
+ "surface": "{semantic.color.surface.overlay}",
1677
+ "shadow": "{semantic.shadow.overlay}",
1678
+ "border": null
1679
+ },
1680
+ "$description": "Modal, dialog, and drawer elevation."
1681
+ }
1682
+ }
1683
+ },
1684
+ "component": {
1685
+ "nav": {
1686
+ "bg": {
1687
+ "$type": "color",
1688
+ "$value": "{semantic.color.surface.page}",
1689
+ "$description": "Nav bar background fill."
1690
+ },
1691
+ "bgActive": {
1692
+ "$type": "color",
1693
+ "$value": "{semantic.accent.subtle}",
1694
+ "$description": "Nav item background fill when active or selected."
1695
+ },
1696
+ "borderActive": {
1697
+ "$type": "color",
1698
+ "$value": "{semantic.color.surface.accent}",
1699
+ "$description": "Nav item border color when active or selected."
1700
+ },
1701
+ "text": {
1702
+ "$type": "color",
1703
+ "$value": "{semantic.color.content.secondary}",
1704
+ "$description": "Nav item text color at rest."
1705
+ },
1706
+ "textActive": {
1707
+ "$type": "color",
1708
+ "$value": "{semantic.color.content.primary}",
1709
+ "$description": "Nav item text color when active or selected."
1710
+ },
1711
+ "height": {
1712
+ "$type": "dimension",
1713
+ "$value": "{primitive.space.16}",
1714
+ "$description": "Nav bar height."
1715
+ },
1716
+ "paddingX": {
1717
+ "$type": "dimension",
1718
+ "$value": "{primitive.space.6}",
1719
+ "$description": "Horizontal padding inside nav items."
1720
+ },
1721
+ "paddingY": {
1722
+ "$type": "dimension",
1723
+ "$value": "{primitive.space.2}",
1724
+ "$description": "Vertical padding inside nav items."
1725
+ }
1726
+ },
1727
+ "tag": {
1728
+ "background": {
1729
+ "$type": "color",
1730
+ "$value": "{semantic.accent.subtle}",
1731
+ "$description": "Base tag surface color."
1732
+ },
1733
+ "text": {
1734
+ "$type": "color",
1735
+ "$value": "{semantic.color.content.primary}",
1736
+ "$description": "Default tag text color."
1737
+ },
1738
+ "border": {
1739
+ "$type": "color",
1740
+ "$value": "{semantic.color.border.default}",
1741
+ "$description": "Default tag border color."
1742
+ },
1743
+ "radius": {
1744
+ "$type": "dimension",
1745
+ "$value": "{primitive.radius.full}",
1746
+ "$description": "Pill radius for the tag surface."
1747
+ },
1748
+ "fontSize": {
1749
+ "$type": "dimension",
1750
+ "$value": "{primitive.typography.size.xs}",
1751
+ "$description": "Tag type size."
1752
+ },
1753
+ "fontWeight": {
1754
+ "$type": "fontWeight",
1755
+ "$value": "{primitive.typography.weight.medium}",
1756
+ "$description": "Tag label weight."
1757
+ },
1758
+ "lineHeight": {
1759
+ "$type": "dimension",
1760
+ "$value": "{primitive.typography.lineHeight.normal}",
1761
+ "$description": "Readable label rhythm for tags."
1762
+ },
1763
+ "minWidth": {
1764
+ "$type": "dimension",
1765
+ "$value": "{primitive.size.48}",
1766
+ "$description": "Minimum tag width."
1767
+ },
1768
+ "minHeight": {
1769
+ "$type": "dimension",
1770
+ "$value": "{primitive.space.6}",
1771
+ "$description": "Minimum tag height."
1772
+ },
1773
+ "paddingX": {
1774
+ "$type": "dimension",
1775
+ "$value": "{primitive.space.3}",
1776
+ "$description": "Horizontal padding inside the pill."
1777
+ },
1778
+ "paddingY": {
1779
+ "$type": "dimension",
1780
+ "$value": "{primitive.space.2}",
1781
+ "$description": "Vertical padding inside the pill."
1782
+ },
1783
+ "activeText": {
1784
+ "$type": "color",
1785
+ "$value": "{semantic.color.content.onAccent}",
1786
+ "$description": "Text color when the tag is active."
1787
+ },
1788
+ "activeBackground": {
1789
+ "$type": "color",
1790
+ "$value": "{semantic.accent.rest}",
1791
+ "$description": "Active tag fill color."
1792
+ },
1793
+ "activeBorder": {
1794
+ "$type": "color",
1795
+ "$value": "{semantic.accent.rest}",
1796
+ "$description": "Active tag border color."
1797
+ },
1798
+ "activeHover": {
1799
+ "$type": "color",
1800
+ "$value": "{semantic.accent.hover}",
1801
+ "$description": "Active tag hover fill color."
1802
+ }
1803
+ },
1804
+ "badge": {
1805
+ "fontSize": {
1806
+ "$type": "dimension",
1807
+ "$value": "{primitive.typography.size.xs}",
1808
+ "$description": "Badge type size."
1809
+ },
1810
+ "fontWeight": {
1811
+ "$type": "fontWeight",
1812
+ "$value": "{primitive.typography.weight.medium}",
1813
+ "$description": "Badge label weight."
1814
+ },
1815
+ "text": {
1816
+ "$type": "color",
1817
+ "$value": "{semantic.color.content.primary}",
1818
+ "$description": "Badge text color."
1819
+ },
1820
+ "bg": {
1821
+ "$type": "color",
1822
+ "$value": "{semantic.color.feedback.bg.info}",
1823
+ "$extensions": {
1824
+ "com.figma.variables": {
1825
+ "modes": {
1826
+ "Light": "{semantic.color.feedback.bg.info}",
1827
+ "Dark": "{semantic.color.feedback.bg.info}"
1828
+ }
1829
+ }
1830
+ },
1831
+ "$description": "Badge background color."
1832
+ },
1833
+ "radius": {
1834
+ "$type": "dimension",
1835
+ "$value": "{primitive.radius.4}",
1836
+ "$description": "Small rounded radius for badges."
1837
+ },
1838
+ "height": {
1839
+ "$type": "dimension",
1840
+ "$value": "{primitive.size.20}",
1841
+ "$description": "Badge height."
1842
+ },
1843
+ "minWidth": {
1844
+ "$type": "dimension",
1845
+ "$value": "{primitive.size.20}",
1846
+ "$description": "Badge minimum width."
1847
+ },
1848
+ "paddingY": {
1849
+ "$type": "dimension",
1850
+ "$value": "{primitive.space.px2}",
1851
+ "$description": "Vertical padding inside the badge."
1852
+ },
1853
+ "paddingX": {
1854
+ "$type": "dimension",
1855
+ "$value": "{primitive.space.px6}",
1856
+ "$description": "Horizontal padding inside the badge."
1857
+ }
1858
+ },
1859
+ "button": {
1860
+ "bg": {
1861
+ "$type": "color",
1862
+ "$value": "{semantic.color.surface.accent}",
1863
+ "$description": "Primary button fill."
1864
+ },
1865
+ "bgHover": {
1866
+ "$type": "color",
1867
+ "$value": "{semantic.accent.hover}",
1868
+ "$description": "Primary button hover fill."
1869
+ },
1870
+ "text": {
1871
+ "$type": "color",
1872
+ "$value": "{semantic.color.content.onAccent}",
1873
+ "$description": "Primary button text color."
1874
+ },
1875
+ "radius": {
1876
+ "$type": "dimension",
1877
+ "$value": "{semantic.radius.action}",
1878
+ "$description": "Button corner radius."
1879
+ },
1880
+ "paddingX": {
1881
+ "$type": "dimension",
1882
+ "$value": "{primitive.space.4}",
1883
+ "$description": "Horizontal button padding."
1884
+ },
1885
+ "paddingY": {
1886
+ "$type": "dimension",
1887
+ "$value": "{primitive.space.3}",
1888
+ "$description": "Vertical button padding."
1889
+ },
1890
+ "size": {
1891
+ "sm": {
1892
+ "paddingX": {
1893
+ "$type": "dimension",
1894
+ "$value": "{primitive.space.2}",
1895
+ "$description": "Small button horizontal padding (8px)."
1896
+ },
1897
+ "paddingY": {
1898
+ "$type": "dimension",
1899
+ "$value": "{primitive.space.1}",
1900
+ "$description": "Small button vertical padding (4px)."
1901
+ },
1902
+ "fontSize": {
1903
+ "$type": "dimension",
1904
+ "$value": "{primitive.typography.size.xs}",
1905
+ "$description": "Small button label size (13px)."
1906
+ },
1907
+ "iconSize": {
1908
+ "$type": "dimension",
1909
+ "$value": "{primitive.size.12}",
1910
+ "$description": "Small button icon slot size (12px)."
1911
+ },
1912
+ "height": {
1913
+ "$type": "dimension",
1914
+ "$value": "{primitive.space.7}",
1915
+ "$description": "Small button height (28px)."
1916
+ },
1917
+ "itemSpacing": {
1918
+ "$type": "dimension",
1919
+ "$value": "{primitive.space.1}",
1920
+ "$description": "Small button icon-to-label gap (4px)."
1921
+ }
1922
+ },
1923
+ "md": {
1924
+ "paddingX": {
1925
+ "$type": "dimension",
1926
+ "$value": "{primitive.space.4}",
1927
+ "$description": "Medium button horizontal padding (16px)."
1928
+ },
1929
+ "paddingY": {
1930
+ "$type": "dimension",
1931
+ "$value": "{primitive.space.3}",
1932
+ "$description": "Medium button vertical padding (12px)."
1933
+ },
1934
+ "fontSize": {
1935
+ "$type": "dimension",
1936
+ "$value": "{primitive.typography.size.sm}",
1937
+ "$description": "Medium button label size (15px)."
1938
+ },
1939
+ "iconSize": {
1940
+ "$type": "dimension",
1941
+ "$value": "{primitive.size.16}",
1942
+ "$description": "Medium button icon slot size (16px)."
1943
+ },
1944
+ "height": {
1945
+ "$type": "dimension",
1946
+ "$value": "{primitive.size.40}",
1947
+ "$description": "Medium button height (40px)."
1948
+ },
1949
+ "itemSpacing": {
1950
+ "$type": "dimension",
1951
+ "$value": "{primitive.space.2}",
1952
+ "$description": "Medium button icon-to-label gap (8px)."
1953
+ }
1954
+ },
1955
+ "lg": {
1956
+ "paddingX": {
1957
+ "$type": "dimension",
1958
+ "$value": "{primitive.space.6}",
1959
+ "$description": "Large button horizontal padding (24px)."
1960
+ },
1961
+ "paddingY": {
1962
+ "$type": "dimension",
1963
+ "$value": "{primitive.space.4}",
1964
+ "$description": "Large button vertical padding (16px)."
1965
+ },
1966
+ "fontSize": {
1967
+ "$type": "dimension",
1968
+ "$value": "{primitive.typography.size.base}",
1969
+ "$description": "Large button label size (17px)."
1970
+ },
1971
+ "iconSize": {
1972
+ "$type": "dimension",
1973
+ "$value": "{primitive.size.20}",
1974
+ "$description": "Large button icon slot size (20px)."
1975
+ },
1976
+ "height": {
1977
+ "$type": "dimension",
1978
+ "$value": "{primitive.size.48}",
1979
+ "$description": "Large button height (48px)."
1980
+ },
1981
+ "itemSpacing": {
1982
+ "$type": "dimension",
1983
+ "$value": "{primitive.space.2}",
1984
+ "$description": "Large button icon-to-label gap (8px)."
1985
+ }
1986
+ }
1987
+ },
1988
+ "primary": {
1989
+ "textDisabled": {
1990
+ "$type": "color",
1991
+ "$value": "{semantic.color.content.onAccent}",
1992
+ "$extensions": {
1993
+ "com.figma.variables": {
1994
+ "modes": {
1995
+ "Light": "{semantic.color.content.onAccent}",
1996
+ "Dark": "{semantic.color.content.disabled}"
1997
+ }
1998
+ }
1999
+ },
2000
+ "$description": "Disabled primary button text color."
2001
+ },
2002
+ "bgDisabled": {
2003
+ "$type": "color",
2004
+ "$value": "{semantic.color.surface.accentSubtle}",
2005
+ "$description": "Disabled primary button fill."
2006
+ }
2007
+ },
2008
+ "secondary": {
2009
+ "bg": {
2010
+ "rest": {
2011
+ "$type": "color",
2012
+ "$value": "{semantic.color.surface.page}",
2013
+ "$description": "Secondary button fill."
2014
+ },
2015
+ "hover": {
2016
+ "$type": "color",
2017
+ "$value": "{semantic.color.surface.raised}",
2018
+ "$description": "Secondary button hover fill."
2019
+ },
2020
+ "pressed": {
2021
+ "$type": "color",
2022
+ "$value": "{semantic.color.surface.overlay}",
2023
+ "$description": "Secondary button pressed fill."
2024
+ }
2025
+ },
2026
+ "border": {
2027
+ "rest": {
2028
+ "$type": "color",
2029
+ "$value": "{semantic.color.border.default}",
2030
+ "$description": "Secondary button border."
2031
+ },
2032
+ "hover": {
2033
+ "$type": "color",
2034
+ "$value": "{semantic.color.border.default}",
2035
+ "$description": "Secondary button hover border."
2036
+ },
2037
+ "pressed": {
2038
+ "$type": "color",
2039
+ "$value": "{semantic.color.border.default}",
2040
+ "$description": "Secondary button pressed border."
2041
+ },
2042
+ "disabled": {
2043
+ "$type": "color",
2044
+ "$value": "{semantic.color.border.subdued}",
2045
+ "$description": "Secondary button disabled border."
2046
+ }
2047
+ },
2048
+ "text": {
2049
+ "$type": "color",
2050
+ "$value": "{semantic.color.content.primary}",
2051
+ "$description": "Secondary button text color."
2052
+ }
2053
+ }
2054
+ },
2055
+ "input": {
2056
+ "bg": {
2057
+ "$type": "color",
2058
+ "$value": "{semantic.color.surface.raised}"
2059
+ },
2060
+ "text": {
2061
+ "$type": "color",
2062
+ "$value": "{semantic.color.content.primary}"
2063
+ },
2064
+ "border": {
2065
+ "$type": "color",
2066
+ "$value": "{semantic.color.border.default}"
2067
+ },
2068
+ "borderError": {
2069
+ "$type": "color",
2070
+ "$value": "{semantic.color.feedback.error}"
2071
+ },
2072
+ "radius": {
2073
+ "$type": "dimension",
2074
+ "$value": "{semantic.radius.action}"
2075
+ },
2076
+ "paddingX": {
2077
+ "$type": "dimension",
2078
+ "$value": "{primitive.space.4}"
2079
+ },
2080
+ "paddingY": {
2081
+ "$type": "dimension",
2082
+ "$value": "{primitive.space.3}"
2083
+ }
2084
+ },
2085
+ "card": {
2086
+ "bg": {
2087
+ "$type": "color",
2088
+ "$value": "{semantic.color.surface.raised}"
2089
+ },
2090
+ "border": {
2091
+ "$type": "color",
2092
+ "$value": "{semantic.color.border.default}"
2093
+ },
2094
+ "radius": {
2095
+ "$type": "dimension",
2096
+ "$value": "{primitive.radius.8}"
2097
+ },
2098
+ "padding": {
2099
+ "$type": "dimension",
2100
+ "$value": "{primitive.space.6}"
2101
+ },
2102
+ "gap": {
2103
+ "$type": "dimension",
2104
+ "$value": "{primitive.space.2}"
2105
+ }
2106
+ },
2107
+ "lightbox": {
2108
+ "backdrop": {
2109
+ "blur": {
2110
+ "$type": "dimension",
2111
+ "$value": "{primitive.blur.16}",
2112
+ "$description": "Backdrop blur applied behind fullscreen image lightboxes."
2113
+ }
2114
+ }
2115
+ }
2116
+ },
2117
+ "role": {
2118
+ "$description": "Shadcn-style role aliases mapping to semantic tokens. Compiled to --role-* CSS vars.",
2119
+ "background": {
2120
+ "$type": "color",
2121
+ "$value": "{semantic.color.surface.page}",
2122
+ "$description": "Page background. shadcn role: background."
2123
+ },
2124
+ "foreground": {
2125
+ "$type": "color",
2126
+ "$value": "{semantic.color.content.primary}",
2127
+ "$description": "Default text on background. shadcn role: foreground."
2128
+ },
2129
+ "card": {
2130
+ "$type": "color",
2131
+ "$value": "{semantic.color.surface.raised}",
2132
+ "$description": "Card surface. shadcn role: card."
2133
+ },
2134
+ "card-foreground": {
2135
+ "$type": "color",
2136
+ "$value": "{semantic.color.content.primary}",
2137
+ "$description": "Text on card. shadcn role: card-foreground."
2138
+ },
2139
+ "popover": {
2140
+ "$type": "color",
2141
+ "$value": "{semantic.color.surface.overlay}",
2142
+ "$description": "Popover/menu surface. shadcn role: popover."
2143
+ },
2144
+ "popover-foreground": {
2145
+ "$type": "color",
2146
+ "$value": "{semantic.color.content.primary}",
2147
+ "$description": "Text on popover. shadcn role: popover-foreground."
2148
+ },
2149
+ "primary": {
2150
+ "$type": "color",
2151
+ "$value": "{semantic.color.surface.accent}",
2152
+ "$description": "Primary action surface. shadcn role: primary."
2153
+ },
2154
+ "primary-foreground": {
2155
+ "$type": "color",
2156
+ "$value": "{semantic.color.content.onAccent}",
2157
+ "$description": "Text/icons on primary surface. shadcn role: primary-foreground."
2158
+ },
2159
+ "secondary": {
2160
+ "$type": "color",
2161
+ "$value": "{semantic.color.surface.raised}",
2162
+ "$description": "Secondary action surface. shadcn role: secondary."
2163
+ },
2164
+ "secondary-foreground": {
2165
+ "$type": "color",
2166
+ "$value": "{semantic.color.content.primary}",
2167
+ "$description": "Text on secondary surface. shadcn role: secondary-foreground."
2168
+ },
2169
+ "muted": {
2170
+ "$type": "color",
2171
+ "$value": "{semantic.color.surface.overlay}",
2172
+ "$description": "Muted/quiet bg (skeletons, disabled inputs). shadcn role: muted."
2173
+ },
2174
+ "muted-foreground": {
2175
+ "$type": "color",
2176
+ "$value": "{semantic.color.content.secondary}",
2177
+ "$description": "Muted text. shadcn role: muted-foreground."
2178
+ },
2179
+ "accent": {
2180
+ "$type": "color",
2181
+ "$value": "{semantic.color.surface.accentSubtle}",
2182
+ "$description": "Hover/active tinted bg. shadcn role: accent."
2183
+ },
2184
+ "accent-foreground": {
2185
+ "$type": "color",
2186
+ "$value": "{semantic.color.content.accent}",
2187
+ "$description": "Text on accent surface. shadcn role: accent-foreground."
2188
+ },
2189
+ "destructive": {
2190
+ "$type": "color",
2191
+ "$value": "{semantic.color.feedback.error}",
2192
+ "$description": "Destructive action surface. shadcn role: destructive."
2193
+ },
2194
+ "destructive-foreground": {
2195
+ "$type": "color",
2196
+ "$value": "{semantic.color.content.inverse}",
2197
+ "$description": "Text on destructive surface. shadcn role: destructive-foreground."
2198
+ },
2199
+ "border": {
2200
+ "$type": "color",
2201
+ "$value": "{semantic.color.border.default}",
2202
+ "$description": "Default border. shadcn role: border."
2203
+ },
2204
+ "input": {
2205
+ "$type": "color",
2206
+ "$value": "{semantic.color.border.default}",
2207
+ "$description": "Input field border. shadcn role: input."
2208
+ },
2209
+ "ring": {
2210
+ "$type": "color",
2211
+ "$value": "{semantic.color.border.accent}",
2212
+ "$description": "Focus ring color. shadcn role: ring."
2213
+ },
2214
+ "radius": {
2215
+ "$type": "dimension",
2216
+ "$value": "{semantic.radius.action}",
2217
+ "$description": "Default border radius. shadcn role: radius."
2218
+ }
2219
+ }
2220
+ }