ui-foundations 0.3.2 → 0.4.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 (69) hide show
  1. package/README.md +179 -36
  2. package/dist/assets/icons/checkmark.svg +1 -0
  3. package/dist/core/index.css +7 -7
  4. package/dist/macros/ui.njk +142 -0
  5. package/dist/main.css +465 -173
  6. package/dist/react/badge.js +41 -0
  7. package/dist/react/button.js +15 -6
  8. package/dist/react/checkbox.js +30 -0
  9. package/dist/react/icon.js +19 -1
  10. package/dist/react/index.js +2 -0
  11. package/dist/react/label.js +1 -1
  12. package/dist/react/radio.js +62 -0
  13. package/dist/react/switch.js +18 -0
  14. package/dist/tokens/css/{appearance-(modes).tokens.mode-dark.css → appearance-modes.tokens.mode-dark.css} +1 -1
  15. package/dist/tokens/css/{appearance-(modes).tokens.mode-light.css → appearance-modes.tokens.mode-light.css} +1 -1
  16. package/dist/tokens/css/{components-(ui).tokens.css → components-ui.tokens.css} +46 -3
  17. package/dist/tokens/css/{core-(primitives).tokens.css → core-primitives.tokens.css} +61 -19
  18. package/dist/tokens/css/{semantics-(roles).tokens.css → semantics-roles.tokens.css} +1 -1
  19. package/dist/tokens/css/themes-brands.tokens.brand-a.css +22 -0
  20. package/dist/tokens/css/{themes-(brands).tokens.brand-b.css → themes-brands.tokens.brand-b.css} +9 -9
  21. package/dist/tokens/json/appearance-modes.tokens.mode-dark.json +121 -0
  22. package/dist/tokens/json/appearance-modes.tokens.mode-light.json +121 -0
  23. package/dist/tokens/json/components-ui.tokens.json +715 -0
  24. package/dist/tokens/json/{core-(primitives).tokens.json → core-primitives.tokens.json} +227 -413
  25. package/dist/tokens/json/semantics-roles.tokens.json +141 -0
  26. package/dist/tokens/json/themes-brands.tokens.brand-a.json +81 -0
  27. package/dist/tokens/json/themes-brands.tokens.brand-b.json +81 -0
  28. package/dist/tokens/missing-tokens.json +43 -0
  29. package/dist/tokens/tokens.yaml +1254 -149
  30. package/dist/tokens/ts/{appearance-(modes).tokens.mode-dark.ts → appearance-modes.tokens.mode-dark.ts} +1 -1
  31. package/dist/tokens/ts/{appearance-(modes).tokens.mode-light.ts → appearance-modes.tokens.mode-light.ts} +1 -1
  32. package/dist/tokens/ts/{components-(ui).tokens.ts → components-ui.tokens.ts} +47 -4
  33. package/dist/tokens/ts/{core-(primitives).tokens.ts → core-primitives.tokens.ts} +62 -20
  34. package/dist/tokens/ts/{semantics-(roles).tokens.ts → semantics-roles.tokens.ts} +1 -1
  35. package/dist/tokens/ts/{themes-(brands).tokens.brand-a.ts → themes-brands.tokens.brand-a.ts} +9 -9
  36. package/dist/tokens/ts/{themes-(brands).tokens.brand-b.ts → themes-brands.tokens.brand-b.ts} +9 -9
  37. package/dist/ui/index.css +2 -0
  38. package/dist/ui/patterns/badge.css +49 -0
  39. package/dist/ui/patterns/checkbox.css +71 -22
  40. package/dist/ui/patterns/radio.css +109 -0
  41. package/docs/README.md +38 -0
  42. package/docs/agentic/README.md +34 -0
  43. package/docs/agentic/assistant-behavior-rules.md +48 -0
  44. package/docs/agentic/skills/ux-writing-coach.md +116 -0
  45. package/docs/foundations/README.md +31 -0
  46. package/docs/foundations/foundation-001-token-layering.md +6 -0
  47. package/docs/foundations/foundation-002-naming-and-grouping.md +6 -0
  48. package/docs/foundations/foundation-003-color-semantics-and-status.md +6 -0
  49. package/docs/foundations/foundation-004-typography-scale-and-line-height.md +6 -0
  50. package/docs/foundations/foundation-005-responsive-breakpoints-and-containers.md +6 -0
  51. package/docs/foundations/foundation-006-z-index-layering.md +6 -0
  52. package/docs/foundations/foundation-007-typography-selectors-and-specificity.md +6 -0
  53. package/docs/foundations/foundation-008-mode-activation-and-consumer-control.md +6 -0
  54. package/docs/foundations/foundation-009-component-boundaries-and-utility.md +6 -0
  55. package/docs/foundations/foundation-010-implementation-and-pipeline-workflow.md +6 -0
  56. package/docs/foundations/foundation-011-branching-and-release-governance.md +6 -0
  57. package/docs/foundations/foundation-012-minimal-markup-and-composition.md +6 -0
  58. package/package.json +15 -11
  59. package/dist/tokens/css/themes-(brands).tokens.brand-a.css +0 -22
  60. package/dist/tokens/json/appearance-(modes).tokens.mode-dark.json +0 -182
  61. package/dist/tokens/json/appearance-(modes).tokens.mode-light.json +0 -182
  62. package/dist/tokens/json/components-(ui).tokens.json +0 -739
  63. package/dist/tokens/json/semantics-(roles).tokens.json +0 -203
  64. package/dist/tokens/json/themes-(brands).tokens.brand-a.json +0 -115
  65. package/dist/tokens/json/themes-(brands).tokens.brand-b.json +0 -115
  66. package/docs/agentic/skills/README.md +0 -51
  67. package/docs/agentic/skills/design-ops-specialist/SKILL.md +0 -60
  68. package/docs/agentic/skills/design-system-architect/SKILL.md +0 -106
  69. package/docs/agentic/team-ai-playbook.md +0 -226
