@aiaiai-pt/design-system 0.1.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 (52) hide show
  1. package/components/Alert.svelte +100 -0
  2. package/components/Badge.svelte +108 -0
  3. package/components/BottomNav.svelte +37 -0
  4. package/components/BottomNavItem.svelte +121 -0
  5. package/components/Button.svelte +269 -0
  6. package/components/Card.svelte +108 -0
  7. package/components/Checkbox.svelte +138 -0
  8. package/components/CodeBlock.svelte +187 -0
  9. package/components/CodeEditor.svelte +221 -0
  10. package/components/CollapsibleSection.svelte +160 -0
  11. package/components/Combobox.svelte +396 -0
  12. package/components/EmptyState.svelte +148 -0
  13. package/components/FileUpload.svelte +280 -0
  14. package/components/FileUploadItem.svelte +222 -0
  15. package/components/Input.svelte +222 -0
  16. package/components/KeyValue.svelte +79 -0
  17. package/components/Label.svelte +49 -0
  18. package/components/List.svelte +70 -0
  19. package/components/ListItem.svelte +125 -0
  20. package/components/Menu.svelte +161 -0
  21. package/components/MenuItem.svelte +120 -0
  22. package/components/MenuSeparator.svelte +34 -0
  23. package/components/Modal.svelte +260 -0
  24. package/components/OptionGrid.svelte +195 -0
  25. package/components/Panel.svelte +256 -0
  26. package/components/Popover.svelte +194 -0
  27. package/components/Progress.svelte +78 -0
  28. package/components/Select.svelte +182 -0
  29. package/components/Separator.svelte +47 -0
  30. package/components/Sidebar.svelte +106 -0
  31. package/components/SidebarItem.svelte +154 -0
  32. package/components/SidebarSection.svelte +43 -0
  33. package/components/Skeleton.svelte +79 -0
  34. package/components/Status.svelte +104 -0
  35. package/components/Stepper.svelte +142 -0
  36. package/components/Tab.svelte +94 -0
  37. package/components/TabList.svelte +36 -0
  38. package/components/TabPanel.svelte +45 -0
  39. package/components/Tabs.svelte +46 -0
  40. package/components/Tag.svelte +96 -0
  41. package/components/Textarea.svelte +143 -0
  42. package/components/Toast.svelte +114 -0
  43. package/components/Toggle.svelte +132 -0
  44. package/components/index.js +70 -0
  45. package/package.json +45 -0
  46. package/tokens/base.css +175 -0
  47. package/tokens/components.css +530 -0
  48. package/tokens/semantic.css +211 -0
  49. package/tokens/themes/aiaiai.css +53 -0
  50. package/tokens/themes/bespoke-example.css +148 -0
  51. package/tokens/themes/branded-example.css +55 -0
  52. package/tokens/utilities.css +1865 -0
