ui-foundations 0.3.2 → 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 (87) hide show
  1. package/README.md +181 -37
  2. package/dist/assets/icons/checkmark.svg +1 -0
  3. package/dist/core/index.css +8 -7
  4. package/dist/macros/ui.njk +203 -0
  5. package/dist/main.css +941 -210
  6. package/dist/react/accordion.js +36 -0
  7. package/dist/react/avatar.js +34 -0
  8. package/dist/react/badge.js +41 -0
  9. package/dist/react/button.js +4 -6
  10. package/dist/react/checkbox.js +21 -8
  11. package/dist/react/divider.js +31 -0
  12. package/dist/react/icon.js +8 -1
  13. package/dist/react/index.js +8 -0
  14. package/dist/react/label.js +1 -1
  15. package/dist/react/radio.js +45 -0
  16. package/dist/react/switch.js +9 -8
  17. package/dist/react/tabs.js +72 -0
  18. package/dist/react/textarea.js +38 -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 → appearance-modes.tokens.mode-dark.css} +6 -6
  22. package/dist/tokens/css/{appearance-(modes).tokens.mode-light.css → appearance-modes.tokens.mode-light.css} +1 -1
  23. package/dist/tokens/css/{components-(ui).tokens.css → components-ui.tokens.css} +73 -32
  24. package/dist/tokens/css/core-primitives.tokens.css +240 -0
  25. package/dist/tokens/css/{semantics-(roles).tokens.css → semantics-roles.tokens.css} +1 -1
  26. package/dist/tokens/css/themes-brands.tokens.brand-a.css +22 -0
  27. package/dist/tokens/css/{themes-(brands).tokens.brand-b.css → themes-brands.tokens.brand-b.css} +9 -9
  28. package/dist/tokens/css/themes-brands.tokens.brand-c.css +22 -0
  29. package/dist/tokens/json/appearance-modes.tokens.mode-dark.json +121 -0
  30. package/dist/tokens/json/appearance-modes.tokens.mode-light.json +121 -0
  31. package/dist/tokens/json/components-ui.tokens.json +713 -0
  32. package/dist/tokens/json/{core-(primitives).tokens.json → core-primitives.tokens.json} +526 -410
  33. package/dist/tokens/json/semantics-roles.tokens.json +141 -0
  34. package/dist/tokens/json/themes-brands.tokens.brand-a.json +81 -0
  35. package/dist/tokens/json/themes-brands.tokens.brand-b.json +81 -0
  36. package/dist/tokens/json/themes-brands.tokens.brand-c.json +81 -0
  37. package/dist/tokens/tokens.yaml +2722 -499
  38. package/dist/tokens/ts/{appearance-(modes).tokens.mode-dark.ts → appearance-modes.tokens.mode-dark.ts} +6 -6
  39. package/dist/tokens/ts/{appearance-(modes).tokens.mode-light.ts → appearance-modes.tokens.mode-light.ts} +1 -1
  40. package/dist/tokens/ts/{components-(ui).tokens.ts → components-ui.tokens.ts} +74 -33
  41. package/dist/tokens/ts/core-primitives.tokens.ts +265 -0
  42. package/dist/tokens/ts/{semantics-(roles).tokens.ts → semantics-roles.tokens.ts} +1 -1
  43. package/dist/tokens/ts/themes-brands.tokens.brand-a.ts +32 -0
  44. package/dist/tokens/ts/{themes-(brands).tokens.brand-b.ts → themes-brands.tokens.brand-b.ts} +9 -9
  45. package/dist/tokens/ts/{themes-(brands).tokens.brand-a.ts → themes-brands.tokens.brand-c.ts} +9 -9
  46. package/dist/ui/index.css +8 -0
  47. package/dist/ui/patterns/accordion.css +81 -0
  48. package/dist/ui/patterns/avatar.css +57 -0
  49. package/dist/ui/patterns/badge.css +49 -0
  50. package/dist/ui/patterns/checkbox.css +71 -22
  51. package/dist/ui/patterns/divider.css +25 -0
  52. package/dist/ui/patterns/radio.css +109 -0
  53. package/dist/ui/patterns/tabs.css +71 -0
  54. package/dist/ui/patterns/textarea.css +50 -0
  55. package/dist/ui/patterns/tooltip.css +64 -0
  56. package/docs/README.md +38 -0
  57. package/docs/agentic/README.md +35 -0
  58. package/docs/agentic/assistant-behavior-rules.md +48 -0
  59. package/docs/agentic/skills/component-accessibility-audit.md +132 -0
  60. package/docs/agentic/skills/ux-writing-coach.md +116 -0
  61. package/docs/foundations/README.md +31 -0
  62. package/docs/foundations/foundation-001-token-layering.md +6 -0
  63. package/docs/foundations/foundation-002-naming-and-grouping.md +6 -0
  64. package/docs/foundations/foundation-003-color-semantics-and-status.md +6 -0
  65. package/docs/foundations/foundation-004-typography-scale-and-line-height.md +6 -0
  66. package/docs/foundations/foundation-005-responsive-breakpoints-and-containers.md +6 -0
  67. package/docs/foundations/foundation-006-z-index-layering.md +6 -0
  68. package/docs/foundations/foundation-007-typography-selectors-and-specificity.md +7 -1
  69. package/docs/foundations/foundation-008-mode-activation-and-consumer-control.md +6 -0
  70. package/docs/foundations/foundation-009-component-boundaries-and-utility.md +6 -0
  71. package/docs/foundations/foundation-010-implementation-and-pipeline-workflow.md +6 -0
  72. package/docs/foundations/foundation-011-branching-and-release-governance.md +6 -0
  73. package/docs/foundations/foundation-012-minimal-markup-and-composition.md +6 -0
  74. package/package.json +16 -11
  75. package/dist/tokens/css/core-(primitives).tokens.css +0 -127
  76. package/dist/tokens/css/themes-(brands).tokens.brand-a.css +0 -22
  77. package/dist/tokens/json/appearance-(modes).tokens.mode-dark.json +0 -182
  78. package/dist/tokens/json/appearance-(modes).tokens.mode-light.json +0 -182
  79. package/dist/tokens/json/components-(ui).tokens.json +0 -739
  80. package/dist/tokens/json/semantics-(roles).tokens.json +0 -203
  81. package/dist/tokens/json/themes-(brands).tokens.brand-a.json +0 -115
  82. package/dist/tokens/json/themes-(brands).tokens.brand-b.json +0 -115
  83. package/dist/tokens/ts/core-(primitives).tokens.ts +0 -152
  84. package/docs/agentic/skills/README.md +0 -51
  85. package/docs/agentic/skills/design-ops-specialist/SKILL.md +0 -60
  86. package/docs/agentic/skills/design-system-architect/SKILL.md +0 -106
  87. package/docs/agentic/team-ai-playbook.md +0 -226
