@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,1865 @@
1
+ /*
2
+ * aiaiai Design System — Utilities (utilities.css)
3
+ *
4
+ * Global utility classes that consume semantic tokens.
5
+ * Framework-agnostic — works with plain HTML, Svelte, React, etc.
6
+ *
7
+ * Provides the same class names as Tailwind CSS but backed by
8
+ * design system tokens. Import this to replace @tailwind utilities.
9
+ *
10
+ * Contents:
11
+ * 1. Display
12
+ * 2. Flexbox
13
+ * 3. Grid (+ responsive)
14
+ * 4. Gap
15
+ * 5. Padding
16
+ * 6. Margin
17
+ * 7. Width & Height
18
+ * 8. Position
19
+ * 9. Overflow
20
+ * 10. Typography scale (9 steps)
21
+ * 11. Typography utilities
22
+ * 12. Text color
23
+ * 13. Background color
24
+ * 14. Border
25
+ * 15. Border radius
26
+ * 16. Shadow
27
+ * 17. Opacity
28
+ * 18. Transition & Animation
29
+ * 19. Hover & Interactive states
30
+ * 20. Spacing helpers
31
+ * 21. Accessibility
32
+ * 22. SVG / Stroke
33
+ * 23. Table
34
+ * 24. Miscellaneous
35
+ * 25. Focus ring
36
+ * 26. Reduced motion
37
+ */
38
+
39
+ /* ═══════════════════════════════════════════════
40
+ DISPLAY
41
+ ═══════════════════════════════════════════════ */
42
+
43
+ .flex {
44
+ display: flex;
45
+ }
46
+ .inline-flex {
47
+ display: inline-flex;
48
+ }
49
+ .grid {
50
+ display: grid;
51
+ }
52
+ .inline-grid {
53
+ display: inline-grid;
54
+ }
55
+ .block {
56
+ display: block;
57
+ }
58
+ .inline-block {
59
+ display: inline-block;
60
+ }
61
+ .inline {
62
+ display: inline;
63
+ }
64
+ .hidden {
65
+ display: none;
66
+ }
67
+ .contents {
68
+ display: contents;
69
+ }
70
+
71
+ /* ═══════════════════════════════════════════════
72
+ FLEXBOX
73
+ ═══════════════════════════════════════════════ */
74
+
75
+ .flex-row {
76
+ flex-direction: row;
77
+ }
78
+ .flex-col {
79
+ flex-direction: column;
80
+ }
81
+ .flex-wrap {
82
+ flex-wrap: wrap;
83
+ }
84
+ .flex-nowrap {
85
+ flex-wrap: nowrap;
86
+ }
87
+ .flex-1 {
88
+ flex: 1 1 0%;
89
+ }
90
+ .flex-auto {
91
+ flex: 1 1 auto;
92
+ }
93
+ .flex-none {
94
+ flex: none;
95
+ }
96
+ .flex-shrink-0 {
97
+ flex-shrink: 0;
98
+ }
99
+ .flex-grow {
100
+ flex-grow: 1;
101
+ }
102
+ .grow {
103
+ flex-grow: 1;
104
+ }
105
+ .shrink-0 {
106
+ flex-shrink: 0;
107
+ }
108
+
109
+ .items-start {
110
+ align-items: flex-start;
111
+ }
112
+ .items-center {
113
+ align-items: center;
114
+ }
115
+ .items-end {
116
+ align-items: flex-end;
117
+ }
118
+ .items-baseline {
119
+ align-items: baseline;
120
+ }
121
+ .items-stretch {
122
+ align-items: stretch;
123
+ }
124
+
125
+ .justify-start {
126
+ justify-content: flex-start;
127
+ }
128
+ .justify-center {
129
+ justify-content: center;
130
+ }
131
+ .justify-end {
132
+ justify-content: flex-end;
133
+ }
134
+ .justify-between {
135
+ justify-content: space-between;
136
+ }
137
+ .justify-around {
138
+ justify-content: space-around;
139
+ }
140
+ .justify-evenly {
141
+ justify-content: space-evenly;
142
+ }
143
+
144
+ .self-start {
145
+ align-self: flex-start;
146
+ }
147
+ .self-center {
148
+ align-self: center;
149
+ }
150
+ .self-end {
151
+ align-self: flex-end;
152
+ }
153
+
154
+ /* ═══════════════════════════════════════════════
155
+ GRID
156
+ ═══════════════════════════════════════════════ */
157
+
158
+ .grid-cols-1 {
159
+ grid-template-columns: repeat(1, minmax(0, 1fr));
160
+ }
161
+ .grid-cols-2 {
162
+ grid-template-columns: repeat(2, minmax(0, 1fr));
163
+ }
164
+ .grid-cols-3 {
165
+ grid-template-columns: repeat(3, minmax(0, 1fr));
166
+ }
167
+ .grid-cols-4 {
168
+ grid-template-columns: repeat(4, minmax(0, 1fr));
169
+ }
170
+ .grid-cols-5 {
171
+ grid-template-columns: repeat(5, minmax(0, 1fr));
172
+ }
173
+ .grid-cols-6 {
174
+ grid-template-columns: repeat(6, minmax(0, 1fr));
175
+ }
176
+ .grid-cols-12 {
177
+ grid-template-columns: repeat(12, minmax(0, 1fr));
178
+ }
179
+
180
+ .col-span-1 {
181
+ grid-column: span 1 / span 1;
182
+ }
183
+ .col-span-2 {
184
+ grid-column: span 2 / span 2;
185
+ }
186
+ .col-span-3 {
187
+ grid-column: span 3 / span 3;
188
+ }
189
+ .col-span-4 {
190
+ grid-column: span 4 / span 4;
191
+ }
192
+ .col-span-6 {
193
+ grid-column: span 6 / span 6;
194
+ }
195
+ .col-span-full {
196
+ grid-column: 1 / -1;
197
+ }
198
+
199
+ .grid-rows-2 {
200
+ grid-template-rows: repeat(2, minmax(0, 1fr));
201
+ }
202
+ .grid-rows-3 {
203
+ grid-template-rows: repeat(3, minmax(0, 1fr));
204
+ }
205
+ .row-span-2 {
206
+ grid-row: span 2 / span 2;
207
+ }
208
+
209
+ /* Responsive grid — sm (640px+) */
210
+ @media (min-width: 640px) {
211
+ .sm\:grid-cols-2 {
212
+ grid-template-columns: repeat(2, minmax(0, 1fr));
213
+ }
214
+ .sm\:grid-cols-3 {
215
+ grid-template-columns: repeat(3, minmax(0, 1fr));
216
+ }
217
+ .sm\:flex-row {
218
+ flex-direction: row;
219
+ }
220
+ }
221
+
222
+ /* Responsive grid — md (768px+) */
223
+ @media (min-width: 768px) {
224
+ .md\:grid-cols-2 {
225
+ grid-template-columns: repeat(2, minmax(0, 1fr));
226
+ }
227
+ .md\:grid-cols-3 {
228
+ grid-template-columns: repeat(3, minmax(0, 1fr));
229
+ }
230
+ .md\:grid-cols-4 {
231
+ grid-template-columns: repeat(4, minmax(0, 1fr));
232
+ }
233
+ .md\:col-span-2 {
234
+ grid-column: span 2 / span 2;
235
+ }
236
+ .md\:col-span-3 {
237
+ grid-column: span 3 / span 3;
238
+ }
239
+ .md\:hidden {
240
+ display: none;
241
+ }
242
+ .md\:flex {
243
+ display: flex;
244
+ }
245
+ }
246
+
247
+ /* Responsive grid — lg (1024px+) */
248
+ @media (min-width: 1024px) {
249
+ .lg\:grid-cols-2 {
250
+ grid-template-columns: repeat(2, minmax(0, 1fr));
251
+ }
252
+ .lg\:grid-cols-3 {
253
+ grid-template-columns: repeat(3, minmax(0, 1fr));
254
+ }
255
+ .lg\:grid-cols-4 {
256
+ grid-template-columns: repeat(4, minmax(0, 1fr));
257
+ }
258
+ .lg\:col-span-2 {
259
+ grid-column: span 2 / span 2;
260
+ }
261
+ .lg\:col-span-3 {
262
+ grid-column: span 3 / span 3;
263
+ }
264
+ .lg\:flex {
265
+ display: flex;
266
+ }
267
+ .lg\:hidden {
268
+ display: none;
269
+ }
270
+ }
271
+
272
+ /* ═══════════════════════════════════════════════
273
+ GAP (token-backed)
274
+ ═══════════════════════════════════════════════ */
275
+
276
+ .gap-0 {
277
+ gap: 0;
278
+ }
279
+ .gap-0\.5 {
280
+ gap: var(--space-2xs);
281
+ }
282
+ .gap-1 {
283
+ gap: var(--space-xs);
284
+ }
285
+ .gap-1\.5 {
286
+ gap: 6px;
287
+ }
288
+ .gap-2 {
289
+ gap: var(--space-sm);
290
+ }
291
+ .gap-3 {
292
+ gap: 12px;
293
+ }
294
+ .gap-4 {
295
+ gap: var(--space-md);
296
+ }
297
+ .gap-5 {
298
+ gap: 20px;
299
+ }
300
+ .gap-6 {
301
+ gap: var(--space-lg);
302
+ }
303
+ .gap-8 {
304
+ gap: var(--space-xl);
305
+ }
306
+ .gap-10 {
307
+ gap: 40px;
308
+ }
309
+ .gap-12 {
310
+ gap: var(--space-2xl);
311
+ }
312
+
313
+ .gap-x-2 {
314
+ column-gap: var(--space-sm);
315
+ }
316
+ .gap-x-4 {
317
+ column-gap: var(--space-md);
318
+ }
319
+ .gap-y-2 {
320
+ row-gap: var(--space-sm);
321
+ }
322
+ .gap-y-4 {
323
+ row-gap: var(--space-md);
324
+ }
325
+
326
+ /* ═══════════════════════════════════════════════
327
+ PADDING (token-backed)
328
+ ═══════════════════════════════════════════════ */
329
+
330
+ .p-0 {
331
+ padding: 0;
332
+ }
333
+ .p-0\.5 {
334
+ padding: var(--space-2xs);
335
+ }
336
+ .p-1 {
337
+ padding: var(--space-xs);
338
+ }
339
+ .p-1\.5 {
340
+ padding: 6px;
341
+ }
342
+ .p-2 {
343
+ padding: var(--space-sm);
344
+ }
345
+ .p-3 {
346
+ padding: 12px;
347
+ }
348
+ .p-4 {
349
+ padding: var(--space-md);
350
+ }
351
+ .p-5 {
352
+ padding: 20px;
353
+ }
354
+ .p-6 {
355
+ padding: var(--space-lg);
356
+ }
357
+ .p-8 {
358
+ padding: var(--space-xl);
359
+ }
360
+
361
+ .px-0 {
362
+ padding-left: 0;
363
+ padding-right: 0;
364
+ }
365
+ .px-0\.5 {
366
+ padding-left: var(--space-2xs);
367
+ padding-right: var(--space-2xs);
368
+ }
369
+ .px-1 {
370
+ padding-left: var(--space-xs);
371
+ padding-right: var(--space-xs);
372
+ }
373
+ .px-1\.5 {
374
+ padding-left: 6px;
375
+ padding-right: 6px;
376
+ }
377
+ .px-2 {
378
+ padding-left: var(--space-sm);
379
+ padding-right: var(--space-sm);
380
+ }
381
+ .px-2\.5 {
382
+ padding-left: 10px;
383
+ padding-right: 10px;
384
+ }
385
+ .px-3 {
386
+ padding-left: 12px;
387
+ padding-right: 12px;
388
+ }
389
+ .px-4 {
390
+ padding-left: var(--space-md);
391
+ padding-right: var(--space-md);
392
+ }
393
+ .px-6 {
394
+ padding-left: var(--space-lg);
395
+ padding-right: var(--space-lg);
396
+ }
397
+ .px-8 {
398
+ padding-left: var(--space-xl);
399
+ padding-right: var(--space-xl);
400
+ }
401
+
402
+ .py-0 {
403
+ padding-top: 0;
404
+ padding-bottom: 0;
405
+ }
406
+ .py-0\.5 {
407
+ padding-top: var(--space-2xs);
408
+ padding-bottom: var(--space-2xs);
409
+ }
410
+ .py-1 {
411
+ padding-top: var(--space-xs);
412
+ padding-bottom: var(--space-xs);
413
+ }
414
+ .py-1\.5 {
415
+ padding-top: 6px;
416
+ padding-bottom: 6px;
417
+ }
418
+ .py-2 {
419
+ padding-top: var(--space-sm);
420
+ padding-bottom: var(--space-sm);
421
+ }
422
+ .py-3 {
423
+ padding-top: 12px;
424
+ padding-bottom: 12px;
425
+ }
426
+ .py-4 {
427
+ padding-top: var(--space-md);
428
+ padding-bottom: var(--space-md);
429
+ }
430
+ .py-6 {
431
+ padding-top: var(--space-lg);
432
+ padding-bottom: var(--space-lg);
433
+ }
434
+ .py-8 {
435
+ padding-top: var(--space-xl);
436
+ padding-bottom: var(--space-xl);
437
+ }
438
+ .py-12 {
439
+ padding-top: var(--space-2xl);
440
+ padding-bottom: var(--space-2xl);
441
+ }
442
+
443
+ .pt-0 {
444
+ padding-top: 0;
445
+ }
446
+ .pt-1 {
447
+ padding-top: var(--space-xs);
448
+ }
449
+ .pt-2 {
450
+ padding-top: var(--space-sm);
451
+ }
452
+ .pt-4 {
453
+ padding-top: var(--space-md);
454
+ }
455
+ .pt-6 {
456
+ padding-top: var(--space-lg);
457
+ }
458
+ .pt-8 {
459
+ padding-top: var(--space-xl);
460
+ }
461
+ .pt-12 {
462
+ padding-top: var(--space-2xl);
463
+ }
464
+ .pb-0 {
465
+ padding-bottom: 0;
466
+ }
467
+ .pb-1 {
468
+ padding-bottom: var(--space-xs);
469
+ }
470
+ .pb-2 {
471
+ padding-bottom: var(--space-sm);
472
+ }
473
+ .pb-4 {
474
+ padding-bottom: var(--space-md);
475
+ }
476
+ .pb-6 {
477
+ padding-bottom: var(--space-lg);
478
+ }
479
+ .pl-2 {
480
+ padding-left: var(--space-sm);
481
+ }
482
+ .pl-3 {
483
+ padding-left: 12px;
484
+ }
485
+ .pl-4 {
486
+ padding-left: var(--space-md);
487
+ }
488
+ .pl-6 {
489
+ padding-left: var(--space-lg);
490
+ }
491
+ .pl-8 {
492
+ padding-left: var(--space-xl);
493
+ }
494
+ .pr-1 {
495
+ padding-right: var(--space-xs);
496
+ }
497
+ .pr-1\.5 {
498
+ padding-right: 6px;
499
+ }
500
+ .pr-2 {
501
+ padding-right: var(--space-sm);
502
+ }
503
+ .pr-3 {
504
+ padding-right: 12px;
505
+ }
506
+ .pr-4 {
507
+ padding-right: var(--space-md);
508
+ }
509
+ .pr-8 {
510
+ padding-right: var(--space-xl);
511
+ }
512
+
513
+ /* ═══════════════════════════════════════════════
514
+ MARGIN (token-backed)
515
+ ═══════════════════════════════════════════════ */
516
+
517
+ .m-0 {
518
+ margin: 0;
519
+ }
520
+ .m-1 {
521
+ margin: var(--space-xs);
522
+ }
523
+ .m-2 {
524
+ margin: var(--space-sm);
525
+ }
526
+ .m-4 {
527
+ margin: var(--space-md);
528
+ }
529
+
530
+ .mx-auto {
531
+ margin-left: auto;
532
+ margin-right: auto;
533
+ }
534
+ .mx-1 {
535
+ margin-left: var(--space-xs);
536
+ margin-right: var(--space-xs);
537
+ }
538
+ .mx-2 {
539
+ margin-left: var(--space-sm);
540
+ margin-right: var(--space-sm);
541
+ }
542
+ .mx-4 {
543
+ margin-left: var(--space-md);
544
+ margin-right: var(--space-md);
545
+ }
546
+
547
+ .my-1 {
548
+ margin-top: var(--space-xs);
549
+ margin-bottom: var(--space-xs);
550
+ }
551
+ .my-2 {
552
+ margin-top: var(--space-sm);
553
+ margin-bottom: var(--space-sm);
554
+ }
555
+ .my-4 {
556
+ margin-top: var(--space-md);
557
+ margin-bottom: var(--space-md);
558
+ }
559
+
560
+ .mt-0 {
561
+ margin-top: 0;
562
+ }
563
+ .mt-0\.5 {
564
+ margin-top: var(--space-2xs);
565
+ }
566
+ .mt-1 {
567
+ margin-top: var(--space-xs);
568
+ }
569
+ .mt-2 {
570
+ margin-top: var(--space-sm);
571
+ }
572
+ .mt-3 {
573
+ margin-top: 12px;
574
+ }
575
+ .mt-4 {
576
+ margin-top: var(--space-md);
577
+ }
578
+ .mt-6 {
579
+ margin-top: var(--space-lg);
580
+ }
581
+ .mt-8 {
582
+ margin-top: var(--space-xl);
583
+ }
584
+
585
+ .mb-0 {
586
+ margin-bottom: 0;
587
+ }
588
+ .mb-1 {
589
+ margin-bottom: var(--space-xs);
590
+ }
591
+ .mb-2 {
592
+ margin-bottom: var(--space-sm);
593
+ }
594
+ .mb-3 {
595
+ margin-bottom: 12px;
596
+ }
597
+ .mb-4 {
598
+ margin-bottom: var(--space-md);
599
+ }
600
+ .mb-6 {
601
+ margin-bottom: var(--space-lg);
602
+ }
603
+ .mb-8 {
604
+ margin-bottom: var(--space-xl);
605
+ }
606
+
607
+ .ml-0\.5 {
608
+ margin-left: var(--space-2xs);
609
+ }
610
+ .ml-1 {
611
+ margin-left: var(--space-xs);
612
+ }
613
+ .ml-2 {
614
+ margin-left: var(--space-sm);
615
+ }
616
+ .ml-3 {
617
+ margin-left: 12px;
618
+ }
619
+ .ml-4 {
620
+ margin-left: var(--space-md);
621
+ }
622
+ .ml-6 {
623
+ margin-left: var(--space-lg);
624
+ }
625
+ .ml-8 {
626
+ margin-left: var(--space-xl);
627
+ }
628
+ .ml-auto {
629
+ margin-left: auto;
630
+ }
631
+
632
+ .mr-0\.5 {
633
+ margin-right: var(--space-2xs);
634
+ }
635
+ .mr-1 {
636
+ margin-right: var(--space-xs);
637
+ }
638
+ .mr-2 {
639
+ margin-right: var(--space-sm);
640
+ }
641
+ .mr-3 {
642
+ margin-right: 12px;
643
+ }
644
+ .mr-4 {
645
+ margin-right: var(--space-md);
646
+ }
647
+ .mr-auto {
648
+ margin-right: auto;
649
+ }
650
+
651
+ .-mt-1 {
652
+ margin-top: calc(var(--space-xs) * -1);
653
+ }
654
+ .-ml-1 {
655
+ margin-left: calc(var(--space-xs) * -1);
656
+ }
657
+
658
+ /* ═══════════════════════════════════════════════
659
+ WIDTH & HEIGHT
660
+ ═══════════════════════════════════════════════ */
661
+
662
+ .w-0 {
663
+ width: 0;
664
+ }
665
+ .w-1 {
666
+ width: 4px;
667
+ }
668
+ .w-2 {
669
+ width: 8px;
670
+ }
671
+ .w-2\.5 {
672
+ width: 10px;
673
+ }
674
+ .w-3 {
675
+ width: 12px;
676
+ }
677
+ .w-3\.5 {
678
+ width: 14px;
679
+ }
680
+ .w-4 {
681
+ width: 16px;
682
+ }
683
+ .w-5 {
684
+ width: 20px;
685
+ }
686
+ .w-6 {
687
+ width: 24px;
688
+ }
689
+ .w-8 {
690
+ width: 32px;
691
+ }
692
+ .w-10 {
693
+ width: 40px;
694
+ }
695
+ .w-12 {
696
+ width: 48px;
697
+ }
698
+ .w-16 {
699
+ width: 64px;
700
+ }
701
+ .w-20 {
702
+ width: 80px;
703
+ }
704
+ .w-24 {
705
+ width: 96px;
706
+ }
707
+ .w-32 {
708
+ width: 128px;
709
+ }
710
+ .w-48 {
711
+ width: 192px;
712
+ }
713
+ .w-64 {
714
+ width: 256px;
715
+ }
716
+ .w-80 {
717
+ width: 320px;
718
+ }
719
+ .w-px {
720
+ width: 1px;
721
+ }
722
+ .w-full {
723
+ width: 100%;
724
+ }
725
+ .w-auto {
726
+ width: auto;
727
+ }
728
+ .w-1\/2 {
729
+ width: 50%;
730
+ }
731
+ .w-1\/3 {
732
+ width: 33.333%;
733
+ }
734
+ .w-2\/3 {
735
+ width: 66.667%;
736
+ }
737
+
738
+ .min-w-0 {
739
+ min-width: 0;
740
+ }
741
+
742
+ .max-w-xs {
743
+ max-width: 320px;
744
+ }
745
+ .max-w-sm {
746
+ max-width: 384px;
747
+ }
748
+ .max-w-md {
749
+ max-width: 448px;
750
+ }
751
+ .max-w-lg {
752
+ max-width: 512px;
753
+ }
754
+ .max-w-xl {
755
+ max-width: 576px;
756
+ }
757
+ .max-w-2xl {
758
+ max-width: 672px;
759
+ }
760
+ .max-w-3xl {
761
+ max-width: 768px;
762
+ }
763
+ .max-w-4xl {
764
+ max-width: 896px;
765
+ }
766
+ .max-w-5xl {
767
+ max-width: var(--content-width-wide);
768
+ }
769
+ .max-w-full {
770
+ max-width: 100%;
771
+ }
772
+ .max-w-none {
773
+ max-width: none;
774
+ }
775
+
776
+ .h-0 {
777
+ height: 0;
778
+ }
779
+ .h-0\.5 {
780
+ height: 2px;
781
+ }
782
+ .h-1 {
783
+ height: 4px;
784
+ }
785
+ .h-2 {
786
+ height: 8px;
787
+ }
788
+ .h-3 {
789
+ height: 12px;
790
+ }
791
+ .h-4 {
792
+ height: 16px;
793
+ }
794
+ .h-5 {
795
+ height: 20px;
796
+ }
797
+ .h-6 {
798
+ height: 24px;
799
+ }
800
+ .h-8 {
801
+ height: 32px;
802
+ }
803
+ .h-10 {
804
+ height: 40px;
805
+ }
806
+ .h-12 {
807
+ height: 48px;
808
+ }
809
+ .h-16 {
810
+ height: 64px;
811
+ }
812
+ .h-24 {
813
+ height: 96px;
814
+ }
815
+ .h-32 {
816
+ height: 128px;
817
+ }
818
+ .h-48 {
819
+ height: 192px;
820
+ }
821
+ .h-64 {
822
+ height: 256px;
823
+ }
824
+ .h-px {
825
+ height: 1px;
826
+ }
827
+ .h-full {
828
+ height: 100%;
829
+ }
830
+ .h-screen {
831
+ height: 100vh;
832
+ }
833
+ .h-auto {
834
+ height: auto;
835
+ }
836
+
837
+ .min-h-0 {
838
+ min-height: 0;
839
+ }
840
+ .min-h-6 {
841
+ min-height: var(--space-lg);
842
+ }
843
+ .min-h-screen {
844
+ min-height: 100vh;
845
+ }
846
+
847
+ .max-h-60 {
848
+ max-height: 240px;
849
+ }
850
+ .max-h-64 {
851
+ max-height: 256px;
852
+ }
853
+ .max-h-96 {
854
+ max-height: 384px;
855
+ }
856
+
857
+ .size-3 {
858
+ width: 12px;
859
+ height: 12px;
860
+ }
861
+ .size-4 {
862
+ width: 16px;
863
+ height: 16px;
864
+ }
865
+ .size-5 {
866
+ width: 20px;
867
+ height: 20px;
868
+ }
869
+ .size-6 {
870
+ width: 24px;
871
+ height: 24px;
872
+ }
873
+
874
+ /* ═══════════════════════════════════════════════
875
+ POSITION
876
+ ═══════════════════════════════════════════════ */
877
+
878
+ .static {
879
+ position: static;
880
+ }
881
+ .relative {
882
+ position: relative;
883
+ }
884
+ .absolute {
885
+ position: absolute;
886
+ }
887
+ .fixed {
888
+ position: fixed;
889
+ }
890
+ .sticky {
891
+ position: sticky;
892
+ }
893
+
894
+ .inset-0 {
895
+ inset: 0;
896
+ }
897
+ .top-0 {
898
+ top: 0;
899
+ }
900
+ .top-1 {
901
+ top: 4px;
902
+ }
903
+ .top-1\/2 {
904
+ top: 50%;
905
+ }
906
+ .right-0 {
907
+ right: 0;
908
+ }
909
+ .right-2 {
910
+ right: 8px;
911
+ }
912
+ .right-3 {
913
+ right: 12px;
914
+ }
915
+ .bottom-0 {
916
+ bottom: 0;
917
+ }
918
+ .left-0 {
919
+ left: 0;
920
+ }
921
+ .left-3 {
922
+ left: 12px;
923
+ }
924
+
925
+ .-translate-y-1\/2 {
926
+ transform: translateY(-50%);
927
+ }
928
+ .-translate-x-full {
929
+ transform: translateX(-100%);
930
+ }
931
+ .translate-x-0 {
932
+ transform: translateX(0);
933
+ }
934
+
935
+ .z-10 {
936
+ z-index: 10;
937
+ }
938
+ .z-20 {
939
+ z-index: 20;
940
+ }
941
+ .z-30 {
942
+ z-index: 30;
943
+ }
944
+ .z-40 {
945
+ z-index: 40;
946
+ }
947
+ .z-50 {
948
+ z-index: 50;
949
+ }
950
+
951
+ /* ═══════════════════════════════════════════════
952
+ OVERFLOW
953
+ ═══════════════════════════════════════════════ */
954
+
955
+ .overflow-auto {
956
+ overflow: auto;
957
+ }
958
+ .overflow-hidden {
959
+ overflow: hidden;
960
+ }
961
+ .overflow-x-auto {
962
+ overflow-x: auto;
963
+ }
964
+ .overflow-x-hidden {
965
+ overflow-x: hidden;
966
+ }
967
+ .overflow-y-auto {
968
+ overflow-y: auto;
969
+ }
970
+ .overflow-y-hidden {
971
+ overflow-y: hidden;
972
+ }
973
+ .overflow-visible {
974
+ overflow: visible;
975
+ }
976
+
977
+ /* ═══════════════════════════════════════════════
978
+ TYPOGRAPHY SCALE
979
+
980
+ 9-step categorical type scale.
981
+ Use these instead of arbitrary font-size/family combos.
982
+
983
+ Rule: Labels and data are ALWAYS Berkeley Mono.
984
+ Instrument Sans is the quiet backdrop for prose.
985
+ ═══════════════════════════════════════════════ */
986
+
987
+ .type-display {
988
+ font-family: var(--type-display-font);
989
+ font-size: var(--type-display-size);
990
+ font-weight: var(--type-display-weight);
991
+ line-height: var(--type-display-leading);
992
+ letter-spacing: var(--type-display-tracking);
993
+ }
994
+
995
+ .type-heading-lg {
996
+ font-family: var(--type-heading-lg-font);
997
+ font-size: var(--type-heading-lg-size);
998
+ font-weight: var(--type-heading-lg-weight);
999
+ line-height: var(--type-heading-lg-leading);
1000
+ letter-spacing: var(--type-heading-lg-tracking);
1001
+ }
1002
+
1003
+ .type-heading {
1004
+ font-family: var(--type-heading-font);
1005
+ font-size: var(--type-heading-size);
1006
+ font-weight: var(--type-heading-weight);
1007
+ line-height: var(--type-heading-leading);
1008
+ letter-spacing: var(--type-heading-tracking);
1009
+ }
1010
+
1011
+ .type-heading-sm {
1012
+ font-family: var(--type-heading-sm-font);
1013
+ font-size: var(--type-heading-sm-size);
1014
+ font-weight: var(--type-heading-sm-weight);
1015
+ line-height: var(--type-heading-sm-leading);
1016
+ letter-spacing: var(--type-heading-sm-tracking);
1017
+ }
1018
+
1019
+ .type-body {
1020
+ font-family: var(--type-body-font);
1021
+ font-size: var(--type-body-size);
1022
+ font-weight: var(--type-body-weight);
1023
+ line-height: var(--type-body-leading);
1024
+ letter-spacing: var(--type-body-tracking);
1025
+ }
1026
+
1027
+ .type-body-sm {
1028
+ font-family: var(--type-body-sm-font);
1029
+ font-size: var(--type-body-sm-size);
1030
+ font-weight: var(--type-body-sm-weight);
1031
+ line-height: var(--type-body-sm-leading);
1032
+ letter-spacing: var(--type-body-sm-tracking);
1033
+ }
1034
+
1035
+ .type-label {
1036
+ font-family: var(--type-label-font);
1037
+ font-size: var(--type-label-size);
1038
+ font-weight: var(--type-label-weight);
1039
+ line-height: var(--type-label-leading);
1040
+ letter-spacing: var(--type-label-tracking);
1041
+ }
1042
+
1043
+ .type-data {
1044
+ font-family: var(--type-data-font);
1045
+ font-size: var(--type-data-size);
1046
+ font-weight: var(--type-data-weight);
1047
+ line-height: var(--type-data-leading);
1048
+ letter-spacing: var(--type-data-tracking);
1049
+ }
1050
+
1051
+ .type-caption {
1052
+ font-family: var(--type-caption-font);
1053
+ font-size: var(--type-caption-size);
1054
+ font-weight: var(--type-caption-weight);
1055
+ line-height: var(--type-caption-leading);
1056
+ letter-spacing: var(--type-caption-tracking);
1057
+ }
1058
+
1059
+ /* ═══════════════════════════════════════════════
1060
+ TYPOGRAPHY UTILITIES
1061
+ ═══════════════════════════════════════════════ */
1062
+
1063
+ .text-xs {
1064
+ font-size: var(--type-label-size);
1065
+ line-height: var(--type-label-leading);
1066
+ }
1067
+ .text-sm {
1068
+ font-size: var(--type-body-sm-size);
1069
+ line-height: var(--type-body-sm-leading);
1070
+ }
1071
+ .text-base {
1072
+ font-size: var(--type-body-size);
1073
+ line-height: var(--type-body-leading);
1074
+ }
1075
+ .text-lg {
1076
+ font-size: var(--type-heading-size);
1077
+ line-height: var(--type-heading-leading);
1078
+ }
1079
+ .text-xl {
1080
+ font-size: 1.25rem;
1081
+ line-height: 1.3;
1082
+ }
1083
+ .text-2xl {
1084
+ font-size: var(--type-heading-lg-size);
1085
+ line-height: var(--type-heading-lg-leading);
1086
+ }
1087
+ .text-3xl {
1088
+ font-size: 1.875rem;
1089
+ line-height: 1.2;
1090
+ }
1091
+ .text-4xl {
1092
+ font-size: var(--type-display-size);
1093
+ line-height: var(--type-display-leading);
1094
+ }
1095
+
1096
+ .font-normal {
1097
+ font-weight: var(--raw-font-weight-regular);
1098
+ }
1099
+ .font-medium {
1100
+ font-weight: var(--raw-font-weight-medium);
1101
+ }
1102
+ .font-semibold {
1103
+ font-weight: var(--raw-font-weight-semibold);
1104
+ }
1105
+ .font-bold {
1106
+ font-weight: 700;
1107
+ }
1108
+
1109
+ .font-mono {
1110
+ font-family: var(--font-mono);
1111
+ }
1112
+ .font-sans {
1113
+ font-family: var(--font-sans);
1114
+ }
1115
+
1116
+ .italic {
1117
+ font-style: italic;
1118
+ }
1119
+ .not-italic {
1120
+ font-style: normal;
1121
+ }
1122
+
1123
+ .uppercase {
1124
+ text-transform: uppercase;
1125
+ }
1126
+ .lowercase {
1127
+ text-transform: lowercase;
1128
+ }
1129
+ .capitalize {
1130
+ text-transform: capitalize;
1131
+ }
1132
+ .normal-case {
1133
+ text-transform: none;
1134
+ }
1135
+
1136
+ .text-left {
1137
+ text-align: left;
1138
+ }
1139
+ .text-center {
1140
+ text-align: center;
1141
+ }
1142
+ .text-right {
1143
+ text-align: right;
1144
+ }
1145
+
1146
+ .tracking-tight {
1147
+ letter-spacing: var(--raw-tracking-tight);
1148
+ }
1149
+ .tracking-normal {
1150
+ letter-spacing: 0;
1151
+ }
1152
+ .tracking-wide {
1153
+ letter-spacing: var(--raw-tracking-wide);
1154
+ }
1155
+ .tracking-wider {
1156
+ letter-spacing: var(--raw-tracking-wider);
1157
+ }
1158
+
1159
+ .leading-none {
1160
+ line-height: 1;
1161
+ }
1162
+ .leading-tight {
1163
+ line-height: var(--raw-line-height-tight);
1164
+ }
1165
+ .leading-snug {
1166
+ line-height: var(--raw-line-height-snug);
1167
+ }
1168
+ .leading-normal {
1169
+ line-height: 1.5;
1170
+ }
1171
+ .leading-relaxed {
1172
+ line-height: 1.625;
1173
+ }
1174
+
1175
+ .whitespace-nowrap {
1176
+ white-space: nowrap;
1177
+ }
1178
+ .whitespace-pre {
1179
+ white-space: pre;
1180
+ }
1181
+ .whitespace-pre-wrap {
1182
+ white-space: pre-wrap;
1183
+ }
1184
+ .whitespace-pre-line {
1185
+ white-space: pre-line;
1186
+ }
1187
+
1188
+ .truncate {
1189
+ overflow: hidden;
1190
+ text-overflow: ellipsis;
1191
+ white-space: nowrap;
1192
+ }
1193
+
1194
+ .line-clamp-1 {
1195
+ display: -webkit-box;
1196
+ -webkit-line-clamp: 1;
1197
+ -webkit-box-orient: vertical;
1198
+ overflow: hidden;
1199
+ }
1200
+ .line-clamp-2 {
1201
+ display: -webkit-box;
1202
+ -webkit-line-clamp: 2;
1203
+ -webkit-box-orient: vertical;
1204
+ overflow: hidden;
1205
+ }
1206
+ .line-clamp-3 {
1207
+ display: -webkit-box;
1208
+ -webkit-line-clamp: 3;
1209
+ -webkit-box-orient: vertical;
1210
+ overflow: hidden;
1211
+ }
1212
+ .line-clamp-4 {
1213
+ display: -webkit-box;
1214
+ -webkit-line-clamp: 4;
1215
+ -webkit-box-orient: vertical;
1216
+ overflow: hidden;
1217
+ }
1218
+
1219
+ .break-all {
1220
+ word-break: break-all;
1221
+ }
1222
+ .break-words {
1223
+ overflow-wrap: break-word;
1224
+ }
1225
+
1226
+ /* ═══════════════════════════════════════════════
1227
+ TEXT COLOR (token-backed)
1228
+ ═══════════════════════════════════════════════ */
1229
+
1230
+ .text-foreground {
1231
+ color: var(--color-text);
1232
+ }
1233
+ .text-secondary {
1234
+ color: var(--color-text-secondary);
1235
+ }
1236
+ .text-muted-foreground {
1237
+ color: var(--color-text-muted);
1238
+ }
1239
+ .text-primary {
1240
+ color: var(--color-accent);
1241
+ }
1242
+ .text-primary-foreground {
1243
+ color: var(--color-text-on-accent);
1244
+ }
1245
+ .text-destructive {
1246
+ color: var(--color-destructive);
1247
+ }
1248
+ .text-success {
1249
+ color: var(--color-success);
1250
+ }
1251
+ .text-warning {
1252
+ color: var(--color-warning);
1253
+ }
1254
+ .text-info {
1255
+ color: var(--color-info);
1256
+ }
1257
+ .text-muted {
1258
+ color: var(--color-text-muted);
1259
+ }
1260
+ .text-popover-foreground {
1261
+ color: var(--color-text);
1262
+ }
1263
+ .text-white {
1264
+ color: white;
1265
+ }
1266
+
1267
+ /* ═══════════════════════════════════════════════
1268
+ BACKGROUND COLOR (token-backed)
1269
+ ═══════════════════════════════════════════════ */
1270
+
1271
+ .bg-background {
1272
+ background: var(--color-surface);
1273
+ }
1274
+ .bg-surface {
1275
+ background: var(--color-surface);
1276
+ }
1277
+ .bg-surface-secondary {
1278
+ background: var(--color-surface-secondary);
1279
+ }
1280
+ .bg-surface-tertiary {
1281
+ background: var(--color-surface-tertiary);
1282
+ }
1283
+ .bg-muted {
1284
+ background: var(--color-surface-tertiary);
1285
+ }
1286
+ .bg-muted\/30 {
1287
+ background: color-mix(
1288
+ in srgb,
1289
+ var(--color-surface-tertiary) 30%,
1290
+ transparent
1291
+ );
1292
+ }
1293
+ .bg-muted\/50 {
1294
+ background: color-mix(
1295
+ in srgb,
1296
+ var(--color-surface-tertiary) 50%,
1297
+ transparent
1298
+ );
1299
+ }
1300
+ .bg-primary {
1301
+ background: var(--color-accent);
1302
+ }
1303
+ .bg-primary\/5 {
1304
+ background: color-mix(in srgb, var(--color-accent) 5%, transparent);
1305
+ }
1306
+ .bg-primary\/10 {
1307
+ background: color-mix(in srgb, var(--color-accent) 10%, transparent);
1308
+ }
1309
+ .bg-destructive {
1310
+ background: var(--color-destructive);
1311
+ }
1312
+ .bg-destructive\/5 {
1313
+ background: color-mix(in srgb, var(--color-destructive) 5%, transparent);
1314
+ }
1315
+ .bg-destructive\/10 {
1316
+ background: color-mix(in srgb, var(--color-destructive) 10%, transparent);
1317
+ }
1318
+ .bg-success {
1319
+ background: var(--color-success);
1320
+ }
1321
+ .bg-success\/10 {
1322
+ background: color-mix(in srgb, var(--color-success) 10%, transparent);
1323
+ }
1324
+ .bg-success-subtle {
1325
+ background: var(--color-success-subtle);
1326
+ }
1327
+ .bg-warning {
1328
+ background: var(--color-warning);
1329
+ }
1330
+ .bg-warning\/10 {
1331
+ background: color-mix(in srgb, var(--color-warning) 10%, transparent);
1332
+ }
1333
+ .bg-warning-subtle {
1334
+ background: var(--color-warning-subtle);
1335
+ }
1336
+ .bg-info-subtle {
1337
+ background: var(--color-info-subtle);
1338
+ }
1339
+ .bg-destructive-subtle {
1340
+ background: var(--color-destructive-subtle);
1341
+ }
1342
+ .bg-accent-subtle {
1343
+ background: var(--color-accent-subtle);
1344
+ }
1345
+ .bg-black\/50 {
1346
+ background: rgba(0, 0, 0, 0.5);
1347
+ }
1348
+ .bg-white {
1349
+ background: white;
1350
+ }
1351
+ .bg-popover {
1352
+ background: var(--color-surface);
1353
+ }
1354
+ .bg-accent {
1355
+ background: var(--color-accent-subtle);
1356
+ }
1357
+ .bg-border {
1358
+ background: var(--color-border);
1359
+ }
1360
+ .bg-transparent {
1361
+ background: transparent;
1362
+ }
1363
+
1364
+ /* ═══════════════════════════════════════════════
1365
+ BORDER (token-backed)
1366
+ ═══════════════════════════════════════════════ */
1367
+
1368
+ .border {
1369
+ border: var(--elevation-border);
1370
+ }
1371
+ .border-2 {
1372
+ border: var(--border-width-thick) solid var(--color-border);
1373
+ }
1374
+ .border-t {
1375
+ border-top: var(--elevation-border);
1376
+ }
1377
+ .border-b {
1378
+ border-bottom: var(--elevation-border);
1379
+ }
1380
+ .border-l {
1381
+ border-left: var(--elevation-border);
1382
+ }
1383
+ .border-r {
1384
+ border-right: var(--elevation-border);
1385
+ }
1386
+ .border-0 {
1387
+ border: none;
1388
+ }
1389
+
1390
+ .border-border {
1391
+ border-color: var(--color-border);
1392
+ }
1393
+ .border-input {
1394
+ border-color: var(--color-border);
1395
+ }
1396
+ .border-primary {
1397
+ border-color: var(--color-accent);
1398
+ }
1399
+ .border-primary\/50 {
1400
+ border-color: color-mix(in srgb, var(--color-accent) 50%, transparent);
1401
+ }
1402
+ .border-muted {
1403
+ border-color: var(--color-surface-tertiary);
1404
+ }
1405
+ .border-destructive {
1406
+ border-color: var(--color-destructive);
1407
+ }
1408
+ .border-success {
1409
+ border-color: var(--color-success);
1410
+ }
1411
+ .border-warning {
1412
+ border-color: var(--color-warning);
1413
+ }
1414
+ .border-transparent {
1415
+ border-color: transparent;
1416
+ }
1417
+ .border-dashed {
1418
+ border-style: dashed;
1419
+ }
1420
+
1421
+ /* ═══════════════════════════════════════════════
1422
+ BORDER RADIUS (token-backed)
1423
+ ═══════════════════════════════════════════════ */
1424
+
1425
+ .rounded-none {
1426
+ border-radius: 0;
1427
+ }
1428
+ .rounded-sm {
1429
+ border-radius: var(--radius-sm);
1430
+ }
1431
+ .rounded {
1432
+ border-radius: var(--radius-md);
1433
+ }
1434
+ .rounded-md {
1435
+ border-radius: var(--radius-md);
1436
+ }
1437
+ .rounded-lg {
1438
+ border-radius: var(--radius-lg);
1439
+ }
1440
+ .rounded-xl {
1441
+ border-radius: 12px;
1442
+ }
1443
+ .rounded-2xl {
1444
+ border-radius: 16px;
1445
+ }
1446
+ .rounded-full {
1447
+ border-radius: var(--radius-circle);
1448
+ }
1449
+
1450
+ .rounded-t-lg {
1451
+ border-top-left-radius: var(--radius-lg);
1452
+ border-top-right-radius: var(--radius-lg);
1453
+ }
1454
+ .rounded-b-lg {
1455
+ border-bottom-left-radius: var(--radius-lg);
1456
+ border-bottom-right-radius: var(--radius-lg);
1457
+ }
1458
+
1459
+ /* ═══════════════════════════════════════════════
1460
+ SHADOW (token-backed)
1461
+ ═══════════════════════════════════════════════ */
1462
+
1463
+ .shadow-none {
1464
+ box-shadow: none;
1465
+ }
1466
+ .shadow-sm {
1467
+ box-shadow: var(--elevation-raised);
1468
+ }
1469
+ .shadow {
1470
+ box-shadow: var(--elevation-raised);
1471
+ }
1472
+ .shadow-md {
1473
+ box-shadow: var(--elevation-raised);
1474
+ }
1475
+ .shadow-lg {
1476
+ box-shadow: var(--elevation-overlay);
1477
+ }
1478
+ .shadow-xl {
1479
+ box-shadow: var(--elevation-overlay);
1480
+ }
1481
+
1482
+ /* ═══════════════════════════════════════════════
1483
+ OPACITY
1484
+ ═══════════════════════════════════════════════ */
1485
+
1486
+ .opacity-0 {
1487
+ opacity: 0;
1488
+ }
1489
+ .opacity-25 {
1490
+ opacity: 0.25;
1491
+ }
1492
+ .opacity-50 {
1493
+ opacity: 0.5;
1494
+ }
1495
+ .opacity-60 {
1496
+ opacity: 0.6;
1497
+ }
1498
+ .opacity-70 {
1499
+ opacity: 0.7;
1500
+ }
1501
+ .opacity-75 {
1502
+ opacity: 0.75;
1503
+ }
1504
+ .opacity-80 {
1505
+ opacity: 0.8;
1506
+ }
1507
+ .opacity-100 {
1508
+ opacity: 1;
1509
+ }
1510
+
1511
+ /* ═══════════════════════════════════════════════
1512
+ TRANSITION & ANIMATION (token-backed)
1513
+ ═══════════════════════════════════════════════ */
1514
+
1515
+ .transition-all {
1516
+ transition: all var(--duration-fast) var(--easing-default);
1517
+ }
1518
+ .transition-colors {
1519
+ transition:
1520
+ color var(--duration-instant) var(--easing-default),
1521
+ background-color var(--duration-instant) var(--easing-default),
1522
+ border-color var(--duration-instant) var(--easing-default);
1523
+ }
1524
+ .transition-opacity {
1525
+ transition: opacity var(--duration-fast) var(--easing-default);
1526
+ }
1527
+ .transition-transform {
1528
+ transition: transform var(--duration-fast) var(--easing-default);
1529
+ }
1530
+ .transition-shadow {
1531
+ transition: box-shadow var(--duration-fast) var(--easing-default);
1532
+ }
1533
+ .duration-200 {
1534
+ transition-duration: 200ms;
1535
+ }
1536
+ .duration-300 {
1537
+ transition-duration: 300ms;
1538
+ }
1539
+
1540
+ .animate-spin {
1541
+ animation: ds-spin 1s linear infinite;
1542
+ }
1543
+ .animate-pulse {
1544
+ animation: ds-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1545
+ }
1546
+
1547
+ @keyframes ds-spin {
1548
+ to {
1549
+ transform: rotate(360deg);
1550
+ }
1551
+ }
1552
+ @keyframes ds-pulse {
1553
+ 0%,
1554
+ 100% {
1555
+ opacity: 1;
1556
+ }
1557
+ 50% {
1558
+ opacity: 0.5;
1559
+ }
1560
+ }
1561
+
1562
+ /* ═══════════════════════════════════════════════
1563
+ HOVER & INTERACTIVE STATES
1564
+ ═══════════════════════════════════════════════ */
1565
+
1566
+ .cursor-pointer {
1567
+ cursor: pointer;
1568
+ }
1569
+ .cursor-default {
1570
+ cursor: default;
1571
+ }
1572
+ .cursor-not-allowed {
1573
+ cursor: not-allowed;
1574
+ }
1575
+ .pointer-events-none {
1576
+ pointer-events: none;
1577
+ }
1578
+ .select-none {
1579
+ user-select: none;
1580
+ }
1581
+ .select-all {
1582
+ user-select: all;
1583
+ }
1584
+ .resize-none {
1585
+ resize: none;
1586
+ }
1587
+
1588
+ .hover\:bg-muted:hover {
1589
+ background: var(--color-surface-tertiary);
1590
+ }
1591
+ .hover\:bg-muted\/50:hover {
1592
+ background: color-mix(
1593
+ in srgb,
1594
+ var(--color-surface-tertiary) 50%,
1595
+ transparent
1596
+ );
1597
+ }
1598
+ .hover\:bg-surface-tertiary:hover {
1599
+ background: var(--color-surface-tertiary);
1600
+ }
1601
+ .hover\:bg-primary\/10:hover {
1602
+ background: color-mix(in srgb, var(--color-accent) 10%, transparent);
1603
+ }
1604
+ .hover\:bg-destructive\/10:hover {
1605
+ background: color-mix(in srgb, var(--color-destructive) 10%, transparent);
1606
+ }
1607
+
1608
+ .hover\:text-foreground:hover {
1609
+ color: var(--color-text);
1610
+ }
1611
+ .hover\:text-primary:hover {
1612
+ color: var(--color-accent);
1613
+ }
1614
+ .hover\:text-destructive:hover {
1615
+ color: var(--color-destructive);
1616
+ }
1617
+
1618
+ .hover\:border-primary:hover {
1619
+ border-color: var(--color-accent);
1620
+ }
1621
+ .hover\:border-primary\/50:hover {
1622
+ border-color: color-mix(in srgb, var(--color-accent) 50%, transparent);
1623
+ }
1624
+ .hover\:border-border:hover {
1625
+ border-color: var(--color-border);
1626
+ }
1627
+ .hover\:border-destructive:hover {
1628
+ border-color: var(--color-destructive);
1629
+ }
1630
+
1631
+ .hover\:shadow-md:hover {
1632
+ box-shadow: var(--elevation-raised);
1633
+ }
1634
+ .hover\:shadow-lg:hover {
1635
+ box-shadow: var(--elevation-overlay);
1636
+ }
1637
+
1638
+ .hover\:underline:hover {
1639
+ text-decoration: underline;
1640
+ }
1641
+
1642
+ .disabled\:opacity-50:disabled {
1643
+ opacity: 0.5;
1644
+ }
1645
+ .disabled\:cursor-not-allowed:disabled {
1646
+ cursor: not-allowed;
1647
+ }
1648
+
1649
+ .placeholder\:text-muted-foreground::placeholder {
1650
+ color: var(--color-text-muted);
1651
+ }
1652
+
1653
+ .last\:border-0:last-child {
1654
+ border: none;
1655
+ }
1656
+
1657
+ .focus\:ring-2:focus {
1658
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
1659
+ outline-offset: var(--focus-ring-offset);
1660
+ }
1661
+ .focus\:outline-none:focus {
1662
+ outline: none;
1663
+ }
1664
+ .focus-visible\:outline-none:focus-visible {
1665
+ outline: none;
1666
+ }
1667
+ .focus-visible\:ring-2:focus-visible {
1668
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
1669
+ outline-offset: var(--focus-ring-offset);
1670
+ }
1671
+
1672
+ /* ═══════════════════════════════════════════════
1673
+ SPACING HELPERS
1674
+ ═══════════════════════════════════════════════ */
1675
+
1676
+ .space-y-1 > * + * {
1677
+ margin-top: var(--space-xs);
1678
+ }
1679
+ .space-y-2 > * + * {
1680
+ margin-top: var(--space-sm);
1681
+ }
1682
+ .space-y-3 > * + * {
1683
+ margin-top: 12px;
1684
+ }
1685
+ .space-y-4 > * + * {
1686
+ margin-top: var(--space-md);
1687
+ }
1688
+ .space-y-6 > * + * {
1689
+ margin-top: var(--space-lg);
1690
+ }
1691
+ .space-y-8 > * + * {
1692
+ margin-top: var(--space-xl);
1693
+ }
1694
+
1695
+ .space-x-1 > * + * {
1696
+ margin-left: var(--space-xs);
1697
+ }
1698
+ .space-x-2 > * + * {
1699
+ margin-left: var(--space-sm);
1700
+ }
1701
+ .space-x-4 > * + * {
1702
+ margin-left: var(--space-md);
1703
+ }
1704
+
1705
+ .divide-y > * + * {
1706
+ border-top: var(--elevation-border);
1707
+ }
1708
+
1709
+ /* ═══════════════════════════════════════════════
1710
+ ACCESSIBILITY
1711
+ ═══════════════════════════════════════════════ */
1712
+
1713
+ .sr-only {
1714
+ position: absolute;
1715
+ width: 1px;
1716
+ height: 1px;
1717
+ padding: 0;
1718
+ margin: -1px;
1719
+ overflow: hidden;
1720
+ clip: rect(0, 0, 0, 0);
1721
+ white-space: nowrap;
1722
+ border-width: 0;
1723
+ }
1724
+
1725
+ /* ═══════════════════════════════════════════════
1726
+ SVG / STROKE
1727
+ ═══════════════════════════════════════════════ */
1728
+
1729
+ .stroke-current {
1730
+ stroke: currentColor;
1731
+ }
1732
+ .stroke-2 {
1733
+ stroke-width: 2px;
1734
+ }
1735
+ .fill-current {
1736
+ fill: currentColor;
1737
+ }
1738
+ .pointer-events-stroke {
1739
+ pointer-events: stroke;
1740
+ }
1741
+
1742
+ /* ── Group hover / interactive state ── */
1743
+
1744
+ .group:hover .group-hover\:opacity-100 {
1745
+ opacity: 1;
1746
+ }
1747
+ .group:hover .group-hover\:bg-primary {
1748
+ background: var(--color-primary);
1749
+ }
1750
+ .active\:cursor-grabbing:active {
1751
+ cursor: grabbing;
1752
+ }
1753
+ .focus\:ring-1:focus {
1754
+ outline: 1px solid var(--focus-ring-color);
1755
+ outline-offset: var(--focus-ring-offset);
1756
+ }
1757
+ .focus-within\:border-ring:focus-within {
1758
+ border-color: var(--focus-ring-color);
1759
+ }
1760
+ .focus-within\:ring-ring\/50:focus-within {
1761
+ outline: 2px solid
1762
+ color-mix(in srgb, var(--focus-ring-color) 50%, transparent);
1763
+ }
1764
+ .focus-within\:ring-\[3px\]:focus-within {
1765
+ outline-width: 3px;
1766
+ }
1767
+
1768
+ /* ═══════════════════════════════════════════════
1769
+ TABLE
1770
+ ═══════════════════════════════════════════════ */
1771
+
1772
+ .table-auto {
1773
+ table-layout: auto;
1774
+ }
1775
+ .table-fixed {
1776
+ table-layout: fixed;
1777
+ }
1778
+ .border-collapse {
1779
+ border-collapse: collapse;
1780
+ }
1781
+ .border-separate {
1782
+ border-collapse: separate;
1783
+ }
1784
+
1785
+ /* ═══════════════════════════════════════════════
1786
+ MISCELLANEOUS
1787
+ ═══════════════════════════════════════════════ */
1788
+
1789
+ .appearance-none {
1790
+ appearance: none;
1791
+ }
1792
+ .outline-none {
1793
+ outline: none;
1794
+ }
1795
+ .list-none {
1796
+ list-style-type: none;
1797
+ }
1798
+ .list-disc {
1799
+ list-style-type: disc;
1800
+ }
1801
+ .list-inside {
1802
+ list-style-position: inside;
1803
+ }
1804
+ .underline {
1805
+ text-decoration: underline;
1806
+ }
1807
+ .no-underline {
1808
+ text-decoration: none;
1809
+ }
1810
+ .whitespace-normal {
1811
+ white-space: normal;
1812
+ }
1813
+ .cursor-help {
1814
+ cursor: help;
1815
+ }
1816
+ .cursor-grab {
1817
+ cursor: grab;
1818
+ }
1819
+ .resize-y {
1820
+ resize: vertical;
1821
+ }
1822
+ .border-none {
1823
+ border: none;
1824
+ }
1825
+ .border-b-2 {
1826
+ border-bottom: var(--border-width-thick) solid var(--color-border);
1827
+ }
1828
+ .border-l-2 {
1829
+ border-left: var(--border-width-thick) solid var(--color-border);
1830
+ }
1831
+ .object-cover {
1832
+ object-fit: cover;
1833
+ }
1834
+ .object-contain {
1835
+ object-fit: contain;
1836
+ }
1837
+
1838
+ /* ═══════════════════════════════════════════════
1839
+ FOCUS RING
1840
+
1841
+ Apply .focus-ring to any interactive element.
1842
+ Uses :focus-visible so keyboard-only.
1843
+ ═══════════════════════════════════════════════ */
1844
+
1845
+ .focus-ring:focus-visible {
1846
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
1847
+ outline-offset: var(--focus-ring-offset);
1848
+ }
1849
+
1850
+ /* ═══════════════════════════════════════════════
1851
+ REDUCED MOTION
1852
+
1853
+ Respects user preference. Disables all animation
1854
+ and transition globally.
1855
+ ═══════════════════════════════════════════════ */
1856
+
1857
+ @media (prefers-reduced-motion: reduce) {
1858
+ *,
1859
+ *::before,
1860
+ *::after {
1861
+ animation-duration: 0.01ms !important;
1862
+ animation-iteration-count: 1 !important;
1863
+ transition-duration: 0.01ms !important;
1864
+ }
1865
+ }