ui-foundations 0.4.1 → 0.6.0

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 (51) hide show
  1. package/README.md +8 -7
  2. package/dist/core/index.css +1 -0
  3. package/dist/macros/ui.njk +61 -0
  4. package/dist/main.css +528 -89
  5. package/dist/react/accordion.js +36 -0
  6. package/dist/react/avatar.js +34 -0
  7. package/dist/react/button.js +1 -12
  8. package/dist/react/checkbox.js +3 -20
  9. package/dist/react/divider.js +31 -0
  10. package/dist/react/icon.js +1 -12
  11. package/dist/react/index.js +6 -0
  12. package/dist/react/radio.js +3 -20
  13. package/dist/react/switch.js +3 -20
  14. package/dist/react/tabs.js +72 -0
  15. package/dist/react/textarea.js +38 -0
  16. package/dist/react/tooltip.js +25 -0
  17. package/dist/react/warn-dev.js +15 -0
  18. package/dist/tokens/css/appearance-modes.tokens.mode-dark.css +6 -6
  19. package/dist/tokens/css/appearance-modes.tokens.mode-light.css +1 -1
  20. package/dist/tokens/css/components-ui.tokens.css +66 -68
  21. package/dist/tokens/css/core-primitives.tokens.css +72 -1
  22. package/dist/tokens/css/semantics-roles.tokens.css +1 -1
  23. package/dist/tokens/css/themes-brands.tokens.brand-a.css +11 -11
  24. package/dist/tokens/css/themes-brands.tokens.brand-b.css +1 -1
  25. package/dist/tokens/css/themes-brands.tokens.brand-c.css +22 -0
  26. package/dist/tokens/json/components-ui.tokens.json +275 -277
  27. package/dist/tokens/json/core-primitives.tokens.json +302 -0
  28. package/dist/tokens/json/themes-brands.tokens.brand-a.json +10 -10
  29. package/dist/tokens/json/themes-brands.tokens.brand-b.json +10 -10
  30. package/dist/tokens/json/themes-brands.tokens.brand-c.json +81 -0
  31. package/dist/tokens/tokens.yaml +1701 -583
  32. package/dist/tokens/ts/appearance-modes.tokens.mode-dark.ts +6 -6
  33. package/dist/tokens/ts/appearance-modes.tokens.mode-light.ts +1 -1
  34. package/dist/tokens/ts/components-ui.tokens.ts +67 -69
  35. package/dist/tokens/ts/core-primitives.tokens.ts +73 -2
  36. package/dist/tokens/ts/semantics-roles.tokens.ts +1 -1
  37. package/dist/tokens/ts/themes-brands.tokens.brand-a.ts +11 -11
  38. package/dist/tokens/ts/themes-brands.tokens.brand-b.ts +1 -1
  39. package/dist/tokens/ts/themes-brands.tokens.brand-c.ts +32 -0
  40. package/dist/ui/index.css +6 -0
  41. package/dist/ui/patterns/accordion.css +81 -0
  42. package/dist/ui/patterns/avatar.css +57 -0
  43. package/dist/ui/patterns/divider.css +25 -0
  44. package/dist/ui/patterns/tabs.css +71 -0
  45. package/dist/ui/patterns/textarea.css +50 -0
  46. package/dist/ui/patterns/tooltip.css +64 -0
  47. package/docs/agentic/README.md +1 -0
  48. package/docs/agentic/skills/component-accessibility-audit.md +132 -0
  49. package/docs/foundations/foundation-007-typography-selectors-and-specificity.md +1 -1
  50. package/package.json +2 -1
  51. package/dist/tokens/missing-tokens.json +0 -43
package/dist/main.css CHANGED
@@ -181,7 +181,7 @@
181
181
  }
182
182
  }
183
183
  /* Auto-generated design tokens from Figma */
184
- /* Generated on 2026-04-28T09:23:28.563Z */
184
+ /* Generated on 2026-05-22T09:23:10.621Z */
185
185
 