package/dist/main.css CHANGED
@@ -181,7 +181,247 @@
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-05-22T09:23:10.621Z */
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-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);
217
+ --color-neutral-000: rgb(255 255 255);
218
+ --color-brand-b-purple-200: rgb(222 192 255);
219
+ --color-brand-b-purple-300: rgb(196 143 255);
220
+ --color-brand-b-purple-600: rgb(151 71 255);
221
+ --color-brand-b-purple-700: rgb(122 20 255);
222
+ --color-brand-b-purple-800: rgb(85 26 139);
223
+ --color-brand-b-purple-900: rgb(58 18 95);
224
+ --color-brand-b-blue-100: rgb(206 219 253);
225
+ --color-brand-b-blue-200: rgb(158 183 250);
226
+ --color-brand-b-blue-300: rgb(109 147 248);
227
+ --color-brand-b-blue-400: rgb(61 111 245);
228
+ --color-brand-b-blue-500: rgb(12 75 243);
229
+ --color-brand-b-blue-600: rgb(10 60 194);
230
+ --color-brand-b-blue-700: rgb(7 45 146);
231
+ --color-brand-b-blue-800: rgb(5 30 97);
232
+ --color-brand-b-blue-900: rgb(2 15 49);
233
+ --color-brand-b-red-100: rgb(255 255 255);
234
+ --color-brand-b-red-200: rgb(255 204 204);
235
+ --color-brand-b-red-300: rgb(255 153 153);
236
+ --color-brand-b-red-400: rgb(255 102 102);
237
+ --color-brand-b-red-500: rgb(255 51 51);
238
+ --color-brand-b-red-600: rgb(255 0 0);
239
+ --color-brand-b-red-700: rgb(153 0 0);
240
+ --color-brand-b-red-800: rgb(102 0 0);
241
+ --color-brand-b-red-900: rgb(51 0 0);
242
+ --color-brand-b-green-100: rgb(246 254 250);
243
+ --color-brand-b-green-200: rgb(200 249 223);
244
+ --color-brand-b-green-300: rgb(154 244 196);
245
+ --color-brand-b-green-400: rgb(108 239 170);
246
+ --color-brand-b-green-500: rgb(62 234 143);
247
+ --color-brand-b-green-600: rgb(19 174 92);
248
+ --color-brand-b-green-700: rgb(14 129 68);
249
+ --color-brand-b-green-800: rgb(8 69 36);
250
+ --color-brand-b-green-900: rgb(4 37 19);
251
+ --color-transparent: rgba(0 0 0 / 0);
252
+ --color-brand-a-green-100: rgb(243 246 233);
253
+ --color-brand-a-green-200: rgb(223 231 197);
254
+ --color-brand-a-green-300: rgb(207 219 169);
255
+ --color-brand-a-green-400: rgb(191 207 140);
256
+ --color-brand-a-green-500: rgb(175 195 111);
257
+ --color-brand-a-green-600: rgb(159 183 82);
258
+ --color-brand-a-green-700: rgb(137 158 66);
259
+ --color-brand-a-green-800: rgb(112 129 54);
260
+ --color-brand-a-green-900: rgb(81 93 39);
261
+ --color-brand-a-red-100: rgb(254 251 251);
262
+ --color-brand-a-red-200: rgb(250 224 230);
263
+ --color-brand-a-red-300: rgb(244 179 195);
264
+ --color-brand-a-red-400: rgb(238 135 160);
265
+ --color-brand-a-red-500: rgb(231 90 124);
266
+ --color-brand-a-red-600: rgb(225 46 89);
267
+ --color-brand-a-red-700: rgb(191 28 67);
268
+ --color-brand-a-red-800: rgb(147 21 52);
269
+ --color-brand-a-red-900: rgb(102 15 36);
270
+ --color-brand-a-sand-100: rgb(240 240 229);
271
+ --color-brand-a-sand-200: rgb(221 222 197);
272
+ --color-brand-a-sand-300: rgb(192 193 172);
273
+ --color-brand-a-sand-400: rgb(164 165 147);
274
+ --color-brand-a-sand-500: rgb(136 137 122);
275
+ --color-brand-a-sand-600: rgb(108 109 97);
276
+ --color-brand-a-sand-700: rgb(80 81 72);
277
+ --color-brand-a-sand-800: rgb(52 52 47);
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);
340
+ --font-size-md: 1rem;
341
+ --font-size-xs: .75rem;
342
+ --font-size-sm: .875rem;
343
+ --font-size-lg: 1.25rem;
344
+ --font-size-xl: 1.5rem;
345
+ --font-size-xxl: 2rem;
346
+ --font-size-xxxl: 2.5rem;
347
+ --font-weight-100: 100;
348
+ --font-weight-200: 200;
349
+ --font-weight-300: 300;
350
+ --font-weight-400: 400;
351
+ --font-weight-500: 500;
352
+ --font-weight-600: 600;
353
+ --font-weight-700: 700;
354
+ --font-weight-800: 800;
355
+ --font-weight-900: 900;
356
+ --font-family-sans: Inter;
357
+ --font-family-serif: Rokkitt;
358
+ --font-family-mono: SFMono-Regular;
359
+ --line-height-xs: 1rem;
360
+ --line-height-sm: 1.25rem;
361
+ --line-height-md: 1.5rem;
362
+ --line-height-lg: 1.75rem;
363
+ --line-height-xl: 2rem;
364
+ --line-height-xxl: 2.75rem;
365
+ --line-height-xxxl: 3.5rem;
366
+ --size-spacing-100: .25rem;
367
+ --size-spacing-200: .5rem;
368
+ --size-spacing-300: .75rem;
369
+ --size-spacing-400: 1rem;
370
+ --size-spacing-500: 1.25rem;
371
+ --size-spacing-600: 1.5rem;
372
+ --size-spacing-700: 2rem;
373
+ --size-spacing-800: 2.5rem;
374
+ --size-spacing-900: 3rem;
375
+ --size-spacing-1000: 4rem;
376
+ --size-spacing-000: 0;
377
+ --size-radius-100: .125rem;
378
+ --size-radius-200: .25rem;
379
+ --size-radius-300: .375rem;
380
+ --size-radius-400: .5rem;
381
+ --size-radius-500: .75rem;
382
+ --size-radius-600: 1rem;
383
+ --size-radius-700: 1.25rem;
384
+ --size-radius-800: 1.5rem;
385
+ --size-radius-900: 2rem;
386
+ --size-radius-000: 0;
387
+ --size-radius-full: 625rem;
388
+ --shadow-focus: .5rem;
389
+ --breakpoint-100: 580px;
390
+ --breakpoint-200: 760px;
391
+ --breakpoint-300: 960px;
392
+ --breakpoint-400: 1200px;
393
+ --breakpoint-500: 1440px;
394
+ --breakpoint-600: 1920px;
395
+ --container-100: 192px;
396
+ --container-200: 384px;
397
+ --container-300: 576px;
398
+ --container-400: 768px;
399
+ --container-500: 960px;
400
+ --container-600: 1152px;
401
+ --size-border-100: .0625rem;
402
+ --size-border-200: .125rem;
403
+ --size-border-300: .1875rem;
404
+ --size-border-000: 0;
405
+ --layout-columns: 12;
406
+ --layout-gutter: 1rem;
407
+ --layout-max-width: 1236px;
408
+ --layout-column-max-width: 412px;
409
+ --layout-float-breakpoint: 1220px;
410
+ --layout-base-grid: .25rem;
411
+ --zindex-fixed: 1030;
412
+ --zindex-sticky: 1020;
413
+ --zindex-dropdown: 1000;
414
+ --zindex-dropdown-base: 900;
415
+ --zindex-modal: 1050;
416
+ --zindex-base: 0;
417
+ --zindex-tooltip: 1070;
418
+ --zindex-raised: 1;
419
+ --zindex-popover: 1060;
420
+ --zindex-modal-overlay: 1040;
421
+ --zindex-hidden: -1;
422
+ }
423
+ /* Auto-generated design tokens from Figma */
424
+ /* Generated on 2026-05-22T09:23:10.624Z */
185
425
 