@@ -0,0 +1,530 @@
1
+ /*
2
+ * aiaiai Design System — Component Tokens (components.css)
3
+ *
4
+ * Scoped to specific components. Reference semantic tokens.
5
+ * These allow component-level tuning without breaking the system.
6
+ *
7
+ * Naming: --{component}-{property}
8
+ */
9
+
10
+ :root {
11
+ /* ═══════════════════════════════════════════════
12
+ BUTTON
13
+ ═══════════════════════════════════════════════ */
14
+
15
+ --button-font: var(--type-label-font);
16
+ --button-tracking: var(--type-label-tracking);
17
+ --button-radius: var(--radius-md);
18
+ --button-transition: var(--duration-instant) var(--easing-default);
19
+
20
+ /* Sizes */
21
+ --button-sm-height: 28px;
22
+ --button-sm-padding-x: var(--space-sm);
23
+ --button-sm-font-size: var(--type-caption-size);
24
+
25
+ --button-md-height: 36px;
26
+ --button-md-padding-x: var(--space-md);
27
+ --button-md-font-size: var(--type-label-size);
28
+
29
+ --button-lg-height: 44px;
30
+ --button-lg-padding-x: var(--space-lg);
31
+ --button-lg-font-size: var(--type-body-sm-size);
32
+
33
+ /* Primary variant */
34
+ --button-primary-bg: var(--color-accent);
35
+ --button-primary-bg-hover: var(--color-accent-hover);
36
+ --button-primary-text: var(--color-text-on-accent);
37
+ --button-primary-border: none;
38
+
39
+ /* Secondary variant */
40
+ --button-secondary-bg: transparent;
41
+ --button-secondary-bg-hover: var(--color-surface-secondary);
42
+ --button-secondary-text: var(--color-text);
43
+ --button-secondary-border: var(--elevation-border);
44
+
45
+ /* Ghost variant */
46
+ --button-ghost-bg: transparent;
47
+ --button-ghost-bg-hover: var(--color-surface-secondary);
48
+ --button-ghost-text: var(--color-text-secondary);
49
+ --button-ghost-border: none;
50
+
51
+ /* Destructive variant */
52
+ --button-destructive-bg: var(--color-destructive);
53
+ --button-destructive-bg-hover: var(--color-destructive-hover);
54
+ --button-destructive-text: var(--color-text-on-accent);
55
+ --button-destructive-border: none;
56
+
57
+ /* ═══════════════════════════════════════════════
58
+ INPUT
59
+ ═══════════════════════════════════════════════ */
60
+
61
+ --input-font: var(--type-data-font);
62
+ --input-font-size: var(--type-data-size);
63
+ --input-radius: var(--radius-sm);
64
+ --input-border: var(--elevation-border);
65
+ --input-border-focus: var(--elevation-border-strong);
66
+ --input-bg: var(--color-surface);
67
+ --input-text: var(--color-text);
68
+ --input-placeholder: var(--color-text-muted);
69
+ --input-transition: var(--duration-instant) var(--easing-default);
70
+
71
+ /* Sizes */
72
+ --input-sm-height: 28px;
73
+ --input-sm-padding-x: var(--space-sm);
74
+
75
+ --input-md-height: 36px;
76
+ --input-md-padding-x: var(--space-sm);
77
+
78
+ --input-lg-height: 44px;
79
+ --input-lg-padding-x: var(--space-md);
80
+
81
+ /* Label (always mono) */
82
+ --input-label-font: var(--type-label-font);
83
+ --input-label-size: var(--type-label-size);
84
+ --input-label-tracking: var(--type-label-tracking);
85
+ --input-label-color: var(--color-text-secondary);
86
+ --input-label-gap: var(--space-xs);
87
+
88
+ /* Help text */
89
+ --input-help-font: var(--type-body-sm-font);
90
+ --input-help-size: var(--type-body-sm-size);
91
+ --input-help-color: var(--color-text-muted);
92
+ --input-help-gap: var(--space-xs);
93
+
94
+ /* Error state */
95
+ --input-error-border-color: var(--color-destructive);
96
+ --input-error-text: var(--color-destructive);
97
+
98
+ /* Toggle */
99
+ --toggle-width: 36px;
100
+ --toggle-height: 20px;
101
+ --toggle-radius: var(--radius-pill);
102
+ --toggle-bg-off: var(--color-surface-tertiary);
103
+ --toggle-bg-on: var(--color-accent);
104
+ --toggle-knob-size: 16px;
105
+ --toggle-knob-color: var(--color-surface);
106
+
107
+ /* Checkbox */
108
+ --checkbox-size: 16px;
109
+ --checkbox-radius: var(--radius-sm);
110
+ --checkbox-border: var(--elevation-border-strong);
111
+ --checkbox-bg-checked: var(--color-accent);
112
+ --checkbox-check-color: var(--color-text-on-accent);
113
+
114
+ /* ═══════════════════════════════════════════════
115
+ CARD
116
+ ═══════════════════════════════════════════════ */
117
+
118
+ --card-radius: var(--radius-md);
119
+ --card-padding: var(--space-lg);
120
+ --card-bg: var(--color-surface);
121
+ --card-transition: var(--duration-instant) var(--easing-default);
122
+
123
+ /* Flat variant (no elevation) */
124
+ --card-flat-border: none;
125
+ --card-flat-shadow: none;
126
+
127
+ /* Bordered variant (exposed mechanism default) */
128
+ --card-bordered-border: var(--elevation-border);
129
+ --card-bordered-shadow: none;
130
+
131
+ /* Elevated variant (floating) */
132
+ --card-elevated-border: none;
133
+ --card-elevated-shadow: var(--elevation-raised);
134
+
135
+ /* Interactive states */
136
+ --card-interactive-hover-border: var(--elevation-border-strong);
137
+ --card-interactive-active-bg: var(--color-surface-secondary);
138
+ --card-selected-border-color: var(--color-accent);
139
+
140
+ /* ═══════════════════════════════════════════════
141
+ NAVIGATION — SIDEBAR
142
+ ═══════════════════════════════════════════════ */
143
+
144
+ --nav-sidebar-width: 240px;
145
+ --nav-sidebar-width-collapsed: 48px;
146
+ --nav-sidebar-bg: var(--color-surface-secondary);
147
+ --nav-sidebar-border: var(--elevation-border);
148
+ --nav-sidebar-padding: var(--space-sm);
149
+
150
+ --nav-item-height: 32px;
151
+ --nav-item-padding-x: var(--space-sm);
152
+ --nav-item-radius: var(--radius-sm);
153
+ --nav-item-font: var(--type-label-font);
154
+ --nav-item-font-size: var(--type-label-size);
155
+ --nav-item-tracking: var(--type-label-tracking);
156
+ --nav-item-color: var(--color-text-secondary);
157
+ --nav-item-color-hover: var(--color-text);
158
+ --nav-item-color-active: var(--color-text);
159
+ --nav-item-bg-hover: var(--color-surface-tertiary);
160
+ --nav-item-bg-active: var(--color-surface);
161
+ --nav-item-transition: var(--duration-instant) var(--easing-default);
162
+
163
+ --nav-section-font: var(--type-caption-font);
164
+ --nav-section-size: var(--type-caption-size);
165
+ --nav-section-tracking: var(--type-caption-tracking);
166
+ --nav-section-color: var(--color-text-muted);
167
+ --nav-section-margin-top: var(--space-md);
168
+
169
+ /* ═══════════════════════════════════════════════
170
+ NAVIGATION — MOBILE HEADER
171
+ ═══════════════════════════════════════════════ */
172
+
173
+ --nav-mobile-header-height: 48px;
174
+ --nav-mobile-header-bg: var(--color-surface-secondary);
175
+ --nav-mobile-header-border: var(--elevation-border);
176
+
177
+ /* Stacking order */
178
+ --nav-mobile-header-z: 20;
179
+ --nav-sidebar-backdrop-z: 25;
180
+ --nav-sidebar-drawer-z: 30;
181
+
182
+ /* ═══════════════════════════════════════════════
183
+ NAVIGATION — BOTTOM BAR
184
+ ═══════════════════════════════════════════════ */
185
+
186
+ --nav-bottom-height: 56px;
187
+ --nav-bottom-bg: var(--color-surface);
188
+ --nav-bottom-border-top: var(--elevation-border);
189
+ --nav-bottom-item-color: var(--color-text-muted);
190
+ --nav-bottom-item-color-active: var(--color-accent);
191
+ --nav-bottom-item-font: var(--type-caption-font);
192
+ --nav-bottom-item-size: var(--type-caption-size);
193
+
194
+ /* ═══════════════════════════════════════════════
195
+ DATA DISPLAY
196
+ ═══════════════════════════════════════════════ */
197
+
198
+ /* Badge */
199
+ --badge-font: var(--type-label-font);
200
+ --badge-size: var(--type-label-size);
201
+ --badge-tracking: var(--type-label-tracking);
202
+ --badge-radius: var(--radius-pill);
203
+ --badge-padding-x: var(--space-sm);
204
+ --badge-padding-y: var(--space-2xs);
205
+ --badge-neutral-bg: var(--color-surface-tertiary);
206
+ --badge-neutral-text: var(--color-text-secondary);
207
+
208
+ /* Tag */
209
+ --tag-font: var(--type-label-font);
210
+ --tag-size: var(--type-label-size);
211
+ --tag-radius: var(--radius-sm);
212
+ --tag-padding-x: var(--space-sm);
213
+ --tag-padding-y: var(--space-2xs);
214
+ --tag-border: var(--elevation-border);
215
+ --tag-bg: var(--color-surface);
216
+ --tag-text: var(--color-text-secondary);
217
+
218
+ /* Key-value pair */
219
+ --kv-key-font: var(--type-label-font);
220
+ --kv-key-size: var(--type-label-size);
221
+ --kv-key-color: var(--color-text-muted);
222
+ --kv-value-font: var(--type-data-font);
223
+ --kv-value-size: var(--type-data-size);
224
+ --kv-value-color: var(--color-text);
225
+ --kv-gap: var(--space-xs);
226
+
227
+ /* Status indicator */
228
+ --status-dot-size: 8px;
229
+ --status-font: var(--type-label-font);
230
+ --status-size: var(--type-label-size);
231
+ --status-gap: var(--space-xs);
232
+
233
+ /* ═══════════════════════════════════════════════
234
+ FEEDBACK
235
+ ═══════════════════════════════════════════════ */
236
+
237
+ /* Toast */
238
+ --toast-radius: var(--radius-md);
239
+ --toast-padding: var(--space-md);
240
+ --toast-shadow: var(--elevation-overlay);
241
+ --toast-bg: var(--color-surface);
242
+ --toast-border: var(--elevation-border);
243
+ --toast-font: var(--type-body-sm-font);
244
+ --toast-font-size: var(--type-body-sm-size);
245
+ --toast-max-width: 360px;
246
+
247
+ /* Empty state */
248
+ --empty-icon-size: 48px;
249
+ --empty-icon-color: var(--color-text-muted);
250
+ --empty-heading-font: var(--type-heading-font);
251
+ --empty-heading-size: var(--type-heading-size);
252
+ --empty-body-font: var(--type-body-sm-font);
253
+ --empty-body-size: var(--type-body-sm-size);
254
+ --empty-body-color: var(--color-text-secondary);
255
+ --empty-gap: var(--space-md);
256
+
257
+ /* Skeleton */
258
+ --skeleton-bg: var(--color-surface-tertiary);
259
+ --skeleton-shine: var(--color-surface-secondary);
260
+ --skeleton-radius: var(--radius-sm);
261
+ --skeleton-duration: 1.5s;
262
+
263
+ /* ═══════════════════════════════════════════════
264
+ PANEL / DRAWER (slide-over surface)
265
+ ═══════════════════════════════════════════════ */
266
+
267
+ --panel-width: 480px;
268
+ --panel-width-narrow: 360px;
269
+ --panel-width-wide: 640px;
270
+ --panel-bg: var(--color-surface);
271
+ --panel-border: var(--elevation-border);
272
+ --panel-shadow: var(--elevation-overlay);
273
+ --panel-radius: 0;
274
+ --panel-header-height: 56px;
275
+ --panel-header-border: var(--elevation-border);
276
+ --panel-header-font: var(--type-heading-sm-font);
277
+ --panel-header-size: var(--type-heading-sm-size);
278
+ --panel-header-weight: var(--type-heading-sm-weight);
279
+ --panel-padding: var(--space-lg);
280
+ --panel-transition: var(--duration-normal) var(--easing-enter);
281
+ --panel-backdrop: var(--color-overlay);
282
+
283
+ /* ═══════════════════════════════════════════════
284
+ STEPPER (wizard / multi-step flow)
285
+ ═══════════════════════════════════════════════ */
286
+
287
+ --stepper-dot-size: 32px;
288
+ --stepper-dot-font: var(--type-label-font);
289
+ --stepper-dot-size-text: var(--type-label-size);
290
+ --stepper-dot-tracking: var(--type-label-tracking);
291
+ --stepper-dot-bg: var(--color-surface-tertiary);
292
+ --stepper-dot-color: var(--color-text-secondary);
293
+ --stepper-dot-border: none;
294
+ --stepper-active-bg: var(--color-accent);
295
+ --stepper-active-color: var(--color-text-on-accent);
296
+ --stepper-complete-bg: var(--color-success);
297
+ --stepper-complete-color: var(--color-text-on-accent);
298
+ --stepper-line-color: var(--color-border);
299
+ --stepper-line-width: var(--border-width-thick);
300
+ --stepper-label-font: var(--type-label-font);
301
+ --stepper-label-size: var(--type-label-size);
302
+ --stepper-label-tracking: var(--type-label-tracking);
303
+ --stepper-label-color: var(--color-text-muted);
304
+ --stepper-label-active-color: var(--color-text);
305
+ --stepper-gap: var(--space-sm);
306
+ --stepper-transition: var(--duration-fast) var(--easing-default);
307
+
308
+ /* ═══════════════════════════════════════════════
309
+ CODE BLOCK (editor / syntax display)
310
+ ═══════════════════════════════════════════════ */
311
+
312
+ --code-font: var(--type-data-font);
313
+ --code-font-size: var(--type-data-size);
314
+ --code-line-height: var(--type-data-leading);
315
+ --code-bg: var(--color-surface-secondary);
316
+ --code-text: var(--color-text);
317
+ --code-border: var(--elevation-border);
318
+ --code-radius: var(--radius-sm);
319
+ --code-padding: var(--space-md);
320
+ --code-line-number-color: var(--color-text-muted);
321
+ --code-line-number-width: 48px;
322
+ --code-gutter-bg: var(--color-surface-tertiary);
323
+ --code-gutter-border: var(--elevation-border);
324
+ --code-selection-bg: var(--color-accent-subtle);
325
+ --code-cursor-color: var(--color-accent);
326
+
327
+ /* ═══════════════════════════════════════════════
328
+ TEXTAREA
329
+ ═══════════════════════════════════════════════ */
330
+
331
+ --textarea-min-height: 80px;
332
+ --textarea-padding: var(--space-sm);
333
+
334
+ /* ═══════════════════════════════════════════════
335
+ SEPARATOR
336
+ ═══════════════════════════════════════════════ */
337
+
338
+ --separator-color: var(--color-border);
339
+ --separator-thickness: var(--border-width-default);
340
+
341
+ /* ═══════════════════════════════════════════════
342
+ PROGRESS
343
+ ═══════════════════════════════════════════════ */
344
+
345
+ --progress-height: 8px;
346
+ --progress-radius: var(--radius-pill);
347
+ --progress-bg: var(--color-surface-tertiary);
348
+ --progress-fill: var(--color-accent);
349
+ --progress-transition: var(--duration-fast) var(--easing-default);
350
+ --progress-indeterminate-duration: 1.5s;
351
+
352
+ /* ═══════════════════════════════════════════════
353
+ ALERT (inline callout)
354
+ ═══════════════════════════════════════════════ */
355
+
356
+ --alert-radius: var(--radius-md);
357
+ --alert-padding: var(--space-md);
358
+ --alert-border: var(--elevation-border);
359
+ --alert-bg: var(--color-surface);
360
+ --alert-font: var(--type-body-sm-font);
361
+ --alert-font-size: var(--type-body-sm-size);
362
+
363
+ /* ═══════════════════════════════════════════════
364
+ TABS
365
+ ═══════════════════════════════════════════════ */
366
+
367
+ --tabs-list-bg: var(--color-surface-secondary);
368
+ --tabs-list-radius: var(--radius-md);
369
+ --tabs-list-padding: var(--space-2xs);
370
+ --tabs-trigger-font: var(--type-label-font);
371
+ --tabs-trigger-size: var(--type-label-size);
372
+ --tabs-trigger-tracking: var(--type-label-tracking);
373
+ --tabs-trigger-height: 32px;
374
+ --tabs-trigger-padding-x: var(--space-md);
375
+ --tabs-trigger-radius: var(--radius-sm);
376
+ --tabs-trigger-color: var(--color-text-secondary);
377
+ --tabs-trigger-color-active: var(--color-text);
378
+ --tabs-trigger-bg-active: var(--color-surface);
379
+ --tabs-trigger-shadow-active: var(--elevation-raised);
380
+ --tabs-trigger-transition: var(--duration-instant) var(--easing-default);
381
+ --tabs-content-padding-top: var(--space-md);
382
+
383
+ /* ═══════════════════════════════════════════════
384
+ MODAL (centered overlay)
385
+ ═══════════════════════════════════════════════ */
386
+
387
+ --modal-width: 480px;
388
+ --modal-width-sm: 360px;
389
+ --modal-width-lg: 640px;
390
+ --modal-bg: var(--color-surface);
391
+ --modal-radius: var(--radius-lg);
392
+ --modal-shadow: var(--elevation-overlay);
393
+ --modal-padding: var(--space-lg);
394
+ --modal-header-height: 56px;
395
+ --modal-header-border: var(--elevation-border);
396
+ --modal-header-font: var(--type-heading-sm-font);
397
+ --modal-header-size: var(--type-heading-sm-size);
398
+ --modal-header-weight: var(--type-heading-sm-weight);
399
+ --modal-backdrop: var(--color-overlay);
400
+ --modal-transition: var(--duration-normal) var(--easing-enter);
401
+
402
+ /* ═══════════════════════════════════════════════
403
+ ACCENT STRIPE
404
+ ═══════════════════════════════════════════════ */
405
+
406
+ --accent-stripe-width: 3px;
407
+
408
+ /* ═══════════════════════════════════════════════
409
+ LIST
410
+ ═══════════════════════════════════════════════ */
411
+
412
+ --list-gap: var(--space-sm);
413
+ --list-border: var(--elevation-border);
414
+ --list-border-radius: var(--radius-md);
415
+
416
+ /* ═══════════════════════════════════════════════
417
+ LIST ITEM
418
+ ═══════════════════════════════════════════════ */
419
+
420
+ --list-item-padding-x: var(--space-md);
421
+ --list-item-padding-y: var(--space-sm);
422
+ --list-item-gap: var(--space-md);
423
+ --list-item-bg: var(--color-surface);
424
+ --list-item-bg-hover: var(--color-surface-secondary);
425
+ --list-item-divider: var(--elevation-border);
426
+ --list-item-transition: var(--duration-instant) var(--easing-default);
427
+ --list-item-leading-gap: var(--space-xs);
428
+ --list-item-trailing-gap: var(--space-xs);
429
+
430
+ /* ═══════════════════════════════════════════════
431
+ FILE UPLOAD
432
+ ═══════════════════════════════════════════════ */
433
+
434
+ --fileupload-border: var(--border-width-thick) dashed var(--color-border);
435
+ --fileupload-border-dragging: var(--border-width-thick) solid
436
+ var(--color-accent);
437
+ --fileupload-radius: var(--radius-md);
438
+ --fileupload-padding: var(--space-xl);
439
+ --fileupload-bg: transparent;
440
+ --fileupload-bg-dragging: var(--color-accent-subtle);
441
+ --fileupload-transition: var(--duration-fast) var(--easing-default);
442
+ --fileupload-icon-size: 32px;
443
+ --fileupload-icon-color: var(--color-text-muted);
444
+ --fileupload-icon-color-dragging: var(--color-accent);
445
+ --fileupload-text-font: var(--type-body-sm-font);
446
+ --fileupload-text-size: var(--type-body-sm-size);
447
+ --fileupload-text-color: var(--color-text-secondary);
448
+ --fileupload-hint-font: var(--type-caption-font);
449
+ --fileupload-hint-size: var(--type-caption-size);
450
+ --fileupload-hint-color: var(--color-text-muted);
451
+
452
+ /* ═══════════════════════════════════════════════
453
+ FILE UPLOAD ITEM
454
+ ═══════════════════════════════════════════════ */
455
+
456
+ --fileupload-item-padding: var(--space-sm) var(--space-md);
457
+ --fileupload-item-gap: var(--space-sm);
458
+ --fileupload-item-radius: var(--radius-sm);
459
+ --fileupload-item-bg: var(--color-surface);
460
+ --fileupload-item-border: var(--elevation-border);
461
+ --fileupload-item-name-font: var(--type-body-sm-font);
462
+ --fileupload-item-name-size: var(--type-body-sm-size);
463
+ --fileupload-item-name-color: var(--color-text);
464
+ --fileupload-item-size-font: var(--type-caption-font);
465
+ --fileupload-item-size-size: var(--type-caption-size);
466
+ --fileupload-item-size-color: var(--color-text-muted);
467
+ --fileupload-item-icon-size: 20px;
468
+ --fileupload-item-error-color: var(--color-destructive);
469
+ --fileupload-item-complete-color: var(--color-success);
470
+
471
+ /* ═══════════════════════════════════════════════
472
+ POPOVER
473
+ ═══════════════════════════════════════════════ */
474
+
475
+ --popover-bg: var(--raw-color-white);
476
+ --popover-border: var(--elevation-border-strong);
477
+ --popover-shadow: var(--elevation-overlay);
478
+ --popover-radius: var(--radius-md);
479
+ --popover-padding: var(--space-sm);
480
+ --popover-z: 50;
481
+ --popover-enter-offset: -4px;
482
+
483
+ /* ═══════════════════════════════════════════════
484
+ MENU
485
+ ═══════════════════════════════════════════════ */
486
+
487
+ --menu-min-width: 180px;
488
+ --menu-padding: var(--space-xs);
489
+ --menu-item-height: 32px;
490
+ --menu-item-padding-x: var(--space-sm);
491
+ --menu-item-padding-y: var(--space-xs);
492
+ --menu-item-radius: var(--radius-sm);
493
+ --menu-item-gap: var(--space-sm);
494
+ --menu-item-font-size: var(--type-body-sm-size);
495
+ --menu-item-bg-hover: var(--color-surface-secondary);
496
+ --menu-item-color: var(--color-text);
497
+ --menu-item-color-destructive: var(--color-destructive);
498
+ --menu-item-color-disabled: var(--color-text-tertiary);
499
+ --menu-separator-color: var(--color-border);
500
+ --menu-separator-spacing: var(--space-xs);
501
+
502
+ /* ═══════════════════════════════════════════════
503
+ COMBOBOX
504
+ ═══════════════════════════════════════════════ */
505
+
506
+ --combobox-list-max-height: 240px;
507
+ --combobox-item-padding: var(--space-xs) var(--space-sm);
508
+ --combobox-item-radius: var(--radius-sm);
509
+ --combobox-item-hover-bg: var(--color-surface-secondary);
510
+ --combobox-item-active-bg: var(--color-accent-subtle);
511
+ --combobox-item-active-color: var(--color-accent);
512
+ --combobox-highlight-color: var(--color-accent);
513
+ --combobox-group-font: var(--type-overline-font);
514
+ --combobox-group-size: var(--type-overline-size);
515
+ --combobox-group-tracking: var(--type-overline-tracking);
516
+ --combobox-group-color: var(--color-text-muted);
517
+ --combobox-group-padding: var(--space-sm) var(--space-sm) var(--space-xs);
518
+ --combobox-description-font: var(--type-caption-font);
519
+ --combobox-description-size: var(--type-caption-size);
520
+ --combobox-description-color: var(--color-text-muted);
521
+ --combobox-empty-color: var(--color-text-muted);
522
+
523
+ /* ═══════════════════════════════════════════════
524
+ FOCUS RING (global)
525
+ ═══════════════════════════════════════════════ */
526
+
527
+ --focus-ring-width: var(--border-width-thick);
528
+ --focus-ring-offset: var(--border-width-thick);
529
+ --focus-ring-color: var(--color-accent);
530
+ }