package/dist/main.css CHANGED
@@ -181,7 +181,176 @@
181
181
  }
182
182
  }
183
183
  /* Auto-generated design tokens from Figma */
184
- /* Generated on 2026-03-31T20:27:09.733Z */
184
+ /* Generated on 2026-04-28T09:23:28.563Z */
185
+
186
+ :root {
187
+ --color-neutral-100: rgb(230 230 230);
188
+ --color-neutral-200: rgb(204 204 204);
189
+ --color-neutral-300: rgb(179 179 179);
190
+ --color-neutral-400: rgb(128 128 128);
191
+ --color-neutral-500: rgb(128 128 128);
192
+ --color-neutral-600: rgb(102 102 102);
193
+ --color-neutral-700: rgb(77 77 77);
194
+ --color-neutral-800: rgb(51 51 51);
195
+ --color-neutral-900: rgb(26 26 26);
196
+ --color-neutral-1000: rgb(0 0 0);
197
+ --color-neutral-alpha-100: rgba(0 0 0 / 0.1);
198
+ --color-neutral-alpha-200: rgba(0 0 0 / 0.2);
199
+ --color-neutral-alpha-300: rgba(0 0 0 / 0.3);
200
+ --color-neutral-alpha-400: rgba(0 0 0 / 0.4);
201
+ --color-neutral-alpha-500: rgba(0 0 0 / 0.5);
202
+ --color-neutral-alpha-600: rgba(0 0 0 / 0.6);
203
+ --color-neutral-alpha-700: rgba(0 0 0 / 0.7);
204
+ --color-neutral-alpha-800: rgba(0 0 0 / 0.8);
205
+ --color-neutral-alpha-900: rgba(0 0 0 / 0.9);
206
+ --color-neutral-alpha-000: rgba(0 0 0 / 0);
207
+ --color-neutral-000: rgb(255 255 255);
208
+ --color-brand-b-purple-200: rgb(222 192 255);
209
+ --color-brand-b-purple-300: rgb(196 143 255);
210
+ --color-brand-b-purple-600: rgb(151 71 255);
211
+ --color-brand-b-purple-700: rgb(122 20 255);
212
+ --color-brand-b-purple-800: rgb(85 26 139);
213
+ --color-brand-b-purple-900: rgb(58 18 95);
214
+ --color-brand-b-blue-100: rgb(206 219 253);
215
+ --color-brand-b-blue-200: rgb(158 183 250);
216
+ --color-brand-b-blue-300: rgb(109 147 248);
217
+ --color-brand-b-blue-400: rgb(61 111 245);
218
+ --color-brand-b-blue-500: rgb(12 75 243);
219
+ --color-brand-b-blue-600: rgb(10 60 194);
220
+ --color-brand-b-blue-700: rgb(7 45 146);
221
+ --color-brand-b-blue-800: rgb(5 30 97);
222
+ --color-brand-b-blue-900: rgb(2 15 49);
223
+ --color-brand-b-red-100: rgb(255 255 255);
224
+ --color-brand-b-red-200: rgb(255 204 204);
225
+ --color-brand-b-red-300: rgb(255 153 153);
226
+ --color-brand-b-red-400: rgb(255 102 102);
227
+ --color-brand-b-red-500: rgb(255 51 51);
228
+ --color-brand-b-red-600: rgb(255 0 0);
229
+ --color-brand-b-red-700: rgb(153 0 0);
230
+ --color-brand-b-red-800: rgb(102 0 0);
231
+ --color-brand-b-red-900: rgb(51 0 0);
232
+ --color-brand-b-green-100: rgb(246 254 250);
233
+ --color-brand-b-green-200: rgb(200 249 223);
234
+ --color-brand-b-green-300: rgb(154 244 196);
235
+ --color-brand-b-green-400: rgb(108 239 170);
236
+ --color-brand-b-green-500: rgb(62 234 143);
237
+ --color-brand-b-green-600: rgb(19 174 92);
238
+ --color-brand-b-green-700: rgb(14 129 68);
239
+ --color-brand-b-green-800: rgb(8 69 36);
240
+ --color-brand-b-green-900: rgb(4 37 19);
241
+ --color-transparent: rgba(0 0 0 / 0);
242
+ --color-brand-a-green-100: rgb(243 246 233);
243
+ --color-brand-a-green-200: rgb(223 231 197);
244
+ --color-brand-a-green-300: rgb(207 219 169);
245
+ --color-brand-a-green-400: rgb(191 207 140);
246
+ --color-brand-a-green-500: rgb(175 195 111);
247
+ --color-brand-a-green-600: rgb(159 183 82);
248
+ --color-brand-a-green-700: rgb(137 158 66);
249
+ --color-brand-a-green-800: rgb(112 129 54);
250
+ --color-brand-a-green-900: rgb(81 93 39);
251
+ --color-brand-a-red-100: rgb(254 251 251);
252
+ --color-brand-a-red-200: rgb(250 224 230);
253
+ --color-brand-a-red-300: rgb(244 179 195);
254
+ --color-brand-a-red-400: rgb(238 135 160);
255
+ --color-brand-a-red-500: rgb(231 90 124);
256
+ --color-brand-a-red-600: rgb(225 46 89);
257
+ --color-brand-a-red-700: rgb(191 28 67);
258
+ --color-brand-a-red-800: rgb(147 21 52);
259
+ --color-brand-a-red-900: rgb(102 15 36);
260
+ --color-brand-a-sand-100: rgb(240 240 229);
261
+ --color-brand-a-sand-200: rgb(221 222 197);
262
+ --color-brand-a-sand-300: rgb(192 193 172);
263
+ --color-brand-a-sand-400: rgb(164 165 147);
264
+ --color-brand-a-sand-500: rgb(136 137 122);
265
+ --color-brand-a-sand-600: rgb(108 109 97);
266
+ --color-brand-a-sand-700: rgb(80 81 72);
267
+ --color-brand-a-sand-800: rgb(52 52 47);
268
+ --color-brand-a-sand-900: rgb(24 24 22);
269
+ --font-size-md: 1rem;
270
+ --font-size-xs: .75rem;
271
+ --font-size-sm: .875rem;
272
+ --font-size-lg: 1.25rem;
273
+ --font-size-xl: 1.5rem;
274
+ --font-size-xxl: 2rem;
275
+ --font-size-xxxl: 2.5rem;
276
+ --font-weight-100: 100;
277
+ --font-weight-200: 200;
278
+ --font-weight-300: 300;
279
+ --font-weight-400: 400;
280
+ --font-weight-500: 500;
281
+ --font-weight-600: 600;
282
+ --font-weight-700: 700;
283
+ --font-weight-800: 800;
284
+ --font-weight-900: 900;
285
+ --font-family-sans: Inter;
286
+ --font-family-serif: Rokkitt;
287
+ --font-family-mono: SFMono-Regular;
288
+ --line-height-xs: 1rem;
289
+ --line-height-sm: 1.25rem;
290
+ --line-height-md: 1.5rem;
291
+ --line-height-lg: 1.75rem;
292
+ --line-height-xl: 2rem;
293
+ --line-height-xxl: 2.75rem;
294
+ --line-height-xxxl: 3.5rem;
295
+ --size-spacing-100: .25rem;
296
+ --size-spacing-200: .5rem;
297
+ --size-spacing-300: .75rem;
298
+ --size-spacing-400: 1rem;
299
+ --size-spacing-500: 1.25rem;
300
+ --size-spacing-600: 1.5rem;
301
+ --size-spacing-700: 2rem;
302
+ --size-spacing-800: 2.5rem;
303
+ --size-spacing-900: 3rem;
304
+ --size-spacing-1000: 4rem;
305
+ --size-spacing-000: 0;
306
+ --size-radius-100: .125rem;
307
+ --size-radius-200: .25rem;
308
+ --size-radius-300: .375rem;
309
+ --size-radius-400: .5rem;
310
+ --size-radius-500: .75rem;
311
+ --size-radius-600: 1rem;
312
+ --size-radius-700: 1.25rem;
313
+ --size-radius-800: 1.5rem;
314
+ --size-radius-900: 2rem;
315
+ --size-radius-000: 0;
316
+ --size-radius-full: 625rem;
317
+ --shadow-focus: .5rem;
318
+ --breakpoint-100: 580px;
319
+ --breakpoint-200: 760px;
320
+ --breakpoint-300: 960px;
321
+ --breakpoint-400: 1200px;
322
+ --breakpoint-500: 1440px;
323
+ --breakpoint-600: 1920px;
324
+ --container-100: 192px;
325
+ --container-200: 384px;
326
+ --container-300: 576px;
327
+ --container-400: 768px;
328
+ --container-500: 960px;
329
+ --container-600: 1152px;
330
+ --size-border-100: .0625rem;
331
+ --size-border-200: .125rem;
332
+ --size-border-300: .1875rem;
333
+ --size-border-000: 0;
334
+ --layout-columns: 12;
335
+ --layout-gutter: 1rem;
336
+ --layout-max-width: 1236px;
337
+ --layout-column-max-width: 412px;
338
+ --layout-float-breakpoint: 1220px;
339
+ --layout-base-grid: .25rem;
340
+ --zindex-fixed: 1030;
341
+ --zindex-sticky: 1020;
342
+ --zindex-dropdown: 1000;
343
+ --zindex-dropdown-base: 900;
344
+ --zindex-modal: 1050;
345
+ --zindex-base: 0;
346
+ --zindex-tooltip: 1070;
347
+ --zindex-raised: 1;
348
+ --zindex-popover: 1060;
349
+ --zindex-modal-overlay: 1040;
350
+ --zindex-hidden: -1;
351
+ }
352
+ /* Auto-generated design tokens from Figma */
353
+ /* Generated on 2026-04-28T09:23:28.564Z */
185
354
 