186
426
  :root {
187
427
  --typography-heading-font-family: var(--brand-font-lead);
@@ -217,7 +457,7 @@
217
457
  --corner-checkbox-radius: var(--brand-corner-input);
218
458
  }
219
459
  /* Auto-generated design tokens from Figma */
220
- /* Generated on 2026-03-31T20:27:09.724Z */
460
+ /* Generated on 2026-05-22T09:23:10.611Z */
221
461
 
222
462
  :root {
223
463
  --button-border-size-hover: var(--size-border-100);
@@ -279,49 +519,36 @@
279
519
  --input-text-text-color-default: var(--color-text-default);
280
520
  --input-text-text-color-hover: var(--color-text-default);
281
521
  --input-text-text-color-active: var(--color-text-default);
282
- --input-text-border-color-default: var(--color-border-default);
283
- --input-text-border-color-hover: var(--color-border-brand);
284
- --input-text-border-color-active: var(--color-border-brand);
285
- --input-text-border-color-focus: var(--color-border-brand);
286
- --input-text-border-color-invalid: var(--color-border-danger);
287
- --input-text-border-color-valid: var(--color-border-strong);
288
- --input-text-container-background-default: var(--color-fill-surface);
289
- --input-text-container-background-hover: var(--color-fill-surface);
290
- --input-text-container-background-focus: var(--color-fill-surface);
291
- --input-text-container-background-active: var(--color-fill-surface);
522
+ --input-text-text-color-disabled: var(--color-text-disabled);
292
523
  --input-text-text-color-placeholder: var(--color-text-subtle);
293
- --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);
294
535
  --input-font-family: var(--brand-font-base);
