@chaos_team/chaos-ui 1.0.5

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 (49) hide show
  1. package/CHANGELOG.md +286 -0
  2. package/LICENSE +21 -0
  3. package/README.md +295 -0
  4. package/THIRD_PARTY_NOTICES.md +22 -0
  5. package/dist/business.cjs +26 -0
  6. package/dist/business.d.cts +10311 -0
  7. package/dist/business.d.ts +10311 -0
  8. package/dist/business.js +26 -0
  9. package/dist/format-BUpOzeCo.d.cts +8 -0
  10. package/dist/format-BUpOzeCo.d.ts +8 -0
  11. package/dist/hooks.cjs +8 -0
  12. package/dist/hooks.d.cts +1148 -0
  13. package/dist/hooks.d.ts +1148 -0
  14. package/dist/hooks.js +8 -0
  15. package/dist/index.cjs +6 -0
  16. package/dist/index.d.cts +5616 -0
  17. package/dist/index.d.ts +5616 -0
  18. package/dist/index.js +6 -0
  19. package/dist/lib.cjs +42 -0
  20. package/dist/lib.d.cts +804 -0
  21. package/dist/lib.d.ts +804 -0
  22. package/dist/lib.js +42 -0
  23. package/dist/message-KJli9tvf.d.cts +71 -0
  24. package/dist/message-KJli9tvf.d.ts +71 -0
  25. package/dist/message-provider-BI-P3CNq.d.cts +11 -0
  26. package/dist/message-provider-BI-P3CNq.d.ts +11 -0
  27. package/dist/next.cjs +6 -0
  28. package/dist/next.d.cts +103 -0
  29. package/dist/next.d.ts +103 -0
  30. package/dist/next.js +6 -0
  31. package/dist/theme-toggle-JL_jZE-w.d.cts +81 -0
  32. package/dist/theme-toggle-JL_jZE-w.d.ts +81 -0
  33. package/dist/time-picker-H1AaecnE.d.cts +452 -0
  34. package/dist/time-picker-H1AaecnE.d.ts +452 -0
  35. package/dist/ui/icons.cjs +6 -0
  36. package/dist/ui/icons.d.cts +3 -0
  37. package/dist/ui/icons.d.ts +3 -0
  38. package/dist/ui/icons.js +6 -0
  39. package/dist/ui-icons.cjs +6 -0
  40. package/dist/ui-icons.d.cts +205 -0
  41. package/dist/ui-icons.d.ts +205 -0
  42. package/dist/ui-icons.js +6 -0
  43. package/dist/ui.cjs +6 -0
  44. package/dist/ui.d.cts +39 -0
  45. package/dist/ui.d.ts +39 -0
  46. package/dist/ui.js +6 -0
  47. package/package.json +265 -0
  48. package/styles.css +1300 -0
  49. package/styles.css.d.ts +11 -0