186
355
  :root {
187
356
  --typography-heading-font-family: var(--brand-font-lead);
@@ -217,7 +386,7 @@
217
386
  --corner-checkbox-radius: var(--brand-corner-input);
218
387
  }
219
388
  /* Auto-generated design tokens from Figma */
220
- /* Generated on 2026-03-31T20:27:09.724Z */
389
+ /* Generated on 2026-04-28T09:23:28.559Z */
221
390
 
222
391
  :root {
223
392
  --button-border-size-hover: var(--size-border-100);
@@ -310,18 +479,41 @@
310
479
  --input-overlay-active: var(--color-transparent);
311
480
  --input-height: 2.5rem;
312
481
  --input-checkbox-text-color-default: var(--color-text-default);
313
- --input-checkbox-text-color-hover: var(--color-text-default);
482
+ --input-checkbox-text-color-hover: var(--color-text-strong);
314
483
  --input-checkbox-text-color-active: var(--color-text-inverse);
315
484
  --input-checkbox-border-color-default: var(--color-border-subtle);
316
- --input-checkbox-border-color-hover: var(--color-border-brand);
485
+ --input-checkbox-border-color-hover: var(--color-border-strong);
317
486
  --input-checkbox-border-color-active: var(--color-border-brand);
318
487
  --input-checkbox-border-color-focus: var(--color-border-brand);
319
488
  --input-checkbox-border-color-invalid: var(--color-border-danger);
320
489
  --input-checkbox-border-color-valid: var(--color-border-strong);
490
+ --input-checkbox-border-color-disabled: var(--color-border-disabled);
321
491
  --input-checkbox-container-background-default: var(--color-fill-surface);
322
492
  --input-checkbox-container-background-hover: var(--color-fill-surface);
323
493
  --input-checkbox-container-background-focus: var(--color-fill-surface);
324
494
  --input-checkbox-container-background-active: var(--color-fill-brand);
495
+ --input-checkbox-container-background-disabled: var(--color-fill-disabled);
496
+ --input-checkbox-text-color-disabled: var(--color-text-disabled);
497
+ --checkbox-border-size-hover: var(--size-border-200);
498
+ --checkbox-border-size-disabled: var(--size-border-000);
499
+ --checkbox-border-size-default: var(--size-border-100);
500
+ --input-radio-text-color-default: var(--color-text-default);
501
+ --input-radio-text-color-hover: var(--color-text-strong);
502
+ --input-radio-text-color-active: var(--color-text-inverse);
503
+ --input-radio-text-color-disabled: var(--color-text-disabled);
504
+ --input-radio-border-color-default: var(--color-border-subtle);
505
+ --input-radio-border-color-hover: var(--color-border-strong);
506
+ --input-radio-border-color-active: var(--color-border-brand);
507
+ --input-radio-border-color-focus: var(--color-border-brand);
508
+ --input-radio-border-color-disabled: var(--color-border-disabled);
509
+ --input-radio-container-background-default: var(--color-fill-surface);
510
+ --input-radio-container-background-hover: var(--color-fill-surface);
511
+ --input-radio-container-background-focus: var(--color-fill-surface);
512
+ --input-radio-container-background-active: var(--color-fill-brand);
513
+ --input-radio-container-background-disabled: var(--color-fill-disabled);
514
+ --radio-border-size-default: var(--size-border-100);
515
+ --radio-border-size-hover: var(--size-border-200);
516
+ --radio-border-size-disabled: var(--size-border-000);
325
517
  --form-group-gap: var(--size-spacing-400);
326
518
  --form-group-title-color: var(--color-text-default);
327
519
  --form-padding-inline: var(--size-spacing-400);
@@ -334,9 +526,29 @@
334
526
  --form-container-background: var(--color-fill-surface);
335
527
  --form-container-border-color: var(--color-border-subtle);
336
528
  --form-border-size: var(--size-border-100);
529
+ --badge-default-container-background: var(--color-fill-subtle);
530
+ --badge-default-text-color: var(--color-text-default);
531
+ --badge-brand-container-background: var(--color-fill-brand);
532
+ --badge-brand-text-color: var(--color-text-inverse);
533
+ --badge-success-container-background: var(--color-fill-success);
534
+ --badge-success-text-color: var(--color-text-inverse);
535
+ --badge-danger-container-background: var(--color-fill-danger);
536
+ --badge-danger-text-color: var(--color-text-inverse);
537
+ --badge-border-radius: var(--size-radius-full);
538
+ --badge-font-family: var(--typography-label-font-family);
539
+ --badge-font-weight: var(--font-weight-700);
540
+ --badge-font-size-sm: var(--font-size-xs);
541
+ --badge-font-size-md: var(--font-size-sm);
542
+ --badge-line-height-sm: var(--line-height-xs);
543
+ --badge-line-height-md: var(--line-height-sm);
544
+ --badge-padding-inline-sm: var(--size-spacing-200);
545
+ --badge-padding-inline-md: var(--size-spacing-300);
546
+ --badge-padding-block-sm: var(--size-spacing-000);
547
+ --badge-padding-block-md: var(--size-spacing-100);
548
+ --badge-gap: var(--size-spacing-100);
337
549
  }