295
536
  --input-font-weight: var(--typography-body-font-weight);
296
537
  --input-font-size: var(--typography-label-font-size);
297
538
  --input-line-height: var(--typography-body-line-height);
298
- --input-border-size-default: var(--size-border-100);
299
- --input-border-size-hover: var(--size-border-100);
300
- --input-border-size-active: var(--size-border-200);
301
- --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);
302
544
  --input-padding-inline: var(--size-spacing-200);
303
545
  --input-padding-inline-icon-only: var(--size-spacing-200);
304
546
  --input-padding-block: var(--size-spacing-200);
305
547
  --input-gap: var(--size-spacing-200);
306
- --input-text-color-disabled: var(--color-text-disabled);
307
- --input-border-color-disabled: var(--color-border-disabled);
308
- --input-container-background-disabled: var(--color-fill-disabled);
309
548
  --input-overlay-hover: var(--color-transparent);
310
549
  --input-overlay-active: var(--color-transparent);
311
550
  --input-height: 2.5rem;
312
- --input-checkbox-text-color-default: var(--color-text-default);
313
- --input-checkbox-text-color-hover: var(--color-text-default);
314
- --input-checkbox-text-color-active: var(--color-text-inverse);
315
- --input-checkbox-border-color-default: var(--color-border-subtle);
316
- --input-checkbox-border-color-hover: var(--color-border-brand);
317
- --input-checkbox-border-color-active: var(--color-border-brand);
318
- --input-checkbox-border-color-focus: var(--color-border-brand);
319
- --input-checkbox-border-color-invalid: var(--color-border-danger);
320
- --input-checkbox-border-color-valid: var(--color-border-strong);
321
- --input-checkbox-container-background-default: var(--color-fill-surface);
322
- --input-checkbox-container-background-hover: var(--color-fill-surface);
323
- --input-checkbox-container-background-focus: var(--color-fill-surface);
324
- --input-checkbox-container-background-active: var(--color-fill-brand);
551
+ --input-height-min: 2.5rem;
325
552
  --form-group-gap: var(--size-spacing-400);