186
186
  :root {
187
187
  --color-neutral-100: rgb(230 230 230);
@@ -204,6 +204,16 @@
204
204
  --color-neutral-alpha-800: rgba(0 0 0 / 0.8);
205
205
  --color-neutral-alpha-900: rgba(0 0 0 / 0.9);
206
206
  --color-neutral-alpha-000: rgba(0 0 0 / 0);
207
+ --color-neutral-alpha-inverse-100: rgba(255 255 255 / 0.1);
208
+ --color-neutral-alpha-inverse-200: rgba(255 255 255 / 0.2);
209
+ --color-neutral-alpha-inverse-300: rgba(255 255 255 / 0.3);
210
+ --color-neutral-alpha-inverse-400: rgba(255 255 255 / 0.4);
211
+ --color-neutral-alpha-inverse-500: rgba(255 255 255 / 0.5);
212
+ --color-neutral-alpha-inverse-600: rgba(255 255 255 / 0.6);
213
+ --color-neutral-alpha-inverse-700: rgba(255 255 255 / 0.7);
214
+ --color-neutral-alpha-inverse-800: rgba(255 255 255 / 0.8);
215
+ --color-neutral-alpha-inverse-900: rgba(255 255 255 / 0.9);
216
+ --color-neutral-alpha-inverse-000: rgba(255 255 255 / 0);
207
217
  --color-neutral-000: rgb(255 255 255);
208
218
  --color-brand-b-purple-200: rgb(222 192 255);
209
219
  --color-brand-b-purple-300: rgb(196 143 255);
@@ -266,6 +276,67 @@
266
276
  --color-brand-a-sand-700: rgb(80 81 72);
267
277
  --color-brand-a-sand-800: rgb(52 52 47);
268
278
  --color-brand-a-sand-900: rgb(24 24 22);
279
+ --color-brand-c-blue-10: rgb(27 17 92);
280
+ --color-brand-c-blue-20: rgb(7 45 146);
281
+ --color-brand-c-blue-30: rgb(10 60 194);
282
+ --color-brand-c-blue-40: rgb(12 75 243);
283
+ --color-brand-c-blue-50: rgb(53 103 246);
284
+ --color-brand-c-blue-60: rgb(109 147 248);
285
+ --color-brand-c-blue-70: rgb(148 176 250);
286
+ --color-brand-c-blue-80: rgb(182 200 252);
287
+ --color-brand-c-blue-90: rgb(216 226 253);
288
+ --color-brand-c-blue-100: rgb(27 17 92);
289
+ --color-brand-c-coolblue-10: rgb(5 68 97);
290
+ --color-brand-c-coolblue-20: rgb(7 102 146);
291
+ --color-brand-c-coolblue-30: rgb(10 136 194);
292
+ --color-brand-c-coolblue-40: rgb(12 170 243);
293
+ --color-brand-c-coolblue-50: rgb(56 185 245);
294
+ --color-brand-c-coolblue-60: rgb(112 203 244);
295
+ --color-brand-c-coolblue-70: rgb(169 223 248);
296
+ --color-brand-c-coolblue-80: rgb(198 234 251);
297
+ --color-brand-c-coolblue-90: rgb(226 244 253);
298
+ --color-brand-c-coolblue-100: rgb(11 68 97);
299
+ --color-brand-c-green-10: rgb(5 66 61);
300
+ --color-brand-c-green-20: rgb(36 111 73);
301
+ --color-brand-c-green-30: rgb(43 161 104);
302
+ --color-brand-c-green-40: rgb(48 182 117);
303
+ --color-brand-c-green-50: rgb(97 196 141);
304
+ --color-brand-c-green-60: rgb(135 210 166);
305
+ --color-brand-c-green-70: rgb(169 224 191);
306
+ --color-brand-c-green-80: rgb(197 228 205);
307
+ --color-brand-c-green-90: rgb(223 246 235);
308
+ --color-brand-c-green-100: rgb(239 251 245);
309
+ --color-brand-c-red-10: rgb(96 6 9);
310
+ --color-brand-c-red-20: rgb(144 9 14);
311
+ --color-brand-c-red-30: rgb(192 12 18);
312
+ --color-brand-c-red-40: rgb(240 15 23);
313
+ --color-brand-c-red-50: rgb(242 58 65);
314
+ --color-brand-c-red-60: rgb(246 111 116);
315
+ --color-brand-c-red-70: rgb(248 150 153);
316
+ --color-brand-c-red-80: rgb(250 183 185);
317
+ --color-brand-c-red-90: rgb(253 226 227);
318
+ --color-brand-c-red-100: rgb(254 236 236);
319
+ --color-brand-c-orange-10: rgb(102 61 0);
320
+ --color-brand-c-orange-20: rgb(153 92 0);
321
+ --color-brand-c-orange-30: rgb(204 122 0);
322
+ --color-brand-c-orange-40: rgb(255 153 0);
323
+ --color-brand-c-orange-50: rgb(255 171 46);
324
+ --color-brand-c-orange-60: rgb(255 194 102);
325
+ --color-brand-c-orange-70: rgb(255 210 143);
326
+ --color-brand-c-orange-80: rgb(255 224 178);
327
+ --color-brand-c-orange-90: rgb(255 239 214);
328
+ --color-brand-c-orange-100: rgb(255 247 235);
329
+ --color-brand-c-purple-10: rgb(57 17 92);
330
+ --color-brand-c-purple-20: rgb(81 7 146);
331
+ --color-brand-c-purple-30: rgb(108 10 194);
332
+ --color-brand-c-purple-40: rgb(135 12 243);
333
+ --color-brand-c-purple-50: rgb(156 53 246);
334
+ --color-brand-c-purple-60: rgb(183 109 248);
335
+ --color-brand-c-purple-70: rgb(202 148 250);
336
+ --color-brand-c-purple-80: rgb(219 182 252);
337
+ --color-brand-c-purple-90: rgb(236 216 253);
338
+ --color-brand-c-purple-100: rgb(245 236 254);
339
+ --color-brand-c-midnight-10: rgb(11 9 45);
269
340
  --font-size-md: 1rem;
270
341
  --font-size-xs: .75rem;
271
342
  --font-size-sm: .875rem;
@@ -350,7 +421,7 @@
350
421
  --zindex-hidden: -1;
351
422
  }
