ui-foundations 0.4.1 → 0.7.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 (61) hide show
  1. package/LICENSE +73 -0
  2. package/README.md +49 -13
  3. package/dist/core/index.css +1 -0
  4. package/dist/macros/ui.njk +94 -0
  5. package/dist/main.css +723 -138
  6. package/dist/react/accordion.js +36 -0
  7. package/dist/react/avatar.js +34 -0
  8. package/dist/react/button.js +1 -12
  9. package/dist/react/checkbox.js +3 -20
  10. package/dist/react/divider.js +31 -0
  11. package/dist/react/form.js +111 -0
  12. package/dist/react/icon.js +1 -12
  13. package/dist/react/index.js +7 -0
  14. package/dist/react/input.js +7 -0
  15. package/dist/react/radio.js +3 -20
  16. package/dist/react/switch.js +3 -20
  17. package/dist/react/tabs.js +72 -0
  18. package/dist/react/textarea.js +45 -0
  19. package/dist/react/tooltip.js +25 -0
  20. package/dist/react/warn-dev.js +15 -0
  21. package/dist/tokens/css/appearance-modes.tokens.mode-dark.css +12 -6
  22. package/dist/tokens/css/appearance-modes.tokens.mode-light.css +7 -1
  23. package/dist/tokens/css/components-ui.tokens.css +93 -73
  24. package/dist/tokens/css/core-primitives.tokens.css +72 -1
  25. package/dist/tokens/css/semantics-roles.tokens.css +1 -1
  26. package/dist/tokens/css/themes-brands.tokens.brand-a.css +11 -11
  27. package/dist/tokens/css/themes-brands.tokens.brand-b.css +1 -1
  28. package/dist/tokens/css/themes-brands.tokens.brand-c.css +22 -0
  29. package/dist/tokens/json/appearance-modes.tokens.mode-dark.json +24 -0
  30. package/dist/tokens/json/appearance-modes.tokens.mode-light.json +24 -0
  31. package/dist/tokens/json/components-ui.tokens.json +403 -269
  32. package/dist/tokens/json/core-primitives.tokens.json +302 -0
  33. package/dist/tokens/json/themes-brands.tokens.brand-a.json +10 -10
  34. package/dist/tokens/json/themes-brands.tokens.brand-b.json +10 -10
  35. package/dist/tokens/json/themes-brands.tokens.brand-c.json +81 -0
  36. package/dist/tokens/tokens.yaml +2138 -578
  37. package/dist/tokens/ts/appearance-modes.tokens.mode-dark.ts +12 -6
  38. package/dist/tokens/ts/appearance-modes.tokens.mode-light.ts +7 -1
  39. package/dist/tokens/ts/components-ui.tokens.ts +94 -74
  40. package/dist/tokens/ts/core-primitives.tokens.ts +73 -2
  41. package/dist/tokens/ts/semantics-roles.tokens.ts +1 -1
  42. package/dist/tokens/ts/themes-brands.tokens.brand-a.ts +11 -11
  43. package/dist/tokens/ts/themes-brands.tokens.brand-b.ts +1 -1
  44. package/dist/tokens/ts/themes-brands.tokens.brand-c.ts +32 -0
  45. package/dist/ui/index.css +7 -0
  46. package/dist/ui/patterns/accordion.css +81 -0
  47. package/dist/ui/patterns/avatar.css +57 -0
  48. package/dist/ui/patterns/button.css +3 -3
  49. package/dist/ui/patterns/checkbox.css +28 -28
  50. package/dist/ui/patterns/divider.css +25 -0
  51. package/dist/ui/patterns/form.css +112 -0
  52. package/dist/ui/patterns/input.css +12 -12
  53. package/dist/ui/patterns/label.css +1 -1
  54. package/dist/ui/patterns/tabs.css +71 -0
  55. package/dist/ui/patterns/textarea.css +50 -0
  56. package/dist/ui/patterns/tooltip.css +64 -0
  57. package/docs/agentic/README.md +1 -0
  58. package/docs/agentic/skills/component-accessibility-audit.md +132 -0
  59. package/docs/foundations/foundation-007-typography-selectors-and-specificity.md +1 -1
  60. package/package.json +15 -3
  61. 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-06-06T14:29:01.194Z */
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-06-06T14:29:01.200Z */
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-06-06T14:29:01.180Z */
390
461
 
391
462
  :root {
392
463
  --button-border-size-hover: var(--size-border-100);
@@ -394,13 +465,13 @@
394
465
  --button-solid-border-color-hover: var(--color-border-brand);
395
466
  --button-solid-border-color-active: var(--color-border-brand);
396
467
  --button-solid-border-color-focus: var(--color-border-brand);
397
- --button-solid-text-color-default: var(--color-text-inverse);
468
+ --button-solid-text-color-default: var(--color-text-on-brand);
398
469
  --button-solid-container-background-default: var(--color-fill-brand);
399
470
  --button-solid-container-background-hover: var(--color-fill-brand);
400
471
  --button-solid-container-background-active: var(--color-fill-brand);
401
472
  --button-solid-container-background-focus: var(--color-fill-brand);
402
- --button-solid-text-color-hover: var(--color-text-inverse);
403
- --button-solid-text-color-active: var(--color-text-inverse);
473
+ --button-solid-text-color-hover: var(--color-text-on-brand);
474
+ --button-solid-text-color-active: var(--color-text-on-brand);
404
475
  --button-outline-border-color-default: var(--color-border-brand);
405
476
  --button-outline-border-color-hover: var(--color-border-brand);
406
477
  --button-outline-border-color-active: var(--color-border-brand);
@@ -445,75 +516,43 @@
445
516
  --modal-backdrop-color: var(--color-overlay-backdrop);
446
517
  --modal-surface-color: var(--color-fill-surface);
447
518
  --modal-surface-border-radius: var(--brand-corner-modal);
448
- --input-text-text-color-default: var(--color-text-default);
449
- --input-text-text-color-hover: var(--color-text-default);
450
- --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);
461
- --input-text-text-color-placeholder: var(--color-text-subtle);
462
- --input-text-height-min: 2.5rem;
463
- --input-font-family: var(--brand-font-base);
464
- --input-font-weight: var(--typography-body-font-weight);
465
- --input-font-size: var(--typography-label-font-size);
466
- --input-line-height: var(--typography-body-line-height);
519
+ --input-text-color-default: var(--color-text-default);
520
+ --input-text-color-hover: var(--color-text-brand);
521
+ --input-text-color-active: var(--color-text-default);
522
+ --input-text-color-disabled: var(--color-text-disabled);
523
+ --input-text-color-placeholder: var(--color-text-subtle);
524
+ --input-border-color-default: var(--color-border-default);
525
+ --input-border-color-hover: var(--color-border-brand);
526
+ --input-border-color-active: var(--color-border-brand);
527
+ --input-border-color-focus: var(--color-border-brand);
467
528
  --input-border-size-default: var(--size-border-100);