338
550
  /* Auto-generated design tokens from Figma */
339
- /* Generated on 2026-03-31T20:27:09.721Z */
551
+ /* Generated on 2026-04-28T09:23:28.554Z */
340
552
 
341
553
  :root[data-mode="dark"] {
342
554
  --color-text-default: var(--color-neutral-800);
@@ -368,7 +580,7 @@
368
580
  --color-focus: var(--brand-color-primary-dark);
369
581
  }
370
582
  /* Auto-generated design tokens from Figma */
371
- /* Generated on 2026-03-31T20:27:09.718Z */
583
+ /* Generated on 2026-04-28T09:23:28.552Z */
372
584
 
373
585
  :root {
374
586
  --color-text-default: var(--color-neutral-800);
@@ -400,144 +612,17 @@
400
612
  --color-focus: var(--brand-color-primary);
401
613
  }
402
614
  /* Auto-generated design tokens from Figma */
403
- /* Generated on 2026-03-31T20:27:09.731Z */
404
-
405
- :root {
406
- --color-neutral-100: rgb(230 230 230);
407
- --color-neutral-200: rgb(204 204 204);
408
- --color-neutral-300: rgb(179 179 179);
409
- --color-neutral-400: rgb(128 128 128);
410
- --color-neutral-500: rgb(128 128 128);
411
- --color-neutral-600: rgb(102 102 102);
412
- --color-neutral-700: rgb(77 77 77);
413
- --color-neutral-800: rgb(51 51 51);
414
- --color-neutral-900: rgb(26 26 26);
415
- --color-neutral-1000: rgb(0 0 0);
416
- --color-neutral-alpha-100: rgba(0 0 0 / 0.1);
417
- --color-neutral-alpha-200: rgba(0 0 0 / 0.2);
418
- --color-neutral-alpha-300: rgba(0 0 0 / 0.3);
419
- --color-neutral-alpha-400: rgba(0 0 0 / 0.4);
420
- --color-neutral-alpha-500: rgba(0 0 0 / 0.5);
421
- --color-neutral-alpha-600: rgba(0 0 0 / 0.6);
422
- --color-neutral-alpha-700: rgba(0 0 0 / 0.7);
423
- --color-neutral-alpha-800: rgba(0 0 0 / 0.8);
424
- --color-neutral-alpha-900: rgba(0 0 0 / 0.9);
425
- --color-neutral-alpha-000: rgba(0 0 0 / 0);
426
- --color-neutral-000: rgb(255 255 255);
427
- --color-brand-a-purple-200: rgb(222 192 255);
428
- --color-brand-a-purple-600: rgb(151 71 255);
429
- --color-brand-a-purple-800: rgb(85 26 139);
430
- --color-brand-a-blue-200: rgb(226 244 253);
431
- --color-brand-a-blue-500: rgb(112 203 244);
432
- --color-brand-a-blue-700: rgb(12 75 243);
433
- --color-brand-a-blue-800: rgb(27 17 92);
434
- --color-brand-a-green: rgb(19 174 92);
435
- --color-brand-a-red: rgb(255 0 0);
436
- --color-brand-b-purple-200: rgb(196 143 255);
437
- --color-brand-b-purple-600: rgb(122 20 255);
438
- --color-brand-b-purple-800: rgb(58 18 95);
439
- --color-brand-b-blue-200: rgb(179 226 250);
440
- --color-brand-b-blue-500: rgb(66 186 240);
441
- --color-brand-b-blue-700: rgb(10 60 194);
442
- --color-brand-b-blue-800: rgb(14 9 47);
443
- --color-brand-b-red: rgb(204 0 0);
444
- --color-brand-b-green: rgb(14 129 68);
445
- --color-transparent: rgba(0 0 0 / 0);
446
- --font-size-md: 1rem;
447
- --font-size-xs: .75rem;
448
- --font-size-sm: .875rem;
449
- --font-size-lg: 1.25rem;
450
- --font-size-xl: 1.5rem;
451
- --font-size-xxl: 2rem;
452
- --font-size-xxxl: 2.5rem;
453
- --font-weight-100: 100;
454
- --font-weight-200: 200;
455
- --font-weight-300: 300;
456
- --font-weight-400: 400;
457
- --font-weight-500: 500;
458
- --font-weight-600: 600;
459
- --font-weight-700: 700;
460
- --font-weight-800: 800;
461
- --font-weight-900: 900;
462
- --font-family-sans: Inter;
463
- --font-family-serif: Rokkitt;
464
- --font-family-mono: SFMono-Regular;
465
- --line-height-xs: 1rem;
466
- --line-height-sm: 1.25rem;
467
- --line-height-md: 1.5rem;
468
- --line-height-lg: 1.75rem;
469
- --line-height-xl: 2rem;
470
- --line-height-xxl: 2.75rem;
471
- --line-height-xxxl: 3.5rem;
472
- --size-spacing-100: .25rem;
473
- --size-spacing-200: .5rem;
474
- --size-spacing-300: .75rem;
475
- --size-spacing-400: 1rem;
476
- --size-spacing-500: 1.25rem;
477
- --size-spacing-600: 1.5rem;
478
- --size-spacing-700: 2rem;
479
- --size-spacing-800: 2.5rem;
480
- --size-spacing-900: 3rem;
481
- --size-spacing-1000: 4rem;
482
- --size-spacing-000: 0;
483
- --size-radius-100: .125rem;
484
- --size-radius-200: .25rem;
485
- --size-radius-300: .375rem;
486
- --size-radius-400: .5rem;
487
- --size-radius-500: .75rem;
488
- --size-radius-600: 1rem;
489
- --size-radius-700: 1.25rem;
490
- --size-radius-800: 1.5rem;
491
- --size-radius-900: 2rem;
492
- --size-radius-000: 0;
493
- --size-radius-full: 625rem;
494
- --shadow-focus: .5rem;
495
- --breakpoint-100: 580px;
496
- --breakpoint-200: 760px;
497
- --breakpoint-300: 960px;
498
- --breakpoint-400: 1200px;
499
- --breakpoint-500: 1440px;
500
- --breakpoint-600: 1920px;
501
- --container-100: 192px;
502
- --container-200: 384px;
503
- --container-300: 576px;
504
- --container-400: 768px;
505
- --container-500: 960px;
506
- --container-600: 1152px;
507
- --size-border-100: .0625rem;
508
- --size-border-200: .125rem;
509
- --size-border-300: .1875rem;
510
- --size-border-000: 0;
511
- --layout-columns: 12;
512
- --layout-gutter: 1rem;
513
- --layout-max-width: 1236px;
514
- --layout-column-max-width: 412px;
515
- --layout-float-breakpoint: 1220px;
516
- --layout-base-grid: .25rem;
517
- --zindex-fixed: 1030;
518
- --zindex-sticky: 1020;
519
- --zindex-dropdown: 1000;
520
- --zindex-dropdown-base: 900;
521
- --zindex-modal: 1050;
522
- --zindex-base: 0;
523
- --zindex-tooltip: 1070;
524
- --zindex-raised: 1;
525
- --zindex-popover: 1060;
526
- --zindex-modal-overlay: 1040;
527
- --zindex-hidden: -1;
528
- }
529
- /* Auto-generated design tokens from Figma */
530
- /* Generated on 2026-03-31T20:27:09.734Z */
615
+ /* Generated on 2026-04-28T09:23:28.565Z */
531
616
 