326
553
  --form-group-title-color: var(--color-text-default);
327
554
  --form-padding-inline: var(--size-spacing-400);
@@ -334,9 +561,63 @@
334
561
  --form-container-background: var(--color-fill-surface);
335
562
  --form-container-border-color: var(--color-border-subtle);
336
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);
574
+ --checkbox-border-size-hover: var(--size-border-200);
575
+ --checkbox-border-size-disabled: var(--size-border-000);
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);
583
+ --input-radio-text-color-default: var(--color-text-default);
584
+ --input-radio-text-color-disabled: var(--color-text-disabled);
585
+ --input-radio-border-color-default: var(--color-border-subtle);
586
+ --input-radio-border-color-hover: var(--color-border-strong);
587
+ --input-radio-border-color-active: var(--color-border-brand);
588
+ --input-radio-border-color-disabled: var(--color-border-disabled);
589
+ --input-radio-container-background-default: var(--color-fill-surface);
590
+ --input-radio-container-background-disabled: var(--color-fill-disabled);
591
+ --radio-border-size-default: var(--size-border-100);
592
+ --radio-border-size-hover: var(--size-border-200);
593
+ --radio-border-size-disabled: var(--size-border-000);
594
+ --badge-default-text-color: var(--color-text-default);
595
+ --badge-default-border-color: var(--color-transparent);
596
+ --badge-default-container-background: var(--color-fill-subtle);
597
+ --badge-brand-text-color: var(--color-text-inverse);
598
+ --badge-brand-border-color: var(--color-transparent);
599
+ --badge-brand-container-background: var(--color-fill-brand);
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;
615
+ --badge-danger-container-background: var(--color-fill-danger);
616
+ --badge-danger-border-color: var(--color-transparent);
617
+ --badge-danger-text-color: var(--color-text-inverse);
337
618
  }
338
619
  /* Auto-generated design tokens from Figma */
339
- /* Generated on 2026-03-31T20:27:09.721Z */
620
+ /* Generated on 2026-05-22T09:23:10.603Z */
340
621
 
341
622
  :root[data-mode="dark"] {
342
623
  --color-text-default: var(--color-neutral-800);
@@ -349,7 +630,7 @@
349
630
  --color-text-success: var(--brand-color-functional-success);
350
631
  --color-fill-surface: var(--color-neutral-1000);
351
632
  --color-fill-disabled: var(--color-neutral-300);
352
- --color-fill-hover: var(--color-neutral-alpha-500);
633
+ --color-fill-hover: var(--color-neutral-alpha-inverse-100);
353
634
  --color-fill-brand: var(--brand-color-primary);
354
635
  --color-fill-subtle: var(--brand-color-subtle);
355
636
  --color-fill-active: var(--brand-color-accent);
@@ -361,14 +642,14 @@
361
642
  --color-border-brand: var(--brand-color-primary);
362
643
  --color-border-disabled: var(--color-neutral-500);
363
644
  --color-border-danger: var(--brand-color-functional-danger);
364
- --color-overlay-backdrop: var(--color-neutral-alpha-400);
365
- --color-overlay-hover: var(--color-neutral-alpha-200);
366
- --color-overlay-active: var(--color-neutral-alpha-400);
367
- --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);
368
649
  --color-focus: var(--brand-color-primary-dark);
369
650
  }
370
651
  /* Auto-generated design tokens from Figma */
371
- /* Generated on 2026-03-31T20:27:09.718Z */
652
+ /* Generated on 2026-05-22T09:23:10.601Z */
372
653
 
373
654
  :root {
374
655
  --color-text-default: var(--color-neutral-800);
@@ -400,166 +681,39 @@
400
681
  --color-focus: var(--brand-color-primary);
401
682
  }
402
683
  /* 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 */
684
+ /* Generated on 2026-05-22T09:23:10.626Z */
531
685
 
532
686
  :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);
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);
541
695
  --brand-color-subtle: var(--color-neutral-500);
542
696
  --brand-color-subtle-dark: var(--color-neutral-800);
543
697
  --brand-color-subtle-light: var(--color-neutral-200);
544
698
  --brand-font-base: var(--font-family-sans);
545
699
  --brand-font-lead: var(--font-family-serif);
546
- --brand-corner-button: var(--size-radius-700);
547
- --brand-corner-card: var(--size-radius-200);
700
+ --brand-corner-button: var(--size-radius-full);
701
+ --brand-corner-card: var(--size-radius-300);
548
702
  --brand-corner-modal: var(--size-radius-400);
549
703
  --brand-corner-input: var(--size-radius-200);
550
704
  }
551
705
  /* Auto-generated design tokens from Figma */