468
529
  --input-border-size-hover: var(--size-border-100);
469
530
  --input-border-size-active: var(--size-border-200);
470
531
  --input-border-radius: var(--brand-corner-input);
532
+ --input-border-color-disabled: var(--color-border-disabled);
533
+ --input-border-color-invalid: var(--color-border-danger);
534
+ --input-border-color-valid: var(--color-border-strong);
535
+ --input-font-family: var(--brand-font-base);
536
+ --input-font-weight: var(--typography-body-font-weight);
537
+ --input-font-size: var(--typography-label-font-size);
538
+ --input-line-height: var(--typography-body-line-height);
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);
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);
551
+ --input-height-min: 2.5rem;
552
+ --input-radio-text-color-active: var(--color-text-default);
501
553
  --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
554
  --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);
555
+ --input-radio-border-color-focus: var(--color-border-brand);
517
556
  --form-group-gap: var(--size-spacing-400);
518
557
  --form-group-title-color: var(--color-text-default);
519
558
  --form-padding-inline: var(--size-spacing-400);
@@ -526,29 +565,81 @@
526
565
  --form-container-background: var(--color-fill-surface);
527
566
  --form-container-border-color: var(--color-border-subtle);
528
567
  --form-border-size: var(--size-border-100);
529
- --badge-default-container-background: var(--color-fill-subtle);
568
+ --checkbox-text-color-default: var(--color-text-default);
569
+ --checkbox-text-color-hover: var(--color-text-brand);
570
+ --checkbox-text-color-active: var(--color-text-on-brand);
571
+ --checkbox-border-color-default: var(--color-border-subtle);
572
+ --checkbox-border-color-hover: var(--color-border-brand);
573
+ --checkbox-border-color-active: var(--color-border-brand);
574
+ --checkbox-border-color-focus: var(--color-border-brand);
575
+ --checkbox-border-color-invalid: var(--color-border-danger);
576
+ --checkbox-border-color-valid: var(--color-border-strong);
577
+ --checkbox-border-color-disabled: var(--color-border-disabled);
578
+ --checkbox-border-size-hover: var(--size-border-200);
579
+ --checkbox-border-size-disabled: var(--size-border-000);
580
+ --checkbox-border-size-default: var(--size-border-100);
581
+ --checkbox-container-background-default: var(--color-fill-surface);
582
+ --checkbox-container-background-hover: var(--color-fill-surface);
583
+ --checkbox-container-background-focus: var(--color-fill-surface);
584
+ --checkbox-container-background-active: var(--color-fill-brand);
585
+ --checkbox-container-background-disabled: var(--color-fill-disabled);
586
+ --checkbox-text-color-disabled: var(--color-text-disabled);
587
+ --input-radio-text-color-default: var(--color-text-default);
588
+ --input-radio-text-color-disabled: var(--color-text-disabled);
589
+ --input-radio-border-color-default: var(--color-border-subtle);
590
+ --input-radio-border-color-hover: var(--color-border-brand);
591
+ --input-radio-border-color-active: var(--color-border-brand);
592
+ --input-radio-border-color-disabled: var(--color-border-disabled);
593
+ --input-radio-container-background-default: var(--color-fill-surface);
594
+ --input-radio-container-background-disabled: var(--color-fill-disabled);
595
+ --radio-border-size-default: var(--size-border-100);
596
+ --radio-border-size-hover: var(--size-border-200);
597
+ --radio-border-size-disabled: var(--size-border-000);
530
598
  --badge-default-text-color: var(--color-text-default);
599
+ --badge-default-border-color: var(--color-transparent);
600
+ --badge-default-container-background: var(--color-fill-subtle);
601
+ --badge-brand-text-color: var(--color-text-on-brand);
602
+ --badge-brand-border-color: var(--color-transparent);
531
603
  --badge-brand-container-background: var(--color-fill-brand);
532
- --badge-brand-text-color: var(--color-text-inverse);
604
+ --badge-success-text-color: var(--color-text-on-success);
605
+ --badge-success-border-color: var(--color-transparent);
533
606
  --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);
607
+ --badge-font-family: var(--brand-font-lead);
608
+ --badge-font-weight: var(--typography-label-font-weight);
609
+ --badge-border-size-default: var(--size-border-100);
537
610
  --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
611
  --badge-padding-inline-md: var(--size-spacing-300);
546
- --badge-padding-block-sm: var(--size-spacing-000);
612
+ --badge-padding-inline-icon-only: var(--size-spacing-200);
547
613
  --badge-padding-block-md: var(--size-spacing-100);
548
614
  --badge-gap: var(--size-spacing-100);