352
423
  /* Auto-generated design tokens from Figma */
353
- /* Generated on 2026-04-28T09:23:28.564Z */
424
+ /* Generated on 2026-05-22T09:23:10.624Z */
354
425
 
355
426
  :root {
356
427
  --typography-heading-font-family: var(--brand-font-lead);
@@ -386,7 +457,7 @@
386
457
  --corner-checkbox-radius: var(--brand-corner-input);
387
458
  }
388
459
  /* Auto-generated design tokens from Figma */
389
- /* Generated on 2026-04-28T09:23:28.559Z */
460
+ /* Generated on 2026-05-22T09:23:10.611Z */
390
461
 
391
462
  :root {
392
463
  --button-border-size-hover: var(--size-border-100);
@@ -448,107 +519,105 @@
448
519
  --input-text-text-color-default: var(--color-text-default);
449
520
  --input-text-text-color-hover: var(--color-text-default);
450
521
  --input-text-text-color-active: var(--color-text-default);
451
- --input-text-border-color-default: var(--color-border-default);
452
- --input-text-border-color-hover: var(--color-border-brand);
453
- --input-text-border-color-active: var(--color-border-brand);
454
- --input-text-border-color-focus: var(--color-border-brand);
455
- --input-text-border-color-invalid: var(--color-border-danger);
456
- --input-text-border-color-valid: var(--color-border-strong);
457
- --input-text-container-background-default: var(--color-fill-surface);
458
- --input-text-container-background-hover: var(--color-fill-surface);
459
- --input-text-container-background-focus: var(--color-fill-surface);
460
- --input-text-container-background-active: var(--color-fill-surface);
522
+ --input-text-text-color-disabled: var(--color-text-disabled);
461
523
  --input-text-text-color-placeholder: var(--color-text-subtle);
462
- --input-text-height-min: 2.5rem;
524
+ --input-border-border-color-default: var(--color-border-default);
525
+ --input-border-border-color-hover: var(--color-border-brand);
526
+ --input-border-border-color-active: var(--color-border-brand);
527
+ --input-border-border-color-focus: var(--color-border-brand);
528
+ --input-border-border-size-default: var(--size-border-100);
529
+ --input-border-border-size-hover: var(--size-border-100);
530
+ --input-border-border-size-active: var(--size-border-200);
531
+ --input-border-border-radius: var(--brand-corner-input);
532
+ --input-border-border-color-disabled: var(--color-border-disabled);
533
+ --input-border-border-color-invalid: var(--color-border-danger);
534
+ --input-border-border-color-valid: var(--color-border-strong);
463
535
  --input-font-family: var(--brand-font-base);
464
536
  --input-font-weight: var(--typography-body-font-weight);
465
537
  --input-font-size: var(--typography-label-font-size);
466
538
  --input-line-height: var(--typography-body-line-height);
467
- --input-border-size-default: var(--size-border-100);
468
- --input-border-size-hover: var(--size-border-100);
469
- --input-border-size-active: var(--size-border-200);
470
- --input-border-radius: var(--brand-corner-input);
539
+ --input-container-background-default: var(--color-fill-surface);
540
+ --input-container-background-hover: var(--color-fill-surface);
541
+ --input-container-background-focus: var(--color-fill-surface);
542
+ --input-container-background-active: var(--color-fill-surface);
543
+ --input-container-background-disabled: var(--color-fill-disabled);
471
544
  --input-padding-inline: var(--size-spacing-200);
472
545
  --input-padding-inline-icon-only: var(--size-spacing-200);
473
546
  --input-padding-block: var(--size-spacing-200);
474
547
  --input-gap: var(--size-spacing-200);
475
- --input-text-color-disabled: var(--color-text-disabled);
476
- --input-border-color-disabled: var(--color-border-disabled);
477
- --input-container-background-disabled: var(--color-fill-disabled);
478
548
  --input-overlay-hover: var(--color-transparent);
479
549
  --input-overlay-active: var(--color-transparent);
480
550
  --input-height: 2.5rem;
481
- --input-checkbox-text-color-default: var(--color-text-default);
482
- --input-checkbox-text-color-hover: var(--color-text-strong);
483
- --input-checkbox-text-color-active: var(--color-text-inverse);
484
- --input-checkbox-border-color-default: var(--color-border-subtle);
485
- --input-checkbox-border-color-hover: var(--color-border-strong);
486
- --input-checkbox-border-color-active: var(--color-border-brand);
487
- --input-checkbox-border-color-focus: var(--color-border-brand);
488
- --input-checkbox-border-color-invalid: var(--color-border-danger);
489
- --input-checkbox-border-color-valid: var(--color-border-strong);
490
- --input-checkbox-border-color-disabled: var(--color-border-disabled);
491
- --input-checkbox-container-background-default: var(--color-fill-surface);
492
- --input-checkbox-container-background-hover: var(--color-fill-surface);
493
- --input-checkbox-container-background-focus: var(--color-fill-surface);
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);
551
+ --input-height-min: 2.5rem;
552
+ --form-group-gap: var(--size-spacing-400);
553
+ --form-group-title-color: var(--color-text-default);
554
+ --form-padding-inline: var(--size-spacing-400);
555
+ --form-padding-block: var(--size-spacing-400);
556
+ --form-border-radius: var(--brand-corner-card);
557
+ --form-gap: var(--size-spacing-400);
558
+ --form-field-gap: var(--size-spacing-200);
559
+ --form-field-helper-text-color-default: var(--color-text-subtle);
560
+ --form-field-helper-text-color-invalid: var(--color-text-danger);
561
+ --form-container-background: var(--color-fill-surface);
562
+ --form-container-border-color: var(--color-border-subtle);
563
+ --form-border-size: var(--size-border-100);
564
+ --checkbox-text-color-default: var(--color-text-default);
565
+ --checkbox-text-color-hover: var(--color-text-strong);
566
+ --checkbox-text-color-active: var(--color-text-inverse);
567
+ --checkbox-border-color-default: var(--color-border-subtle);
568
+ --checkbox-border-color-hover: var(--color-border-strong);
569
+ --checkbox-border-color-active: var(--color-border-brand);
570
+ --checkbox-border-color-focus: var(--color-border-brand);
571
+ --checkbox-border-color-invalid: var(--color-border-danger);
572
+ --checkbox-border-color-valid: var(--color-border-strong);
573
+ --checkbox-border-color-disabled: var(--color-border-disabled);
497
574
  --checkbox-border-size-hover: var(--size-border-200);