package/styles.css ADDED
@@ -0,0 +1,1300 @@
1
+ /* stylelint-disable */
2
+ /* Inlined from tw-animate-css and shadcn/tailwind.css so consumers only import this package CSS entry. */
3
+ @property --tw-animation-delay {
4
+ syntax: "*";
5
+ inherits: false;
6
+ initial-value: 0s;
7
+ }
8
+ @property --tw-animation-direction {
9
+ syntax: "*";
10
+ inherits: false;
11
+ initial-value: normal;
12
+ }
13
+ @property --tw-animation-duration {
14
+ syntax: "*";
15
+ inherits: false;
16
+ }
17
+ @property --tw-animation-fill-mode {
18
+ syntax: "*";
19
+ inherits: false;
20
+ initial-value: none;
21
+ }
22
+ @property --tw-animation-iteration-count {
23
+ syntax: "*";
24
+ inherits: false;
25
+ initial-value: 1;
26
+ }
27
+ @property --tw-enter-blur {
28
+ syntax: "*";
29
+ inherits: false;
30
+ initial-value: 0;
31
+ }
32
+ @property --tw-enter-opacity {
33
+ syntax: "*";
34
+ inherits: false;
35
+ initial-value: 1;
36
+ }
37
+ @property --tw-enter-rotate {
38
+ syntax: "*";
39
+ inherits: false;
40
+ initial-value: 0;
41
+ }
42
+ @property --tw-enter-scale {
43
+ syntax: "*";
44
+ inherits: false;
45
+ initial-value: 1;
46
+ }
47
+ @property --tw-enter-translate-x {
48
+ syntax: "*";
49
+ inherits: false;
50
+ initial-value: 0;
51
+ }
52
+ @property --tw-enter-translate-y {
53
+ syntax: "*";
54
+ inherits: false;
55
+ initial-value: 0;
56
+ }
57
+ @property --tw-exit-blur {
58
+ syntax: "*";
59
+ inherits: false;
60
+ initial-value: 0;
61
+ }
62
+ @property --tw-exit-opacity {
63
+ syntax: "*";
64
+ inherits: false;
65
+ initial-value: 1;
66
+ }
67
+ @property --tw-exit-rotate {
68
+ syntax: "*";
69
+ inherits: false;
70
+ initial-value: 0;
71
+ }
72
+ @property --tw-exit-scale {
73
+ syntax: "*";
74
+ inherits: false;
75
+ initial-value: 1;
76
+ }
77
+ @property --tw-exit-translate-x {
78
+ syntax: "*";
79
+ inherits: false;
80
+ initial-value: 0;
81
+ }
82
+ @property --tw-exit-translate-y {
83
+ syntax: "*";
84
+ inherits: false;
85
+ initial-value: 0;
86
+ }
87
+ @theme inline {
88
+ --animation-delay-0: 0s;
89
+ --animation-delay-75: 75ms;
90
+ --animation-delay-100: 0.1s;
91
+ --animation-delay-150: 0.15s;
92
+ --animation-delay-200: 0.2s;
93
+ --animation-delay-300: 0.3s;
94
+ --animation-delay-500: 0.5s;
95
+ --animation-delay-700: 0.7s;
96
+ --animation-delay-1000: 1s;
97
+ --animation-repeat-0: 0;
98
+ --animation-repeat-1: 1;
99
+ --animation-repeat-infinite: infinite;
100
+ --animation-direction-normal: normal;
101
+ --animation-direction-reverse: reverse;
102
+ --animation-direction-alternate: alternate;
103
+ --animation-direction-alternate-reverse: alternate-reverse;
104
+ --animation-fill-mode-none: none;
105
+ --animation-fill-mode-forwards: forwards;
106
+ --animation-fill-mode-backwards: backwards;
107
+ --animation-fill-mode-both: both;
108
+ --percentage-0: 0;
109
+ --percentage-5: 0.05;
110
+ --percentage-10: 0.1;
111
+ --percentage-15: 0.15;
112
+ --percentage-20: 0.2;
113
+ --percentage-25: 0.25;
114
+ --percentage-30: 0.3;
115
+ --percentage-35: 0.35;
116
+ --percentage-40: 0.4;
117
+ --percentage-45: 0.45;
118
+ --percentage-50: 0.5;
119
+ --percentage-55: 0.55;
120
+ --percentage-60: 0.6;
121
+ --percentage-65: 0.65;
122
+ --percentage-70: 0.7;
123
+ --percentage-75: 0.75;
124
+ --percentage-80: 0.8;
125
+ --percentage-85: 0.85;
126
+ --percentage-90: 0.9;
127
+ --percentage-95: 0.95;
128
+ --percentage-100: 1;
129
+ --percentage-translate-full: 1;
130
+ --animate-in: enter var(--tw-animation-duration, var(--tw-duration, 0.15s))
131
+ var(--tw-ease, ease) var(--tw-animation-delay, 0s)
132
+ var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal)
133
+ var(--tw-animation-fill-mode, none);
134
+ --animate-out: exit var(--tw-animation-duration, var(--tw-duration, 0.15s))
135
+ var(--tw-ease, ease) var(--tw-animation-delay, 0s)
136
+ var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal)
137
+ var(--tw-animation-fill-mode, none);
138
+ @keyframes enter {
139
+ from {
140
+ opacity: var(--tw-enter-opacity, 1);
141
+ transform: translate3d(
142
+ var(--tw-enter-translate-x, 0),
143
+ var(--tw-enter-translate-y, 0),
144
+ 0
145
+ )
146
+ scale3d(
147
+ var(--tw-enter-scale, 1),
148
+ var(--tw-enter-scale, 1),
149
+ var(--tw-enter-scale, 1)
150
+ )
151
+ rotate(var(--tw-enter-rotate, 0));
152
+ filter: blur(var(--tw-enter-blur, 0));
153
+ }
154
+ }
155
+ @keyframes exit {
156
+ to {
157
+ opacity: var(--tw-exit-opacity, 1);
158
+ transform: translate3d(
159
+ var(--tw-exit-translate-x, 0),
160
+ var(--tw-exit-translate-y, 0),
161
+ 0
162
+ )
163
+ scale3d(
164
+ var(--tw-exit-scale, 1),
165
+ var(--tw-exit-scale, 1),
166
+ var(--tw-exit-scale, 1)
167
+ )
168
+ rotate(var(--tw-exit-rotate, 0));
169
+ filter: blur(var(--tw-exit-blur, 0));
170
+ }
171
+ }
172
+ --animate-accordion-down: accordion-down
173
+ var(--tw-animation-duration, var(--tw-duration, 0.2s))
174
+ var(--tw-ease, ease-out) var(--tw-animation-delay, 0s)
175
+ var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal)
176
+ var(--tw-animation-fill-mode, none);
177
+ --animate-accordion-up: accordion-up
178
+ var(--tw-animation-duration, var(--tw-duration, 0.2s))
179
+ var(--tw-ease, ease-out) var(--tw-animation-delay, 0s)
180
+ var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal)
181
+ var(--tw-animation-fill-mode, none);
182
+ --animate-collapsible-down: collapsible-down
183
+ var(--tw-animation-duration, var(--tw-duration, 0.2s))
184
+ var(--tw-ease, ease-out) var(--tw-animation-delay, 0s)
185
+ var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal)
186
+ var(--tw-animation-fill-mode, none);
187
+ --animate-collapsible-up: collapsible-up
188
+ var(--tw-animation-duration, var(--tw-duration, 0.2s))
189
+ var(--tw-ease, ease-out) var(--tw-animation-delay, 0s)
190
+ var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal)
191
+ var(--tw-animation-fill-mode, none);
192
+ @keyframes accordion-down {
193
+ from {
194
+ height: 0;
195
+ }
196
+ to {
197
+ height: var(
198
+ --radix-accordion-content-height,
199
+ var(
200
+ --bits-accordion-content-height,
201
+ var(
202
+ --reka-accordion-content-height,
203
+ var(
204
+ --kb-accordion-content-height,
205
+ var(--ngp-accordion-content-height, auto)
206
+ )
207
+ )
208
+ )
209
+ );
210
+ }
211
+ }
212
+ @keyframes accordion-up {
213
+ from {
214
+ height: var(
215
+ --radix-accordion-content-height,
216
+ var(
217
+ --bits-accordion-content-height,
218
+ var(
219
+ --reka-accordion-content-height,
220
+ var(
221
+ --kb-accordion-content-height,
222
+ var(--ngp-accordion-content-height, auto)
223
+ )
224
+ )
225
+ )
226
+ );
227
+ }
228
+ to {
229
+ height: 0;
230
+ }
231
+ }
232
+ @keyframes collapsible-down {
233
+ from {
234
+ height: 0;
235
+ }
236
+ to {
237
+ height: var(
238
+ --radix-collapsible-content-height,
239
+ var(
240
+ --bits-collapsible-content-height,
241
+ var(
242
+ --reka-collapsible-content-height,
243
+ var(--kb-collapsible-content-height, auto)
244
+ )
245
+ )
246
+ );
247
+ }
248
+ }
249
+ @keyframes collapsible-up {
250
+ from {
251
+ height: var(
252
+ --radix-collapsible-content-height,
253
+ var(
254
+ --bits-collapsible-content-height,
255
+ var(
256
+ --reka-collapsible-content-height,
257
+ var(--kb-collapsible-content-height, auto)
258
+ )
259
+ )
260
+ );
261
+ }
262
+ to {
263
+ height: 0;
264
+ }
265
+ }
266
+ --animate-caret-blink: caret-blink 1.25s ease-out infinite;
267
+ @keyframes caret-blink {
268
+ 0%,
269
+ 70%,
270
+ 100% {
271
+ opacity: 1;
272
+ }
273
+ 20%,
274
+ 50% {
275
+ opacity: 0;
276
+ }
277
+ }
278
+ }
279
+ @utility animation-duration-* {
280
+ --tw-animation-duration: calc(--value(number) * 1ms);
281
+ --tw-animation-duration: --value(
282
+ --animation-duration-*,
283
+ [duration],
284
+ "initial",
285
+ [*]
286
+ );
287
+ animation-duration: calc(--value(number) * 1ms);
288
+ animation-duration: --value(
289
+ --animation-duration-*,
290
+ [duration],
291
+ "initial",
292
+ [*]
293
+ );
294
+ }
295
+ @utility delay-* {
296
+ animation-delay: calc(--value(number) * 1ms);
297
+ animation-delay: --value(--animation-delay-*, [duration], "initial", [*]);
298
+ --tw-animation-delay: calc(--value(number) * 1ms);
299
+ --tw-animation-delay: --value(
300
+ --animation-delay-*,
301
+ [duration],
302
+ "initial",
303
+ [*]
304
+ );
305
+ }
306
+ @utility repeat-* {
307
+ animation-iteration-count: --value(
308
+ --animation-repeat-*,
309
+ number,
310
+ "initial",
311
+ [*]
312
+ );
313
+ --tw-animation-iteration-count: --value(
314
+ --animation-repeat-*,
315
+ number,
316
+ "initial",
317
+ [*]
318
+ );
319
+ }
320
+ @utility direction-* {
321
+ animation-direction: --value(--animation-direction-*, "initial", [*]);
322
+ --tw-animation-direction: --value(--animation-direction-*, "initial", [*]);
323
+ }
324
+ @utility fill-mode-* {
325
+ animation-fill-mode: --value(--animation-fill-mode-*, "initial", [*]);
326
+ --tw-animation-fill-mode: --value(--animation-fill-mode-*, "initial", [*]);
327
+ }
328
+ @utility running {
329
+ animation-play-state: running;
330
+ }
331
+ @utility paused {
332
+ animation-play-state: paused;
333
+ }
334
+ @utility play-state-* {
335
+ animation-play-state: --value("initial", [*]);
336
+ }
337
+ @utility blur-in {
338
+ --tw-enter-blur: 20px;
339
+ }
340
+ @utility blur-in-* {
341
+ --tw-enter-blur: calc(--value(number) * 1px);
342
+ --tw-enter-blur: --value(--blur-*, [*]);
343
+ }
344
+ @utility blur-out {
345
+ --tw-exit-blur: 20px;
346
+ }
347
+ @utility blur-out-* {
348
+ --tw-exit-blur: calc(--value(number) * 1px);
349
+ --tw-exit-blur: --value(--blur-*, [*]);
350
+ }
351
+ @utility fade-in {
352
+ --tw-enter-opacity: 0;
353
+ }
354
+ @utility fade-in-* {
355
+ --tw-enter-opacity: calc(--value(number)/100);
356
+ --tw-enter-opacity: --value(--percentage-*, [*]);
357
+ }
358
+ @utility fade-out {
359
+ --tw-exit-opacity: 0;
360
+ }
361
+ @utility fade-out-* {
362
+ --tw-exit-opacity: calc(--value(number)/100);
363
+ --tw-exit-opacity: --value(--percentage-*, [*]);
364
+ }
365
+ @utility zoom-in {
366
+ --tw-enter-scale: 0;
367
+ }
368
+ @utility zoom-in-* {
369
+ --tw-enter-scale: calc(--value(number) * 1%);
370
+ --tw-enter-scale: calc(--value(ratio));
371
+ --tw-enter-scale: --value(--percentage-*, [*]);
372
+ }
373
+ @utility -zoom-in-* {
374
+ --tw-enter-scale: calc(--value(number) * -1%);
375
+ --tw-enter-scale: calc(--value(ratio) * -1);
376
+ --tw-enter-scale: --value(--percentage-*, [*]);
377
+ }
378
+ @utility zoom-out {
379
+ --tw-exit-scale: 0;
380
+ }
381
+ @utility zoom-out-* {
382
+ --tw-exit-scale: calc(--value(number) * 1%);
383
+ --tw-exit-scale: calc(--value(ratio));
384
+ --tw-exit-scale: --value(--percentage-*, [*]);
385
+ }
386
+ @utility -zoom-out-* {
387
+ --tw-exit-scale: calc(--value(number) * -1%);
388
+ --tw-exit-scale: calc(--value(ratio) * -1);
389
+ --tw-exit-scale: --value(--percentage-*, [*]);
390
+ }
391
+ @utility spin-in {
392
+ --tw-enter-rotate: 30deg;
393
+ }
394
+ @utility spin-in-* {
395
+ --tw-enter-rotate: calc(--value(number) * 1deg);
396
+ --tw-enter-rotate: calc(--value(ratio) * 360deg);
397
+ --tw-enter-rotate: --value(--rotate-*, [*]);
398
+ }
399
+ @utility -spin-in {
400
+ --tw-enter-rotate: -30deg;
401
+ }
402
+ @utility -spin-in-* {
403
+ --tw-enter-rotate: calc(--value(number) * -1deg);
404
+ --tw-enter-rotate: calc(--value(ratio) * -360deg);
405
+ --tw-enter-rotate: --value(--rotate-*, [*]);
406
+ }
407
+ @utility spin-out {
408
+ --tw-exit-rotate: 30deg;
409
+ }
410
+ @utility spin-out-* {
411
+ --tw-exit-rotate: calc(--value(number) * 1deg);
412
+ --tw-exit-rotate: calc(--value(ratio) * 360deg);
413
+ --tw-exit-rotate: --value(--rotate-*, [*]);
414
+ }
415
+ @utility -spin-out {
416
+ --tw-exit-rotate: -30deg;
417
+ }
418
+ @utility -spin-out-* {
419
+ --tw-exit-rotate: calc(--value(number) * -1deg);
420
+ --tw-exit-rotate: calc(--value(ratio) * -360deg);
421
+ --tw-exit-rotate: --value(--rotate-*, [*]);
422
+ }
423
+ @utility slide-in-from-top {
424
+ --tw-enter-translate-y: -100%;
425
+ }
426
+ @utility slide-in-from-top-* {
427
+ --tw-enter-translate-y: calc(--value(integer) * var(--spacing) * -1);
428
+ --tw-enter-translate-y: calc(
429
+ --value(--percentage-*, --percentage-translate-*) * -100%
430
+ );
431
+ --tw-enter-translate-y: calc(--value(ratio) * -100%);
432
+ --tw-enter-translate-y: calc(
433
+ --value(--translate-*, [percentage], [length]) * -1
434
+ );
435
+ }
436
+ @utility slide-in-from-bottom {
437
+ --tw-enter-translate-y: 100%;
438
+ }
439
+ @utility slide-in-from-bottom-* {
440
+ --tw-enter-translate-y: calc(--value(integer) * var(--spacing));
441
+ --tw-enter-translate-y: calc(
442
+ --value(--percentage-*, --percentage-translate-*) * 100%
443
+ );
444
+ --tw-enter-translate-y: calc(--value(ratio) * 100%);
445
+ --tw-enter-translate-y: --value(--translate-*, [percentage], [length]);
446
+ }
447
+ @utility slide-in-from-left {
448
+ --tw-enter-translate-x: -100%;
449
+ }
450
+ @utility slide-in-from-left-* {
451
+ --tw-enter-translate-x: calc(--value(integer) * var(--spacing) * -1);
452
+ --tw-enter-translate-x: calc(
453
+ --value(--percentage-*, --percentage-translate-*) * -100%
454
+ );
455
+ --tw-enter-translate-x: calc(--value(ratio) * -100%);
456
+ --tw-enter-translate-x: calc(
457
+ --value(--translate-*, [percentage], [length]) * -1
458
+ );
459
+ }
460
+ @utility slide-in-from-right {
461
+ --tw-enter-translate-x: 100%;
462
+ }
463
+ @utility slide-in-from-right-* {
464
+ --tw-enter-translate-x: calc(--value(integer) * var(--spacing));
465
+ --tw-enter-translate-x: calc(
466
+ --value(--percentage-*, --percentage-translate-*) * 100%
467
+ );
468
+ --tw-enter-translate-x: calc(--value(ratio) * 100%);
469
+ --tw-enter-translate-x: --value(--translate-*, [percentage], [length]);
470
+ }
471
+ @utility slide-in-from-start {
472
+ &:dir(ltr) {
473
+ --tw-enter-translate-x: -100%;
474
+ }
475
+ &:dir(rtl) {
476
+ --tw-enter-translate-x: 100%;
477
+ }
478
+ }
479
+ @utility slide-in-from-start-* {
480
+ &:where(:dir(ltr), [dir="ltr"], [dir="ltr"]*) {
481
+ --tw-enter-translate-x: calc(--value(integer) * var(--spacing) * -1);
482
+ --tw-enter-translate-x: calc(
483
+ --value(--percentage-*, --percentage-translate-*) * -100%
484
+ );
485
+ --tw-enter-translate-x: calc(--value(ratio) * -100%);
486
+ --tw-enter-translate-x: calc(
487
+ --value(--translate-*, [percentage], [length]) * -1
488
+ );
489
+ }
490
+ &:where(:dir(rtl), [dir="rtl"], [dir="rtl"]*) {
491
+ --tw-enter-translate-x: calc(--value(integer) * var(--spacing));
492
+ --tw-enter-translate-x: calc(
493
+ --value(--percentage-*, --percentage-translate-*) * 100%
494
+ );
495
+ --tw-enter-translate-x: calc(--value(ratio) * 100%);
496
+ --tw-enter-translate-x: --value(--translate-*, [percentage], [length]);
497
+ }
498
+ }
499
+ @utility slide-in-from-end {
500
+ &:dir(ltr) {
501
+ --tw-enter-translate-x: 100%;
502
+ }
503
+ &:dir(rtl) {
504
+ --tw-enter-translate-x: -100%;
505
+ }
506
+ }
507
+ @utility slide-in-from-end-* {
508
+ &:where(:dir(ltr), [dir="ltr"], [dir="ltr"]*) {
509
+ --tw-enter-translate-x: calc(--value(integer) * var(--spacing));
510
+ --tw-enter-translate-x: calc(
511
+ --value(--percentage-*, --percentage-translate-*) * 100%
512
+ );
513
+ --tw-enter-translate-x: calc(--value(ratio) * 100%);
514
+ --tw-enter-translate-x: --value(--translate-*, [percentage], [length]);
515
+ }
516
+ &:where(:dir(rtl), [dir="rtl"], [dir="rtl"]*) {
517
+ --tw-enter-translate-x: calc(--value(integer) * var(--spacing) * -1);
518
+ --tw-enter-translate-x: calc(
519
+ --value(--percentage-*, --percentage-translate-*) * -100%
520
+ );
521
+ --tw-enter-translate-x: calc(--value(ratio) * -100%);
522
+ --tw-enter-translate-x: calc(
523
+ --value(--translate-*, [percentage], [length]) * -1
524
+ );
525
+ }
526
+ }
527
+ @utility slide-out-to-top {
528
+ --tw-exit-translate-y: -100%;
529
+ }
530
+ @utility slide-out-to-top-* {
531
+ --tw-exit-translate-y: calc(--value(integer) * var(--spacing) * -1);
532
+ --tw-exit-translate-y: calc(
533
+ --value(--percentage-*, --percentage-translate-*) * -100%
534
+ );
535
+ --tw-exit-translate-y: calc(--value(ratio) * -100%);
536
+ --tw-exit-translate-y: calc(
537
+ --value(--translate-*, [percentage], [length]) * -1
538
+ );
539
+ }
540
+ @utility slide-out-to-bottom {
541
+ --tw-exit-translate-y: 100%;
542
+ }
543
+ @utility slide-out-to-bottom-* {
544
+ --tw-exit-translate-y: calc(--value(integer) * var(--spacing));
545
+ --tw-exit-translate-y: calc(
546
+ --value(--percentage-*, --percentage-translate-*) * 100%
547
+ );
548
+ --tw-exit-translate-y: calc(--value(ratio) * 100%);
549
+ --tw-exit-translate-y: --value(--translate-*, [percentage], [length]);
550
+ }
551
+ @utility slide-out-to-left {
552
+ --tw-exit-translate-x: -100%;
553
+ }
554
+ @utility slide-out-to-left-* {
555
+ --tw-exit-translate-x: calc(--value(integer) * var(--spacing) * -1);
556
+ --tw-exit-translate-x: calc(
557
+ --value(--percentage-*, --percentage-translate-*) * -100%
558
+ );
559
+ --tw-exit-translate-x: calc(--value(ratio) * -100%);
560
+ --tw-exit-translate-x: calc(
561
+ --value(--translate-*, [percentage], [length]) * -1
562
+ );
563
+ }
564
+ @utility slide-out-to-right {
565
+ --tw-exit-translate-x: 100%;
566
+ }
567
+ @utility slide-out-to-right-* {
568
+ --tw-exit-translate-x: calc(--value(integer) * var(--spacing));
569
+ --tw-exit-translate-x: calc(
570
+ --value(--percentage-*, --percentage-translate-*) * 100%
571
+ );
572
+ --tw-exit-translate-x: calc(--value(ratio) * 100%);
573
+ --tw-exit-translate-x: --value(--translate-*, [percentage], [length]);
574
+ }
575
+ @utility slide-out-to-start {
576
+ &:dir(ltr) {
577
+ --tw-exit-translate-x: -100%;
578
+ }
579
+ &:dir(rtl) {
580
+ --tw-exit-translate-x: 100%;
581
+ }
582
+ }
583
+ @utility slide-out-to-start-* {
584
+ &:where(:dir(ltr), [dir="ltr"], [dir="ltr"]*) {
585
+ --tw-exit-translate-x: calc(--value(integer) * var(--spacing) * -1);
586
+ --tw-exit-translate-x: calc(
587
+ --value(--percentage-*, --percentage-translate-*) * -100%
588
+ );
589
+ --tw-exit-translate-x: calc(--value(ratio) * -100%);
590
+ --tw-exit-translate-x: calc(
591
+ --value(--translate-*, [percentage], [length]) * -1
592
+ );
593
+ }
594
+ &:where(:dir(rtl), [dir="rtl"], [dir="rtl"]*) {
595
+ --tw-exit-translate-x: calc(--value(integer) * var(--spacing));
596
+ --tw-exit-translate-x: calc(
597
+ --value(--percentage-*, --percentage-translate-*) * 100%
598
+ );
599
+ --tw-exit-translate-x: calc(--value(ratio) * 100%);
600
+ --tw-exit-translate-x: --value(--translate-*, [percentage], [length]);
601
+ }
602
+ }
603
+ @utility slide-out-to-end {
604
+ &:dir(ltr) {
605
+ --tw-exit-translate-x: 100%;
606
+ }
607
+ &:dir(rtl) {
608
+ --tw-exit-translate-x: -100%;
609
+ }
610
+ }
611
+ @utility slide-out-to-end-* {
612
+ &:where(:dir(ltr), [dir="ltr"], [dir="ltr"]*) {
613
+ --tw-exit-translate-x: calc(--value(integer) * var(--spacing));
614
+ --tw-exit-translate-x: calc(
615
+ --value(--percentage-*, --percentage-translate-*) * 100%
616
+ );
617
+ --tw-exit-translate-x: calc(--value(ratio) * 100%);
618
+ --tw-exit-translate-x: --value(--translate-*, [percentage], [length]);
619
+ }
620
+ &:where(:dir(rtl), [dir="rtl"], [dir="rtl"]*) {
621
+ --tw-exit-translate-x: calc(--value(integer) * var(--spacing) * -1);
622
+ --tw-exit-translate-x: calc(
623
+ --value(--percentage-*, --percentage-translate-*) * -100%
624
+ );
625
+ --tw-exit-translate-x: calc(--value(ratio) * -100%);
626
+ --tw-exit-translate-x: calc(
627
+ --value(--translate-*, [percentage], [length]) * -1
628
+ );
629
+ }
630
+ }
631
+
632
+ @theme inline {
633
+ @keyframes accordion-down {
634
+ from {
635
+ height: 0;
636
+ }
637
+ to {
638
+ height: var(
639
+ --radix-accordion-content-height,
640
+ var(--accordion-panel-height, auto)
641
+ );
642
+ }
643
+ }
644
+
645
+ @keyframes accordion-up {
646
+ from {
647
+ height: var(
648
+ --radix-accordion-content-height,
649
+ var(--accordion-panel-height, auto)
650
+ );
651
+ }
652
+ to {
653
+ height: 0;
654
+ }
655
+ }
656
+ }
657
+
658
+ /* Custom variants */
659
+ @custom-variant data-open {
660
+ &:where([data-state="open"]),
661
+ &:where([data-open]:not([data-open="false"])) {
662
+ @slot;
663
+ }
664
+ }
665
+
666
+ @custom-variant data-closed {
667
+ &:where([data-state="closed"]),
668
+ &:where([data-closed]:not([data-closed="false"])) {
669
+ @slot;
670
+ }
671
+ }
672
+
673
+ @custom-variant data-checked {
674
+ &:where([data-state="checked"]),
675
+ &:where([data-checked]:not([data-checked="false"])) {
676
+ @slot;
677
+ }
678
+ }
679
+
680
+ @custom-variant data-unchecked {
681
+ &:where([data-state="unchecked"]),
682
+ &:where([data-unchecked]:not([data-unchecked="false"])) {
683
+ @slot;
684
+ }
685
+ }
686
+
687
+ @custom-variant data-selected {
688
+ &:where([data-selected="true"]) {
689
+ @slot;
690
+ }
691
+ }
692
+
693
+ @custom-variant data-disabled {
694
+ &:where([data-disabled="true"]),
695
+ &:where([data-disabled]:not([data-disabled="false"])) {
696
+ @slot;
697
+ }
698
+ }
699
+
700
+ @custom-variant data-active {
701
+ &:where([data-state="active"]),
702
+ &:where([data-active]:not([data-active="false"])) {
703
+ @slot;
704
+ }
705
+ }
706
+
707
+ @custom-variant data-horizontal {
708
+ &:where([data-orientation="horizontal"]) {
709
+ @slot;
710
+ }
711
+ }
712
+
713
+ @custom-variant data-vertical {
714
+ &:where([data-orientation="vertical"]) {
715
+ @slot;
716
+ }
717
+ }
718
+
719
+ @utility no-scrollbar {
720
+ -ms-overflow-style: none;
721
+ scrollbar-width: none;
722
+
723
+ &::-webkit-scrollbar {
724
+ display: none;
725
+ }
726
+ }
727
+
728
+ /* P1 #10 — slim scrollbar styling, theme-aware via tokens */
729
+ @utility scrollbar-thin {
730
+ scrollbar-width: thin;
731
+ scrollbar-color: var(--border) transparent;
732
+
733
+ &::-webkit-scrollbar {
734
+ width: 0.5rem;
735
+ height: 0.5rem;
736
+ }
737
+
738
+ &::-webkit-scrollbar-track {
739
+ background: transparent;
740
+ }
741
+
742
+ &::-webkit-scrollbar-thumb {
743
+ background-color: var(--border);
744
+ border-radius: 9999px;
745
+ }
746
+
747
+ &::-webkit-scrollbar-thumb:hover {
748
+ background-color: var(--muted-foreground);
749
+ }
750
+ }
751
+ /* stylelint-enable */
752
+
753
+ @custom-variant dark (&:is(.dark *));
754
+
755
+ @theme {
756
+ --color-background: var(--background);
757
+ --color-foreground: var(--foreground);
758
+ --font-sans: var(--font-geist-sans);
759
+ --font-mono: var(--font-geist-mono);
760
+ --font-heading: var(--font-sans);
761
+ --color-sidebar-ring: var(--sidebar-ring);
762
+ --color-sidebar-border: var(--sidebar-border);
763
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
764
+ --color-sidebar-accent: var(--sidebar-accent);
765
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
766
+ --color-sidebar-primary: var(--sidebar-primary);
767
+ --color-sidebar-foreground: var(--sidebar-foreground);
768
+ --color-sidebar: var(--sidebar);
769
+ --color-chart-5: var(--chart-5);
770
+ --color-chart-4: var(--chart-4);
771
+ --color-chart-3: var(--chart-3);
772
+ --color-chart-2: var(--chart-2);
773
+ --color-chart-1: var(--chart-1);
774
+ --color-ring: var(--ring);
775
+ --color-input: var(--input);
776
+ --color-border: var(--border);
777
+ --color-destructive: var(--destructive);
778
+ --color-accent-foreground: var(--accent-foreground);
779
+ --color-accent: var(--accent);
780
+ --color-muted-foreground: var(--muted-foreground);
781
+ --color-muted: var(--muted);
782
+ --color-secondary-foreground: var(--secondary-foreground);
783
+ --color-secondary: var(--secondary);
784
+ --color-primary-foreground: var(--primary-foreground);
785
+ --color-primary: var(--primary);
786
+ --color-popover-foreground: var(--popover-foreground);
787
+ --color-popover: var(--popover);
788
+ --color-card-foreground: var(--card-foreground);
789
+ --color-card: var(--card);
790
+ --radius-sm: calc(var(--radius) * 0.6);
791
+ --radius-md: calc(var(--radius) * 0.8);
792
+ --radius-lg: var(--radius);
793
+ --radius-xl: calc(var(--radius) * 1.4);
794
+ --radius-2xl: calc(var(--radius) * 1.8);
795
+ --radius-3xl: calc(var(--radius) * 2.2);
796
+ --radius-4xl: calc(var(--radius) * 2.6);
797
+
798
+ /* Brand colors */
799
+ --color-brand-50: var(--brand-50);
800
+ --color-brand-100: var(--brand-100);
801
+ --color-brand-200: var(--brand-200);
802
+ --color-brand-300: var(--brand-300);
803
+ --color-brand-400: var(--brand-400);
804
+ --color-brand-500: var(--brand-500);
805
+ --color-brand-600: var(--brand-600);
806
+ --color-brand-700: var(--brand-700);
807
+ --color-brand-800: var(--brand-800);
808
+ --color-brand-900: var(--brand-900);
809
+ --color-brand-950: var(--brand-950);
810
+
811
+ /* Status colors */
812
+ --color-success: var(--success);
813
+ --color-success-foreground: var(--success-foreground);
814
+ --color-warning: var(--warning);
815
+ --color-warning-foreground: var(--warning-foreground);
816
+ --color-info: var(--info);
817
+ --color-info-foreground: var(--info-foreground);
818
+ --color-error: var(--error);
819
+ --color-error-foreground: var(--error-foreground);
820
+ --color-destructive-foreground: var(--destructive-foreground);
821
+
822
+ /* Chart palette — extended to 10 colors for multi-series (audit P1 #9) */
823
+ --color-chart-6: var(--chart-6);
824
+ --color-chart-7: var(--chart-7);
825
+ --color-chart-8: var(--chart-8);
826
+ --color-chart-9: var(--chart-9);
827
+ --color-chart-10: var(--chart-10);
828
+
829
+ /* Surface colors */
830
+ --color-surface: var(--surface);
831
+ --color-surface-foreground: var(--surface-foreground);
832
+
833
+ /* P1 #7 — font-weight tokens (generate font-medium / font-semibold etc.) */
834
+ --font-weight-normal: 400;
835
+ --font-weight-medium: 500;
836
+ --font-weight-semibold: 600;
837
+ --font-weight-bold: 700;
838
+
839
+ /* P1 #7 — line-height tokens (generate leading-tight / leading-normal etc.) */
840
+ --leading-tight: 1.25;
841
+ --leading-snug: 1.375;
842
+ --leading-normal: 1.5;
843
+ --leading-relaxed: 1.625;
844
+ --leading-loose: 2;
845
+
846
+ /* P1 #8 — font-size tokens migrated from :root to @theme as --text-*
847
+ (Tailwind v4 text-* namespace; generate text-xs / text-sm etc.) */
848
+ --text-xs: 0.75rem;
849
+ --text-sm: 0.875rem;
850
+ --text-base: 1rem;
851
+ --text-lg: 1.125rem;
852
+ --text-xl: 1.25rem;
853
+ --text-2xl: 1.5rem;
854
+ --text-3xl: 1.875rem;
855
+
856
+ /* P1 #8 — duration/easing tokens migrated from :root to @theme
857
+ (generate duration-fast / ease-standard etc.) */
858
+ --duration-fast: 150ms;
859
+ --duration-base: 200ms;
860
+ --duration-slow: 300ms;
861
+ --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
862
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
863
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
864
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
865
+
866
+ /* P1 #7 — border-width semantic tokens. Tailwind v4 has no --border-width-*
867
+ namespace (border utilities derive from --spacing-*), so these are CSS
868
+ variables for var() consumers, not utility generators. */
869
+ --border-width-thin: 1px;
870
+ --border-width-default: 1px;
871
+ --border-width-thick: 2px;
872
+ --border-width-thicker: 4px;
873
+ }
874
+
875
+ @theme inline {
876
+ /* Extended shadows — inline only: used at compile-time for shadow utilities, not needed at runtime */
877
+ --shadow-xs: var(--shadow-xs);
878
+ --shadow-sm: var(--shadow-sm);
879
+ --shadow-md: var(--shadow-md);
880
+ --shadow-lg: var(--shadow-lg);
881
+ --shadow-xl: var(--shadow-xl);
882
+ --shadow-2xl: var(--shadow-2xl);
883
+ }
884
+
885
+ :root {
886
+ /* P0 #2 — color-scheme: native form controls (checkbox/radio/date) follow the theme */
887
+ color-scheme: light;
888
+
889
+ /* Core palette (shadcn neutral base) */
890
+ --background: oklch(1 0 0);
891
+ --foreground: oklch(0.145 0 0);
892
+ --card: oklch(1 0 0);
893
+ --card-foreground: oklch(0.145 0 0);
894
+ --popover: oklch(1 0 0);
895
+ --popover-foreground: oklch(0.145 0 0);
896
+ --primary: oklch(0.205 0 0);
897
+ --primary-foreground: oklch(0.985 0 0);
898
+ --secondary: oklch(0.97 0 0);
899
+ --secondary-foreground: oklch(0.205 0 0);
900
+ --muted: oklch(0.97 0 0);
901
+ --muted-foreground: oklch(0.556 0 0);
902
+ --accent: oklch(0.97 0 0);
903
+ --accent-foreground: oklch(0.205 0 0);
904
+ --destructive: oklch(0.577 0.245 27.325);
905
+ --destructive-foreground: oklch(0.985 0 0);
906
+ --border: oklch(0.922 0 0);
907
+ --input: oklch(0.922 0 0);
908
+ --ring: oklch(0.708 0 0);
909
+ --chart-1: oklch(0.65 0.2 250);
910
+ --chart-2: oklch(0.65 0.18 145);
911
+ --chart-3: oklch(0.65 0.2 30);
912
+ --chart-4: oklch(0.65 0.18 320);
913
+ --chart-5: oklch(0.65 0.15 80);
914
+
915
+ /* P1 #9 — extended chart palette (multi-series charts, dashboards) */
916
+ --chart-6: oklch(0.65 0.18 190);
917
+ --chart-7: oklch(0.65 0.18 60);
918
+ --chart-8: oklch(0.65 0.18 350);
919
+ --chart-9: oklch(0.65 0.18 100);
920
+ --chart-10: oklch(0.65 0.18 275);
921
+ --radius: 0.625rem;
922
+ --sidebar: oklch(0.985 0 0);
923
+ --sidebar-foreground: oklch(0.145 0 0);
924
+ --sidebar-primary: oklch(0.205 0 0);
925
+ --sidebar-primary-foreground: oklch(0.985 0 0);
926
+ --sidebar-accent: oklch(0.97 0 0);
927
+ --sidebar-accent-foreground: oklch(0.205 0 0);
928
+ --sidebar-border: oklch(0.922 0 0);
929
+ --sidebar-ring: oklch(0.708 0 0);
930
+
931
+ /* Brand palette (professional blue) */
932
+ --brand-50: oklch(0.97 0.01 250);
933
+ --brand-100: oklch(0.93 0.02 250);
934
+ --brand-200: oklch(0.87 0.04 250);
935
+ --brand-300: oklch(0.77 0.07 250);
936
+ --brand-400: oklch(0.65 0.12 250);
937
+ --brand-500: oklch(0.55 0.16 250);
938
+ --brand-600: oklch(0.47 0.18 250);
939
+ --brand-700: oklch(0.4 0.16 250);
940
+ --brand-800: oklch(0.33 0.12 250);
941
+ --brand-900: oklch(0.26 0.08 250);
942
+ --brand-950: oklch(0.18 0.05 250);
943
+
944
+ /* Status colors */
945
+ --success: oklch(0.55 0.18 145);
946
+ --success-foreground: oklch(0.98 0 0);
947
+ --warning: oklch(0.75 0.18 75);
948
+ --warning-foreground: oklch(0.2 0 0);
949
+ --info: oklch(0.55 0.16 250);
950
+ --info-foreground: oklch(0.98 0 0);
951
+
952
+ /* P1 #6 — --error/--error-foreground as alias for --destructive; enterprise
953
+ forms and validation UIs prefer "error" semantics over "destructive". */
954
+ --error: var(--destructive);
955
+ --error-foreground: var(--destructive-foreground);
956
+
957
+ /* Surface (slightly elevated from background) */
958
+ --surface: oklch(0.985 0 0);
959
+ --surface-foreground: oklch(0.145 0 0);
960
+
961
+ /* Shadows */
962
+ --shadow-xs: 0 1px 2px 0 oklch(0 0 0 / 0.05);
963
+ --shadow-sm:
964
+ 0 1px 3px 0 oklch(0 0 0 / 0.1), 0 1px 2px -1px oklch(0 0 0 / 0.1);
965
+ --shadow-md:
966
+ 0 4px 6px -1px oklch(0 0 0 / 0.1), 0 2px 4px -2px oklch(0 0 0 / 0.1);
967
+ --shadow-lg:
968
+ 0 10px 15px -3px oklch(0 0 0 / 0.1), 0 4px 6px -4px oklch(0 0 0 / 0.1);
969
+ --shadow-xl:
970
+ 0 20px 25px -5px oklch(0 0 0 / 0.1), 0 8px 10px -6px oklch(0 0 0 / 0.1);
971
+ --shadow-2xl: 0 25px 50px -12px oklch(0 0 0 / 0.25);
972
+
973
+ /* P0 #3 / P3 #24 — selection tokens (drive ::selection) */
974
+ --selection: oklch(0.87 0.04 250);
975
+ --selection-foreground: oklch(0.26 0.08 250);
976
+
977
+ /* P3 #26 — disabled-state tokens (reuse muted surfaces) */
978
+ --disabled-bg: var(--muted);
979
+ --disabled-text: var(--muted-foreground);
980
+ --disabled-border: var(--border);
981
+
982
+ /* P3 #25 — overlay / mask tokens for Dialog, Drawer, Popover backdrops */
983
+ --overlay-color: oklch(0 0 0 / 0.5);
984
+ --mask-color: oklch(0 0 0 / 0.45);
985
+
986
+ /* P2 #14 — transition duration/easing alias tokens.
987
+ Underlying --duration- and --ease- tokens now live in @theme
988
+ (audit P1 #8) so Tailwind generates duration-fast / ease-standard
989
+ utilities. These two aliases remain in :root for direct var()
990
+ consumption in transition shorthands (see @layer base transition
991
+ rule below). */
992
+ --transition-duration: var(--duration-base);
993
+ --transition-function: var(--ease-standard);
994
+
995
+ /* P3 #28 — z-index layering tokens */
996
+ --z-index-dropdown: 1000;
997
+ --z-index-sticky: 1020;
998
+ --z-index-fixed: 1030;
999
+ --z-index-overlay: 1040;
1000
+ --z-index-modal: 1050;
1001
+ --z-index-popover: 1060;
1002
+ --z-index-tooltip: 1070;
1003
+ --z-index-toast: 1080;
1004
+ }
1005
+
1006
+ .dark {
1007
+ /* P0 #2 — color-scheme: native controls render for dark mode */
1008
+ color-scheme: dark;
1009
+
1010
+ --background: oklch(0.145 0 0);
1011
+ --foreground: oklch(0.985 0 0);
1012
+ --card: oklch(0.205 0 0);
1013
+ --card-foreground: oklch(0.985 0 0);
1014
+ --popover: oklch(0.205 0 0);
1015
+ --popover-foreground: oklch(0.985 0 0);
1016
+ --primary: oklch(0.922 0 0);
1017
+ --primary-foreground: oklch(0.205 0 0);
1018
+ --secondary: oklch(0.269 0 0);
1019
+ --secondary-foreground: oklch(0.985 0 0);
1020
+ --muted: oklch(0.269 0 0);
1021
+ --muted-foreground: oklch(0.708 0 0);
1022
+ --accent: oklch(0.269 0 0);
1023
+ --accent-foreground: oklch(0.985 0 0);
1024
+ --destructive: oklch(0.704 0.191 22.216);
1025
+ --destructive-foreground: oklch(0.985 0 0);
1026
+ --border: oklch(1 0 0 / 10%);
1027
+ --input: oklch(1 0 0 / 15%);
1028
+ --ring: oklch(0.556 0 0);
1029
+ --chart-1: oklch(0.7 0.2 250);
1030
+ --chart-2: oklch(0.7 0.18 145);
1031
+ --chart-3: oklch(0.7 0.2 30);
1032
+ --chart-4: oklch(0.7 0.18 320);
1033
+ --chart-5: oklch(0.7 0.15 80);
1034
+
1035
+ /* P1 #9 — extended chart palette (dark mode) */
1036
+ --chart-6: oklch(0.7 0.18 190);
1037
+ --chart-7: oklch(0.7 0.18 60);
1038
+ --chart-8: oklch(0.7 0.18 350);
1039
+ --chart-9: oklch(0.7 0.18 100);
1040
+ --chart-10: oklch(0.7 0.18 275);
1041
+ --sidebar: oklch(0.205 0 0);
1042
+ --sidebar-foreground: oklch(0.985 0 0);
1043
+ --sidebar-primary: oklch(0.488 0.243 264.376);
1044
+ --sidebar-primary-foreground: oklch(0.985 0 0);
1045
+ --sidebar-accent: oklch(0.269 0 0);
1046
+ --sidebar-accent-foreground: oklch(0.985 0 0);
1047
+ --sidebar-border: oklch(1 0 0 / 10%);
1048
+ --sidebar-ring: oklch(0.556 0 0);
1049
+
1050
+ /* Brand palette (dark mode - lighter) */
1051
+ --brand-50: oklch(0.18 0.05 250);
1052
+ --brand-100: oklch(0.22 0.08 250);
1053
+ --brand-200: oklch(0.28 0.12 250);
1054
+ --brand-300: oklch(0.35 0.16 250);
1055
+ --brand-400: oklch(0.45 0.18 250);
1056
+ --brand-500: oklch(0.55 0.18 250);
1057
+ --brand-600: oklch(0.65 0.16 250);
1058
+ --brand-700: oklch(0.75 0.12 250);
1059
+ --brand-800: oklch(0.85 0.08 250);
1060
+ --brand-900: oklch(0.92 0.04 250);
1061
+ --brand-950: oklch(0.97 0.01 250);
1062
+
1063
+ /* Status colors (dark mode) */
1064
+ --success: oklch(0.6 0.18 145);
1065
+ --success-foreground: oklch(0.98 0 0);
1066
+ --warning: oklch(0.78 0.15 75);
1067
+ --warning-foreground: oklch(0.2 0 0);
1068
+ --info: oklch(0.6 0.16 250);
1069
+ --info-foreground: oklch(0.98 0 0);
1070
+
1071
+ /* P1 #6 — --error alias (dark mode) */
1072
+ --error: var(--destructive);
1073
+ --error-foreground: var(--destructive-foreground);
1074
+
1075
+ /* Surface (dark mode) */
1076
+ --surface: oklch(0.18 0 0);
1077
+ --surface-foreground: oklch(0.985 0 0);
1078
+
1079
+ /* Shadows (dark mode) */
1080
+ --shadow-xs: 0 1px 2px 0 oklch(0 0 0 / 0.3);
1081
+ --shadow-sm:
1082
+ 0 1px 3px 0 oklch(0 0 0 / 0.4), 0 1px 2px -1px oklch(0 0 0 / 0.3);
1083
+ --shadow-md:
1084
+ 0 4px 6px -1px oklch(0 0 0 / 0.4), 0 2px 4px -2px oklch(0 0 0 / 0.3);
1085
+ --shadow-lg:
1086
+ 0 10px 15px -3px oklch(0 0 0 / 0.4), 0 4px 6px -4px oklch(0 0 0 / 0.3);
1087
+ --shadow-xl:
1088
+ 0 20px 25px -5px oklch(0 0 0 / 0.4), 0 8px 10px -6px oklch(0 0 0 / 0.3);
1089
+ --shadow-2xl: 0 25px 50px -12px oklch(0 0 0 / 0.6);
1090
+
1091
+ /* P0 #3 / P3 #24 — selection tokens (dark) */
1092
+ --selection: oklch(0.4 0.16 250);
1093
+ --selection-foreground: oklch(0.97 0.01 250);
1094
+
1095
+ /* P3 #25 — overlay / mask tokens (darker backdrop for dark mode) */
1096
+ --overlay-color: oklch(0 0 0 / 0.7);
1097
+ --mask-color: oklch(0 0 0 / 0.6);
1098
+ }
1099
+
1100
+ @layer base {
1101
+ /* P2 #12 — box-sizing baseline. Redundant with Tailwind Preflight when present,
1102
+ but required when chaos-ui styles are consumed standalone. */
1103
+ *,
1104
+ *::before,
1105
+ *::after {
1106
+ box-sizing: border-box;
1107
+ }
1108
+
1109
+ * {
1110
+ @apply border-border outline-ring/50;
1111
+ }
1112
+
1113
+ /* P1 #8 / #9 — full-height layout foundation + prevent overscroll chaining */
1114
+ html,
1115
+ body {
1116
+ min-height: 100%;
1117
+ overscroll-behavior: none;
1118
+ }
1119
+
1120
+ html {
1121
+ @apply font-sans;
1122
+ /* stylelint-disable property-no-vendor-prefix, value-keyword-case */
1123
+ -webkit-text-size-adjust: 100%;
1124
+ text-size-adjust: 100%;
1125
+ -webkit-font-smoothing: antialiased;
1126
+ -moz-osx-font-smoothing: grayscale;
1127
+ text-rendering: optimizeLegibility;
1128
+ /* stylelint-enable property-no-vendor-prefix, value-keyword-case */
1129
+ font-synthesis: none;
1130
+ touch-action: manipulation;
1131
+ scroll-behavior: smooth;
1132
+ }
1133
+
1134
+ body {
1135
+ @apply bg-background text-foreground;
1136
+ }
1137
+
1138
+ /* P0 #1 — anchor base styling driven by brand tokens */
1139
+ a {
1140
+ color: var(--brand-600);
1141
+ text-decoration-line: none;
1142
+ text-underline-offset: 0.125em;
1143
+ transition: color var(--transition-duration) var(--transition-function);
1144
+ }
1145
+
1146
+ a:hover {
1147
+ color: var(--brand-700);
1148
+ }
1149
+
1150
+ a:active {
1151
+ color: var(--brand-700);
1152
+ }
1153
+
1154
+ a[aria-disabled="true"] {
1155
+ color: var(--disabled-text);
1156
+ pointer-events: none;
1157
+ }
1158
+
1159
+ /* P2 #16 — heading typography defaults (overridable by utilities) */
1160
+ h1,
1161
+ h2,
1162
+ h3,
1163
+ h4,
1164
+ h5,
1165
+ h6 {
1166
+ color: var(--foreground);
1167
+ font-weight: 600;
1168
+ margin: 0;
1169
+ }
1170
+
1171
+ h1 {
1172
+ font-size: 2rem;
1173
+ line-height: 1.25;
1174
+ }
1175
+
1176
+ h2 {
1177
+ font-size: 1.5rem;
1178
+ line-height: 1.3;
1179
+ }
1180
+
1181
+ h3 {
1182
+ font-size: 1.25rem;
1183
+ line-height: 1.4;
1184
+ }
1185
+
1186
+ h4 {
1187
+ font-size: 1.125rem;
1188
+ line-height: 1.45;
1189
+ }
1190
+
1191
+ h5 {
1192
+ font-size: 1rem;
1193
+ line-height: 1.5;
1194
+ }
1195
+
1196
+ h6 {
1197
+ font-size: 0.875rem;
1198
+ line-height: 1.5;
1199
+ }
1200
+
1201
+ /* P0 #3 — text selection driven by brand tokens */
1202
+ ::selection {
1203
+ background-color: var(--selection);
1204
+ color: var(--selection-foreground);
1205
+ }
1206
+
1207
+ /* P2 #15 — baseline keyboard focus indicator.
1208
+ Elements opting out via the `outline-none` utility suppress this. */
1209
+ :focus-visible {
1210
+ outline: 2px solid var(--ring);
1211
+ outline-offset: 2px;
1212
+ }
1213
+
1214
+ /* P2 #17 — hide outline for programmatically focused elements */
1215
+ [tabindex="-1"]:focus {
1216
+ outline: none;
1217
+ }
1218
+
1219
+ /* P1 #11 — press feedback for touch / mobile */
1220
+ a:active,
1221
+ button:active {
1222
+ opacity: 0.6;
1223
+ }
1224
+ }
1225
+
1226
+ /* P1 #4 — prefers-reduced-motion. Declared UNLAYERED so it overrides layered
1227
+ utilities/components without !important (chaos-ui never uses !important). */
1228
+ @media (prefers-reduced-motion: reduce) {
1229
+ *,
1230
+ *::before,
1231
+ *::after {
1232
+ animation-duration: 0.01ms;
1233
+ animation-iteration-count: 1;
1234
+ transition-duration: 0.01ms;
1235
+ }
1236
+
1237
+ html {
1238
+ scroll-behavior: auto;
1239
+ }
1240
+ }
1241
+
1242
+ @layer utilities {
1243
+ .text-balance {
1244
+ text-wrap: balance;
1245
+ }
1246
+
1247
+ /* 24-column grid for Row/Col component */
1248
+ .grid-cols-24 {
1249
+ grid-template-columns: repeat(24, minmax(0, 1fr));
1250
+ }
1251
+ .col-span-1 { grid-column: span 1 / span 1; }
1252
+ .col-span-2 { grid-column: span 2 / span 2; }
1253
+ .col-span-3 { grid-column: span 3 / span 3; }
1254
+ .col-span-4 { grid-column: span 4 / span 4; }
1255
+ .col-span-5 { grid-column: span 5 / span 5; }
1256
+ .col-span-6 { grid-column: span 6 / span 6; }
1257
+ .col-span-7 { grid-column: span 7 / span 7; }
1258
+ .col-span-8 { grid-column: span 8 / span 8; }
1259
+ .col-span-9 { grid-column: span 9 / span 9; }
1260
+ .col-span-10 { grid-column: span 10 / span 10; }
1261
+ .col-span-11 { grid-column: span 11 / span 11; }
1262
+ .col-span-12 { grid-column: span 12 / span 12; }
1263
+ .col-span-13 { grid-column: span 13 / span 13; }
1264
+ .col-span-14 { grid-column: span 14 / span 14; }
1265
+ .col-span-15 { grid-column: span 15 / span 15; }
1266
+ .col-span-16 { grid-column: span 16 / span 16; }
1267
+ .col-span-17 { grid-column: span 17 / span 17; }
1268
+ .col-span-18 { grid-column: span 18 / span 18; }
1269
+ .col-span-19 { grid-column: span 19 / span 19; }
1270
+ .col-span-20 { grid-column: span 20 / span 20; }
1271
+ .col-span-21 { grid-column: span 21 / span 21; }
1272
+ .col-span-22 { grid-column: span 22 / span 22; }
1273
+ .col-span-23 { grid-column: span 23 / span 23; }
1274
+ .col-span-24 { grid-column: span 24 / span 24; }
1275
+ .col-start-1 { grid-column-start: 1; }
1276
+ .col-start-2 { grid-column-start: 2; }
1277
+ .col-start-3 { grid-column-start: 3; }
1278
+ .col-start-4 { grid-column-start: 4; }
1279
+ .col-start-5 { grid-column-start: 5; }
1280
+ .col-start-6 { grid-column-start: 6; }
1281
+ .col-start-7 { grid-column-start: 7; }
1282
+ .col-start-8 { grid-column-start: 8; }
1283
+ .col-start-9 { grid-column-start: 9; }
1284
+ .col-start-10 { grid-column-start: 10; }
1285
+ .col-start-11 { grid-column-start: 11; }
1286
+ .col-start-12 { grid-column-start: 12; }
1287
+ .col-start-13 { grid-column-start: 13; }
1288
+ .col-start-14 { grid-column-start: 14; }
1289
+ .col-start-15 { grid-column-start: 15; }
1290
+ .col-start-16 { grid-column-start: 16; }
1291
+ .col-start-17 { grid-column-start: 17; }
1292
+ .col-start-18 { grid-column-start: 18; }
1293
+ .col-start-19 { grid-column-start: 19; }
1294
+ .col-start-20 { grid-column-start: 20; }
1295
+ .col-start-21 { grid-column-start: 21; }
1296
+ .col-start-22 { grid-column-start: 22; }
1297
+ .col-start-23 { grid-column-start: 23; }
1298
+ .col-start-24 { grid-column-start: 24; }
1299
+ .col-start-25 { grid-column-start: 25; }
1300
+ }