615
+ --badge-height-min: 2.5rem;
616
+ --badge-width-min: 2.5rem;
617
+ --badge-danger-container-background: var(--color-fill-danger);
618
+ --badge-danger-border-color: var(--color-transparent);
619
+ --badge-danger-text-color: var(--color-text-on-danger);
620
+ --badge-font-size-sm: .75rem;
621
+ --badge-font-size-md: .875rem;
622
+ --badge-line-height-sm: 1rem;
623
+ --badge-line-height-md: 1.25rem;
624
+ --badge-padding-inline-sm: .5rem;
625
+ --badge-padding-block-sm: .125rem;
626
+ --switch-track-background-default: var(--color-fill-surface);
627
+ --switch-track-background-hover: var(--color-fill-surface);
628
+ --switch-track-background-active: var(--color-fill-brand);
629
+ --switch-track-background-disabled: var(--color-fill-disabled);
630
+ --switch-track-border-color-default: var(--color-border-default);
631
+ --switch-track-border-color-hover: var(--color-border-brand);
632
+ --switch-track-border-color-active: var(--color-border-brand);
633
+ --switch-track-border-color-disabled: var(--color-border-disabled);
634
+ --switch-thumb-background-default: var(--color-border-default);
635
+ --switch-thumb-background-hover: var(--color-border-brand);
636
+ --switch-thumb-background-active: var(--color-fill-surface);
637
+ --switch-thumb-background-disabled: var(--color-fill-surface);
638
+ --switch-text-color-default: var(--color-text-default);
639
+ --switch-text-color-disabled: var(--color-text-disabled);
549
640
  }
550
641
  /* Auto-generated design tokens from Figma */
551
- /* Generated on 2026-04-28T09:23:28.554Z */
642
+ /* Generated on 2026-06-06T14:29:01.170Z */
552
643
 
553
644
  :root[data-mode="dark"] {
554
645
  --color-text-default: var(--color-neutral-800);
@@ -559,9 +650,15 @@
559
650
  --color-text-strong: var(--color-neutral-1000);
560
651
  --color-text-danger: var(--brand-color-functional-danger);
561
652
  --color-text-success: var(--brand-color-functional-success);
653
+ --color-text-on-brand: var(--color-neutral-000);
654
+ --color-text-on-danger: var(--color-neutral-000);
655
+ --color-text-on-success: var(--color-neutral-000);
656
+ --color-text-on-subtle: var(--brand-color-primary-dark);
657
+ --color-text-on-active: var(--color-neutral-000);
658
+ --color-text-on-disabled: var(--color-neutral-800);
562
659
  --color-fill-surface: var(--color-neutral-1000);
563
660
  --color-fill-disabled: var(--color-neutral-300);
564
- --color-fill-hover: var(--color-neutral-alpha-500);
661
+ --color-fill-hover: var(--color-neutral-alpha-inverse-100);
565
662
  --color-fill-brand: var(--brand-color-primary);
566
663
  --color-fill-subtle: var(--brand-color-subtle);
567
664
  --color-fill-active: var(--brand-color-accent);
@@ -573,14 +670,14 @@
573
670
  --color-border-brand: var(--brand-color-primary);
574
671
  --color-border-disabled: var(--color-neutral-500);
575
672
  --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);
673
+ --color-overlay-backdrop: var(--color-neutral-alpha-inverse-400);
674
+ --color-overlay-hover: var(--color-neutral-alpha-inverse-100);
675
+ --color-overlay-active: var(--color-neutral-alpha-inverse-200);
676
+ --color-overlay-selected: var(--color-neutral-alpha-inverse-300);
580
677
  --color-focus: var(--brand-color-primary-dark);
581
678
  }
582
679
  /* Auto-generated design tokens from Figma */
583
- /* Generated on 2026-04-28T09:23:28.552Z */
680
+ /* Generated on 2026-06-06T14:29:01.166Z */
584
681
 
585
682
  :root {
586
683
  --color-text-default: var(--color-neutral-800);
@@ -591,6 +688,12 @@
591
688
  --color-text-strong: var(--color-neutral-1000);
592
689
  --color-text-danger: var(--brand-color-functional-danger);
593
690
  --color-text-success: var(--brand-color-functional-success);
691
+ --color-text-on-brand: var(--color-neutral-000);
692
+ --color-text-on-danger: var(--color-neutral-000);
693
+ --color-text-on-success: var(--color-neutral-000);
694
+ --color-text-on-subtle: var(--brand-color-primary);
695
+ --color-text-on-active: var(--color-neutral-000);
696
+ --color-text-on-disabled: var(--color-neutral-800);
594
697
  --color-fill-surface: var(--color-neutral-000);
595
698
  --color-fill-disabled: var(--color-neutral-300);
596
699
  --color-fill-hover: var(--color-neutral-alpha-500);
@@ -612,29 +715,29 @@
612
715
  --color-focus: var(--brand-color-primary);
613
716
  }
614
717
  /* Auto-generated design tokens from Figma */
615
- /* Generated on 2026-04-28T09:23:28.565Z */
718
+ /* Generated on 2026-06-06T14:29:01.202Z */
616
719
 
617
720
  :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);
721
+ --brand-color-functional-success: var(--color-brand-c-green-30);
722
+ --brand-color-functional-danger: var(--color-brand-c-red-30);
723
+ --brand-color-functional-base: var(--color-brand-c-blue-10);
724
+ --brand-color-functional-base-dark: var(--color-brand-c-midnight-10);
725
+ --brand-color-primary: var(--color-brand-c-blue-40);
726
+ --brand-color-accent: var(--color-brand-c-coolblue-60);
727
+ --brand-color-primary-dark: var(--color-brand-c-blue-10);
728
+ --brand-color-accent-dark: var(--color-brand-c-coolblue-10);
626
729
  --brand-color-subtle: var(--color-neutral-500);
627
730
  --brand-color-subtle-dark: var(--color-neutral-800);
628
731
  --brand-color-subtle-light: var(--color-neutral-200);
629
732
  --brand-font-base: var(--font-family-sans);
630
733
  --brand-font-lead: var(--font-family-serif);
631
- --brand-corner-button: var(--size-radius-700);
632
- --brand-corner-card: var(--size-radius-200);
734
+ --brand-corner-button: var(--size-radius-full);
735
+ --brand-corner-card: var(--size-radius-300);
633
736
  --brand-corner-modal: var(--size-radius-400);