532
617
  :root[data-brand="a"] {
533
- --brand-color-functional-success: var(--color-brand-a-green);
534
- --brand-color-functional-danger: var(--color-brand-a-red);
535
- --brand-color-functional-base: var(--color-brand-a-blue-700);
536
- --brand-color-functional-base-dark: var(--color-brand-a-blue-800);
537
- --brand-color-primary: var(--color-brand-a-purple-600);
538
- --brand-color-accent: var(--color-brand-a-blue-500);
539
- --brand-color-primary-dark: var(--color-brand-a-purple-800);
540
- --brand-color-accent-dark: var(--color-brand-a-blue-700);
618
+ --brand-color-functional-success: var(--color-brand-a-green-600);
619
+ --brand-color-functional-danger: var(--color-brand-a-red-600);
620
+ --brand-color-functional-base: var(--color-brand-a-green-700);
621
+ --brand-color-functional-base-dark: var(--color-brand-a-green-900);
622
+ --brand-color-primary: var(--color-brand-a-sand-700);
623
+ --brand-color-accent: var(--color-brand-a-green-400);
624
+ --brand-color-primary-dark: var(--color-brand-a-sand-900);
625
+ --brand-color-accent-dark: var(--color-brand-a-green-600);
541
626
  --brand-color-subtle: var(--color-neutral-500);
542
627
  --brand-color-subtle-dark: var(--color-neutral-800);
543
628
  --brand-color-subtle-light: var(--color-neutral-200);
@@ -549,17 +634,17 @@
549
634
  --brand-corner-input: var(--size-radius-200);
550
635
  }