498
575
  --checkbox-border-size-disabled: var(--size-border-000);
499
576
  --checkbox-border-size-default: var(--size-border-100);
577
+ --checkbox-container-background-default: var(--color-fill-surface);
578
+ --checkbox-container-background-hover: var(--color-fill-surface);
579
+ --checkbox-container-background-focus: var(--color-fill-surface);
580
+ --checkbox-container-background-active: var(--color-fill-brand);
581
+ --checkbox-container-background-disabled: var(--color-fill-disabled);
582
+ --checkbox-text-color-disabled: var(--color-text-disabled);
500
583
  --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
584
  --input-radio-text-color-disabled: var(--color-text-disabled);
504
585
  --input-radio-border-color-default: var(--color-border-subtle);
505
586
  --input-radio-border-color-hover: var(--color-border-strong);
506
587
  --input-radio-border-color-active: var(--color-border-brand);
507
- --input-radio-border-color-focus: var(--color-border-brand);
508
588
  --input-radio-border-color-disabled: var(--color-border-disabled);
509
589
  --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
590
  --input-radio-container-background-disabled: var(--color-fill-disabled);
514
591
  --radio-border-size-default: var(--size-border-100);
515
592
  --radio-border-size-hover: var(--size-border-200);
516
593
  --radio-border-size-disabled: var(--size-border-000);
517
- --form-group-gap: var(--size-spacing-400);
518
- --form-group-title-color: var(--color-text-default);
519
- --form-padding-inline: var(--size-spacing-400);
520
- --form-padding-block: var(--size-spacing-400);
521
- --form-border-radius: var(--brand-corner-card);
522
- --form-gap: var(--size-spacing-400);
523
- --form-field-gap: var(--size-spacing-200);
524
- --form-field-helper-text-color-default: var(--color-text-subtle);
525
- --form-field-helper-text-color-invalid: var(--color-text-danger);
526
- --form-container-background: var(--color-fill-surface);
527
- --form-container-border-color: var(--color-border-subtle);
528
- --form-border-size: var(--size-border-100);
529
- --badge-default-container-background: var(--color-fill-subtle);
530
594
  --badge-default-text-color: var(--color-text-default);
531
- --badge-brand-container-background: var(--color-fill-brand);
595
+ --badge-default-border-color: var(--color-transparent);
596
+ --badge-default-container-background: var(--color-fill-subtle);
532
597
  --badge-brand-text-color: var(--color-text-inverse);
533
- --badge-success-container-background: var(--color-fill-success);
598
+ --badge-brand-border-color: var(--color-transparent);
599
+ --badge-brand-container-background: var(--color-fill-brand);
534
600
  --badge-success-text-color: var(--color-text-inverse);