634
737
  --brand-corner-input: var(--size-radius-200);
635
738
  }
636
739
  /* Auto-generated design tokens from Figma */
637
- /* Generated on 2026-04-28T09:23:28.567Z */
740
+ /* Generated on 2026-06-06T14:29:01.203Z */
638
741
 
639
742
  :root[data-brand="b"] {
640
743
  --brand-color-functional-success: var(--color-brand-b-green-600);
@@ -655,6 +758,28 @@
655
758
  --brand-corner-modal: var(--size-radius-200);
656
759
  --brand-corner-input: var(--size-radius-000);
657
760
  }
761
+ /* Auto-generated design tokens from Figma */
762
+ /* Generated on 2026-06-06T14:29:01.205Z */
763
+
764
+ :root[data-brand="c"] {
765
+ --brand-color-functional-success: var(--color-brand-a-green-600);
766
+ --brand-color-functional-danger: var(--color-brand-a-red-600);
767
+ --brand-color-functional-base: var(--color-brand-a-green-700);
768
+ --brand-color-functional-base-dark: var(--color-brand-a-green-900);
769
+ --brand-color-primary: var(--color-brand-a-sand-700);
770
+ --brand-color-accent: var(--color-brand-a-green-400);
771
+ --brand-color-primary-dark: var(--color-brand-a-sand-900);
772
+ --brand-color-accent-dark: var(--color-brand-a-green-600);
773
+ --brand-color-subtle: var(--color-neutral-500);
774
+ --brand-color-subtle-dark: var(--color-neutral-800);
775
+ --brand-color-subtle-light: var(--color-neutral-200);
776
+ --brand-font-base: var(--font-family-sans);
777
+ --brand-font-lead: var(--font-family-serif);
778
+ --brand-corner-button: var(--size-radius-700);
779
+ --brand-corner-card: var(--size-radius-200);
780
+ --brand-corner-modal: var(--size-radius-400);
781
+ --brand-corner-input: var(--size-radius-200);
782
+ }
658
783
  @layer themes {
659
784
  :root {
660
785
  color-scheme: light dark;
@@ -665,7 +790,7 @@
665
790
  .label-content {
666
791
  display: inline-flex;
667
792
  align-items: center;
668
- gap: var(--label-gap, 0.5em);
793
+ gap: var(--typography-label-gap, 0.5em);
669
794
  line-height: inherit;
670
795
  }
671
796
 
@@ -721,7 +846,7 @@
721
846
  min-height: var(--button-height-min);
722
847
  background: var(--button-solid-container-background-default);
723
848
  border-color: var(--button-solid-border-color-default);
724
- border-width: var(--button-solid-border-size);
849
+ border-width: var(--button-border-size-default);
725
850
  border-style: solid;
726
851
  color: var(--button-solid-text-color-default);
727
852
  border-radius: var(--button-border-radius);
@@ -781,7 +906,7 @@
781
906
  .button.outline {
782
907
  background: var(--button-outline-container-background-default);
783
908
  border-color: var(--button-outline-border-color-default);
784
- border-width: var(--button-outline-border-size);
909
+ border-width: var(--button-border-size-default);
785
910
  border-style: solid;
786
911
  color: var(--button-outline-text-color-default);
787
912
  }
@@ -820,7 +945,7 @@
820
945
  .button.ghost {
821
946
  background: var(--button-ghost-container-background-default);
822
947
  border-color: var(--button-ghost-border-color-default);
823
- border-width: var(--button-ghost-border-size);
948
+ border-width: var(--button-border-size-default);
824
949
  border-style: solid;
825
950
  color: var(--button-ghost-text-color-default);
826
951
  }
@@ -961,25 +1086,25 @@
961
1086
  font-weight: var(--input-font-weight);
962
1087
  font-size: var(--input-font-size);
963
1088
  line-height: var(--input-line-height, var(--button-line-height, 1.5));
964
- color: var(--input-text-text-color-default);
965
- background: var(--input-text-container-background-default);
1089
+ color: var(--input-text-color-default);
1090
+ background: var(--input-container-background-default);
966
1091
  border-style: solid;
967
1092
  border-width: var(--input-border-size-default);
968
- border-color: var(--input-text-border-color-default);
1093
+ border-color: var(--input-border-color-default);
969
1094
  border-radius: var(--input-border-radius);
970
1095
  padding-inline: var(--input-padding-inline);
971
1096
  padding-block: var(--input-padding-block);
972
1097
  }
973
1098
 
974
1099
  .input::placeholder {
975
- color: var(--input-text-text-color-placeholder);
1100
+ color: var(--input-text-color-placeholder);
976
1101
  }
977
1102
 
978
1103
  .input:hover,
979
1104
  .input.is-hover {
980
1105
  background:
981
1106
  linear-gradient(0deg, var(--input-overlay-hover), var(--input-overlay-hover)),
982
- var(--input-text-container-background-default);
1107
+ var(--input-container-background-default);
983
1108
  border-width: var(--input-border-size-hover);
984
1109
  padding-inline: calc(
985
1110
  var(--input-padding-inline) + var(--input-border-size-default) -
@@ -989,15 +1114,15 @@
989
1114
  var(--input-padding-block) + var(--input-border-size-default) -
990
1115
  var(--input-border-size-hover)
991
1116
  );
992
- border-color: var(--input-text-border-color-hover);
993
- color: var(--input-text-text-color-hover);
1117
+ border-color: var(--input-border-color-hover);
1118
+ color: var(--input-text-color-hover);
994
1119
  }
995
1120
 
996
1121
  .input:active,
997
1122
  .input.is-active {
998
1123
  background:
999
1124
  linear-gradient(0deg, var(--input-overlay-active), var(--input-overlay-active)),
1000
- var(--input-text-container-background-default);
1125
+ var(--input-container-background-default);
1001
1126
  border-width: var(--input-border-size-active);
1002
1127
  padding-inline: calc(
1003
1128
  var(--input-padding-inline) + var(--input-border-size-default) -
@@ -1007,14 +1132,14 @@
1007
1132
  var(--input-padding-block) + var(--input-border-size-default) -
1008
1133
  var(--input-border-size-active)
1009
1134
  );
1010
- border-color: var(--input-text-border-color-active);
1011
- color: var(--input-text-text-color-active);
1135
+ border-color: var(--input-border-color-active);
1136
+ color: var(--input-text-color-active);
1012
1137
  }
1013
1138
 
1014
1139
  .input:focus-visible,
1015
1140
  .input.is-focus-visible {
1016
- background: var(--input-text-container-background-focus);
1017
- border-color: var(--input-text-border-color-focus);
1141
+ background: var(--input-container-background-focus);
1142
+ border-color: var(--input-border-color-focus);
1018
1143
  outline: none;
1019
1144
  box-shadow: 0 0 0 var(--shadow-focus, 0) var(--color-focus, transparent);
1020
1145
  }
@@ -1057,12 +1182,12 @@
1057
1182
  font-weight: var(--typography-label-font-weight);
1058
1183
  font-size: var(--typography-label-font-size);
1059
1184
  line-height: var(--typography-label-line-height);
1060
- color: var(--input-checkbox-text-color-default);
1185
+ color: var(--checkbox-text-color-default);
1061
1186
  cursor: pointer;
1062
1187
  }
