open-ds 0.0.0-stage → 0.1.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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -2
  3. package/assets/schemes/accessible-first.json +3093 -0
  4. package/assets/schemes/brand-expressive.json +3124 -0
  5. package/assets/schemes/content-first.json +3110 -0
  6. package/assets/schemes/dense-data.json +3489 -0
  7. package/assets/schemes/grammar.json +3903 -0
  8. package/assets/schemes/multi-brand.json +4359 -0
  9. package/assets/skills/open-ds/SKILL.md +50 -0
  10. package/assets/skills/open-ds-build/SKILL.md +19 -0
  11. package/assets/skills/open-ds-change/SKILL.md +19 -0
  12. package/assets/skills/open-ds-choose/SKILL.md +18 -0
  13. package/assets/skills/open-ds-review/SKILL.md +22 -0
  14. package/assets/skills/open-ds-write/SKILL.md +13 -0
  15. package/assets/stories/accordion.stories.tsx +46 -0
  16. package/assets/stories/alert-dialog.stories.tsx +65 -0
  17. package/assets/stories/alert.stories.tsx +44 -0
  18. package/assets/stories/aspect-ratio.stories.tsx +37 -0
  19. package/assets/stories/avatar.stories.tsx +42 -0
  20. package/assets/stories/badge.stories.tsx +39 -0
  21. package/assets/stories/breadcrumb.stories.tsx +54 -0
  22. package/assets/stories/button.stories.tsx +46 -0
  23. package/assets/stories/calendar.stories.tsx +30 -0
  24. package/assets/stories/card.stories.tsx +50 -0
  25. package/assets/stories/carousel.stories.tsx +64 -0
  26. package/assets/stories/chart.stories.tsx +61 -0
  27. package/assets/stories/checkbox.stories.tsx +29 -0
  28. package/assets/stories/collapsible.stories.tsx +39 -0
  29. package/assets/stories/combobox.stories.tsx +57 -0
  30. package/assets/stories/command.stories.tsx +60 -0
  31. package/assets/stories/context-menu.stories.tsx +55 -0
  32. package/assets/stories/data-table.stories.tsx +93 -0
  33. package/assets/stories/date-picker.stories.tsx +27 -0
  34. package/assets/stories/dialog.stories.tsx +70 -0
  35. package/assets/stories/drawer.stories.tsx +62 -0
  36. package/assets/stories/dropdown-menu.stories.tsx +65 -0
  37. package/assets/stories/empty.stories.tsx +39 -0
  38. package/assets/stories/field.stories.tsx +42 -0
  39. package/assets/stories/form.stories.tsx +56 -0
  40. package/assets/stories/input-group.stories.tsx +41 -0
  41. package/assets/stories/input-otp.stories.tsx +48 -0
  42. package/assets/stories/input.stories.tsx +32 -0
  43. package/assets/stories/kbd.stories.tsx +30 -0
  44. package/assets/stories/label.stories.tsx +26 -0
  45. package/assets/stories/native-select.stories.tsx +39 -0
  46. package/assets/stories/navigation-menu.stories.tsx +41 -0
  47. package/assets/stories/pagination.stories.tsx +61 -0
  48. package/assets/stories/popover.stories.tsx +37 -0
  49. package/assets/stories/progress.stories.tsx +30 -0
  50. package/assets/stories/radio-group.stories.tsx +45 -0
  51. package/assets/stories/resizable.stories.tsx +54 -0
  52. package/assets/stories/scroll-area.stories.tsx +47 -0
  53. package/assets/stories/select.stories.tsx +57 -0
  54. package/assets/stories/separator.stories.tsx +28 -0
  55. package/assets/stories/sheet.stories.tsx +46 -0
  56. package/assets/stories/sidebar.stories.tsx +62 -0
  57. package/assets/stories/skeleton.stories.tsx +27 -0
  58. package/assets/stories/slider.stories.tsx +44 -0
  59. package/assets/stories/spinner.stories.tsx +25 -0
  60. package/assets/stories/switch.stories.tsx +29 -0
  61. package/assets/stories/table.stories.tsx +97 -0
  62. package/assets/stories/tabs.stories.tsx +55 -0
  63. package/assets/stories/textarea.stories.tsx +28 -0
  64. package/assets/stories/toast.stories.tsx +30 -0
  65. package/assets/stories/toggle-group.stories.tsx +41 -0
  66. package/assets/stories/toggle.stories.tsx +20 -0
  67. package/assets/stories/tooltip.stories.tsx +49 -0
  68. package/assets/tokens/accessible-first/content.json +32 -0
  69. package/assets/tokens/accessible-first/dark.tokens.json +581 -0
  70. package/assets/tokens/accessible-first/light.tokens.json +581 -0
  71. package/assets/tokens/accessible-first/shadcn.css +21 -0
  72. package/assets/tokens/accessible-first/theme.css +101 -0
  73. package/assets/tokens/accessible-first/tokens.css +331 -0
  74. package/assets/tokens/accessible-first/tokens.json +1616 -0
  75. package/assets/tokens/accessible-first/tokens.scoped.css +333 -0
  76. package/assets/tokens/brand-expressive/content.json +32 -0
  77. package/assets/tokens/brand-expressive/dark.tokens.json +585 -0
  78. package/assets/tokens/brand-expressive/light.tokens.json +585 -0
  79. package/assets/tokens/brand-expressive/shadcn.css +21 -0
  80. package/assets/tokens/brand-expressive/theme.css +101 -0
  81. package/assets/tokens/brand-expressive/tokens.css +331 -0
  82. package/assets/tokens/brand-expressive/tokens.json +1651 -0
  83. package/assets/tokens/brand-expressive/tokens.scoped.css +333 -0
  84. package/assets/tokens/content-first/content.json +32 -0
  85. package/assets/tokens/content-first/dark.tokens.json +582 -0
  86. package/assets/tokens/content-first/light.tokens.json +582 -0
  87. package/assets/tokens/content-first/shadcn.css +21 -0
  88. package/assets/tokens/content-first/theme.css +101 -0
  89. package/assets/tokens/content-first/tokens.css +331 -0
  90. package/assets/tokens/content-first/tokens.json +1631 -0
  91. package/assets/tokens/content-first/tokens.scoped.css +333 -0
  92. package/assets/tokens/dense-data/content.json +32 -0
  93. package/assets/tokens/dense-data/dark.tokens.json +580 -0
  94. package/assets/tokens/dense-data/light.tokens.json +580 -0
  95. package/assets/tokens/dense-data/shadcn.css +21 -0
  96. package/assets/tokens/dense-data/theme.css +101 -0
  97. package/assets/tokens/dense-data/tokens.css +331 -0
  98. package/assets/tokens/dense-data/tokens.json +1623 -0
  99. package/assets/tokens/dense-data/tokens.scoped.css +333 -0
  100. package/assets/tokens/index.json +143 -0
  101. package/assets/tokens/multi-brand/aster-dark.tokens.json +625 -0
  102. package/assets/tokens/multi-brand/aster-light.tokens.json +625 -0
  103. package/assets/tokens/multi-brand/birch-dark.tokens.json +625 -0
  104. package/assets/tokens/multi-brand/birch-light.tokens.json +625 -0
  105. package/assets/tokens/multi-brand/content.json +32 -0
  106. package/assets/tokens/multi-brand/coral-dark.tokens.json +625 -0
  107. package/assets/tokens/multi-brand/coral-light.tokens.json +625 -0
  108. package/assets/tokens/multi-brand/shadcn.css +21 -0
  109. package/assets/tokens/multi-brand/theme.css +101 -0
  110. package/assets/tokens/multi-brand/tokens.css +1002 -0
  111. package/assets/tokens/multi-brand/tokens.json +1754 -0
  112. package/assets/tokens/multi-brand/tokens.scoped.css +1022 -0
  113. package/assets/tokens/shadcn-map.json +34 -0
  114. package/assets/ui/components/accordion.tsx +60 -0
  115. package/assets/ui/components/alert-dialog.tsx +171 -0
  116. package/assets/ui/components/alert.tsx +56 -0
  117. package/assets/ui/components/aspect-ratio.tsx +17 -0
  118. package/assets/ui/components/avatar.tsx +96 -0
  119. package/assets/ui/components/badge.tsx +36 -0
  120. package/assets/ui/components/breadcrumb.tsx +99 -0
  121. package/assets/ui/components/button.tsx +53 -0
  122. package/assets/ui/components/calendar.tsx +169 -0
  123. package/assets/ui/components/card.tsx +72 -0
  124. package/assets/ui/components/carousel.tsx +224 -0
  125. package/assets/ui/components/chart.tsx +315 -0
  126. package/assets/ui/components/checkbox.tsx +29 -0
  127. package/assets/ui/components/collapsible.tsx +25 -0
  128. package/assets/ui/components/combobox.tsx +275 -0
  129. package/assets/ui/components/command.tsx +145 -0
  130. package/assets/ui/components/context-menu.tsx +218 -0
  131. package/assets/ui/components/data-table.tsx +307 -0
  132. package/assets/ui/components/date-picker.tsx +79 -0
  133. package/assets/ui/components/dialog.tsx +68 -0
  134. package/assets/ui/components/drawer.tsx +115 -0
  135. package/assets/ui/components/dropdown-menu.tsx +58 -0
  136. package/assets/ui/components/empty.tsx +92 -0
  137. package/assets/ui/components/field.tsx +234 -0
  138. package/assets/ui/components/form.tsx +146 -0
  139. package/assets/ui/components/input-group.tsx +154 -0
  140. package/assets/ui/components/input-otp.tsx +75 -0
  141. package/assets/ui/components/input.tsx +25 -0
  142. package/assets/ui/components/kbd.tsx +30 -0
  143. package/assets/ui/components/label.tsx +22 -0
  144. package/assets/ui/components/native-select.tsx +59 -0
  145. package/assets/ui/components/navigation-menu.tsx +149 -0
  146. package/assets/ui/components/pagination.tsx +108 -0
  147. package/assets/ui/components/popover.tsx +61 -0
  148. package/assets/ui/components/progress.tsx +31 -0
  149. package/assets/ui/components/radio-group.tsx +40 -0
  150. package/assets/ui/components/resizable.tsx +54 -0
  151. package/assets/ui/components/scroll-area.tsx +55 -0
  152. package/assets/ui/components/select.tsx +81 -0
  153. package/assets/ui/components/separator.tsx +35 -0
  154. package/assets/ui/components/sheet.tsx +114 -0
  155. package/assets/ui/components/sidebar.tsx +685 -0
  156. package/assets/ui/components/skeleton.tsx +15 -0
  157. package/assets/ui/components/slider.tsx +70 -0
  158. package/assets/ui/components/spinner.tsx +16 -0
  159. package/assets/ui/components/switch.tsx +32 -0
  160. package/assets/ui/components/table.tsx +78 -0
  161. package/assets/ui/components/tabs.tsx +49 -0
  162. package/assets/ui/components/textarea.tsx +25 -0
  163. package/assets/ui/components/toast.tsx +54 -0
  164. package/assets/ui/components/toggle-group.tsx +88 -0
  165. package/assets/ui/components/toggle.tsx +48 -0
  166. package/assets/ui/components/tooltip.tsx +34 -0
  167. package/assets/ui/lib/use-mobile.ts +20 -0
  168. package/assets/ui/lib/utils.ts +7 -0
  169. package/assets/ui/styles.css +27 -0
  170. package/bin/open-ds.js +6 -0
  171. package/package.json +56 -4
  172. package/src/agents.mjs +150 -0
  173. package/src/cli.mjs +445 -0
  174. package/src/components.mjs +69 -0
  175. package/src/context.mjs +143 -0
  176. package/src/create.mjs +377 -0
  177. package/src/docs.mjs +570 -0
  178. package/src/guidance.mjs +63 -0
  179. package/src/index.mjs +20 -0
  180. package/src/mcp.mjs +660 -0
  181. package/src/readmes.mjs +106 -0
  182. package/src/schemes.mjs +188 -0
  183. package/src/tokens.mjs +127 -0
  184. package/templates/project/.github/workflows/ci.yml +15 -0
  185. package/templates/project/.storybook/component-docs.mdx +26 -0
  186. package/templates/project/.storybook/main.ts +17 -0
  187. package/templates/project/.storybook/manager-head.html +3 -0
  188. package/templates/project/.storybook/manager.ts +37 -0
  189. package/templates/project/.storybook/preview-head.html +3 -0
  190. package/templates/project/.storybook/preview.tsx +82 -0
  191. package/templates/project/docs/docusaurus.config.ts +64 -0
  192. package/templates/project/docs/sidebars.ts +8 -0
  193. package/templates/project/docs/src/css/custom.css +275 -0
  194. package/templates/project/gitignore +6 -0
  195. package/templates/project/src/styles/index.css +16 -0
  196. package/templates/project/src/vite-env.d.ts +7 -0
  197. package/templates/project/stories/docs-blocks.tsx +190 -0
  198. package/templates/project/stories/samples.tsx +102 -0
  199. package/templates/project/stories/usage.tsx +31 -0
  200. package/templates/project/tokens/build.mjs +468 -0
  201. package/templates/project/tsconfig.json +15 -0