551
636
  /* Auto-generated design tokens from Figma */
552
- /* Generated on 2026-03-31T20:27:09.734Z */
637
+ /* Generated on 2026-04-28T09:23:28.567Z */
553
638
 
554
639
  :root[data-brand="b"] {
555
- --brand-color-functional-success: var(--color-brand-b-green);
556
- --brand-color-functional-danger: var(--color-brand-b-red);
557
- --brand-color-functional-base: var(--color-brand-b-purple-600);
558
- --brand-color-functional-base-dark: var(--color-brand-b-purple-800);
559
- --brand-color-primary: var(--color-brand-b-blue-500);
560
- --brand-color-accent: var(--color-brand-b-purple-600);
561
- --brand-color-primary-dark: var(--color-brand-b-blue-700);
562
- --brand-color-accent-dark: var(--color-brand-b-purple-800);
640
+ --brand-color-functional-success: var(--color-brand-b-green-600);
641
+ --brand-color-functional-danger: var(--color-brand-b-red-600);
642
+ --brand-color-functional-base: var(--color-brand-b-purple-700);
643
+ --brand-color-functional-base-dark: var(--color-brand-b-purple-900);
644
+ --brand-color-primary: var(--color-brand-b-purple-600);
645
+ --brand-color-accent: var(--color-brand-b-green-400);
646
+ --brand-color-primary-dark: var(--color-brand-b-purple-800);
647
+ --brand-color-accent-dark: var(--color-brand-b-green-800);
563
648
  --brand-color-subtle: var(--color-neutral-500);
564
649
  --brand-color-subtle-dark: var(--color-neutral-800);
565
650
  --brand-color-subtle-light: var(--color-neutral-200);
@@ -972,12 +1057,12 @@
972
1057
  font-weight: var(--typography-label-font-weight);
973
1058
  font-size: var(--typography-label-font-size);
974
1059
  line-height: var(--typography-label-line-height);
975
- color: var(--color-text-default);
1060
+ color: var(--input-checkbox-text-color-default);
976
1061
  cursor: pointer;
977
1062
  }
978
1063
 
979
1064
  .checkbox-field.is-disabled {
980
- color: var(--color-text-disabled);
1065
+ color: var(--input-checkbox-text-color-disabled);
981
1066
  cursor: not-allowed;
982
1067
  }
983
1068
 
@@ -989,52 +1074,91 @@
989
1074
  display: inline-grid;
990
1075
  place-content: center;
991
1076
  border-style: solid;
992
- border-width: var(--size-border-100);
993
- border-color: var(--color-border-default);
994
- border-radius: var(--brand-corner-input);
995
- background: var(--color-fill-surface);
996
- color: var(--color-text-inverse);
1077
+ border-width: var(--checkbox-border-size-default);
1078
+ border-color: var(--input-checkbox-border-color-default);
1079
+ border-radius: var(--corner-checkbox-radius);
1080
+ background: var(--input-checkbox-container-background-default);
1081
+ color: var(--input-checkbox-text-color-active);
997
1082
  cursor: pointer;
998
1083
  }
999
1084
 
1000
1085
  .checkbox::after {
1001
1086
  content: "";
1087
+ display: block;
1002
1088
  }
1003
1089
 
1004
1090
  .checkbox:checked,
1005
1091
  .checkbox.is-checked {
1006
- border-color: var(--color-border-brand);
1007
- background: var(--color-fill-brand);
1092
+ border-color: var(--input-checkbox-border-color-active);
1093
+ background: var(--input-checkbox-container-background-active);
1008
1094
  }