601
+ --badge-success-border-color: var(--color-transparent);
602
+ --badge-success-container-background: var(--color-fill-success);
603
+ --badge-font-family: var(--brand-font-lead);
604
+ --badge-font-weight: var(--typography-label-font-weight);
605
+ --badge-font-size: var(--typography-label-font-size);
606
+ --badge-line-height: var(--typography-label-line-height);
607
+ --badge-border-size-default: var(--size-border-100);
608
+ --badge-border-radius: var(--brand-corner-input);
609
+ --badge-padding-inline: var(--size-spacing-400);
610
+ --badge-padding-inline-icon-only: var(--size-spacing-200);
611
+ --badge-padding-block: var(--size-spacing-200);
612
+ --badge-gap: var(--size-spacing-200);
613
+ --badge-height-min: 2.5rem;
614
+ --badge-width-min: 2.5rem;
535
615
  --badge-danger-container-background: var(--color-fill-danger);
616
+ --badge-danger-border-color: var(--color-transparent);
536
617
  --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);
549
618
  }
550
619
  /* Auto-generated design tokens from Figma */
551
- /* Generated on 2026-04-28T09:23:28.554Z */
620
+ /* Generated on 2026-05-22T09:23:10.603Z */
552
621
 
553
622
  :root[data-mode="dark"] {
554
623
  --color-text-default: var(--color-neutral-800);
@@ -561,7 +630,7 @@
561
630
  --color-text-success: var(--brand-color-functional-success);
562
631
  --color-fill-surface: var(--color-neutral-1000);
563
632
  --color-fill-disabled: var(--color-neutral-300);
564
- --color-fill-hover: var(--color-neutral-alpha-500);
633
+ --color-fill-hover: var(--color-neutral-alpha-inverse-100);
565
634
  --color-fill-brand: var(--brand-color-primary);
566
635
  --color-fill-subtle: var(--brand-color-subtle);
567
636
  --color-fill-active: var(--brand-color-accent);
@@ -573,14 +642,14 @@
573
642
  --color-border-brand: var(--brand-color-primary);
574
643
  --color-border-disabled: var(--color-neutral-500);
575
644
  --color-border-danger: var(--brand-color-functional-danger);
576
- --color-overlay-backdrop: var(--color-neutral-alpha-400);
577
- --color-overlay-hover: var(--color-neutral-alpha-200);
578
- --color-overlay-active: var(--color-neutral-alpha-400);
579
- --color-overlay-selected: var(--color-neutral-alpha-600);
645
+ --color-overlay-backdrop: var(--color-neutral-alpha-inverse-400);
646
+ --color-overlay-hover: var(--color-neutral-alpha-inverse-100);
647
+ --color-overlay-active: var(--color-neutral-alpha-inverse-200);
648
+ --color-overlay-selected: var(--color-neutral-alpha-inverse-300);
580
649
  --color-focus: var(--brand-color-primary-dark);
581
650
  }
582
651
  /* Auto-generated design tokens from Figma */
583
- /* Generated on 2026-04-28T09:23:28.552Z */
652
+ /* Generated on 2026-05-22T09:23:10.601Z */
584
653
 
585
654
  :root {
586
655
  --color-text-default: var(--color-neutral-800);
@@ -612,29 +681,29 @@
612
681
  --color-focus: var(--brand-color-primary);
613
682
  }
614
683
  /* Auto-generated design tokens from Figma */
615
- /* Generated on 2026-04-28T09:23:28.565Z */
684
+ /* Generated on 2026-05-22T09:23:10.626Z */
616
685
 
617
686
  :root[data-brand="a"] {
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);
687
+ --brand-color-functional-success: var(--color-brand-c-green-30);
688
+ --brand-color-functional-danger: var(--color-brand-c-red-30);
689
+ --brand-color-functional-base: var(--color-brand-c-blue-10);
690
+ --brand-color-functional-base-dark: var(--color-brand-c-midnight-10);
691
+ --brand-color-primary: var(--color-brand-c-blue-40);
692
+ --brand-color-accent: var(--color-brand-c-coolblue-60);
693
+ --brand-color-primary-dark: var(--color-brand-c-blue-10);
694
+ --brand-color-accent-dark: var(--color-brand-c-coolblue-10);
626
695
  --brand-color-subtle: var(--color-neutral-500);
627
696
  --brand-color-subtle-dark: var(--color-neutral-800);
628
697
  --brand-color-subtle-light: var(--color-neutral-200);
629
698
  --brand-font-base: var(--font-family-sans);
630
699
  --brand-font-lead: var(--font-family-serif);
631
- --brand-corner-button: var(--size-radius-700);
632
- --brand-corner-card: var(--size-radius-200);
700
+ --brand-corner-button: var(--size-radius-full);
701
+ --brand-corner-card: var(--size-radius-300);
633
702
  --brand-corner-modal: var(--size-radius-400);
634
703
  --brand-corner-input: var(--size-radius-200);
635
704
  }