1063
1188
 
1064
1189
  .checkbox-field.is-disabled {
1065
- color: var(--input-checkbox-text-color-disabled);
1190
+ color: var(--checkbox-text-color-disabled);
1066
1191
  cursor: not-allowed;
1067
1192
  }
1068
1193
 
@@ -1075,10 +1200,10 @@
1075
1200
  place-content: center;
1076
1201
  border-style: solid;
1077
1202
  border-width: var(--checkbox-border-size-default);
1078
- border-color: var(--input-checkbox-border-color-default);
1203
+ border-color: var(--checkbox-border-color-default);
1079
1204
  border-radius: var(--corner-checkbox-radius);
1080
- background: var(--input-checkbox-container-background-default);
1081
- color: var(--input-checkbox-text-color-active);
1205
+ background: var(--checkbox-container-background-default);
1206
+ color: var(--checkbox-text-color-active);
1082
1207
  cursor: pointer;
1083
1208
  }
1084
1209
 
@@ -1089,8 +1214,8 @@
1089
1214
 
1090
1215
  .checkbox:checked,
1091
1216
  .checkbox.is-checked {
1092
- border-color: var(--input-checkbox-border-color-active);
1093
- background: var(--input-checkbox-container-background-active);
1217
+ border-color: var(--checkbox-border-color-active);
1218
+ background: var(--checkbox-container-background-active);
1094
1219
  }
1095
1220
 
1096
1221
  .checkbox:checked::after,
@@ -1111,8 +1236,8 @@
1111
1236
 
1112
1237
  .checkbox:indeterminate,
1113
1238
  .checkbox.is-indeterminate {
1114
- border-color: var(--input-checkbox-border-color-active);
1115
- background: var(--input-checkbox-container-background-active);
1239
+ border-color: var(--checkbox-border-color-active);
1240
+ background: var(--checkbox-container-background-active);
1116
1241
  }
1117
1242
 
1118
1243
  .checkbox:indeterminate::after,
@@ -1127,9 +1252,9 @@
1127
1252
  .checkbox.is-hover {
1128
1253
  background:
1129
1254
  linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1130
- var(--input-checkbox-container-background-hover);
1131
- color: var(--input-checkbox-text-color-hover);
1132
- border-color: var(--input-checkbox-border-color-hover);
1255
+ var(--checkbox-container-background-hover);
1256
+ color: var(--checkbox-text-color-hover);
1257
+ border-color: var(--checkbox-border-color-hover);
1133
1258
  border-width: var(--checkbox-border-size-hover);
1134
1259
  }
1135
1260
 
@@ -1137,9 +1262,9 @@
1137
1262
  .checkbox.is-checked.is-hover {
1138
1263
  background:
1139
1264
  linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1140
- var(--input-checkbox-container-background-active);
1141
- color: var(--input-checkbox-text-color-hover);
1142
- border-color: var(--input-checkbox-border-color-hover);
1265
+ var(--checkbox-container-background-active);
1266
+ color: var(--checkbox-text-color-hover);
1267
+ border-color: var(--checkbox-border-color-hover);
1143
1268
  border-width: var(--checkbox-border-size-hover);
1144
1269
  }
1145
1270
 
@@ -1147,9 +1272,9 @@
1147
1272
  .checkbox.is-indeterminate.is-hover {
1148
1273
  background:
1149
1274
  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);
1275
+ var(--checkbox-container-background-active);
1276
+ color: var(--checkbox-text-color-hover);
1277
+ border-color: var(--checkbox-border-color-hover);
1153
1278
  border-width: var(--checkbox-border-size-hover);
1154
1279
  }
1155
1280
 
@@ -1157,8 +1282,8 @@
1157
1282
  .checkbox.is-active {
1158
1283
  background:
1159
1284
  linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1160
- var(--input-checkbox-container-background-default);
1161
- border-color: var(--input-checkbox-border-color-active);
1285
+ var(--checkbox-container-background-default);
1286
+ border-color: var(--checkbox-border-color-active);
1162
1287
  border-width: var(--size-border-200);
1163
1288
  }
1164
1289
 
@@ -1166,21 +1291,21 @@
1166
1291
  .checkbox.is-checked.is-active {
1167
1292
  background:
1168
1293
  linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1169
- var(--input-checkbox-container-background-active);
1170
- border-color: var(--input-checkbox-border-color-active);
1294
+ var(--checkbox-container-background-active);
1295
+ border-color: var(--checkbox-border-color-active);
1171
1296
  }