1009
1095
 
1010
1096
  .checkbox:checked::after,
1011
1097
  .checkbox.is-checked::after {
1012
- content: "\2713";
1013
- font-size: var(--typography-label-font-size);
1014
- line-height: var(--typography-label-line-height);
1098
+ content: "";
1099
+ inline-size: 0.75em;
1100
+ block-size: 0.75em;
1101
+ background-color: currentColor;
1102
+ -webkit-mask-image: url("/assets/icons/checkmark.svg");
1103
+ mask-image: url("/assets/icons/checkmark.svg");
1104
+ -webkit-mask-size: contain;
1105
+ mask-size: contain;
1106
+ -webkit-mask-repeat: no-repeat;
1107
+ mask-repeat: no-repeat;
1108
+ -webkit-mask-position: center;
1109
+ mask-position: center;
1110
+ }
1111
+
1112
+ .checkbox:indeterminate,
1113
+ .checkbox.is-indeterminate {
1114
+ border-color: var(--input-checkbox-border-color-active);
1115
+ background: var(--input-checkbox-container-background-active);
1116
+ }
1117
+
1118
+ .checkbox:indeterminate::after,
1119
+ .checkbox.is-indeterminate::after {
1120
+ inline-size: 0.75rem;
1121
+ block-size: var(--size-border-200);
1122
+ border-radius: 999px;
1123
+ background: currentColor;
1015
1124
  }
1016
1125
 
1017
1126
  .checkbox:hover,
1018
1127
  .checkbox.is-hover {
1019
1128
  background:
1020
1129
  linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1021
- var(--color-fill-surface);
1022
- border-color: var(--color-border-brand);
1130
+ var(--input-checkbox-container-background-hover);
1131
+ color: var(--input-checkbox-text-color-hover);
1132
+ border-color: var(--input-checkbox-border-color-hover);
1133
+ border-width: var(--checkbox-border-size-hover);
1023
1134
  }
1024
1135
 
1025
1136
  .checkbox:checked:hover,
1026
1137
  .checkbox.is-checked.is-hover {
1027
1138
  background:
1028
1139
  linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1029
- var(--color-fill-brand);
1140
+ var(--input-checkbox-container-background-active);
1141
+ color: var(--input-checkbox-text-color-hover);
1142
+ border-color: var(--input-checkbox-border-color-hover);
1143
+ border-width: var(--checkbox-border-size-hover);
1144
+ }
1145
+
1146
+ .checkbox:indeterminate:hover,
1147
+ .checkbox.is-indeterminate.is-hover {
1148
+ background:
1149
+ linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1150
+ var(--input-checkbox-container-background-active);
1151
+ color: var(--input-checkbox-text-color-hover);
1152
+ border-color: var(--input-checkbox-border-color-hover);
1153
+ border-width: var(--checkbox-border-size-hover);
1030
1154
  }
1031
1155
 
1032
1156
  .checkbox:active,
1033
1157
  .checkbox.is-active {
1034
1158
  background:
1035
1159
  linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1036
- var(--color-fill-surface);
1037
- border-color: var(--color-border-brand);
1160
+ var(--input-checkbox-container-background-default);
1161
+ border-color: var(--input-checkbox-border-color-active);
1038
1162
  border-width: var(--size-border-200);
1039
1163
  }
1040
1164
 
@@ -1042,21 +1166,140 @@
1042
1166
  .checkbox.is-checked.is-active {
1043
1167
  background:
1044
1168
  linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1045
- var(--color-fill-brand);
1169
+ var(--input-checkbox-container-background-active);
1170
+ border-color: var(--input-checkbox-border-color-active);
1171
+ }
1172
+
1173
+ .checkbox:indeterminate:active,
1174
+ .checkbox.is-indeterminate.is-active {
1175
+ background:
1176
+ linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1177
+ var(--input-checkbox-container-background-active);
1178
+ border-color: var(--input-checkbox-border-color-active);
1046
1179
  }
1047
1180
 
1048
1181
  .checkbox:focus-visible,
1049
1182
  .checkbox.is-focus-visible {
1050
- border-color: var(--color-border-brand);
1183
+ border-color: var(--input-checkbox-border-color-focus);
1051
1184
  outline: none;
1052
1185
  box-shadow: 0 0 0 var(--shadow-focus, 0) var(--color-focus, transparent);
1053
1186
  }
1054
1187
 
1055
1188
  .checkbox:disabled,