552
- /* Generated on 2026-03-31T20:27:09.734Z */
706
+ /* Generated on 2026-05-22T09:23:10.628Z */
553
707
 
554
708
  :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);
709
+ --brand-color-functional-success: var(--color-brand-b-green-600);
710
+ --brand-color-functional-danger: var(--color-brand-b-red-600);
711
+ --brand-color-functional-base: var(--color-brand-b-purple-700);
712
+ --brand-color-functional-base-dark: var(--color-brand-b-purple-900);
713
+ --brand-color-primary: var(--color-brand-b-purple-600);
714
+ --brand-color-accent: var(--color-brand-b-green-400);
715
+ --brand-color-primary-dark: var(--color-brand-b-purple-800);
716
+ --brand-color-accent-dark: var(--color-brand-b-green-800);
563
717
  --brand-color-subtle: var(--color-neutral-500);
564
718
  --brand-color-subtle-dark: var(--color-neutral-800);
565
719
  --brand-color-subtle-light: var(--color-neutral-200);
@@ -570,6 +724,28 @@
570
724
  --brand-corner-modal: var(--size-radius-200);
571
725
  --brand-corner-input: var(--size-radius-000);
572
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
+ }
573
749
  @layer themes {
574
750
  :root {
575
751
  color-scheme: light dark;
@@ -972,12 +1148,12 @@
972
1148
  font-weight: var(--typography-label-font-weight);
973
1149
  font-size: var(--typography-label-font-size);
974
1150
  line-height: var(--typography-label-line-height);
975
- color: var(--color-text-default);
1151
+ color: var(--input-checkbox-text-color-default);
976
1152
  cursor: pointer;
977
1153
  }
978
1154
 
979
1155
  .checkbox-field.is-disabled {
980
- color: var(--color-text-disabled);
1156
+ color: var(--input-checkbox-text-color-disabled);
981
1157
  cursor: not-allowed;
982
1158
  }
983
1159
 
@@ -989,52 +1165,91 @@
989
1165
  display: inline-grid;
990
1166
  place-content: center;
991
1167
  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);
1168
+ border-width: var(--checkbox-border-size-default);
1169
+ border-color: var(--input-checkbox-border-color-default);
1170
+ border-radius: var(--corner-checkbox-radius);
1171
+ background: var(--input-checkbox-container-background-default);
1172
+ color: var(--input-checkbox-text-color-active);
997
1173
  cursor: pointer;
998
1174
  }
999
1175
 
1000
1176
  .checkbox::after {
1001
1177
  content: "";
1178
+ display: block;
1002
1179
  }
1003
1180
 
1004
1181
  .checkbox:checked,
1005
1182
  .checkbox.is-checked {
1006
- border-color: var(--color-border-brand);
1007
- background: var(--color-fill-brand);
1183
+ border-color: var(--input-checkbox-border-color-active);
1184
+ background: var(--input-checkbox-container-background-active);
1008
1185
  }
1009
1186
 
1010
1187
  .checkbox:checked::after,
1011
1188
  .checkbox.is-checked::after {
1012
- content: "\2713";
1013
- font-size: var(--typography-label-font-size);
1014
- line-height: var(--typography-label-line-height);
1189
+ content: "";
1190
+ inline-size: 0.75em;
1191
+ block-size: 0.75em;
1192
+ background-color: currentColor;
1193
+ -webkit-mask-image: url("/assets/icons/checkmark.svg");
1194
+ mask-image: url("/assets/icons/checkmark.svg");
1195
+ -webkit-mask-size: contain;
1196
+ mask-size: contain;
1197
+ -webkit-mask-repeat: no-repeat;
1198
+ mask-repeat: no-repeat;
1199
+ -webkit-mask-position: center;
1200
+ mask-position: center;
1015
1201
  }
1016
1202
 
1017
- .checkbox:hover,
1203
+ .checkbox:indeterminate,
1204
+ .checkbox.is-indeterminate {
1205
+ border-color: var(--input-checkbox-border-color-active);
1206
+ background: var(--input-checkbox-container-background-active);
1207
+ }
1208
+
1209
+ .checkbox:indeterminate::after,
1210
+ .checkbox.is-indeterminate::after {
1211
+ inline-size: 0.75rem;
1212
+ block-size: var(--size-border-200);
1213
+ border-radius: 999px;
1214
+ background: currentColor;
1215
+ }
1216
+
1217
+ .checkbox:hover,
1018
1218
  .checkbox.is-hover {
1019
1219
  background:
1020
1220
  linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1021
- var(--color-fill-surface);
1022
- border-color: var(--color-border-brand);
1221
+ var(--input-checkbox-container-background-hover);
1222
+ color: var(--input-checkbox-text-color-hover);
1223
+ border-color: var(--input-checkbox-border-color-hover);
1224
+ border-width: var(--checkbox-border-size-hover);
1023
1225
  }