636
705
  /* Auto-generated design tokens from Figma */
637
- /* Generated on 2026-04-28T09:23:28.567Z */
706
+ /* Generated on 2026-05-22T09:23:10.628Z */
638
707
 
639
708
  :root[data-brand="b"] {
640
709
  --brand-color-functional-success: var(--color-brand-b-green-600);
@@ -655,6 +724,28 @@
655
724
  --brand-corner-modal: var(--size-radius-200);
656
725
  --brand-corner-input: var(--size-radius-000);
657
726
  }
727
+ /* Auto-generated design tokens from Figma */
728
+ /* Generated on 2026-05-22T09:23:10.629Z */
729
+
730
+ :root[data-brand="c"] {
731
+ --brand-color-functional-success: var(--color-brand-a-green-600);
732
+ --brand-color-functional-danger: var(--color-brand-a-red-600);
733
+ --brand-color-functional-base: var(--color-brand-a-green-700);
734
+ --brand-color-functional-base-dark: var(--color-brand-a-green-900);
735
+ --brand-color-primary: var(--color-brand-a-sand-700);
736
+ --brand-color-accent: var(--color-brand-a-green-400);
737
+ --brand-color-primary-dark: var(--color-brand-a-sand-900);
738
+ --brand-color-accent-dark: var(--color-brand-a-green-600);
739
+ --brand-color-subtle: var(--color-neutral-500);
740
+ --brand-color-subtle-dark: var(--color-neutral-800);
741
+ --brand-color-subtle-light: var(--color-neutral-200);
742
+ --brand-font-base: var(--font-family-sans);
743
+ --brand-font-lead: var(--font-family-serif);
744
+ --brand-corner-button: var(--size-radius-700);
745
+ --brand-corner-card: var(--size-radius-200);
746
+ --brand-corner-modal: var(--size-radius-400);
747
+ --brand-corner-input: var(--size-radius-200);
748
+ }
658
749
  @layer themes {
659
750
  :root {
660
751
  color-scheme: light dark;
@@ -1507,3 +1598,351 @@
1507
1598
  flex: 0 0 auto;
1508
1599
  }
1509
1600
  }