1056
1189
  .checkbox.is-disabled {
1057
- border-color: var(--color-border-disabled);
1058
- background: var(--color-fill-disabled);
1059
- color: var(--color-text-disabled);
1190
+ border-width: var(--checkbox-border-size-disabled);
1191
+ border-color: var(--input-checkbox-border-color-disabled);
1192
+ background: var(--input-checkbox-container-background-disabled);
1193
+ color: var(--input-checkbox-text-color-disabled);
1194
+ cursor: not-allowed;
1195
+ }
1196
+ }
1197
+ @layer components {
1198
+ .radio-field {
1199
+ display: inline-flex;
1200
+ align-items: center;
1201
+ gap: var(--typography-label-gap);
1202
+ font-family: var(--typography-label-font-family);
1203
+ font-weight: var(--typography-label-font-weight);
1204
+ font-size: var(--typography-label-font-size);
1205
+ line-height: var(--typography-label-line-height);
1206
+ color: var(--input-radio-text-color-default);
1207
+ cursor: pointer;
1208
+ }
1209
+
1210
+ .radio-field.is-disabled {
1211
+ color: var(--input-radio-text-color-disabled);
1212
+ cursor: not-allowed;
1213
+ }
1214
+
1215
+ .radio {
1216
+ inline-size: var(--size-spacing-600);
1217
+ block-size: var(--size-spacing-600);
1218
+ margin: 0;
1219
+ appearance: none;
1220
+ display: inline-grid;
1221
+ place-content: center;
1222
+ border-style: solid;
1223
+ border-width: var(--radio-border-size-default);
1224
+ border-color: var(--input-radio-border-color-default);
1225
+ border-radius: var(--size-radius-full);
1226
+ background: var(--input-radio-container-background-default);
1227
+ cursor: pointer;
1228
+ }
1229
+
1230
+ .radio::after {
1231
+ content: "";
1232
+ display: block;
1233
+ inline-size: 0;
1234
+ block-size: 0;
1235
+ border-radius: var(--size-radius-full);
1236
+ background: currentColor;
1237
+ transition: all 120ms ease;
1238
+ }
1239
+
1240
+ .radio:checked,
1241
+ .radio.is-checked {
1242
+ border-color: var(--input-radio-border-color-active);
1243
+ background: var(--input-radio-container-background-default);
1244
+ color: var(--input-radio-text-color-active);
1245
+ }
1246
+
1247
+ .radio:checked::after,
1248
+ .radio.is-checked::after {
1249
+ inline-size: 0.5rem;
1250
+ block-size: 0.5rem;
1251
+ background: var(--input-radio-border-color-active);
1252
+ }
1253
+
1254
+ .radio:hover,
1255
+ .radio.is-hover {
1256
+ background:
1257
+ linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1258
+ var(--input-radio-container-background-hover);
1259
+ color: var(--input-radio-text-color-hover);
1260
+ border-color: var(--input-radio-border-color-hover);
1261
+ border-width: var(--radio-border-size-hover);
1262
+ }
1263
+
1264
+ .radio:checked:hover,
1265
+ .radio.is-checked.is-hover {
1266
+ background:
1267
+ linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1268
+ var(--input-radio-container-background-default);
1269
+ border-color: var(--input-radio-border-color-hover);
1270
+ border-width: var(--radio-border-size-hover);
1271
+ }
1272
+
1273
+ .radio:active,
1274
+ .radio.is-active {
1275
+ background:
1276
+ linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1277
+ var(--input-radio-container-background-default);
1278
+ border-color: var(--input-radio-border-color-active);
1279
+ border-width: var(--size-border-200);
1280
+ }
1281
+
1282
+ .radio:checked:active,
1283
+ .radio.is-checked.is-active {
1284
+ background:
1285
+ linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1286
+ var(--input-radio-container-background-default);
1287
+ border-color: var(--input-radio-border-color-active);
1288
+ }
1289
+
1290
+ .radio:focus-visible,
1291
+ .radio.is-focus-visible {
1292
+ border-color: var(--input-radio-border-color-focus);
1293
+ outline: none;
1294
+ box-shadow: 0 0 0 var(--shadow-focus, 0) var(--color-focus, transparent);
1295
+ }
1296
+
1297
+ .radio:disabled,
1298
+ .radio.is-disabled {
1299
+ border-width: var(--radio-border-size-disabled);
1300
+ border-color: var(--input-radio-border-color-disabled);
1301
+ background: var(--input-radio-container-background-disabled);
1302
+ color: var(--input-radio-text-color-disabled);
1060
1303
  cursor: not-allowed;
1061
1304
  }
1062
1305
  }
@@ -1215,3 +1458,52 @@
1215
1458
  background: var(--color-fill-brand);
1216
1459
  }
1217
1460
  }
1461
+ @layer components {
1462
+ .badge {
1463
+ display: inline-flex;
1464
+ align-items: center;
1465
+ gap: var(--badge-gap, 0.25rem);
1466
+ border-radius: var(--badge-border-radius, 625rem);
1467
+ font-family: var(--badge-font-family, inherit);
1468
+ font-weight: var(--badge-font-weight, 700);
1469
+ white-space: nowrap;
1470
+ background: var(--badge-default-container-background);
1471
+ color: var(--badge-default-text-color);
1472
+ font-size: var(--badge-font-size-md);
1473
+ line-height: var(--badge-line-height-md);
1474
+ padding-inline: var(--badge-padding-inline-md);
1475
+ padding-block: var(--badge-padding-block-md);
1476
+ }
1477
+
1478
+ /* ── Sizes ── */
1479
+
1480
+ .badge.sm {
1481
+ font-size: var(--badge-font-size-sm);
1482
+ line-height: var(--badge-line-height-sm);
1483
+ padding-inline: var(--badge-padding-inline-sm);
1484
+ padding-block: var(--badge-padding-block-sm);
1485
+ }
1486
+
1487
+ /* ── Variants ── */
1488
+
1489
+ .badge.brand {
1490
+ background: var(--badge-brand-container-background);
1491
+ color: var(--badge-brand-text-color);
1492
+ }
1493
+
1494
+ .badge.success {
1495
+ background: var(--badge-success-container-background);
1496
+ color: var(--badge-success-text-color);
1497
+ }
1498
+
1499
+ .badge.danger {
1500
+ background: var(--badge-danger-container-background);
1501
+ color: var(--badge-danger-text-color);
1502
+ }
1503
+
1504
+ /* ── Icon slot ── */
1505
+
1506
+ .badge > .icon {
1507
+ flex: 0 0 auto;
1508
+ }
1509
+ }