1172
1297
 
1173
1298
  .checkbox:indeterminate:active,
1174
1299
  .checkbox.is-indeterminate.is-active {
1175
1300
  background:
1176
1301
  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);
1302
+ var(--checkbox-container-background-active);
1303
+ border-color: var(--checkbox-border-color-active);
1179
1304
  }
1180
1305
 
1181
1306
  .checkbox:focus-visible,
1182
1307
  .checkbox.is-focus-visible {
1183
- border-color: var(--input-checkbox-border-color-focus);
1308
+ border-color: var(--checkbox-border-color-focus);
1184
1309
  outline: none;
1185
1310
  box-shadow: 0 0 0 var(--shadow-focus, 0) var(--color-focus, transparent);
1186
1311
  }
@@ -1188,9 +1313,9 @@
1188
1313
  .checkbox:disabled,
1189
1314
  .checkbox.is-disabled {
1190
1315
  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);
1316
+ border-color: var(--checkbox-border-color-disabled);
1317
+ background: var(--checkbox-container-background-disabled);
1318
+ color: var(--checkbox-text-color-disabled);
1194
1319
  cursor: not-allowed;
1195
1320
  }
1196
1321
  }
@@ -1507,3 +1632,463 @@
1507
1632
  flex: 0 0 auto;
1508
1633
  }
1509
1634
  }
