@justanarthur/modo-ui 0.0.0-stage → 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 (172) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSE.beui +21 -0
  3. package/LICENSE.fluid-functionalism +21 -0
  4. package/LICENSE.motion-primitives +21 -0
  5. package/LICENSE.sileo +21 -0
  6. package/README.md +608 -2
  7. package/dist/base.css +994 -0
  8. package/dist/blocks/sidebar-app/index.d.ts +34 -0
  9. package/dist/blocks/sidebar-app/index.js +34 -0
  10. package/dist/components/badge/index.d.ts +59 -0
  11. package/dist/components/badge/index.js +18 -0
  12. package/dist/components/button/index.d.ts +59 -0
  13. package/dist/components/button/index.js +16 -0
  14. package/dist/components/card/index.d.ts +141 -0
  15. package/dist/components/card/index.js +44 -0
  16. package/dist/components/inputs/checkbox-group/index.d.ts +50 -0
  17. package/dist/components/inputs/checkbox-group/index.js +23 -0
  18. package/dist/components/inputs/color-picker/index.d.ts +137 -0
  19. package/dist/components/inputs/color-picker/index.js +37 -0
  20. package/dist/components/inputs/combobox/index.d.ts +161 -0
  21. package/dist/components/inputs/combobox/index.js +41 -0
  22. package/dist/components/inputs/date-time/calendar/index.d.ts +45 -0
  23. package/dist/components/inputs/date-time/calendar/index.js +20 -0
  24. package/dist/components/inputs/date-time/date-picker/index.d.ts +82 -0
  25. package/dist/components/inputs/date-time/date-picker/index.js +34 -0
  26. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +64 -0
  27. package/dist/components/inputs/date-time/date-range-picker/index.js +33 -0
  28. package/dist/components/inputs/date-time/duration-picker/index.d.ts +57 -0
  29. package/dist/components/inputs/date-time/duration-picker/index.js +33 -0
  30. package/dist/components/inputs/date-time/month-picker/index.d.ts +57 -0
  31. package/dist/components/inputs/date-time/month-picker/index.js +32 -0
  32. package/dist/components/inputs/date-time/time-picker/index.d.ts +59 -0
  33. package/dist/components/inputs/date-time/time-picker/index.js +33 -0
  34. package/dist/components/inputs/input/index.d.ts +84 -0
  35. package/dist/components/inputs/input/index.js +20 -0
  36. package/dist/components/inputs/input-copy/index.d.ts +44 -0
  37. package/dist/components/inputs/input-copy/index.js +18 -0
  38. package/dist/components/inputs/input-message/index.d.ts +125 -0
  39. package/dist/components/inputs/input-message/index.js +27 -0
  40. package/dist/components/inputs/radio-group/index.d.ts +58 -0
  41. package/dist/components/inputs/radio-group/index.js +22 -0
  42. package/dist/components/inputs/search/index.d.ts +83 -0
  43. package/dist/components/inputs/search/index.js +28 -0
  44. package/dist/components/inputs/select/index.d.ts +105 -0
  45. package/dist/components/inputs/select/index.js +37 -0
  46. package/dist/components/inputs/slider/index.d.ts +108 -0
  47. package/dist/components/inputs/slider/index.js +16 -0
  48. package/dist/components/inputs/switch/index.d.ts +43 -0
  49. package/dist/components/inputs/switch/index.js +16 -0
  50. package/dist/components/navigation/accordion/index.d.ts +117 -0
  51. package/dist/components/navigation/accordion/index.js +30 -0
  52. package/dist/components/navigation/sidebar/index.d.ts +388 -0
  53. package/dist/components/navigation/sidebar/index.js +101 -0
  54. package/dist/components/navigation/tabs/index.d.ts +70 -0
  55. package/dist/components/navigation/tabs/index.js +25 -0
  56. package/dist/components/navigation/tabs-subtle/index.d.ts +73 -0
  57. package/dist/components/navigation/tabs-subtle/index.js +23 -0
  58. package/dist/components/overlays/alert-dialog/index.d.ts +67 -0
  59. package/dist/components/overlays/alert-dialog/index.js +24 -0
  60. package/dist/components/overlays/command/index.d.ts +121 -0
  61. package/dist/components/overlays/command/index.js +39 -0
  62. package/dist/components/overlays/context-menu/index.d.ts +97 -0
  63. package/dist/components/overlays/context-menu/index.js +32 -0
  64. package/dist/components/overlays/dialog/index.d.ts +130 -0
  65. package/dist/components/overlays/dialog/index.js +39 -0
  66. package/dist/components/overlays/dropdown/index.d.ts +222 -0
  67. package/dist/components/overlays/dropdown/index.js +47 -0
  68. package/dist/components/overlays/popover/index.d.ts +87 -0
  69. package/dist/components/overlays/popover/index.js +28 -0
  70. package/dist/components/overlays/preview-card/index.d.ts +75 -0
  71. package/dist/components/overlays/preview-card/index.js +21 -0
  72. package/dist/components/overlays/sheet/index.d.ts +67 -0
  73. package/dist/components/overlays/sheet/index.js +26 -0
  74. package/dist/components/overlays/toast/index.d.ts +107 -0
  75. package/dist/components/overlays/toast/index.js +23 -0
  76. package/dist/components/overlays/tooltip/index.d.ts +75 -0
  77. package/dist/components/overlays/tooltip/index.js +19 -0
  78. package/dist/components/table/index.d.ts +44 -0
  79. package/dist/components/table/index.js +28 -0
  80. package/dist/components/thinking-indicator/index.d.ts +32 -0
  81. package/dist/components/thinking-indicator/index.js +15 -0
  82. package/dist/index.d.ts +3926 -0
  83. package/dist/index.js +513 -0
  84. package/dist/preset.d.ts +104 -0
  85. package/dist/preset.js +124 -0
  86. package/dist/primitives/code/index.d.ts +23 -0
  87. package/dist/primitives/code/index.js +12 -0
  88. package/dist/primitives/craft/index.d.ts +31 -0
  89. package/dist/primitives/craft/index.js +13 -0
  90. package/dist/primitives/fluid-hover/index.d.ts +233 -0
  91. package/dist/primitives/fluid-hover/index.js +27 -0
  92. package/dist/primitives/morph/index.d.ts +127 -0
  93. package/dist/primitives/morph/index.js +21 -0
  94. package/dist/primitives/motion/index.d.ts +115 -0
  95. package/dist/primitives/motion/index.js +20 -0
  96. package/dist/primitives/scroll-area/index.d.ts +41 -0
  97. package/dist/primitives/scroll-area/index.js +13 -0
  98. package/dist/primitives/sizes/index.d.ts +128 -0
  99. package/dist/primitives/sizes/index.js +22 -0
  100. package/dist/primitives/surface/index.d.ts +69 -0
  101. package/dist/primitives/surface/index.js +18 -0
  102. package/dist/shared/components-0f0as45n.js +17 -0
  103. package/dist/shared/components-40j34hdb.js +986 -0
  104. package/dist/shared/components-4hh0gm0v.js +292 -0
  105. package/dist/shared/components-4xxddc44.js +15 -0
  106. package/dist/shared/components-4xxtggzp.js +110 -0
  107. package/dist/shared/components-54nf2x99.js +293 -0
  108. package/dist/shared/components-5pkcfprd.js +232 -0
  109. package/dist/shared/components-5vxtcp88.js +9 -0
  110. package/dist/shared/components-5zry9te1.js +152 -0
  111. package/dist/shared/components-61ckf42z.js +220 -0
  112. package/dist/shared/components-6hzwfmfd.js +58 -0
  113. package/dist/shared/components-6phwsry6.js +361 -0
  114. package/dist/shared/components-6t6nr33r.js +86 -0
  115. package/dist/shared/components-6y1th6k4.js +111 -0
  116. package/dist/shared/components-74c20v2f.js +32 -0
  117. package/dist/shared/components-7cqq1sqy.js +193 -0
  118. package/dist/shared/components-7gv95yfy.js +496 -0
  119. package/dist/shared/components-7nww01w4.js +375 -0
  120. package/dist/shared/components-7zp99w5d.js +62 -0
  121. package/dist/shared/components-8hk9ve3r.js +1200 -0
  122. package/dist/shared/components-8hzbsfbd.js +123 -0
  123. package/dist/shared/components-9p8s8n5q.js +171 -0
  124. package/dist/shared/components-aaq3yk4f.js +304 -0
  125. package/dist/shared/components-bf2d9k02.js +484 -0
  126. package/dist/shared/components-bkvb6nem.js +63 -0
  127. package/dist/shared/components-brnzrp2t.js +262 -0
  128. package/dist/shared/components-csxz9f52.js +42 -0
  129. package/dist/shared/components-de8xsm9y.js +22 -0
  130. package/dist/shared/components-dg0w8g5p.js +26 -0
  131. package/dist/shared/components-dphg9gjr.js +42 -0
  132. package/dist/shared/components-e46kf6cp.js +298 -0
  133. package/dist/shared/components-ed7cmssr.js +105 -0
  134. package/dist/shared/components-ess3ch6w.js +137 -0
  135. package/dist/shared/components-gjfrycb5.js +984 -0
  136. package/dist/shared/components-gndm6am4.js +128 -0
  137. package/dist/shared/components-hjkrv00c.js +191 -0
  138. package/dist/shared/components-hzfp4tjb.js +270 -0
  139. package/dist/shared/components-j65qt1mq.js +719 -0
  140. package/dist/shared/components-jw16snbn.js +19 -0
  141. package/dist/shared/components-jxgznftn.js +146 -0
  142. package/dist/shared/components-kf2ehztc.js +216 -0
  143. package/dist/shared/components-kpbcms10.js +9 -0
  144. package/dist/shared/components-m5br529r.js +141 -0
  145. package/dist/shared/components-nn6xezy2.js +1828 -0
  146. package/dist/shared/components-nnnd2xef.js +9 -0
  147. package/dist/shared/components-p2vmyfe1.js +345 -0
  148. package/dist/shared/components-peg09pzs.js +79 -0
  149. package/dist/shared/components-r22vtgqc.js +45 -0
  150. package/dist/shared/components-r2gke5p6.js +1759 -0
  151. package/dist/shared/components-r43mqnd6.js +160 -0
  152. package/dist/shared/components-r4jt6hgd.js +58 -0
  153. package/dist/shared/components-rc63qsy6.js +159 -0
  154. package/dist/shared/components-s3yfvfkr.js +149 -0
  155. package/dist/shared/components-s5pkbjx1.js +445 -0
  156. package/dist/shared/components-tad5h7ta.js +346 -0
  157. package/dist/shared/components-taxmgbnh.js +120 -0
  158. package/dist/shared/components-tm88ghva.js +215 -0
  159. package/dist/shared/components-v7es8aan.js +144 -0
  160. package/dist/shared/components-vb033rns.js +28 -0
  161. package/dist/shared/components-vc1k7yv2.js +30 -0
  162. package/dist/shared/components-vktws5r6.js +667 -0
  163. package/dist/shared/components-x2xyckd5.js +198 -0
  164. package/dist/shared/components-x3rz4cyn.js +61 -0
  165. package/dist/shared/components-xszag63d.js +141 -0
  166. package/dist/shared/components-y3cqdrgy.js +291 -0
  167. package/dist/shared/components-zvb11ker.js +288 -0
  168. package/dist/shared/components-zx2hr57f.js +124 -0
  169. package/dist/styles.css +1949 -0
  170. package/dist/tailwind.css +219 -0
  171. package/dist/tokens.css +345 -0
  172. package/package.json +102 -3