1024
1226
 
1025
1227
  .checkbox:checked:hover,
1026
1228
  .checkbox.is-checked.is-hover {
1027
1229
  background:
1028
1230
  linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1029
- var(--color-fill-brand);
1231
+ var(--input-checkbox-container-background-active);
1232
+ color: var(--input-checkbox-text-color-hover);
1233
+ border-color: var(--input-checkbox-border-color-hover);
1234
+ border-width: var(--checkbox-border-size-hover);
1235
+ }
1236
+
1237
+ .checkbox:indeterminate:hover,
1238
+ .checkbox.is-indeterminate.is-hover {
1239
+ background:
1240
+ linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1241
+ var(--input-checkbox-container-background-active);
1242
+ color: var(--input-checkbox-text-color-hover);
1243
+ border-color: var(--input-checkbox-border-color-hover);
1244
+ border-width: var(--checkbox-border-size-hover);
1030
1245
  }
1031
1246
 
1032
1247
  .checkbox:active,
1033
1248
  .checkbox.is-active {
1034
1249
  background:
1035
1250
  linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1036
- var(--color-fill-surface);
1037
- border-color: var(--color-border-brand);
1251
+ var(--input-checkbox-container-background-default);
1252
+ border-color: var(--input-checkbox-border-color-active);
1038
1253
  border-width: var(--size-border-200);
1039
1254
  }
1040
1255
 
@@ -1042,21 +1257,140 @@
1042
1257
  .checkbox.is-checked.is-active {
1043
1258
  background:
1044
1259
  linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1045
- var(--color-fill-brand);
1260
+ var(--input-checkbox-container-background-active);
1261
+ border-color: var(--input-checkbox-border-color-active);
1262
+ }
1263
+
1264
+ .checkbox:indeterminate:active,
1265
+ .checkbox.is-indeterminate.is-active {
1266
+ background:
1267
+ linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1268
+ var(--input-checkbox-container-background-active);
1269
+ border-color: var(--input-checkbox-border-color-active);
1046
1270
  }
1047
1271
 
1048
1272
  .checkbox:focus-visible,
1049
1273
  .checkbox.is-focus-visible {
1050
- border-color: var(--color-border-brand);
1274
+ border-color: var(--input-checkbox-border-color-focus);
1051
1275
  outline: none;
1052
1276
  box-shadow: 0 0 0 var(--shadow-focus, 0) var(--color-focus, transparent);
1053
1277
  }
1054
1278
 
1055
1279
  .checkbox:disabled,