1635
+ @layer components {
1636
+ .divider {
1637
+ border: none;
1638
+ margin: 0;
1639
+ padding: 0;
1640
+ background: var(--divider-color, var(--color-border-default));
1641
+ block-size: var(--size-border-100);
1642
+ inline-size: 100%;
1643
+ align-self: stretch;
1644
+ }
1645
+
1646
+ /* ── Vertical orientation ── */
1647
+
1648
+ .divider[aria-orientation="vertical"] {
1649
+ block-size: auto;
1650
+ inline-size: var(--size-border-100);
1651
+ align-self: stretch;
1652
+ }
1653
+
1654
+ /* ── Subtle variant ── */
1655
+
1656
+ .divider.subtle {
1657
+ --divider-color: var(--color-border-subtle);
1658
+ }
1659
+ }
1660
+ @layer components {
1661
+ .textarea {
1662
+ display: block;
1663
+ inline-size: 100%;
1664
+ min-block-size: calc(var(--line-height-md) * 3 + var(--size-spacing-300) * 2);
1665
+ padding-inline: var(--size-spacing-300);
1666
+ padding-block: var(--size-spacing-300);
1667
+ font-family: var(--font-family-sans);
1668
+ font-size: var(--font-size-md);
1669
+ line-height: var(--line-height-md);
1670
+ color: var(--color-text-default);
1671
+ background: var(--color-fill-surface);
1672
+ border: var(--size-border-100) solid var(--color-border-default);
1673
+ border-radius: var(--size-radius-300);
1674
+ resize: vertical;
1675
+ transition: border-color 0.15s ease;
1676
+ }
1677
+
1678
+ .textarea::placeholder {
1679
+ color: var(--color-text-disabled);
1680
+ }
1681
+
1682
+ .textarea:hover,
1683
+ .textarea.is-hover {
1684
+ border-color: var(--color-border-strong);
1685
+ }
1686
+
1687
+ .textarea:focus-visible,
1688
+ .textarea.is-focus-visible {
1689
+ border-color: var(--color-focus);
1690
+ outline: none;
1691
+ box-shadow: 0 0 0 var(--shadow-focus) var(--color-focus);
1692
+ }
1693
+
1694
+ .textarea:disabled,
1695
+ .textarea.is-disabled {
1696
+ color: var(--color-text-disabled);
1697
+ background: var(--color-fill-disabled);
1698
+ border-color: var(--color-border-disabled);
1699
+ cursor: not-allowed;
1700
+ resize: none;
1701
+ }
1702
+
1703
+ .textarea[readonly] {
1704
+ background: var(--color-fill-surface);
1705
+ border-color: var(--color-border-default);
1706
+ cursor: default;
1707
+ resize: none;
1708
+ }
1709
+ }
1710
+ @layer components {
1711
+ .avatar {
1712
+ display: inline-flex;
1713
+ align-items: center;
1714
+ justify-content: center;
1715
+ border-radius: var(--size-radius-full);
1716
+ overflow: hidden;
1717
+ background: var(--color-fill-subtle);
1718
+ color: var(--color-text-default);
1719
+ font-family: var(--font-family-sans);
1720
+ font-weight: var(--font-weight-600);
1721
+ inline-size: 2.5rem;
1722
+ block-size: 2.5rem;
1723
+ font-size: var(--font-size-sm);
1724
+ }
1725
+
1726
+ /* ── Sizes ── */
1727
+
1728
+ .avatar.xs {
1729
+ inline-size: 1.5rem;
1730
+ block-size: 1.5rem;
1731
+ font-size: var(--font-size-xs);
1732
+ }
1733
+
1734
+ .avatar.sm {
1735
+ inline-size: 2rem;
1736
+ block-size: 2rem;
1737
+ font-size: var(--font-size-xs);
1738
+ }
1739
+
1740
+ .avatar.lg {
1741
+ inline-size: 3rem;
1742
+ block-size: 3rem;
1743
+ font-size: var(--font-size-md);
1744
+ }
1745
+
1746
+ .avatar.xl {
1747
+ inline-size: 4rem;
1748
+ block-size: 4rem;
1749
+ font-size: var(--font-size-lg);
1750
+ }
1751
+
1752
+ /* ── Image ── */
1753
+
1754
+ .avatar > img {
1755
+ inline-size: 100%;
1756
+ block-size: 100%;
1757
+ object-fit: cover;
1758
+ }
1759
+
1760
+ /* ── Initials ── */
1761
+
1762
+ .avatar__initials {
1763
+ user-select: none;
1764
+ text-transform: uppercase;
1765
+ }
1766
+ }
1767
+ @layer components {
1768
+ .accordion {
1769
+ display: flex;
1770
+ flex-direction: column;
1771
+ border: var(--size-border-100) solid var(--color-border-default);
1772
+ border-radius: var(--size-radius-400);
1773
+ overflow: hidden;
1774
+ }
1775
+
1776
+ .accordion-item {
1777
+ border-block-start: var(--size-border-100) solid var(--color-border-default);
1778
+ }
1779
+
1780
+ .accordion-item:first-child {
1781
+ border-block-start: none;
1782
+ }
1783
+
1784
+ .accordion-item > summary {
1785
+ display: flex;
1786
+ align-items: center;
1787
+ gap: var(--size-spacing-200);
1788
+ padding-inline: var(--size-spacing-400);
1789
+ padding-block: var(--size-spacing-300);
1790
+ font-family: var(--font-family-sans);
1791
+ font-size: var(--font-size-md);
1792
+ font-weight: var(--font-weight-600);
1793
+ line-height: var(--line-height-md);
1794
+ color: var(--color-text-default);
1795
+ cursor: pointer;
1796
+ list-style: none;
1797
+ user-select: none;
1798
+ }
1799
+
1800
+ .accordion-item > summary::-webkit-details-marker {
1801
+ display: none;
1802
+ }
1803
+
1804
+ .accordion-item > summary::before {
1805
+ content: "";
1806
+ display: inline-block;
1807
+ inline-size: 0.5rem;
1808
+ block-size: 0.5rem;
1809
+ border-inline-end: var(--size-border-200) solid currentColor;
1810
+ border-block-end: var(--size-border-200) solid currentColor;
1811
+ transform: rotate(-45deg);
1812
+ transition: transform 0.2s ease;
1813
+ flex-shrink: 0;
1814
+ }
1815
+
1816
+ .accordion-item[open] > summary::before {
1817
+ transform: rotate(45deg);
1818
+ }
1819
+
1820
+ .accordion-item > summary:hover,
1821
+ .accordion-item > summary.is-hover {
1822
+ background: var(--color-fill-hover);
1823
+ }
1824
+
1825
+ .accordion-item > summary:focus-visible,
1826
+ .accordion-item > summary.is-focus-visible {
1827
+ outline: none;
1828
+ box-shadow: inset 0 0 0 var(--shadow-focus) var(--color-focus);
1829
+ }
1830
+
1831
+ .accordion-item__content {
1832
+ padding-inline: var(--size-spacing-400);
1833
+ padding-block: var(--size-spacing-300);
1834
+ font-family: var(--font-family-sans);
1835
+ font-size: var(--font-size-md);
1836
+ line-height: var(--line-height-md);
1837
+ color: var(--color-text-default);
1838
+ }
1839
+
1840
+ /* ── Disabled ── */
1841
+
1842
+ .accordion-item.is-disabled > summary {
1843
+ color: var(--color-text-disabled);
1844
+ cursor: not-allowed;
1845
+ pointer-events: none;
1846
+ }
1847
+ }
1848
+ @layer components {
1849
+ .tabs {
1850
+ display: flex;
1851
+ flex-direction: column;
1852
+ }
1853
+
1854
+ .tab-list {
1855
+ display: flex;
1856
+ gap: 0;
1857
+ border-block-end: var(--size-border-100) solid var(--color-border-default);
1858
+ }
1859
+
1860
+ .tab-list[aria-orientation="vertical"] {
1861
+ flex-direction: column;
1862
+ border-block-end: none;
1863
+ border-inline-end: var(--size-border-100) solid var(--color-border-default);
1864
+ }
1865
+
1866
+ .tab {
1867
+ display: inline-flex;
1868
+ align-items: center;
1869
+ justify-content: center;
1870
+ padding-inline: var(--size-spacing-400);
1871
+ padding-block: var(--size-spacing-300);
1872
+ font-family: var(--font-family-sans);
1873
+ font-size: var(--font-size-md);
1874
+ font-weight: var(--font-weight-500);
1875
+ line-height: var(--line-height-md);
1876
+ color: var(--color-text-default);
1877
+ background: transparent;
1878
+ border: none;
1879
+ border-block-end: var(--size-border-200) solid transparent;
1880
+ cursor: pointer;
1881
+ white-space: nowrap;
1882
+ transition: border-color 0.15s ease, color 0.15s ease;
1883
+ }
1884
+
1885
+ .tab:hover,
1886
+ .tab.is-hover {
1887
+ color: var(--color-text-brand);
1888
+ border-block-end-color: var(--color-border-subtle);
1889
+ }
1890
+
1891
+ .tab[aria-selected="true"],
1892
+ .tab.is-selected {
1893
+ color: var(--color-text-brand);
1894
+ font-weight: var(--font-weight-600);
1895
+ border-block-end-color: var(--color-border-brand);
1896
+ }
1897
+
1898
+ .tab:focus-visible,
1899
+ .tab.is-focus-visible {
1900
+ outline: none;
1901
+ box-shadow: inset 0 0 0 var(--shadow-focus) var(--color-focus);
1902
+ }
1903
+
1904
+ .tab:disabled,
1905
+ .tab.is-disabled {
1906
+ color: var(--color-text-disabled);
1907
+ cursor: not-allowed;
1908
+ border-block-end-color: transparent;
1909
+ }
1910
+
1911
+ .tab-panel {
1912
+ padding-block: var(--size-spacing-400);
1913
+ }
1914
+
1915
+ .tab-panel[hidden] {
1916
+ display: none;
1917
+ }
1918
+ }
1919
+ @layer components {
1920
+ .tooltip {
1921
+ position: absolute;
1922
+ z-index: var(--zindex-tooltip);
1923
+ max-inline-size: 15rem;
1924
+ padding-inline: var(--size-spacing-300);
1925
+ padding-block: var(--size-spacing-200);
1926
+ font-family: var(--font-family-sans);
1927
+ font-size: var(--font-size-sm);
1928
+ line-height: var(--line-height-sm);
1929
+ color: var(--color-text-inverse);
1930
+ background: var(--color-neutral-900);
1931
+ border-radius: var(--size-radius-300);
1932
+ pointer-events: none;
1933
+ opacity: 0;
1934
+ transition: opacity 0.15s ease;
1935
+ }
1936
+
1937
+ .tooltip.is-visible {
1938
+ opacity: 1;
1939
+ }
1940
+
1941
+ /* ── Placement ── */
1942
+
1943
+ .tooltip[data-placement="top"] {
1944
+ inset-block-end: 100%;
1945
+ inset-inline-start: 50%;
1946
+ transform: translateX(-50%);
1947
+ margin-block-end: var(--size-spacing-200);
1948
+ }
1949
+
1950
+ .tooltip[data-placement="bottom"] {
1951
+ inset-block-start: 100%;
1952
+ inset-inline-start: 50%;
1953
+ transform: translateX(-50%);
1954
+ margin-block-start: var(--size-spacing-200);
1955
+ }
1956
+
1957
+ .tooltip[data-placement="left"] {
1958
+ inset-inline-end: 100%;
1959
+ inset-block-start: 50%;
1960
+ transform: translateY(-50%);
1961
+ margin-inline-end: var(--size-spacing-200);
1962
+ }
1963
+
1964
+ .tooltip[data-placement="right"] {
1965
+ inset-inline-start: 100%;
1966
+ inset-block-start: 50%;
1967
+ transform: translateY(-50%);
1968
+ margin-inline-start: var(--size-spacing-200);
1969
+ }
1970
+
1971
+ /* ── Trigger wrapper ── */
1972
+
1973
+ .tooltip-trigger {
1974
+ position: relative;
1975
+ display: inline-flex;
1976
+ }
1977
+
1978
+ .tooltip-trigger:hover > .tooltip,
1979
+ .tooltip-trigger:focus-within > .tooltip {
1980
+ opacity: 1;
1981
+ }
1982
+ }
1983
+ @layer components {
1984
+ /* ----------------------------------------------------------------
1985
+ * Form — layout container for form fields
1986
+ * ---------------------------------------------------------------- */
1987
+
1988
+ .form {
1989
+ display: flex;
1990
+ flex-direction: column;
1991
+ gap: var(--form-gap);
1992
+ padding-inline: var(--form-padding-inline);
1993
+ padding-block: var(--form-padding-block);
1994
+ background: var(--form-container-background);
1995
+ border: var(--form-border-size) solid var(--form-container-border-color);
1996
+ border-radius: var(--form-border-radius);
1997
+ }
1998
+
1999
+ .form.borderless {
2000
+ border: none;
2001
+ padding: 0;
2002
+ background: transparent;
2003
+ }
2004
+
2005
+ /* ----------------------------------------------------------------
2006
+ * Form Group — groups related fields with an optional title
2007
+ * ---------------------------------------------------------------- */
2008
+
2009
+ .form-group {
2010
+ display: flex;
2011
+ flex-direction: column;
2012
+ gap: var(--form-group-gap);
2013
+ margin: 0;
2014
+ padding: 0;
2015
+ border: 0;
2016
+ min-inline-size: 0;
2017
+ }
2018
+
2019
+ .form-group__title {
2020
+ font-family: var(--typography-heading-font-family);
2021
+ font-weight: var(--typography-heading-font-weight);
2022
+ font-size: var(--typography-heading-font-size-sm);
2023
+ line-height: var(--typography-heading-line-height-sm);
2024
+ color: var(--form-group-title-color);
2025
+ margin: 0;
2026
+ }
2027
+
2028
+ /* ----------------------------------------------------------------
2029
+ * Form Field — single field with label, input, and helper/error
2030
+ * ---------------------------------------------------------------- */
2031
+
2032
+ .form-field {
2033
+ display: flex;
2034
+ flex-direction: column;
2035
+ gap: var(--form-field-gap);
2036
+ }
2037
+
2038
+ .form-field[data-label-position="side"] {
2039
+ flex-direction: row;
2040
+ align-items: flex-start;
2041
+ }
2042
+
2043
+ .form-field[data-label-position="side"] > .field-label {
2044
+ flex-shrink: 0;
2045
+ inline-size: 8rem;
2046
+ padding-block-start: var(--size-spacing-200);
2047
+ }
2048
+
2049
+ .form-field[data-label-position="side"] > .form-field__body {
2050
+ flex: 1;
2051
+ display: flex;
2052
+ flex-direction: column;
2053
+ gap: var(--form-field-gap);
2054
+ }
2055
+
2056
+ /* ----------------------------------------------------------------
2057
+ * Helper and error text
2058
+ * ---------------------------------------------------------------- */
2059
+
2060
+ .form-field__helper {
2061
+ font-family: var(--typography-body-font-family);
2062
+ font-size: var(--font-size-sm);
2063
+ line-height: var(--line-height-sm);
2064
+ color: var(--form-field-helper-text-color-default);
2065
+ margin: 0;
2066
+ }
2067
+
2068
+ .form-field.is-invalid .form-field__helper {
2069
+ color: var(--form-field-helper-text-color-invalid);
2070
+ }
2071
+
2072
+ /* ----------------------------------------------------------------
2073
+ * Form Actions — button area at the bottom
2074
+ * ---------------------------------------------------------------- */
2075
+
2076
+ .form-actions {
2077
+ display: flex;
2078
+ gap: var(--size-spacing-200);
2079
+ justify-content: flex-end;
2080
+ padding-block-start: var(--size-spacing-200);
2081
+ }
2082
+
2083
+ .form-actions[data-align="start"] {
2084
+ justify-content: flex-start;
2085
+ }
2086
+
2087
+ .form-actions[data-align="stretch"] {
2088
+ flex-direction: column;
2089
+ }
2090
+
2091
+ .form-actions[data-align="stretch"] > * {
2092
+ inline-size: 100%;
2093
+ }
2094
+ }