@@ -0,0 +1,3124 @@
1
+ {
2
+ "$schema": "../schema/scheme.schema.json",
3
+ "id": "brand-expressive",
4
+ "name": "Brand expressive",
5
+ "version": "0.1.0",
6
+ "status": "draft",
7
+ "summary": "Big display type, vivid color and springy motion, for launches that must be remembered.",
8
+ "description": "Brand expressive is an Open DS scheme: a full set of answers to the Open DS grammar, with the reasons behind each, usage rules, voice and tone, and the tokens that follow. Big display type, vivid color and springy motion, for launches that must be remembered.",
9
+ "ai": {
10
+ "use_when": "Launch sites, campaigns, marketing pages and consumer brands that lead with personality.",
11
+ "avoid_when": "Tools people use for hours, or forms where calm matters more than character.",
12
+ "example_products": [
13
+ "Product launch",
14
+ "Campaign site",
15
+ "Consumer app landing",
16
+ "Event site"
17
+ ]
18
+ },
19
+ "scenarios": [
20
+ {
21
+ "text": "A visitor lands on a launch page from a social post and joins the waiting list.",
22
+ "follows": [
23
+ "scenarios.q1",
24
+ "scenarios.q2",
25
+ "outcomes.q1"
26
+ ]
27
+ },
28
+ {
29
+ "text": "An agency swaps the campaign colors for the next drop without changing the components.",
30
+ "follows": [
31
+ "team.q1",
32
+ "team.q2"
33
+ ]
34
+ }
35
+ ],
36
+ "voice": {
37
+ "summary": {
38
+ "text": "Playful and short. Big words, few of them.",
39
+ "follows": [
40
+ "voice.values"
41
+ ]
42
+ },
43
+ "principles": [
44
+ {
45
+ "text": "Headlines are short and bold. Three to six words.",
46
+ "follows": [
47
+ "voice.lands",
48
+ "typography.roles"
49
+ ]
50
+ },
51
+ {
52
+ "text": "Verbs that move: Join, Try, Go.",
53
+ "follows": [
54
+ "voice.values"
55
+ ]
56
+ },
57
+ {
58
+ "text": "Playful in headlines, plain in errors.",
59
+ "follows": [
60
+ "voice.count"
61
+ ]
62
+ }
63
+ ],
64
+ "words": {
65
+ "use": [
66
+ "Join",
67
+ "Drop",
68
+ "Go",
69
+ "Love"
70
+ ],
71
+ "avoid": [
72
+ "Synergy",
73
+ "Leverage",
74
+ "Kindly"
75
+ ],
76
+ "follows": [
77
+ "voice.values"
78
+ ]
79
+ }
80
+ },
81
+ "inventory": {
82
+ "description": "The components this system carries, picked from the grammar catalogue by the components answers. Anything not listed is out.",
83
+ "follows": [
84
+ "components.roles",
85
+ "components.count",
86
+ "components.definition"
87
+ ],
88
+ "in": [
89
+ {
90
+ "id": "button",
91
+ "why": "The one action: sign up."
92
+ },
93
+ {
94
+ "id": "input",
95
+ "why": "The sign-up email."
96
+ },
97
+ {
98
+ "id": "label",
99
+ "why": "Names the field."
100
+ },
101
+ {
102
+ "id": "field",
103
+ "why": "Lays out the sign-up form."
104
+ },
105
+ {
106
+ "id": "carousel",
107
+ "why": "Moves through campaign images."
108
+ },
109
+ {
110
+ "id": "aspect-ratio",
111
+ "why": "Keeps campaign images in shape."
112
+ },
113
+ {
114
+ "id": "avatar",
115
+ "why": "Faces in quotes from customers."
116
+ },
117
+ {
118
+ "id": "badge",
119
+ "why": "New and limited labels."
120
+ },
121
+ {
122
+ "id": "card",
123
+ "why": "Products and features."
124
+ },
125
+ {
126
+ "id": "dialog",
127
+ "why": "The waitlist form over the page."
128
+ },
129
+ {
130
+ "id": "popover",
131
+ "why": "A product preview that opens on tap."
132
+ },
133
+ {
134
+ "id": "drawer",
135
+ "why": "The menu on a phone."
136
+ },
137
+ {
138
+ "id": "toast",
139
+ "why": "Confirms a place on the waitlist."
140
+ },
141
+ {
142
+ "id": "navigation-menu",
143
+ "why": "The site sections."
144
+ },
145
+ {
146
+ "id": "separator",
147
+ "why": "Breaks between sections."
148
+ },
149
+ {
150
+ "id": "skeleton",
151
+ "why": "Images while they load."
152
+ }
153
+ ],
154
+ "out": [
155
+ {
156
+ "id": "table",
157
+ "why": "Campaign pages tell a story; they do not list records."
158
+ },
159
+ {
160
+ "id": "sidebar",
161
+ "why": "Launch sites have no app navigation."
162
+ },
163
+ {
164
+ "id": "command",
165
+ "why": "Visitors on phones do not use keyboard menus."
166
+ },
167
+ {
168
+ "id": "accordion",
169
+ "why": "Campaign sections show everything; nothing worth saying is hidden."
170
+ },
171
+ {
172
+ "id": "hover-card",
173
+ "why": "Hover never happens on a phone, where most visitors arrive."
174
+ }
175
+ ]
176
+ },
177
+ "samples": {
178
+ "description": "Sample content for showing this system: written from its use scenarios, in its voice, with every status mapped to a meaning. Storybook, the site and the docs read it; it is never shared between schemes.",
179
+ "follows": [
180
+ "scenarios.q1",
181
+ "content.q1",
182
+ "tasks.q1",
183
+ "voice.values"
184
+ ],
185
+ "screen": "The drop is coming",
186
+ "actions": {
187
+ "primary": "Join the drop",
188
+ "secondary": "See the line-up"
189
+ },
190
+ "statuses": [
191
+ {
192
+ "label": "New",
193
+ "meaning": "neutral",
194
+ "why": "Just added; a label, not a state to fix."
195
+ },
196
+ {
197
+ "label": "On the list",
198
+ "meaning": "success",
199
+ "why": "You joined and your place is saved."
200
+ },
201
+ {
202
+ "label": "Almost gone",
203
+ "meaning": "warning",
204
+ "why": "Few left; act soon."
205
+ }
206
+ ],
207
+ "metrics": [
208
+ {
209
+ "label": "Days to launch",
210
+ "value": "6"
211
+ },
212
+ {
213
+ "label": "On the list",
214
+ "value": "2,400"
215
+ },
216
+ {
217
+ "label": "Pieces in the drop",
218
+ "value": "12"
219
+ },
220
+ {
221
+ "label": "Colours",
222
+ "value": "4"
223
+ }
224
+ ],
225
+ "field": {
226
+ "label": "Email",
227
+ "placeholder": "you@example.com",
228
+ "hint": "One email at launch. No spam.",
229
+ "error": "That email doesn't look right. Check it and try again.",
230
+ "invalid": "hello@"
231
+ },
232
+ "messages": {
233
+ "success": "You're on the list. See you at launch.",
234
+ "error": {
235
+ "title": "That didn't go through.",
236
+ "description": "Try again in a moment."
237
+ },
238
+ "neutral": "Nothing here yet. Go find something you love."
239
+ },
240
+ "confirm": {
241
+ "trigger": "Leave the list",
242
+ "title": "Leave the list?",
243
+ "body": "You can join again later.",
244
+ "confirm": "Leave",
245
+ "cancel": "Stay on it"
246
+ },
247
+ "card": {
248
+ "title": "Night runner jacket",
249
+ "description": "Drop 03 · four colours",
250
+ "status": "Almost gone",
251
+ "primary": "Join the drop",
252
+ "secondary": "Save"
253
+ }
254
+ },
255
+ "themes": [
256
+ {
257
+ "id": "light",
258
+ "brand": "default",
259
+ "mode": "light"
260
+ },
261
+ {
262
+ "id": "dark",
263
+ "brand": "default",
264
+ "mode": "dark"
265
+ }
266
+ ],
267
+ "answers": [
268
+ {
269
+ "question": "business.q1",
270
+ "option": "convert",
271
+ "why": "A launch site that must win attention and sign-ups.",
272
+ "because": []
273
+ },
274
+ {
275
+ "question": "business.q2",
276
+ "option": "one",
277
+ "why": "One brand, loudly.",
278
+ "because": []
279
+ },
280
+ {
281
+ "question": "people.q1",
282
+ "option": "customers",
283
+ "why": "New customers deciding if they care.",
284
+ "because": [
285
+ "business.q1"
286
+ ]
287
+ },
288
+ {
289
+ "question": "people.q2",
290
+ "option": "aa",
291
+ "why": "AA, even when loud.",
292
+ "because": [
293
+ "people.q1"
294
+ ]
295
+ },
296
+ {
297
+ "question": "content.q1",
298
+ "option": "media",
299
+ "why": "Images, campaigns and short punchy copy.",
300
+ "because": [
301
+ "business.q1"
302
+ ]
303
+ },
304
+ {
305
+ "question": "content.q2",
306
+ "option": "one-idea",
307
+ "why": "One big idea per section.",
308
+ "because": [
309
+ "content.q1"
310
+ ]
311
+ },
312
+ {
313
+ "question": "tasks.q1",
314
+ "option": "explore",
315
+ "why": "People browse and explore the story.",
316
+ "because": [
317
+ "content.q1"
318
+ ]
319
+ },
320
+ {
321
+ "question": "tasks.q2",
322
+ "option": "rarely",
323
+ "why": "One action: sign up.",
324
+ "because": [
325
+ "business.q1"
326
+ ]
327
+ },
328
+ {
329
+ "question": "human.q1",
330
+ "option": "delight",
331
+ "why": "Delight is the point.",
332
+ "because": [
333
+ "business.q1"
334
+ ]
335
+ },
336
+ {
337
+ "question": "human.q2",
338
+ "option": "fresh",
339
+ "why": "Every visit should feel fresh.",
340
+ "because": [
341
+ "people.q1"
342
+ ]
343
+ },
344
+ {
345
+ "question": "outcomes.q1",
346
+ "option": "engagement",
347
+ "why": "Engagement and sign-ups.",
348
+ "because": [
349
+ "business.q1"
350
+ ]
351
+ },
352
+ {
353
+ "question": "outcomes.q2",
354
+ "option": "off-brand",
355
+ "why": "A bland page is the costly mistake.",
356
+ "because": [
357
+ "business.q1"
358
+ ]
359
+ },
360
+ {
361
+ "question": "brand.q1",
362
+ "option": "bold",
363
+ "why": "Bold and confident.",
364
+ "because": [
365
+ "business.q1"
366
+ ]
367
+ },
368
+ {
369
+ "question": "brand.q2",
370
+ "option": "loud",
371
+ "why": "The brand is loud everywhere.",
372
+ "because": [
373
+ "brand.q1"
374
+ ]
375
+ },
376
+ {
377
+ "question": "scenarios.q1",
378
+ "option": "on-the-move",
379
+ "why": "Visitors come from social posts on their phones.",
380
+ "because": [
381
+ "people.q1"
382
+ ]
383
+ },
384
+ {
385
+ "question": "scenarios.q2",
386
+ "option": "short",
387
+ "why": "A visit lasts a few minutes at most.",
388
+ "because": [
389
+ "outcomes.q1"
390
+ ]
391
+ },
392
+ {
393
+ "question": "team.q1",
394
+ "option": "agency",
395
+ "why": "An agency runs campaigns.",
396
+ "because": []
397
+ },
398
+ {
399
+ "question": "team.q2",
400
+ "option": "campaign",
401
+ "why": "Every campaign changes the look a little.",
402
+ "because": [
403
+ "team.q1"
404
+ ]
405
+ },
406
+ {
407
+ "question": "typography.roles",
408
+ "option": "core-expressive",
409
+ "why": "A big expressive display role carries the brand.",
410
+ "because": [
411
+ "brand.q2"
412
+ ]
413
+ },
414
+ {
415
+ "question": "typography.count",
416
+ "option": "many",
417
+ "why": "Fine steps give big moments room.",
418
+ "because": [
419
+ "brand.q2"
420
+ ]
421
+ },
422
+ {
423
+ "question": "typography.definition",
424
+ "option": "ratio-proportional",
425
+ "why": "Ratios suit the big display sizes.",
426
+ "because": [
427
+ "typography.roles"
428
+ ]
429
+ },
430
+ {
431
+ "question": "typography.values",
432
+ "option": "regular",
433
+ "why": "Regular body; the display does the shouting.",
434
+ "because": [
435
+ "content.q2"
436
+ ]
437
+ },
438
+ {
439
+ "question": "typography.lands",
440
+ "option": "headlines",
441
+ "why": "Type does its work in headlines.",
442
+ "because": [
443
+ "brand.q2"
444
+ ]
445
+ },
446
+ {
447
+ "question": "color.roles",
448
+ "option": "core-brand",
449
+ "why": "Brand accents are part of the message.",
450
+ "because": [
451
+ "brand.q2"
452
+ ]
453
+ },
454
+ {
455
+ "question": "color.count",
456
+ "option": "three",
457
+ "why": "Primary, secondary, ghost.",
458
+ "because": [
459
+ "tasks.q2"
460
+ ]
461
+ },
462
+ {
463
+ "question": "color.definition",
464
+ "option": "neutral-brand",
465
+ "why": "Warm neutrals and one vivid ramp.",
466
+ "because": [
467
+ "brand.q1"
468
+ ]
469
+ },
470
+ {
471
+ "question": "color.values",
472
+ "option": "vivid",
473
+ "why": "Vivid color is the brand.",
474
+ "because": [
475
+ "brand.q2"
476
+ ]
477
+ },
478
+ {
479
+ "question": "color.lands",
480
+ "option": "brand-moments",
481
+ "why": "Color makes the launch moment.",
482
+ "because": [
483
+ "outcomes.q1"
484
+ ]
485
+ },
486
+ {
487
+ "question": "spacing.roles",
488
+ "option": "gap-inset",
489
+ "why": "Few tables; no row role needed.",
490
+ "because": [
491
+ "content.q1"
492
+ ]
493
+ },
494
+ {
495
+ "question": "spacing.count",
496
+ "option": "one",
497
+ "why": "One generous density.",
498
+ "because": [
499
+ "content.q2"
500
+ ]
501
+ },
502
+ {
503
+ "question": "spacing.definition",
504
+ "option": "coarse",
505
+ "why": "Big, even steps make big moments.",
506
+ "because": [
507
+ "brand.q2"
508
+ ]
509
+ },
510
+ {
511
+ "question": "spacing.values",
512
+ "option": "spacious",
513
+ "why": "Big space makes big moments.",
514
+ "because": [
515
+ "content.q2"
516
+ ]
517
+ },
518
+ {
519
+ "question": "spacing.lands",
520
+ "option": "sections",
521
+ "why": "Space works between big sections.",
522
+ "because": [
523
+ "content.q1"
524
+ ]
525
+ },
526
+ {
527
+ "question": "shape.roles",
528
+ "option": "control-container",
529
+ "why": "Pills everywhere; badges share the control corner.",
530
+ "because": [
531
+ "brand.q1"
532
+ ]
533
+ },
534
+ {
535
+ "question": "shape.count",
536
+ "option": "two",
537
+ "why": "Pill controls and large container corners.",
538
+ "because": [
539
+ "shape.roles"
540
+ ]
541
+ },
542
+ {
543
+ "question": "shape.definition",
544
+ "option": "fixed",
545
+ "why": "One brand, one set of corners.",
546
+ "because": [
547
+ "business.q2"
548
+ ]
549
+ },
550
+ {
551
+ "question": "shape.values",
552
+ "option": "pill",
553
+ "why": "Pill controls feel playful.",
554
+ "because": [
555
+ "brand.q1"
556
+ ]
557
+ },
558
+ {
559
+ "question": "shape.lands",
560
+ "option": "buttons-badges",
561
+ "why": "Pill buttons are the signature shape.",
562
+ "because": [
563
+ "brand.q2"
564
+ ]
565
+ },
566
+ {
567
+ "question": "elevation.roles",
568
+ "option": "cards-too",
569
+ "why": "Cards lift to feel like objects.",
570
+ "because": [
571
+ "brand.q2"
572
+ ]
573
+ },
574
+ {
575
+ "question": "elevation.count",
576
+ "option": "two",
577
+ "why": "One shadow for cards, one for overlays.",
578
+ "because": [
579
+ "elevation.roles"
580
+ ]
581
+ },
582
+ {
583
+ "question": "elevation.definition",
584
+ "option": "cards",
585
+ "why": "Cards hold each offer.",
586
+ "because": [
587
+ "content.q1"
588
+ ]
589
+ },
590
+ {
591
+ "question": "elevation.values",
592
+ "option": "pronounced",
593
+ "why": "Pronounced shadows add depth.",
594
+ "because": [
595
+ "brand.q2"
596
+ ]
597
+ },
598
+ {
599
+ "question": "elevation.lands",
600
+ "option": "cards-menus",
601
+ "why": "Cards, menus and dialogs rise.",
602
+ "because": [
603
+ "elevation.roles"
604
+ ]
605
+ },
606
+ {
607
+ "question": "motion.roles",
608
+ "option": "expression",
609
+ "why": "Motion carries personality.",
610
+ "because": [
611
+ "brand.q2"
612
+ ]
613
+ },
614
+ {
615
+ "question": "motion.count",
616
+ "option": "three",
617
+ "why": "Fast feedback, moderate panels, relaxed hero.",
618
+ "because": [
619
+ "motion.roles"
620
+ ]
621
+ },
622
+ {
623
+ "question": "motion.definition",
624
+ "option": "spring",
625
+ "why": "A spring that overshoots feels alive.",
626
+ "because": [
627
+ "brand.q1"
628
+ ]
629
+ },
630
+ {
631
+ "question": "motion.values",
632
+ "option": "relaxed",
633
+ "why": "Relaxed, springy motion.",
634
+ "because": [
635
+ "human.q1"
636
+ ]
637
+ },
638
+ {
639
+ "question": "motion.lands",
640
+ "option": "hero",
641
+ "why": "Motion shows in hero and launch moments.",
642
+ "because": [
643
+ "outcomes.q1"
644
+ ]
645
+ },
646
+ {
647
+ "question": "iconography.roles",
648
+ "option": "decoration-too",
649
+ "why": "Icons also decorate campaign pages.",
650
+ "because": [
651
+ "brand.q2"
652
+ ]
653
+ },
654
+ {
655
+ "question": "iconography.count",
656
+ "option": "two",
657
+ "why": "One size next to text, one for decoration.",
658
+ "because": [
659
+ "iconography.roles"
660
+ ]
661
+ },
662
+ {
663
+ "question": "iconography.definition",
664
+ "option": "duotone",
665
+ "why": "Two-tone icons carry the brand color.",
666
+ "because": [
667
+ "color.values"
668
+ ]
669
+ },
670
+ {
671
+ "question": "iconography.values",
672
+ "option": "larger",
673
+ "why": "Larger icons hold their own next to big type.",
674
+ "because": [
675
+ "typography.roles"
676
+ ]
677
+ },
678
+ {
679
+ "question": "iconography.lands",
680
+ "option": "buttons",
681
+ "why": "Icons sit in calls to action.",
682
+ "because": [
683
+ "outcomes.q1"
684
+ ]
685
+ },
686
+ {
687
+ "question": "theming.roles",
688
+ "option": "mode",
689
+ "why": "One brand, so only the mode changes.",
690
+ "because": [
691
+ "business.q2"
692
+ ]
693
+ },
694
+ {
695
+ "question": "theming.count",
696
+ "option": "two",
697
+ "why": "Light and dark.",
698
+ "because": [
699
+ "theming.values"
700
+ ]
701
+ },
702
+ {
703
+ "question": "theming.definition",
704
+ "option": "single",
705
+ "why": "One brand per campaign.",
706
+ "because": [
707
+ "business.q2"
708
+ ]
709
+ },
710
+ {
711
+ "question": "theming.values",
712
+ "option": "light-dark",
713
+ "why": "Light and dark ship as standard.",
714
+ "because": [
715
+ "people.q1"
716
+ ]
717
+ },
718
+ {
719
+ "question": "theming.lands",
720
+ "option": "colors",
721
+ "why": "Only colors change.",
722
+ "because": [
723
+ "theming.roles"
724
+ ]
725
+ },
726
+ {
727
+ "question": "accessibility.roles",
728
+ "option": "plus-pressed",
729
+ "why": "Pressed for touch.",
730
+ "because": [
731
+ "accessibility.values"
732
+ ]
733
+ },
734
+ {
735
+ "question": "accessibility.count",
736
+ "option": "color-word",
737
+ "why": "Color and word.",
738
+ "because": [
739
+ "people.q2"
740
+ ]
741
+ },
742
+ {
743
+ "question": "accessibility.definition",
744
+ "option": "aa",
745
+ "why": "AA, checked on every vivid color.",
746
+ "because": [
747
+ "people.q2"
748
+ ]
749
+ },
750
+ {
751
+ "question": "accessibility.values",
752
+ "option": "touch",
753
+ "why": "Visitors come from social posts on phones.",
754
+ "because": [
755
+ "scenarios.q1"
756
+ ]
757
+ },
758
+ {
759
+ "question": "accessibility.lands",
760
+ "option": "brand-color",
761
+ "why": "Vivid brand color is the hardest to keep readable.",
762
+ "because": [
763
+ "color.values"
764
+ ]
765
+ },
766
+ {
767
+ "question": "naming.roles",
768
+ "option": "tokens-keys",
769
+ "why": "Components get their own keys.",
770
+ "because": [
771
+ "team.q2"
772
+ ]
773
+ },
774
+ {
775
+ "question": "naming.count",
776
+ "option": "three",
777
+ "why": "Primitives, semantics and component keys.",
778
+ "because": [
779
+ "team.q2"
780
+ ]
781
+ },
782
+ {
783
+ "question": "naming.definition",
784
+ "option": "by-role",
785
+ "why": "Role names survive each campaign.",
786
+ "because": [
787
+ "team.q2"
788
+ ]
789
+ },
790
+ {
791
+ "question": "naming.values",
792
+ "option": "kebab-paths",
793
+ "why": "Lowercase paths read the same everywhere.",
794
+ "because": [
795
+ "team.q1"
796
+ ]
797
+ },
798
+ {
799
+ "question": "naming.lands",
800
+ "option": "keys",
801
+ "why": "Campaigns change primitives, never components.",
802
+ "because": [
803
+ "team.q2"
804
+ ]
805
+ },
806
+ {
807
+ "question": "voice.roles",
808
+ "option": "ui-marketing",
809
+ "why": "Headlines carry the campaign.",
810
+ "because": [
811
+ "business.q1"
812
+ ]
813
+ },
814
+ {
815
+ "question": "voice.count",
816
+ "option": "per-moment",
817
+ "why": "Playful in headlines, plain in errors.",
818
+ "because": [
819
+ "outcomes.q2"
820
+ ]
821
+ },
822
+ {
823
+ "question": "voice.definition",
824
+ "option": "principles",
825
+ "why": "Principles and examples guide each campaign's writers.",
826
+ "because": [
827
+ "team.q1"
828
+ ]
829
+ },
830
+ {
831
+ "question": "voice.values",
832
+ "option": "playful",
833
+ "why": "Big words, few of them.",
834
+ "because": [
835
+ "brand.q1",
836
+ "brand.q2"
837
+ ]
838
+ },
839
+ {
840
+ "question": "voice.lands",
841
+ "option": "headlines",
842
+ "why": "Words work hardest in headlines and buttons.",
843
+ "because": [
844
+ "outcomes.q1"
845
+ ]
846
+ },
847
+ {
848
+ "question": "components.roles",
849
+ "option": "core-media",
850
+ "why": "Campaigns lead with media and big sections.",
851
+ "because": [
852
+ "content.q1",
853
+ "brand.q2"
854
+ ]
855
+ },
856
+ {
857
+ "question": "components.count",
858
+ "option": "few",
859
+ "why": "One action and a story need only the parts in use; an agency keeps them fresh.",
860
+ "because": [
861
+ "tasks.q2",
862
+ "team.q1"
863
+ ]
864
+ },
865
+ {
866
+ "question": "components.definition",
867
+ "option": "brand-moment",
868
+ "why": "A component joins when it gives the campaign a moment.",
869
+ "because": [
870
+ "brand.q1",
871
+ "outcomes.q1"
872
+ ]
873
+ },
874
+ {
875
+ "question": "components.values",
876
+ "option": "some",
877
+ "why": "Variants for emphasis and size let each campaign look a little different.",
878
+ "because": [
879
+ "team.q2",
880
+ "brand.q2"
881
+ ]
882
+ },
883
+ {
884
+ "question": "components.lands",
885
+ "option": "campaign-sections",
886
+ "why": "Components sit inside big campaign sections.",
887
+ "because": [
888
+ "content.q1",
889
+ "tasks.q1"
890
+ ]
891
+ }
892
+ ],
893
+ "usage": [
894
+ {
895
+ "situation": "page-title",
896
+ "use": "type.display",
897
+ "not": "type.title",
898
+ "why": "The display role carries the brand in every hero.",
899
+ "because": [
900
+ "typography.roles",
901
+ "brand.q2"
902
+ ]
903
+ },
904
+ {
905
+ "situation": "number-in-table",
906
+ "use": "type.body",
907
+ "not": "A mono font",
908
+ "why": "Tables are rare; keep the brand voice.",
909
+ "because": [
910
+ "content.q1"
911
+ ]
912
+ },
913
+ {
914
+ "situation": "paragraph",
915
+ "use": "type.body, short",
916
+ "not": "Long paragraphs",
917
+ "why": "Short copy keeps the energy.",
918
+ "because": [
919
+ "voice.values"
920
+ ]
921
+ },
922
+ {
923
+ "situation": "field-label",
924
+ "use": "type.label",
925
+ "not": "type.caption",
926
+ "why": "Labels stay readable on vivid color.",
927
+ "because": [
928
+ "people.q2"
929
+ ]
930
+ },
931
+ {
932
+ "situation": "selected-row",
933
+ "use": "color.surface.selected (brand tint)",
934
+ "not": "Grey",
935
+ "why": "Selection carries the brand.",
936
+ "because": [
937
+ "color.values"
938
+ ]
939
+ },
940
+ {
941
+ "situation": "error-message",
942
+ "use": "color.status.danger and a short sentence",
943
+ "not": "The brand magenta",
944
+ "why": "Errors must not look like the brand.",
945
+ "because": [
946
+ "outcomes.q2",
947
+ "accessibility.count"
948
+ ]
949
+ },
950
+ {
951
+ "situation": "link",
952
+ "use": "color.text.link, underlined",
953
+ "not": "Color only",
954
+ "why": "Underline keeps links clear on vivid color.",
955
+ "because": [
956
+ "people.q2"
957
+ ]
958
+ },
959
+ {
960
+ "situation": "status-label",
961
+ "use": "Badge pill with a word",
962
+ "not": "Color alone",
963
+ "why": "A word keeps meaning on vivid backgrounds.",
964
+ "because": [
965
+ "accessibility.count"
966
+ ]
967
+ },
968
+ {
969
+ "situation": "related-items",
970
+ "use": "space.gap.default",
971
+ "not": "space.gap.tight",
972
+ "why": "Air keeps big type readable.",
973
+ "because": [
974
+ "spacing.values"
975
+ ]
976
+ },
977
+ {
978
+ "situation": "between-sections",
979
+ "use": "space.gap.section and a color block",
980
+ "not": "A thin line",
981
+ "why": "Big space and color make each section a moment.",
982
+ "because": [
983
+ "elevation.definition"
984
+ ]
985
+ },
986
+ {
987
+ "situation": "table-row",
988
+ "use": "size.row (comfortable)",
989
+ "not": "A compact row",
990
+ "why": "Rare tables stay airy.",
991
+ "because": [
992
+ "spacing.values"
993
+ ]
994
+ },
995
+ {
996
+ "situation": "control-corner",
997
+ "use": "radius.control (pill)",
998
+ "not": "Sharp corners",
999
+ "why": "Pills feel playful.",
1000
+ "because": [
1001
+ "shape.values"
1002
+ ]
1003
+ },
1004
+ {
1005
+ "situation": "status-shape",
1006
+ "use": "radius.badge (pill)",
1007
+ "not": "A rectangle",
1008
+ "why": "Pills match the controls.",
1009
+ "because": [
1010
+ "shape.roles"
1011
+ ]
1012
+ },
1013
+ {
1014
+ "situation": "card",
1015
+ "use": "elevation.card (pronounced)",
1016
+ "not": "A flat card",
1017
+ "why": "Cards float to feel tactile.",
1018
+ "because": [
1019
+ "elevation.roles",
1020
+ "elevation.values"
1021
+ ]
1022
+ },
1023
+ {
1024
+ "situation": "menu-or-dialog",
1025
+ "use": "elevation.overlay and a dimmed page",
1026
+ "not": "No shadow",
1027
+ "why": "Strong depth for floating things.",
1028
+ "because": [
1029
+ "elevation.values"
1030
+ ]
1031
+ },
1032
+ {
1033
+ "situation": "hover-feedback",
1034
+ "use": "motion.duration.feedback (relaxed)",
1035
+ "not": "An instant change",
1036
+ "why": "Springy motion is part of the brand.",
1037
+ "because": [
1038
+ "motion.roles",
1039
+ "motion.values"
1040
+ ]
1041
+ },
1042
+ {
1043
+ "situation": "reduced-motion",
1044
+ "use": "Reduced motion",
1045
+ "not": "Full motion",
1046
+ "why": "Motion is reduced when asked.",
1047
+ "because": [
1048
+ "motion.roles"
1049
+ ]
1050
+ },
1051
+ {
1052
+ "situation": "icon-alone",
1053
+ "use": "Rarely, with a tooltip",
1054
+ "not": "Many bare icons",
1055
+ "why": "Type and image carry the page.",
1056
+ "because": [
1057
+ "iconography.roles"
1058
+ ]
1059
+ },
1060
+ {
1061
+ "situation": "dark-mode",
1062
+ "use": "The dark semantic mode",
1063
+ "not": "A separate campaign palette",
1064
+ "why": "Dark ships as standard; campaigns change values, not structure.",
1065
+ "because": [
1066
+ "theming.values"
1067
+ ]
1068
+ },
1069
+ {
1070
+ "situation": "keyboard-focus",
1071
+ "use": "button/focus-ring at border-width.focus",
1072
+ "not": "Removing the outline",
1073
+ "why": "Focus must show on vivid color.",
1074
+ "because": [
1075
+ "people.q2"
1076
+ ]
1077
+ },
1078
+ {
1079
+ "situation": "smallest-target",
1080
+ "use": "size.control.default (touch)",
1081
+ "not": "A compact control",
1082
+ "why": "Phones first.",
1083
+ "because": [
1084
+ "accessibility.values"
1085
+ ]
1086
+ },
1087
+ {
1088
+ "situation": "commit-action",
1089
+ "use": "Button primary, large, one per section",
1090
+ "not": "Two primaries",
1091
+ "why": "One loud call to action per section.",
1092
+ "because": [
1093
+ "outcomes.q1"
1094
+ ]
1095
+ },
1096
+ {
1097
+ "situation": "alternative-action",
1098
+ "use": "Button ghost",
1099
+ "not": "A second primary",
1100
+ "why": "The alternative must not compete.",
1101
+ "because": [
1102
+ "color.count"
1103
+ ]
1104
+ },
1105
+ {
1106
+ "situation": "destructive-action",
1107
+ "use": "Button secondary, then confirm",
1108
+ "not": "Button primary",
1109
+ "why": "Confirm before destroying data.",
1110
+ "because": [
1111
+ "outcomes.q2"
1112
+ ]
1113
+ },
1114
+ {
1115
+ "situation": "row-action",
1116
+ "use": "Button ghost with a word",
1117
+ "not": "An icon alone",
1118
+ "why": "A word keeps it clear.",
1119
+ "because": [
1120
+ "iconography.roles"
1121
+ ]
1122
+ },
1123
+ {
1124
+ "situation": "missing-token",
1125
+ "use": "The closest semantic token, then ask for a new one",
1126
+ "not": "A raw value in the component",
1127
+ "why": "The next campaign changes primitives; raw values would stay behind.",
1128
+ "because": [
1129
+ "naming.lands"
1130
+ ]
1131
+ },
1132
+ {
1133
+ "situation": "button-label",
1134
+ "use": "A short verb that moves: Join, Try, Go",
1135
+ "not": "\"Learn more\"",
1136
+ "why": "Big moments need verbs with energy.",
1137
+ "because": [
1138
+ "voice.values",
1139
+ "voice.lands"
1140
+ ],
1141
+ "example": "Join the drop"
1142
+ },
1143
+ {
1144
+ "situation": "error-words",
1145
+ "use": "Plain first, a light touch after",
1146
+ "not": "A joke before the fix",
1147
+ "why": "Playful copy must never hide what went wrong.",
1148
+ "because": [
1149
+ "voice.count"
1150
+ ],
1151
+ "example": "That email doesn't look right. Check it and try again."
1152
+ },
1153
+ {
1154
+ "situation": "success-words",
1155
+ "use": "Celebrate, briefly",
1156
+ "not": "A long thank-you",
1157
+ "why": "A short celebration is remembered.",
1158
+ "because": [
1159
+ "voice.values",
1160
+ "outcomes.q1"
1161
+ ],
1162
+ "example": "You're on the list. See you at launch."
1163
+ },
1164
+ {
1165
+ "situation": "empty-words",
1166
+ "use": "Playful, with a clear next step",
1167
+ "not": "A dead end",
1168
+ "why": "Playful words still need a way forward.",
1169
+ "because": [
1170
+ "voice.values"
1171
+ ],
1172
+ "example": "Nothing here yet. Go find something you love."
1173
+ },
1174
+ {
1175
+ "situation": "confirm-words",
1176
+ "use": "Plain. No jokes when something is lost.",
1177
+ "not": "Playful copy",
1178
+ "why": "Loss is never the moment for a joke.",
1179
+ "because": [
1180
+ "voice.count"
1181
+ ],
1182
+ "example": "Remove this from your list? You can add it back later."
1183
+ },
1184
+ {
1185
+ "situation": "first-visit",
1186
+ "use": "One bold line and one button",
1187
+ "not": "A paragraph of copy",
1188
+ "why": "Visitors from a social post give a few seconds.",
1189
+ "because": [
1190
+ "scenarios.q2",
1191
+ "voice.values"
1192
+ ],
1193
+ "example": "The drop is coming. Be first."
1194
+ },
1195
+ {
1196
+ "situation": "missing-component",
1197
+ "use": "a section built from the inventory with campaign tokens",
1198
+ "not": "a new component for one campaign",
1199
+ "why": "Campaigns change the look through tokens; new parts every drop are hard to keep working.",
1200
+ "because": [
1201
+ "team.q2",
1202
+ "components.definition"
1203
+ ]
1204
+ }
1205
+ ],
1206
+ "tokens": {
1207
+ "primitive": {
1208
+ "color": {
1209
+ "$description": "Colour options: raw hue ramps. Each hue has a light ramp and a dark ramp (the same steps tuned for dark backgrounds). Steps only: each theme decides its own base (@). Themes pick from these; components never read them.",
1210
+ "taupe": {
1211
+ "$type": "color",
1212
+ "$description": "The taupe hue: a light ramp, a dark ramp and its base value.",
1213
+ "light": {
1214
+ "0": {
1215
+ "$value": "#FFFFFF"
1216
+ },
1217
+ "50": {
1218
+ "$value": "#FFF8F3"
1219
+ },
1220
+ "100": {
1221
+ "$value": "#FCEFE6"
1222
+ },
1223
+ "200": {
1224
+ "$value": "#F2DCCF"
1225
+ },
1226
+ "300": {
1227
+ "$value": "#E2C4B3"
1228
+ },
1229
+ "400": {
1230
+ "$value": "#B5988A",
1231
+ "$description": "Derived: the OKLab midpoint of 300 and 500. Added so muted text can pass 4.5:1 and stay quieter than secondary."
1232
+ },
1233
+ "500": {
1234
+ "$value": "#8A6F63"
1235
+ },
1236
+ "600": {
1237
+ "$value": "#6B544A",
1238
+ "$description": "Derived: the OKLab midpoint of 500 and 700. Added so muted text can pass 4.5:1 and stay quieter than secondary."
1239
+ },
1240
+ "700": {
1241
+ "$value": "#4D3A33"
1242
+ },
1243
+ "800": {
1244
+ "$value": "#33241F"
1245
+ },
1246
+ "900": {
1247
+ "$value": "#1F1411"
1248
+ },
1249
+ "950": {
1250
+ "$value": "#120B09"
1251
+ }
1252
+ },
1253
+ "dark": {
1254
+ "0": {
1255
+ "$value": "#120B09"
1256
+ },
1257
+ "50": {
1258
+ "$value": "#1F1411"
1259
+ },
1260
+ "100": {
1261
+ "$value": "#33241F"
1262
+ },
1263
+ "200": {
1264
+ "$value": "#4D3A33"
1265
+ },
1266
+ "300": {
1267
+ "$value": "#8A6F63"
1268
+ },
1269
+ "400": {
1270
+ "$value": "#B5988A",
1271
+ "$description": "Derived: the OKLab midpoint of 300 and 500. Added so muted text can pass 4.5:1 and stay quieter than secondary."
1272
+ },
1273
+ "500": {
1274
+ "$value": "#E2C4B3"
1275
+ },
1276
+ "600": {
1277
+ "$value": "#EAD0C1",
1278
+ "$description": "Derived: the OKLab midpoint of 500 and 700. Added so muted text can pass 4.5:1 and stay quieter than secondary."
1279
+ },
1280
+ "700": {
1281
+ "$value": "#F2DCCF"
1282
+ },
1283
+ "800": {
1284
+ "$value": "#FCEFE6"
1285
+ },
1286
+ "900": {
1287
+ "$value": "#FFF8F3"
1288
+ },
1289
+ "950": {
1290
+ "$value": "#FFFFFF"
1291
+ }
1292
+ }
1293
+ },
1294
+ "pink": {
1295
+ "$type": "color",
1296
+ "$description": "The pink hue: a light ramp, a dark ramp and its base value.",
1297
+ "light": {
1298
+ "100": {
1299
+ "$value": "#FDE4F0"
1300
+ },
1301
+ "300": {
1302
+ "$value": "#F59ACA"
1303
+ },
1304
+ "500": {
1305
+ "$value": "#EB3E93"
1306
+ },
1307
+ "600": {
1308
+ "$value": "#D61F7A"
1309
+ },
1310
+ "700": {
1311
+ "$value": "#A8165F"
1312
+ },
1313
+ "800": {
1314
+ "$value": "#7C1046"
1315
+ }
1316
+ },
1317
+ "dark": {
1318
+ "100": {
1319
+ "$value": "#7C1046"
1320
+ },
1321
+ "300": {
1322
+ "$value": "#A8165F"
1323
+ },
1324
+ "500": {
1325
+ "$value": "#D61F7A"
1326
+ },
1327
+ "600": {
1328
+ "$value": "#EB3E93"
1329
+ },
1330
+ "700": {
1331
+ "$value": "#F59ACA"
1332
+ },
1333
+ "800": {
1334
+ "$value": "#FDE4F0"
1335
+ }
1336
+ }
1337
+ },
1338
+ "green": {
1339
+ "$type": "color",
1340
+ "$description": "The green hue: a light ramp, a dark ramp and its base value.",
1341
+ "light": {
1342
+ "100": {
1343
+ "$value": "#E3F4EA"
1344
+ },
1345
+ "300": {
1346
+ "$value": "#5CC283"
1347
+ },
1348
+ "700": {
1349
+ "$value": "#1F7A3A"
1350
+ },
1351
+ "900": {
1352
+ "$value": "#123322"
1353
+ }
1354
+ },
1355
+ "dark": {
1356
+ "100": {
1357
+ "$value": "#123322"
1358
+ },
1359
+ "300": {
1360
+ "$value": "#1F7A3A"
1361
+ },
1362
+ "700": {
1363
+ "$value": "#5CC283"
1364
+ },
1365
+ "900": {
1366
+ "$value": "#E3F4EA"
1367
+ }
1368
+ }
1369
+ },
1370
+ "amber": {
1371
+ "$type": "color",
1372
+ "$description": "The amber hue: a light ramp, a dark ramp and its base value.",
1373
+ "light": {
1374
+ "100": {
1375
+ "$value": "#FFF3D6"
1376
+ },
1377
+ "300": {
1378
+ "$value": "#F2B84B"
1379
+ },
1380
+ "700": {
1381
+ "$value": "#8A5600"
1382
+ },
1383
+ "900": {
1384
+ "$value": "#3A2A05"
1385
+ }
1386
+ },
1387
+ "dark": {
1388
+ "100": {
1389
+ "$value": "#3A2A05"
1390
+ },
1391
+ "300": {
1392
+ "$value": "#8A5600"
1393
+ },
1394
+ "700": {
1395
+ "$value": "#F2B84B"
1396
+ },
1397
+ "900": {
1398
+ "$value": "#FFF3D6"
1399
+ }
1400
+ }
1401
+ },
1402
+ "red": {
1403
+ "$type": "color",
1404
+ "$description": "The red hue: a light ramp, a dark ramp and its base value.",
1405
+ "light": {
1406
+ "100": {
1407
+ "$value": "#FDE7E7"
1408
+ },
1409
+ "300": {
1410
+ "$value": "#F28B8B"
1411
+ },
1412
+ "700": {
1413
+ "$value": "#C42B2B"
1414
+ },
1415
+ "900": {
1416
+ "$value": "#3D1414"
1417
+ }
1418
+ },
1419
+ "dark": {
1420
+ "100": {
1421
+ "$value": "#3D1414"
1422
+ },
1423
+ "300": {
1424
+ "$value": "#C42B2B"
1425
+ },
1426
+ "700": {
1427
+ "$value": "#F28B8B"
1428
+ },
1429
+ "900": {
1430
+ "$value": "#FDE7E7"
1431
+ }
1432
+ }
1433
+ },
1434
+ "black": {
1435
+ "$type": "color",
1436
+ "$description": "See-through black for scrims behind dialogs, light and dark.",
1437
+ "light": {
1438
+ "scrim": {
1439
+ "$value": "#0000008C"
1440
+ }
1441
+ },
1442
+ "dark": {
1443
+ "scrim": {
1444
+ "$value": "#000000B3"
1445
+ }
1446
+ }
1447
+ },
1448
+ "blue": {
1449
+ "$type": "color",
1450
+ "$description": "Blue ramp for the info status and categories. Same values as the accessible-first blue ramp: borrowed, not invented.",
1451
+ "light": {
1452
+ "100": {
1453
+ "$value": "#E1ECFF"
1454
+ },
1455
+ "300": {
1456
+ "$value": "#8AB4F8"
1457
+ },
1458
+ "500": {
1459
+ "$value": "#1A5DD0"
1460
+ },
1461
+ "600": {
1462
+ "$value": "#0B4FC0"
1463
+ },
1464
+ "700": {
1465
+ "$value": "#083C93"
1466
+ },
1467
+ "800": {
1468
+ "$value": "#062C6E"
1469
+ }
1470
+ },
1471
+ "dark": {
1472
+ "100": {
1473
+ "$value": "#062C6E"
1474
+ },
1475
+ "300": {
1476
+ "$value": "#083C93"
1477
+ },
1478
+ "500": {
1479
+ "$value": "#0B4FC0"
1480
+ },
1481
+ "600": {
1482
+ "$value": "#1A5DD0"
1483
+ },
1484
+ "700": {
1485
+ "$value": "#8AB4F8"
1486
+ },
1487
+ "800": {
1488
+ "$value": "#E1ECFF"
1489
+ }
1490
+ }
1491
+ }
1492
+ },
1493
+ "space": {
1494
+ "8": {
1495
+ "$type": "dimension",
1496
+ "$value": "0.5rem"
1497
+ },
1498
+ "16": {
1499
+ "$type": "dimension",
1500
+ "$value": "1rem"
1501
+ },
1502
+ "28": {
1503
+ "$type": "dimension",
1504
+ "$value": "1.75rem"
1505
+ },
1506
+ "32": {
1507
+ "$type": "dimension",
1508
+ "$value": "2rem"
1509
+ },
1510
+ "40": {
1511
+ "$type": "dimension",
1512
+ "$value": "2.5rem"
1513
+ },
1514
+ "96": {
1515
+ "$type": "dimension",
1516
+ "$value": "6rem"
1517
+ },
1518
+ "$description": "Space options. Names give the size in pixels at the default text size; values are rem."
1519
+ },
1520
+ "size": {
1521
+ "16": {
1522
+ "$type": "dimension",
1523
+ "$value": "1rem"
1524
+ },
1525
+ "20": {
1526
+ "$type": "dimension",
1527
+ "$value": "1.25rem"
1528
+ },
1529
+ "24": {
1530
+ "$type": "dimension",
1531
+ "$value": "1.5rem"
1532
+ },
1533
+ "44": {
1534
+ "$type": "dimension",
1535
+ "$value": "2.75rem"
1536
+ },
1537
+ "52": {
1538
+ "$type": "dimension",
1539
+ "$value": "3.25rem"
1540
+ },
1541
+ "$description": "Size options for controls, rows and icons."
1542
+ },
1543
+ "radius": {
1544
+ "0": {
1545
+ "$type": "dimension",
1546
+ "$value": "0rem"
1547
+ },
1548
+ "24": {
1549
+ "$type": "dimension",
1550
+ "$value": "1.5rem"
1551
+ },
1552
+ "999": {
1553
+ "$type": "dimension",
1554
+ "$value": "9999px"
1555
+ },
1556
+ "$description": "Corner options.",
1557
+ "full": {
1558
+ "$type": "dimension",
1559
+ "$value": "9999px",
1560
+ "$description": "Fully round."
1561
+ }
1562
+ },
1563
+ "border-width": {
1564
+ "2": {
1565
+ "$type": "dimension",
1566
+ "$value": "2px"
1567
+ },
1568
+ "3": {
1569
+ "$type": "dimension",
1570
+ "$value": "3px"
1571
+ },
1572
+ "$description": "Border width options."
1573
+ },
1574
+ "font": {
1575
+ "size": {
1576
+ "14": {
1577
+ "$type": "dimension",
1578
+ "$value": "0.875rem"
1579
+ },
1580
+ "15": {
1581
+ "$type": "dimension",
1582
+ "$value": "0.9375rem"
1583
+ },
1584
+ "17": {
1585
+ "$type": "dimension",
1586
+ "$value": "1.0625rem"
1587
+ },
1588
+ "28": {
1589
+ "$type": "dimension",
1590
+ "$value": "1.75rem"
1591
+ },
1592
+ "40": {
1593
+ "$type": "dimension",
1594
+ "$value": "2.5rem"
1595
+ },
1596
+ "56": {
1597
+ "$type": "dimension",
1598
+ "$value": "3.5rem"
1599
+ },
1600
+ "$description": "Type size options. Names are pixels at the default text size; values are rem, so text grows with the user's setting."
1601
+ },
1602
+ "weight": {
1603
+ "400": {
1604
+ "$type": "fontWeight",
1605
+ "$value": 400
1606
+ },
1607
+ "700": {
1608
+ "$type": "fontWeight",
1609
+ "$value": 700
1610
+ },
1611
+ "800": {
1612
+ "$type": "fontWeight",
1613
+ "$value": 800
1614
+ }
1615
+ },
1616
+ "line-height": {
1617
+ "1_05": {
1618
+ "$type": "number",
1619
+ "$value": 1.05,
1620
+ "$description": "A ratio of the text size."
1621
+ },
1622
+ "1_1": {
1623
+ "$type": "number",
1624
+ "$value": 1.1,
1625
+ "$description": "A ratio of the text size."
1626
+ },
1627
+ "1_2": {
1628
+ "$type": "number",
1629
+ "$value": 1.2,
1630
+ "$description": "A ratio of the text size."
1631
+ },
1632
+ "1_3": {
1633
+ "$type": "number",
1634
+ "$value": 1.3,
1635
+ "$description": "A ratio of the text size."
1636
+ },
1637
+ "1_4": {
1638
+ "$type": "number",
1639
+ "$value": 1.4,
1640
+ "$description": "A ratio of the text size."
1641
+ },
1642
+ "1_55": {
1643
+ "$type": "number",
1644
+ "$value": 1.55,
1645
+ "$description": "A ratio of the text size."
1646
+ }
1647
+ },
1648
+ "family": {
1649
+ "$description": "Font family options. Each brand's theme picks its display, body, interface and data fonts from these.",
1650
+ "bricolage-grotesque": {
1651
+ "$type": "fontFamily",
1652
+ "$value": "\"Bricolage Grotesque\", system-ui, sans-serif"
1653
+ },
1654
+ "dm-sans": {
1655
+ "$type": "fontFamily",
1656
+ "$value": "\"DM Sans\", system-ui, sans-serif"
1657
+ },
1658
+ "dm-mono": {
1659
+ "$type": "fontFamily",
1660
+ "$value": "\"DM Mono\", ui-monospace, monospace"
1661
+ }
1662
+ }
1663
+ },
1664
+ "duration": {
1665
+ "fast": {
1666
+ "$type": "duration",
1667
+ "$value": "120ms",
1668
+ "$description": "Fast: the usual convention for feedback, about 120ms."
1669
+ },
1670
+ "moderate": {
1671
+ "$type": "duration",
1672
+ "$value": "200ms",
1673
+ "$description": "Moderate: a calm, easy-to-follow speed, about 200ms."
1674
+ },
1675
+ "relaxed": {
1676
+ "$type": "duration",
1677
+ "$value": "320ms",
1678
+ "$description": "Relaxed: a slower, springy speed for expressive motion, about 320ms."
1679
+ }
1680
+ },
1681
+ "easing": {
1682
+ "standard": {
1683
+ "$type": "cubicBezier",
1684
+ "$value": [
1685
+ 0.34,
1686
+ 1.56,
1687
+ 0.64,
1688
+ 1
1689
+ ],
1690
+ "$description": "The easing for feedback transitions."
1691
+ }
1692
+ },
1693
+ "opacity": {
1694
+ "40": {
1695
+ "$type": "number",
1696
+ "$value": 0.4,
1697
+ "$description": "An opacity option."
1698
+ }
1699
+ },
1700
+ "shadow": {
1701
+ "$description": "Raw shadows. Elevation semantics point at these.",
1702
+ "card": {
1703
+ "$type": "shadow",
1704
+ "$value": {
1705
+ "color": "#1F141124",
1706
+ "offsetX": "0px",
1707
+ "offsetY": "12px",
1708
+ "blur": "32px",
1709
+ "spread": "0px"
1710
+ },
1711
+ "$description": "Raw shadow for card in light mode."
1712
+ },
1713
+ "overlay": {
1714
+ "$type": "shadow",
1715
+ "$value": {
1716
+ "color": "#1F141133",
1717
+ "offsetX": "0px",
1718
+ "offsetY": "24px",
1719
+ "blur": "48px",
1720
+ "spread": "0px"
1721
+ },
1722
+ "$description": "Raw shadow for overlay in light mode."
1723
+ },
1724
+ "card-dark": {
1725
+ "$type": "shadow",
1726
+ "$value": {
1727
+ "color": "#00000080",
1728
+ "offsetX": "0px",
1729
+ "offsetY": "12px",
1730
+ "blur": "32px",
1731
+ "spread": "0px"
1732
+ },
1733
+ "$description": "Raw shadow for card in dark mode."
1734
+ },
1735
+ "overlay-dark": {
1736
+ "$type": "shadow",
1737
+ "$value": {
1738
+ "color": "#00000099",
1739
+ "offsetX": "0px",
1740
+ "offsetY": "24px",
1741
+ "blur": "48px",
1742
+ "spread": "0px"
1743
+ },
1744
+ "$description": "Raw shadow for overlay in dark mode."
1745
+ }
1746
+ }
1747
+ },
1748
+ "brands": {
1749
+ "default": {
1750
+ "label": "Brand expressive",
1751
+ "description": "The single brand: vivid magenta, Bricolage Grotesque display, pill controls.",
1752
+ "theme": {
1753
+ "$description": "The Brand expressive theme: what each brand-dependent semantic key picks, in light and dark, plus mode-free picks (fonts, corners) in base. Info uses blue, kept apart from the brand colour so it never reads as an action. Categories 1 to 5 are pink, blue, green, amber, taupe: distinct hues for tags and chart series, with no meaning. Disabled uses the neutral taupe.",
1754
+ "base": {
1755
+ "radius": {
1756
+ "control": {
1757
+ "$type": "dimension",
1758
+ "$value": "{radius.999}"
1759
+ },
1760
+ "badge": {
1761
+ "$type": "dimension",
1762
+ "$value": "{radius.999}"
1763
+ },
1764
+ "container": {
1765
+ "$type": "dimension",
1766
+ "$value": "{radius.24}"
1767
+ }
1768
+ },
1769
+ "type": {
1770
+ "display": {
1771
+ "font-family": {
1772
+ "$type": "fontFamily",
1773
+ "$value": "{font.family.bricolage-grotesque}"
1774
+ }
1775
+ },
1776
+ "title": {
1777
+ "font-family": {
1778
+ "$type": "fontFamily",
1779
+ "$value": "{font.family.bricolage-grotesque}"
1780
+ }
1781
+ },
1782
+ "heading": {
1783
+ "font-family": {
1784
+ "$type": "fontFamily",
1785
+ "$value": "{font.family.bricolage-grotesque}"
1786
+ }
1787
+ },
1788
+ "body": {
1789
+ "font-family": {
1790
+ "$type": "fontFamily",
1791
+ "$value": "{font.family.dm-sans}"
1792
+ }
1793
+ },
1794
+ "label": {
1795
+ "font-family": {
1796
+ "$type": "fontFamily",
1797
+ "$value": "{font.family.dm-sans}"
1798
+ }
1799
+ },
1800
+ "caption": {
1801
+ "font-family": {
1802
+ "$type": "fontFamily",
1803
+ "$value": "{font.family.dm-sans}"
1804
+ }
1805
+ },
1806
+ "data": {
1807
+ "font-family": {
1808
+ "$type": "fontFamily",
1809
+ "$value": "{font.family.dm-sans}"
1810
+ }
1811
+ }
1812
+ }
1813
+ },
1814
+ "light": {
1815
+ "color": {
1816
+ "surface": {
1817
+ "canvas": {
1818
+ "$type": "color",
1819
+ "$value": "{color.taupe.light.50}"
1820
+ },
1821
+ "default": {
1822
+ "$type": "color",
1823
+ "$value": "{color.taupe.light.0}"
1824
+ },
1825
+ "raised": {
1826
+ "$type": "color",
1827
+ "$value": "{color.taupe.light.0}"
1828
+ },
1829
+ "sunken": {
1830
+ "$type": "color",
1831
+ "$value": "{color.taupe.light.100}"
1832
+ },
1833
+ "selected": {
1834
+ "$type": "color",
1835
+ "$value": "{color.pink.light.100}"
1836
+ },
1837
+ "inverse": {
1838
+ "$type": "color",
1839
+ "$value": "{color.taupe.light.900}"
1840
+ },
1841
+ "scrim": {
1842
+ "$type": "color",
1843
+ "$value": "{color.black.light.scrim}"
1844
+ }
1845
+ },
1846
+ "text": {
1847
+ "primary": {
1848
+ "$type": "color",
1849
+ "$value": "{color.taupe.light.900}"
1850
+ },
1851
+ "secondary": {
1852
+ "$type": "color",
1853
+ "$value": "{color.taupe.light.700}"
1854
+ },
1855
+ "muted": {
1856
+ "$type": "color",
1857
+ "$value": "{color.taupe.light.600}"
1858
+ },
1859
+ "inverse": {
1860
+ "$type": "color",
1861
+ "$value": "{color.taupe.light.0}"
1862
+ },
1863
+ "on-action": {
1864
+ "$type": "color",
1865
+ "$value": "{color.taupe.light.0}"
1866
+ },
1867
+ "link": {
1868
+ "$type": "color",
1869
+ "$value": "{color.pink.light.700}"
1870
+ }
1871
+ },
1872
+ "border": {
1873
+ "default": {
1874
+ "$type": "color",
1875
+ "$value": "{color.taupe.light.200}"
1876
+ },
1877
+ "strong": {
1878
+ "$type": "color",
1879
+ "$value": "{color.taupe.light.500}"
1880
+ },
1881
+ "focus": {
1882
+ "$type": "color",
1883
+ "$value": "{color.pink.light.600}"
1884
+ }
1885
+ },
1886
+ "action": {
1887
+ "primary": {
1888
+ "@": {
1889
+ "$type": "color",
1890
+ "$value": "{color.pink.light.600}"
1891
+ },
1892
+ "hover": {
1893
+ "$type": "color",
1894
+ "$value": "{color.pink.light.700}"
1895
+ }
1896
+ },
1897
+ "secondary": {
1898
+ "@": {
1899
+ "$type": "color",
1900
+ "$value": "{color.taupe.light.0}"
1901
+ },
1902
+ "hover": {
1903
+ "$type": "color",
1904
+ "$value": "{color.taupe.light.100}"
1905
+ }
1906
+ }
1907
+ },
1908
+ "status": {
1909
+ "info": {
1910
+ "@": {
1911
+ "$type": "color",
1912
+ "$value": "{color.blue.light.700}"
1913
+ },
1914
+ "subtle": {
1915
+ "$type": "color",
1916
+ "$value": "{color.blue.light.100}"
1917
+ }
1918
+ },
1919
+ "success": {
1920
+ "@": {
1921
+ "$type": "color",
1922
+ "$value": "{color.green.light.700}"
1923
+ },
1924
+ "subtle": {
1925
+ "$type": "color",
1926
+ "$value": "{color.green.light.100}"
1927
+ }
1928
+ },
1929
+ "warning": {
1930
+ "@": {
1931
+ "$type": "color",
1932
+ "$value": "{color.amber.light.700}"
1933
+ },
1934
+ "subtle": {
1935
+ "$type": "color",
1936
+ "$value": "{color.amber.light.100}"
1937
+ }
1938
+ },
1939
+ "danger": {
1940
+ "@": {
1941
+ "$type": "color",
1942
+ "$value": "{color.red.light.700}"
1943
+ },
1944
+ "subtle": {
1945
+ "$type": "color",
1946
+ "$value": "{color.red.light.100}"
1947
+ }
1948
+ }
1949
+ },
1950
+ "category": {
1951
+ "1": {
1952
+ "@": {
1953
+ "$type": "color",
1954
+ "$value": "{color.pink.light.600}"
1955
+ },
1956
+ "subtle": {
1957
+ "$type": "color",
1958
+ "$value": "{color.pink.light.100}"
1959
+ }
1960
+ },
1961
+ "2": {
1962
+ "@": {
1963
+ "$type": "color",
1964
+ "$value": "{color.blue.light.600}"
1965
+ },
1966
+ "subtle": {
1967
+ "$type": "color",
1968
+ "$value": "{color.blue.light.100}"
1969
+ }
1970
+ },
1971
+ "3": {
1972
+ "@": {
1973
+ "$type": "color",
1974
+ "$value": "{color.green.light.700}"
1975
+ },
1976
+ "subtle": {
1977
+ "$type": "color",
1978
+ "$value": "{color.green.light.100}"
1979
+ }
1980
+ },
1981
+ "4": {
1982
+ "@": {
1983
+ "$type": "color",
1984
+ "$value": "{color.amber.light.700}"
1985
+ },
1986
+ "subtle": {
1987
+ "$type": "color",
1988
+ "$value": "{color.amber.light.100}"
1989
+ }
1990
+ },
1991
+ "5": {
1992
+ "@": {
1993
+ "$type": "color",
1994
+ "$value": "{color.taupe.light.500}"
1995
+ },
1996
+ "subtle": {
1997
+ "$type": "color",
1998
+ "$value": "{color.taupe.light.100}"
1999
+ }
2000
+ }
2001
+ },
2002
+ "disabled": {
2003
+ "text": {
2004
+ "$type": "color",
2005
+ "$value": "{color.taupe.light.500}"
2006
+ },
2007
+ "surface": {
2008
+ "$type": "color",
2009
+ "$value": "{color.taupe.light.100}"
2010
+ },
2011
+ "border": {
2012
+ "$type": "color",
2013
+ "$value": "{color.taupe.light.200}"
2014
+ }
2015
+ }
2016
+ },
2017
+ "elevation": {
2018
+ "card": {
2019
+ "$type": "shadow",
2020
+ "$value": "{shadow.card}"
2021
+ },
2022
+ "overlay": {
2023
+ "$type": "shadow",
2024
+ "$value": "{shadow.overlay}"
2025
+ }
2026
+ }
2027
+ },
2028
+ "dark": {
2029
+ "color": {
2030
+ "surface": {
2031
+ "canvas": {
2032
+ "$type": "color",
2033
+ "$value": "{color.taupe.dark.0}"
2034
+ },
2035
+ "default": {
2036
+ "$type": "color",
2037
+ "$value": "{color.taupe.dark.50}"
2038
+ },
2039
+ "raised": {
2040
+ "$type": "color",
2041
+ "$value": "{color.taupe.dark.100}"
2042
+ },
2043
+ "sunken": {
2044
+ "$type": "color",
2045
+ "$value": "{color.taupe.dark.100}"
2046
+ },
2047
+ "selected": {
2048
+ "$type": "color",
2049
+ "$value": "{color.pink.dark.100}"
2050
+ },
2051
+ "inverse": {
2052
+ "$type": "color",
2053
+ "$value": "{color.taupe.dark.900}"
2054
+ },
2055
+ "scrim": {
2056
+ "$type": "color",
2057
+ "$value": "{color.black.dark.scrim}"
2058
+ }
2059
+ },
2060
+ "text": {
2061
+ "primary": {
2062
+ "$type": "color",
2063
+ "$value": "{color.taupe.dark.900}"
2064
+ },
2065
+ "secondary": {
2066
+ "$type": "color",
2067
+ "$value": "{color.taupe.dark.500}"
2068
+ },
2069
+ "muted": {
2070
+ "$type": "color",
2071
+ "$value": "{color.taupe.dark.400}"
2072
+ },
2073
+ "inverse": {
2074
+ "$type": "color",
2075
+ "$value": "{color.taupe.dark.50}"
2076
+ },
2077
+ "on-action": {
2078
+ "$type": "color",
2079
+ "$value": "{color.taupe.dark.0}"
2080
+ },
2081
+ "link": {
2082
+ "$type": "color",
2083
+ "$value": "{color.pink.dark.700}"
2084
+ }
2085
+ },
2086
+ "border": {
2087
+ "default": {
2088
+ "$type": "color",
2089
+ "$value": "{color.taupe.dark.100}"
2090
+ },
2091
+ "strong": {
2092
+ "$type": "color",
2093
+ "$value": "{color.taupe.dark.300}"
2094
+ },
2095
+ "focus": {
2096
+ "$type": "color",
2097
+ "$value": "{color.pink.dark.700}"
2098
+ }
2099
+ },
2100
+ "action": {
2101
+ "primary": {
2102
+ "@": {
2103
+ "$type": "color",
2104
+ "$value": "{color.pink.dark.700}"
2105
+ },
2106
+ "hover": {
2107
+ "$type": "color",
2108
+ "$value": "{color.pink.dark.800}"
2109
+ }
2110
+ },
2111
+ "secondary": {
2112
+ "@": {
2113
+ "$type": "color",
2114
+ "$value": "{color.taupe.dark.50}"
2115
+ },
2116
+ "hover": {
2117
+ "$type": "color",
2118
+ "$value": "{color.taupe.dark.100}"
2119
+ }
2120
+ }
2121
+ },
2122
+ "status": {
2123
+ "info": {
2124
+ "@": {
2125
+ "$type": "color",
2126
+ "$value": "{color.blue.dark.700}"
2127
+ },
2128
+ "subtle": {
2129
+ "$type": "color",
2130
+ "$value": "{color.blue.dark.100}"
2131
+ }
2132
+ },
2133
+ "success": {
2134
+ "@": {
2135
+ "$type": "color",
2136
+ "$value": "{color.green.dark.700}"
2137
+ },
2138
+ "subtle": {
2139
+ "$type": "color",
2140
+ "$value": "{color.green.dark.100}"
2141
+ }
2142
+ },
2143
+ "warning": {
2144
+ "@": {
2145
+ "$type": "color",
2146
+ "$value": "{color.amber.dark.700}"
2147
+ },
2148
+ "subtle": {
2149
+ "$type": "color",
2150
+ "$value": "{color.amber.dark.100}"
2151
+ }
2152
+ },
2153
+ "danger": {
2154
+ "@": {
2155
+ "$type": "color",
2156
+ "$value": "{color.red.dark.700}"
2157
+ },
2158
+ "subtle": {
2159
+ "$type": "color",
2160
+ "$value": "{color.red.dark.100}"
2161
+ }
2162
+ }
2163
+ },
2164
+ "category": {
2165
+ "1": {
2166
+ "@": {
2167
+ "$type": "color",
2168
+ "$value": "{color.pink.dark.700}"
2169
+ },
2170
+ "subtle": {
2171
+ "$type": "color",
2172
+ "$value": "{color.pink.dark.100}"
2173
+ }
2174
+ },
2175
+ "2": {
2176
+ "@": {
2177
+ "$type": "color",
2178
+ "$value": "{color.blue.dark.700}"
2179
+ },
2180
+ "subtle": {
2181
+ "$type": "color",
2182
+ "$value": "{color.blue.dark.100}"
2183
+ }
2184
+ },
2185
+ "3": {
2186
+ "@": {
2187
+ "$type": "color",
2188
+ "$value": "{color.green.dark.700}"
2189
+ },
2190
+ "subtle": {
2191
+ "$type": "color",
2192
+ "$value": "{color.green.dark.100}"
2193
+ }
2194
+ },
2195
+ "4": {
2196
+ "@": {
2197
+ "$type": "color",
2198
+ "$value": "{color.amber.dark.700}"
2199
+ },
2200
+ "subtle": {
2201
+ "$type": "color",
2202
+ "$value": "{color.amber.dark.100}"
2203
+ }
2204
+ },
2205
+ "5": {
2206
+ "@": {
2207
+ "$type": "color",
2208
+ "$value": "{color.taupe.dark.700}"
2209
+ },
2210
+ "subtle": {
2211
+ "$type": "color",
2212
+ "$value": "{color.taupe.dark.100}"
2213
+ }
2214
+ }
2215
+ },
2216
+ "disabled": {
2217
+ "text": {
2218
+ "$type": "color",
2219
+ "$value": "{color.taupe.dark.500}"
2220
+ },
2221
+ "surface": {
2222
+ "$type": "color",
2223
+ "$value": "{color.taupe.dark.100}"
2224
+ },
2225
+ "border": {
2226
+ "$type": "color",
2227
+ "$value": "{color.taupe.dark.200}"
2228
+ }
2229
+ }
2230
+ },
2231
+ "elevation": {
2232
+ "card": {
2233
+ "$type": "shadow",
2234
+ "$value": "{shadow.card-dark}"
2235
+ },
2236
+ "overlay": {
2237
+ "$type": "shadow",
2238
+ "$value": "{shadow.overlay-dark}"
2239
+ }
2240
+ }
2241
+ }
2242
+ }
2243
+ }
2244
+ },
2245
+ "semantic": {
2246
+ "space": {
2247
+ "gap": {
2248
+ "tight": {
2249
+ "$type": "dimension",
2250
+ "$value": "{space.8}",
2251
+ "$description": "Between things that belong together."
2252
+ },
2253
+ "default": {
2254
+ "$type": "dimension",
2255
+ "$value": "{space.16}",
2256
+ "$description": "Between items in one group."
2257
+ },
2258
+ "group": {
2259
+ "$type": "dimension",
2260
+ "$value": "{space.40}",
2261
+ "$description": "Between groups."
2262
+ },
2263
+ "section": {
2264
+ "$type": "dimension",
2265
+ "$value": "{space.96}",
2266
+ "$description": "Between page sections."
2267
+ }
2268
+ },
2269
+ "inset": {
2270
+ "control-x": {
2271
+ "$type": "dimension",
2272
+ "$value": "{space.28}",
2273
+ "$description": "Horizontal padding inside controls."
2274
+ },
2275
+ "container": {
2276
+ "$type": "dimension",
2277
+ "$value": "{space.32}",
2278
+ "$description": "Padding inside cards and dialogs."
2279
+ },
2280
+ "cell-x": {
2281
+ "$type": "dimension",
2282
+ "$value": "{space.16}",
2283
+ "$description": "Horizontal padding inside table cells."
2284
+ }
2285
+ }
2286
+ },
2287
+ "size": {
2288
+ "control": {
2289
+ "default": {
2290
+ "$type": "dimension",
2291
+ "$value": "{size.52}",
2292
+ "$description": "Height of buttons and inputs, and the smallest target."
2293
+ },
2294
+ "compact": {
2295
+ "$type": "dimension",
2296
+ "$value": "{size.44}",
2297
+ "$description": "Height of compact controls."
2298
+ }
2299
+ },
2300
+ "row": {
2301
+ "$type": "dimension",
2302
+ "$value": "{size.52}",
2303
+ "$description": "Height of one table row."
2304
+ },
2305
+ "icon": {
2306
+ "$type": "dimension",
2307
+ "$value": "{size.20}",
2308
+ "$description": "Icon size next to text."
2309
+ }
2310
+ },
2311
+ "radius": {
2312
+ "control": {
2313
+ "$type": "dimension",
2314
+ "$value": "{theme.radius.control}",
2315
+ "$description": "Corner of buttons and inputs."
2316
+ },
2317
+ "badge": {
2318
+ "$type": "dimension",
2319
+ "$value": "{theme.radius.badge}",
2320
+ "$description": "Corner of badges and checkboxes."
2321
+ },
2322
+ "container": {
2323
+ "$type": "dimension",
2324
+ "$value": "{theme.radius.container}",
2325
+ "$description": "Corner of cards, menus and dialogs."
2326
+ },
2327
+ "round": {
2328
+ "$type": "dimension",
2329
+ "$value": "{radius.full}",
2330
+ "$description": "Fully round: avatars and dots."
2331
+ }
2332
+ },
2333
+ "border-width": {
2334
+ "default": {
2335
+ "$type": "dimension",
2336
+ "$value": "{border-width.2}",
2337
+ "$description": "Every border."
2338
+ },
2339
+ "focus": {
2340
+ "$type": "dimension",
2341
+ "$value": "{border-width.3}",
2342
+ "$description": "The focus ring."
2343
+ }
2344
+ },
2345
+ "type": {
2346
+ "display": {
2347
+ "font-family": {
2348
+ "$type": "fontFamily",
2349
+ "$value": "{theme.type.display.font-family}"
2350
+ },
2351
+ "font-size": {
2352
+ "$type": "dimension",
2353
+ "$value": "{font.size.56}"
2354
+ },
2355
+ "line-height": {
2356
+ "$type": "number",
2357
+ "$value": "{font.line-height.1_05}"
2358
+ },
2359
+ "font-weight": {
2360
+ "$type": "fontWeight",
2361
+ "$value": "{font.weight.800}"
2362
+ },
2363
+ "$description": "The display text role."
2364
+ },
2365
+ "title": {
2366
+ "font-family": {
2367
+ "$type": "fontFamily",
2368
+ "$value": "{theme.type.title.font-family}"
2369
+ },
2370
+ "font-size": {
2371
+ "$type": "dimension",
2372
+ "$value": "{font.size.40}"
2373
+ },
2374
+ "line-height": {
2375
+ "$type": "number",
2376
+ "$value": "{font.line-height.1_1}"
2377
+ },
2378
+ "font-weight": {
2379
+ "$type": "fontWeight",
2380
+ "$value": "{font.weight.800}"
2381
+ },
2382
+ "$description": "The title text role."
2383
+ },
2384
+ "heading": {
2385
+ "font-family": {
2386
+ "$type": "fontFamily",
2387
+ "$value": "{theme.type.heading.font-family}"
2388
+ },
2389
+ "font-size": {
2390
+ "$type": "dimension",
2391
+ "$value": "{font.size.28}"
2392
+ },
2393
+ "line-height": {
2394
+ "$type": "number",
2395
+ "$value": "{font.line-height.1_2}"
2396
+ },
2397
+ "font-weight": {
2398
+ "$type": "fontWeight",
2399
+ "$value": "{font.weight.700}"
2400
+ },
2401
+ "$description": "The heading text role."
2402
+ },
2403
+ "body": {
2404
+ "font-family": {
2405
+ "$type": "fontFamily",
2406
+ "$value": "{theme.type.body.font-family}"
2407
+ },
2408
+ "font-size": {
2409
+ "$type": "dimension",
2410
+ "$value": "{font.size.17}"
2411
+ },
2412
+ "line-height": {
2413
+ "$type": "number",
2414
+ "$value": "{font.line-height.1_55}"
2415
+ },
2416
+ "font-weight": {
2417
+ "$type": "fontWeight",
2418
+ "$value": "{font.weight.400}"
2419
+ },
2420
+ "$description": "The body text role."
2421
+ },
2422
+ "label": {
2423
+ "font-family": {
2424
+ "$type": "fontFamily",
2425
+ "$value": "{theme.type.label.font-family}"
2426
+ },
2427
+ "font-size": {
2428
+ "$type": "dimension",
2429
+ "$value": "{font.size.15}"
2430
+ },
2431
+ "line-height": {
2432
+ "$type": "number",
2433
+ "$value": "{font.line-height.1_3}"
2434
+ },
2435
+ "font-weight": {
2436
+ "$type": "fontWeight",
2437
+ "$value": "{font.weight.700}"
2438
+ },
2439
+ "$description": "The label text role."
2440
+ },
2441
+ "caption": {
2442
+ "font-family": {
2443
+ "$type": "fontFamily",
2444
+ "$value": "{theme.type.caption.font-family}"
2445
+ },
2446
+ "font-size": {
2447
+ "$type": "dimension",
2448
+ "$value": "{font.size.14}"
2449
+ },
2450
+ "line-height": {
2451
+ "$type": "number",
2452
+ "$value": "{font.line-height.1_4}"
2453
+ },
2454
+ "font-weight": {
2455
+ "$type": "fontWeight",
2456
+ "$value": "{font.weight.400}"
2457
+ },
2458
+ "$description": "The caption text role."
2459
+ },
2460
+ "data": {
2461
+ "font-family": {
2462
+ "$type": "fontFamily",
2463
+ "$value": "{theme.type.data.font-family}"
2464
+ },
2465
+ "font-size": {
2466
+ "$type": "dimension",
2467
+ "$value": "{font.size.17}"
2468
+ },
2469
+ "line-height": {
2470
+ "$type": "number",
2471
+ "$value": "{font.line-height.1_55}"
2472
+ },
2473
+ "font-weight": {
2474
+ "$type": "fontWeight",
2475
+ "$value": "{font.weight.400}"
2476
+ },
2477
+ "$description": "The data text role."
2478
+ }
2479
+ },
2480
+ "motion": {
2481
+ "duration": {
2482
+ "feedback": {
2483
+ "$type": "duration",
2484
+ "$value": "{duration.relaxed}",
2485
+ "$description": "Feedback speed: relaxed."
2486
+ }
2487
+ },
2488
+ "easing": {
2489
+ "standard": {
2490
+ "$type": "cubicBezier",
2491
+ "$value": "{easing.standard}",
2492
+ "$description": "Feedback easing."
2493
+ }
2494
+ }
2495
+ },
2496
+ "opacity": {
2497
+ "disabled": {
2498
+ "$type": "number",
2499
+ "$value": "{opacity.40}",
2500
+ "$description": "Disabled controls."
2501
+ }
2502
+ },
2503
+ "color": {
2504
+ "surface": {
2505
+ "canvas": {
2506
+ "$type": "color",
2507
+ "$description": "The page background.",
2508
+ "$value": "{theme.color.surface.canvas}"
2509
+ },
2510
+ "default": {
2511
+ "$type": "color",
2512
+ "$description": "Cards, inputs and tables.",
2513
+ "$value": "{theme.color.surface.default}"
2514
+ },
2515
+ "raised": {
2516
+ "$type": "color",
2517
+ "$description": "Menus, dialogs, toasts.",
2518
+ "$value": "{theme.color.surface.raised}"
2519
+ },
2520
+ "sunken": {
2521
+ "$type": "color",
2522
+ "$description": "Table headers and wells.",
2523
+ "$value": "{theme.color.surface.sunken}"
2524
+ },
2525
+ "selected": {
2526
+ "$type": "color",
2527
+ "$description": "A selected row or item.",
2528
+ "$value": "{theme.color.surface.selected}"
2529
+ },
2530
+ "inverse": {
2531
+ "$type": "color",
2532
+ "$description": "Tooltips.",
2533
+ "$value": "{theme.color.surface.inverse}"
2534
+ },
2535
+ "scrim": {
2536
+ "$type": "color",
2537
+ "$description": "Dims the page behind a dialog.",
2538
+ "$value": "{theme.color.surface.scrim}"
2539
+ }
2540
+ },
2541
+ "text": {
2542
+ "primary": {
2543
+ "$type": "color",
2544
+ "$description": "Main text.",
2545
+ "$value": "{theme.color.text.primary}"
2546
+ },
2547
+ "secondary": {
2548
+ "$type": "color",
2549
+ "$description": "Supporting text; passes AA.",
2550
+ "$value": "{theme.color.text.secondary}"
2551
+ },
2552
+ "muted": {
2553
+ "$type": "color",
2554
+ "$description": "Hints and placeholders.",
2555
+ "$value": "{theme.color.text.muted}"
2556
+ },
2557
+ "inverse": {
2558
+ "$type": "color",
2559
+ "$description": "Text on inverse surfaces.",
2560
+ "$value": "{theme.color.text.inverse}"
2561
+ },
2562
+ "on-action": {
2563
+ "$type": "color",
2564
+ "$description": "Text on the primary action.",
2565
+ "$value": "{theme.color.text.on-action}"
2566
+ },
2567
+ "link": {
2568
+ "$type": "color",
2569
+ "$description": "Links.",
2570
+ "$value": "{theme.color.text.link}"
2571
+ }
2572
+ },
2573
+ "border": {
2574
+ "default": {
2575
+ "$type": "color",
2576
+ "$description": "Row lines and card borders.",
2577
+ "$value": "{theme.color.border.default}"
2578
+ },
2579
+ "strong": {
2580
+ "$type": "color",
2581
+ "$description": "Input and secondary button borders.",
2582
+ "$value": "{theme.color.border.strong}"
2583
+ },
2584
+ "focus": {
2585
+ "$type": "color",
2586
+ "$description": "The keyboard focus ring.",
2587
+ "$value": "{theme.color.border.focus}"
2588
+ }
2589
+ },
2590
+ "action": {
2591
+ "primary": {
2592
+ "@": {
2593
+ "$type": "color",
2594
+ "$description": "The primary action.",
2595
+ "$value": "{theme.color.action.primary.@}"
2596
+ },
2597
+ "hover": {
2598
+ "$type": "color",
2599
+ "$description": "Primary action on hover.",
2600
+ "$value": "{theme.color.action.primary.hover}"
2601
+ }
2602
+ },
2603
+ "secondary": {
2604
+ "@": {
2605
+ "$type": "color",
2606
+ "$description": "Secondary action fill.",
2607
+ "$value": "{theme.color.action.secondary.@}"
2608
+ },
2609
+ "hover": {
2610
+ "$type": "color",
2611
+ "$description": "Secondary action on hover.",
2612
+ "$value": "{theme.color.action.secondary.hover}"
2613
+ }
2614
+ }
2615
+ },
2616
+ "status": {
2617
+ "info": {
2618
+ "@": {
2619
+ "$type": "color",
2620
+ "$description": "Info text and icons: neutral news, no action needed.",
2621
+ "$value": "{theme.color.status.info.@}"
2622
+ },
2623
+ "subtle": {
2624
+ "$type": "color",
2625
+ "$description": "Info badge and banner fill.",
2626
+ "$value": "{theme.color.status.info.subtle}"
2627
+ }
2628
+ },
2629
+ "success": {
2630
+ "@": {
2631
+ "$type": "color",
2632
+ "$description": "Success text and icons.",
2633
+ "$value": "{theme.color.status.success.@}"
2634
+ },
2635
+ "subtle": {
2636
+ "$type": "color",
2637
+ "$description": "Success badge fill.",
2638
+ "$value": "{theme.color.status.success.subtle}"
2639
+ }
2640
+ },
2641
+ "warning": {
2642
+ "@": {
2643
+ "$type": "color",
2644
+ "$description": "Warning text and icons.",
2645
+ "$value": "{theme.color.status.warning.@}"
2646
+ },
2647
+ "subtle": {
2648
+ "$type": "color",
2649
+ "$description": "Warning badge fill.",
2650
+ "$value": "{theme.color.status.warning.subtle}"
2651
+ }
2652
+ },
2653
+ "danger": {
2654
+ "@": {
2655
+ "$type": "color",
2656
+ "$description": "Danger text and icons.",
2657
+ "$value": "{theme.color.status.danger.@}"
2658
+ },
2659
+ "subtle": {
2660
+ "$type": "color",
2661
+ "$description": "Danger badge fill.",
2662
+ "$value": "{theme.color.status.danger.subtle}"
2663
+ }
2664
+ }
2665
+ },
2666
+ "category": {
2667
+ "$description": "Identity colours for tags, labels and chart series. They tell items apart and carry no meaning.",
2668
+ "1": {
2669
+ "@": {
2670
+ "$type": "color",
2671
+ "$description": "Category 1: chart series, tag dots and icons. Tag text uses color.text.primary.",
2672
+ "$value": "{theme.color.category.1.@}"
2673
+ },
2674
+ "subtle": {
2675
+ "$type": "color",
2676
+ "$description": "Category 1: tag fill.",
2677
+ "$value": "{theme.color.category.1.subtle}"
2678
+ }
2679
+ },
2680
+ "2": {
2681
+ "@": {
2682
+ "$type": "color",
2683
+ "$description": "Category 2: chart series, tag dots and icons. Tag text uses color.text.primary.",
2684
+ "$value": "{theme.color.category.2.@}"
2685
+ },
2686
+ "subtle": {
2687
+ "$type": "color",
2688
+ "$description": "Category 2: tag fill.",
2689
+ "$value": "{theme.color.category.2.subtle}"
2690
+ }
2691
+ },
2692
+ "3": {
2693
+ "@": {
2694
+ "$type": "color",
2695
+ "$description": "Category 3: chart series, tag dots and icons. Tag text uses color.text.primary.",
2696
+ "$value": "{theme.color.category.3.@}"
2697
+ },
2698
+ "subtle": {
2699
+ "$type": "color",
2700
+ "$description": "Category 3: tag fill.",
2701
+ "$value": "{theme.color.category.3.subtle}"
2702
+ }
2703
+ },
2704
+ "4": {
2705
+ "@": {
2706
+ "$type": "color",
2707
+ "$description": "Category 4: chart series, tag dots and icons. Tag text uses color.text.primary.",
2708
+ "$value": "{theme.color.category.4.@}"
2709
+ },
2710
+ "subtle": {
2711
+ "$type": "color",
2712
+ "$description": "Category 4: tag fill.",
2713
+ "$value": "{theme.color.category.4.subtle}"
2714
+ }
2715
+ },
2716
+ "5": {
2717
+ "@": {
2718
+ "$type": "color",
2719
+ "$description": "Category 5: chart series, tag dots and icons. Tag text uses color.text.primary.",
2720
+ "$value": "{theme.color.category.5.@}"
2721
+ },
2722
+ "subtle": {
2723
+ "$type": "color",
2724
+ "$description": "Category 5: tag fill.",
2725
+ "$value": "{theme.color.category.5.subtle}"
2726
+ }
2727
+ }
2728
+ },
2729
+ "disabled": {
2730
+ "$description": "The shared look of controls that cannot be used right now.",
2731
+ "text": {
2732
+ "$type": "color",
2733
+ "$description": "Text and icons of a disabled control.",
2734
+ "$value": "{theme.color.disabled.text}"
2735
+ },
2736
+ "surface": {
2737
+ "$type": "color",
2738
+ "$description": "Fill of a disabled control.",
2739
+ "$value": "{theme.color.disabled.surface}"
2740
+ },
2741
+ "border": {
2742
+ "$type": "color",
2743
+ "$description": "Border of a disabled control.",
2744
+ "$value": "{theme.color.disabled.border}"
2745
+ }
2746
+ }
2747
+ },
2748
+ "elevation": {
2749
+ "card": {
2750
+ "$type": "shadow",
2751
+ "$value": "{theme.elevation.card}"
2752
+ },
2753
+ "overlay": {
2754
+ "$type": "shadow",
2755
+ "$value": "{theme.elevation.overlay}"
2756
+ }
2757
+ }
2758
+ },
2759
+ "component": {
2760
+ "button": {
2761
+ "primary": {
2762
+ "background": {
2763
+ "@": {
2764
+ "$value": "{color.action.primary.@}",
2765
+ "$description": "Primary button fill."
2766
+ },
2767
+ "hover": {
2768
+ "$value": "{color.action.primary.hover}",
2769
+ "$description": "Primary button fill on hover."
2770
+ }
2771
+ },
2772
+ "label": {
2773
+ "$value": "{color.text.on-action}",
2774
+ "$description": "Primary button label color."
2775
+ }
2776
+ },
2777
+ "secondary": {
2778
+ "background": {
2779
+ "@": {
2780
+ "$value": "{color.action.secondary.@}",
2781
+ "$description": "Secondary button fill."
2782
+ },
2783
+ "hover": {
2784
+ "$value": "{color.action.secondary.hover}",
2785
+ "$description": "Secondary button fill on hover."
2786
+ }
2787
+ },
2788
+ "label": {
2789
+ "$value": "{color.text.primary}",
2790
+ "$description": "Secondary button label color."
2791
+ },
2792
+ "border": {
2793
+ "$value": "{color.border.strong}",
2794
+ "$description": "Secondary button border."
2795
+ }
2796
+ },
2797
+ "ghost": {
2798
+ "background-hover": {
2799
+ "$value": "{color.surface.sunken}",
2800
+ "$description": "Ghost button fill on hover."
2801
+ },
2802
+ "label": {
2803
+ "$value": "{color.text.link}",
2804
+ "$description": "Ghost button label color."
2805
+ }
2806
+ },
2807
+ "height": {
2808
+ "$value": "{size.control.default}",
2809
+ "$description": "Button height."
2810
+ },
2811
+ "padding-x": {
2812
+ "$value": "{space.inset.control-x}",
2813
+ "$description": "Horizontal padding inside a button."
2814
+ },
2815
+ "radius": {
2816
+ "$value": "{radius.control}",
2817
+ "$description": "Button corner radius."
2818
+ },
2819
+ "font-size": {
2820
+ "$value": "{type.label.font-size}",
2821
+ "$description": "Button label size."
2822
+ },
2823
+ "font-weight": {
2824
+ "$value": "{type.label.font-weight}",
2825
+ "$description": "Button label weight."
2826
+ },
2827
+ "focus-ring": {
2828
+ "$value": "{color.border.focus}",
2829
+ "$description": "Focus ring color on any button."
2830
+ },
2831
+ "icon-size": {
2832
+ "$value": "{size.icon}",
2833
+ "$description": "Size of an icon inside a button."
2834
+ },
2835
+ "disabled": {
2836
+ "background": {
2837
+ "$value": "{color.disabled.surface}",
2838
+ "$description": "Fill of a disabled button."
2839
+ },
2840
+ "label": {
2841
+ "$value": "{color.disabled.text}",
2842
+ "$description": "Label of a disabled button."
2843
+ },
2844
+ "border": {
2845
+ "$value": "{color.disabled.border}",
2846
+ "$description": "Border of a disabled secondary button."
2847
+ }
2848
+ }
2849
+ },
2850
+ "input": {
2851
+ "background": {
2852
+ "$value": "{color.surface.default}",
2853
+ "$description": "Input fill."
2854
+ },
2855
+ "border": {
2856
+ "@": {
2857
+ "$value": "{color.border.strong}",
2858
+ "$description": "Input border at rest."
2859
+ },
2860
+ "focus": {
2861
+ "$value": "{color.border.focus}",
2862
+ "$description": "Input border when focused."
2863
+ }
2864
+ },
2865
+ "text": {
2866
+ "$value": "{color.text.primary}",
2867
+ "$description": "Typed text color."
2868
+ },
2869
+ "placeholder": {
2870
+ "$value": "{color.text.muted}",
2871
+ "$description": "Placeholder text color."
2872
+ },
2873
+ "height": {
2874
+ "$value": "{size.control.default}",
2875
+ "$description": "Input height."
2876
+ },
2877
+ "padding-x": {
2878
+ "$value": "{space.inset.control-x}",
2879
+ "$description": "Horizontal padding inside an input."
2880
+ },
2881
+ "radius": {
2882
+ "$value": "{radius.control}",
2883
+ "$description": "Input corner radius."
2884
+ },
2885
+ "font-size": {
2886
+ "$value": "{type.body.font-size}",
2887
+ "$description": "Typed text size."
2888
+ },
2889
+ "disabled": {
2890
+ "background": {
2891
+ "$value": "{color.disabled.surface}",
2892
+ "$description": "Fill of a disabled input."
2893
+ },
2894
+ "border": {
2895
+ "$value": "{color.disabled.border}",
2896
+ "$description": "Border of a disabled input."
2897
+ },
2898
+ "text": {
2899
+ "$value": "{color.disabled.text}",
2900
+ "$description": "Text in a disabled input."
2901
+ }
2902
+ }
2903
+ },
2904
+ "control": {
2905
+ "checked": {
2906
+ "$value": "{color.action.primary.@}",
2907
+ "$description": "Fill of a checked checkbox or an on switch."
2908
+ },
2909
+ "track": {
2910
+ "$value": "{color.border.strong}",
2911
+ "$description": "Track of an off switch."
2912
+ },
2913
+ "thumb": {
2914
+ "$value": "{color.surface.default}",
2915
+ "$description": "Switch thumb and checkmark color."
2916
+ },
2917
+ "radius": {
2918
+ "$value": "{radius.badge}",
2919
+ "$description": "Checkbox corner radius."
2920
+ }
2921
+ },
2922
+ "badge": {
2923
+ "radius": {
2924
+ "$value": "{radius.badge}",
2925
+ "$description": "Badge corner radius."
2926
+ },
2927
+ "padding-x": {
2928
+ "$value": "{space.gap.tight}",
2929
+ "$description": "Horizontal padding inside a badge."
2930
+ },
2931
+ "font-size": {
2932
+ "$value": "{type.caption.font-size}",
2933
+ "$description": "Badge label size."
2934
+ },
2935
+ "neutral": {
2936
+ "background": {
2937
+ "$value": "{color.surface.sunken}",
2938
+ "$description": "Neutral badge fill."
2939
+ },
2940
+ "label": {
2941
+ "$value": "{color.text.secondary}",
2942
+ "$description": "Neutral badge label."
2943
+ }
2944
+ },
2945
+ "success": {
2946
+ "background": {
2947
+ "$value": "{color.status.success.subtle}",
2948
+ "$description": "Success badge fill."
2949
+ },
2950
+ "label": {
2951
+ "$value": "{color.status.success.@}",
2952
+ "$description": "Success badge label."
2953
+ }
2954
+ },
2955
+ "warning": {
2956
+ "background": {
2957
+ "$value": "{color.status.warning.subtle}",
2958
+ "$description": "Warning badge fill."
2959
+ },
2960
+ "label": {
2961
+ "$value": "{color.status.warning.@}",
2962
+ "$description": "Warning badge label."
2963
+ }
2964
+ },
2965
+ "danger": {
2966
+ "background": {
2967
+ "$value": "{color.status.danger.subtle}",
2968
+ "$description": "Danger badge fill."
2969
+ },
2970
+ "label": {
2971
+ "$value": "{color.status.danger.@}",
2972
+ "$description": "Danger badge label."
2973
+ }
2974
+ },
2975
+ "info": {
2976
+ "background": {
2977
+ "$value": "{color.status.info.subtle}",
2978
+ "$description": "Info badge fill."
2979
+ },
2980
+ "label": {
2981
+ "$value": "{color.status.info.@}",
2982
+ "$description": "Info badge label."
2983
+ }
2984
+ }
2985
+ },
2986
+ "card": {
2987
+ "background": {
2988
+ "$value": "{color.surface.default}",
2989
+ "$description": "Card fill."
2990
+ },
2991
+ "border": {
2992
+ "$value": "{color.border.default}",
2993
+ "$description": "Card border."
2994
+ },
2995
+ "radius": {
2996
+ "$value": "{radius.container}",
2997
+ "$description": "Card corner radius."
2998
+ },
2999
+ "padding": {
3000
+ "$value": "{space.inset.container}",
3001
+ "$description": "Padding inside a card."
3002
+ },
3003
+ "shadow": {
3004
+ "$value": "{elevation.card}",
3005
+ "$description": "Card shadow."
3006
+ }
3007
+ },
3008
+ "table": {
3009
+ "header-background": {
3010
+ "$value": "{color.surface.sunken}",
3011
+ "$description": "Header row fill."
3012
+ },
3013
+ "row-height": {
3014
+ "$value": "{size.row}",
3015
+ "$description": "Height of one data row."
3016
+ },
3017
+ "cell-padding-x": {
3018
+ "$value": "{space.inset.cell-x}",
3019
+ "$description": "Horizontal padding inside a cell."
3020
+ },
3021
+ "row-border": {
3022
+ "$value": "{color.border.default}",
3023
+ "$description": "Line between rows."
3024
+ },
3025
+ "row-selected": {
3026
+ "$value": "{color.surface.selected}",
3027
+ "$description": "Fill of a selected row."
3028
+ },
3029
+ "font-size": {
3030
+ "$value": "{type.data.font-size}",
3031
+ "$description": "Cell text size."
3032
+ }
3033
+ },
3034
+ "tabs": {
3035
+ "indicator": {
3036
+ "$value": "{color.action.primary.@}",
3037
+ "$description": "Active tab indicator."
3038
+ },
3039
+ "label": {
3040
+ "@": {
3041
+ "$value": "{color.text.secondary}",
3042
+ "$description": "Inactive tab label."
3043
+ },
3044
+ "active": {
3045
+ "$value": "{color.text.primary}",
3046
+ "$description": "Active tab label."
3047
+ }
3048
+ }
3049
+ },
3050
+ "overlay": {
3051
+ "background": {
3052
+ "$value": "{color.surface.raised}",
3053
+ "$description": "Fill of a dialog, menu or toast."
3054
+ },
3055
+ "radius": {
3056
+ "$value": "{radius.container}",
3057
+ "$description": "Corner radius of overlays."
3058
+ },
3059
+ "shadow": {
3060
+ "$value": "{elevation.overlay}",
3061
+ "$description": "Shadow of overlays."
3062
+ },
3063
+ "scrim": {
3064
+ "$value": "{color.surface.scrim}",
3065
+ "$description": "Color that dims the page behind a dialog."
3066
+ },
3067
+ "item-height": {
3068
+ "$value": "{size.control.default}",
3069
+ "$description": "Height of a menu item."
3070
+ }
3071
+ },
3072
+ "tooltip": {
3073
+ "background": {
3074
+ "$value": "{color.surface.inverse}",
3075
+ "$description": "Tooltip fill."
3076
+ },
3077
+ "label": {
3078
+ "$value": "{color.text.inverse}",
3079
+ "$description": "Tooltip text."
3080
+ }
3081
+ },
3082
+ "transition": {
3083
+ "duration": {
3084
+ "$value": "{motion.duration.feedback}",
3085
+ "$description": "Duration of feedback transitions."
3086
+ },
3087
+ "easing": {
3088
+ "$value": "{motion.easing.standard}",
3089
+ "$description": "Easing of feedback transitions."
3090
+ }
3091
+ }
3092
+ },
3093
+ "content": {
3094
+ "$description": "Voice tokens: the words components use for common actions. Text, not CSS.",
3095
+ "action": {
3096
+ "commit": {
3097
+ "$type": "string",
3098
+ "$value": "Go",
3099
+ "$description": "The label of the action that completes a task."
3100
+ },
3101
+ "cancel": {
3102
+ "$type": "string",
3103
+ "$value": "Not now",
3104
+ "$description": "The label of the way out next to the main action."
3105
+ },
3106
+ "destroy": {
3107
+ "$type": "string",
3108
+ "$value": "Remove",
3109
+ "$description": "The label of an action that deletes data."
3110
+ },
3111
+ "retry": {
3112
+ "$type": "string",
3113
+ "$value": "Try again",
3114
+ "$description": "The label that repeats a failed action."
3115
+ },
3116
+ "empty-action": {
3117
+ "$type": "string",
3118
+ "$value": "Explore the drop",
3119
+ "$description": "The label of the action in an empty state."
3120
+ }
3121
+ }
3122
+ }
3123
+ }
3124
+ }