1601
+ @layer components {
1602
+ .divider {
1603
+ border: none;
1604
+ margin: 0;
1605
+ padding: 0;
1606
+ background: var(--divider-color, var(--color-border-default));
1607
+ block-size: var(--size-border-100);
1608
+ inline-size: 100%;
1609
+ align-self: stretch;
1610
+ }
1611
+
1612
+ /* ── Vertical orientation ── */
1613
+
1614
+ .divider[aria-orientation="vertical"] {
1615
+ block-size: auto;
1616
+ inline-size: var(--size-border-100);
1617
+ align-self: stretch;
1618
+ }
1619
+
1620
+ /* ── Subtle variant ── */
1621
+
1622
+ .divider.subtle {
1623
+ --divider-color: var(--color-border-subtle);
1624
+ }
1625
+ }
1626
+ @layer components {
1627
+ .textarea {
1628
+ display: block;
1629
+ inline-size: 100%;
1630
+ min-block-size: calc(var(--line-height-md) * 3 + var(--size-spacing-300) * 2);
1631
+ padding-inline: var(--size-spacing-300);
1632
+ padding-block: var(--size-spacing-300);
1633
+ font-family: var(--font-family-sans);
1634
+ font-size: var(--font-size-md);
1635
+ line-height: var(--line-height-md);
1636
+ color: var(--color-text-default);
1637
+ background: var(--color-fill-surface);
1638
+ border: var(--size-border-100) solid var(--color-border-default);
1639
+ border-radius: var(--size-radius-300);
1640
+ resize: vertical;
1641
+ transition: border-color 0.15s ease;
1642
+ }
1643
+
1644
+ .textarea::placeholder {
1645
+ color: var(--color-text-disabled);
1646
+ }
1647
+
1648
+ .textarea:hover,
1649
+ .textarea.is-hover {
1650
+ border-color: var(--color-border-strong);
1651
+ }
1652
+
1653
+ .textarea:focus-visible,
1654
+ .textarea.is-focus-visible {
1655
+ border-color: var(--color-focus);
1656
+ outline: none;
1657
+ box-shadow: 0 0 0 var(--shadow-focus) var(--color-focus);
1658
+ }
1659
+
1660
+ .textarea:disabled,
1661
+ .textarea.is-disabled {
1662
+ color: var(--color-text-disabled);
1663
+ background: var(--color-fill-disabled);
1664
+ border-color: var(--color-border-disabled);
1665
+ cursor: not-allowed;
1666
+ resize: none;
1667
+ }
1668
+
1669
+ .textarea[readonly] {
1670
+ background: var(--color-fill-surface);
1671
+ border-color: var(--color-border-default);
1672
+ cursor: default;
1673
+ resize: none;
1674
+ }
1675
+ }
1676
+ @layer components {
1677
+ .avatar {
1678
+ display: inline-flex;
1679
+ align-items: center;
1680
+ justify-content: center;
1681
+ border-radius: var(--size-radius-full);
1682
+ overflow: hidden;
1683
+ background: var(--color-fill-subtle);
1684
+ color: var(--color-text-default);
1685
+ font-family: var(--font-family-sans);
1686
+ font-weight: var(--font-weight-600);
1687
+ inline-size: 2.5rem;
1688
+ block-size: 2.5rem;
1689
+ font-size: var(--font-size-sm);
1690
+ }
1691
+
1692
+ /* ── Sizes ── */
1693
+
1694
+ .avatar.xs {
1695
+ inline-size: 1.5rem;
1696
+ block-size: 1.5rem;
1697
+ font-size: var(--font-size-xs);
1698
+ }
1699
+
1700
+ .avatar.sm {
1701
+ inline-size: 2rem;
1702
+ block-size: 2rem;
1703
+ font-size: var(--font-size-xs);
1704
+ }
1705
+
1706
+ .avatar.lg {
1707
+ inline-size: 3rem;
1708
+ block-size: 3rem;
1709
+ font-size: var(--font-size-md);
1710
+ }
1711
+
1712
+ .avatar.xl {
1713
+ inline-size: 4rem;
1714
+ block-size: 4rem;
1715
+ font-size: var(--font-size-lg);
1716
+ }
1717
+
1718
+ /* ── Image ── */
1719
+
1720
+ .avatar > img {
1721
+ inline-size: 100%;
1722
+ block-size: 100%;
1723
+ object-fit: cover;
1724
+ }
1725
+
1726
+ /* ── Initials ── */
1727
+
1728
+ .avatar__initials {
1729
+ user-select: none;
1730
+ text-transform: uppercase;
1731
+ }
1732
+ }
1733
+ @layer components {
1734
+ .accordion {
1735
+ display: flex;
1736
+ flex-direction: column;
1737
+ border: var(--size-border-100) solid var(--color-border-default);
1738
+ border-radius: var(--size-radius-400);
1739
+ overflow: hidden;
1740
+ }
1741
+
1742
+ .accordion-item {
1743
+ border-block-start: var(--size-border-100) solid var(--color-border-default);
1744
+ }
1745
+
1746
+ .accordion-item:first-child {
1747
+ border-block-start: none;
1748
+ }
1749
+
1750
+ .accordion-item > summary {
1751
+ display: flex;
1752
+ align-items: center;
1753
+ gap: var(--size-spacing-200);
1754
+ padding-inline: var(--size-spacing-400);
1755
+ padding-block: var(--size-spacing-300);
1756
+ font-family: var(--font-family-sans);
1757
+ font-size: var(--font-size-md);
1758
+ font-weight: var(--font-weight-600);
1759
+ line-height: var(--line-height-md);
1760
+ color: var(--color-text-default);
1761
+ cursor: pointer;
1762
+ list-style: none;
1763
+ user-select: none;
1764
+ }
1765
+
1766
+ .accordion-item > summary::-webkit-details-marker {
1767
+ display: none;
1768
+ }
1769
+
1770
+ .accordion-item > summary::before {
1771
+ content: "";
1772
+ display: inline-block;
1773
+ inline-size: 0.5rem;
1774
+ block-size: 0.5rem;
1775
+ border-inline-end: var(--size-border-200) solid currentColor;
1776
+ border-block-end: var(--size-border-200) solid currentColor;
1777
+ transform: rotate(-45deg);
1778
+ transition: transform 0.2s ease;
1779
+ flex-shrink: 0;
1780
+ }
1781
+
1782
+ .accordion-item[open] > summary::before {
1783
+ transform: rotate(45deg);
1784
+ }
1785
+
1786
+ .accordion-item > summary:hover,
1787
+ .accordion-item > summary.is-hover {
1788
+ background: var(--color-fill-hover);
1789
+ }
1790
+
1791
+ .accordion-item > summary:focus-visible,
1792
+ .accordion-item > summary.is-focus-visible {
1793
+ outline: none;
1794
+ box-shadow: inset 0 0 0 var(--shadow-focus) var(--color-focus);
1795
+ }
1796
+
1797
+ .accordion-item__content {
1798
+ padding-inline: var(--size-spacing-400);
1799
+ padding-block: var(--size-spacing-300);
1800
+ font-family: var(--font-family-sans);
1801
+ font-size: var(--font-size-md);
1802
+ line-height: var(--line-height-md);
1803
+ color: var(--color-text-default);
1804
+ }
1805
+
1806
+ /* ── Disabled ── */
1807
+
1808
+ .accordion-item.is-disabled > summary {
1809
+ color: var(--color-text-disabled);
1810
+ cursor: not-allowed;
1811
+ pointer-events: none;
1812
+ }
1813
+ }
1814
+ @layer components {
1815
+ .tabs {
1816
+ display: flex;
1817
+ flex-direction: column;
1818
+ }
1819
+
1820
+ .tab-list {
1821
+ display: flex;
1822
+ gap: 0;
1823
+ border-block-end: var(--size-border-100) solid var(--color-border-default);
1824
+ }
1825
+
1826
+ .tab-list[aria-orientation="vertical"] {
1827
+ flex-direction: column;
1828
+ border-block-end: none;
1829
+ border-inline-end: var(--size-border-100) solid var(--color-border-default);
1830
+ }
1831
+
1832
+ .tab {
1833
+ display: inline-flex;
1834
+ align-items: center;
1835
+ justify-content: center;
1836
+ padding-inline: var(--size-spacing-400);
1837
+ padding-block: var(--size-spacing-300);
1838
+ font-family: var(--font-family-sans);
1839
+ font-size: var(--font-size-md);
1840
+ font-weight: var(--font-weight-500);
1841
+ line-height: var(--line-height-md);
1842
+ color: var(--color-text-default);
1843
+ background: transparent;
1844
+ border: none;
1845
+ border-block-end: var(--size-border-200) solid transparent;
1846
+ cursor: pointer;
1847
+ white-space: nowrap;
1848
+ transition: border-color 0.15s ease, color 0.15s ease;
1849
+ }
1850
+
1851
+ .tab:hover,
1852
+ .tab.is-hover {
1853
+ color: var(--color-text-brand);
1854
+ border-block-end-color: var(--color-border-subtle);
1855
+ }
1856
+
1857
+ .tab[aria-selected="true"],
1858
+ .tab.is-selected {
1859
+ color: var(--color-text-brand);
1860
+ font-weight: var(--font-weight-600);
1861
+ border-block-end-color: var(--color-border-brand);
1862
+ }
1863
+
1864
+ .tab:focus-visible,
1865
+ .tab.is-focus-visible {
1866
+ outline: none;
1867
+ box-shadow: inset 0 0 0 var(--shadow-focus) var(--color-focus);
1868
+ }
1869
+
1870
+ .tab:disabled,
1871
+ .tab.is-disabled {
1872
+ color: var(--color-text-disabled);
1873
+ cursor: not-allowed;
1874
+ border-block-end-color: transparent;
1875
+ }
1876
+
1877
+ .tab-panel {
1878
+ padding-block: var(--size-spacing-400);
1879
+ }
1880
+
1881
+ .tab-panel[hidden] {
1882
+ display: none;
1883
+ }
1884
+ }
1885
+ @layer components {
1886
+ .tooltip {
1887
+ position: absolute;
1888
+ z-index: var(--zindex-tooltip);
1889
+ max-inline-size: 15rem;
1890
+ padding-inline: var(--size-spacing-300);
1891
+ padding-block: var(--size-spacing-200);
1892
+ font-family: var(--font-family-sans);
1893
+ font-size: var(--font-size-sm);
1894
+ line-height: var(--line-height-sm);
1895
+ color: var(--color-text-inverse);
1896
+ background: var(--color-neutral-900);
1897
+ border-radius: var(--size-radius-300);
1898
+ pointer-events: none;
1899
+ opacity: 0;
1900
+ transition: opacity 0.15s ease;
1901
+ }
1902
+
1903
+ .tooltip.is-visible {
1904
+ opacity: 1;
1905
+ }
1906
+
1907
+ /* ── Placement ── */
1908
+
1909
+ .tooltip[data-placement="top"] {
1910
+ inset-block-end: 100%;
1911
+ inset-inline-start: 50%;
1912
+ transform: translateX(-50%);
1913
+ margin-block-end: var(--size-spacing-200);
1914
+ }
1915
+
1916
+ .tooltip[data-placement="bottom"] {
1917
+ inset-block-start: 100%;
1918
+ inset-inline-start: 50%;
1919
+ transform: translateX(-50%);
1920
+ margin-block-start: var(--size-spacing-200);
1921
+ }
1922
+
1923
+ .tooltip[data-placement="left"] {
1924
+ inset-inline-end: 100%;
1925
+ inset-block-start: 50%;
1926
+ transform: translateY(-50%);
1927
+ margin-inline-end: var(--size-spacing-200);
1928
+ }
1929
+
1930
+ .tooltip[data-placement="right"] {
1931
+ inset-inline-start: 100%;
1932
+ inset-block-start: 50%;
1933
+ transform: translateY(-50%);
1934
+ margin-inline-start: var(--size-spacing-200);
1935
+ }
1936
+
1937
+ /* ── Trigger wrapper ── */
1938
+
1939
+ .tooltip-trigger {
1940
+ position: relative;
1941
+ display: inline-flex;
1942
+ }
1943
+
1944
+ .tooltip-trigger:hover > .tooltip,
1945
+ .tooltip-trigger:focus-within > .tooltip {
1946
+ opacity: 1;
1947
+ }
1948
+ }