@@ -0,0 +1,1949 @@
1
+ @import "@fontsource-variable/inter/opsz.css";
2
+ @layer properties, theme, base, shortcuts, default;
3
+ /* layer: properties */
4
+ @layer properties{
5
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*, ::before, ::after, ::backdrop{--un-bg-opacity:100%;--un-border-opacity:100%;--un-border-top-opacity:100%;--un-ease:initial;--un-fill-opacity:100%;--un-leading:initial;--un-line-opacity:100%;--un-ring-offset-opacity:100%;--un-ring-opacity:100%;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-stroke-opacity:100%;--un-text-opacity:100%;--un-translate-x:initial;--un-translate-y:initial;--un-translate-z:initial;}}
6
+ @property --un-text-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
7
+ @property --un-leading{syntax:"*";inherits:false;}
8
+ @property --un-outline-style{syntax:"*";inherits:false;initial-value:solid;}
9
+ @property --un-border-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
10
+ @property --un-border-top-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
11
+ @property --un-bg-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
12
+ @property --un-line-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
13
+ @property --un-ring-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
14
+ @property --un-ring-offset-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
15
+ @property --un-inset-ring-color{syntax:"*";inherits:false;}
16
+ @property --un-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}
17
+ @property --un-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}
18
+ @property --un-inset-shadow-color{syntax:"*";inherits:false;}
19
+ @property --un-ring-color{syntax:"*";inherits:false;}
20
+ @property --un-ring-inset{syntax:"*";inherits:false;}
21
+ @property --un-ring-offset-color{syntax:"*";inherits:false;}
22
+ @property --un-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}
23
+ @property --un-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0px;}
24
+ @property --un-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}
25
+ @property --un-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}
26
+ @property --un-shadow-color{syntax:"*";inherits:false;}
27
+ @property --un-translate-x{syntax:"*";inherits:false;initial-value:0;}
28
+ @property --un-translate-y{syntax:"*";inherits:false;initial-value:0;}
29
+ @property --un-translate-z{syntax:"*";inherits:false;initial-value:0;}
30
+ @property --un-scale-x{syntax:"*";inherits:false;initial-value:1;}
31
+ @property --un-scale-y{syntax:"*";inherits:false;initial-value:1;}
32
+ @property --un-scale-z{syntax:"*";inherits:false;initial-value:1;}
33
+ @property --un-ease{syntax:"*";inherits:false;}
34
+ @property --un-fill-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
35
+ @property --un-stroke-opacity{syntax:"<percentage>";inherits:false;initial-value:100%;}
36
+ @property --un-backdrop-blur{syntax:"*";inherits:false;}
37
+ @property --un-backdrop-brightness{syntax:"*";inherits:false;}
38
+ @property --un-backdrop-contrast{syntax:"*";inherits:false;}
39
+ @property --un-backdrop-grayscale{syntax:"*";inherits:false;}
40
+ @property --un-backdrop-hue-rotate{syntax:"*";inherits:false;}
41
+ @property --un-backdrop-invert{syntax:"*";inherits:false;}
42
+ @property --un-backdrop-opacity{syntax:"*";inherits:false;}
43
+ @property --un-backdrop-saturate{syntax:"*";inherits:false;}
44
+ @property --un-backdrop-sepia{syntax:"*";inherits:false;}
45
+ @property --un-blur{syntax:"*";inherits:false;}
46
+ @property --un-brightness{syntax:"*";inherits:false;}
47
+ @property --un-contrast{syntax:"*";inherits:false;}
48
+ @property --un-drop-shadow{syntax:"*";inherits:false;}
49
+ @property --un-grayscale{syntax:"*";inherits:false;}
50
+ @property --un-hue-rotate{syntax:"*";inherits:false;}
51
+ @property --un-invert{syntax:"*";inherits:false;}
52
+ @property --un-saturate{syntax:"*";inherits:false;}
53
+ @property --un-sepia{syntax:"*";inherits:false;}
54
+ @property --un-numeric-figure{syntax:"*";inherits:false;}
55
+ @property --un-numeric-fraction{syntax:"*";inherits:false;}
56
+ @property --un-numeric-spacing{syntax:"*";inherits:false;}
57
+ @property --un-ordinal{syntax:"*";inherits:false;}
58
+ @property --un-slashed-zero{syntax:"*";inherits:false;}
59
+ }
60
+ /* layer: theme */
61
+ @layer theme{
62
+ :root, :host { --radius-DEFAULT: 0.25rem; --spacing: 0.25rem; --default-transition-timingFunction: cubic-bezier(0.4, 0, 0.2, 1); --default-transition-duration: 150ms; --radius-none: 0; --ease-DEFAULT: cubic-bezier(0.4, 0, 0.2, 1); --font-sans: 'Inter Variable', ui-sans-serif, system-ui, sans-serif; --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); --leading-tight: 1.25; --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-lg: 0.5rem; --radius-xl: 0.75rem; --leading-none: 1; --leading-snug: 1.375; --leading-normal: 1.5; --radius-xs: 0.125rem; --tracking-wide: 0.025em; --leading-relaxed: 1.625; --font-mono: ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Consolas, monospace; --radius-md: 0.375rem; --ease-out: cubic-bezier(0, 0, 0.2, 1); --radius-sm: 0.25rem; --default-font-family: var(--font-sans); --default-monoFont-family: var(--font-mono); }
63
+ }
64
+ /* layer: base */
65
+ @layer base{
66
+ *, ::after, ::before, ::backdrop, ::file-selector-button { box-sizing: border-box; margin: 0; padding: 0; border: 0 solid; } html, :host { line-height: 1.5; -webkit-text-size-adjust: 100%; tab-size: 4; font-family: var( --default-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji' ); font-feature-settings: var(--default-font-featureSettings, normal); font-variation-settings: var(--default-font-variationSettings, normal); -webkit-tap-highlight-color: transparent; } hr { height: 0; color: inherit; border-top-width: 1px; } abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } a { color: inherit; -webkit-text-decoration: inherit; text-decoration: inherit; } b, strong { font-weight: bolder; } code, kbd, samp, pre { font-family: var( --default-monoFont-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace ); font-feature-settings: var(--default-monoFont-featureSettings, normal); font-variation-settings: var(--default-monoFont-variationSettings, normal); font-size: 1em; } small { font-size: 80%; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } table { text-indent: 0; border-color: inherit; border-collapse: collapse; } :-moz-focusring:where(:not(iframe)) { outline: auto; } progress { vertical-align: baseline; } summary { display: list-item; } ol, ul, menu { list-style: none; } img, svg, video, canvas, audio, iframe, embed, object { display: block; vertical-align: middle; } img, video { max-width: 100%; height: auto; } button, input, select, optgroup, textarea, ::file-selector-button { font: inherit; font-feature-settings: inherit; font-variation-settings: inherit; letter-spacing: inherit; color: inherit; border-radius: 0; background-color: transparent; opacity: 1; } :where(select:is([multiple], [size])) optgroup { font-weight: bolder; } :where(select:is([multiple], [size])) optgroup option { padding-inline-start: 20px; } ::file-selector-button { margin-inline-end: 4px; } ::placeholder { opacity: 1; } @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { ::placeholder { color: color-mix(in oklab, currentcolor 50%, transparent); } } textarea { resize: vertical; } ::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-date-and-time-value { min-height: 1lh; text-align: inherit; } ::-webkit-datetime-edit { display: inline-flex; } ::-webkit-datetime-edit-fields-wrapper { padding: 0; } ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { padding-block: 0; } ::-webkit-calendar-picker-indicator { line-height: 1; } :-moz-ui-invalid { box-shadow: none; } button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button { appearance: button; } ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } [hidden]:where(:not([hidden~='until-found'])) { display: none !important; }
67
+ }
68
+ /* layer: shortcuts */
69
+ @layer shortcuts{
70
+ .container{width:100%;}
71
+ @media (min-width: 40rem){
72
+ .container{max-width:40rem;}
73
+ }
74
+ @media (min-width: 48rem){
75
+ .container{max-width:48rem;}
76
+ }
77
+ @media (min-width: 64rem){
78
+ .container{max-width:64rem;}
79
+ }
80
+ @media (min-width: 80rem){
81
+ .container{max-width:80rem;}
82
+ }
83
+ @media (min-width: 96rem){
84
+ .container{max-width:96rem;}
85
+ }
86
+ }
87
+ /* layer: default */
88
+ @layer default{
89
+ .data-\[placeholder\]\:text-muted-foreground[data-placeholder],
90
+ .text-muted-foreground{color:color-mix(in srgb, var(--muted-foreground) var(--un-text-opacity), transparent);}
91
+ .group\/row.is-active .group-\[\.is-active\]\/row\:text-foreground,
92
+ .text-foreground,
93
+ .group\/field:focus-within .group-focus-within\/field\:text-foreground,
94
+ .group\/search:focus-within .group-focus-within\/search\:text-foreground,
95
+ .group:hover .group-hover\:text-foreground,
96
+ .group\/field:hover .group-hover\/field\:text-foreground,
97
+ .group\/search:hover .group-hover\/search\:text-foreground{color:color-mix(in srgb, var(--foreground) var(--un-text-opacity), transparent);}
98
+ .text-background{color:color-mix(in srgb, var(--background) var(--un-text-opacity), transparent);}
99
+ .text-background\/80{color:color-mix(in srgb, var(--background) 80%, transparent);}
100
+ .text-destructive{color:color-mix(in srgb, var(--destructive) var(--un-text-opacity), transparent);}
101
+ .text-foreground\/85{color:color-mix(in srgb, var(--foreground) 85%, transparent);}
102
+ .text-muted-foreground\/50{color:color-mix(in srgb, var(--muted-foreground) 50%, transparent);}
103
+ .text-muted-foreground\/70{color:color-mix(in srgb, var(--muted-foreground) 70%, transparent);}
104
+ .text-status-action{color:color-mix(in srgb, var(--status-action) var(--un-text-opacity), transparent);}
105
+ .text-status-error{color:color-mix(in srgb, var(--status-error) var(--un-text-opacity), transparent);}
106
+ .text-status-info{color:color-mix(in srgb, var(--status-info) var(--un-text-opacity), transparent);}
107
+ .text-status-loading{color:color-mix(in srgb, var(--status-loading) var(--un-text-opacity), transparent);}
108
+ .text-status-success{color:color-mix(in srgb, var(--status-success) var(--un-text-opacity), transparent);}
109
+ .text-status-warning{color:color-mix(in srgb, var(--status-warning) var(--un-text-opacity), transparent);}
110
+ .text-syntax-class{color:color-mix(in srgb, var(--syntax-class) var(--un-text-opacity), transparent);}
111
+ .text-syntax-comment{color:color-mix(in srgb, var(--syntax-comment) var(--un-text-opacity), transparent);}
112
+ .text-syntax-entity{color:color-mix(in srgb, var(--syntax-entity) var(--un-text-opacity), transparent);}
113
+ .text-syntax-identifier{color:color-mix(in srgb, var(--syntax-identifier) var(--un-text-opacity), transparent);}
114
+ .text-syntax-jsx{color:color-mix(in srgb, var(--syntax-jsx) var(--un-text-opacity), transparent);}
115
+ .text-syntax-keyword{color:color-mix(in srgb, var(--syntax-keyword) var(--un-text-opacity), transparent);}
116
+ .text-syntax-property{color:color-mix(in srgb, var(--syntax-property) var(--un-text-opacity), transparent);}
117
+ .text-syntax-sign{color:color-mix(in srgb, var(--syntax-sign) var(--un-text-opacity), transparent);}
118
+ .text-syntax-string{color:color-mix(in srgb, var(--syntax-string) var(--un-text-opacity), transparent);}
119
+ .text-transparent{color:transparent;}
120
+ .hover\:text-foreground:hover{color:color-mix(in srgb, var(--foreground) var(--un-text-opacity), transparent);}
121
+ .hover\:text-muted-foreground:hover{color:color-mix(in srgb, var(--muted-foreground) var(--un-text-opacity), transparent);}
122
+ .placeholder\:text-muted-foreground::placeholder{color:color-mix(in srgb, var(--muted-foreground) var(--un-text-opacity), transparent);}
123
+ .leading-4\.5{--un-leading:calc(var(--spacing) * 4.5);line-height:calc(var(--spacing) * 4.5);}
124
+ .leading-5{--un-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5);}
125
+ .leading-6{--un-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6);}
126
+ .leading-none{--un-leading:var(--leading-none);line-height:var(--leading-none);}
127
+ .leading-normal{--un-leading:var(--leading-normal);line-height:var(--leading-normal);}
128
+ .leading-relaxed{--un-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);}
129
+ .leading-snug{--un-leading:var(--leading-snug);line-height:var(--leading-snug);}
130
+ .leading-tight{--un-leading:var(--leading-tight);line-height:var(--leading-tight);}
131
+ .tracking-wide{--un-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);}
132
+ .font-\[inherit\]{font-family:inherit;}
133
+ .font-mono{font-family:var(--font-mono);}
134
+ .font-sans{font-family:var(--font-sans);}
135
+ .tab{-moz-tab-size:4;-o-tab-size:4;tab-size:4;}
136
+ .m-0{margin:calc(var(--spacing) * 0);}
137
+ .m\[1\]{margin:1;}
138
+ .-mx-1{margin-inline:calc(var(--spacing) * -1);}
139
+ .-mx-2{margin-inline:calc(var(--spacing) * -2);}
140
+ .-my-1{margin-block:calc(var(--spacing) * -1);}
141
+ .mx{margin-inline:calc(var(--spacing) * 4);}
142
+ .mx-1{margin-inline:calc(var(--spacing) * 1);}
143
+ .mx-2{margin-inline:calc(var(--spacing) * 2);}
144
+ .mx-auto{margin-inline:auto;}
145
+ .my-1{margin-block:calc(var(--spacing) * 1);}
146
+ .my-auto{margin-block:auto;}
147
+ .-mb-\[0\.25em\]{margin-bottom:-0.25em;}
148
+ .-ml-0\.5{margin-left:calc(var(--spacing) * -0.5);}
149
+ .-ml-1{margin-left:calc(var(--spacing) * -1);}
150
+ .-mr-0\.5{margin-right:calc(var(--spacing) * -0.5);}
151
+ .-mt-\[0\.25em\]{margin-top:-0.25em;}
152
+ .-mt-1{margin-top:calc(var(--spacing) * -1);}
153
+ .\[\&\>\*\]\:mb-0>*{margin-bottom:calc(var(--spacing) * 0);}
154
+ .\[\&\>\*\+\*\]\:-mt-px>*+*{margin-top:-1px;}
155
+ .mb-0\.5{margin-bottom:calc(var(--spacing) * 0.5);}
156
+ .mb-2{margin-bottom:calc(var(--spacing) * 2);}
157
+ .mb-4{margin-bottom:calc(var(--spacing) * 4);}
158
+ .me{margin-inline-end:calc(var(--spacing) * 4);}
159
+ .ml-\[15px\]{margin-left:15px;}
160
+ .ml-1{margin-left:calc(var(--spacing) * 1);}
161
+ .ml-auto{margin-left:auto;}
162
+ .mr-1{margin-right:calc(var(--spacing) * 1);}
163
+ .mt-0\.5{margin-top:calc(var(--spacing) * 0.5);}
164
+ .mt-2{margin-top:calc(var(--spacing) * 2);}
165
+ .mt-3{margin-top:calc(var(--spacing) * 3);}
166
+ .mt-6{margin-top:calc(var(--spacing) * 6);}
167
+ .mt-auto{margin-top:auto;}
168
+ .data-\[empty\]\:p-0[data-empty],
169
+ .p-0{padding:calc(var(--spacing) * 0);}
170
+ .p-0\.5{padding:calc(var(--spacing) * 0.5);}
171
+ .p-1{padding:calc(var(--spacing) * 1);}
172
+ .p-2{padding:calc(var(--spacing) * 2);}
173
+ .p-3{padding:calc(var(--spacing) * 3);}
174
+ .p-4{padding:calc(var(--spacing) * 4);}
175
+ .p-6{padding:calc(var(--spacing) * 6);}
176
+ .\!px-0{padding-inline:calc(var(--spacing) * 0) !important;}
177
+ .\[\&\:not\(\:empty\)\]\:py-6:not(:empty),
178
+ .py-6{padding-block:calc(var(--spacing) * 6);}
179
+ .px,
180
+ .px-4{padding-inline:calc(var(--spacing) * 4);}
181
+ .px-0\.5{padding-inline:calc(var(--spacing) * 0.5);}
182
+ .px-1,
183
+ .px1{padding-inline:calc(var(--spacing) * 1);}
184
+ .px-1\.5{padding-inline:calc(var(--spacing) * 1.5);}
185
+ .px-2{padding-inline:calc(var(--spacing) * 2);}
186
+ .px-2\.5{padding-inline:calc(var(--spacing) * 2.5);}
187
+ .px-3{padding-inline:calc(var(--spacing) * 3);}
188
+ .px0{padding-inline:calc(var(--spacing) * 0);}
189
+ .py-\[5px\]{padding-block:5px;}
190
+ .py-1{padding-block:calc(var(--spacing) * 1);}
191
+ .py-1\.5{padding-block:calc(var(--spacing) * 1.5);}
192
+ .py-2{padding-block:calc(var(--spacing) * 2);}
193
+ .py-2\.5{padding-block:calc(var(--spacing) * 2.5);}
194
+ .py-3{padding-block:calc(var(--spacing) * 3);}
195
+ .py-3\.5{padding-block:calc(var(--spacing) * 3.5);}
196
+ .\[\&_\[data-slot\=card-header\]\]\:pr-10 [data-slot=card-header],
197
+ .\[\&\:focus-within_\[data-slot\=card-header\]\]\:pr-10:focus-within [data-slot=card-header],
198
+ .\[\&\:hover_\[data-slot\=card-header\]\]\:pr-10:hover [data-slot=card-header]{padding-right:calc(var(--spacing) * 10);}
199
+ .\[\&_\[role\=menuitem\]\]\:pl-2 [role=menuitem],
200
+ .\[\&_\[role\=menuitemradio\]\]\:pl-2 [role=menuitemradio],
201
+ .pl-2{padding-left:calc(var(--spacing) * 2);}
202
+ .\[\&_\[role\=menuitem\]\]\:pr-1\.5 [role=menuitem],
203
+ .\[\&_\[role\=menuitemradio\]\]\:pr-1\.5 [role=menuitemradio],
204
+ .pr-1\.5{padding-right:calc(var(--spacing) * 1.5);}
205
+ .group\/menu-item:has([data-sidebar=menu-action]:is([data-state=open],[data-popup-open],[aria-expanded=true])) .group-has-\[\[data-sidebar\=menu-action\]\:is\(\[data-state\=open\]\,\[data-popup-open\]\,\[aria-expanded\=true\]\)\]\/menu-item\:pr-\[var\(--row-gutter-hover\)\],
206
+ .group\/menu-sub-item:has([data-sidebar=menu-action]:is([data-state=open],[data-popup-open],[aria-expanded=true])) .group-has-\[\[data-sidebar\=menu-action\]\:is\(\[data-state\=open\]\,\[data-popup-open\]\,\[aria-expanded\=true\]\)\]\/menu-sub-item\:pr-\[var\(--row-gutter-hover\)\],
207
+ .group\/menu-item:focus-within .group-focus-within\/menu-item\:pr-\[var\(--row-gutter-hover\)\],
208
+ .group\/menu-sub-item:focus-within .group-focus-within\/menu-sub-item\:pr-\[var\(--row-gutter-hover\)\],
209
+ .group\/menu-item:hover .group-hover\/menu-item\:pr-\[var\(--row-gutter-hover\)\],
210
+ .group\/menu-sub-item:hover .group-hover\/menu-sub-item\:pr-\[var\(--row-gutter-hover\)\]{padding-right:var(--row-gutter-hover);}
211
+ .pb-\[0\.25em\]{padding-bottom:0.25em;}
212
+ .pb-1{padding-bottom:calc(var(--spacing) * 1);}
213
+ .pb-2{padding-bottom:calc(var(--spacing) * 2);}
214
+ .pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5);}
215
+ .pb-3{padding-bottom:calc(var(--spacing) * 3);}
216
+ .pb-4{padding-bottom:calc(var(--spacing) * 4);}
217
+ .pb-6{padding-bottom:calc(var(--spacing) * 6);}
218
+ .pl-\[7px\]{padding-left:7px;}
219
+ .pl-0{padding-left:calc(var(--spacing) * 0);}
220
+ .pl-1{padding-left:calc(var(--spacing) * 1);}
221
+ .pl-1\.5{padding-left:calc(var(--spacing) * 1.5);}
222
+ .pl-2\.5{padding-left:calc(var(--spacing) * 2.5);}
223
+ .pl-3{padding-left:calc(var(--spacing) * 3);}
224
+ .pl-4{padding-left:calc(var(--spacing) * 4);}
225
+ .pl-8{padding-left:calc(var(--spacing) * 8);}
226
+ .pr-\[var\(--group-actions-pad\)\]{padding-right:var(--group-actions-pad);}
227
+ .pr-\[var\(--row-gutter\)\]{padding-right:var(--row-gutter);}
228
+ .pr-0\.5{padding-right:calc(var(--spacing) * 0.5);}
229
+ .pr-12{padding-right:calc(var(--spacing) * 12);}
230
+ .pr-2{padding-right:calc(var(--spacing) * 2);}
231
+ .pr-2\.5{padding-right:calc(var(--spacing) * 2.5);}
232
+ .pr-3{padding-right:calc(var(--spacing) * 3);}
233
+ .pr-4{padding-right:calc(var(--spacing) * 4);}
234
+ .pt-\[0\.25em\]{padding-top:0.25em;}
235
+ .pt-1{padding-top:calc(var(--spacing) * 1);}
236
+ .pt-1\.5{padding-top:calc(var(--spacing) * 1.5);}
237
+ .pt-2{padding-top:calc(var(--spacing) * 2);}
238
+ .pt-2\.5{padding-top:calc(var(--spacing) * 2.5);}
239
+ .pt-3{padding-top:calc(var(--spacing) * 3);}
240
+ .pt-4{padding-top:calc(var(--spacing) * 4);}
241
+ .pt-6{padding-top:calc(var(--spacing) * 6);}
242
+ .text-center{text-align:center;}
243
+ .text-left{text-align:left;}
244
+ .text-right{text-align:right;}
245
+ .align-middle{vertical-align:middle;}
246
+ .appearance-none{-webkit-appearance:none;appearance:none;}
247
+ .outline-offset-2{outline-offset:2px;}
248
+ .outline{outline-style:var(--un-outline-style);outline-width:1px;}
249
+ .outline-none{--un-outline-style:none;outline-style:none;}
250
+ .focus\:outline-none:focus{--un-outline-style:none;outline-style:none;}
251
+ .b,
252
+ .border{border-width:1px;}
253
+ .\[\&\>\*\]\:border-b>*,
254
+ .border-b{border-bottom-width:1px;}
255
+ .\[\&\>\*\+\*\]\:border-s>*+*,
256
+ .border-s{border-inline-start-width:1px;}
257
+ .border-e{border-inline-end-width:1px;}
258
+ .border-l{border-left-width:1px;}
259
+ .border-r{border-right-width:1px;}
260
+ .border-t{border-top-width:1px;}
261
+ .\[\&\>\*\]\:border-border>*,
262
+ .border-border{border-color:color-mix(in srgb, var(--border) var(--un-border-opacity), transparent);}
263
+ .border-\[1\.5px\]{border-width:1.5px;}
264
+ .border-0{border-width:0px;}
265
+ .border-2{border-width:2px;}
266
+ .border-accent\/40{border-color:color-mix(in srgb, var(--accent) 40%, transparent);}
267
+ .border-background\/30{border-color:color-mix(in srgb, var(--background) 30%, transparent);}
268
+ .border-border\/60{border-color:color-mix(in srgb, var(--border) 60%, transparent);}
269
+ .border-control{border-color:color-mix(in srgb, var(--control-border) var(--un-border-opacity), transparent);}
270
+ .border-destructive\/50{border-color:color-mix(in srgb, var(--destructive) 50%, transparent);}
271
+ .border-focus-ring{border-color:color-mix(in srgb, var(--focus-ring) var(--un-border-opacity), transparent);}
272
+ .border-foreground\/60{border-color:color-mix(in srgb, var(--foreground) 60%, transparent);}
273
+ .border-muted-foreground\/50{border-color:color-mix(in srgb, var(--muted-foreground) 50%, transparent);}
274
+ .border-picker-ring{border-color:color-mix(in srgb, var(--picker-ring) var(--un-border-opacity), transparent);}
275
+ .border-thumb{border-color:color-mix(in srgb, var(--thumb) var(--un-border-opacity), transparent);}
276
+ .border-transparent{border-color:transparent;}
277
+ .hover\:border-destructive\/50:hover{border-color:color-mix(in srgb, var(--destructive) 50%, transparent);}
278
+ .border-t-muted-foreground{border-top-color:color-mix(in srgb, var(--muted-foreground) var(--un-border-top-opacity), transparent);--un-border-top-opacity:var(--un-border-opacity);}
279
+ .data-\[active\]\:rounded-3xl[data-active],
280
+ .rounded-3xl{border-radius:var(--radius-3xl);}
281
+ .data-\[active\]\:rounded-xl[data-active],
282
+ .rounded-xl{border-radius:var(--radius-xl);}
283
+ .rounded{border-radius:var(--radius-DEFAULT);}
284
+ .rounded-\[10px\]{border-radius:10px;}
285
+ .rounded-\[20px\]{border-radius:20px;}
286
+ .rounded-\[22px\]{border-radius:22px;}
287
+ .rounded-\[inherit\]{border-radius:inherit;}
288
+ .rounded-2xl{border-radius:var(--radius-2xl);}
289
+ .rounded-full{border-radius:calc(infinity * 1px);}
290
+ .rounded-lg{border-radius:var(--radius-lg);}
291
+ .rounded-md{border-radius:var(--radius-md);}
292
+ .rounded-none{border-radius:var(--radius-none);}
293
+ .rounded-sm{border-radius:var(--radius-sm);}
294
+ .rounded-xs{border-radius:var(--radius-xs);}
295
+ .after\:rounded-full::after{border-radius:calc(infinity * 1px);}
296
+ .rounded-b-lg{border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg);}
297
+ .rounded-e-lg{border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg);}
298
+ .rounded-s-lg{border-end-start-radius:var(--radius-lg);border-start-start-radius:var(--radius-lg);}
299
+ .rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);}
300
+ .border-none{--un-border-style:none;border-style:none;}
301
+ .border-solid{--un-border-style:solid;border-style:solid;}
302
+ .bg-\[var\(--btn-bg\)\]{background-color:color-mix(in oklab, var(--btn-bg) var(--un-bg-opacity), transparent);}
303
+ .bg-accent{background-color:color-mix(in srgb, var(--accent) var(--un-bg-opacity), transparent);}
304
+ .bg-accent-hover{background-color:color-mix(in srgb, var(--accent-hover) var(--un-bg-opacity), transparent);}
305
+ .bg-accent\/20{background-color:color-mix(in srgb, var(--accent) 20%, transparent);}
306
+ .bg-accent\/40,
307
+ .dark .dark\:bg-accent\/40{background-color:color-mix(in srgb, var(--accent) 40%, transparent);}
308
+ .bg-active,
309
+ .group:active .group-active\:bg-active{background-color:color-mix(in srgb, var(--active) var(--un-bg-opacity), transparent);}
310
+ .bg-background{background-color:color-mix(in srgb, var(--background) var(--un-bg-opacity), transparent);}
311
+ .bg-border{background-color:color-mix(in srgb, var(--border) var(--un-bg-opacity), transparent);}
312
+ .bg-border\/60{background-color:color-mix(in srgb, var(--border) 60%, transparent);}
313
+ .bg-brand{background-color:color-mix(in srgb, var(--brand) var(--un-bg-opacity), transparent);}
314
+ .bg-brand-hover{background-color:color-mix(in srgb, var(--brand-hover) var(--un-bg-opacity), transparent);}
315
+ .bg-card\/70{background-color:color-mix(in srgb, var(--card) 70%, transparent);}
316
+ .bg-current{background-color:currentColor;}
317
+ .bg-foreground{background-color:color-mix(in srgb, var(--foreground) var(--un-bg-opacity), transparent);}
318
+ .bg-foreground\/60{background-color:color-mix(in srgb, var(--foreground) 60%, transparent);}
319
+ .bg-hover,
320
+ .group:hover .group-hover\:bg-hover{background-color:color-mix(in srgb, var(--hover) var(--un-bg-opacity), transparent);}
321
+ .bg-muted{background-color:color-mix(in srgb, var(--muted) var(--un-bg-opacity), transparent);}
322
+ .bg-muted-foreground{background-color:color-mix(in srgb, var(--muted-foreground) var(--un-bg-opacity), transparent);}
323
+ .bg-muted-foreground\/50{background-color:color-mix(in srgb, var(--muted-foreground) 50%, transparent);}
324
+ .bg-overlay\/16{background-color:color-mix(in srgb, rgb(var(--overlay)) 16%, transparent);}
325
+ .bg-overlay\/8{background-color:color-mix(in srgb, rgb(var(--overlay)) 8%, transparent);}
326
+ .bg-scrim{background-color:color-mix(in srgb, var(--scrim) var(--un-bg-opacity), transparent);}
327
+ .bg-selected\/50{background-color:color-mix(in srgb, var(--selected) 50%, transparent);}
328
+ .bg-status-action\/16{background-color:color-mix(in srgb, var(--status-action) 16%, transparent);}
329
+ .bg-status-error{background-color:color-mix(in srgb, var(--status-error) var(--un-bg-opacity), transparent);}
330
+ .bg-status-error\/16{background-color:color-mix(in srgb, var(--status-error) 16%, transparent);}
331
+ .bg-status-info\/16{background-color:color-mix(in srgb, var(--status-info) 16%, transparent);}
332
+ .bg-status-loading\/16{background-color:color-mix(in srgb, var(--status-loading) 16%, transparent);}
333
+ .bg-status-success{background-color:color-mix(in srgb, var(--status-success) var(--un-bg-opacity), transparent);}
334
+ .bg-status-success\/16{background-color:color-mix(in srgb, var(--status-success) 16%, transparent);}
335
+ .bg-status-warning\/16{background-color:color-mix(in srgb, var(--status-warning) 16%, transparent);}
336
+ .bg-surface-1{background-color:color-mix(in srgb, var(--surface-1) var(--un-bg-opacity), transparent);}
337
+ .bg-surface-2{background-color:color-mix(in srgb, var(--surface-2) var(--un-bg-opacity), transparent);}
338
+ .bg-surface-3{background-color:color-mix(in srgb, var(--surface-3) var(--un-bg-opacity), transparent);}
339
+ .bg-surface-4{background-color:color-mix(in srgb, var(--surface-4) var(--un-bg-opacity), transparent);}
340
+ .bg-surface-5{background-color:color-mix(in srgb, var(--surface-5) var(--un-bg-opacity), transparent);}
341
+ .bg-surface-6{background-color:color-mix(in srgb, var(--surface-6) var(--un-bg-opacity), transparent);}
342
+ .bg-surface-7{background-color:color-mix(in srgb, var(--surface-7) var(--un-bg-opacity), transparent);}
343
+ .bg-surface-8{background-color:color-mix(in srgb, var(--surface-8) var(--un-bg-opacity), transparent);}
344
+ .bg-thumb{background-color:color-mix(in srgb, var(--thumb) var(--un-bg-opacity), transparent);}
345
+ .bg-transparent{background-color:transparent;}
346
+ .dark .dark\:bg-accent\/12{background-color:color-mix(in srgb, var(--accent) 12%, transparent);}
347
+ .data-\[active\]\:bg-muted\/50[data-active],
348
+ .group\/search:hover .group-hover\/search\:bg-muted\/50{background-color:color-mix(in srgb, var(--muted) 50%, transparent);}
349
+ .data-\[invalid\]\:data-\[active\]\:bg-destructive-light\/60[data-active][data-invalid]{background-color:color-mix(in srgb, var(--destructive-light) 60%, transparent);}
350
+ .focus-within\:\!bg-card:focus-within{background-color:color-mix(in srgb, var(--card) var(--un-bg-opacity), transparent) !important;}
351
+ .data-\[invalid\]\:hover\:bg-destructive-light\/60:hover[data-invalid]{background-color:color-mix(in srgb, var(--destructive-light) 60%, transparent);}
352
+ .group:hover .group-hover\:bg-brand\/20{background-color:color-mix(in srgb, var(--brand) 20%, transparent);}
353
+ .group\/scrollbar:hover .group-hover\/scrollbar\:bg-overlay\/12{background-color:color-mix(in srgb, rgb(var(--overlay)) 12%, transparent);}
354
+ .hover\:after\:bg-foreground\/25:hover::after{background-color:color-mix(in srgb, var(--foreground) 25%, transparent);}
355
+ .hover\:bg-accent\/80:hover{background-color:color-mix(in srgb, var(--accent) 80%, transparent);}
356
+ .hover\:bg-active:hover{background-color:color-mix(in srgb, var(--active) var(--un-bg-opacity), transparent);}
357
+ .hover\:bg-card:hover{background-color:color-mix(in srgb, var(--card) var(--un-bg-opacity), transparent);}
358
+ .hover\:bg-foreground\/90:hover{background-color:color-mix(in srgb, var(--foreground) 90%, transparent);}
359
+ .hover\:bg-hover:hover{background-color:color-mix(in srgb, var(--hover) var(--un-bg-opacity), transparent);}
360
+ .hover\:bg-muted\/50:hover{background-color:color-mix(in srgb, var(--muted) 50%, transparent);}
361
+ .active\:\!bg-overlay\/16:active{background-color:color-mix(in srgb, rgb(var(--overlay)) 16%, transparent) !important;}
362
+ .active\:bg-accent:active{background-color:color-mix(in srgb, var(--accent) var(--un-bg-opacity), transparent);}
363
+ .active\:bg-active:active{background-color:color-mix(in srgb, var(--active) var(--un-bg-opacity), transparent);}
364
+ .active\:bg-foreground\/80:active{background-color:color-mix(in srgb, var(--foreground) 80%, transparent);}
365
+ .enabled\:hover\:bg-hover:hover:enabled{background-color:color-mix(in srgb, var(--hover) var(--un-bg-opacity), transparent);}
366
+ .before\:bg-active::before{background-color:color-mix(in srgb, var(--active) var(--un-bg-opacity), transparent);}
367
+ .after\:bg-current::after{background-color:currentColor;}
368
+ .after\:bg-foreground\/25::after{background-color:color-mix(in srgb, var(--foreground) 25%, transparent);}
369
+ .after\:bg-transparent::after{background-color:transparent;}
370
+ .aria-expanded\:opacity-100[aria-expanded="true"],
371
+ .data-\[hovering\]\:opacity-100[data-hovering],
372
+ .data-\[scrolling\]\:opacity-100[data-scrolling],
373
+ .data-\[state\=open\]\:opacity-100[data-state=open],
374
+ .group\/group-header:has([data-sidebar=group-action]:is([data-state=open],[data-popup-open],[aria-expanded=true])) .group-has-\[\[data-sidebar\=group-action\]\:is\(\[data-state\=open\]\,\[data-popup-open\]\,\[aria-expanded\=true\]\)\]\/group-header\:opacity-100,
375
+ .has-\[\[data-popup-open\]\]\:opacity-100:has([data-popup-open]),
376
+ .has-\[\[data-state\=open\]\]\:opacity-100:has([data-state=open]),
377
+ .opacity-100,
378
+ .group\/card:focus-within .group-focus-within\/card\:opacity-100,
379
+ .group\/group-header:focus-within .group-focus-within\/group-header\:opacity-100,
380
+ .group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100,
381
+ .group\/menu-sub-item:focus-within .group-focus-within\/menu-sub-item\:opacity-100,
382
+ .group\/parent-row:focus-within .group-focus-within\/parent-row\:opacity-100,
383
+ .group\/search:focus-within .group-focus-within\/search\:opacity-100,
384
+ .group\/card:hover .group-hover\/card\:opacity-100,
385
+ .group\/group-header:hover .group-hover\/group-header\:opacity-100,
386
+ .group\/menu-item:hover .group-hover\/menu-item\:opacity-100,
387
+ .group\/menu-sub-item:hover .group-hover\/menu-sub-item\:opacity-100,
388
+ .group\/parent-row:hover .group-hover\/parent-row\:opacity-100,
389
+ .group\/qrow:hover .group-hover\/qrow\:opacity-100,
390
+ .group\/search:hover .group-hover\/search\:opacity-100,
391
+ .group\/tile:hover .group-hover\/tile\:opacity-100,
392
+ .peer\/menu-button:hover~.peer-hover\/menu-button\:opacity-100,
393
+ .peer\/menu-button:focus-visible~.peer-focus-visible\/menu-button\:opacity-100{opacity:100%;}
394
+ .dark .dark\:opacity-12{opacity:12%;}
395
+ .data-\[disabled\]\:opacity-50[data-disabled],
396
+ .opacity-50{opacity:50%;}
397
+ .opacity-0{opacity:0%;}
398
+ .opacity-16{opacity:16%;}
399
+ .opacity-20{opacity:20%;}
400
+ .opacity-30{opacity:30%;}
401
+ .opacity-55{opacity:55%;}
402
+ .focus-within\:opacity-100:focus-within{opacity:100%;}
403
+ .hover\:opacity-100:hover{opacity:100%;}
404
+ .focus-visible\:opacity-100:focus-visible{opacity:100%;}
405
+ .disabled\:opacity-50:disabled{opacity:50%;}
406
+ .\@container{container-type:inline-size;}
407
+ .underline{text-decoration-line:underline;}
408
+ .hover\:underline:hover{text-decoration-line:underline;}
409
+ .decoration-border{text-decoration-color:color-mix(in srgb, var(--border) var(--un-line-opacity), transparent);-webkit-text-decoration-color:color-mix(in srgb, var(--border) var(--un-line-opacity), transparent);}
410
+ .hover\:decoration-foreground:hover{text-decoration-color:color-mix(in srgb, var(--foreground) var(--un-line-opacity), transparent);-webkit-text-decoration-color:color-mix(in srgb, var(--foreground) var(--un-line-opacity), transparent);}
411
+ .underline-offset-4{text-underline-offset:4px;}
412
+ .flex{display:flex;}
413
+ .inline-flex{display:inline-flex;}
414
+ .flex-1{flex:1 1 0%;}
415
+ .flex-auto{flex:1 1 auto;}
416
+ .\[\&_svg\]\:shrink-0 svg,
417
+ .flex-shrink-0,
418
+ .shrink-0{flex-shrink:0;}
419
+ .flex-row{flex-direction:row;}
420
+ .flex-col{flex-direction:column;}
421
+ .flex-col-reverse{flex-direction:column-reverse;}
422
+ .flex-wrap{flex-wrap:wrap;}
423
+ .\[\&_\[role\=menuitem\]\]\:gap-2 [role=menuitem],
424
+ .\[\&_\[role\=menuitemradio\]\]\:gap-2 [role=menuitemradio],
425
+ .gap-2{gap:calc(var(--spacing) * 2);}
426
+ .gap-\[inherit\]{gap:inherit;}
427
+ .gap-0{gap:calc(var(--spacing) * 0);}
428
+ .gap-0\.5{gap:calc(var(--spacing) * 0.5);}
429
+ .gap-1{gap:calc(var(--spacing) * 1);}
430
+ .gap-1\.5{gap:calc(var(--spacing) * 1.5);}
431
+ .gap-2\.5{gap:calc(var(--spacing) * 2.5);}
432
+ .gap-3{gap:calc(var(--spacing) * 3);}
433
+ .gap-4{gap:calc(var(--spacing) * 4);}
434
+ .gap-x-2{column-gap:calc(var(--spacing) * 2);}
435
+ .gap-y-1{row-gap:calc(var(--spacing) * 1);}
436
+ .grid{display:grid;}
437
+ .inline-grid{display:inline-grid;}
438
+ .row-span-2{grid-row:span 2/span 2;}
439
+ .col-start-1{grid-column-start:1;}
440
+ .col-start-2{grid-column-start:2;}
441
+ .row-start-1{grid-row-start:1;}
442
+ .auto-rows-min{grid-auto-rows:min-content;}
443
+ .grid-cols-\[minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr);}
444
+ .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr));}
445
+ .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr));}
446
+ .grid-rows-subgrid{grid-template-rows:subgrid;}
447
+ .\[\&_svg\]\:size-\[var\(--icon-size\)\] svg{width:var(--icon-size);height:var(--icon-size);}
448
+ .size-\[5px\]{width:5px;height:5px;}
449
+ .size-0{width:calc(var(--spacing) * 0);height:calc(var(--spacing) * 0);}
450
+ .size-1{width:calc(var(--spacing) * 1);height:calc(var(--spacing) * 1);}
451
+ .size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5);}
452
+ .size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2);}
453
+ .size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5);}
454
+ .size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4);}
455
+ .size-40{width:calc(var(--spacing) * 40);height:calc(var(--spacing) * 40);}
456
+ .size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);}
457
+ .size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6);}
458
+ .size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7);}
459
+ .size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);}
460
+ .size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);}
461
+ .size-full{width:100%;height:100%;}
462
+ .after\:size-1::after{width:calc(var(--spacing) * 1);height:calc(var(--spacing) * 1);}
463
+ .\!h-\[15px\]{height:15px !important;}
464
+ .\!h-\[19px\]{height:19px !important;}
465
+ .\!h-auto{height:auto !important;}
466
+ .\!w-\[15px\]{width:15px !important;}
467
+ .\!w-\[19px\]{width:19px !important;}
468
+ .\[\&_button\.w-7\]\:w-6 button.w-7,
469
+ .group\/group-header:has([data-sidebar=group-action]:is([data-state=open],[data-popup-open],[aria-expanded=true])) .group-has-\[\[data-sidebar\=group-action\]\:is\(\[data-state\=open\]\,\[data-popup-open\]\,\[aria-expanded\=true\]\)\]\/group-header\:w-6,
470
+ .w-6,
471
+ .group\/group-header:focus-within .group-focus-within\/group-header\:w-6,
472
+ .group\/group-header:hover .group-hover\/group-header\:w-6{width:calc(var(--spacing) * 6);}
473
+ .\[\&_button\]\:h-6 button,
474
+ .h-6{height:calc(var(--spacing) * 6);}
475
+ .\[\&_svg\]\:h-3\.5 svg,
476
+ .h-3\.5{height:calc(var(--spacing) * 3.5);}
477
+ .\[\&_svg\]\:h-4 svg,
478
+ .h-4{height:calc(var(--spacing) * 4);}
479
+ .\[\&_svg\]\:w-3\.5 svg,
480
+ .w-3\.5{width:calc(var(--spacing) * 3.5);}
481
+ .\[\&_svg\]\:w-4 svg,
482
+ .w-4{width:calc(var(--spacing) * 4);}
483
+ .\[\&\>div\[style\]\]\:\!min-w-0>div[style],
484
+ .\[\&\>div\]\:\!min-w-0>div{min-width:calc(var(--spacing) * 0) !important;}
485
+ .h-\[14px\]{height:14px;}
486
+ .h-\[16px\]{height:16px;}
487
+ .h-\[18px\]{height:18px;}
488
+ .h-\[7px\]{height:7px;}
489
+ .h-\[8px\]{height:8px;}
490
+ .h-\[min\(30rem\,65dvh\)\]{height:min(30rem,65dvh);}
491
+ .h-\[var\(--scroll-area-thumb-height\)\]{height:var(--scroll-area-thumb-height);}
492
+ .h-0{height:calc(var(--spacing) * 0);}
493
+ .h-1{height:calc(var(--spacing) * 1);}
494
+ .h-12,
495
+ .h12{height:calc(var(--spacing) * 12);}
496
+ .h-2\.5{height:calc(var(--spacing) * 2.5);}
497
+ .h-3{height:calc(var(--spacing) * 3);}
498
+ .h-5{height:calc(var(--spacing) * 5);}
499
+ .h-56{height:calc(var(--spacing) * 56);}
500
+ .h-7{height:calc(var(--spacing) * 7);}
501
+ .h-8{height:calc(var(--spacing) * 8);}
502
+ .h-80{height:calc(var(--spacing) * 80);}
503
+ .h-9{height:calc(var(--spacing) * 9);}
504
+ .h-full{height:100%;}
505
+ .h-px{height:1px;}
506
+ .h11{height:calc(var(--spacing) * 11);}
507
+ .h2{height:calc(var(--spacing) * 2);}
508
+ .h23{height:calc(var(--spacing) * 23);}
509
+ .max-h-\[calc\(100dvh-4rem\)\]{max-height:calc(100dvh - 4rem);}
510
+ .max-h-\[inherit\]{max-height:inherit;}
511
+ .max-h-\[min\(300px\,var\(--available-height\)\)\]{max-height:min(300px,var(--available-height));}
512
+ .max-h-\[min\(480px\,var\(--available-height\)\)\]{max-height:min(480px,var(--available-height));}
513
+ .max-h-80{max-height:calc(var(--spacing) * 80);}
514
+ .max-w-\[360px\]{max-width:360px;}
515
+ .max-w-\[36rem\]{max-width:36rem;}
516
+ .max-w-\[400px\]{max-width:400px;}
517
+ .max-w-\[480px\]{max-width:480px;}
518
+ .max-w-\[540px\]{max-width:540px;}
519
+ .max-w-\[800px\]{max-width:800px;}
520
+ .max-w-\[880px\]{max-width:880px;}
521
+ .max-w-\[calc\(100\%_\+_8px\)\]{max-width:calc(100% + 8px);}
522
+ .max-w-\[calc\(100vw-1rem\)\]{max-width:calc(100vw - 1rem);}
523
+ .max-w-\[min\(92vw\,20rem\)\]{max-width:min(92vw,20rem);}
524
+ .max-w-full{max-width:100%;}
525
+ .min-h-\[60px\]{min-height:60px;}
526
+ .min-h-0{min-height:calc(var(--spacing) * 0);}
527
+ .min-h-20{min-height:calc(var(--spacing) * 20);}
528
+ .min-h-40{min-height:calc(var(--spacing) * 40);}
529
+ .min-h-7{min-height:calc(var(--spacing) * 7);}
530
+ .min-h-9{min-height:calc(var(--spacing) * 9);}
531
+ .min-w-\[128px\]{min-width:128px;}
532
+ .min-w-\[160px\]{min-width:160px;}
533
+ .min-w-\[240px\]{min-width:240px;}
534
+ .min-w-\[var\(--anchor-width\)\]{min-width:var(--anchor-width);}
535
+ .min-w-0{min-width:calc(var(--spacing) * 0);}
536
+ .min-w-4{min-width:calc(var(--spacing) * 4);}
537
+ .min-w-5{min-width:calc(var(--spacing) * 5);}
538
+ .min-w-6{min-width:calc(var(--spacing) * 6);}
539
+ .min-w-full{min-width:100%;}
540
+ .w-\[14px\]{width:14px;}
541
+ .w-\[16px\]{width:16px;}
542
+ .w-\[23px\]{width:23px;}
543
+ .w-\[240px\]{width:240px;}
544
+ .w-\[26px\]{width:26px;}
545
+ .w-\[5ch\]{width:5ch;}
546
+ .w-\[7px\]{width:7px;}
547
+ .w-\[8px\]{width:8px;}
548
+ .w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem);}
549
+ .w-\[calc\(var\(--anchor-width\)_\+_10px\)\]{width:calc(var(--anchor-width) + 10px);}
550
+ .w-\[max\(var\(--anchor-width\,0px\)\,14rem\)\]{width:max(var(--anchor-width,0px),14rem);}
551
+ .w-\[min\(22rem\,calc\(100vw-2rem\)\)\]{width:min(22rem,calc(100vw - 2rem));}
552
+ .w-\[min\(24rem\,calc\(100\%-1rem\)\)\]{width:min(24rem,calc(100% - 1rem));}
553
+ .w-\[var\(--anchor-width\)\]{width:var(--anchor-width);}
554
+ .w-\[var\(--scroll-area-thumb-width\)\]{width:var(--scroll-area-thumb-width);}
555
+ .w-0{width:calc(var(--spacing) * 0);}
556
+ .w-1{width:calc(var(--spacing) * 1);}
557
+ .w-10{width:calc(var(--spacing) * 10);}
558
+ .w-12{width:calc(var(--spacing) * 12);}
559
+ .w-15{width:calc(var(--spacing) * 15);}
560
+ .w-16{width:calc(var(--spacing) * 16);}
561
+ .w-2{width:calc(var(--spacing) * 2);}
562
+ .w-2\.5{width:calc(var(--spacing) * 2.5);}
563
+ .w-28{width:calc(var(--spacing) * 28);}
564
+ .w-3{width:calc(var(--spacing) * 3);}
565
+ .w-5{width:calc(var(--spacing) * 5);}
566
+ .w-56{width:calc(var(--spacing) * 56);}
567
+ .w-7{width:calc(var(--spacing) * 7);}
568
+ .w-72{width:calc(var(--spacing) * 72);}
569
+ .w-9{width:calc(var(--spacing) * 9);}
570
+ .w-full{width:100%;}
571
+ .w-max{width:max-content;}
572
+ .w-px{width:1px;}
573
+ .group\/scrollbar:hover .group-hover\/scrollbar\:h-1\.5{height:calc(var(--spacing) * 1.5);}
574
+ .group\/scrollbar:hover .group-hover\/scrollbar\:w-1\.5{width:calc(var(--spacing) * 1.5);}
575
+ .after\:w-px::after{width:1px;}
576
+ .aspect-\[16\/9\]{aspect-ratio:16/9;}
577
+ .inline{display:inline;}
578
+ .\[\&\>div\[style\]\]\:\!block>div[style],
579
+ .\[\&\>div\]\:\!block>div{display:block !important;}
580
+ .block{display:block;}
581
+ .inline-block{display:inline-block;}
582
+ .contents{display:contents;}
583
+ .\[\&\:\:-webkit-search-cancel-button\]\:hidden::-webkit-search-cancel-button,
584
+ .hidden{display:none;}
585
+ .empty\:hidden:empty{display:none;}
586
+ .visible{visibility:visible;}
587
+ .invisible{visibility:hidden;}
588
+ .collapse{visibility:collapse;}
589
+ .cursor-default{cursor:default;}
590
+ .disabled\:cursor-default:disabled{cursor:default;}
591
+ .cursor-none{cursor:none;}
592
+ .cursor-pointer{cursor:pointer;}
593
+ .cursor-text{cursor:text;}
594
+ .cursor-grab{cursor:grab;}
595
+ .active\:cursor-grabbing:active{cursor:grabbing;}
596
+ .cursor-col-resize{cursor:col-resize;}
597
+ .cursor-ew-resize{cursor:ew-resize;}
598
+ .group\/card:focus-within .group-focus-within\/card\:pointer-events-auto,
599
+ .group\/card:hover .group-hover\/card\:pointer-events-auto{pointer-events:auto;}
600
+ .focus-visible\:pointer-events-auto:focus-visible{pointer-events:auto;}
601
+ .\[\&_\*\]\:pointer-events-none *,
602
+ .data-\[disabled\]\:pointer-events-none[data-disabled],
603
+ .pointer-events-none{pointer-events:none;}
604
+ .disabled\:pointer-events-none:disabled{pointer-events:none;}
605
+ .resize{resize:both;}
606
+ .resize-none{resize:none;}
607
+ .select-none{-webkit-user-select:none;user-select:none;}
608
+ .whitespace-nowrap{white-space:nowrap;}
609
+ .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
610
+ .text-ellipsis{text-overflow:ellipsis;}
611
+ .uppercase{text-transform:uppercase;}
612
+ .italic{font-style:italic;}
613
+ .ring,
614
+ .ring-1{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(1px + var(--un-ring-offset-width)) var(--un-ring-color, currentColor);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
615
+ .ring-2{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(2px + var(--un-ring-offset-width)) var(--un-ring-color, currentColor);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
616
+ .focus-within\:ring-1:focus-within{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(1px + var(--un-ring-offset-width)) var(--un-ring-color, currentColor);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
617
+ .focus-visible\:ring-1:focus-visible{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(1px + var(--un-ring-offset-width)) var(--un-ring-color, currentColor);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
618
+ .data-\[active\]\:ring-border[data-active],
619
+ .data-\[disabled\]\:ring-border[data-disabled],
620
+ .ring-border{--un-ring-color:color-mix(in srgb, var(--border) var(--un-ring-opacity), transparent);}
621
+ .data-\[active\]\:ring-transparent[data-active],
622
+ .ring-transparent{--un-ring-color:transparent;}
623
+ .data-\[invalid\]\:\!ring-destructive\/50[data-invalid]{--un-ring-color:color-mix(in srgb, var(--destructive) 50%, transparent) !important;}
624
+ .ring-focus-ring{--un-ring-color:color-mix(in srgb, var(--focus-ring) var(--un-ring-opacity), transparent);}
625
+ .focus-within\:ring-border:focus-within{--un-ring-color:color-mix(in srgb, var(--border) var(--un-ring-opacity), transparent);}
626
+ .focus-within\:ring-focus-ring:focus-within{--un-ring-color:color-mix(in srgb, var(--focus-ring) var(--un-ring-opacity), transparent);}
627
+ .focus-within\:ring-transparent:focus-within{--un-ring-color:transparent;}
628
+ .hover\:ring-border:hover{--un-ring-color:color-mix(in srgb, var(--border) var(--un-ring-opacity), transparent);}
629
+ .hover\:ring-transparent:hover{--un-ring-color:transparent;}
630
+ .focus-visible\:ring-focus-ring:focus-visible{--un-ring-color:color-mix(in srgb, var(--focus-ring) var(--un-ring-opacity), transparent);}
631
+ .focus-visible\:ring-offset-0:focus-visible{--un-ring-offset-width:0px;--un-ring-offset-shadow:var(--un-ring-inset,) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);}
632
+ .focus-visible\:ring-offset-2:focus-visible{--un-ring-offset-width:2px;--un-ring-offset-shadow:var(--un-ring-inset,) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);}
633
+ .focus-visible\:ring-offset-background:focus-visible{--un-ring-offset-color:color-mix(in srgb, var(--background) var(--un-ring-offset-opacity), transparent);}
634
+ .shadow,
635
+ .shadow\)\,,
636
+ .shadowLevel\)\)\){--un-shadow:0 1px 3px 0 var(--un-shadow-color, rgb(0 0 0 / 0.1)),0 1px 2px -1px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
637
+ .shadow-\[0_0_0_1px_transparent\]{--un-shadow:0 0 0 1px transparent var(--un-shadow-color, );box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
638
+ .shadow-\[0_0_0_1px_var\(--active\)\]{--un-shadow:0 0 0 1px var(--un-shadow-color, var(--active));box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
639
+ .shadow-\[0_0_0_1px_var\(--border\)\,inset_0_0_0_0px_var\(--border\)\]{--un-shadow:0 0 0 1px var(--border),inset 0 0 0 0px var(--border);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
640
+ .shadow-\[0_0_0_1px_var\(--btn-bg\)\]{--un-shadow:0 0 0 1px var(--un-shadow-color, var(--btn-bg));box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
641
+ .shadow-picker-cursor{--un-shadow:var(--shadow-picker-cursor);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
642
+ .shadow-picker-thumb{--un-shadow:var(--shadow-picker-thumb);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
643
+ .shadow-surface-1{--un-shadow:var(--shadow-1);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
644
+ .shadow-surface-2{--un-shadow:var(--shadow-2);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
645
+ .shadow-surface-3{--un-shadow:var(--shadow-3);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
646
+ .shadow-surface-4{--un-shadow:var(--shadow-4);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
647
+ .shadow-surface-5{--un-shadow:var(--shadow-5);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
648
+ .shadow-surface-6{--un-shadow:var(--shadow-6);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
649
+ .shadow-surface-7{--un-shadow:var(--shadow-7);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
650
+ .shadow-surface-8{--un-shadow:var(--shadow-8);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
651
+ .shadow-swatch{--un-shadow:var(--shadow-swatch);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
652
+ .shadow-swatch-hover{--un-shadow:var(--shadow-swatch-hover);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
653
+ .shadow-swatch-selected{--un-shadow:var(--shadow-swatch-selected);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
654
+ .shadow-thumb{--un-shadow:var(--shadow-thumb);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
655
+ .group:hover .group-hover\:shadow-\[0_0_0_1px_var\(--hover\)\]{--un-shadow:0 0 0 1px var(--un-shadow-color, var(--hover));box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
656
+ .group:active .group-active\:shadow-\[0_0_0_0px_var\(--active\)\]{--un-shadow:0 0 0 0px var(--un-shadow-color, var(--active));box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
657
+ .group:active .group-active\:shadow-\[0_0_0_0px_var\(--border\)\,inset_0_0_0_1px_var\(--border\)\]{--un-shadow:0 0 0 0px var(--border),inset 0 0 0 1px var(--border);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
658
+ .group:active .group-active\:shadow-\[0_0_0_0px_var\(--btn-bg\)\]{--un-shadow:0 0 0 0px var(--un-shadow-color, var(--btn-bg));box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
659
+ .origin-top{transform-origin:top;}
660
+ .-translate-x-0\.5{--un-translate-x:calc(var(--spacing) * -0.5);translate:var(--un-translate-x) var(--un-translate-y);}
661
+ .-translate-x-1\/2{--un-translate-x:-50%;translate:var(--un-translate-x) var(--un-translate-y);}
662
+ .-translate-y-0\.5{--un-translate-y:calc(var(--spacing) * -0.5);translate:var(--un-translate-x) var(--un-translate-y);}
663
+ .-translate-y-1\/2{--un-translate-y:-50%;translate:var(--un-translate-x) var(--un-translate-y);}
664
+ .-translate-y-px{--un-translate-y:-1px;translate:var(--un-translate-x) var(--un-translate-y);}
665
+ .after\:-translate-x-1\/2::after{--un-translate-x:-50%;translate:var(--un-translate-x) var(--un-translate-y);}
666
+ .-rotate-45{rotate:-45deg;}
667
+ .rotate-180{rotate:180deg;}
668
+ .data-\[active\]\:scale-\[0\.96\][data-active]{--un-scale-x:0.96;--un-scale-y:0.96;scale:var(--un-scale-x) var(--un-scale-y);}
669
+ .transform{transform:var(--un-rotate-x) var(--un-rotate-y) var(--un-rotate-z) var(--un-skew-x) var(--un-skew-y);}
670
+ .\[\&_svg\]\:transition-\[stroke-width\] svg,
671
+ .transition-\[stroke-width\]{transition-property:stroke-width;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
672
+ .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
673
+ .transition-\[background-color\,box-shadow\,opacity\]{transition-property:background-color,box-shadow,opacity;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
674
+ .transition-\[background-color\,width\,height\]{transition-property:background-color,width,height;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
675
+ .transition-\[background-color\]{transition-property:background-color;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
676
+ .transition-\[border-color\]{transition-property:border-color;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
677
+ .transition-\[box-shadow\,background-color\]{transition-property:box-shadow,background-color;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
678
+ .transition-\[box-shadow\,color\]{transition-property:box-shadow,color;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
679
+ .transition-\[box-shadow\],
680
+ .transition-shadow{transition-property:box-shadow;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
681
+ .transition-\[color\,background-color\,border-radius\,box-shadow\,opacity\]{transition-property:color,background-color,border-radius,box-shadow,opacity;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
682
+ .transition-\[color\,background-color\,opacity\]{transition-property:color,background-color,opacity;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
683
+ .transition-\[color\,background-color\]{transition-property:color,background-color;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
684
+ .transition-\[color\,font-variation-settings\]{transition-property:color,font-variation-settings;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
685
+ .transition-\[color\,opacity\]{transition-property:color,opacity;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
686
+ .transition-\[color\,stroke-width\]{transition-property:color,stroke-width;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
687
+ .transition-\[color\]{transition-property:color;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
688
+ .transition-\[font-variation-settings\]{transition-property:font-variation-settings;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
689
+ .transition-\[margin\]{transition-property:margin;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
690
+ .transition-\[padding\]{transition-property:padding;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
691
+ .transition-\[transform\],
692
+ .transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
693
+ .transition-all{transition-property:all;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
694
+ .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
695
+ .transition-opacity{transition-property:opacity;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
696
+ .after\:transition-colors::after{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
697
+ .duration-100{--un-duration:100ms;transition-duration:100ms;}
698
+ .duration-150{--un-duration:150ms;transition-duration:150ms;}
699
+ .data-\[hovering\]\:delay-0[data-hovering],
700
+ .data-\[scrolling\]\:delay-0[data-scrolling]{transition-delay:0s;}
701
+ .ease{--un-ease:var(--ease-DEFAULT);transition-timing-function:var(--ease-DEFAULT);}
702
+ .ease-in-out{--un-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out);}
703
+ .ease-out{--un-ease:var(--ease-out);transition-timing-function:var(--ease-out);}
704
+ .\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_80\%\,var\(--background\)\)\],
705
+ .group:active .group-active\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_80\%\,var\(--background\)\)\]{--btn-bg:color-mix(in oklab,var(--foreground) 80%,var(--background));}
706
+ .\[--btn-bg\:var\(--accent\)\],
707
+ .group:active .group-active\:\[--btn-bg\:var\(--accent\)\]{--btn-bg:var(--accent);}
708
+ .\[--btn-bg\:var\(--foreground\)\]{--btn-bg:var(--foreground);}
709
+ .\[--scroll-divider-inset\:8px\]{--scroll-divider-inset:8px;}
710
+ .\[--scroll-fade-size\:16px\]{--scroll-fade-size:16px;}
711
+ .\[--scroll-fade-size\:24px\]{--scroll-fade-size:24px;}
712
+ .\[--scroll-fade-size\:32px\]{--scroll-fade-size:32px;}
713
+ .\[flood-color\:var\(--shadow-color\)\]{flood-color:var(--shadow-color);}
714
+ .\[overflow-anchor\:none\]{overflow-anchor:none;}
715
+ .\[text-box\:trim-both_cap_alphabetic\]{text-box:trim-both cap alphabetic;}
716
+ .\[transform\:translate\(var\(--drawer-swipe-movement-x\)\,calc\(var\(--drawer-snap-point-offset\)_\+_var\(--drawer-swipe-movement-y\)\)\)\]{transform:translate(var(--drawer-swipe-movement-x),calc(var(--drawer-snap-point-offset) + var(--drawer-swipe-movement-y)));}
717
+ .\[transition-behavior\:allow-discrete\]{transition-behavior:allow-discrete;}
718
+ .\[transition-duration\:180ms\,80ms\]{transition-duration:180ms,80ms;}
719
+ .\[transition-timing-function\:cubic-bezier\(0\.23\,1\,0\.32\,1\)\,ease\]{transition-timing-function:cubic-bezier(0.23,1,0.32,1),ease;}
720
+ .\[translate\:var\(--toast-swipe-movement-x\)_var\(--toast-swipe-movement-y\)\]{translate:var(--toast-swipe-movement-x) var(--toast-swipe-movement-y);}
721
+ .group:hover .group-hover\:\[--btn-bg\:color-mix\(in_oklab\,var\(--accent\)_80\%\,var\(--background\)\)\]{--btn-bg:color-mix(in oklab,var(--accent) 80%,var(--background));}
722
+ .group:hover .group-hover\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_90\%\,var\(--background\)\)\]{--btn-bg:color-mix(in oklab,var(--foreground) 90%,var(--background));}
723
+ .group:active .group-active\:\[transition-duration\:80ms\,80ms\]{transition-duration:80ms,80ms;}
724
+ .after\:\[mask-image\:linear-gradient\(to_bottom\,transparent_var\(--rail-fade-start\)\,black_var\(--rail-fade-end\)\,black_calc\(100\%-var\(--rail-fade-end\)\)\,transparent_calc\(100\%-var\(--rail-fade-start\)\)\)\]::after{mask-image:linear-gradient(to bottom,transparent var(--rail-fade-start),black var(--rail-fade-end),black calc(100% - var(--rail-fade-end)),transparent calc(100% - var(--rail-fade-start)));}
725
+ .\!items-start{align-items:flex-start !important;}
726
+ .items-start{align-items:flex-start;}
727
+ .items-end{align-items:flex-end;}
728
+ .items-center{align-items:center;}
729
+ .self-start{align-self:flex-start;}
730
+ .self-center{align-self:center;}
731
+ .self-stretch{align-self:stretch;}
732
+ .inset-0{inset:calc(var(--spacing) * 0);}
733
+ .inset-px{inset:1px;}
734
+ .start-1{inset-inline-start:calc(var(--spacing) * 1);}
735
+ .before\:end-0::before{inset-inline-end:calc(var(--spacing) * 0);}
736
+ .before\:end-1\/2::before{inset-inline-end:50%;}
737
+ .before\:start-0::before{inset-inline-start:calc(var(--spacing) * 0);}
738
+ .before\:start-1\/2::before{inset-inline-start:50%;}
739
+ .inset-x-0{inset-inline:calc(var(--spacing) * 0);}
740
+ .inset-x-2{inset-inline:calc(var(--spacing) * 2);}
741
+ .inset-y-0{inset-block:calc(var(--spacing) * 0);}
742
+ .inset-y-2{inset-block:calc(var(--spacing) * 2);}
743
+ .before\:inset-y-0::before{inset-block:calc(var(--spacing) * 0);}
744
+ .after\:inset-y-0::after{inset-block:calc(var(--spacing) * 0);}
745
+ .after\:inset-y-2::after{inset-block:calc(var(--spacing) * 2);}
746
+ .bottom-0{bottom:calc(var(--spacing) * 0);}
747
+ .bottom-2{bottom:calc(var(--spacing) * 2);}
748
+ .bottom-4{bottom:calc(var(--spacing) * 4);}
749
+ .bottom-px{bottom:1px;}
750
+ .group\/menu-item:has(>[data-sidebar=menu-badge]) .group-has-\[\>\[data-sidebar\=menu-badge\]\]\/menu-item\:right-8\.5,
751
+ .group\/menu-sub-item:has(>[data-sidebar=menu-badge]) .group-has-\[\>\[data-sidebar\=menu-badge\]\]\/menu-sub-item\:right-8\.5{right:calc(var(--spacing) * 8.5);}
752
+ .left-0{left:calc(var(--spacing) * 0);}
753
+ .left-1{left:calc(var(--spacing) * 1);}
754
+ .left-1\.5{left:calc(var(--spacing) * 1.5);}
755
+ .left-1\/2{left:50%;}
756
+ .left-2{left:calc(var(--spacing) * 2);}
757
+ .left-4{left:calc(var(--spacing) * 4);}
758
+ .right-0{right:calc(var(--spacing) * 0);}
759
+ .right-1{right:calc(var(--spacing) * 1);}
760
+ .right-1\.5{right:calc(var(--spacing) * 1.5);}
761
+ .right-2{right:calc(var(--spacing) * 2);}
762
+ .right-3{right:calc(var(--spacing) * 3);}
763
+ .right-3\.5{right:calc(var(--spacing) * 3.5);}
764
+ .right-4{right:calc(var(--spacing) * 4);}
765
+ .top-\[12dvh\]{top:12dvh;}
766
+ .top-0{top:calc(var(--spacing) * 0);}
767
+ .top-0\.5{top:calc(var(--spacing) * 0.5);}
768
+ .top-1{top:calc(var(--spacing) * 1);}
769
+ .top-1\.5{top:calc(var(--spacing) * 1.5);}
770
+ .top-1\/2{top:50%;}
771
+ .top-2{top:calc(var(--spacing) * 2);}
772
+ .top-3{top:calc(var(--spacing) * 3);}
773
+ .top-4{top:calc(var(--spacing) * 4);}
774
+ .top-full{top:100%;}
775
+ .after\:bottom-1::after{bottom:calc(var(--spacing) * 1);}
776
+ .after\:left-\[3\.5px\]::after{left:3.5px;}
777
+ .after\:left-0::after{left:calc(var(--spacing) * 0);}
778
+ .after\:left-1\/2::after{left:50%;}
779
+ .after\:right-\[3\.5px\]::after{right:3.5px;}
780
+ .after\:right-0::after{right:calc(var(--spacing) * 0);}
781
+ .justify-end{justify-content:flex-end;}
782
+ .justify-center{justify-content:center;}
783
+ .justify-between{justify-content:space-between;}
784
+ .justify-self-end{justify-self:end;}
785
+ .order-first{order:calc(-infinity);}
786
+ .order-last{order:calc(infinity);}
787
+ .absolute{position:absolute;}
788
+ .fixed{position:fixed;}
789
+ .relative{position:relative;}
790
+ .sticky{position:sticky;}
791
+ .before\:absolute::before{position:absolute;}
792
+ .after\:absolute::after{position:absolute;}
793
+ .-z-10{z-index:-10;}
794
+ .z-\[1\],
795
+ .z-1{z-index:1;}
796
+ .z-\[2\]{z-index:2;}
797
+ .z-\[3\]{z-index:3;}
798
+ .z-\[4\]{z-index:4;}
799
+ .z-\[60\]{z-index:60;}
800
+ .z-0{z-index:0;}
801
+ .z-10{z-index:10;}
802
+ .z-20{z-index:20;}
803
+ .z-30{z-index:30;}
804
+ .z-50{z-index:50;}
805
+ .data-\[active\]\:overflow-hidden[data-active],
806
+ .overflow-hidden{overflow:hidden;}
807
+ .overflow-auto{overflow:auto;}
808
+ .overflow-visible{overflow:visible;}
809
+ .overflow-x-auto{overflow-x:auto;}
810
+ .overflow-x-clip{overflow-x:clip;}
811
+ .overflow-x-hidden{overflow-x:hidden;}
812
+ .overflow-y-auto{overflow-y:auto;}
813
+ .overflow-y-hidden{overflow-y:hidden;}
814
+ .fill-picker-edge{fill:color-mix(in srgb, var(--picker-edge) var(--un-fill-opacity), transparent);}
815
+ .\[\&_svg\]\:stroke-\[1\.5\] svg{stroke-width:1.5;}
816
+ .\[\&_svg\]\:stroke-\[2\] svg,
817
+ .group\/field:focus-within .group-focus-within\/field\:stroke-\[2\],
818
+ .group\/search:focus-within .group-focus-within\/search\:stroke-\[2\],
819
+ .group:hover .group-hover\:\[\&_svg\]\:stroke-\[2\] svg,
820
+ .group:hover .group-hover\:stroke-\[2\],
821
+ .group\/action:hover .group-hover\/action\:stroke-\[2\],
822
+ .group\/field:hover .group-hover\/field\:stroke-\[2\]{stroke-width:2;}
823
+ .stroke-thumb{stroke:color-mix(in srgb, var(--thumb) var(--un-stroke-opacity), transparent);}
824
+ .hover\:\[\&_svg\]\:stroke-\[2\] svg:hover{stroke-width:2;}
825
+ @keyframes pulse{0%, 100% {opacity:1} 50% {opacity:.5}}
826
+ @keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
827
+ .animate-pulse{animation:pulse 2s cubic-bezier(0.4,0,.6,1) infinite;}
828
+ .animate-spin{animation:spin 1s linear infinite;}
829
+ .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;}
830
+ .isolate{isolation:isolate;}
831
+ .object-cover{object-fit:cover;}
832
+ .object-contain{object-fit:contain;}
833
+ .min-h-svh{min-height:100svh;}
834
+ .h-svh{height:100svh;}
835
+ .backdrop-blur-sm{--un-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--un-backdrop-blur,) var(--un-backdrop-brightness,) var(--un-backdrop-contrast,) var(--un-backdrop-grayscale,) var(--un-backdrop-hue-rotate,) var(--un-backdrop-invert,) var(--un-backdrop-opacity,) var(--un-backdrop-saturate,) var(--un-backdrop-sepia,);backdrop-filter:var(--un-backdrop-blur,) var(--un-backdrop-brightness,) var(--un-backdrop-contrast,) var(--un-backdrop-grayscale,) var(--un-backdrop-hue-rotate,) var(--un-backdrop-invert,) var(--un-backdrop-opacity,) var(--un-backdrop-saturate,) var(--un-backdrop-sepia,);}
836
+ .blur{--un-blur:blur(8px);filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,);}
837
+ .drop-shadow-picker-cursor{--un-drop-shadow:drop-shadow(var(--drop-shadow-picker-cursor));filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,);}
838
+ .filter{filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,);}
839
+ .table{display:table;}
840
+ .border-collapse{border-collapse:collapse;}
841
+ .touch-none{touch-action:none;}
842
+ .tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal,) var(--un-slashed-zero,) var(--un-numeric-figure,) var(--un-numeric-spacing,) var(--un-numeric-fraction,);}
843
+ .text-title{font-size:var(--text-title);line-height:var(--leading-title);}
844
+ .text-title-compact{font-size:var(--text-title-compact);line-height:var(--leading-title);}
845
+ .text-subtitle{font-size:var(--text-subtitle);line-height:var(--leading-subtitle);}
846
+ .text-subtitle-compact{font-size:var(--text-subtitle-compact);line-height:var(--leading-subtitle);}
847
+ .text-body{font-size:var(--text-body);line-height:var(--leading-body);}
848
+ .text-body-compact{font-size:var(--text-body-compact);line-height:var(--leading-body);}
849
+ .text-caption{font-size:var(--text-caption);line-height:var(--leading-caption);}
850
+ .\[\&_button\]\:text-caption-compact button,
851
+ .text-caption-compact{font-size:var(--text-caption-compact);line-height:var(--leading-caption);}
852
+ .text-micro{font-size:var(--text-micro);line-height:var(--leading-micro);}
853
+ .text-micro-compact{font-size:var(--text-micro-compact);line-height:var(--leading-micro);}
854
+ .weight-normal{font-variation-settings:var(--weight-normal);}
855
+ .weight-medium{font-variation-settings:var(--weight-medium);}
856
+ .weight-semibold{font-variation-settings:var(--weight-semibold);}
857
+ .weight-bold{font-variation-settings:var(--weight-bold);}
858
+ .\[\&_svg\]\:duration-fast svg,
859
+ .duration-fast{--un-duration:var(--duration-fast);transition-duration:var(--duration-fast);}
860
+ .after\:duration-fast::after{--un-duration:var(--duration-fast);transition-duration:var(--duration-fast);}
861
+ .data-\[hovering\]\:duration-moderate[data-hovering],
862
+ .data-\[scrolling\]\:duration-moderate[data-scrolling],
863
+ .duration-moderate{--un-duration:var(--duration-moderate);transition-duration:var(--duration-moderate);}
864
+ .delay-moderate{transition-delay:var(--duration-moderate);}
865
+ .duration-moderate-exit{--un-duration:var(--duration-moderate-exit);transition-duration:var(--duration-moderate-exit);}
866
+ .duration-slow{--un-duration:var(--duration-slow);transition-duration:var(--duration-slow);}
867
+ .rounded-box{border-radius:var(--radius-box);}
868
+ .rounded-glyph{border-radius:var(--radius-glyph);}
869
+ .group-data-\[active\]\/field\:stroke-\[2\]{
870
+ &:is(:where(.group\/field)[data-active] *){stroke-width:2;}
871
+ }
872
+ .group-data-\[active\]\/field\:text-foreground{
873
+ &:is(:where(.group\/field)[data-active] *){color:color-mix(in srgb, var(--foreground) var(--un-text-opacity), transparent);}
874
+ }
875
+ .has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]{
876
+ &:has(*[data-slot=card-action]){grid-template-columns:1fr auto;}
877
+ }
878
+ .peer-data-\[variant\=inset\]\:bg-surface-2{
879
+ &:is(:where(.peer)[data-variant=inset] ~ *){background-color:color-mix(in srgb, var(--surface-2) var(--un-bg-opacity), transparent);}
880
+ }
881
+ .peer-data-\[variant\=inset\]\:m-2{
882
+ &:is(:where(.peer)[data-variant=inset] ~ *){margin:calc(var(--spacing) * 2);}
883
+ }
884
+ .peer-data-\[variant\=inset\]\:peer-data-\[side\=left\]\:ml-0{&:is(:where(.peer)[data-side=left] ~ *){
885
+ &:is(:where(.peer)[data-variant=inset] ~ *){margin-left:calc(var(--spacing) * 0);}
886
+ }}
887
+ .peer-data-\[variant\=inset\]\:peer-data-\[side\=right\]\:mr-0{&:is(:where(.peer)[data-side=right] ~ *){
888
+ &:is(:where(.peer)[data-variant=inset] ~ *){margin-right:calc(var(--spacing) * 0);}
889
+ }}
890
+ .peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:peer-data-\[side\=left\]\:ml-2{&:is(:where(.peer)[data-side=left] ~ *){&:is(:where(.peer)[data-state=collapsed] ~ *){
891
+ &:is(:where(.peer)[data-variant=inset] ~ *){margin-left:calc(var(--spacing) * 2);}
892
+ }}}
893
+ .peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:peer-data-\[side\=right\]\:mr-2{&:is(:where(.peer)[data-side=right] ~ *){&:is(:where(.peer)[data-state=collapsed] ~ *){
894
+ &:is(:where(.peer)[data-variant=inset] ~ *){margin-right:calc(var(--spacing) * 2);}
895
+ }}}
896
+ .peer-data-\[variant\=inset\]\:rounded-3xl{
897
+ &:is(:where(.peer)[data-variant=inset] ~ *){border-radius:var(--radius-3xl);}
898
+ }
899
+ .peer-data-\[variant\=inset\]\:rounded-xl{
900
+ &:is(:where(.peer)[data-variant=inset] ~ *){border-radius:var(--radius-xl);}
901
+ }
902
+ .peer-data-\[variant\=inset\]\:shadow-surface-2{
903
+ &:is(:where(.peer)[data-variant=inset] ~ *){--un-shadow:var(--shadow-2);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
904
+ }
905
+ @media (prefers-reduced-motion: reduce){
906
+ .motion-reduce\:transition-none{transition:none;}
907
+ }
908
+ @supports (text-box:trim-both){
909
+ .supports-\[text-box\:trim-both\]\:py-2{padding-block:calc(var(--spacing) * 2);}
910
+ }
911
+ @media (max-width: calc(80rem - 0.1px)){
912
+ .max-xl\:opacity-0{opacity:0%;}
913
+ .max-xl\:hidden{display:none;}
914
+ .max-xl\:duration-moderate{--un-duration:var(--duration-moderate);transition-duration:var(--duration-moderate);}
915
+ }
916
+ @media (max-width: calc(64rem - 0.1px)){
917
+ .max-lg\:opacity-0{opacity:0%;}
918
+ .max-lg\:hidden{display:none;}
919
+ .max-lg\:duration-moderate{--un-duration:var(--duration-moderate);transition-duration:var(--duration-moderate);}
920
+ }
921
+ @media (max-width: calc(48rem - 0.1px)){
922
+ .max-md\:opacity-0{opacity:0%;}
923
+ .max-md\:hidden{display:none;}
924
+ .max-md\:duration-moderate{--un-duration:var(--duration-moderate);transition-duration:var(--duration-moderate);}
925
+ }
926
+ @media (max-width: calc(40rem - 0.1px)){
927
+ .max-sm\:opacity-0{opacity:0%;}
928
+ .max-sm\:hidden{display:none;}
929
+ .max-sm\:duration-moderate{--un-duration:var(--duration-moderate);transition-duration:var(--duration-moderate);}
930
+ }
931
+ @media (min-width: 40rem){
932
+ .sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr));}
933
+ .sm\:duration-slow{--un-duration:var(--duration-slow);transition-duration:var(--duration-slow);}
934
+ }
935
+ @starting-style{@media (min-width: 40rem){
936
+ .sm\:starting\:opacity-0{opacity:0%;}
937
+ }}
938
+ @media (min-width: 48rem){
939
+ .md\:duration-slow{--un-duration:var(--duration-slow);transition-duration:var(--duration-slow);}
940
+ }
941
+ @starting-style{@media (min-width: 48rem){
942
+ .md\:starting\:opacity-0{opacity:0%;}
943
+ }}
944
+ @media (min-width: 64rem){
945
+ .lg\:duration-slow{--un-duration:var(--duration-slow);transition-duration:var(--duration-slow);}
946
+ }
947
+ @starting-style{@media (min-width: 64rem){
948
+ .lg\:starting\:opacity-0{opacity:0%;}
949
+ }}
950
+ @media (min-width: 80rem){
951
+ .xl\:duration-slow{--un-duration:var(--duration-slow);transition-duration:var(--duration-slow);}
952
+ }
953
+ @starting-style{@media (min-width: 80rem){
954
+ .xl\:starting\:opacity-0{opacity:0%;}
955
+ }}
956
+ }
957
+ /*
958
+ * Fluid Functionalism color tokens.
959
+ *
960
+ * Source: mickadesign/fluid-functionalism `app/globals.css` §1 (DESIGN TOKENS)
961
+ * at commit b3587bdbd83fc66c2a6aae3817ffb856cb09260b — MIT License
962
+ * © 2026 Micka Touillaud — fluidfunctionalism.com.
963
+ *
964
+ * Migration from upstream: every HEX literal was converted to its exact oklch
965
+ * equivalent (sRGB → OKLab, round-trip verified to the original hex). The
966
+ * rgb()/rgba() alpha overlays (--overlay, --hover, --active, --shadow-color,
967
+ * --dm-*) are kept as-is — they are alpha contracts, not palette colors.
968
+ *
969
+ * Every color token is written ONCE, as light-dark(light, dark). Which side
970
+ * renders is driven by `color-scheme` (set in base.css): :root follows the
971
+ * OS, and a `.light` or `.dark` class pins it. The block is declared on
972
+ * `:root, .light, .dark` — not just `:root` — because light-dark() inside a
973
+ * custom property resolves against the color-scheme of the element the
974
+ * property is declared on, so a forced-scope subtree becomes its own
975
+ * resolution point.
976
+ *
977
+ * The surface ladder and its shadow recipes live with their primitive in
978
+ * primitives/surface/surface.css. The one token that cannot ride
979
+ * light-dark() here — the --overlay RGB triplet (consumed as
980
+ * rgb(var(--overlay) / α), an alpha contract) — is re-pointed per scheme in
981
+ * base.css.
982
+ */
983
+
984
+ :root,
985
+ .light,
986
+ .dark {
987
+ /* The surface ladder (--surface-1..8) and the shadow recipes pair with it
988
+ in primitives/surface/surface.css. */
989
+
990
+ /* ── Semantic tokens ── */
991
+ /* Same color as --surface-1, inlined so the global token set never
992
+ depends on the surface primitive's CSS being loaded. */
993
+ --background: light-dark(oklch(0.985 0 0), oklch(0.205 0 0));
994
+ --foreground: light-dark(oklch(0.205 0 0), oklch(0.97 0 0));
995
+ /* Same color as --surface-3, inlined for the same reason. */
996
+ --card: light-dark(oklch(1 0 0), oklch(0.264 0 0));
997
+ --card-foreground: light-dark(oklch(0.205 0 0), oklch(0.97 0 0));
998
+ /* Light `muted` decouples from surface-2: the light surface ladder is so
999
+ compressed that a ladder value would read as near-white, making anything
1000
+ sitting on it blend together. A slightly greyer value gives muted real
1001
+ semantic presence. Dark keeps the ladder value (= surface-2). */
1002
+ --muted: light-dark(oklch(0.967 0.001 286.375), oklch(0.235 0 0));
1003
+ --muted-foreground: light-dark(oklch(0.556 0 0), oklch(0.7155 0 0));
1004
+
1005
+ /* ── Interactive states ── */
1006
+ --accent: light-dark(oklch(0.922 0 0), oklch(0.439 0 0));
1007
+ --accent-foreground: light-dark(oklch(0.205 0 0), oklch(0.97 0 0));
1008
+ /* --accent nudged toward the overlay direction (the switch track's hover). */
1009
+ --accent-hover: color-mix(in oklab, var(--accent), rgb(var(--overlay)) 10%);
1010
+ --selected: light-dark(oklch(0.87 0 0), oklch(0.439 0 0));
1011
+
1012
+ /* ── Borders ──
1013
+ --border mixes from --foreground, so it tracks the theme automatically —
1014
+ including inside nested forced scopes, where light-dark() re-resolves
1015
+ --foreground before the mix happens. */
1016
+ --border: color-mix(in oklab, var(--foreground) 12%, transparent);
1017
+ --ring: light-dark(oklch(0.922 0 0), oklch(0.371 0 0));
1018
+ --input: light-dark(oklch(0.922 0 0), oklch(0.371 0 0));
1019
+
1020
+ /* ── Error / Destructive ── */
1021
+ --destructive: light-dark(oklch(0.6368 0.2078 25.33), oklch(0.7106 0.1661 22.22));
1022
+ --destructive-light: light-dark(oklch(0.971 0.013 17.38), oklch(0.2575 0.0886 26.04));
1023
+
1024
+ /* ── Brand blue ──
1025
+ FF's one chromatic accent: the switch's on-track, the copy field's hover
1026
+ highlight, drop-target and selected-swatch rings. */
1027
+ --brand: oklch(0.693 0.16 265);
1028
+ --brand-hover: oklch(0.649 0.164 264.76);
1029
+
1030
+ /* ── Focus indicator ──
1031
+ Every component focus ring reads it (`ring-focus-ring`,
1032
+ `border-focus-ring`), so this is the single theming point. */
1033
+ --focus-ring: var(--brand);
1034
+
1035
+ /* ── Alpha checkerboard (color-picker swatches) ── */
1036
+ --checker-a: light-dark(oklch(0.792 0 0), oklch(0.239 0 0));
1037
+ --checker-b: light-dark(oklch(1 0 0), oklch(0.285 0 0));
1038
+ /* Swatch edges: a mid-grey hairline that reads on any swatch color in
1039
+ either scheme, plus the hover / selected rings, set off by a
1040
+ --background gap. */
1041
+ --swatch-edge: rgb(127 127 127 / 0.25);
1042
+ --swatch-edge-hover: rgb(127 127 127 / 0.4);
1043
+ --shadow-swatch: inset 0 0 0 1px var(--swatch-edge);
1044
+ --shadow-swatch-hover: var(--shadow-swatch), 0 0 0 2px var(--background), 0 0 0 4px var(--swatch-edge-hover);
1045
+ --shadow-swatch-selected: var(--shadow-swatch), 0 0 0 2px var(--background), 0 0 0 4px var(--brand);
1046
+
1047
+ /* ── Thumbs (switch, slider) ──
1048
+ White in both schemes, set off by a soft drop. */
1049
+ --thumb: oklch(1 0 0);
1050
+ --shadow-thumb: 0 1px 2px rgb(0 0 0 / 0.1);
1051
+
1052
+ /* ── Color picker affordances ──
1053
+ Drawn over any user color, so fixed white and black rather than theme
1054
+ colors: they have to read on every fill, in either scheme. */
1055
+ --picker-edge: oklch(0 0 0);
1056
+ --picker-ring: oklch(1 0 0 / 0.55);
1057
+ --picker-thumb-border: oklch(1 0 0 / 0.9);
1058
+ --shadow-picker-thumb: 0 0 0 1px var(--picker-edge);
1059
+ --shadow-picker-cursor: 0 0 0 1px oklch(0 0 0 / 0.2);
1060
+ --drop-shadow-picker-cursor: 0 1px 1px oklch(0 0 0 / 0.4);
1061
+
1062
+ /* ── Controls ──
1063
+ An unchecked checkbox or radio takes a stronger edge than --border;
1064
+ a modal dialog dims the page behind it with the scrim. */
1065
+ --control-border: light-dark(oklch(0.708 0 0), oklch(0.556 0 0));
1066
+ --scrim: light-dark(oklch(0 0 0 / 0.4), oklch(0 0 0 / 0.8));
1067
+
1068
+ /* ── Surface-relative interactive overlays (work on any elevation) ──
1069
+ --overlay is the tint-direction triplet — black for light surfaces,
1070
+ white for dark. Components consume it as rgb(var(--overlay) / α), so it
1071
+ stays an RGB triplet and switches per theme in base.css. --hover and
1072
+ --active are the pre-mixed conveniences. */
1073
+ --overlay: 0 0 0;
1074
+ --hover: light-dark(rgb(0 0 0 / 0.04), rgb(255 255 255 / 0.06));
1075
+ --active: light-dark(rgb(0 0 0 / 0.07), rgb(255 255 255 / 0.1));
1076
+
1077
+ /* ── Syntax (primitives/code) ──
1078
+ Low-chroma hues so code reads as text first; identifiers, JSX text and
1079
+ punctuation ride the existing foreground pair. */
1080
+ --syntax-keyword: light-dark(oklch(0.52 0.16 300), oklch(0.76 0.12 300));
1081
+ --syntax-string: light-dark(oklch(0.52 0.12 150), oklch(0.79 0.11 150));
1082
+ --syntax-class: light-dark(oklch(0.56 0.12 65), oklch(0.81 0.1 75));
1083
+ --syntax-entity: light-dark(oklch(0.52 0.15 255), oklch(0.77 0.11 250));
1084
+ --syntax-property: light-dark(oklch(0.52 0.1 205), oklch(0.79 0.08 200));
1085
+ --syntax-comment: light-dark(oklch(0.62 0 0), oklch(0.56 0 0));
1086
+ --syntax-identifier: var(--foreground);
1087
+ --syntax-jsx: var(--foreground);
1088
+ --syntax-sign: var(--muted-foreground);
1089
+ }
1090
+
1091
+ /* ── Badge palette ──
1092
+ Badge's `color` hues (upstream hex, as exact oklch). Constant across
1093
+ schemes; the solid variant mixes each 15% into --background. */
1094
+ :root {
1095
+ --badge-gray: oklch(0.715 0 0);
1096
+ --badge-red: oklch(0.637 0.208 25.33);
1097
+ --badge-orange: oklch(0.7049 0.1867 47.6);
1098
+ --badge-amber: oklch(0.7686 0.1647 70.08);
1099
+ --badge-yellow: oklch(0.7952 0.1617 86.05);
1100
+ --badge-lime: oklch(0.7681 0.2044 130.85);
1101
+ --badge-green: oklch(0.723 0.192 149.58);
1102
+ --badge-emerald: oklch(0.6959 0.1491 162.48);
1103
+ --badge-teal: oklch(0.704 0.123 182.5);
1104
+ --badge-cyan: oklch(0.7148 0.1257 215.22);
1105
+ --badge-blue: oklch(0.623 0.188 259.81);
1106
+ --badge-indigo: oklch(0.585 0.204 277.12);
1107
+ --badge-violet: oklch(0.606 0.219 292.72);
1108
+ --badge-purple: oklch(0.627 0.233 303.9);
1109
+ --badge-fuchsia: oklch(0.667 0.259 322.15);
1110
+ --badge-pink: oklch(0.656 0.212 354.31);
1111
+ --badge-rose: oklch(0.645 0.215 16.44);
1112
+ }
1113
+
1114
+ /* ── Status roles ──
1115
+ The toast states, picked from the badge palette (and --destructive /
1116
+ --brand) by reference, so a status reads the same wherever it shows. */
1117
+ :root {
1118
+ --status-success: var(--badge-green);
1119
+ --status-loading: var(--badge-gray);
1120
+ --status-error: var(--destructive);
1121
+ --status-warning: var(--badge-amber);
1122
+ --status-info: var(--badge-blue);
1123
+ --status-action: var(--brand);
1124
+ }
1125
+
1126
+ /*
1127
+ * Fluid Functionalism motion tokens.
1128
+ *
1129
+ * Source: mickadesign/fluid-functionalism `registry/default/lib/springs.ts`
1130
+ * at commit b3587bdbd83fc66c2a6aae3817ffb856cb09260b — MIT License © 2026
1131
+ * Micka Touillaud — fluidfunctionalism.com.
1132
+ *
1133
+ * FF's motion is JS: the `spring` tiers in lib/springs.ts feed
1134
+ * `motion/react`, and components always reach for a tier rather than a
1135
+ * hand-written duration. These properties mirror those tiers for CSS
1136
+ * consumers and for the tokens page — keep the two in sync.
1137
+ *
1138
+ * Each tier's enter transition is a spring of the given duration; its exit is
1139
+ * a plain tween one step quicker, so a dismissal reads as crisp and final.
1140
+ * fast 80ms enter, 60ms exit — critically damped (bounce 0)
1141
+ * moderate 160ms enter, 120ms exit — critically damped (bounce 0): panels,
1142
+ * dropdowns, tabs, merged selection backgrounds
1143
+ * slow 240ms enter, 160ms exit — the one tier with a little bounce
1144
+ * (bounce 0.12)
1145
+ * The bigger the thing that moves, the slower the tier.
1146
+ *
1147
+ * Local addition: `goo`, the morph engine's tier for the goo effect — 250ms
1148
+ * to land (bounce 0.15), a 200ms spring back — so the liquid neck reads.
1149
+ */
1150
+
1151
+ :root {
1152
+ --duration-fast: 80ms;
1153
+ --duration-fast-exit: 60ms;
1154
+ --duration-moderate: 160ms;
1155
+ --duration-moderate-exit: 120ms;
1156
+ --duration-slow: 240ms;
1157
+ --duration-slow-exit: 160ms;
1158
+ --duration-goo: 250ms;
1159
+ --duration-goo-exit: 200ms;
1160
+ }
1161
+
1162
+ :root {
1163
+ /* Fluid Functionalism's corner token (upstream tokens/radius.css). */
1164
+ --radius: 0.625rem;
1165
+
1166
+ /* Small-box corners between wind4's xs (2px) and md (6px) steps, read by
1167
+ the `rounded-box|glyph` utility in preset.ts: checkbox squares and
1168
+ keycaps, and the composer's stop glyph. */
1169
+ --radius-box: 5px;
1170
+ --radius-glyph: 3px;
1171
+ }
1172
+
1173
+ :root {
1174
+ /* The docs chrome's spacing rhythm (AGENTS.md generic tokens). */
1175
+ --space-1: 4px;
1176
+ --space-2: 8px;
1177
+ --space-3: 12px;
1178
+ --space-4: 16px;
1179
+ --space-5: 24px;
1180
+ --space-6: 32px;
1181
+ }
1182
+
1183
+ /*
1184
+ * Fluid Functionalism type tokens.
1185
+ *
1186
+ * Source: mickadesign/fluid-functionalism `app/globals.css` §3–4 (`--font-sans`,
1187
+ * the `--fs-*` type-scale roles and their `@utility text-*` classes) at commit
1188
+ * b3587bdbd83fc66c2a6aae3817ffb856cb09260b — MIT License © 2026 Micka
1189
+ * Touillaud — fluidfunctionalism.com.
1190
+ *
1191
+ * Local changes:
1192
+ * - The family is Inter Variable from @fontsource-variable/inter/opsz
1193
+ * (imported in base.css) instead of upstream's self-hosted
1194
+ * InterVariable.ttf. The opsz build matters: the `--weight-*` ladder sets
1195
+ * both the wght and opsz axes.
1196
+ * - The role sizes are renamed `--fs-*` → `--text-*` and read by the
1197
+ * `text-<role>[-compact]` utility in preset.ts. They hold both columns of
1198
+ * `typeScale` in lib/size-context.tsx (keep the two in sync), so a
1199
+ * component's `compact ? … : …` picks a token on either side. Upstream's
1200
+ * site-chrome extras — the 22px mobile display step and the
1201
+ * `html[data-size="compact"]` override set by the docs site's
1202
+ * SizeAttribute — are not carried over.
1203
+ * - `micro` (keycaps, one notch below caption) is a local role.
1204
+ * - Each role's line-height (FF's typography page: 28/34, 16/22, 14/20,
1205
+ * 13/20, 12/16) is a `--leading-*` token, emitted by the same
1206
+ * `text-<role>` rule; the compact step keeps its role's leading.
1207
+ * - The docs chrome's element roles (`--font-size-<el>`, `--line-height-<el>`,
1208
+ * `--font-weight-<el>`, `--color-<el>`) reference these, following FF's
1209
+ * rules: headings in foreground, text muted.
1210
+ * - Upstream's `fontWeights` (lib/font-weight.ts, fontVariationSettings
1211
+ * strings) become the `--weight-*` variation settings, read by the
1212
+ * `weight-*` utility in preset.ts. Each derives its wght from
1213
+ * `--font-weight-*`, the plain font-weight form the docs chrome reads.
1214
+ */
1215
+
1216
+ :root {
1217
+ --font-sans: "Inter Variable", ui-sans-serif, system-ui, sans-serif;
1218
+ --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
1219
+
1220
+ /* Page titles. */
1221
+ --text-display: 28px;
1222
+ /* Section headings, dialog titles. */
1223
+ --text-title: 16px;
1224
+ /* Card titles, emphasized rows. */
1225
+ --text-subtitle: 14px;
1226
+ /* Control labels and body copy. */
1227
+ --text-body: 13px;
1228
+ /* Secondary text: descriptions, meta rows, errors, group labels. */
1229
+ --text-caption: 12px;
1230
+ /* Keycaps and chips. */
1231
+ --text-micro: 11px;
1232
+
1233
+ /* Each role's paired line-height. */
1234
+ --leading-display: 34px;
1235
+ --leading-title: 22px;
1236
+ --leading-subtitle: 20px;
1237
+ --leading-body: 20px;
1238
+ --leading-caption: 16px;
1239
+ --leading-micro: 14px;
1240
+
1241
+ /* The compact step: each role one notch down. */
1242
+ --text-display-compact: 24px;
1243
+ --text-title-compact: 15px;
1244
+ --text-subtitle-compact: 13px;
1245
+ --text-body-compact: 12px;
1246
+ --text-caption-compact: 11px;
1247
+ --text-micro-compact: 10px;
1248
+
1249
+ /* Inter variable weights, each paired with the opsz that keeps a label's
1250
+ advance width steady as it changes weight. */
1251
+ --font-weight-normal: 400;
1252
+ --font-weight-medium: 450;
1253
+ --font-weight-semibold: 550;
1254
+ --font-weight-bold: 700;
1255
+ --weight-normal: "wght" var(--font-weight-normal), "opsz" 14;
1256
+ --weight-medium: "wght" var(--font-weight-medium), "opsz" 15;
1257
+ --weight-semibold: "wght" var(--font-weight-semibold), "opsz" 18;
1258
+ --weight-bold: "wght" var(--font-weight-bold), "opsz" 25;
1259
+
1260
+ /* The docs chrome's elements (modo's type contract), on the roles above. */
1261
+ --font-size-h1: var(--text-display);
1262
+ --line-height-h1: var(--leading-display);
1263
+ --font-weight-h1: var(--font-weight-bold);
1264
+ --color-h1: var(--foreground);
1265
+
1266
+ --font-size-h2: var(--text-title);
1267
+ --line-height-h2: var(--leading-title);
1268
+ --font-weight-h2: var(--font-weight-semibold);
1269
+ --color-h2: var(--foreground);
1270
+
1271
+ --font-size-h3: var(--text-subtitle);
1272
+ --line-height-h3: var(--leading-subtitle);
1273
+ --font-weight-h3: var(--font-weight-semibold);
1274
+ --color-h3: var(--foreground);
1275
+
1276
+ --font-size-h4: var(--text-body);
1277
+ --line-height-h4: var(--leading-body);
1278
+ --font-weight-h4: var(--font-weight-semibold);
1279
+ --color-h4: var(--foreground);
1280
+
1281
+ --font-size-p: var(--text-body);
1282
+ --line-height-p: var(--leading-body);
1283
+ --font-weight-p: var(--font-weight-normal);
1284
+ --color-p: var(--muted-foreground);
1285
+
1286
+ --font-size-lead: var(--text-body);
1287
+ --line-height-lead: var(--leading-body);
1288
+ --font-weight-lead: var(--font-weight-normal);
1289
+ --color-lead: var(--muted-foreground);
1290
+
1291
+ --font-size-eyebrow: var(--text-caption);
1292
+ --line-height-eyebrow: var(--leading-caption);
1293
+ --font-weight-eyebrow: var(--font-weight-medium);
1294
+ --color-eyebrow: var(--muted-foreground);
1295
+
1296
+ --font-size-sm: var(--text-caption);
1297
+ --line-height-sm: var(--leading-caption);
1298
+
1299
+ --font-size-xs: var(--text-micro);
1300
+ --line-height-xs: var(--leading-micro);
1301
+ }
1302
+
1303
+ /* biome-ignore-all lint: vendored upstream code keeps its own values (see the header) */
1304
+ /*
1305
+ * UI theme plumbing and base styles.
1306
+ *
1307
+ * Source: mickadesign/fluid-functionalism `app/globals.css` at commit
1308
+ * b3587bdbd83fc66c2a6aae3817ffb856cb09260b — MIT License © 2026 Micka
1309
+ * Touillaud — fluidfunctionalism.com. Translated from Tailwind v4 CSS to
1310
+ * plain CSS for UnoCSS (uno.config.ts); vite.ts injects the UnoCSS
1311
+ * stylesheet ahead of this file. The docs site imports it from global.css;
1312
+ * the package ships it inside dist/base.css and dist/styles.css.
1313
+ *
1314
+ * Where upstream's sections went:
1315
+ * - §1 design tokens → tokens/colors.css; the surface ladder and shadow
1316
+ * recipes → primitives/surface/surface.css. All HEX migrated to oklch.
1317
+ * - §2 theme switching → the color-scheme / --overlay block below (the
1318
+ * shadow re-pointing lives in surface.css).
1319
+ * - §3 `@theme inline` → preset.ts `theme`; the `--fs-*` roles and
1320
+ * `@utility text-*` → tokens/typography.css (`--text-*`) + preset.ts
1321
+ * `utilities`.
1322
+ * - §4–6 → below: html/body base, `@layer base` (text wrap, inline code chip,
1323
+ * :focus-visible fallback), html.transitioning, native scrollbars,
1324
+ * .scrollbar-hide, shimmer + spinner keyframes, .scroll-fade(-x).
1325
+ *
1326
+ * Local value changes: the inline code chip and the shimmer stops read color
1327
+ * tokens instead of upstream's hex (light code chip `--muted`, dark
1328
+ * `--surface-4`; shimmer dim → bright runs `--muted-foreground` →
1329
+ * `--foreground` in light and `--accent` → `--muted-foreground` in dark).
1330
+ *
1331
+ * Dropped: the Tailwind directives (`@import "tailwindcss"`,
1332
+ * `@custom-variant`), the self-hosted Inter @font-face (replaced by
1333
+ * @fontsource-variable/inter/opsz), the Radix-only scroll-lock margin fix
1334
+ * (`body[data-scroll-locked]`), the reserved shadcn-compare colors, and the
1335
+ * docs-site-only CSS (.xl-fade-*, .inview-fade-block, .scroll-divider — only
1336
+ * the omitted Sidebar uses it — .bento-*, .shiki).
1337
+ *
1338
+ * Layers: UnoCSS (`outputToCssLayers`) declares `@layer properties, theme,
1339
+ * base, default` first, and its reset lives in `base`. The `@layer base`
1340
+ * rules here join that layer after the reset, so the reset loses to them and
1341
+ * every utility (`default`) still wins — the same arrangement as Tailwind's
1342
+ * base/utilities layers upstream.
1343
+ *
1344
+ * The switch blocks double their class selector (.light.light / .dark.dark)
1345
+ * because user CSS is injected BEFORE tokens/*.css and item CSS — the
1346
+ * doubled selector (0,2,0) must out-specify the shared `:root, .light,
1347
+ * .dark` token blocks (0,1,0) so the re-pointed values win regardless of
1348
+ * stylesheet order.
1349
+ */
1350
+
1351
+
1352
+ /* ── Theme switching (upstream §2) ──
1353
+ `color-scheme` is what flips every light-dark() token; the classes work on
1354
+ <html> (vite.ts puts the stored preference there, or the OS one under
1355
+ 'system') and on any subtree (forced-theme previews). The only value that can't ride light-dark() here
1356
+ is the --overlay RGB triplet, consumed as rgb(var(--overlay) / α). */
1357
+
1358
+ :root {
1359
+ color-scheme: light dark;
1360
+ }
1361
+
1362
+ @media (prefers-color-scheme: dark) {
1363
+ :root:not(.light) {
1364
+ --overlay: 255 255 255;
1365
+ }
1366
+ }
1367
+
1368
+ .light.light {
1369
+ color-scheme: light;
1370
+ --overlay: 0 0 0;
1371
+ }
1372
+
1373
+ .dark.dark {
1374
+ color-scheme: dark;
1375
+ --overlay: 255 255 255;
1376
+ }
1377
+
1378
+ /* ── Base styles (upstream §4) ── */
1379
+
1380
+ /* No explicit overflow here: scrollbar-gutter applies to the viewport when
1381
+ set on the root, and an explicit `overflow-y: auto` would stop dialog
1382
+ scroll locks (`body { overflow: hidden }`) from propagating to the
1383
+ viewport. */
1384
+ html {
1385
+ scrollbar-gutter: stable;
1386
+ }
1387
+
1388
+ html,
1389
+ body {
1390
+ margin: 0;
1391
+ min-height: 100vh;
1392
+ overscroll-behavior-y: none;
1393
+ background-color: var(--background);
1394
+ /* Explicit text color so unstyled text follows the theme (and so the UA's
1395
+ color-scheme-driven canvastext default never shows through). */
1396
+ color: var(--foreground);
1397
+ font-family: var(--font-sans);
1398
+ /* Inherited by everything (portals included) — a `subpixel-antialiased`
1399
+ utility on a subtree is the only way to opt back out. */
1400
+ -webkit-font-smoothing: antialiased;
1401
+ -moz-osx-font-smoothing: grayscale;
1402
+ }
1403
+
1404
+ /* @layer base so a utility can still win: unlayered, these outrank
1405
+ `truncate` on the text-wrap-mode longhand (white-space is a shorthand for
1406
+ white-space-collapse + text-wrap-mode), which silently un-truncates every
1407
+ <p> that asks for it. */
1408
+ @layer base {
1409
+ h1,
1410
+ h2,
1411
+ h3 {
1412
+ text-wrap: balance;
1413
+ }
1414
+
1415
+ p {
1416
+ text-wrap: pretty;
1417
+ }
1418
+
1419
+ /* Inline code chips: bare <code> in prose gets its own ground. Excludes
1420
+ code inside <pre>. Base layer, so a page can still override with
1421
+ utilities. */
1422
+ code:not(pre code) {
1423
+ background: light-dark(var(--muted), var(--surface-4));
1424
+ border-radius: 4px;
1425
+ padding: 1px 4px;
1426
+ font-size: var(--text-caption, 12px);
1427
+ color: var(--foreground, inherit);
1428
+ }
1429
+ }
1430
+
1431
+ /* Theme-toggle cross-fade: ShapeProvider (and any theme switcher) adds
1432
+ `.transitioning` around a class swap so colors and corners tween instead of
1433
+ snapping. */
1434
+ html.transitioning *,
1435
+ html.transitioning *::before,
1436
+ html.transitioning *::after {
1437
+ transition:
1438
+ border-radius 180ms ease-in-out,
1439
+ background-color 180ms ease-in-out,
1440
+ color 180ms ease-in-out,
1441
+ border-color 180ms ease-in-out,
1442
+ fill 180ms ease-in-out,
1443
+ stroke 180ms ease-in-out !important;
1444
+ }
1445
+
1446
+ /* Focus fallback — natively focusable elements no component styles (scroll
1447
+ containers Chrome makes tabbable, prose links, demo boxes) get the same
1448
+ token ring as the components instead of the UA default. Lives in
1449
+ @layer base so `outline-none` (a utility) still wins — components that
1450
+ draw their own ring aren't double-ringed. The radius rides
1451
+ --shape-input-radius (published by ShapeProvider); 8px = the rounded-mode
1452
+ default. */
1453
+ @layer base {
1454
+ :focus-visible {
1455
+ outline: 1px solid var(--focus-ring);
1456
+ outline-offset: 2px;
1457
+ border-radius: var(--shape-input-radius, 8px);
1458
+ }
1459
+
1460
+ /* Prose links are inline text boxes — the shape-system radius reads
1461
+ pill-ish at text height, so their ring takes a tight 2px corner. */
1462
+ a:focus-visible {
1463
+ border-radius: 2px;
1464
+ }
1465
+ }
1466
+
1467
+ /* ── Native scrollbar theme (upstream §5) ──
1468
+ Matches the ScrollArea thumb language (narrow, low-contrast, darkens on
1469
+ hover) so surfaces that fall back to native scrollbars stay consistent
1470
+ with the custom scrollbar. Rides the surface-relative overlay ramp (rest
1471
+ 8%, hover 12%, drag 16%) — adapts to dark mode through --overlay. Only on
1472
+ fine pointers; touch devices keep their overlay momentum bars. Chromium
1473
+ 121+ renders scrollbar-color and ignores the ::-webkit-* block, so both
1474
+ ramps must stay in sync. */
1475
+
1476
+ @media (pointer: fine) {
1477
+ * {
1478
+ scrollbar-width: thin;
1479
+ scrollbar-color: rgb(var(--overlay) / 0.08) transparent;
1480
+ }
1481
+
1482
+ ::-webkit-scrollbar {
1483
+ width: 10px;
1484
+ height: 10px;
1485
+ }
1486
+
1487
+ ::-webkit-scrollbar-track,
1488
+ ::-webkit-scrollbar-corner {
1489
+ background: transparent;
1490
+ }
1491
+
1492
+ ::-webkit-scrollbar-thumb {
1493
+ /* Transparent borders + content-box clip leave a ~4px visible thumb
1494
+ inside the 10px hit area; the asymmetric edge-side border slides it
1495
+ 2px away from the edge, matching the ScrollArea thumb's nudge. */
1496
+ background-color: rgb(var(--overlay) / 0.08);
1497
+ border: 3px solid transparent;
1498
+ background-clip: content-box;
1499
+ border-radius: 9999px;
1500
+ }
1501
+
1502
+ ::-webkit-scrollbar-thumb:vertical {
1503
+ border-left-width: 1px;
1504
+ border-right-width: 5px;
1505
+ }
1506
+
1507
+ ::-webkit-scrollbar-thumb:horizontal {
1508
+ border-top-width: 1px;
1509
+ border-bottom-width: 5px;
1510
+ }
1511
+
1512
+ ::-webkit-scrollbar-thumb:hover {
1513
+ background-color: rgb(var(--overlay) / 0.12);
1514
+ }
1515
+
1516
+ ::-webkit-scrollbar-thumb:active {
1517
+ background-color: rgb(var(--overlay) / 0.16);
1518
+ }
1519
+ }
1520
+
1521
+ .scrollbar-hide {
1522
+ -ms-overflow-style: none;
1523
+ scrollbar-width: none;
1524
+ }
1525
+
1526
+ .scrollbar-hide::-webkit-scrollbar {
1527
+ display: none;
1528
+ }
1529
+
1530
+ /* ── Utilities (upstream §6) ── */
1531
+
1532
+ /* shimmer-text (thinking-indicator) */
1533
+
1534
+ @keyframes shimmer {
1535
+ 0% {
1536
+ background-position: 0% 0;
1537
+ }
1538
+ 100% {
1539
+ background-position: 100% 0;
1540
+ }
1541
+ }
1542
+
1543
+ .shimmer-text {
1544
+ color: transparent;
1545
+ background: linear-gradient(
1546
+ 90deg,
1547
+ light-dark(var(--muted-foreground), var(--accent)) 0%,
1548
+ light-dark(var(--muted-foreground), var(--accent)) 35%,
1549
+ light-dark(var(--foreground), var(--muted-foreground)) 50%,
1550
+ light-dark(var(--muted-foreground), var(--accent)) 65%,
1551
+ light-dark(var(--muted-foreground), var(--accent)) 100%
1552
+ );
1553
+ background-size: 300% 100%;
1554
+ background-clip: text;
1555
+ -webkit-background-clip: text;
1556
+ animation: shimmer 1.5s ease-in-out infinite;
1557
+ }
1558
+
1559
+ /* Spinner keyframes (Button's loading state). */
1560
+
1561
+ @keyframes spinner-move {
1562
+ to {
1563
+ stroke-dashoffset: -100;
1564
+ }
1565
+ }
1566
+
1567
+ @keyframes spinner-dash {
1568
+ 0%,
1569
+ 100% {
1570
+ stroke-dasharray: 15 85;
1571
+ }
1572
+ 50% {
1573
+ stroke-dasharray: 40 60;
1574
+ }
1575
+ }
1576
+
1577
+ /* scroll-fade — vendored equivalent of shadcn's scroll-fade utility. A
1578
+ mask-image dissolves the content toward the edges that have more to
1579
+ scroll. CSS scroll-driven animations make it scroll-aware: the true
1580
+ start/end edge stays crisp until you scroll past it. Browsers without
1581
+ scroll-driven animations fall back to a static fade on both edges. Apply
1582
+ to a scroll container, or to a ScrollArea via `viewportClassName`. */
1583
+
1584
+ @property --sf-start {
1585
+ syntax: "<number>";
1586
+ inherits: false;
1587
+ initial-value: 1;
1588
+ }
1589
+ @property --sf-end {
1590
+ syntax: "<number>";
1591
+ inherits: false;
1592
+ initial-value: 1;
1593
+ }
1594
+
1595
+ @keyframes sf-reveal-start {
1596
+ from {
1597
+ --sf-start: 1;
1598
+ }
1599
+ to {
1600
+ --sf-start: 0;
1601
+ }
1602
+ }
1603
+ @keyframes sf-reveal-end {
1604
+ from {
1605
+ --sf-end: 0;
1606
+ }
1607
+ to {
1608
+ --sf-end: 1;
1609
+ }
1610
+ }
1611
+
1612
+ .scroll-fade,
1613
+ .scroll-fade-x {
1614
+ --scroll-fade-size: 48px;
1615
+ }
1616
+
1617
+ /* Static fallback: fade both edges. */
1618
+ .scroll-fade {
1619
+ -webkit-mask-image: linear-gradient(
1620
+ to bottom,
1621
+ transparent 0,
1622
+ #000 var(--scroll-fade-size),
1623
+ #000 calc(100% - var(--scroll-fade-size)),
1624
+ transparent 100%
1625
+ );
1626
+ mask-image: linear-gradient(
1627
+ to bottom,
1628
+ transparent 0,
1629
+ #000 var(--scroll-fade-size),
1630
+ #000 calc(100% - var(--scroll-fade-size)),
1631
+ transparent 100%
1632
+ );
1633
+ }
1634
+ .scroll-fade-x {
1635
+ -webkit-mask-image: linear-gradient(
1636
+ to right,
1637
+ transparent 0,
1638
+ #000 var(--scroll-fade-size),
1639
+ #000 calc(100% - var(--scroll-fade-size)),
1640
+ transparent 100%
1641
+ );
1642
+ mask-image: linear-gradient(
1643
+ to right,
1644
+ transparent 0,
1645
+ #000 var(--scroll-fade-size),
1646
+ #000 calc(100% - var(--scroll-fade-size)),
1647
+ transparent 100%
1648
+ );
1649
+ }
1650
+
1651
+ /* Scroll-aware: the start/end edge stays solid until there's content past it. */
1652
+ @supports (animation-timeline: scroll()) {
1653
+ .scroll-fade {
1654
+ mask-image: linear-gradient(
1655
+ to bottom,
1656
+ rgba(0, 0, 0, var(--sf-start)) 0,
1657
+ #000 var(--scroll-fade-size),
1658
+ #000 calc(100% - var(--scroll-fade-size)),
1659
+ rgba(0, 0, 0, var(--sf-end)) 100%
1660
+ );
1661
+ -webkit-mask-image: linear-gradient(
1662
+ to bottom,
1663
+ rgba(0, 0, 0, var(--sf-start)) 0,
1664
+ #000 var(--scroll-fade-size),
1665
+ #000 calc(100% - var(--scroll-fade-size)),
1666
+ rgba(0, 0, 0, var(--sf-end)) 100%
1667
+ );
1668
+ animation:
1669
+ sf-reveal-start both linear,
1670
+ sf-reveal-end both linear;
1671
+ animation-timeline: scroll(self), scroll(self);
1672
+ animation-range-start: 0, calc(100% - var(--scroll-fade-size));
1673
+ animation-range-end: var(--scroll-fade-size), 100%;
1674
+ }
1675
+ .scroll-fade-x {
1676
+ mask-image: linear-gradient(
1677
+ to right,
1678
+ rgba(0, 0, 0, var(--sf-start)) 0,
1679
+ #000 var(--scroll-fade-size),
1680
+ #000 calc(100% - var(--scroll-fade-size)),
1681
+ rgba(0, 0, 0, var(--sf-end)) 100%
1682
+ );
1683
+ -webkit-mask-image: linear-gradient(
1684
+ to right,
1685
+ rgba(0, 0, 0, var(--sf-start)) 0,
1686
+ #000 var(--scroll-fade-size),
1687
+ #000 calc(100% - var(--scroll-fade-size)),
1688
+ rgba(0, 0, 0, var(--sf-end)) 100%
1689
+ );
1690
+ animation:
1691
+ sf-reveal-start both linear,
1692
+ sf-reveal-end both linear;
1693
+ animation-timeline: scroll(self inline), scroll(self inline);
1694
+ animation-range-start: 0, calc(100% - var(--scroll-fade-size));
1695
+ animation-range-end: var(--scroll-fade-size), 100%;
1696
+ }
1697
+ }
1698
+
1699
+ /*
1700
+ * Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
1701
+ * `app/globals.css` (`.scroll-divider`) @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
1702
+ * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
1703
+ * Local modifications: none (modo injects this file beside the Sidebar).
1704
+ */
1705
+
1706
+ /* ── scroll-divider — a hairline marking a scroll edge ──────────────────────
1707
+ Pairs with .scroll-fade on a descendant viewport: where the fade dissolves
1708
+ content, this draws the line that says "the region continues". The line
1709
+ can't live inside the scroller — the fade's own mask would erase it at
1710
+ exactly the edge it belongs on — so it rides the parent's pseudo-elements
1711
+ and borrows the scroller's timeline by name. Browsers without scroll-driven
1712
+ timelines simply get the fade, as before. */
1713
+ @keyframes sf-divider-start {
1714
+ from {
1715
+ opacity: 0;
1716
+ }
1717
+ to {
1718
+ opacity: 1;
1719
+ }
1720
+ }
1721
+ @keyframes sf-divider-end {
1722
+ from {
1723
+ opacity: 1;
1724
+ }
1725
+ to {
1726
+ opacity: 0;
1727
+ }
1728
+ }
1729
+
1730
+ @supports (timeline-scope: --sf) {
1731
+ .scroll-divider {
1732
+ position: relative;
1733
+ timeline-scope: --sf-scroller;
1734
+ --scroll-divider-size: 48px;
1735
+ }
1736
+ .scroll-divider .scroll-fade {
1737
+ scroll-timeline-name: --sf-scroller;
1738
+ }
1739
+ .scroll-divider::before,
1740
+ .scroll-divider::after {
1741
+ content: "";
1742
+ position: absolute;
1743
+ /* Inset so the line can hug the content's own gutter rather than the
1744
+ panel edge — the sidebar's inset variant sets this to 8px. */
1745
+ left: var(--scroll-divider-inset, 0px);
1746
+ right: var(--scroll-divider-inset, 0px);
1747
+ height: 1px;
1748
+ background-color: var(--border);
1749
+ pointer-events: none;
1750
+ z-index: 1;
1751
+ opacity: 0;
1752
+ }
1753
+ /* Top edge: absent at rest, fading in as content passes above. */
1754
+ .scroll-divider::before {
1755
+ top: 0;
1756
+ animation: sf-divider-start both linear;
1757
+ animation-timeline: --sf-scroller;
1758
+ animation-range: 0 var(--scroll-divider-size);
1759
+ }
1760
+ /* A region flush with the panel's own top edge has nothing above for
1761
+ content to pass under, so the start line would read as a stray border. */
1762
+ .scroll-divider:first-child::before {
1763
+ content: none;
1764
+ }
1765
+ /* Bottom edge: present while content continues below, gone at the end. */
1766
+ .scroll-divider::after {
1767
+ bottom: 0;
1768
+ animation: sf-divider-end both linear;
1769
+ animation-timeline: --sf-scroller;
1770
+ animation-range: calc(100% - var(--scroll-divider-size)) 100%;
1771
+ }
1772
+ }
1773
+
1774
+ /* biome-ignore-all lint: vendored upstream code keeps its own values (see the header) */
1775
+ /*
1776
+ * Surface elevation module: the 8-level surface ladder and its 1:1 shadow
1777
+ * recipes, plus the per-scheme selection of the active --shadow-N alias.
1778
+ *
1779
+ * Extracted from tokens/colors.css and base.css — the elevation system
1780
+ * belongs to this primitive, not the global token set.
1781
+ * Source: mickadesign/fluid-functionalism `app/globals.css` §1–2 at commit
1782
+ * b3587bdbd83fc66c2a6aae3817ffb856cb09260b — MIT License
1783
+ * © 2026 Micka Touillaud — fluidfunctionalism.com. All HEX migrated to
1784
+ * exact oklch (see tokens/colors.css for the note).
1785
+ *
1786
+ * Like tokens/colors.css, the token block is declared on
1787
+ * `:root, .light, .dark` so light-dark() re-resolves per forced scope. The
1788
+ * switch blocks double their class selector (.light.light / .dark.dark) to
1789
+ * out-specify the shared (0,1,0) token block regardless of stylesheet
1790
+ * order.
1791
+ */
1792
+
1793
+ :root,
1794
+ .light,
1795
+ .dark {
1796
+ /* ── Surfaces (8-level ladder) ──
1797
+ Light: 2 color steps (floor, sunken) then flat white; shadow does the
1798
+ work. Dark: additive white-opacity ladder over near-black. Each surface
1799
+ pairs 1:1 with a shadow recipe (--shadow-1 .. --shadow-8). */
1800
+ --surface-1: light-dark(oklch(0.985 0 0), oklch(0.205 0 0));
1801
+ --surface-2: light-dark(oklch(0.991 0 0), oklch(0.235 0 0));
1802
+ --surface-3: light-dark(oklch(1 0 0), oklch(0.264 0 0));
1803
+ --surface-4: light-dark(oklch(1 0 0), oklch(0.293 0 0));
1804
+ --surface-5: light-dark(oklch(1 0 0), oklch(0.321 0 0));
1805
+ --surface-6: light-dark(oklch(1 0 0), oklch(0.349 0 0));
1806
+ --surface-7: light-dark(oklch(1 0 0), oklch(0.375 0 0));
1807
+ --surface-8: light-dark(oklch(1 0 0), oklch(0.402 0 0));
1808
+
1809
+ /* ── Shadow recipes ──
1810
+ Light: additive stacked drops, halving offsets (1/3/6/12/24/48/96 px).
1811
+ Dark: inset highlight + inset ring + stacked drops.
1812
+ Structurally different, so each ladder is written out once here and the
1813
+ active --shadow-N is selected per scheme below.
1814
+ --shadow-color is intentionally static: it is also consumed directly by
1815
+ components and has never varied by theme. */
1816
+ --shadow-color: rgb(0 0 0 / 0.06);
1817
+ --shadow-light-1: 0 0 0 1px var(--shadow-color);
1818
+ --shadow-light-2: 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color);
1819
+ --shadow-light-3:
1820
+ 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color), 0 3px 3px -1.5px var(--shadow-color);
1821
+ --shadow-light-4:
1822
+ 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color), 0 3px 3px -1.5px var(--shadow-color), 0 6px 6px -3px var(
1823
+ --shadow-color
1824
+ );
1825
+ --shadow-light-5:
1826
+ 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color), 0 3px 3px -1.5px var(--shadow-color), 0 6px 6px -3px var(
1827
+ --shadow-color
1828
+ ), 0 12px 12px -6px var(--shadow-color);
1829
+ --shadow-light-6:
1830
+ 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color), 0 3px 3px -1.5px var(--shadow-color), 0 6px 6px -3px var(
1831
+ --shadow-color
1832
+ ), 0 12px 12px -6px var(--shadow-color), 0 24px 24px -12px var(--shadow-color);
1833
+ --shadow-light-7:
1834
+ 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color), 0 3px 3px -1.5px var(--shadow-color), 0 6px 6px -3px var(
1835
+ --shadow-color
1836
+ ), 0 12px 12px -6px var(--shadow-color), 0 24px 24px -12px var(--shadow-color), 0 48px 48px -24px var(
1837
+ --shadow-color
1838
+ );
1839
+ --shadow-light-8:
1840
+ 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color), 0 3px 3px -1.5px var(--shadow-color), 0 6px 6px -3px var(
1841
+ --shadow-color
1842
+ ), 0 12px 12px -6px var(--shadow-color), 0 24px 24px -12px var(--shadow-color), 0 48px 48px -24px var(
1843
+ --shadow-color
1844
+ ), 0 96px 96px -48px var(--shadow-color);
1845
+ /* Surface-2/3 with the hairline moved INSIDE the box — for cards whose
1846
+ border must stay within their own edge. Dark's recipes already draw
1847
+ their ring inset, so dark scopes alias --shadow-dark-2/3 directly. */
1848
+ --shadow-light-2-inset: inset 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color);
1849
+ --shadow-light-3-inset:
1850
+ inset 0 0 0 1px var(--shadow-color), 0 1px 1px -0.5px var(--shadow-color), 0 3px 3px -1.5px var(--shadow-color);
1851
+
1852
+ --dm-hi-base: rgba(255, 255, 255, 0.01);
1853
+ --dm-hi-mid: rgba(255, 255, 255, 0.02);
1854
+ --dm-hi-high: rgba(255, 255, 255, 0.04);
1855
+ --dm-hi-peak: rgba(255, 255, 255, 0.06);
1856
+ --dm-ring-base: rgba(255, 255, 255, 0.02);
1857
+ --dm-ring-mid: rgba(255, 255, 255, 0.04);
1858
+ --dm-ring-high: rgba(255, 255, 255, 0.06);
1859
+ --dm-drop: rgba(0, 0, 0, 0.18);
1860
+ --shadow-dark-1: inset 0 0 0 1px var(--dm-ring-base);
1861
+ --shadow-dark-2:
1862
+ inset 0 1px 0 0 var(--dm-hi-base), inset 0 0 0 1px var(--dm-ring-base), 0 1px 1px -0.5px var(--dm-drop);
1863
+ --shadow-dark-3:
1864
+ inset 0 1px 0 0 var(--dm-hi-mid), inset 0 0 0 1px var(--dm-ring-base), 0 0 0 1px rgba(0, 0, 0, 0.12), 0 1px 1px -0.5px var(
1865
+ --dm-drop
1866
+ ), 0 3px 3px -1.5px var(--dm-drop);
1867
+ --shadow-dark-4:
1868
+ inset 0 1px 0 0 var(--dm-hi-mid), inset 0 0 0 1px var(--dm-ring-mid), 0 0 0 1px rgba(0, 0, 0, 0.14), 0 1px 1px -0.5px var(
1869
+ --dm-drop
1870
+ ), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop);
1871
+ --shadow-dark-5:
1872
+ inset 0 1px 0 0 var(--dm-hi-high), inset 0 0 0 1px var(--dm-ring-mid), 0 0 0 1px rgba(0, 0, 0, 0.16), 0 1px 1px -0.5px var(
1873
+ --dm-drop
1874
+ ), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop);
1875
+ --shadow-dark-6:
1876
+ inset 0 1px 0 0 var(--dm-hi-high), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px rgba(0, 0, 0, 0.18), 0 1px 1px -0.5px var(
1877
+ --dm-drop
1878
+ ), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(
1879
+ --dm-drop
1880
+ );
1881
+ --shadow-dark-7:
1882
+ inset 0 1px 0 0 var(--dm-hi-peak), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px rgba(0, 0, 0, 0.2), 0 1px 1px -0.5px var(
1883
+ --dm-drop
1884
+ ), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(
1885
+ --dm-drop
1886
+ ), 0 48px 48px -24px var(--dm-drop);
1887
+ --shadow-dark-8:
1888
+ inset 0 1px 0 0 var(--dm-hi-peak), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px rgba(0, 0, 0, 0.22), 0 1px 1px -0.5px var(
1889
+ --dm-drop
1890
+ ), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(
1891
+ --dm-drop
1892
+ ), 0 48px 48px -24px var(--dm-drop), 0 96px 96px -48px var(--dm-drop);
1893
+
1894
+ --shadow-1: var(--shadow-light-1);
1895
+ --shadow-2: var(--shadow-light-2);
1896
+ --shadow-3: var(--shadow-light-3);
1897
+ --shadow-4: var(--shadow-light-4);
1898
+ --shadow-5: var(--shadow-light-5);
1899
+ --shadow-6: var(--shadow-light-6);
1900
+ --shadow-7: var(--shadow-light-7);
1901
+ --shadow-8: var(--shadow-light-8);
1902
+ --shadow-2-inset: var(--shadow-light-2-inset);
1903
+ --shadow-3-inset: var(--shadow-light-3-inset);
1904
+ }
1905
+
1906
+ /* ── Per-scheme shadow selection ──
1907
+ The light/dark recipes are structurally different, so they cannot ride
1908
+ light-dark(); the active --shadow-N alias is re-pointed per scheme here. */
1909
+
1910
+ @media (prefers-color-scheme: dark) {
1911
+ :root:not(.light) {
1912
+ --shadow-1: var(--shadow-dark-1);
1913
+ --shadow-2: var(--shadow-dark-2);
1914
+ --shadow-3: var(--shadow-dark-3);
1915
+ --shadow-4: var(--shadow-dark-4);
1916
+ --shadow-5: var(--shadow-dark-5);
1917
+ --shadow-6: var(--shadow-dark-6);
1918
+ --shadow-7: var(--shadow-dark-7);
1919
+ --shadow-8: var(--shadow-dark-8);
1920
+ --shadow-2-inset: var(--shadow-dark-2);
1921
+ --shadow-3-inset: var(--shadow-dark-3);
1922
+ }
1923
+ }
1924
+
1925
+ .light.light {
1926
+ --shadow-1: var(--shadow-light-1);
1927
+ --shadow-2: var(--shadow-light-2);
1928
+ --shadow-3: var(--shadow-light-3);
1929
+ --shadow-4: var(--shadow-light-4);
1930
+ --shadow-5: var(--shadow-light-5);
1931
+ --shadow-6: var(--shadow-light-6);
1932
+ --shadow-7: var(--shadow-light-7);
1933
+ --shadow-8: var(--shadow-light-8);
1934
+ --shadow-2-inset: var(--shadow-light-2-inset);
1935
+ --shadow-3-inset: var(--shadow-light-3-inset);
1936
+ }
1937
+
1938
+ .dark.dark {
1939
+ --shadow-1: var(--shadow-dark-1);
1940
+ --shadow-2: var(--shadow-dark-2);
1941
+ --shadow-3: var(--shadow-dark-3);
1942
+ --shadow-4: var(--shadow-dark-4);
1943
+ --shadow-5: var(--shadow-dark-5);
1944
+ --shadow-6: var(--shadow-dark-6);
1945
+ --shadow-7: var(--shadow-dark-7);
1946
+ --shadow-8: var(--shadow-dark-8);
1947
+ --shadow-2-inset: var(--shadow-dark-2);
1948
+ --shadow-3-inset: var(--shadow-dark-3);
1949
+ }