1056
1280
  .checkbox.is-disabled {
1057
- border-color: var(--color-border-disabled);
1058
- background: var(--color-fill-disabled);
1059
- color: var(--color-text-disabled);
1281
+ border-width: var(--checkbox-border-size-disabled);
1282
+ border-color: var(--input-checkbox-border-color-disabled);
1283
+ background: var(--input-checkbox-container-background-disabled);
1284
+ color: var(--input-checkbox-text-color-disabled);
1285
+ cursor: not-allowed;
1286
+ }
1287
+ }
1288
+ @layer components {
1289
+ .radio-field {
1290
+ display: inline-flex;
1291
+ align-items: center;
1292
+ gap: var(--typography-label-gap);
1293
+ font-family: var(--typography-label-font-family);
1294
+ font-weight: var(--typography-label-font-weight);
1295
+ font-size: var(--typography-label-font-size);
1296
+ line-height: var(--typography-label-line-height);
1297
+ color: var(--input-radio-text-color-default);
1298
+ cursor: pointer;
1299
+ }
1300
+
1301
+ .radio-field.is-disabled {
1302
+ color: var(--input-radio-text-color-disabled);
1303
+ cursor: not-allowed;
1304
+ }
1305
+
1306
+ .radio {
1307
+ inline-size: var(--size-spacing-600);
1308
+ block-size: var(--size-spacing-600);
1309
+ margin: 0;
1310
+ appearance: none;
1311
+ display: inline-grid;
1312
+ place-content: center;
1313
+ border-style: solid;
1314
+ border-width: var(--radio-border-size-default);
1315
+ border-color: var(--input-radio-border-color-default);
1316
+ border-radius: var(--size-radius-full);
1317
+ background: var(--input-radio-container-background-default);
1318
+ cursor: pointer;
1319
+ }
1320
+
1321
+ .radio::after {
1322
+ content: "";
1323
+ display: block;
1324
+ inline-size: 0;
1325
+ block-size: 0;
1326
+ border-radius: var(--size-radius-full);
1327
+ background: currentColor;
1328
+ transition: all 120ms ease;
1329
+ }
1330
+
1331
+ .radio:checked,
1332
+ .radio.is-checked {
1333
+ border-color: var(--input-radio-border-color-active);
1334
+ background: var(--input-radio-container-background-default);
1335
+ color: var(--input-radio-text-color-active);
1336
+ }
1337
+
1338
+ .radio:checked::after,
1339
+ .radio.is-checked::after {
1340
+ inline-size: 0.5rem;
1341
+ block-size: 0.5rem;
1342
+ background: var(--input-radio-border-color-active);
1343
+ }
1344
+
1345
+ .radio:hover,
1346
+ .radio.is-hover {
1347
+ background:
1348
+ linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1349
+ var(--input-radio-container-background-hover);
1350
+ color: var(--input-radio-text-color-hover);
1351
+ border-color: var(--input-radio-border-color-hover);
1352
+ border-width: var(--radio-border-size-hover);
1353
+ }
1354
+
1355
+ .radio:checked:hover,
1356
+ .radio.is-checked.is-hover {
1357
+ background:
1358
+ linear-gradient(0deg, var(--color-overlay-hover), var(--color-overlay-hover)),
1359
+ var(--input-radio-container-background-default);
1360
+ border-color: var(--input-radio-border-color-hover);
1361
+ border-width: var(--radio-border-size-hover);
1362
+ }
1363
+
1364
+ .radio:active,
1365
+ .radio.is-active {
1366
+ background:
1367
+ linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1368
+ var(--input-radio-container-background-default);
1369
+ border-color: var(--input-radio-border-color-active);
1370
+ border-width: var(--size-border-200);
1371
+ }
1372
+
1373
+ .radio:checked:active,
1374
+ .radio.is-checked.is-active {
1375
+ background:
1376
+ linear-gradient(0deg, var(--color-overlay-active), var(--color-overlay-active)),
1377
+ var(--input-radio-container-background-default);
1378
+ border-color: var(--input-radio-border-color-active);
1379
+ }
1380
+
1381
+ .radio:focus-visible,
1382
+ .radio.is-focus-visible {
1383
+ border-color: var(--input-radio-border-color-focus);
1384
+ outline: none;
1385
+ box-shadow: 0 0 0 var(--shadow-focus, 0) var(--color-focus, transparent);
1386
+ }
1387
+
1388
+ .radio:disabled,
1389
+ .radio.is-disabled {
1390
+ border-width: var(--radio-border-size-disabled);
1391
+ border-color: var(--input-radio-border-color-disabled);
1392
+ background: var(--input-radio-container-background-disabled);
1393
+ color: var(--input-radio-text-color-disabled);
1060
1394
  cursor: not-allowed;
1061
1395
  }
1062
1396
  }
@@ -1215,3 +1549,400 @@
1215
1549
  background: var(--color-fill-brand);
1216
1550
  }
1217
1551
  }
1552
+ @layer components {
1553
+ .badge {
1554
+ display: inline-flex;
1555
+ align-items: center;
1556
+ gap: var(--badge-gap, 0.25rem);
1557
+ border-radius: var(--badge-border-radius, 625rem);
1558
+ font-family: var(--badge-font-family, inherit);
1559
+ font-weight: var(--badge-font-weight, 700);
1560
+ white-space: nowrap;
1561
+ background: var(--badge-default-container-background);
1562
+ color: var(--badge-default-text-color);
1563
+ font-size: var(--badge-font-size-md);
1564
+ line-height: var(--badge-line-height-md);
1565
+ padding-inline: var(--badge-padding-inline-md);
1566
+ padding-block: var(--badge-padding-block-md);
1567
+ }
1568
+
1569
+ /* ── Sizes ── */
1570
+
1571
+ .badge.sm {
1572
+ font-size: var(--badge-font-size-sm);
1573
+ line-height: var(--badge-line-height-sm);
1574
+ padding-inline: var(--badge-padding-inline-sm);
1575
+ padding-block: var(--badge-padding-block-sm);
1576
+ }
1577
+
1578
+ /* ── Variants ── */
1579
+
1580
+ .badge.brand {
1581
+ background: var(--badge-brand-container-background);
1582
+ color: var(--badge-brand-text-color);
1583
+ }
1584
+
1585
+ .badge.success {
1586
+ background: var(--badge-success-container-background);
1587
+ color: var(--badge-success-text-color);
1588
+ }
1589
+
1590
+ .badge.danger {
1591
+ background: var(--badge-danger-container-background);
1592
+ color: var(--badge-danger-text-color);
1593
+ }
1594
+
1595
+ /* ── Icon slot ── */
1596
+
1597
+ .badge > .icon {
1598
+ flex: 0 0 auto;
1599
+ }
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
+ }