@teseor/css 1.0.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 (298) hide show
  1. package/README.md +102 -0
  2. package/dist/compiled.css +4463 -0
  3. package/dist/index.css +4445 -0
  4. package/fonts/.gitkeep +9 -0
  5. package/package.json +38 -0
  6. package/src/00-config/layers/layers.scss +1 -0
  7. package/src/00-config/mixins/_border.scss +13 -0
  8. package/src/00-config/mixins/index.scss +1 -0
  9. package/src/00-config/tokens/_variables.scss +120 -0
  10. package/src/00-config/tokens/borders/index.scss +6 -0
  11. package/src/00-config/tokens/colors/colors.docs.json +168 -0
  12. package/src/00-config/tokens/colors/index.scss +25 -0
  13. package/src/00-config/tokens/grid/grid.docs.json +54 -0
  14. package/src/00-config/tokens/grid/index.scss +11 -0
  15. package/src/00-config/tokens/index.scss +15 -0
  16. package/src/00-config/tokens/input.scss +14 -0
  17. package/src/00-config/tokens/motion/index.scss +25 -0
  18. package/src/00-config/tokens/radius/index.scss +7 -0
  19. package/src/00-config/tokens/semantic/colors/index.scss +30 -0
  20. package/src/00-config/tokens/semantic/spacing/index.scss +10 -0
  21. package/src/00-config/tokens/shadows/index.scss +5 -0
  22. package/src/00-config/tokens/spacing/index.scss +15 -0
  23. package/src/00-config/tokens/spacing/spacing.docs.json +114 -0
  24. package/src/00-config/tokens/theming.docs.json +77 -0
  25. package/src/00-config/tokens/typography/index.scss +119 -0
  26. package/src/00-config/tokens/zindex/index.scss +14 -0
  27. package/src/01-reset/index.scss +1 -0
  28. package/src/01-reset/reset.scss +8 -0
  29. package/src/02-base/index.scss +2 -0
  30. package/src/02-base/root/root.scss +12 -0
  31. package/src/02-base/typography/typography.docs.json +94 -0
  32. package/src/02-base/typography/typography.scss +145 -0
  33. package/src/03-layout/app-shell/app-shell.api.json +26 -0
  34. package/src/03-layout/app-shell/app-shell.docs.json +119 -0
  35. package/src/03-layout/app-shell/index.scss +5 -0
  36. package/src/03-layout/box/box.api.json +15 -0
  37. package/src/03-layout/box/box.docs.json +57 -0
  38. package/src/03-layout/box/index.scss +34 -0
  39. package/src/03-layout/center/center.api.json +6 -0
  40. package/src/03-layout/center/center.docs.json +24 -0
  41. package/src/03-layout/center/index.scss +11 -0
  42. package/src/03-layout/cluster/cluster.api.json +10 -0
  43. package/src/03-layout/cluster/cluster.docs.json +129 -0
  44. package/src/03-layout/cluster/index.scss +18 -0
  45. package/src/03-layout/container/container.api.json +13 -0
  46. package/src/03-layout/container/index.scss +17 -0
  47. package/src/03-layout/flex/flex.api.json +15 -0
  48. package/src/03-layout/flex/flex.docs.json +56 -0
  49. package/src/03-layout/flex/index.scss +51 -0
  50. package/src/03-layout/grid/grid.api.json +10 -0
  51. package/src/03-layout/grid/grid.docs.json +116 -0
  52. package/src/03-layout/grid/index.scss +15 -0
  53. package/src/03-layout/index.scss +11 -0
  54. package/src/03-layout/main/index.scss +17 -0
  55. package/src/03-layout/main/main.api.json +13 -0
  56. package/src/03-layout/sidebar/index.scss +30 -0
  57. package/src/03-layout/sidebar/sidebar.api.json +13 -0
  58. package/src/03-layout/sidebar-nav/index.scss +209 -0
  59. package/src/03-layout/sidebar-nav/sidebar-nav-all.png +0 -0
  60. package/src/03-layout/sidebar-nav/sidebar-nav.api.json +115 -0
  61. package/src/03-layout/sidebar-nav/sidebar-nav.docs.json +100 -0
  62. package/src/03-layout/sidebar-nav/sidebar-nav.visual.spec.ts +14 -0
  63. package/src/03-layout/stack/index.scss +13 -0
  64. package/src/03-layout/stack/stack.api.json +10 -0
  65. package/src/03-layout/stack/stack.docs.json +131 -0
  66. package/src/04-components/accordion/accordion-visual.png +0 -0
  67. package/src/04-components/accordion/accordion.api.json +19 -0
  68. package/src/04-components/accordion/accordion.docs.json +51 -0
  69. package/src/04-components/accordion/accordion.visual.spec.ts +14 -0
  70. package/src/04-components/accordion/index.scss +78 -0
  71. package/src/04-components/alert/alert-visual.png +0 -0
  72. package/src/04-components/alert/alert.api.json +91 -0
  73. package/src/04-components/alert/alert.docs.json +79 -0
  74. package/src/04-components/alert/alert.visual.spec.ts +14 -0
  75. package/src/04-components/alert/index.scss +108 -0
  76. package/src/04-components/avatar/avatar-visual.png +0 -0
  77. package/src/04-components/avatar/avatar.api.json +70 -0
  78. package/src/04-components/avatar/avatar.docs.json +200 -0
  79. package/src/04-components/avatar/avatar.visual.spec.ts +14 -0
  80. package/src/04-components/avatar/index.scss +104 -0
  81. package/src/04-components/badge/badge-visual.png +0 -0
  82. package/src/04-components/badge/badge.api.json +86 -0
  83. package/src/04-components/badge/badge.docs.json +89 -0
  84. package/src/04-components/badge/badge.visual.spec.ts +14 -0
  85. package/src/04-components/badge/index.scss +64 -0
  86. package/src/04-components/breadcrumb/breadcrumb-visual.png +0 -0
  87. package/src/04-components/breadcrumb/breadcrumb.api.json +31 -0
  88. package/src/04-components/breadcrumb/breadcrumb.docs.json +59 -0
  89. package/src/04-components/breadcrumb/breadcrumb.visual.spec.ts +14 -0
  90. package/src/04-components/breadcrumb/index.scss +77 -0
  91. package/src/04-components/button/button-visual.png +0 -0
  92. package/src/04-components/button/button.api.json +138 -0
  93. package/src/04-components/button/button.docs.json +75 -0
  94. package/src/04-components/button/button.visual.spec.ts +14 -0
  95. package/src/04-components/button/index.scss +222 -0
  96. package/src/04-components/button-group/button-group-visual.png +0 -0
  97. package/src/04-components/button-group/button-group.api.json +11 -0
  98. package/src/04-components/button-group/button-group.docs.json +52 -0
  99. package/src/04-components/button-group/button-group.visual.spec.ts +14 -0
  100. package/src/04-components/button-group/index.scss +78 -0
  101. package/src/04-components/card/card-visual.png +0 -0
  102. package/src/04-components/card/card.api.json +53 -0
  103. package/src/04-components/card/card.docs.json +103 -0
  104. package/src/04-components/card/card.visual.spec.ts +14 -0
  105. package/src/04-components/card/index.scss +41 -0
  106. package/src/04-components/checkbox/checkbox-visual.png +0 -0
  107. package/src/04-components/checkbox/checkbox.api.json +50 -0
  108. package/src/04-components/checkbox/checkbox.docs.json +151 -0
  109. package/src/04-components/checkbox/checkbox.visual.spec.ts +14 -0
  110. package/src/04-components/checkbox/index.scss +104 -0
  111. package/src/04-components/code/code-visual.png +0 -0
  112. package/src/04-components/code/code.api.json +47 -0
  113. package/src/04-components/code/code.docs.json +84 -0
  114. package/src/04-components/code/code.visual.spec.ts +14 -0
  115. package/src/04-components/code/index.scss +64 -0
  116. package/src/04-components/data-list/data-list-visual.png +0 -0
  117. package/src/04-components/data-list/data-list.api.json +23 -0
  118. package/src/04-components/data-list/data-list.docs.json +79 -0
  119. package/src/04-components/data-list/data-list.visual.spec.ts +14 -0
  120. package/src/04-components/data-list/index.scss +98 -0
  121. package/src/04-components/dialog/dialog-visual.png +0 -0
  122. package/src/04-components/dialog/dialog.api.json +23 -0
  123. package/src/04-components/dialog/dialog.docs.json +58 -0
  124. package/src/04-components/dialog/dialog.visual.spec.ts +14 -0
  125. package/src/04-components/dialog/index.scss +74 -0
  126. package/src/04-components/disclosure/disclosure-visual.png +0 -0
  127. package/src/04-components/disclosure/disclosure.api.json +31 -0
  128. package/src/04-components/disclosure/disclosure.docs.json +73 -0
  129. package/src/04-components/disclosure/disclosure.visual.spec.ts +14 -0
  130. package/src/04-components/disclosure/index.scss +111 -0
  131. package/src/04-components/divider/divider-visual.png +0 -0
  132. package/src/04-components/divider/divider.api.json +30 -0
  133. package/src/04-components/divider/divider.docs.json +68 -0
  134. package/src/04-components/divider/divider.visual.spec.ts +14 -0
  135. package/src/04-components/divider/index.scss +115 -0
  136. package/src/04-components/drawer/drawer-visual.png +0 -0
  137. package/src/04-components/drawer/drawer.api.json +39 -0
  138. package/src/04-components/drawer/drawer.docs.json +78 -0
  139. package/src/04-components/drawer/drawer.visual.spec.ts +14 -0
  140. package/src/04-components/drawer/index.scss +251 -0
  141. package/src/04-components/field/field-visual.png +0 -0
  142. package/src/04-components/field/field.api.json +11 -0
  143. package/src/04-components/field/field.docs.json +59 -0
  144. package/src/04-components/field/field.visual.spec.ts +14 -0
  145. package/src/04-components/field/index.scss +44 -0
  146. package/src/04-components/form-error/form-error-visual.png +0 -0
  147. package/src/04-components/form-error/form-error.api.json +19 -0
  148. package/src/04-components/form-error/form-error.docs.json +40 -0
  149. package/src/04-components/form-error/form-error.visual.spec.ts +14 -0
  150. package/src/04-components/form-error/index.scss +31 -0
  151. package/src/04-components/form-helper/form-helper-visual.png +0 -0
  152. package/src/04-components/form-helper/form-helper.api.json +19 -0
  153. package/src/04-components/form-helper/form-helper.docs.json +31 -0
  154. package/src/04-components/form-helper/form-helper.visual.spec.ts +14 -0
  155. package/src/04-components/form-helper/index.scss +24 -0
  156. package/src/04-components/heading/heading-visual.png +0 -0
  157. package/src/04-components/heading/heading.api.json +83 -0
  158. package/src/04-components/heading/heading.docs.json +98 -0
  159. package/src/04-components/heading/heading.visual.spec.ts +14 -0
  160. package/src/04-components/heading/index.scss +61 -0
  161. package/src/04-components/icon/icon-visual.png +0 -0
  162. package/src/04-components/icon/icon.api.json +56 -0
  163. package/src/04-components/icon/icon.docs.json +155 -0
  164. package/src/04-components/icon/icon.visual.spec.ts +14 -0
  165. package/src/04-components/icon/index.scss +79 -0
  166. package/src/04-components/index.scss +41 -0
  167. package/src/04-components/input/index.scss +154 -0
  168. package/src/04-components/input/input-visual.png +0 -0
  169. package/src/04-components/input/input.api.json +85 -0
  170. package/src/04-components/input/input.docs.json +189 -0
  171. package/src/04-components/input/input.visual.spec.ts +14 -0
  172. package/src/04-components/label/index.scss +46 -0
  173. package/src/04-components/label/label-visual.png +0 -0
  174. package/src/04-components/label/label.api.json +27 -0
  175. package/src/04-components/label/label.docs.json +73 -0
  176. package/src/04-components/label/label.visual.spec.ts +14 -0
  177. package/src/04-components/link/index.scss +73 -0
  178. package/src/04-components/link/link-visual.png +0 -0
  179. package/src/04-components/link/link.api.json +39 -0
  180. package/src/04-components/link/link.docs.json +104 -0
  181. package/src/04-components/link/link.visual.spec.ts +14 -0
  182. package/src/04-components/menu/index.scss +145 -0
  183. package/src/04-components/menu/menu-visual.png +0 -0
  184. package/src/04-components/menu/menu.api.json +47 -0
  185. package/src/04-components/menu/menu.docs.json +81 -0
  186. package/src/04-components/menu/menu.visual.spec.ts +14 -0
  187. package/src/04-components/modal/index.scss +93 -0
  188. package/src/04-components/modal/modal-visual.png +0 -0
  189. package/src/04-components/modal/modal.api.json +43 -0
  190. package/src/04-components/modal/modal.docs.json +86 -0
  191. package/src/04-components/modal/modal.visual.spec.ts +14 -0
  192. package/src/04-components/overlay/index.scss +49 -0
  193. package/src/04-components/overlay/overlay-visual.png +0 -0
  194. package/src/04-components/overlay/overlay.api.json +23 -0
  195. package/src/04-components/overlay/overlay.docs.json +63 -0
  196. package/src/04-components/overlay/overlay.visual.spec.ts +14 -0
  197. package/src/04-components/pagination/index.scss +114 -0
  198. package/src/04-components/pagination/pagination-visual.png +0 -0
  199. package/src/04-components/pagination/pagination.api.json +39 -0
  200. package/src/04-components/pagination/pagination.docs.json +88 -0
  201. package/src/04-components/pagination/pagination.visual.spec.ts +14 -0
  202. package/src/04-components/popover/index.scss +114 -0
  203. package/src/04-components/popover/popover-visual.png +0 -0
  204. package/src/04-components/popover/popover.api.json +39 -0
  205. package/src/04-components/popover/popover.docs.json +70 -0
  206. package/src/04-components/popover/popover.visual.spec.ts +14 -0
  207. package/src/04-components/progress/index.scss +102 -0
  208. package/src/04-components/progress/progress-visual.png +0 -0
  209. package/src/04-components/progress/progress.api.json +23 -0
  210. package/src/04-components/progress/progress.docs.json +87 -0
  211. package/src/04-components/progress/progress.visual.spec.ts +14 -0
  212. package/src/04-components/radio/index.scss +96 -0
  213. package/src/04-components/radio/radio-visual.png +0 -0
  214. package/src/04-components/radio/radio.api.json +46 -0
  215. package/src/04-components/radio/radio.docs.json +159 -0
  216. package/src/04-components/radio/radio.visual.spec.ts +14 -0
  217. package/src/04-components/select/index.scss +113 -0
  218. package/src/04-components/select/select-visual.png +0 -0
  219. package/src/04-components/select/select.api.json +85 -0
  220. package/src/04-components/select/select.docs.json +162 -0
  221. package/src/04-components/select/select.visual.spec.ts +14 -0
  222. package/src/04-components/skeleton/index.scss +99 -0
  223. package/src/04-components/skeleton/skeleton-visual.png +0 -0
  224. package/src/04-components/skeleton/skeleton.api.json +19 -0
  225. package/src/04-components/skeleton/skeleton.docs.json +62 -0
  226. package/src/04-components/skeleton/skeleton.visual.spec.ts +14 -0
  227. package/src/04-components/spinner/index.scss +60 -0
  228. package/src/04-components/spinner/spinner-visual.png +0 -0
  229. package/src/04-components/spinner/spinner.api.json +63 -0
  230. package/src/04-components/spinner/spinner.docs.json +88 -0
  231. package/src/04-components/spinner/spinner.visual.spec.ts +15 -0
  232. package/src/04-components/status/index.scss +85 -0
  233. package/src/04-components/status/status-visual.png +0 -0
  234. package/src/04-components/status/status.api.json +19 -0
  235. package/src/04-components/status/status.docs.json +60 -0
  236. package/src/04-components/status/status.visual.spec.ts +14 -0
  237. package/src/04-components/table/index.scss +60 -0
  238. package/src/04-components/table/table-visual.png +0 -0
  239. package/src/04-components/table/table.api.json +27 -0
  240. package/src/04-components/table/table.docs.json +59 -0
  241. package/src/04-components/table/table.visual.spec.ts +14 -0
  242. package/src/04-components/tabs/index.scss +77 -0
  243. package/src/04-components/tabs/tabs-visual.png +0 -0
  244. package/src/04-components/tabs/tabs.api.json +31 -0
  245. package/src/04-components/tabs/tabs.docs.json +61 -0
  246. package/src/04-components/tabs/tabs.visual.spec.ts +14 -0
  247. package/src/04-components/tag/index.scss +98 -0
  248. package/src/04-components/tag/tag-visual.png +0 -0
  249. package/src/04-components/tag/tag.api.json +86 -0
  250. package/src/04-components/tag/tag.docs.json +108 -0
  251. package/src/04-components/tag/tag.visual.spec.ts +14 -0
  252. package/src/04-components/textarea/index.scss +124 -0
  253. package/src/04-components/textarea/textarea-visual.png +0 -0
  254. package/src/04-components/textarea/textarea.api.json +93 -0
  255. package/src/04-components/textarea/textarea.docs.json +191 -0
  256. package/src/04-components/textarea/textarea.visual.spec.ts +14 -0
  257. package/src/04-components/toast/index.scss +180 -0
  258. package/src/04-components/toast/toast-visual.png +0 -0
  259. package/src/04-components/toast/toast.api.json +43 -0
  260. package/src/04-components/toast/toast.docs.json +99 -0
  261. package/src/04-components/toast/toast.visual.spec.ts +14 -0
  262. package/src/04-components/toggle/index.scss +117 -0
  263. package/src/04-components/toggle/toggle-visual.png +0 -0
  264. package/src/04-components/toggle/toggle.api.json +43 -0
  265. package/src/04-components/toggle/toggle.docs.json +92 -0
  266. package/src/04-components/toggle/toggle.visual.spec.ts +14 -0
  267. package/src/04-components/tooltip/index.scss +102 -0
  268. package/src/04-components/tooltip/tooltip-visual.png +0 -0
  269. package/src/04-components/tooltip/tooltip.api.json +39 -0
  270. package/src/04-components/tooltip/tooltip.docs.json +63 -0
  271. package/src/04-components/tooltip/tooltip.visual.spec.ts +14 -0
  272. package/src/05-utilities/border/index.scss +21 -0
  273. package/src/05-utilities/display/display.api.json +6 -0
  274. package/src/05-utilities/display/display.docs.json +28 -0
  275. package/src/05-utilities/display/display.scss +195 -0
  276. package/src/05-utilities/index.scss +6 -0
  277. package/src/05-utilities/spacing/spacing.api.json +6 -0
  278. package/src/05-utilities/spacing/spacing.docs.json +43 -0
  279. package/src/05-utilities/spacing/spacing.scss +399 -0
  280. package/src/05-utilities/text/text.api.json +38 -0
  281. package/src/05-utilities/text/text.docs.json +132 -0
  282. package/src/05-utilities/text/text.scss +246 -0
  283. package/src/05-utilities/view-transition/index.scss +198 -0
  284. package/src/05-utilities/view-transition/view-transition.api.json +21 -0
  285. package/src/05-utilities/view-transition/view-transition.docs.json +63 -0
  286. package/src/05-utilities/visually-hidden/index.scss +38 -0
  287. package/src/05-utilities/visually-hidden/visually-hidden.api.json +8 -0
  288. package/src/05-utilities/visually-hidden/visually-hidden.docs.json +29 -0
  289. package/src/99-debug/grid-overlay.scss +79 -0
  290. package/src/99-debug/index.scss +1 -0
  291. package/src/index.scss +30 -0
  292. package/src/testing/api-types.ts +20 -0
  293. package/src/testing/grid-alignment.spec.ts +92 -0
  294. package/src/testing/html-generator.ts +151 -0
  295. package/src/testing/index.ts +15 -0
  296. package/src/testing/page-setup.ts +131 -0
  297. package/src/testing/rhythm.ts +146 -0
  298. package/src/testing/scaffold.ts +50 -0
@@ -0,0 +1,4463 @@
1
+ @charset "UTF-8";
2
+ /**
3
+ * CSS Library - Main Entry Point
4
+ *
5
+ * Import order follows numbered folder structure for cascade control.
6
+ */
7
+ /* 00. Config: Layer definitions + Design tokens */
8
+ /* Fonts (Google Fonts CDN) */
9
+ @import "https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500;700&family=Noto+Sans+Mono:wght@400;500&display=swap";
10
+ @layer reset, tokens, base, primitives, components.styles, components.tokens, utilities, themes;
11
+ :root {
12
+ --ui-hue-primary: 220;
13
+ --ui-hue-success: 142;
14
+ --ui-hue-warning: 38;
15
+ --ui-hue-danger: 0;
16
+ --ui-color-neutral-50: hsl(var(--ui-hue-primary) 10% 98%);
17
+ --ui-color-neutral-100: hsl(var(--ui-hue-primary) 10% 96%);
18
+ --ui-color-neutral-200: hsl(var(--ui-hue-primary) 10% 90%);
19
+ --ui-color-neutral-300: hsl(var(--ui-hue-primary) 10% 80%);
20
+ --ui-color-neutral-400: hsl(var(--ui-hue-primary) 10% 60%);
21
+ --ui-color-neutral-500: hsl(var(--ui-hue-primary) 10% 45%);
22
+ --ui-color-neutral-600: hsl(var(--ui-hue-primary) 10% 35%);
23
+ --ui-color-neutral-700: hsl(var(--ui-hue-primary) 10% 25%);
24
+ --ui-color-neutral-800: hsl(var(--ui-hue-primary) 10% 15%);
25
+ --ui-color-neutral-900: hsl(var(--ui-hue-primary) 10% 10%);
26
+ --ui-color-primary-light: hsl(var(--ui-hue-primary) 85% 65%);
27
+ --ui-color-primary: hsl(var(--ui-hue-primary) 85% 50%);
28
+ --ui-color-primary-dark: hsl(var(--ui-hue-primary) 85% 40%);
29
+ --ui-color-success: hsl(var(--ui-hue-success) 70% 45%);
30
+ --ui-color-warning: hsl(var(--ui-hue-warning) 90% 50%);
31
+ --ui-color-danger: hsl(var(--ui-hue-danger) 70% 50%);
32
+ }
33
+
34
+ :root {
35
+ --ui-space-px: calc(var(--unit) * 0.125);
36
+ --ui-space-quarter: calc(var(--unit) * 0.25);
37
+ --ui-space-half: calc(var(--unit) * 0.5);
38
+ --ui-space-0: calc(var(--unit) * 0.5);
39
+ --ui-space-1: var(--unit);
40
+ --ui-space-2: calc(var(--unit) * 2);
41
+ --ui-space-3: calc(var(--unit) * 3);
42
+ --ui-space-4: calc(var(--unit) * 4);
43
+ --ui-space-6: calc(var(--unit) * 6);
44
+ --ui-space-8: calc(var(--unit) * 8);
45
+ }
46
+
47
+ :root {
48
+ --ui-font-sans: "Noto Sans", system-ui, -apple-system, sans-serif;
49
+ --ui-font-mono: "Noto Sans Mono", ui-monospace, "Cascadia Code", monospace;
50
+ --ui-font-size-xs: 0.75rem;
51
+ --ui-font-size-sm: 0.875rem;
52
+ --ui-font-size-md: 1rem;
53
+ --ui-font-size-lg: 1.25rem;
54
+ --ui-font-size-xl: 1.5rem;
55
+ --ui-font-size-2xl: 1.75rem;
56
+ --ui-font-size-3xl: 2rem;
57
+ --ui-font-size-4xl: 2.5rem;
58
+ --ui-leading-tight-xs: var(--ui-row-1);
59
+ --ui-leading-tight-sm: var(--ui-row-1);
60
+ --ui-leading-tight-md: calc(var(--unit) * 3);
61
+ --ui-leading-tight-lg: calc(var(--unit) * 3);
62
+ --ui-leading-xs: var(--ui-row-1);
63
+ --ui-leading-sm: calc(var(--unit) * 3);
64
+ --ui-leading-md: calc(var(--unit) * 3);
65
+ --ui-leading-lg: var(--ui-row-2);
66
+ --ui-leading-xl: var(--ui-row-2);
67
+ --ui-leading-2xl: var(--ui-row-2);
68
+ --ui-leading-3xl: calc(var(--unit) * 5);
69
+ --ui-leading-4xl: calc(var(--unit) * 6);
70
+ --ui-weight-normal: 400;
71
+ --ui-weight-medium: 500;
72
+ --ui-weight-semibold: 600;
73
+ --ui-weight-bold: 700;
74
+ --ui-tracking-display: -0.02em;
75
+ --ui-tracking-body: 0;
76
+ --ui-tracking-caps: 0.08em;
77
+ --ui-heading-1-size: var(--ui-font-size-4xl);
78
+ --ui-heading-1-line-height: var(--ui-leading-4xl);
79
+ --ui-heading-1-weight: var(--ui-weight-bold);
80
+ --ui-heading-1-tracking: var(--ui-tracking-display);
81
+ --ui-heading-2-size: var(--ui-font-size-3xl);
82
+ --ui-heading-2-line-height: var(--ui-leading-3xl);
83
+ --ui-heading-2-weight: var(--ui-weight-bold);
84
+ --ui-heading-2-tracking: -0.01em;
85
+ --ui-heading-3-size: var(--ui-font-size-2xl);
86
+ --ui-heading-3-line-height: var(--ui-leading-2xl);
87
+ --ui-heading-3-weight: var(--ui-weight-semibold);
88
+ --ui-heading-3-tracking: var(--ui-tracking-body);
89
+ --ui-heading-4-size: var(--ui-font-size-xl);
90
+ --ui-heading-4-line-height: var(--ui-leading-xl);
91
+ --ui-heading-4-weight: var(--ui-weight-semibold);
92
+ --ui-heading-4-tracking: var(--ui-tracking-body);
93
+ --ui-heading-5-size: var(--ui-font-size-lg);
94
+ --ui-heading-5-line-height: var(--ui-leading-sm);
95
+ --ui-heading-5-weight: var(--ui-weight-medium);
96
+ --ui-heading-5-tracking: var(--ui-tracking-body);
97
+ --ui-body-size: var(--ui-font-size-md);
98
+ --ui-body-line-height: var(--ui-leading-md);
99
+ --ui-body-weight: var(--ui-weight-normal);
100
+ --ui-body-tracking: var(--ui-tracking-body);
101
+ --ui-body-sm-size: var(--ui-font-size-sm);
102
+ --ui-body-sm-line-height: var(--ui-leading-sm);
103
+ --ui-body-sm-weight: var(--ui-weight-normal);
104
+ --ui-body-sm-tracking: var(--ui-tracking-body);
105
+ --ui-caption-size: var(--ui-font-size-xs);
106
+ --ui-caption-line-height: var(--ui-leading-xs);
107
+ --ui-caption-weight: var(--ui-weight-normal);
108
+ --ui-caption-tracking: 0.01em;
109
+ --ui-lead-size: var(--ui-font-size-lg);
110
+ --ui-lead-line-height: var(--ui-leading-lg);
111
+ --ui-lead-weight: var(--ui-weight-normal);
112
+ --ui-lead-tracking: var(--ui-tracking-body);
113
+ --ui-eyebrow-size: var(--ui-font-size-xs);
114
+ --ui-eyebrow-line-height: var(--ui-leading-xs);
115
+ --ui-eyebrow-weight: var(--ui-weight-semibold);
116
+ --ui-eyebrow-tracking: var(--ui-tracking-caps);
117
+ }
118
+
119
+ :root {
120
+ --unit: 8px; /* 8px */
121
+ --ui-row: calc(var(--unit) * 2);
122
+ --ui-row-1: var(--ui-row);
123
+ --ui-row-2: calc(var(--ui-row) * 2);
124
+ --ui-row-3: calc(var(--ui-row) * 3);
125
+ --ui-row-4: calc(var(--ui-row) * 4);
126
+ --ui-row-5: calc(var(--ui-row) * 5);
127
+ --ui-row-6: calc(var(--ui-row) * 6);
128
+ }
129
+
130
+ :root {
131
+ --ui-radius-sm: calc(var(--unit) * 0.5);
132
+ --ui-radius-md: var(--unit);
133
+ --ui-radius-lg: calc(var(--unit) * 2);
134
+ --ui-radius-full: 9999px;
135
+ }
136
+
137
+ :root {
138
+ --ui-border-width-sm: calc(var(--unit) * 0.125);
139
+ --ui-border-width-md: calc(var(--unit) * 0.25);
140
+ --ui-border-width-lg: calc(var(--unit) * 0.5);
141
+ }
142
+
143
+ :root {
144
+ --shadow-sm: 0 1px 2px hsl(var(--ui-hue-primary) 10% 20% / 0.05);
145
+ --shadow-md: 0 4px 6px hsl(var(--ui-hue-primary) 10% 20% / 0.1);
146
+ --shadow-lg: 0 10px 15px hsl(var(--ui-hue-primary) 10% 20% / 0.15);
147
+ }
148
+
149
+ @layer tokens {
150
+ :root {
151
+ --ui-z-base: 0;
152
+ --ui-z-sticky: 100;
153
+ --ui-z-dropdown: 200;
154
+ --ui-z-overlay: 300;
155
+ --ui-z-modal: 400;
156
+ --ui-z-popover: 500;
157
+ --ui-z-tooltip: 600;
158
+ --ui-z-toast: 700;
159
+ --ui-z-debug: 9999;
160
+ }
161
+ }
162
+ @layer tokens {
163
+ :root {
164
+ --ui-duration-instant: 50ms;
165
+ --ui-duration-fast: 100ms;
166
+ --ui-duration-base: 150ms;
167
+ --ui-duration-slow: 250ms;
168
+ --ui-duration-slower: 400ms;
169
+ --ui-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
170
+ --ui-ease-in: cubic-bezier(0.4, 0, 1, 1);
171
+ --ui-ease-out: cubic-bezier(0, 0, 0.2, 1);
172
+ --ui-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
173
+ }
174
+ @media (prefers-reduced-motion: reduce) {
175
+ :root {
176
+ --ui-duration-instant: 0ms;
177
+ --ui-duration-fast: 0ms;
178
+ --ui-duration-base: 0ms;
179
+ --ui-duration-slow: 0ms;
180
+ --ui-duration-slower: 0ms;
181
+ }
182
+ }
183
+ }
184
+ :root {
185
+ --ui-color-text: var(--ui-color-neutral-900);
186
+ --ui-color-text-muted: var(--ui-color-neutral-500);
187
+ --ui-color-text-inverse: var(--ui-color-neutral-50);
188
+ --ui-color-bg: var(--ui-color-neutral-50);
189
+ --ui-color-bg-subtle: var(--ui-color-neutral-100);
190
+ --ui-color-bg-muted: var(--ui-color-neutral-200);
191
+ --ui-color-border: var(--ui-color-neutral-200);
192
+ --ui-color-border-strong: var(--ui-color-neutral-300);
193
+ --ui-color-interactive: var(--ui-color-primary);
194
+ --ui-color-interactive-hover: var(--ui-color-primary-dark);
195
+ --ui-color-focus: var(--ui-color-primary-light);
196
+ }
197
+
198
+ [data-theme=dark] {
199
+ --ui-color-text: var(--ui-color-neutral-100);
200
+ --ui-color-text-muted: var(--ui-color-neutral-400);
201
+ --ui-color-text-inverse: var(--ui-color-neutral-900);
202
+ --ui-color-bg: var(--ui-color-neutral-900);
203
+ --ui-color-bg-subtle: var(--ui-color-neutral-800);
204
+ --ui-color-bg-muted: var(--ui-color-neutral-700);
205
+ --ui-color-border: var(--ui-color-neutral-700);
206
+ --ui-color-border-strong: var(--ui-color-neutral-600);
207
+ }
208
+
209
+ :root {
210
+ --spacing-xs: var(--ui-space-1);
211
+ --spacing-sm: var(--ui-space-2);
212
+ --spacing-md: var(--ui-space-4);
213
+ --spacing-lg: var(--ui-space-6);
214
+ --spacing-xl: var(--ui-space-8);
215
+ --spacing-gutter: var(--ui-space-4);
216
+ --spacing-section: var(--ui-space-8);
217
+ }
218
+
219
+ :root {
220
+ --ui-input-height: var(--ui-row-2);
221
+ --ui-input-padding-x: var(--ui-space-2);
222
+ --ui-input-padding-y: var(--ui-space-1);
223
+ --ui-input-radius: var(--ui-radius-md);
224
+ --ui-input-border-width: var(--ui-border-width-sm);
225
+ --ui-input-bg: var(--ui-color-bg);
226
+ --ui-input-border: var(--ui-color-border);
227
+ --ui-input-border-focus: var(--ui-color-interactive);
228
+ --ui-input-text: var(--ui-color-text);
229
+ --ui-input-placeholder: var(--ui-color-text-muted);
230
+ }
231
+
232
+ /* 01. Reset styles */
233
+ @layer reset {
234
+ *,
235
+ *::before,
236
+ *::after {
237
+ box-sizing: border-box;
238
+ margin: 0;
239
+ }
240
+ }
241
+ /* 02. Base styles (typography, etc.) */
242
+ @layer base {
243
+ .root {
244
+ font-family: var(--ui-font-sans, Noto Sans, system-ui, -apple-system, sans-serif);
245
+ font-size: var(--ui-font-size-md, 1rem);
246
+ line-height: var(--ui-leading-md, calc(0.5rem * 3));
247
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
248
+ background: var(--ui-color-bg, hsl(220, 10%, 98%));
249
+ }
250
+ }
251
+ @layer base {
252
+ h1 {
253
+ margin-block-end: var(--ui-space-4);
254
+ font-size: var(--ui-heading-1-size);
255
+ font-weight: var(--ui-heading-1-weight);
256
+ line-height: var(--ui-heading-1-line-height);
257
+ letter-spacing: var(--ui-heading-1-tracking);
258
+ }
259
+ h2 {
260
+ margin-block-end: var(--ui-space-3);
261
+ font-size: var(--ui-heading-2-size);
262
+ font-weight: var(--ui-heading-2-weight);
263
+ line-height: var(--ui-heading-2-line-height);
264
+ letter-spacing: var(--ui-heading-2-tracking);
265
+ }
266
+ h3 {
267
+ margin-block-end: var(--ui-space-2);
268
+ font-size: var(--ui-heading-3-size);
269
+ font-weight: var(--ui-heading-3-weight);
270
+ line-height: var(--ui-heading-3-line-height);
271
+ letter-spacing: var(--ui-heading-3-tracking);
272
+ }
273
+ h4 {
274
+ margin-block-end: var(--ui-space-2);
275
+ font-size: var(--ui-heading-4-size);
276
+ font-weight: var(--ui-heading-4-weight);
277
+ line-height: var(--ui-heading-4-line-height);
278
+ letter-spacing: var(--ui-heading-4-tracking);
279
+ }
280
+ h5,
281
+ h6 {
282
+ margin-block-end: var(--ui-space-1);
283
+ font-size: var(--ui-heading-5-size);
284
+ font-weight: var(--ui-heading-5-weight);
285
+ line-height: var(--ui-heading-5-line-height);
286
+ letter-spacing: var(--ui-heading-5-tracking);
287
+ }
288
+ p {
289
+ margin-block-end: var(--ui-space-2);
290
+ font-size: var(--ui-body-size);
291
+ line-height: var(--ui-body-line-height);
292
+ letter-spacing: var(--ui-body-tracking);
293
+ }
294
+ p:last-child {
295
+ margin-block-end: 0;
296
+ }
297
+ strong,
298
+ b {
299
+ font-weight: var(--ui-weight-bold);
300
+ line-height: 0;
301
+ }
302
+ small {
303
+ font-size: var(--ui-caption-size);
304
+ line-height: 0;
305
+ }
306
+ code {
307
+ padding: 0 var(--ui-space-1);
308
+ font-family: var(--ui-font-mono);
309
+ font-size: var(--ui-body-sm-size);
310
+ line-height: 0;
311
+ vertical-align: baseline;
312
+ background: var(--ui-color-bg-muted);
313
+ border-radius: var(--ui-radius-sm);
314
+ }
315
+ pre {
316
+ padding: var(--ui-space-2);
317
+ margin-block-end: var(--ui-space-2);
318
+ overflow-x: auto;
319
+ font-family: var(--ui-font-mono);
320
+ font-size: var(--ui-body-sm-size);
321
+ line-height: var(--ui-body-sm-line-height);
322
+ background: var(--ui-color-bg-muted);
323
+ border-radius: var(--ui-radius-md);
324
+ }
325
+ pre code {
326
+ padding: 0;
327
+ background: none;
328
+ }
329
+ @media (width < 45.625rem) {
330
+ h1 {
331
+ font-size: var(--ui-font-size-2xl);
332
+ line-height: var(--ui-leading-2xl);
333
+ }
334
+ h2 {
335
+ font-size: var(--ui-font-size-xl);
336
+ line-height: var(--ui-leading-xl);
337
+ }
338
+ h3 {
339
+ font-size: var(--ui-font-size-lg);
340
+ line-height: var(--ui-leading-sm);
341
+ }
342
+ h4 {
343
+ font-size: 1.125rem;
344
+ line-height: var(--ui-leading-sm);
345
+ }
346
+ }
347
+ @media (width > 67.5rem) {
348
+ h1 {
349
+ font-size: calc(var(--unit) * 6);
350
+ line-height: calc(var(--unit) * 7);
351
+ }
352
+ h2 {
353
+ font-size: var(--ui-font-size-4xl);
354
+ line-height: var(--ui-leading-4xl);
355
+ }
356
+ }
357
+ }
358
+ /* 03. Layout primitives */
359
+ @layer primitives {
360
+ .box {
361
+ --_padding: var(--box-padding, 0);
362
+ --_bg: var(--box-bg, transparent);
363
+ --_color: var(--box-color, inherit);
364
+ --_radius: var(--box-radius, 0);
365
+ padding: var(--_padding);
366
+ color: var(--_color);
367
+ background: var(--_bg);
368
+ border-radius: var(--_radius);
369
+ }
370
+ .box--p-1 {
371
+ --_padding: var(--ui-space-1, 0.5rem);
372
+ }
373
+ .box--p-2 {
374
+ --_padding: var(--ui-space-2, 1rem);
375
+ }
376
+ .box--p-3 {
377
+ --_padding: var(--ui-space-3, 1.5rem);
378
+ }
379
+ .box--p-4 {
380
+ --_padding: var(--ui-space-4, 2rem);
381
+ }
382
+ .box--bg-subtle {
383
+ --_bg: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
384
+ }
385
+ .box--bg-muted {
386
+ --_bg: var(--ui-color-bg-muted, hsl(220, 10%, 90%));
387
+ }
388
+ .box--rounded {
389
+ --_radius: var(--ui-radius-md, 0.5rem);
390
+ }
391
+ .box--rounded-lg {
392
+ --_radius: var(--ui-radius-lg, 1rem);
393
+ }
394
+ }
395
+ @layer primitives {
396
+ .stack {
397
+ display: flex;
398
+ flex-direction: column;
399
+ gap: var(--stack-gap, var(--ui-space-2));
400
+ }
401
+ .stack--xs {
402
+ --stack-gap: var(--ui-space-1);
403
+ }
404
+ .stack--sm {
405
+ --stack-gap: var(--ui-space-2);
406
+ }
407
+ .stack--md {
408
+ --stack-gap: var(--ui-space-4);
409
+ }
410
+ .stack--lg {
411
+ --stack-gap: var(--ui-space-6);
412
+ }
413
+ .stack--xl {
414
+ --stack-gap: var(--ui-space-8);
415
+ }
416
+ }
417
+ @layer primitives {
418
+ .cluster {
419
+ display: flex;
420
+ flex-wrap: wrap;
421
+ align-items: center;
422
+ gap: var(--cluster-gap, var(--ui-space-2));
423
+ }
424
+ .cluster--xs {
425
+ --cluster-gap: var(--ui-space-1);
426
+ }
427
+ .cluster--sm {
428
+ --cluster-gap: var(--ui-space-2);
429
+ }
430
+ .cluster--md {
431
+ --cluster-gap: var(--ui-space-4);
432
+ }
433
+ .cluster--lg {
434
+ --cluster-gap: var(--ui-space-6);
435
+ }
436
+ .cluster--start {
437
+ justify-content: flex-start;
438
+ }
439
+ .cluster--center {
440
+ justify-content: center;
441
+ }
442
+ .cluster--end {
443
+ justify-content: flex-end;
444
+ }
445
+ .cluster--between {
446
+ justify-content: space-between;
447
+ }
448
+ }
449
+ @layer primitives {
450
+ .flex {
451
+ --_gap: var(--flex-gap, var(--ui-space-2, 1rem));
452
+ --_direction: var(--flex-direction, row);
453
+ --_wrap: var(--flex-wrap, nowrap);
454
+ --_align: var(--flex-align, stretch);
455
+ --_justify: var(--flex-justify, flex-start);
456
+ display: flex;
457
+ flex-direction: var(--_direction);
458
+ flex-wrap: var(--_wrap);
459
+ align-items: var(--_align);
460
+ justify-content: var(--_justify);
461
+ gap: var(--_gap);
462
+ }
463
+ .flex--row {
464
+ --_direction: row;
465
+ }
466
+ .flex--col {
467
+ --_direction: column;
468
+ }
469
+ .flex--row-reverse {
470
+ --_direction: row-reverse;
471
+ }
472
+ .flex--col-reverse {
473
+ --_direction: column-reverse;
474
+ }
475
+ .flex--wrap {
476
+ --_wrap: wrap;
477
+ }
478
+ .flex--nowrap {
479
+ --_wrap: nowrap;
480
+ }
481
+ .flex--items-start {
482
+ --_align: flex-start;
483
+ }
484
+ .flex--items-center {
485
+ --_align: center;
486
+ }
487
+ .flex--items-end {
488
+ --_align: flex-end;
489
+ }
490
+ .flex--items-baseline {
491
+ --_align: baseline;
492
+ }
493
+ .flex--justify-start {
494
+ --_justify: flex-start;
495
+ }
496
+ .flex--justify-center {
497
+ --_justify: center;
498
+ }
499
+ .flex--justify-end {
500
+ --_justify: flex-end;
501
+ }
502
+ .flex--justify-between {
503
+ --_justify: space-between;
504
+ }
505
+ .flex--justify-around {
506
+ --_justify: space-around;
507
+ }
508
+ .flex--gap-0 {
509
+ --_gap: 0;
510
+ }
511
+ .flex--gap-1 {
512
+ --_gap: var(--ui-space-1, 0.5rem);
513
+ }
514
+ .flex--gap-2 {
515
+ --_gap: var(--ui-space-2, 1rem);
516
+ }
517
+ .flex--gap-3 {
518
+ --_gap: var(--ui-space-3, 1.5rem);
519
+ }
520
+ .flex--gap-4 {
521
+ --_gap: var(--ui-space-4, 2rem);
522
+ }
523
+ }
524
+ @layer primitives {
525
+ .center {
526
+ display: flex;
527
+ align-items: center;
528
+ justify-content: center;
529
+ }
530
+ .center--column {
531
+ flex-direction: column;
532
+ }
533
+ }
534
+ @layer primitives {
535
+ .grid {
536
+ display: grid;
537
+ gap: var(--grid-gap, var(--ui-space-4));
538
+ grid-template-columns: repeat(var(--grid-cols, 1), minmax(0, 1fr));
539
+ }
540
+ .grid--2 {
541
+ --grid-cols: 2;
542
+ }
543
+ .grid--3 {
544
+ --grid-cols: 3;
545
+ }
546
+ .grid--4 {
547
+ --grid-cols: 4;
548
+ }
549
+ .grid--auto {
550
+ grid-template-columns: repeat(auto-fit, minmax(var(--grid-min, 16rem), 1fr));
551
+ }
552
+ }
553
+ @layer primitives {
554
+ .app-shell {
555
+ min-block-size: 100vh;
556
+ }
557
+ }
558
+ @layer primitives {
559
+ .sidebar {
560
+ display: flex;
561
+ flex-direction: column;
562
+ position: fixed;
563
+ inset-block-start: 0;
564
+ inset-inline-start: 0;
565
+ z-index: var(--ui-z-sticky);
566
+ block-size: 100vh;
567
+ inline-size: var(--sidebar-width, calc(var(--unit) * 30));
568
+ overflow-y: auto;
569
+ background: var(--ui-color-bg-subtle);
570
+ box-shadow: inset calc(var(--ui-border-width-sm) * -1) 0 0 0 var(--ui-color-border);
571
+ }
572
+ /* Width modifiers */
573
+ .sidebar--sm {
574
+ --sidebar-width: calc(var(--unit) * 24);
575
+ }
576
+ .sidebar--md {
577
+ --sidebar-width: calc(var(--unit) * 30);
578
+ }
579
+ .sidebar--lg {
580
+ --sidebar-width: calc(var(--unit) * 40);
581
+ }
582
+ /* Position modifier - sidebar on end (right in LTR) */
583
+ .sidebar--end {
584
+ inset-inline-start: auto;
585
+ inset-inline-end: 0;
586
+ box-shadow: inset var(--ui-border-width-sm) 0 0 0 var(--ui-color-border);
587
+ }
588
+ }
589
+ @layer primitives {
590
+ .sidebar-nav {
591
+ --_width: var(--ui-sidebar-nav-width, calc(var(--ui-unit) * 30));
592
+ --_bg: var(--ui-sidebar-nav-bg, var(--ui-color-bg-subtle));
593
+ --_border-color: var(--ui-sidebar-nav-border-color, var(--ui-color-border));
594
+ --_padding: var(--ui-sidebar-nav-padding, var(--ui-space-2));
595
+ display: flex;
596
+ flex-direction: column;
597
+ block-size: 100%;
598
+ inline-size: var(--_width);
599
+ background: var(--_bg);
600
+ }
601
+ .sidebar-nav__header {
602
+ --_padding: var(--ui-sidebar-nav-header-padding, var(--ui-space-2));
603
+ flex-shrink: 0;
604
+ padding: var(--_padding);
605
+ box-shadow: inset 0 calc(var(--ui-border-width-sm) * -1) 0 0 var(--_border-color);
606
+ }
607
+ .sidebar-nav__content {
608
+ flex: 1;
609
+ padding: var(--_padding);
610
+ overflow-y: auto;
611
+ }
612
+ .sidebar-nav__footer {
613
+ --_padding: var(--ui-sidebar-nav-footer-padding, var(--ui-space-2));
614
+ flex-shrink: 0;
615
+ padding: var(--_padding);
616
+ box-shadow: inset 0 var(--ui-border-width-sm) 0 0 var(--_border-color);
617
+ }
618
+ .sidebar-nav__group {
619
+ margin-block-end: var(--ui-space-2);
620
+ }
621
+ .sidebar-nav__group-label {
622
+ --_font-size: var(--ui-sidebar-nav-group-label-size, var(--ui-size-xs));
623
+ --_color: var(--ui-sidebar-nav-group-label-color, var(--ui-color-text-muted));
624
+ --_weight: var(--ui-sidebar-nav-group-label-weight, var(--ui-weight-bold));
625
+ display: block;
626
+ padding: var(--ui-space-1) var(--ui-space-2);
627
+ margin: 0;
628
+ font-size: var(--_font-size);
629
+ font-weight: var(--_weight);
630
+ letter-spacing: 0.05em;
631
+ text-transform: uppercase;
632
+ color: var(--_color);
633
+ }
634
+ .sidebar-nav__group-items {
635
+ display: flex;
636
+ flex-direction: column;
637
+ gap: var(--ui-space-half);
638
+ padding: 0;
639
+ margin: 0;
640
+ list-style: none;
641
+ }
642
+ .sidebar-nav__subgroup-label {
643
+ display: block;
644
+ padding: var(--ui-space-1) var(--ui-space-2);
645
+ margin: 0;
646
+ margin-block-start: var(--ui-space-1);
647
+ font-size: var(--ui-size-xs);
648
+ font-weight: var(--ui-weight-medium);
649
+ color: var(--ui-color-text-muted);
650
+ }
651
+ .sidebar-nav__item {
652
+ --_height: var(--ui-sidebar-nav-item-height, var(--ui-row-2));
653
+ --_padding-inline: var(--ui-sidebar-nav-item-padding-inline, var(--ui-space-2));
654
+ --_font-size: var(--ui-sidebar-nav-item-size, var(--ui-size-sm));
655
+ --_color: var(--ui-sidebar-nav-item-color, var(--ui-color-text));
656
+ --_bg: var(--ui-sidebar-nav-item-bg, transparent);
657
+ --_radius: var(--ui-sidebar-nav-item-radius, var(--ui-radius-sm));
658
+ display: flex;
659
+ align-items: center;
660
+ gap: var(--ui-space-1);
661
+ min-block-size: var(--_height);
662
+ padding-inline: var(--_padding-inline);
663
+ font-size: var(--_font-size);
664
+ font-weight: var(--_weight, normal);
665
+ text-decoration: none;
666
+ color: var(--_color);
667
+ background: var(--_bg);
668
+ border-radius: var(--_radius);
669
+ cursor: pointer;
670
+ transition: background var(--ui-duration-fast) var(--ui-easing-default), color var(--ui-duration-fast) var(--ui-easing-default);
671
+ }
672
+ .sidebar-nav__item:hover {
673
+ --_bg: var(--ui-sidebar-nav-item-hover-bg, var(--ui-color-bg-muted));
674
+ }
675
+ .sidebar-nav__item:visited {
676
+ color: var(--_color);
677
+ }
678
+ .sidebar-nav__item:focus-visible {
679
+ outline: 2px solid var(--ui-color-focus);
680
+ outline-offset: -2px;
681
+ }
682
+ .sidebar-nav__item--active {
683
+ --_bg: var(--ui-sidebar-nav-item-active-bg, var(--ui-color-primary-subtle));
684
+ --_color: var(--ui-sidebar-nav-item-active-color, var(--ui-color-primary));
685
+ --_weight: var(--ui-sidebar-nav-item-active-weight, var(--ui-weight-medium));
686
+ }
687
+ .sidebar-nav__item--nested {
688
+ --_padding-inline-start: var(--ui-sidebar-nav-item-nested-indent, var(--ui-space-4));
689
+ padding-inline-start: var(--_padding-inline-start);
690
+ }
691
+ .sidebar-nav__item--disabled {
692
+ opacity: 0.5;
693
+ cursor: not-allowed;
694
+ pointer-events: none;
695
+ }
696
+ .sidebar-nav__icon {
697
+ display: flex;
698
+ flex-shrink: 0;
699
+ align-items: center;
700
+ justify-content: center;
701
+ block-size: var(--ui-size-md);
702
+ inline-size: var(--ui-size-md);
703
+ }
704
+ .sidebar-nav__label {
705
+ flex: 1;
706
+ min-inline-size: 0;
707
+ overflow: hidden;
708
+ text-overflow: ellipsis;
709
+ white-space: nowrap;
710
+ }
711
+ .sidebar-nav__badge {
712
+ flex-shrink: 0;
713
+ margin-inline-start: auto;
714
+ }
715
+ .sidebar-nav--collapsed {
716
+ --_width: var(--ui-sidebar-nav-width-collapsed, var(--ui-row-3));
717
+ }
718
+ .sidebar-nav--collapsed .sidebar-nav__label,
719
+ .sidebar-nav--collapsed .sidebar-nav__badge,
720
+ .sidebar-nav--collapsed .sidebar-nav__group-label,
721
+ .sidebar-nav--collapsed .sidebar-nav__subgroup-label {
722
+ display: none;
723
+ }
724
+ .sidebar-nav--collapsed .sidebar-nav__item {
725
+ justify-content: center;
726
+ padding-inline: var(--ui-space-1);
727
+ }
728
+ }
729
+ @layer primitives {
730
+ .main {
731
+ margin-inline-start: var(--sidebar-width, calc(var(--unit) * 30));
732
+ }
733
+ /* When sidebar is on the end */
734
+ .main--sidebar-end {
735
+ margin-inline-start: 0;
736
+ margin-inline-end: var(--sidebar-width, calc(var(--unit) * 30));
737
+ }
738
+ /* No sidebar */
739
+ .main--full {
740
+ margin-inline-start: 0;
741
+ margin-inline-end: 0;
742
+ }
743
+ }
744
+ @layer primitives {
745
+ .container {
746
+ max-inline-size: var(--container-width, calc(var(--unit) * 120));
747
+ padding-inline: var(--ui-space-4);
748
+ }
749
+ .container--center {
750
+ margin-inline: auto;
751
+ }
752
+ /* Size modifiers */
753
+ .container--sm {
754
+ --container-width: calc(var(--unit) * 80);
755
+ }
756
+ .container--md {
757
+ --container-width: calc(var(--unit) * 100);
758
+ }
759
+ .container--lg {
760
+ --container-width: calc(var(--unit) * 120);
761
+ }
762
+ .container--xl {
763
+ --container-width: calc(var(--unit) * 160);
764
+ }
765
+ .container--full {
766
+ max-inline-size: none;
767
+ }
768
+ }
769
+ /* 04. Components */
770
+ @layer components.tokens {
771
+ .accordion {
772
+ --_border-color: var(--ui-accordion-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
773
+ --_border-width: var(--ui-accordion-border-width, 1px);
774
+ --_radius: var(--ui-accordion-radius, var(--ui-radius-md, calc(0.5rem * 1)));
775
+ }
776
+ }
777
+ @layer components.styles {
778
+ .accordion {
779
+ border-radius: var(--_radius);
780
+ outline: var(--_border-width) solid var(--_border-color);
781
+ outline-offset: calc(var(--_border-width) * -1);
782
+ }
783
+ .accordion > .disclosure {
784
+ --_border-width: 0;
785
+ border: none;
786
+ border-radius: 0;
787
+ }
788
+ .accordion > .disclosure + .disclosure {
789
+ border-block-start: 1px solid var(--_border-color);
790
+ }
791
+ .accordion > .disclosure:first-child .disclosure__trigger {
792
+ border-start-start-radius: var(--_radius);
793
+ border-start-end-radius: var(--_radius);
794
+ }
795
+ .accordion > .disclosure:last-child .disclosure__trigger {
796
+ border-end-start-radius: var(--_radius);
797
+ border-end-end-radius: var(--_radius);
798
+ }
799
+ .accordion > .disclosure:last-child .disclosure__content {
800
+ border-end-start-radius: var(--_radius);
801
+ border-end-end-radius: var(--_radius);
802
+ }
803
+ .accordion--borderless {
804
+ border: none;
805
+ }
806
+ .accordion--borderless > .disclosure + .disclosure {
807
+ border-block-start: none;
808
+ }
809
+ .accordion--separated {
810
+ display: flex;
811
+ flex-direction: column;
812
+ gap: calc(0.5rem * 1);
813
+ border: none;
814
+ }
815
+ .accordion--separated > .disclosure {
816
+ border: 1px solid var(--_border-color);
817
+ border-radius: var(--_radius);
818
+ }
819
+ .accordion--separated > .disclosure + .disclosure {
820
+ border-block-start: 1px solid var(--_border-color);
821
+ }
822
+ }
823
+ @layer components.tokens {
824
+ .alert {
825
+ --_padding: var(--ui-alert-padding, var(--ui-space-2, 1rem));
826
+ --_border-width: var(--ui-alert-border-width, var(--ui-border-width-sm, 0.0625rem));
827
+ --_gap: var(--ui-alert-gap, var(--ui-space-1, 0.5rem));
828
+ --_radius: var(--ui-alert-radius, var(--ui-radius-md, 0.5rem));
829
+ --_bg: var(--ui-alert-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
830
+ --_border-color: var(--ui-alert-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
831
+ --_color: var(--ui-alert-color, var(--ui-color-text, hsl(220, 10%, 10%)));
832
+ --_icon-color: var(--ui-alert-icon-color, currentcolor);
833
+ }
834
+ .alert--info {
835
+ --_bg: var(--ui-alert-info-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
836
+ --_border-color: var(--ui-alert-info-border, var(--ui-color-primary, hsl(220, 85%, 50%)));
837
+ --_icon-color: var(--ui-alert-info-icon, var(--ui-color-primary, hsl(220, 85%, 50%)));
838
+ }
839
+ .alert--success {
840
+ --_bg: var(--ui-alert-success-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
841
+ --_border-color: var(--ui-alert-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
842
+ --_icon-color: var(--ui-alert-success-icon, var(--ui-color-success, hsl(142, 70%, 45%)));
843
+ }
844
+ .alert--warning {
845
+ --_bg: var(--ui-alert-warning-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
846
+ --_border-color: var(--ui-alert-warning-border, var(--ui-color-warning, hsl(38, 90%, 50%)));
847
+ --_icon-color: var(--ui-alert-warning-icon, var(--ui-color-warning, hsl(38, 90%, 50%)));
848
+ }
849
+ .alert--danger {
850
+ --_bg: var(--ui-alert-danger-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
851
+ --_border-color: var(--ui-alert-danger-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
852
+ --_icon-color: var(--ui-alert-danger-icon, var(--ui-color-danger, hsl(0, 70%, 50%)));
853
+ }
854
+ }
855
+ @layer components.styles {
856
+ .alert {
857
+ display: flex;
858
+ align-items: flex-start;
859
+ gap: var(--_gap);
860
+ padding: calc(var(--_padding) - var(--_border-width));
861
+ padding-inline: var(--_padding);
862
+ color: var(--_color);
863
+ background: var(--_bg);
864
+ border: var(--_border-width) solid var(--_border-color);
865
+ border-radius: var(--_radius);
866
+ border-inline-start-width: calc(0.5rem * 0.5);
867
+ }
868
+ .alert__icon {
869
+ flex-shrink: 0;
870
+ color: var(--_icon-color);
871
+ }
872
+ .alert__content {
873
+ flex: 1;
874
+ min-inline-size: 0;
875
+ }
876
+ .alert__title {
877
+ margin: 0;
878
+ font-weight: var(--ui-weight-medium, 500);
879
+ line-height: var(--ui-row-1, 1rem);
880
+ }
881
+ .alert__description {
882
+ margin: 0;
883
+ margin-block-start: calc(0.5rem * 1);
884
+ font-size: var(--ui-font-size-sm, 0.875rem);
885
+ line-height: var(--ui-row-1, 1rem);
886
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
887
+ }
888
+ .alert__close {
889
+ flex-shrink: 0;
890
+ align-self: flex-start;
891
+ padding: 0;
892
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
893
+ background: none;
894
+ border: none;
895
+ cursor: pointer;
896
+ }
897
+ .alert__close:hover {
898
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
899
+ }
900
+ }
901
+ @layer components.tokens {
902
+ .avatar {
903
+ --_size: var(--ui-avatar-size, calc(0.5rem * 5));
904
+ --_bg: var(--ui-avatar-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
905
+ --_color: var(--ui-avatar-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
906
+ --_font-size: var(--ui-avatar-font-size, var(--ui-font-size-sm, 0.875rem));
907
+ --_radius: var(--ui-avatar-radius, 50%);
908
+ }
909
+ .avatar--xs {
910
+ --_size: var(--ui-avatar-size-xs, calc(0.5rem * 3));
911
+ --_font-size: var(--ui-avatar-font-size-xs, var(--ui-font-size-xs, 0.75rem));
912
+ }
913
+ .avatar--sm {
914
+ --_size: var(--ui-avatar-size-sm, calc(0.5rem * 4));
915
+ --_font-size: var(--ui-avatar-font-size-sm, var(--ui-font-size-xs, 0.75rem));
916
+ }
917
+ .avatar--lg {
918
+ --_size: var(--ui-avatar-size-lg, calc(0.5rem * 6));
919
+ --_font-size: var(--ui-avatar-font-size-lg, var(--ui-font-size-md, 1rem));
920
+ }
921
+ .avatar--xl {
922
+ --_size: var(--ui-avatar-size-xl, calc(0.5rem * 8));
923
+ --_font-size: var(--ui-avatar-font-size-xl, var(--ui-font-size-lg, 1.25rem));
924
+ }
925
+ .avatar--square {
926
+ --_radius: var(--ui-avatar-radius-square, var(--ui-radius-md, 0.5rem));
927
+ }
928
+ }
929
+ @layer components.styles {
930
+ .avatar {
931
+ display: inline-flex;
932
+ flex-shrink: 0;
933
+ align-items: center;
934
+ justify-content: center;
935
+ position: relative;
936
+ block-size: var(--_size);
937
+ inline-size: var(--_size);
938
+ overflow: hidden;
939
+ font-size: var(--_font-size);
940
+ font-weight: var(--ui-weight-medium, 500);
941
+ line-height: 1;
942
+ text-transform: uppercase;
943
+ color: var(--_color);
944
+ background: var(--_bg);
945
+ border-radius: var(--_radius);
946
+ }
947
+ .avatar__image {
948
+ position: absolute;
949
+ inset: 0;
950
+ block-size: 100%;
951
+ inline-size: 100%;
952
+ object-fit: cover;
953
+ border-radius: inherit;
954
+ }
955
+ .avatar__fallback {
956
+ display: flex;
957
+ align-items: center;
958
+ justify-content: center;
959
+ block-size: 100%;
960
+ inline-size: 100%;
961
+ user-select: none;
962
+ }
963
+ .avatar-group {
964
+ display: flex;
965
+ flex-direction: row-reverse;
966
+ justify-content: flex-end;
967
+ }
968
+ .avatar-group > .avatar {
969
+ margin-inline-start: calc(var(--_size) * -0.25);
970
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--ui-color-bg, hsl(220, 10%, 98%));
971
+ }
972
+ .avatar-group > .avatar:last-child {
973
+ margin-inline-start: 0;
974
+ }
975
+ }
976
+ @layer components.tokens {
977
+ .badge {
978
+ --_height: var(--ui-badge-height, calc(var(--ui-row, 1rem) * 1.25));
979
+ --_padding-x: var(--ui-badge-padding-x, var(--ui-space-1, 0.5rem));
980
+ --_font-size: var(--ui-badge-font-size, var(--ui-font-size-xs, 0.75rem));
981
+ --_font-weight: var(--ui-badge-font-weight, var(--ui-weight-medium, 500));
982
+ --_radius: var(--ui-badge-radius, var(--ui-radius-full, 9999px));
983
+ --_bg: var(--ui-badge-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
984
+ --_text: var(--ui-badge-text, var(--ui-color-text, hsl(220, 10%, 10%)));
985
+ }
986
+ .badge--sm {
987
+ --_height: var(--ui-badge-height-sm, var(--ui-row, 1rem));
988
+ --_padding-x: var(--ui-badge-padding-x-sm, var(--ui-space-0, 0.25rem));
989
+ --_font-size: var(--ui-badge-font-size-sm, calc(var(--ui-font-size-xs, 0.75rem) * 0.85));
990
+ }
991
+ .badge--primary {
992
+ --_bg: var(--ui-badge-primary-bg, var(--ui-color-primary, hsl(220, 85%, 50%)));
993
+ --_text: var(--ui-badge-primary-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
994
+ }
995
+ .badge--success {
996
+ --_bg: var(--ui-badge-success-bg, var(--ui-color-success, hsl(142, 70%, 45%)));
997
+ --_text: var(--ui-badge-success-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
998
+ }
999
+ .badge--warning {
1000
+ --_bg: var(--ui-badge-warning-bg, var(--ui-color-warning, hsl(38, 90%, 50%)));
1001
+ --_text: var(--ui-badge-warning-text, var(--ui-color-text, hsl(220, 10%, 10%)));
1002
+ }
1003
+ .badge--danger {
1004
+ --_bg: var(--ui-badge-danger-bg, var(--ui-color-danger, hsl(0, 70%, 50%)));
1005
+ --_text: var(--ui-badge-danger-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1006
+ }
1007
+ }
1008
+ @layer components.styles {
1009
+ .badge {
1010
+ display: inline-flex;
1011
+ align-items: center;
1012
+ justify-content: center;
1013
+ block-size: var(--_height);
1014
+ padding-inline: var(--_padding-x);
1015
+ font-size: var(--_font-size);
1016
+ font-weight: var(--_font-weight);
1017
+ line-height: 1;
1018
+ white-space: nowrap;
1019
+ color: var(--_text);
1020
+ background: var(--_bg);
1021
+ border-radius: var(--_radius);
1022
+ }
1023
+ }
1024
+ @layer components.tokens {
1025
+ .breadcrumb {
1026
+ --_height: var(--ui-breadcrumb-height, var(--ui-row-1, 1rem));
1027
+ --_gap: var(--ui-breadcrumb-gap, calc(0.5rem * 1));
1028
+ --_separator-color: var(--ui-breadcrumb-separator-color, var(--ui-color-text-muted));
1029
+ --_link-color: var(--ui-breadcrumb-link-color, var(--ui-color-text-muted));
1030
+ --_current-color: var(--ui-breadcrumb-current-color, var(--ui-color-text));
1031
+ }
1032
+ }
1033
+ @layer components.styles {
1034
+ .breadcrumb {
1035
+ display: flex;
1036
+ flex-wrap: wrap;
1037
+ align-items: center;
1038
+ gap: var(--_gap);
1039
+ block-size: var(--_height);
1040
+ padding: 0;
1041
+ margin: 0;
1042
+ font-size: var(--ui-font-size-sm, 0.875rem);
1043
+ line-height: 1;
1044
+ list-style: none;
1045
+ }
1046
+ .breadcrumb__item {
1047
+ display: flex;
1048
+ align-items: center;
1049
+ gap: var(--_gap);
1050
+ block-size: var(--_height);
1051
+ }
1052
+ .breadcrumb__item:not(:last-child)::after {
1053
+ content: var(--ui-breadcrumb-separator, "/");
1054
+ color: var(--_separator-color);
1055
+ }
1056
+ .breadcrumb__link {
1057
+ text-decoration: none;
1058
+ color: var(--_link-color);
1059
+ transition: color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
1060
+ }
1061
+ .breadcrumb__link:hover {
1062
+ text-decoration: underline;
1063
+ color: var(--ui-color-primary);
1064
+ }
1065
+ .breadcrumb__item:last-child .breadcrumb__link,
1066
+ .breadcrumb__current {
1067
+ color: var(--_current-color);
1068
+ pointer-events: none;
1069
+ }
1070
+ .breadcrumb__item--hidden {
1071
+ display: none;
1072
+ }
1073
+ .breadcrumb__ellipsis {
1074
+ color: var(--_separator-color);
1075
+ }
1076
+ }
1077
+ @layer components.tokens {
1078
+ .button {
1079
+ --_height: var(--ui-button-height, var(--ui-row-2, 2rem));
1080
+ --_padding-x: var(--ui-button-padding-x, var(--ui-space-2, 1rem));
1081
+ --_font-size: var(--ui-button-font-size, var(--ui-font-size-sm, 0.875rem));
1082
+ --_font-weight: var(--ui-button-font-weight, var(--ui-weight-medium, 500));
1083
+ --_radius: var(--ui-button-radius, var(--ui-radius-md, 0.5rem));
1084
+ --_bg: var(--ui-button-bg, var(--ui-color-primary, hsl(220, 85%, 50%)));
1085
+ --_bg-hover: var(--ui-button-bg-hover, var(--ui-color-primary-dark, hsl(220, 85%, 40%)));
1086
+ --_text: var(--ui-button-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1087
+ }
1088
+ .button--sm {
1089
+ --_height: var(--ui-button-height-sm, calc(var(--row, 1rem) * 1.5));
1090
+ --_font-size: var(--ui-button-font-size-sm, var(--ui-font-size-xs, 0.75rem));
1091
+ }
1092
+ .button--lg {
1093
+ --_height: var(--ui-button-height-lg, calc(var(--row, 1rem) * 2.5));
1094
+ --_padding-x: var(--ui-button-padding-x-lg, var(--ui-space-3, 1.5rem));
1095
+ --_font-size: var(--ui-button-font-size-lg, var(--ui-font-size-md, 1rem));
1096
+ }
1097
+ .button--secondary {
1098
+ --_bg: var(--ui-button-secondary-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
1099
+ --_bg-hover: var(--ui-button-secondary-bg-hover, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
1100
+ --_text: var(--ui-button-secondary-text, var(--ui-color-text, hsl(220, 10%, 10%)));
1101
+ }
1102
+ .button--ghost {
1103
+ --_bg: var(--ui-button-ghost-bg, transparent);
1104
+ --_bg-hover: var(--ui-button-ghost-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
1105
+ --_text: var(--ui-button-ghost-text, var(--ui-color-primary, hsl(220, 85%, 50%)));
1106
+ }
1107
+ .button--outline {
1108
+ --_bg: var(--ui-button-outline-bg, transparent);
1109
+ --_bg-hover: var(--ui-button-outline-bg-hover, var(--ui-color-primary, hsl(220, 85%, 50%)));
1110
+ --_text: var(--ui-button-outline-text, var(--ui-color-primary, hsl(220, 85%, 50%)));
1111
+ --_text-hover: var(--ui-button-outline-text-hover, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1112
+ --_border: var(--ui-button-outline-border, var(--ui-border-width-sm, 0.0625rem) solid currentColor);
1113
+ }
1114
+ .button--danger {
1115
+ --_bg: var(--ui-button-danger-bg, var(--ui-color-danger, hsl(0, 70%, 50%)));
1116
+ --_bg-hover: var(--ui-button-danger-bg-hover, hsl(0, 70%, 40%));
1117
+ }
1118
+ .button--link {
1119
+ --_bg: transparent;
1120
+ --_bg-hover: transparent;
1121
+ --_text: var(--ui-button-link-text, var(--ui-color-primary, hsl(220, 85%, 50%)));
1122
+ --_text-hover: var(--ui-button-link-text-hover, var(--ui-color-primary-dark, hsl(220, 85%, 40%)));
1123
+ --_height: auto;
1124
+ --_padding-x: 0;
1125
+ --_radius: 0;
1126
+ }
1127
+ .button--icon {
1128
+ --_padding-x: 0;
1129
+ }
1130
+ .button--radius-none {
1131
+ --_radius: 0;
1132
+ }
1133
+ .button--radius-sm {
1134
+ --_radius: var(--ui-radius-sm, 0.25rem);
1135
+ }
1136
+ .button--radius-lg {
1137
+ --_radius: var(--ui-radius-lg, 1rem);
1138
+ }
1139
+ .button--radius-full {
1140
+ --_radius: 624.9375rem;
1141
+ }
1142
+ }
1143
+ @layer components.styles {
1144
+ .button {
1145
+ display: inline-flex;
1146
+ align-items: center;
1147
+ justify-content: center;
1148
+ gap: var(--ui-space-1, 0.5rem);
1149
+ block-size: var(--_height);
1150
+ padding-inline: var(--_padding-x);
1151
+ margin: 0;
1152
+ font-family: var(--ui-font-sans, Noto Sans, system-ui, -apple-system, sans-serif);
1153
+ font-size: var(--_font-size);
1154
+ font-weight: var(--_font-weight);
1155
+ line-height: 1;
1156
+ text-decoration: none;
1157
+ white-space: nowrap;
1158
+ color: var(--_text);
1159
+ background: var(--_bg);
1160
+ border: var(--_border, none);
1161
+ border-radius: var(--_radius);
1162
+ cursor: pointer;
1163
+ transition: background-color var(--ui-duration-base) var(--ui-ease-default), color var(--ui-duration-base) var(--ui-ease-default), transform var(--ui-duration-fast) var(--ui-ease-default);
1164
+ }
1165
+ .button:hover, .button--hover {
1166
+ color: var(--_text-hover, var(--_text));
1167
+ background: var(--_bg-hover);
1168
+ }
1169
+ .button:focus-visible, .button--focus {
1170
+ outline: var(--ui-border-width-md, 0.125rem) solid var(--ui-color-focus, hsl(220, 85%, 65%));
1171
+ outline-offset: var(--ui-border-width-md, 0.125rem);
1172
+ }
1173
+ .button:active, .button--active {
1174
+ transform: scale(0.98);
1175
+ }
1176
+ .button:disabled {
1177
+ opacity: 0.5;
1178
+ cursor: not-allowed;
1179
+ }
1180
+ .button:disabled:hover {
1181
+ background: var(--_bg);
1182
+ transform: none;
1183
+ }
1184
+ .button--icon {
1185
+ inline-size: var(--_height);
1186
+ }
1187
+ .button--block {
1188
+ inline-size: 100%;
1189
+ }
1190
+ .button--link {
1191
+ text-decoration: underline;
1192
+ text-underline-offset: var(--ui-space-quarter);
1193
+ }
1194
+ .button--link:hover {
1195
+ text-decoration-thickness: var(--ui-space-quarter);
1196
+ }
1197
+ .button__icon {
1198
+ flex-shrink: 0;
1199
+ block-size: 1em;
1200
+ inline-size: 1em;
1201
+ }
1202
+ .button__icon--start {
1203
+ order: -1;
1204
+ }
1205
+ .button__icon--end {
1206
+ order: 1;
1207
+ }
1208
+ .button--loading {
1209
+ position: relative;
1210
+ opacity: 0.7;
1211
+ pointer-events: none;
1212
+ }
1213
+ .button--loading::after {
1214
+ content: "";
1215
+ position: absolute;
1216
+ block-size: 1em;
1217
+ inline-size: 1em;
1218
+ border: 2px solid currentcolor;
1219
+ border-radius: 50%;
1220
+ animation: button-spin 0.6s linear infinite;
1221
+ border-inline-end-color: transparent;
1222
+ }
1223
+ @keyframes button-spin {
1224
+ to {
1225
+ transform: rotate(360deg);
1226
+ }
1227
+ }
1228
+ }
1229
+ @layer components.tokens {
1230
+ .button-group {
1231
+ --_radius: var(--ui-button-group-radius, var(--ui-radius-md, calc(0.5rem / 2)));
1232
+ }
1233
+ }
1234
+ @layer components.styles {
1235
+ .button-group {
1236
+ display: inline-flex;
1237
+ }
1238
+ .button-group > .button:not(:first-child, :last-child) {
1239
+ border-radius: 0;
1240
+ }
1241
+ .button-group > .button:first-child:not(:last-child) {
1242
+ border-start-end-radius: 0;
1243
+ border-end-end-radius: 0;
1244
+ }
1245
+ .button-group > .button:last-child:not(:first-child) {
1246
+ border-start-start-radius: 0;
1247
+ border-end-start-radius: 0;
1248
+ }
1249
+ .button-group > .button + .button {
1250
+ margin-inline-start: calc(0.5rem / -8);
1251
+ }
1252
+ .button-group > .button:focus-visible {
1253
+ z-index: 1;
1254
+ }
1255
+ .button-group--vertical {
1256
+ flex-direction: column;
1257
+ }
1258
+ .button-group--vertical > .button:not(:first-child, :last-child) {
1259
+ border-radius: 0;
1260
+ }
1261
+ .button-group--vertical > .button:first-child:not(:last-child) {
1262
+ border-end-start-radius: 0;
1263
+ border-end-end-radius: 0;
1264
+ }
1265
+ .button-group--vertical > .button:last-child:not(:first-child) {
1266
+ border-start-start-radius: 0;
1267
+ border-start-end-radius: 0;
1268
+ }
1269
+ .button-group--vertical > .button + .button {
1270
+ margin-block-start: calc(0.5rem / -8);
1271
+ margin-inline-start: 0;
1272
+ }
1273
+ .button-group--attached > .button {
1274
+ border-inline-end-width: 0;
1275
+ }
1276
+ .button-group--attached > .button:last-child {
1277
+ border-inline-end-width: 1px;
1278
+ }
1279
+ .button-group--attached > .button + .button {
1280
+ margin-inline-start: 0;
1281
+ }
1282
+ }
1283
+ @layer components.tokens {
1284
+ .card {
1285
+ --_padding: var(--ui-card-padding, var(--ui-space-4));
1286
+ --_border-width: var(--ui-card-border-width, var(--ui-border-width-sm));
1287
+ --_bg: var(--ui-card-bg, var(--ui-color-bg));
1288
+ --_border-color: var(--ui-card-border-color, var(--ui-color-border));
1289
+ --_radius: var(--ui-card-radius, var(--ui-radius-md));
1290
+ }
1291
+ .card--subtle {
1292
+ --_bg: var(--ui-card-bg-subtle, var(--ui-color-bg-subtle));
1293
+ }
1294
+ .card--muted {
1295
+ --_bg: var(--ui-card-bg-muted, var(--ui-color-bg-muted));
1296
+ }
1297
+ .card--sm {
1298
+ --_padding: var(--ui-card-padding-sm, var(--ui-space-2));
1299
+ }
1300
+ .card--lg {
1301
+ --_padding: var(--ui-card-padding-lg, var(--ui-space-6));
1302
+ }
1303
+ .card--flush {
1304
+ --_padding: 0;
1305
+ --_border-width: 0;
1306
+ }
1307
+ }
1308
+ @layer components.styles {
1309
+ .card {
1310
+ border: var(--_border-width) solid var(--_border-color);
1311
+ border-radius: var(--_radius);
1312
+ background: var(--_bg);
1313
+ padding: calc(var(--_padding) - var(--_border-width));
1314
+ line-height: var(--ui-row-1);
1315
+ }
1316
+ }
1317
+ @layer components.tokens {
1318
+ .checkbox {
1319
+ --_size: var(--ui-checkbox-size, calc(0.5rem * 2));
1320
+ --_radius: var(--ui-checkbox-radius, var(--ui-radius-sm, 0.25rem));
1321
+ --_bg: var(--ui-checkbox-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
1322
+ --_bg-checked: var(--ui-checkbox-bg-checked, var(--ui-color-primary, hsl(220, 85%, 50%)));
1323
+ --_border-color: var(--ui-checkbox-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
1324
+ --_border-color-focus: var(--ui-checkbox-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
1325
+ --_check-color: var(--ui-checkbox-check-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1326
+ }
1327
+ .checkbox--lg {
1328
+ --_size: var(--ui-checkbox-size-lg, calc(0.5rem * 3));
1329
+ }
1330
+ .checkbox--error {
1331
+ --_border-color: var(--ui-checkbox-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
1332
+ --_border-color-focus: var(--ui-checkbox-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
1333
+ }
1334
+ }
1335
+ @layer components.styles {
1336
+ .checkbox {
1337
+ display: inline-flex;
1338
+ flex-shrink: 0;
1339
+ align-items: center;
1340
+ justify-content: center;
1341
+ block-size: var(--_size);
1342
+ inline-size: var(--_size);
1343
+ margin: 0;
1344
+ vertical-align: middle;
1345
+ background: var(--_bg);
1346
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
1347
+ border-radius: var(--_radius);
1348
+ cursor: pointer;
1349
+ appearance: none;
1350
+ transition: background-color var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), border-color var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), box-shadow var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
1351
+ }
1352
+ .checkbox::before {
1353
+ content: "";
1354
+ block-size: 65%;
1355
+ inline-size: 65%;
1356
+ background-color: var(--_check-color);
1357
+ opacity: 0;
1358
+ clip-path: polygon(20% 55%, 40% 75%, 80% 25%, 85% 30%, 40% 85%, 15% 60%);
1359
+ transition: opacity var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
1360
+ }
1361
+ .checkbox:hover:not(:disabled) {
1362
+ border-color: var(--_border-color-focus);
1363
+ }
1364
+ .checkbox:focus-visible {
1365
+ border-color: var(--_border-color-focus);
1366
+ outline: none;
1367
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
1368
+ }
1369
+ .checkbox:checked {
1370
+ background: var(--_bg-checked);
1371
+ border-color: var(--_bg-checked);
1372
+ }
1373
+ .checkbox:checked::before {
1374
+ opacity: 1;
1375
+ }
1376
+ .checkbox:indeterminate {
1377
+ background: var(--_bg-checked);
1378
+ border-color: var(--_bg-checked);
1379
+ }
1380
+ .checkbox:indeterminate::before {
1381
+ opacity: 1;
1382
+ clip-path: polygon(15% 45%, 85% 45%, 85% 55%, 15% 55%);
1383
+ }
1384
+ .checkbox:disabled {
1385
+ opacity: 0.5;
1386
+ cursor: not-allowed;
1387
+ }
1388
+ }
1389
+ @layer components.tokens {
1390
+ .code {
1391
+ --_font-size: var(--ui-code-font-size, var(--ui-font-size-sm, 0.875rem));
1392
+ --_bg: var(--ui-code-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
1393
+ --_padding-x: var(--ui-code-padding-x, var(--ui-space-1, 0.5rem));
1394
+ --_padding-y: var(--ui-code-padding-y, var(--ui-space-0, 0.25rem));
1395
+ --_radius: var(--ui-code-radius, var(--ui-radius-sm, 0.25rem));
1396
+ }
1397
+ .code--sm {
1398
+ --_font-size: var(--ui-font-size-xs, 0.75rem);
1399
+ }
1400
+ .code-block {
1401
+ --_font-size: var(--ui-code-font-size-block, var(--ui-font-size-sm, 0.875rem));
1402
+ --_bg: var(--ui-code-bg-block, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
1403
+ --_padding: var(--ui-code-padding-block, var(--ui-space-3, 1.5rem));
1404
+ --_radius: var(--ui-code-radius-block, var(--ui-radius-md, 0.5rem));
1405
+ --_border-color: var(--ui-code-border-color-block, var(--ui-color-border, hsl(220, 10%, 90%)));
1406
+ }
1407
+ }
1408
+ @layer components.styles {
1409
+ .code {
1410
+ padding: var(--_padding-y) var(--_padding-x);
1411
+ font-family: var(--ui-font-mono, Noto Sans Mono, ui-monospace, Cascadia Code, monospace);
1412
+ font-size: var(--_font-size);
1413
+ line-height: var(--ui-leading-tight-sm, 1rem);
1414
+ background: var(--_bg);
1415
+ border-radius: var(--_radius);
1416
+ }
1417
+ .code-block {
1418
+ display: block;
1419
+ padding: calc(var(--_padding) - var(--ui-border-width-sm, 0.0625rem));
1420
+ overflow-x: auto;
1421
+ font-family: var(--ui-font-mono, Noto Sans Mono, ui-monospace, Cascadia Code, monospace);
1422
+ font-size: var(--_font-size);
1423
+ line-height: var(--ui-leading-tight-sm, 1rem);
1424
+ white-space: pre;
1425
+ background: var(--_bg);
1426
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
1427
+ border-radius: var(--_radius);
1428
+ }
1429
+ .code-block code {
1430
+ padding: 0;
1431
+ font-size: inherit;
1432
+ background: none;
1433
+ }
1434
+ }
1435
+ @layer components.tokens {
1436
+ .data-list {
1437
+ --_gap: var(--ui-data-list-gap, calc(0.5rem * 2));
1438
+ --_item-gap: var(--ui-data-list-item-gap, calc(0.5rem * 1));
1439
+ --_label-color: var(--ui-data-list-label-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
1440
+ --_value-color: var(--ui-data-list-value-color, var(--ui-color-text, hsl(220, 10%, 10%)));
1441
+ }
1442
+ }
1443
+ @layer components.styles {
1444
+ .data-list {
1445
+ display: flex;
1446
+ flex-direction: column;
1447
+ gap: var(--_gap);
1448
+ margin: 0;
1449
+ line-height: var(--ui-row-1, 1rem);
1450
+ }
1451
+ .data-list__item {
1452
+ display: flex;
1453
+ flex-direction: column;
1454
+ gap: var(--_item-gap);
1455
+ }
1456
+ .data-list__label {
1457
+ font-size: var(--ui-font-size-sm, 0.875rem);
1458
+ font-weight: var(--ui-weight-medium, 500);
1459
+ line-height: var(--ui-row-1, 1rem);
1460
+ color: var(--_label-color);
1461
+ }
1462
+ .data-list__value {
1463
+ margin: 0;
1464
+ line-height: var(--ui-row-1, 1rem);
1465
+ color: var(--_value-color);
1466
+ }
1467
+ .data-list--horizontal .data-list__item {
1468
+ flex-direction: row;
1469
+ align-items: baseline;
1470
+ justify-content: space-between;
1471
+ gap: calc(0.5rem * 2);
1472
+ }
1473
+ .data-list--horizontal .data-list__label {
1474
+ flex-shrink: 0;
1475
+ }
1476
+ .data-list--horizontal .data-list__value {
1477
+ text-align: end;
1478
+ }
1479
+ .data-list--divided .data-list__item {
1480
+ padding-block-end: var(--_gap);
1481
+ border-block-end: 1px solid var(--ui-color-border, hsl(220, 10%, 90%));
1482
+ }
1483
+ .data-list--divided .data-list__item:last-child {
1484
+ padding-block-end: 0;
1485
+ border-block-end: none;
1486
+ }
1487
+ .data-list--striped .data-list__item:nth-child(odd) {
1488
+ padding: calc(0.5rem * 1);
1489
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
1490
+ border-radius: var(--ui-radius-sm, 0.25rem);
1491
+ }
1492
+ .data-list--sm {
1493
+ --_gap: calc(0.5rem * 1);
1494
+ --_item-gap: 0;
1495
+ font-size: var(--ui-font-size-sm, 0.875rem);
1496
+ }
1497
+ .data-list--lg {
1498
+ --_gap: calc(0.5rem * 3);
1499
+ --_item-gap: calc(0.5rem * 1);
1500
+ font-size: var(--ui-font-size-lg, 1.25rem);
1501
+ }
1502
+ }
1503
+ @layer components.tokens {
1504
+ .dialog {
1505
+ --_header-padding: var(--ui-dialog-header-padding, calc(0.5rem * 2) calc(0.5rem * 3));
1506
+ --_body-padding: var(--ui-dialog-body-padding, calc(0.5rem * 3));
1507
+ --_footer-padding: var(--ui-dialog-footer-padding, calc(0.5rem * 2) calc(0.5rem * 3));
1508
+ --_border-color: var(--ui-dialog-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
1509
+ }
1510
+ }
1511
+ @layer components.styles {
1512
+ .dialog .modal__content {
1513
+ padding: 0;
1514
+ }
1515
+ .dialog__header {
1516
+ display: flex;
1517
+ flex-shrink: 0;
1518
+ align-items: center;
1519
+ justify-content: space-between;
1520
+ gap: calc(0.5rem * 2);
1521
+ padding: var(--_header-padding);
1522
+ border-block-end: 1px solid var(--_border-color);
1523
+ }
1524
+ .dialog__title {
1525
+ margin: 0;
1526
+ font-size: var(--ui-font-size-lg, 1.25rem);
1527
+ font-weight: var(--ui-weight-semibold, 600);
1528
+ line-height: calc(0.5rem * 3);
1529
+ }
1530
+ .dialog__close {
1531
+ flex-shrink: 0;
1532
+ margin-inline-start: auto;
1533
+ }
1534
+ .dialog__body {
1535
+ flex: 1 1 auto;
1536
+ padding: var(--_body-padding);
1537
+ overflow-y: auto;
1538
+ }
1539
+ .dialog__footer {
1540
+ display: flex;
1541
+ flex-shrink: 0;
1542
+ align-items: center;
1543
+ justify-content: flex-end;
1544
+ gap: calc(0.5rem * 1.5);
1545
+ padding: var(--_footer-padding);
1546
+ border-block-start: 1px solid var(--_border-color);
1547
+ }
1548
+ .dialog--borderless .dialog__header {
1549
+ border-block-end: none;
1550
+ }
1551
+ .dialog--borderless .dialog__footer {
1552
+ border-block-start: none;
1553
+ }
1554
+ }
1555
+ @layer components.tokens {
1556
+ .disclosure {
1557
+ --_border-color: var(--ui-disclosure-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
1558
+ --_border-width: var(--ui-disclosure-border-width, 1px);
1559
+ --_radius: var(--ui-disclosure-radius, var(--ui-radius-md, calc(0.5rem * 1)));
1560
+ --_trigger-height: var(--ui-disclosure-trigger-height, var(--ui-row-3, calc(1rem * 3)));
1561
+ --_padding-x: var(--ui-disclosure-padding-x, calc(0.5rem * 2));
1562
+ --_padding-y: var(--ui-disclosure-padding-y, calc(0.5rem * 2));
1563
+ }
1564
+ }
1565
+ @layer components.styles {
1566
+ .disclosure {
1567
+ box-sizing: border-box;
1568
+ border-radius: var(--_radius);
1569
+ outline: var(--_border-width) solid var(--_border-color);
1570
+ outline-offset: calc(var(--_border-width) * -1);
1571
+ }
1572
+ .disclosure:not([open]) {
1573
+ block-size: var(--_trigger-height);
1574
+ }
1575
+ .disclosure__trigger {
1576
+ display: flex;
1577
+ align-items: center;
1578
+ justify-content: space-between;
1579
+ gap: calc(0.5rem * 2);
1580
+ block-size: var(--_trigger-height);
1581
+ inline-size: 100%;
1582
+ padding-inline: var(--_padding-x);
1583
+ font-weight: var(--ui-weight-medium, 500);
1584
+ line-height: 1;
1585
+ text-align: start;
1586
+ cursor: pointer;
1587
+ list-style: none;
1588
+ }
1589
+ .disclosure__trigger::-webkit-details-marker {
1590
+ display: none;
1591
+ }
1592
+ .disclosure__trigger::marker {
1593
+ display: none;
1594
+ }
1595
+ .disclosure__trigger:hover {
1596
+ background: var(--ui-color-bg-subtle, rgba(0, 0, 0, 0.02));
1597
+ }
1598
+ .disclosure__icon {
1599
+ flex-shrink: 0;
1600
+ transition: transform var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
1601
+ }
1602
+ .disclosure[open] .disclosure__icon {
1603
+ transform: rotate(180deg);
1604
+ }
1605
+ .disclosure__content {
1606
+ padding: 0 var(--_padding-x) var(--_padding-y);
1607
+ }
1608
+ .disclosure--animate .disclosure__content {
1609
+ animation: disclosure-open var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
1610
+ }
1611
+ @keyframes disclosure-open {
1612
+ from {
1613
+ opacity: 0;
1614
+ transform: translateY(calc(0.5rem * -1));
1615
+ }
1616
+ to {
1617
+ opacity: 1;
1618
+ transform: translateY(0);
1619
+ }
1620
+ }
1621
+ .disclosure--borderless {
1622
+ --_border-width: 0;
1623
+ border: none;
1624
+ border-radius: 0;
1625
+ }
1626
+ .disclosure--flush .disclosure__trigger {
1627
+ padding-inline: 0;
1628
+ }
1629
+ .disclosure--flush .disclosure__content {
1630
+ padding-inline: 0;
1631
+ }
1632
+ }
1633
+ @layer components.tokens {
1634
+ .divider {
1635
+ --_color: var(--ui-divider-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
1636
+ --_line-size: var(--ui-divider-line-size, 1px);
1637
+ --_height: var(--ui-divider-height, 0.5rem);
1638
+ --_gap: var(--ui-divider-gap, calc(0.5rem * 2));
1639
+ }
1640
+ }
1641
+ @layer components.styles {
1642
+ .divider {
1643
+ display: flex;
1644
+ align-items: center;
1645
+ block-size: var(--_height);
1646
+ margin: var(--_gap) 0;
1647
+ font-size: var(--ui-font-size-sm, 0.875rem);
1648
+ line-height: 1;
1649
+ color: var(--ui-color-text-muted);
1650
+ }
1651
+ .divider::before,
1652
+ .divider::after {
1653
+ content: "";
1654
+ flex: 1;
1655
+ block-size: var(--_line-size);
1656
+ background: var(--_color);
1657
+ }
1658
+ .divider:not(:empty) {
1659
+ --_height: var(--ui-row-1, 1rem);
1660
+ }
1661
+ .divider:not(:empty)::before {
1662
+ margin-inline-end: calc(0.5rem * 2);
1663
+ }
1664
+ .divider:not(:empty)::after {
1665
+ margin-inline-start: calc(0.5rem * 2);
1666
+ }
1667
+ .divider:empty::after {
1668
+ display: none;
1669
+ }
1670
+ .divider--vertical {
1671
+ flex-direction: column;
1672
+ align-self: stretch;
1673
+ margin: 0 var(--_gap);
1674
+ writing-mode: vertical-rl;
1675
+ }
1676
+ .divider--vertical::before,
1677
+ .divider--vertical::after {
1678
+ flex: 1;
1679
+ block-size: auto;
1680
+ inline-size: var(--_size);
1681
+ }
1682
+ .divider--start::before {
1683
+ display: none;
1684
+ }
1685
+ .divider--start:not(:empty)::after {
1686
+ margin-inline-start: calc(0.5rem * 2);
1687
+ }
1688
+ .divider--end::after {
1689
+ display: none;
1690
+ }
1691
+ .divider--end:not(:empty)::before {
1692
+ margin-inline-end: calc(0.5rem * 2);
1693
+ }
1694
+ .divider--dashed::before,
1695
+ .divider--dashed::after {
1696
+ background: repeating-linear-gradient(90deg, var(--_color) 0, var(--_color) calc(0.5rem / 2), transparent calc(0.5rem / 2), transparent 0.5rem);
1697
+ }
1698
+ .divider--vertical.divider--dashed::before,
1699
+ .divider--vertical.divider--dashed::after {
1700
+ background: repeating-linear-gradient(180deg, var(--_color) 0, var(--_color) calc(0.5rem / 2), transparent calc(0.5rem / 2), transparent 0.5rem);
1701
+ }
1702
+ }
1703
+ @layer components.tokens {
1704
+ .drawer {
1705
+ --_size: var(--ui-drawer-size, calc(0.5rem * 40));
1706
+ --_max-size: var(--ui-drawer-max-size, 90%);
1707
+ --_bg: var(--ui-drawer-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
1708
+ --_shadow: var(--ui-drawer-shadow, var(--shadow-lg));
1709
+ --_header-padding: var(--ui-drawer-header-padding, calc(0.5rem * 2) calc(0.5rem * 3));
1710
+ --_body-padding: var(--ui-drawer-body-padding, calc(0.5rem * 3));
1711
+ --_footer-padding: var(--ui-drawer-footer-padding, calc(0.5rem * 2) calc(0.5rem * 3));
1712
+ --_border-color: var(--ui-drawer-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
1713
+ }
1714
+ .drawer--sm {
1715
+ --_size: calc(0.5rem * 30);
1716
+ }
1717
+ .drawer--lg {
1718
+ --_size: calc(0.5rem * 50);
1719
+ }
1720
+ .drawer--full {
1721
+ --_size: 100%;
1722
+ --_max-size: 100%;
1723
+ }
1724
+ }
1725
+ @layer components.styles {
1726
+ .drawer-overlay {
1727
+ position: fixed;
1728
+ inset: 0;
1729
+ z-index: var(--ui-z-drawer, 900);
1730
+ background: var(--ui-overlay-bg, rgba(0, 0, 0, 0.5));
1731
+ }
1732
+ .drawer-overlay[data-state=open] {
1733
+ animation: drawer-overlay-in var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1734
+ }
1735
+ .drawer-overlay[data-state=closed] {
1736
+ animation: drawer-overlay-out var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1737
+ }
1738
+ @keyframes drawer-overlay-in {
1739
+ from {
1740
+ opacity: 0;
1741
+ }
1742
+ }
1743
+ @keyframes drawer-overlay-out {
1744
+ to {
1745
+ opacity: 0;
1746
+ }
1747
+ }
1748
+ .drawer {
1749
+ display: flex;
1750
+ flex-direction: column;
1751
+ position: fixed;
1752
+ z-index: var(--ui-z-drawer, 900);
1753
+ background: var(--_bg);
1754
+ box-shadow: var(--_shadow);
1755
+ }
1756
+ .drawer--end {
1757
+ inset-block: 0;
1758
+ inset-inline-end: 0;
1759
+ inline-size: var(--_size);
1760
+ max-inline-size: var(--_max-size);
1761
+ box-shadow: calc(var(--ui-border-width-sm, 1px) * -1) 0 0 var(--_border-color);
1762
+ }
1763
+ .drawer--start {
1764
+ inset-block: 0;
1765
+ inset-inline-start: 0;
1766
+ inline-size: var(--_size);
1767
+ max-inline-size: var(--_max-size);
1768
+ box-shadow: var(--ui-border-width-sm, 1px) 0 0 var(--_border-color);
1769
+ }
1770
+ .drawer--top {
1771
+ inset-block-start: 0;
1772
+ inset-inline: 0;
1773
+ block-size: var(--_size);
1774
+ max-block-size: var(--_max-size);
1775
+ box-shadow: 0 var(--ui-border-width-sm, 1px) 0 var(--_border-color);
1776
+ }
1777
+ .drawer--bottom {
1778
+ inset-block-end: 0;
1779
+ inset-inline: 0;
1780
+ block-size: var(--_size);
1781
+ max-block-size: var(--_max-size);
1782
+ box-shadow: 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
1783
+ }
1784
+ .drawer--end[data-state=open] {
1785
+ animation: drawer-slide-in-end var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1786
+ }
1787
+ .drawer--end[data-state=closed] {
1788
+ animation: drawer-slide-out-end var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1789
+ }
1790
+ .drawer--start[data-state=open] {
1791
+ animation: drawer-slide-in-start var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1792
+ }
1793
+ .drawer--start[data-state=closed] {
1794
+ animation: drawer-slide-out-start var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1795
+ }
1796
+ .drawer--top[data-state=open] {
1797
+ animation: drawer-slide-in-top var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1798
+ }
1799
+ .drawer--top[data-state=closed] {
1800
+ animation: drawer-slide-out-top var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1801
+ }
1802
+ .drawer--bottom[data-state=open] {
1803
+ animation: drawer-slide-in-bottom var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1804
+ }
1805
+ .drawer--bottom[data-state=closed] {
1806
+ animation: drawer-slide-out-bottom var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1807
+ }
1808
+ @keyframes drawer-slide-in-end {
1809
+ from {
1810
+ transform: translateX(100%);
1811
+ }
1812
+ }
1813
+ @keyframes drawer-slide-out-end {
1814
+ to {
1815
+ transform: translateX(100%);
1816
+ }
1817
+ }
1818
+ @keyframes drawer-slide-in-start {
1819
+ from {
1820
+ transform: translateX(-100%);
1821
+ }
1822
+ }
1823
+ @keyframes drawer-slide-out-start {
1824
+ to {
1825
+ transform: translateX(-100%);
1826
+ }
1827
+ }
1828
+ @keyframes drawer-slide-in-top {
1829
+ from {
1830
+ transform: translateY(-100%);
1831
+ }
1832
+ }
1833
+ @keyframes drawer-slide-out-top {
1834
+ to {
1835
+ transform: translateY(-100%);
1836
+ }
1837
+ }
1838
+ @keyframes drawer-slide-in-bottom {
1839
+ from {
1840
+ transform: translateY(100%);
1841
+ }
1842
+ }
1843
+ @keyframes drawer-slide-out-bottom {
1844
+ to {
1845
+ transform: translateY(100%);
1846
+ }
1847
+ }
1848
+ .drawer__header {
1849
+ display: flex;
1850
+ flex-shrink: 0;
1851
+ align-items: center;
1852
+ justify-content: space-between;
1853
+ gap: calc(0.5rem * 2);
1854
+ padding: var(--_header-padding);
1855
+ box-shadow: inset 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
1856
+ }
1857
+ .drawer__title {
1858
+ margin: 0;
1859
+ font-size: var(--ui-font-size-lg, 1.25rem);
1860
+ font-weight: var(--ui-weight-semibold, 600);
1861
+ line-height: var(--ui-row-1, 1rem);
1862
+ }
1863
+ .drawer__description {
1864
+ margin: 0;
1865
+ font-size: var(--ui-font-size-sm, 0.875rem);
1866
+ line-height: var(--ui-row-1, 1rem);
1867
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
1868
+ }
1869
+ .drawer__close {
1870
+ flex-shrink: 0;
1871
+ margin-inline-start: auto;
1872
+ }
1873
+ .drawer__body {
1874
+ flex: 1 1 auto;
1875
+ padding: var(--_body-padding);
1876
+ overflow-y: auto;
1877
+ line-height: var(--ui-row-1, 1rem);
1878
+ }
1879
+ .drawer__footer {
1880
+ display: flex;
1881
+ flex-shrink: 0;
1882
+ align-items: center;
1883
+ justify-content: flex-end;
1884
+ gap: calc(0.5rem * 2);
1885
+ padding: var(--_footer-padding);
1886
+ box-shadow: inset 0 var(--ui-border-width-sm, 1px) 0 var(--_border-color);
1887
+ }
1888
+ }
1889
+ @layer components.tokens {
1890
+ .field {
1891
+ --_gap: var(--ui-field-gap, 0);
1892
+ }
1893
+ }
1894
+ @layer components.styles {
1895
+ .field {
1896
+ display: flex;
1897
+ flex-direction: column;
1898
+ gap: var(--_gap);
1899
+ }
1900
+ .field__control {
1901
+ display: flex;
1902
+ flex-direction: column;
1903
+ }
1904
+ .field--horizontal {
1905
+ flex-direction: row;
1906
+ flex-wrap: wrap;
1907
+ align-items: flex-start;
1908
+ }
1909
+ .field--horizontal > .field__label {
1910
+ flex: 0 0 auto;
1911
+ min-inline-size: calc(0.5rem * 15);
1912
+ padding-block-start: calc(0.5rem * 1);
1913
+ }
1914
+ .field--horizontal > .field__control {
1915
+ flex: 1 1 0;
1916
+ min-inline-size: calc(0.5rem * 20);
1917
+ }
1918
+ }
1919
+ @layer components.tokens {
1920
+ .form-error {
1921
+ --_color: var(--ui-form-error-color, var(--ui-color-danger));
1922
+ --_size: var(--ui-form-error-size, var(--ui-font-size-sm, 0.875rem));
1923
+ --_gap: var(--ui-form-error-gap, 0);
1924
+ }
1925
+ }
1926
+ @layer components.styles {
1927
+ .form-error {
1928
+ display: flex;
1929
+ align-items: flex-start;
1930
+ gap: var(--_gap);
1931
+ margin-block-start: var(--_gap);
1932
+ font-size: var(--_size);
1933
+ line-height: var(--ui-leading-tight-sm, var(--ui-row-1));
1934
+ color: var(--_color);
1935
+ }
1936
+ .form-error__icon {
1937
+ flex-shrink: 0;
1938
+ }
1939
+ }
1940
+ @layer components.tokens {
1941
+ .form-helper {
1942
+ --_color: var(--ui-form-helper-color, var(--ui-color-text-muted));
1943
+ --_size: var(--ui-form-helper-size, var(--ui-font-size-sm, 0.875rem));
1944
+ --_gap: var(--ui-form-helper-gap, 0);
1945
+ }
1946
+ }
1947
+ @layer components.styles {
1948
+ .form-helper {
1949
+ display: block;
1950
+ margin-block-start: var(--_gap);
1951
+ font-size: var(--_size);
1952
+ line-height: var(--ui-leading-tight-sm, var(--ui-row-1));
1953
+ color: var(--_color);
1954
+ }
1955
+ }
1956
+ @layer components.tokens {
1957
+ .heading {
1958
+ --_font-size: var(--ui-heading-font-size, var(--ui-font-size-xl, 1.5rem));
1959
+ --_line-height: var(--ui-heading-line-height, var(--ui-leading-xl, 2rem));
1960
+ --_weight: var(--ui-heading-weight, var(--ui-weight-bold, 700));
1961
+ --_color: var(--ui-heading-color, var(--ui-color-text, hsl(220, 10%, 10%)));
1962
+ }
1963
+ .heading--4xl {
1964
+ --_font-size: var(--ui-heading-font-size-4xl, var(--ui-font-size-4xl, 2.5rem));
1965
+ --_line-height: var(--ui-heading-line-height-4xl, var(--ui-leading-4xl, 3rem));
1966
+ }
1967
+ .heading--3xl {
1968
+ --_font-size: var(--ui-heading-font-size-3xl, var(--ui-font-size-3xl, 2rem));
1969
+ --_line-height: var(--ui-heading-line-height-3xl, var(--ui-leading-3xl, 2.5rem));
1970
+ }
1971
+ .heading--2xl {
1972
+ --_font-size: var(--ui-heading-font-size-2xl, var(--ui-font-size-2xl, 1.75rem));
1973
+ --_line-height: var(--ui-heading-line-height-2xl, var(--ui-leading-2xl, 2rem));
1974
+ }
1975
+ .heading--xl {
1976
+ --_font-size: var(--ui-heading-font-size-xl, var(--ui-font-size-xl, 1.5rem));
1977
+ --_line-height: var(--ui-heading-line-height-xl, var(--ui-leading-xl, 2rem));
1978
+ }
1979
+ .heading--lg {
1980
+ --_font-size: var(--ui-heading-font-size-lg, var(--ui-font-size-lg, 1.25rem));
1981
+ --_line-height: var(--ui-heading-line-height-lg, var(--ui-leading-lg, 2rem));
1982
+ }
1983
+ .heading--md {
1984
+ --_font-size: var(--ui-heading-font-size-md, var(--ui-font-size-md, 1rem));
1985
+ --_line-height: var(--ui-heading-line-height-md, var(--ui-leading-tight-md, 1.5rem));
1986
+ }
1987
+ .heading--sm {
1988
+ --_font-size: var(--ui-heading-font-size-sm, var(--ui-font-size-sm, 0.875rem));
1989
+ --_line-height: var(--ui-heading-line-height-sm, var(--ui-leading-tight-sm, 1rem));
1990
+ }
1991
+ }
1992
+ @layer components.styles {
1993
+ .heading {
1994
+ margin: 0;
1995
+ font-size: var(--_font-size);
1996
+ font-weight: var(--_weight);
1997
+ line-height: var(--_line-height);
1998
+ color: var(--_color);
1999
+ }
2000
+ }
2001
+ @layer components.tokens {
2002
+ .icon {
2003
+ --_size: var(--ui-icon-size, 1em);
2004
+ --_stroke: var(--ui-icon-stroke, 2);
2005
+ }
2006
+ .icon--xs {
2007
+ --_size: var(--ui-icon-size-xs, calc(0.5rem * 2));
2008
+ }
2009
+ .icon--sm {
2010
+ --_size: var(--ui-icon-size-sm, calc(0.5rem * 3));
2011
+ }
2012
+ .icon--md {
2013
+ --_size: var(--ui-icon-size-md, calc(0.5rem * 4));
2014
+ }
2015
+ .icon--lg {
2016
+ --_size: var(--ui-icon-size-lg, calc(0.5rem * 5));
2017
+ }
2018
+ .icon--xl {
2019
+ --_size: var(--ui-icon-size-xl, calc(0.5rem * 6));
2020
+ }
2021
+ .icon--stroke-thin {
2022
+ --_stroke: var(--ui-icon-stroke-thin, 1);
2023
+ }
2024
+ .icon--stroke-thick {
2025
+ --_stroke: var(--ui-icon-stroke-thick, 2.5);
2026
+ }
2027
+ }
2028
+ @layer components.styles {
2029
+ .icon {
2030
+ display: inline-block;
2031
+ flex-shrink: 0;
2032
+ block-size: var(--_size);
2033
+ inline-size: var(--_size);
2034
+ vertical-align: middle;
2035
+ color: currentcolor;
2036
+ fill: none;
2037
+ stroke: currentcolor;
2038
+ stroke-width: var(--_stroke);
2039
+ stroke-linecap: round;
2040
+ stroke-linejoin: round;
2041
+ }
2042
+ .icon--filled {
2043
+ fill: currentcolor;
2044
+ stroke: none;
2045
+ }
2046
+ .icon--spin {
2047
+ animation: icon-spin 1s linear infinite;
2048
+ }
2049
+ @keyframes icon-spin {
2050
+ to {
2051
+ transform: rotate(360deg);
2052
+ }
2053
+ }
2054
+ }
2055
+ @layer components.tokens {
2056
+ .input {
2057
+ --_height: var(--ui-input-height, var(--ui-row-2, 2rem));
2058
+ --_padding-x: var(--ui-input-padding-x, var(--ui-space-1, 0.5rem));
2059
+ --_font-size: var(--ui-input-font-size, var(--ui-font-size-sm, 0.875rem));
2060
+ --_radius: var(--ui-input-radius, var(--ui-radius-md, 0.5rem));
2061
+ --_bg: var(--ui-input-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2062
+ --_border-color: var(--ui-input-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2063
+ --_border-color-focus: var(--ui-input-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
2064
+ --_text: var(--ui-input-text, var(--ui-color-text, hsl(220, 10%, 10%)));
2065
+ --_placeholder: var(--ui-input-placeholder, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2066
+ }
2067
+ .input--sm {
2068
+ --_height: var(--ui-input-height-sm, calc(1rem * 1.5));
2069
+ --_font-size: var(--ui-input-font-size-sm, var(--ui-font-size-xs, 0.75rem));
2070
+ }
2071
+ .input--lg {
2072
+ --_height: var(--ui-input-height-lg, calc(1rem * 2.5));
2073
+ --_padding-x: var(--ui-input-padding-x-lg, var(--ui-space-2, 1rem));
2074
+ --_font-size: var(--ui-input-font-size-lg, var(--ui-font-size-md, 1rem));
2075
+ }
2076
+ .input--filled {
2077
+ --_bg: var(--ui-input-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2078
+ --_border-color: transparent;
2079
+ }
2080
+ .input--ghost {
2081
+ --_bg: transparent;
2082
+ --_border-color: transparent;
2083
+ }
2084
+ .input--error {
2085
+ --_border-color: var(--ui-input-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2086
+ --_border-color-focus: var(--ui-input-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2087
+ }
2088
+ .input--success {
2089
+ --_border-color: var(--ui-input-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
2090
+ --_border-color-focus: var(--ui-input-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
2091
+ }
2092
+ }
2093
+ @layer components.styles {
2094
+ .input {
2095
+ display: inline-flex;
2096
+ align-items: center;
2097
+ block-size: var(--_height);
2098
+ padding-inline: var(--_padding-x);
2099
+ font-family: inherit;
2100
+ font-size: var(--_font-size);
2101
+ line-height: 1;
2102
+ color: var(--_text);
2103
+ background: var(--_bg);
2104
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2105
+ border-radius: var(--_radius);
2106
+ transition: border-color var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), box-shadow var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
2107
+ }
2108
+ .input::placeholder {
2109
+ color: var(--_placeholder);
2110
+ }
2111
+ .input:hover:not(:disabled, :focus) {
2112
+ border-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
2113
+ }
2114
+ .input:focus, .input--focus {
2115
+ border-color: var(--_border-color-focus);
2116
+ outline: none;
2117
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
2118
+ }
2119
+ .input:disabled, .input--disabled {
2120
+ opacity: 0.5;
2121
+ cursor: not-allowed;
2122
+ }
2123
+ .input:read-only {
2124
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
2125
+ }
2126
+ .input--block {
2127
+ inline-size: 100%;
2128
+ }
2129
+ .input-group {
2130
+ display: inline-flex;
2131
+ align-items: stretch;
2132
+ position: relative;
2133
+ }
2134
+ .input-group .input {
2135
+ flex: 1;
2136
+ }
2137
+ .input-group--has-prefix .input {
2138
+ padding-inline-start: calc(var(--_height) + var(--ui-space-half, 0.25rem));
2139
+ }
2140
+ .input-group--has-suffix .input {
2141
+ padding-inline-end: calc(var(--_height) + var(--ui-space-half, 0.25rem));
2142
+ }
2143
+ .input-group__addon {
2144
+ display: flex;
2145
+ align-items: center;
2146
+ justify-content: center;
2147
+ position: absolute;
2148
+ inset-block: 0;
2149
+ inline-size: var(--_height, 2rem);
2150
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2151
+ pointer-events: none;
2152
+ }
2153
+ .input-group__addon--start {
2154
+ inset-inline-start: 0;
2155
+ }
2156
+ .input-group__addon--end {
2157
+ inset-inline-end: 0;
2158
+ }
2159
+ .input-group__addon--interactive {
2160
+ cursor: pointer;
2161
+ pointer-events: auto;
2162
+ }
2163
+ }
2164
+ @layer components.tokens {
2165
+ .label {
2166
+ --_font-size: var(--ui-label-font-size, var(--ui-font-size-sm, 0.875rem));
2167
+ --_color: var(--ui-label-color, var(--ui-color-text, hsl(220, 10%, 10%)));
2168
+ --_required-color: var(--ui-label-required-color, var(--ui-color-danger, hsl(0, 70%, 50%)));
2169
+ }
2170
+ .label--lg {
2171
+ --_font-size: var(--ui-label-font-size-lg, var(--ui-font-size-md, 1rem));
2172
+ }
2173
+ }
2174
+ @layer components.styles {
2175
+ .label {
2176
+ display: inline-flex;
2177
+ align-items: baseline;
2178
+ gap: 0;
2179
+ font-size: var(--_font-size);
2180
+ font-weight: var(--ui-weight-medium, 500);
2181
+ line-height: var(--ui-leading-tight-sm, var(--ui-row-1));
2182
+ color: var(--_color);
2183
+ cursor: pointer;
2184
+ }
2185
+ .label[aria-disabled=true] {
2186
+ opacity: 0.5;
2187
+ cursor: not-allowed;
2188
+ }
2189
+ .label__required {
2190
+ color: var(--_required-color);
2191
+ }
2192
+ .label__optional {
2193
+ font-weight: var(--ui-weight-normal, 400);
2194
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2195
+ }
2196
+ }
2197
+ @layer components.tokens {
2198
+ .link {
2199
+ --_color: var(--ui-link-color, var(--ui-color-primary));
2200
+ --_color-hover: var(--ui-link-color-hover, var(--ui-color-primary-hover, color-mix(in srgb, var(--_color) 85%, black)));
2201
+ --_color-visited: var(--ui-link-color-visited, var(--_color));
2202
+ --_decoration: var(--ui-link-decoration, underline);
2203
+ --_decoration-hover: var(--ui-link-decoration-hover, underline);
2204
+ }
2205
+ .link--muted {
2206
+ --_color: var(--ui-link-color-muted, var(--ui-color-text-muted));
2207
+ --_color-hover: var(--ui-link-color-muted-hover, var(--ui-color-text));
2208
+ }
2209
+ .link--subtle {
2210
+ --_decoration: none;
2211
+ --_decoration-hover: underline;
2212
+ }
2213
+ }
2214
+ @layer components.styles {
2215
+ .link {
2216
+ text-decoration: var(--_decoration);
2217
+ color: var(--_color);
2218
+ cursor: pointer;
2219
+ transition: color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2220
+ text-underline-offset: calc(0.5rem / 4);
2221
+ }
2222
+ .link:hover {
2223
+ text-decoration: var(--_decoration-hover);
2224
+ color: var(--_color-hover);
2225
+ }
2226
+ .link:focus-visible {
2227
+ border-radius: calc(0.5rem / 4);
2228
+ outline: 2px solid var(--ui-color-focus, var(--ui-color-primary));
2229
+ outline-offset: calc(0.5rem / 4);
2230
+ }
2231
+ .link:visited {
2232
+ color: var(--_color-visited);
2233
+ }
2234
+ .link--disabled,
2235
+ .link[aria-disabled=true] {
2236
+ color: var(--ui-color-text-muted);
2237
+ opacity: 0.6;
2238
+ cursor: not-allowed;
2239
+ pointer-events: none;
2240
+ }
2241
+ .link--external::after {
2242
+ content: "↗";
2243
+ display: inline-block;
2244
+ margin-inline-start: calc(0.5rem / 4);
2245
+ font-size: 0.75em;
2246
+ }
2247
+ }
2248
+ @layer components.tokens {
2249
+ .menu {
2250
+ --_min-width: var(--ui-menu-min-width, calc(0.5rem * 16));
2251
+ --_max-height: var(--ui-menu-max-height, calc(0.5rem * 40));
2252
+ --_padding: var(--ui-menu-padding, calc(0.5rem * 1));
2253
+ --_radius: var(--ui-menu-radius, var(--ui-radius-md, 0.5rem));
2254
+ --_bg: var(--ui-menu-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2255
+ --_border-color: var(--ui-menu-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
2256
+ --_shadow: var(--ui-menu-shadow, var(--shadow-lg));
2257
+ --_item-padding: var(--ui-menu-item-padding, calc(0.5rem * 1) calc(0.5rem * 2));
2258
+ --_item-radius: var(--ui-menu-item-radius, var(--ui-radius-sm, 0.25rem));
2259
+ --_item-bg-hover: var(--ui-menu-item-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
2260
+ }
2261
+ }
2262
+ @layer components.styles {
2263
+ .menu {
2264
+ min-inline-size: var(--_min-width);
2265
+ max-block-size: var(--_max-height);
2266
+ padding: var(--_padding);
2267
+ overflow-y: auto;
2268
+ background: var(--_bg);
2269
+ border-radius: var(--_radius);
2270
+ outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2271
+ box-shadow: var(--_shadow);
2272
+ outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
2273
+ }
2274
+ .menu__group {
2275
+ padding: 0;
2276
+ margin: 0;
2277
+ list-style: none;
2278
+ }
2279
+ .menu__label {
2280
+ padding: var(--_item-padding);
2281
+ font-size: var(--ui-font-size-xs, 0.75rem);
2282
+ font-weight: var(--ui-weight-medium, 500);
2283
+ line-height: var(--ui-row-1, 1rem);
2284
+ letter-spacing: 0.05em;
2285
+ text-transform: uppercase;
2286
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2287
+ }
2288
+ .menu__item {
2289
+ display: flex;
2290
+ align-items: center;
2291
+ gap: calc(0.5rem * 1);
2292
+ padding: var(--_item-padding);
2293
+ font-size: var(--ui-font-size-sm, 0.875rem);
2294
+ line-height: var(--ui-row-1, 1rem);
2295
+ text-decoration: none;
2296
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
2297
+ background: transparent;
2298
+ border: none;
2299
+ border-radius: var(--_item-radius);
2300
+ cursor: pointer;
2301
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2302
+ }
2303
+ .menu__item:hover, .menu__item:focus-visible {
2304
+ background: var(--_item-bg-hover);
2305
+ outline: none;
2306
+ }
2307
+ .menu__item--danger {
2308
+ color: var(--ui-color-danger, hsl(0, 70%, 50%));
2309
+ }
2310
+ .menu__item--danger:hover, .menu__item--danger:focus-visible {
2311
+ color: var(--ui-color-danger, hsl(0, 70%, 50%));
2312
+ }
2313
+ .menu__item--disabled,
2314
+ .menu__item[aria-disabled=true] {
2315
+ opacity: 0.5;
2316
+ pointer-events: none;
2317
+ }
2318
+ .menu__item-icon {
2319
+ flex-shrink: 0;
2320
+ block-size: calc(0.5rem * 2);
2321
+ inline-size: calc(0.5rem * 2);
2322
+ }
2323
+ .menu__item-shortcut {
2324
+ margin-inline-start: auto;
2325
+ font-size: var(--ui-font-size-xs, 0.75rem);
2326
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2327
+ }
2328
+ .menu__separator {
2329
+ display: flex;
2330
+ align-items: center;
2331
+ block-size: calc(0.5rem * 2);
2332
+ margin: 0;
2333
+ }
2334
+ .menu__separator::before {
2335
+ content: "";
2336
+ flex: 1;
2337
+ block-size: var(--ui-border-width-sm, 1px);
2338
+ background: var(--ui-color-border, hsl(220, 10%, 90%));
2339
+ }
2340
+ .menu__item--check,
2341
+ .menu__item--radio {
2342
+ position: relative;
2343
+ padding-inline-start: calc(0.5rem * 4);
2344
+ }
2345
+ .menu__item-indicator {
2346
+ display: flex;
2347
+ align-items: center;
2348
+ justify-content: center;
2349
+ position: absolute;
2350
+ inset-inline-start: calc(0.5rem * 1);
2351
+ block-size: calc(0.5rem * 2);
2352
+ inline-size: calc(0.5rem * 2);
2353
+ }
2354
+ }
2355
+ @layer components.tokens {
2356
+ .modal {
2357
+ --_bg: var(--ui-modal-bg, var(--ui-color-bg, white));
2358
+ --_radius: var(--ui-modal-radius, var(--ui-radius-lg, calc(0.5rem * 1.5)));
2359
+ --_shadow: var(--ui-modal-shadow, 0 calc(0.5rem * 3) calc(0.5rem * 6) rgb(0 0 0 / 0.25));
2360
+ --_padding: var(--ui-modal-padding, calc(0.5rem * 3));
2361
+ --_max-width: var(--ui-modal-max-width, calc(0.5rem * 60));
2362
+ --_max-height: var(--ui-modal-max-height, calc(100vh - 0.5rem * 8));
2363
+ --_z: var(--ui-modal-z, var(--ui-z-modal, 400));
2364
+ }
2365
+ .modal--sm {
2366
+ --_max-width: var(--ui-modal-max-width-sm, calc(0.5rem * 40));
2367
+ }
2368
+ .modal--lg {
2369
+ --_max-width: var(--ui-modal-max-width-lg, calc(0.5rem * 80));
2370
+ }
2371
+ .modal--full {
2372
+ --_max-width: calc(100vw - 0.5rem * 4);
2373
+ --_max-height: calc(100vh - 0.5rem * 4);
2374
+ --_radius: 0;
2375
+ }
2376
+ }
2377
+ @layer components.styles {
2378
+ .modal {
2379
+ display: flex;
2380
+ align-items: center;
2381
+ justify-content: center;
2382
+ position: fixed;
2383
+ inset: 0;
2384
+ z-index: var(--_z);
2385
+ padding: calc(0.5rem * 2);
2386
+ }
2387
+ .modal__content {
2388
+ display: flex;
2389
+ flex-direction: column;
2390
+ position: relative;
2391
+ inline-size: 100%;
2392
+ max-block-size: var(--_max-height);
2393
+ max-inline-size: var(--_max-width);
2394
+ padding: var(--_padding);
2395
+ overflow: hidden;
2396
+ background: var(--_bg);
2397
+ border-radius: var(--_radius);
2398
+ box-shadow: var(--_shadow);
2399
+ }
2400
+ .modal__body {
2401
+ flex: 1 1 auto;
2402
+ overflow-y: auto;
2403
+ }
2404
+ .modal--entering .modal__content,
2405
+ .modal--visible .modal__content {
2406
+ opacity: 1;
2407
+ transform: scale(1);
2408
+ }
2409
+ .modal--exiting .modal__content,
2410
+ .modal--hidden .modal__content {
2411
+ opacity: 0;
2412
+ transform: scale(0.95);
2413
+ }
2414
+ .modal--animate .modal__content {
2415
+ transition: opacity var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease), transform var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
2416
+ }
2417
+ .modal--hidden {
2418
+ visibility: hidden;
2419
+ pointer-events: none;
2420
+ }
2421
+ }
2422
+ @layer components.tokens {
2423
+ .overlay {
2424
+ --_bg: var(--ui-overlay-bg, rgb(0 0 0 / 0.5));
2425
+ --_z: var(--ui-overlay-z, var(--ui-z-overlay, 300));
2426
+ }
2427
+ .overlay--light {
2428
+ --_bg: var(--ui-overlay-bg-light, rgb(255 255 255 / 0.7));
2429
+ }
2430
+ .overlay--blur {
2431
+ --_bg: var(--ui-overlay-bg-blur, rgb(0 0 0 / 0.3));
2432
+ }
2433
+ }
2434
+ @layer components.styles {
2435
+ .overlay {
2436
+ position: fixed;
2437
+ inset: 0;
2438
+ z-index: var(--_z);
2439
+ background: var(--_bg);
2440
+ }
2441
+ .overlay--blur {
2442
+ backdrop-filter: blur(calc(0.5rem * 0.5));
2443
+ }
2444
+ .overlay--entering,
2445
+ .overlay--visible {
2446
+ opacity: 1;
2447
+ }
2448
+ .overlay--exiting,
2449
+ .overlay--hidden {
2450
+ opacity: 0;
2451
+ pointer-events: none;
2452
+ }
2453
+ .overlay--animate {
2454
+ transition: opacity var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
2455
+ }
2456
+ }
2457
+ @layer components.tokens {
2458
+ .pagination {
2459
+ --_gap: var(--ui-pagination-gap, calc(0.5rem * 0.5));
2460
+ --_item-size: var(--ui-pagination-item-size, calc(0.5rem * 4));
2461
+ --_item-radius: var(--ui-pagination-item-radius, var(--ui-radius-sm, 0.25rem));
2462
+ --_item-bg: var(--ui-pagination-item-bg, transparent);
2463
+ --_item-bg-hover: var(--ui-pagination-item-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
2464
+ --_item-bg-active: var(--ui-pagination-item-bg-active, var(--ui-color-primary));
2465
+ --_item-color: var(--ui-pagination-item-color, var(--ui-color-text, hsl(220, 10%, 10%)));
2466
+ --_item-color-active: var(--ui-pagination-item-color-active, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
2467
+ }
2468
+ }
2469
+ @layer components.styles {
2470
+ .pagination {
2471
+ display: flex;
2472
+ align-items: center;
2473
+ gap: var(--_gap);
2474
+ }
2475
+ .pagination__list {
2476
+ display: flex;
2477
+ align-items: center;
2478
+ gap: var(--_gap);
2479
+ padding: 0;
2480
+ margin: 0;
2481
+ list-style: none;
2482
+ }
2483
+ .pagination__item {
2484
+ display: flex;
2485
+ }
2486
+ .pagination__link {
2487
+ display: inline-flex;
2488
+ align-items: center;
2489
+ justify-content: center;
2490
+ block-size: var(--_item-size);
2491
+ min-inline-size: var(--_item-size);
2492
+ padding-inline: calc(0.5rem * 1);
2493
+ font-size: var(--ui-font-size-sm, 0.875rem);
2494
+ text-decoration: none;
2495
+ color: var(--_item-color);
2496
+ background: var(--_item-bg);
2497
+ border-radius: var(--_item-radius);
2498
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease), color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2499
+ }
2500
+ .pagination__link:hover {
2501
+ background: var(--_item-bg-hover);
2502
+ }
2503
+ .pagination__link[aria-current=page],
2504
+ .pagination__link--active {
2505
+ color: var(--_item-color-active);
2506
+ background: var(--_item-bg-active);
2507
+ pointer-events: none;
2508
+ }
2509
+ .pagination__link[aria-disabled=true],
2510
+ .pagination__link--disabled {
2511
+ opacity: 0.5;
2512
+ pointer-events: none;
2513
+ }
2514
+ .pagination__prev,
2515
+ .pagination__next {
2516
+ display: inline-flex;
2517
+ align-items: center;
2518
+ gap: calc(0.5rem * 0.5);
2519
+ padding-inline: calc(0.5rem * 1.5);
2520
+ }
2521
+ .pagination__ellipsis {
2522
+ display: inline-flex;
2523
+ align-items: center;
2524
+ justify-content: center;
2525
+ block-size: var(--_item-size);
2526
+ min-inline-size: var(--_item-size);
2527
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2528
+ }
2529
+ .pagination--sm {
2530
+ --_item-size: calc(0.5rem * 3);
2531
+ --_gap: calc(0.5rem * 0.25);
2532
+ }
2533
+ .pagination--lg {
2534
+ --_item-size: calc(0.5rem * 5);
2535
+ --_gap: calc(0.5rem * 0.75);
2536
+ }
2537
+ }
2538
+ @layer components.tokens {
2539
+ .popover {
2540
+ --_bg: var(--ui-popover-bg, var(--ui-color-bg, white));
2541
+ --_border-color: var(--ui-popover-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
2542
+ --_radius: var(--ui-popover-radius, var(--ui-radius-md, calc(0.5rem * 1)));
2543
+ --_shadow: var(--ui-popover-shadow, 0 calc(0.5rem / 2) calc(0.5rem * 2) rgb(0 0 0 / 0.15));
2544
+ --_padding: var(--ui-popover-padding, calc(0.5rem * 2));
2545
+ --_max-width: var(--ui-popover-max-width, calc(0.5rem * 40));
2546
+ --_z: var(--ui-popover-z, var(--ui-z-popover, 500));
2547
+ --_arrow-size: var(--ui-popover-arrow-size, calc(0.5rem));
2548
+ }
2549
+ }
2550
+ @layer components.styles {
2551
+ .popover {
2552
+ position: absolute;
2553
+ z-index: var(--_z);
2554
+ max-inline-size: var(--_max-width);
2555
+ padding: var(--_padding);
2556
+ line-height: var(--ui-row-1, 1rem);
2557
+ background: var(--_bg);
2558
+ border-radius: var(--_radius);
2559
+ outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2560
+ box-shadow: var(--_shadow);
2561
+ outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
2562
+ }
2563
+ .popover__header {
2564
+ padding-block-end: calc(0.5rem * 2);
2565
+ margin-block-end: calc(0.5rem * 2);
2566
+ box-shadow: inset 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
2567
+ }
2568
+ .popover__title {
2569
+ margin: 0;
2570
+ font-size: var(--ui-font-size-md, 1rem);
2571
+ font-weight: var(--ui-weight-semibold, 600);
2572
+ }
2573
+ .popover--top::after {
2574
+ content: "";
2575
+ position: absolute;
2576
+ inset-block-start: 100%;
2577
+ inset-inline-start: 50%;
2578
+ border: var(--_arrow-size) solid transparent;
2579
+ border-block-start-color: var(--_bg);
2580
+ transform: translateX(-50%);
2581
+ }
2582
+ .popover--top::before {
2583
+ content: "";
2584
+ position: absolute;
2585
+ inset-block-start: 100%;
2586
+ inset-inline-start: 50%;
2587
+ border: calc(var(--_arrow-size) + 1px) solid transparent;
2588
+ border-block-start-color: var(--_border-color);
2589
+ transform: translateX(-50%);
2590
+ }
2591
+ .popover--bottom::after {
2592
+ content: "";
2593
+ position: absolute;
2594
+ inset-block-end: 100%;
2595
+ inset-inline-start: 50%;
2596
+ border: var(--_arrow-size) solid transparent;
2597
+ border-block-end-color: var(--_bg);
2598
+ transform: translateX(-50%);
2599
+ }
2600
+ .popover--bottom::before {
2601
+ content: "";
2602
+ position: absolute;
2603
+ inset-block-end: 100%;
2604
+ inset-inline-start: 50%;
2605
+ border: calc(var(--_arrow-size) + 1px) solid transparent;
2606
+ border-block-end-color: var(--_border-color);
2607
+ transform: translateX(-50%);
2608
+ }
2609
+ .popover--visible {
2610
+ opacity: 1;
2611
+ }
2612
+ .popover--hidden {
2613
+ opacity: 0;
2614
+ pointer-events: none;
2615
+ }
2616
+ .popover--animate {
2617
+ transition: opacity var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2618
+ }
2619
+ }
2620
+ @layer components.tokens {
2621
+ .progress {
2622
+ --_height: var(--ui-progress-height, calc(0.5rem * 1));
2623
+ --_bg: var(--ui-progress-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
2624
+ --_fill: var(--ui-progress-fill, var(--ui-color-primary));
2625
+ --_radius: var(--ui-progress-radius, var(--ui-radius-full, 9999px));
2626
+ }
2627
+ .progress--sm {
2628
+ --_height: calc(0.5rem * 1);
2629
+ }
2630
+ .progress--lg {
2631
+ --_height: calc(0.5rem * 2);
2632
+ }
2633
+ }
2634
+ @layer components.styles {
2635
+ .progress {
2636
+ position: relative;
2637
+ block-size: var(--_height);
2638
+ overflow: hidden;
2639
+ background: var(--_bg);
2640
+ border-radius: var(--_radius);
2641
+ }
2642
+ .progress__bar {
2643
+ block-size: 100%;
2644
+ background: var(--_fill);
2645
+ border-radius: var(--_radius);
2646
+ transition: inline-size var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
2647
+ }
2648
+ .progress--indeterminate .progress__bar {
2649
+ inline-size: 30%;
2650
+ animation: progress-indeterminate 1.5s infinite ease-in-out;
2651
+ }
2652
+ @keyframes progress-indeterminate {
2653
+ 0% {
2654
+ transform: translateX(-100%);
2655
+ }
2656
+ 100% {
2657
+ transform: translateX(400%);
2658
+ }
2659
+ }
2660
+ .progress--striped .progress__bar {
2661
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
2662
+ background-size: 0.5rem 0.5rem;
2663
+ }
2664
+ .progress--animated .progress__bar {
2665
+ animation: progress-stripes 1s linear infinite;
2666
+ }
2667
+ @keyframes progress-stripes {
2668
+ from {
2669
+ background-position: 0.5rem 0;
2670
+ }
2671
+ to {
2672
+ background-position: 0 0;
2673
+ }
2674
+ }
2675
+ .progress--success {
2676
+ --_fill: var(--ui-color-success);
2677
+ }
2678
+ .progress--warning {
2679
+ --_fill: var(--ui-color-warning);
2680
+ }
2681
+ .progress--danger {
2682
+ --_fill: var(--ui-color-danger);
2683
+ }
2684
+ }
2685
+ @layer components.tokens {
2686
+ .radio {
2687
+ --_size: var(--ui-radio-size, calc(0.5rem * 2));
2688
+ --_bg: var(--ui-radio-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2689
+ --_bg-checked: var(--ui-radio-bg-checked, var(--ui-color-primary, hsl(220, 85%, 50%)));
2690
+ --_border-color: var(--ui-radio-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2691
+ --_border-color-focus: var(--ui-radio-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
2692
+ --_dot-color: var(--ui-radio-dot-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
2693
+ }
2694
+ .radio--lg {
2695
+ --_size: var(--ui-radio-size-lg, calc(0.5rem * 3));
2696
+ }
2697
+ .radio--error {
2698
+ --_border-color: var(--ui-radio-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2699
+ --_border-color-focus: var(--ui-radio-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2700
+ }
2701
+ }
2702
+ @layer components.styles {
2703
+ .radio {
2704
+ display: inline-flex;
2705
+ flex-shrink: 0;
2706
+ align-items: center;
2707
+ justify-content: center;
2708
+ block-size: var(--_size);
2709
+ inline-size: var(--_size);
2710
+ margin: 0;
2711
+ vertical-align: middle;
2712
+ background: var(--_bg);
2713
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2714
+ border-radius: 50%;
2715
+ cursor: pointer;
2716
+ appearance: none;
2717
+ transition: background-color var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), border-color var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), box-shadow var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
2718
+ }
2719
+ .radio::before {
2720
+ content: "";
2721
+ block-size: 50%;
2722
+ inline-size: 50%;
2723
+ background-color: var(--_dot-color);
2724
+ border-radius: 50%;
2725
+ opacity: 0;
2726
+ transform: scale(0);
2727
+ transition: opacity var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), transform var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
2728
+ }
2729
+ .radio:hover:not(:disabled) {
2730
+ border-color: var(--_border-color-focus);
2731
+ }
2732
+ .radio:focus-visible {
2733
+ border-color: var(--_border-color-focus);
2734
+ outline: none;
2735
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
2736
+ }
2737
+ .radio:checked {
2738
+ background: var(--_bg-checked);
2739
+ border-color: var(--_bg-checked);
2740
+ }
2741
+ .radio:checked::before {
2742
+ opacity: 1;
2743
+ transform: scale(1);
2744
+ }
2745
+ .radio:disabled {
2746
+ opacity: 0.5;
2747
+ cursor: not-allowed;
2748
+ }
2749
+ }
2750
+ @layer components.tokens {
2751
+ .select {
2752
+ --_height: var(--ui-select-height, var(--ui-row-2, 2rem));
2753
+ --_padding-x: var(--ui-select-padding-x, var(--ui-space-1, 0.5rem));
2754
+ --_font-size: var(--ui-select-font-size, var(--ui-font-size-sm, 0.875rem));
2755
+ --_radius: var(--ui-select-radius, var(--ui-radius-md, 0.5rem));
2756
+ --_bg: var(--ui-select-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2757
+ --_border-color: var(--ui-select-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2758
+ --_border-color-focus: var(--ui-select-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
2759
+ --_text: var(--ui-select-text, var(--ui-color-text, hsl(220, 10%, 10%)));
2760
+ --_icon-color: var(--ui-select-icon-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2761
+ }
2762
+ .select--sm {
2763
+ --_height: var(--ui-select-height-sm, calc(1rem * 1.5));
2764
+ --_font-size: var(--ui-select-font-size-sm, var(--ui-font-size-xs, 0.75rem));
2765
+ }
2766
+ .select--lg {
2767
+ --_height: var(--ui-select-height-lg, calc(1rem * 2.5));
2768
+ --_padding-x: var(--ui-select-padding-x-lg, var(--ui-space-2, 1rem));
2769
+ --_font-size: var(--ui-select-font-size-lg, var(--ui-font-size-md, 1rem));
2770
+ }
2771
+ .select--filled {
2772
+ --_bg: var(--ui-select-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2773
+ --_border-color: transparent;
2774
+ }
2775
+ .select--ghost {
2776
+ --_bg: transparent;
2777
+ --_border-color: transparent;
2778
+ }
2779
+ .select--error {
2780
+ --_border-color: var(--ui-select-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2781
+ --_border-color-focus: var(--ui-select-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2782
+ }
2783
+ .select--success {
2784
+ --_border-color: var(--ui-select-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
2785
+ --_border-color-focus: var(--ui-select-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
2786
+ }
2787
+ }
2788
+ @layer components.styles {
2789
+ .select {
2790
+ display: inline-block;
2791
+ block-size: var(--_height);
2792
+ padding-inline-start: var(--_padding-x);
2793
+ padding-inline-end: calc(var(--_height) - var(--ui-space-half, 0.25rem));
2794
+ font-family: inherit;
2795
+ font-size: var(--_font-size);
2796
+ line-height: 1;
2797
+ color: var(--_text);
2798
+ background-color: var(--_bg);
2799
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
2800
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2801
+ border-radius: var(--_radius);
2802
+ cursor: pointer;
2803
+ appearance: none;
2804
+ transition: border-color var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), box-shadow var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
2805
+ background-repeat: no-repeat;
2806
+ background-position: right var(--ui-space-half, 0.25rem) center;
2807
+ background-size: calc(var(--_height) * 0.5);
2808
+ }
2809
+ .select:hover:not(:disabled, :focus) {
2810
+ border-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
2811
+ }
2812
+ .select:focus, .select--focus {
2813
+ border-color: var(--_border-color-focus);
2814
+ outline: none;
2815
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
2816
+ }
2817
+ .select:disabled, .select--disabled {
2818
+ opacity: 0.5;
2819
+ cursor: not-allowed;
2820
+ }
2821
+ .select--block {
2822
+ inline-size: 100%;
2823
+ }
2824
+ .select:invalid, .select--placeholder {
2825
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2826
+ }
2827
+ }
2828
+ @layer components.tokens {
2829
+ .skeleton {
2830
+ --_bg: var(--ui-skeleton-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
2831
+ --_shimmer: var(--ui-skeleton-shimmer, rgb(255 255 255 / 0.5));
2832
+ --_radius: var(--ui-skeleton-radius, var(--ui-radius-sm, calc(0.5rem / 2)));
2833
+ }
2834
+ }
2835
+ @layer components.styles {
2836
+ .skeleton {
2837
+ display: block;
2838
+ position: relative;
2839
+ overflow: hidden;
2840
+ background: var(--_bg);
2841
+ border-radius: var(--_radius);
2842
+ }
2843
+ .skeleton::after {
2844
+ content: "";
2845
+ position: absolute;
2846
+ inset: 0;
2847
+ background: linear-gradient(90deg, transparent 0%, var(--_shimmer) 50%, transparent 100%);
2848
+ animation: skeleton-shimmer 1.5s infinite;
2849
+ transform: translateX(-100%);
2850
+ }
2851
+ @keyframes skeleton-shimmer {
2852
+ 100% {
2853
+ transform: translateX(100%);
2854
+ }
2855
+ }
2856
+ .skeleton--text {
2857
+ block-size: calc(0.5rem * 2);
2858
+ inline-size: 100%;
2859
+ }
2860
+ .skeleton--heading {
2861
+ block-size: calc(0.5rem * 3);
2862
+ inline-size: 60%;
2863
+ }
2864
+ .skeleton--circle {
2865
+ block-size: calc(0.5rem * 5);
2866
+ inline-size: calc(0.5rem * 5);
2867
+ border-radius: 50%;
2868
+ }
2869
+ .skeleton--rect {
2870
+ block-size: calc(0.5rem * 20);
2871
+ inline-size: 100%;
2872
+ }
2873
+ .skeleton--static::after {
2874
+ animation: none;
2875
+ }
2876
+ .skeleton--pulse {
2877
+ animation: skeleton-pulse 1.5s infinite ease-in-out;
2878
+ }
2879
+ .skeleton--pulse::after {
2880
+ display: none;
2881
+ }
2882
+ @keyframes skeleton-pulse {
2883
+ 0%, 100% {
2884
+ opacity: 1;
2885
+ }
2886
+ 50% {
2887
+ opacity: 0.5;
2888
+ }
2889
+ }
2890
+ }
2891
+ @layer components.tokens {
2892
+ .spinner {
2893
+ --_size: var(--ui-spinner-size, calc(var(--unit) * 4));
2894
+ --_border-width: var(--ui-spinner-border-width, var(--ui-border-width-md));
2895
+ --_color: var(--ui-spinner-color, currentcolor);
2896
+ --_track-color: var(--ui-spinner-track-color, transparent);
2897
+ --_duration: var(--ui-spinner-duration, 750ms);
2898
+ }
2899
+ .spinner--xs {
2900
+ --_size: var(--ui-spinner-size-xs, calc(var(--unit) * 2));
2901
+ --_border-width: var(--ui-spinner-border-width-xs, var(--ui-border-width-sm));
2902
+ }
2903
+ .spinner--sm {
2904
+ --_size: var(--ui-spinner-size-sm, calc(var(--unit) * 3));
2905
+ --_border-width: var(--ui-spinner-border-width-sm, var(--ui-border-width-md));
2906
+ }
2907
+ .spinner--lg {
2908
+ --_size: var(--ui-spinner-size-lg, calc(var(--unit) * 5));
2909
+ --_border-width: var(--ui-spinner-border-width-lg, var(--ui-border-width-md));
2910
+ }
2911
+ .spinner--xl {
2912
+ --_size: var(--ui-spinner-size-xl, calc(var(--unit) * 6));
2913
+ --_border-width: var(--ui-spinner-border-width-xl, var(--ui-border-width-lg));
2914
+ }
2915
+ }
2916
+ @layer components.styles {
2917
+ .spinner {
2918
+ display: inline-block;
2919
+ flex-shrink: 0;
2920
+ box-sizing: border-box;
2921
+ block-size: var(--_size);
2922
+ inline-size: var(--_size);
2923
+ vertical-align: middle;
2924
+ border: var(--_border-width) solid var(--_track-color);
2925
+ border-radius: 50%;
2926
+ border-block-start-color: var(--_color);
2927
+ animation: spinner-rotate var(--_duration) linear infinite;
2928
+ }
2929
+ @keyframes spinner-rotate {
2930
+ to {
2931
+ transform: rotate(360deg);
2932
+ }
2933
+ }
2934
+ }
2935
+ @layer components.tokens {
2936
+ .status {
2937
+ --_size: var(--ui-status-size, calc(0.5rem * 1));
2938
+ --_color: var(--ui-status-color, var(--ui-color-text-muted));
2939
+ --_gap: var(--ui-status-gap, calc(0.5rem * 1));
2940
+ }
2941
+ .status--success {
2942
+ --_color: var(--ui-color-success);
2943
+ }
2944
+ .status--warning {
2945
+ --_color: var(--ui-color-warning);
2946
+ }
2947
+ .status--danger {
2948
+ --_color: var(--ui-color-danger);
2949
+ }
2950
+ .status--info {
2951
+ --_color: var(--ui-color-primary);
2952
+ }
2953
+ }
2954
+ @layer components.styles {
2955
+ .status {
2956
+ display: inline-flex;
2957
+ align-items: center;
2958
+ gap: var(--_gap);
2959
+ }
2960
+ .status__dot {
2961
+ flex-shrink: 0;
2962
+ block-size: var(--_size);
2963
+ inline-size: var(--_size);
2964
+ background: var(--_color);
2965
+ border-radius: 50%;
2966
+ }
2967
+ .status--pulse .status__dot {
2968
+ position: relative;
2969
+ }
2970
+ .status--pulse .status__dot::before {
2971
+ content: "";
2972
+ position: absolute;
2973
+ inset: 0;
2974
+ background: var(--_color);
2975
+ border-radius: 50%;
2976
+ animation: status-pulse 2s infinite;
2977
+ }
2978
+ @keyframes status-pulse {
2979
+ 0% {
2980
+ opacity: 1;
2981
+ transform: scale(1);
2982
+ }
2983
+ 100% {
2984
+ opacity: 0;
2985
+ transform: scale(2.5);
2986
+ }
2987
+ }
2988
+ .status--sm {
2989
+ --_size: calc(0.5rem * 0.75);
2990
+ --_gap: calc(0.5rem * 0.75);
2991
+ }
2992
+ .status--lg {
2993
+ --_size: calc(0.5rem * 1.5);
2994
+ --_gap: calc(0.5rem * 1.5);
2995
+ }
2996
+ }
2997
+ @layer components.tokens {
2998
+ .table {
2999
+ --_font-size: var(--ui-table-font-size, var(--ui-font-size-sm, 0.875rem));
3000
+ --_border-color: var(--ui-table-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
3001
+ --_header-bg: var(--ui-table-header-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
3002
+ --_cell-padding-x: var(--ui-table-cell-padding-x, var(--ui-space-2, 1rem));
3003
+ --_cell-padding-y: var(--ui-table-cell-padding-y, var(--ui-space-1, 0.5rem));
3004
+ }
3005
+ .table--compact {
3006
+ --_cell-padding-y: var(--ui-space-0, 0.25rem);
3007
+ --_cell-padding-x: var(--ui-space-1, 0.5rem);
3008
+ --_font-size: var(--ui-font-size-xs, 0.75rem);
3009
+ }
3010
+ }
3011
+ @layer components.styles {
3012
+ .table {
3013
+ inline-size: 100%;
3014
+ font-size: var(--_font-size);
3015
+ border-collapse: separate;
3016
+ border-spacing: 0;
3017
+ }
3018
+ .table th,
3019
+ .table td {
3020
+ padding-block-start: var(--_cell-padding-y);
3021
+ padding-block-end: calc(var(--_cell-padding-y) - var(--ui-border-width-sm, 0.0625rem));
3022
+ padding-inline: var(--_cell-padding-x);
3023
+ line-height: calc(var(--unit, 0.5rem) * 3);
3024
+ text-align: start;
3025
+ border-block-end: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3026
+ }
3027
+ .table th {
3028
+ font-weight: var(--ui-weight-medium, 500);
3029
+ background: var(--_header-bg);
3030
+ }
3031
+ .table--striped tbody tr:nth-child(odd) {
3032
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
3033
+ }
3034
+ .table--striped th {
3035
+ background: var(--ui-color-bg-muted, hsl(220, 10%, 90%));
3036
+ }
3037
+ }
3038
+ @layer components.tokens {
3039
+ .tabs {
3040
+ --_border-color: var(--ui-tabs-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
3041
+ --_tab-padding-x: var(--ui-tabs-tab-padding-x, var(--ui-space-2, 1rem));
3042
+ --_tab-padding-y: var(--ui-tabs-tab-padding-y, var(--ui-space-1, 0.5rem));
3043
+ --_tab-bg: var(--ui-tabs-tab-bg, transparent);
3044
+ --_tab-bg-active: var(--ui-tabs-tab-bg-active, var(--ui-color-bg, hsl(220, 10%, 98%)));
3045
+ --_panel-padding: var(--ui-tabs-panel-padding, var(--ui-space-3, 1.5rem));
3046
+ }
3047
+ }
3048
+ @layer components.styles {
3049
+ .tabs__list {
3050
+ display: flex;
3051
+ align-items: stretch;
3052
+ gap: var(--ui-space-1, 0.5rem);
3053
+ box-sizing: border-box;
3054
+ block-size: var(--ui-row-2, 2rem);
3055
+ box-shadow: inset 0 calc(var(--ui-border-width-sm, 0.0625rem) * -1) 0 var(--_border-color);
3056
+ }
3057
+ .tabs__tab {
3058
+ display: inline-flex;
3059
+ align-items: center;
3060
+ box-sizing: border-box;
3061
+ block-size: var(--ui-row-2, 2rem);
3062
+ padding-inline: var(--_tab-padding-x);
3063
+ margin: 0;
3064
+ font-family: var(--ui-font-sans, Noto Sans, system-ui, -apple-system, sans-serif);
3065
+ font-size: var(--ui-font-size-sm, 0.875rem);
3066
+ font-weight: var(--ui-weight-medium, 500);
3067
+ line-height: 1;
3068
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
3069
+ background: var(--_tab-bg);
3070
+ border: none;
3071
+ box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 transparent;
3072
+ cursor: pointer;
3073
+ transition: color var(--ui-duration-base) var(--ui-ease-default), box-shadow var(--ui-duration-base) var(--ui-ease-default);
3074
+ }
3075
+ .tabs__tab:hover {
3076
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
3077
+ }
3078
+ .tabs__tab--active {
3079
+ color: var(--ui-color-primary, hsl(220, 85%, 50%));
3080
+ background: var(--_tab-bg-active);
3081
+ box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 var(--ui-color-primary, hsl(220, 85%, 50%));
3082
+ }
3083
+ .tabs__panel {
3084
+ display: none;
3085
+ padding: var(--_panel-padding);
3086
+ line-height: var(--ui-row-1, 1rem);
3087
+ }
3088
+ .tabs__panel--active {
3089
+ display: block;
3090
+ }
3091
+ }
3092
+ @layer components.tokens {
3093
+ .tag {
3094
+ --_height: var(--ui-tag-height, calc(0.5rem * 3));
3095
+ --_padding-x: var(--ui-tag-padding-x, var(--ui-space-1, 0.5rem));
3096
+ --_gap: var(--ui-tag-gap, calc(0.5rem * 0.5));
3097
+ --_radius: var(--ui-tag-radius, var(--ui-radius-full, 9999px));
3098
+ --_font-size: var(--ui-tag-font-size, var(--ui-font-size-sm, 0.875rem));
3099
+ --_bg: var(--ui-tag-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
3100
+ --_color: var(--ui-tag-color, var(--ui-color-text, hsl(220, 10%, 10%)));
3101
+ }
3102
+ .tag--sm {
3103
+ --_height: var(--ui-tag-height-sm, calc(0.5rem * 2.5));
3104
+ --_padding-x: var(--ui-tag-padding-x-sm, calc(0.5rem * 1));
3105
+ --_font-size: var(--ui-tag-font-size-sm, var(--ui-font-size-xs, 0.75rem));
3106
+ }
3107
+ .tag--primary {
3108
+ --_bg: var(--ui-tag-primary-bg, var(--ui-color-primary, hsl(220, 85%, 50%)));
3109
+ --_color: var(--ui-tag-primary-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3110
+ }
3111
+ .tag--success {
3112
+ --_bg: var(--ui-tag-success-bg, var(--ui-color-success, hsl(142, 70%, 45%)));
3113
+ --_color: var(--ui-tag-success-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3114
+ }
3115
+ .tag--warning {
3116
+ --_bg: var(--ui-tag-warning-bg, var(--ui-color-warning, hsl(38, 90%, 50%)));
3117
+ --_color: var(--ui-tag-warning-color, var(--ui-color-text, hsl(220, 10%, 10%)));
3118
+ }
3119
+ .tag--danger {
3120
+ --_bg: var(--ui-tag-danger-bg, var(--ui-color-danger, hsl(0, 70%, 50%)));
3121
+ --_color: var(--ui-tag-danger-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3122
+ }
3123
+ }
3124
+ @layer components.styles {
3125
+ .tag {
3126
+ display: inline-flex;
3127
+ align-items: center;
3128
+ gap: var(--_gap);
3129
+ block-size: var(--_height);
3130
+ padding-inline: var(--_padding-x);
3131
+ font-size: var(--_font-size);
3132
+ font-weight: var(--ui-weight-medium, 500);
3133
+ line-height: 1;
3134
+ white-space: nowrap;
3135
+ color: var(--_color);
3136
+ background: var(--_bg);
3137
+ border-radius: var(--_radius);
3138
+ }
3139
+ .tag:disabled, .tag[aria-disabled=true] {
3140
+ opacity: 0.5;
3141
+ cursor: not-allowed;
3142
+ }
3143
+ .tag__remove {
3144
+ display: inline-flex;
3145
+ flex-shrink: 0;
3146
+ align-items: center;
3147
+ justify-content: center;
3148
+ padding: 0;
3149
+ margin-inline-start: calc(var(--_gap) * -0.5);
3150
+ color: currentcolor;
3151
+ background: none;
3152
+ border: none;
3153
+ opacity: 0.7;
3154
+ cursor: pointer;
3155
+ }
3156
+ .tag__remove:hover {
3157
+ opacity: 1;
3158
+ }
3159
+ .tag-group {
3160
+ display: flex;
3161
+ flex-wrap: wrap;
3162
+ gap: calc(0.5rem * 0.5);
3163
+ }
3164
+ }
3165
+ @layer components.tokens {
3166
+ .textarea {
3167
+ --_min-height: var(--ui-textarea-min-height, calc(1rem * 4));
3168
+ --_padding-x: var(--ui-textarea-padding-x, var(--ui-space-1, 0.5rem));
3169
+ --_padding-y: var(--ui-textarea-padding-y, var(--ui-space-1, 0.5rem));
3170
+ --_font-size: var(--ui-textarea-font-size, var(--ui-font-size-sm, 0.875rem));
3171
+ --_radius: var(--ui-textarea-radius, var(--ui-radius-md, 0.5rem));
3172
+ --_bg: var(--ui-textarea-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
3173
+ --_border-color: var(--ui-textarea-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
3174
+ --_border-color-focus: var(--ui-textarea-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
3175
+ --_text: var(--ui-textarea-text, var(--ui-color-text, hsl(220, 10%, 10%)));
3176
+ --_placeholder: var(--ui-textarea-placeholder, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
3177
+ }
3178
+ .textarea--sm {
3179
+ --_min-height: var(--ui-textarea-min-height-sm, calc(1rem * 3));
3180
+ --_font-size: var(--ui-textarea-font-size-sm, var(--ui-font-size-xs, 0.75rem));
3181
+ }
3182
+ .textarea--lg {
3183
+ --_min-height: var(--ui-textarea-min-height-lg, calc(1rem * 6));
3184
+ --_padding-x: var(--ui-textarea-padding-x-lg, var(--ui-space-2, 1rem));
3185
+ --_padding-y: var(--ui-textarea-padding-y-lg, var(--ui-space-2, 1rem));
3186
+ --_font-size: var(--ui-textarea-font-size-lg, var(--ui-font-size-md, 1rem));
3187
+ }
3188
+ .textarea--filled {
3189
+ --_bg: var(--ui-textarea-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
3190
+ --_border-color: transparent;
3191
+ }
3192
+ .textarea--ghost {
3193
+ --_bg: transparent;
3194
+ --_border-color: transparent;
3195
+ }
3196
+ .textarea--error {
3197
+ --_border-color: var(--ui-textarea-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
3198
+ --_border-color-focus: var(--ui-textarea-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
3199
+ }
3200
+ .textarea--success {
3201
+ --_border-color: var(--ui-textarea-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
3202
+ --_border-color-focus: var(--ui-textarea-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
3203
+ }
3204
+ }
3205
+ @layer components.styles {
3206
+ .textarea {
3207
+ display: block;
3208
+ box-sizing: border-box;
3209
+ inline-size: 100%;
3210
+ min-block-size: var(--_min-height);
3211
+ padding-block: var(--_padding-y);
3212
+ padding-inline: var(--_padding-x);
3213
+ font-family: inherit;
3214
+ font-size: var(--_font-size);
3215
+ line-height: var(--ui-row-1, 1rem);
3216
+ color: var(--_text);
3217
+ background: var(--_bg);
3218
+ border: none;
3219
+ border-radius: var(--_radius);
3220
+ outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3221
+ transition: border-color var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), box-shadow var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
3222
+ outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
3223
+ resize: vertical;
3224
+ }
3225
+ .textarea::placeholder {
3226
+ color: var(--_placeholder);
3227
+ }
3228
+ .textarea:hover:not(:disabled, :focus) {
3229
+ outline-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
3230
+ }
3231
+ .textarea:focus, .textarea--focus {
3232
+ outline-color: var(--_border-color-focus);
3233
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
3234
+ }
3235
+ .textarea:disabled, .textarea--disabled {
3236
+ opacity: 0.5;
3237
+ cursor: not-allowed;
3238
+ resize: none;
3239
+ }
3240
+ .textarea:read-only {
3241
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
3242
+ resize: none;
3243
+ }
3244
+ .textarea--resize-none {
3245
+ resize: none;
3246
+ }
3247
+ .textarea--resize-horizontal {
3248
+ resize: horizontal;
3249
+ }
3250
+ .textarea--resize-both {
3251
+ resize: both;
3252
+ }
3253
+ }
3254
+ @layer components.tokens {
3255
+ .toast-viewport {
3256
+ --_gap: var(--ui-toast-viewport-gap, calc(0.5rem * 1));
3257
+ --_padding: var(--ui-toast-viewport-padding, calc(0.5rem * 2));
3258
+ --_max-width: var(--ui-toast-viewport-max-width, 420px);
3259
+ }
3260
+ .toast {
3261
+ --_padding: var(--ui-toast-padding, calc(0.5rem * 2));
3262
+ --_gap: var(--ui-toast-gap, calc(0.5rem * 1));
3263
+ --_radius: var(--ui-toast-radius, var(--ui-radius-md, 0.5rem));
3264
+ --_bg: var(--ui-toast-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
3265
+ --_border-color: var(--ui-toast-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
3266
+ --_shadow: var(--ui-toast-shadow, var(--shadow-lg));
3267
+ }
3268
+ .toast--success {
3269
+ --_border-color: var(--ui-color-success);
3270
+ }
3271
+ .toast--warning {
3272
+ --_border-color: var(--ui-color-warning);
3273
+ }
3274
+ .toast--danger {
3275
+ --_border-color: var(--ui-color-danger);
3276
+ }
3277
+ .toast--info {
3278
+ --_border-color: var(--ui-color-primary);
3279
+ }
3280
+ }
3281
+ @layer components.styles {
3282
+ .toast-viewport {
3283
+ display: flex;
3284
+ flex-direction: column;
3285
+ gap: var(--_gap);
3286
+ position: fixed;
3287
+ z-index: var(--ui-z-toast, 1000);
3288
+ max-inline-size: var(--_max-width);
3289
+ padding: var(--_padding);
3290
+ pointer-events: none;
3291
+ list-style: none;
3292
+ }
3293
+ .toast-viewport--top-end {
3294
+ inset-block-start: 0;
3295
+ inset-inline-end: 0;
3296
+ }
3297
+ .toast-viewport--top-start {
3298
+ inset-block-start: 0;
3299
+ inset-inline-start: 0;
3300
+ }
3301
+ .toast-viewport--bottom-end {
3302
+ inset-block-end: 0;
3303
+ inset-inline-end: 0;
3304
+ }
3305
+ .toast-viewport--bottom-start {
3306
+ inset-block-end: 0;
3307
+ inset-inline-start: 0;
3308
+ }
3309
+ .toast-viewport--top-center {
3310
+ inset-block-start: 0;
3311
+ inset-inline-start: 50%;
3312
+ transform: translateX(-50%);
3313
+ }
3314
+ .toast-viewport--bottom-center {
3315
+ inset-block-end: 0;
3316
+ inset-inline-start: 50%;
3317
+ transform: translateX(-50%);
3318
+ }
3319
+ .toast {
3320
+ display: flex;
3321
+ align-items: flex-start;
3322
+ gap: var(--_gap);
3323
+ padding: var(--_padding);
3324
+ background: var(--_bg);
3325
+ border-radius: var(--_radius);
3326
+ outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3327
+ box-shadow: var(--_shadow);
3328
+ pointer-events: auto;
3329
+ outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
3330
+ }
3331
+ .toast__icon {
3332
+ flex-shrink: 0;
3333
+ }
3334
+ .toast__content {
3335
+ flex: 1;
3336
+ min-inline-size: 0;
3337
+ }
3338
+ .toast__title {
3339
+ margin: 0;
3340
+ font-weight: var(--ui-weight-medium, 500);
3341
+ line-height: var(--ui-row-1, 1rem);
3342
+ }
3343
+ .toast__description {
3344
+ margin: 0;
3345
+ font-size: var(--ui-font-size-sm, 0.875rem);
3346
+ line-height: var(--ui-row-1, 1rem);
3347
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
3348
+ }
3349
+ .toast__action {
3350
+ flex-shrink: 0;
3351
+ }
3352
+ .toast__close {
3353
+ display: inline-flex;
3354
+ flex-shrink: 0;
3355
+ align-items: center;
3356
+ justify-content: center;
3357
+ block-size: var(--ui-row-1, 1rem);
3358
+ inline-size: var(--ui-row-1, 1rem);
3359
+ padding: 0;
3360
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
3361
+ background: none;
3362
+ border: none;
3363
+ cursor: pointer;
3364
+ }
3365
+ .toast__close:hover {
3366
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
3367
+ }
3368
+ .toast[data-state=open] {
3369
+ animation: toast-slide-in var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
3370
+ }
3371
+ .toast[data-state=closed] {
3372
+ animation: toast-slide-out var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
3373
+ }
3374
+ @keyframes toast-slide-in {
3375
+ from {
3376
+ opacity: 0;
3377
+ transform: translateX(100%);
3378
+ }
3379
+ }
3380
+ @keyframes toast-slide-out {
3381
+ to {
3382
+ opacity: 0;
3383
+ transform: translateX(100%);
3384
+ }
3385
+ }
3386
+ }
3387
+ @layer components.tokens {
3388
+ .toggle {
3389
+ --_track-width: var(--ui-toggle-track-width, calc(0.5rem * 5));
3390
+ --_track-height: var(--ui-toggle-track-height, calc(0.5rem * 3));
3391
+ --_track-bg: var(--ui-toggle-track-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
3392
+ --_track-bg-checked: var(--ui-toggle-track-bg-checked, var(--ui-color-primary));
3393
+ --_track-radius: var(--ui-toggle-track-radius, calc(0.5rem * 1.5));
3394
+ --_thumb-size: var(--ui-toggle-thumb-size, calc(0.5rem * 2.5));
3395
+ --_thumb-bg: var(--ui-toggle-thumb-bg, white);
3396
+ --_thumb-offset: var(--ui-toggle-thumb-offset, calc(0.5rem / 4));
3397
+ }
3398
+ .toggle--sm {
3399
+ --_track-width: calc(0.5rem * 4);
3400
+ --_track-height: calc(0.5rem * 2);
3401
+ --_track-radius: 0.5rem;
3402
+ --_thumb-size: calc(0.5rem * 1.5);
3403
+ }
3404
+ .toggle--lg {
3405
+ --_track-width: calc(0.5rem * 6);
3406
+ --_track-height: calc(0.5rem * 4);
3407
+ --_track-radius: calc(0.5rem * 2);
3408
+ --_thumb-size: calc(0.5rem * 3.5);
3409
+ }
3410
+ }
3411
+ @layer components.styles {
3412
+ .toggle {
3413
+ display: inline-flex;
3414
+ flex-shrink: 0;
3415
+ align-items: center;
3416
+ position: relative;
3417
+ block-size: var(--_track-height);
3418
+ inline-size: var(--_track-width);
3419
+ background: var(--_track-bg);
3420
+ border-radius: var(--_track-radius);
3421
+ cursor: pointer;
3422
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3423
+ }
3424
+ .toggle__input {
3425
+ position: absolute;
3426
+ inset: 0;
3427
+ block-size: 100%;
3428
+ inline-size: 100%;
3429
+ margin: 0;
3430
+ opacity: 0;
3431
+ cursor: pointer;
3432
+ }
3433
+ .toggle__track {
3434
+ position: absolute;
3435
+ inset: 0;
3436
+ background: var(--_track-bg);
3437
+ border-radius: var(--_track-radius);
3438
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3439
+ }
3440
+ .toggle__thumb {
3441
+ position: absolute;
3442
+ inset-block-start: var(--_thumb-offset);
3443
+ inset-inline-start: var(--_thumb-offset);
3444
+ block-size: var(--_thumb-size);
3445
+ inline-size: var(--_thumb-size);
3446
+ background: var(--_thumb-bg);
3447
+ border-radius: 50%;
3448
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
3449
+ transition: transform var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3450
+ }
3451
+ .toggle__input:checked ~ .toggle__track {
3452
+ background: var(--_track-bg-checked);
3453
+ }
3454
+ .toggle__input:checked ~ .toggle__thumb {
3455
+ transform: translateX(calc(var(--_track-width) - var(--_thumb-size) - var(--_thumb-offset) * 2));
3456
+ }
3457
+ .toggle__input:focus-visible ~ .toggle__track {
3458
+ outline: 2px solid var(--ui-color-focus, var(--ui-color-primary));
3459
+ outline-offset: calc(0.5rem / 4);
3460
+ }
3461
+ .toggle__input:disabled ~ .toggle__track,
3462
+ .toggle__input:disabled ~ .toggle__thumb {
3463
+ opacity: 0.5;
3464
+ cursor: not-allowed;
3465
+ }
3466
+ .toggle:has(.toggle__input:disabled) {
3467
+ cursor: not-allowed;
3468
+ }
3469
+ }
3470
+ @layer components.tokens {
3471
+ .tooltip {
3472
+ --_bg: var(--ui-tooltip-bg, var(--ui-color-text, #1a1a1a));
3473
+ --_color: var(--ui-tooltip-color, var(--ui-color-bg, white));
3474
+ --_radius: var(--ui-tooltip-radius, var(--ui-radius-sm, calc(0.5rem / 2)));
3475
+ --_padding-x: var(--ui-tooltip-padding-x, calc(0.5rem * 1));
3476
+ --_padding-y: var(--ui-tooltip-padding-y, calc(0.5rem / 2));
3477
+ --_size: var(--ui-tooltip-size, var(--ui-font-size-sm, 0.875rem));
3478
+ --_z: var(--ui-tooltip-z, var(--ui-z-tooltip, 500));
3479
+ --_arrow-size: var(--ui-tooltip-arrow-size, calc(0.5rem / 2));
3480
+ }
3481
+ }
3482
+ @layer components.styles {
3483
+ .tooltip {
3484
+ position: absolute;
3485
+ z-index: var(--_z);
3486
+ max-inline-size: calc(0.5rem * 25);
3487
+ padding: var(--_padding-y) var(--_padding-x);
3488
+ font-size: var(--_size);
3489
+ line-height: calc(0.5rem * 2);
3490
+ text-align: center;
3491
+ white-space: nowrap;
3492
+ color: var(--_color);
3493
+ background: var(--_bg);
3494
+ border-radius: var(--_radius);
3495
+ }
3496
+ .tooltip--top::after {
3497
+ content: "";
3498
+ position: absolute;
3499
+ inset-block-start: 100%;
3500
+ inset-inline-start: 50%;
3501
+ border: var(--_arrow-size) solid transparent;
3502
+ border-block-start-color: var(--_bg);
3503
+ transform: translateX(-50%);
3504
+ }
3505
+ .tooltip--bottom::after {
3506
+ content: "";
3507
+ position: absolute;
3508
+ inset-block-end: 100%;
3509
+ inset-inline-start: 50%;
3510
+ border: var(--_arrow-size) solid transparent;
3511
+ border-block-end-color: var(--_bg);
3512
+ transform: translateX(-50%);
3513
+ }
3514
+ .tooltip--start::after {
3515
+ content: "";
3516
+ position: absolute;
3517
+ inset-block-start: 50%;
3518
+ inset-inline-start: 100%;
3519
+ border: var(--_arrow-size) solid transparent;
3520
+ border-inline-start-color: var(--_bg);
3521
+ transform: translateY(-50%);
3522
+ }
3523
+ .tooltip--end::after {
3524
+ content: "";
3525
+ position: absolute;
3526
+ inset-block-start: 50%;
3527
+ inset-inline-end: 100%;
3528
+ border: var(--_arrow-size) solid transparent;
3529
+ border-inline-end-color: var(--_bg);
3530
+ transform: translateY(-50%);
3531
+ }
3532
+ .tooltip--visible {
3533
+ opacity: 1;
3534
+ }
3535
+ .tooltip--hidden {
3536
+ opacity: 0;
3537
+ pointer-events: none;
3538
+ }
3539
+ .tooltip--animate {
3540
+ transition: opacity var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3541
+ }
3542
+ }
3543
+ /* 05. Utilities (high specificity, load last) */
3544
+ /* Spacing utilities - all values align to 8px grid */
3545
+ /* Uses logical properties for international/RTL support */
3546
+ @layer utilities {
3547
+ /* Margin utilities */
3548
+ .m-0 {
3549
+ margin: 0;
3550
+ }
3551
+ .m-1 {
3552
+ margin: var(--ui-space-1);
3553
+ }
3554
+ .m-2 {
3555
+ margin: var(--ui-space-2);
3556
+ }
3557
+ .m-3 {
3558
+ margin: var(--ui-space-3);
3559
+ }
3560
+ .m-4 {
3561
+ margin: var(--ui-space-4);
3562
+ }
3563
+ .m-6 {
3564
+ margin: var(--ui-space-6);
3565
+ }
3566
+ .m-8 {
3567
+ margin: var(--ui-space-8);
3568
+ }
3569
+ .mt-0 {
3570
+ margin-block-start: 0;
3571
+ }
3572
+ .mt-1 {
3573
+ margin-block-start: var(--ui-space-1);
3574
+ }
3575
+ .mt-2 {
3576
+ margin-block-start: var(--ui-space-2);
3577
+ }
3578
+ .mt-3 {
3579
+ margin-block-start: var(--ui-space-3);
3580
+ }
3581
+ .mt-4 {
3582
+ margin-block-start: var(--ui-space-4);
3583
+ }
3584
+ .mt-6 {
3585
+ margin-block-start: var(--ui-space-6);
3586
+ }
3587
+ .mt-8 {
3588
+ margin-block-start: var(--ui-space-8);
3589
+ }
3590
+ .me-0 {
3591
+ margin-inline-end: 0;
3592
+ }
3593
+ .me-1 {
3594
+ margin-inline-end: var(--ui-space-1);
3595
+ }
3596
+ .me-2 {
3597
+ margin-inline-end: var(--ui-space-2);
3598
+ }
3599
+ .me-3 {
3600
+ margin-inline-end: var(--ui-space-3);
3601
+ }
3602
+ .me-4 {
3603
+ margin-inline-end: var(--ui-space-4);
3604
+ }
3605
+ .me-6 {
3606
+ margin-inline-end: var(--ui-space-6);
3607
+ }
3608
+ .me-8 {
3609
+ margin-inline-end: var(--ui-space-8);
3610
+ }
3611
+ .mb-0 {
3612
+ margin-block-end: 0;
3613
+ }
3614
+ .mb-1 {
3615
+ margin-block-end: var(--ui-space-1);
3616
+ }
3617
+ .mb-2 {
3618
+ margin-block-end: var(--ui-space-2);
3619
+ }
3620
+ .mb-3 {
3621
+ margin-block-end: var(--ui-space-3);
3622
+ }
3623
+ .mb-4 {
3624
+ margin-block-end: var(--ui-space-4);
3625
+ }
3626
+ .mb-6 {
3627
+ margin-block-end: var(--ui-space-6);
3628
+ }
3629
+ .mb-8 {
3630
+ margin-block-end: var(--ui-space-8);
3631
+ }
3632
+ .ms-0 {
3633
+ margin-inline-start: 0;
3634
+ }
3635
+ .ms-1 {
3636
+ margin-inline-start: var(--ui-space-1);
3637
+ }
3638
+ .ms-2 {
3639
+ margin-inline-start: var(--ui-space-2);
3640
+ }
3641
+ .ms-3 {
3642
+ margin-inline-start: var(--ui-space-3);
3643
+ }
3644
+ .ms-4 {
3645
+ margin-inline-start: var(--ui-space-4);
3646
+ }
3647
+ .ms-6 {
3648
+ margin-inline-start: var(--ui-space-6);
3649
+ }
3650
+ .ms-8 {
3651
+ margin-inline-start: var(--ui-space-8);
3652
+ }
3653
+ .mx-0 {
3654
+ margin-inline: 0;
3655
+ }
3656
+ .mx-1 {
3657
+ margin-inline: var(--ui-space-1);
3658
+ }
3659
+ .mx-2 {
3660
+ margin-inline: var(--ui-space-2);
3661
+ }
3662
+ .mx-3 {
3663
+ margin-inline: var(--ui-space-3);
3664
+ }
3665
+ .mx-4 {
3666
+ margin-inline: var(--ui-space-4);
3667
+ }
3668
+ .mx-auto {
3669
+ margin-inline: auto;
3670
+ }
3671
+ .my-0 {
3672
+ margin-block: 0;
3673
+ }
3674
+ .my-1 {
3675
+ margin-block: var(--ui-space-1);
3676
+ }
3677
+ .my-2 {
3678
+ margin-block: var(--ui-space-2);
3679
+ }
3680
+ .my-3 {
3681
+ margin-block: var(--ui-space-3);
3682
+ }
3683
+ .my-4 {
3684
+ margin-block: var(--ui-space-4);
3685
+ }
3686
+ /* Padding utilities */
3687
+ .p-0 {
3688
+ padding: 0;
3689
+ }
3690
+ .p-1 {
3691
+ padding: var(--ui-space-1);
3692
+ }
3693
+ .p-2 {
3694
+ padding: var(--ui-space-2);
3695
+ }
3696
+ .p-3 {
3697
+ padding: var(--ui-space-3);
3698
+ }
3699
+ .p-4 {
3700
+ padding: var(--ui-space-4);
3701
+ }
3702
+ .p-6 {
3703
+ padding: var(--ui-space-6);
3704
+ }
3705
+ .p-8 {
3706
+ padding: var(--ui-space-8);
3707
+ }
3708
+ .pt-0 {
3709
+ padding-block-start: 0;
3710
+ }
3711
+ .pt-1 {
3712
+ padding-block-start: var(--ui-space-1);
3713
+ }
3714
+ .pt-2 {
3715
+ padding-block-start: var(--ui-space-2);
3716
+ }
3717
+ .pt-3 {
3718
+ padding-block-start: var(--ui-space-3);
3719
+ }
3720
+ .pt-4 {
3721
+ padding-block-start: var(--ui-space-4);
3722
+ }
3723
+ .pt-6 {
3724
+ padding-block-start: var(--ui-space-6);
3725
+ }
3726
+ .pt-8 {
3727
+ padding-block-start: var(--ui-space-8);
3728
+ }
3729
+ .pe-0 {
3730
+ padding-inline-end: 0;
3731
+ }
3732
+ .pe-1 {
3733
+ padding-inline-end: var(--ui-space-1);
3734
+ }
3735
+ .pe-2 {
3736
+ padding-inline-end: var(--ui-space-2);
3737
+ }
3738
+ .pe-3 {
3739
+ padding-inline-end: var(--ui-space-3);
3740
+ }
3741
+ .pe-4 {
3742
+ padding-inline-end: var(--ui-space-4);
3743
+ }
3744
+ .pe-6 {
3745
+ padding-inline-end: var(--ui-space-6);
3746
+ }
3747
+ .pe-8 {
3748
+ padding-inline-end: var(--ui-space-8);
3749
+ }
3750
+ .pb-0 {
3751
+ padding-block-end: 0;
3752
+ }
3753
+ .pb-1 {
3754
+ padding-block-end: var(--ui-space-1);
3755
+ }
3756
+ .pb-2 {
3757
+ padding-block-end: var(--ui-space-2);
3758
+ }
3759
+ .pb-3 {
3760
+ padding-block-end: var(--ui-space-3);
3761
+ }
3762
+ .pb-4 {
3763
+ padding-block-end: var(--ui-space-4);
3764
+ }
3765
+ .pb-6 {
3766
+ padding-block-end: var(--ui-space-6);
3767
+ }
3768
+ .pb-8 {
3769
+ padding-block-end: var(--ui-space-8);
3770
+ }
3771
+ .ps-0 {
3772
+ padding-inline-start: 0;
3773
+ }
3774
+ .ps-1 {
3775
+ padding-inline-start: var(--ui-space-1);
3776
+ }
3777
+ .ps-2 {
3778
+ padding-inline-start: var(--ui-space-2);
3779
+ }
3780
+ .ps-3 {
3781
+ padding-inline-start: var(--ui-space-3);
3782
+ }
3783
+ .ps-4 {
3784
+ padding-inline-start: var(--ui-space-4);
3785
+ }
3786
+ .ps-6 {
3787
+ padding-inline-start: var(--ui-space-6);
3788
+ }
3789
+ .ps-8 {
3790
+ padding-inline-start: var(--ui-space-8);
3791
+ }
3792
+ .px-0 {
3793
+ padding-inline: 0;
3794
+ }
3795
+ .px-1 {
3796
+ padding-inline: var(--ui-space-1);
3797
+ }
3798
+ .px-2 {
3799
+ padding-inline: var(--ui-space-2);
3800
+ }
3801
+ .px-3 {
3802
+ padding-inline: var(--ui-space-3);
3803
+ }
3804
+ .px-4 {
3805
+ padding-inline: var(--ui-space-4);
3806
+ }
3807
+ .py-0 {
3808
+ padding-block: 0;
3809
+ }
3810
+ .py-1 {
3811
+ padding-block: var(--ui-space-1);
3812
+ }
3813
+ .py-2 {
3814
+ padding-block: var(--ui-space-2);
3815
+ }
3816
+ .py-3 {
3817
+ padding-block: var(--ui-space-3);
3818
+ }
3819
+ .py-4 {
3820
+ padding-block: var(--ui-space-4);
3821
+ }
3822
+ /* Gap utilities (for flex/grid) */
3823
+ .gap-0 {
3824
+ gap: 0;
3825
+ }
3826
+ .gap-1 {
3827
+ gap: var(--ui-space-1);
3828
+ }
3829
+ .gap-2 {
3830
+ gap: var(--ui-space-2);
3831
+ }
3832
+ .gap-3 {
3833
+ gap: var(--ui-space-3);
3834
+ }
3835
+ .gap-4 {
3836
+ gap: var(--ui-space-4);
3837
+ }
3838
+ .gap-6 {
3839
+ gap: var(--ui-space-6);
3840
+ }
3841
+ .gap-8 {
3842
+ gap: var(--ui-space-8);
3843
+ }
3844
+ }
3845
+ /* Display and visibility utilities */
3846
+ /* Uses logical properties for international/RTL support */
3847
+ @layer utilities {
3848
+ /* Display */
3849
+ .block {
3850
+ display: block;
3851
+ }
3852
+ .inline-block {
3853
+ display: inline-block;
3854
+ }
3855
+ .inline {
3856
+ display: inline;
3857
+ }
3858
+ .flex {
3859
+ display: flex;
3860
+ }
3861
+ .inline-flex {
3862
+ display: inline-flex;
3863
+ }
3864
+ .grid {
3865
+ display: grid;
3866
+ }
3867
+ .inline-grid {
3868
+ display: inline-grid;
3869
+ }
3870
+ .hidden {
3871
+ display: none;
3872
+ }
3873
+ /* Flexbox direction */
3874
+ .flex-row {
3875
+ flex-direction: row;
3876
+ }
3877
+ .flex-row-reverse {
3878
+ flex-direction: row-reverse;
3879
+ }
3880
+ .flex-col {
3881
+ flex-direction: column;
3882
+ }
3883
+ .flex-col-reverse {
3884
+ flex-direction: column-reverse;
3885
+ }
3886
+ /* Flexbox wrap */
3887
+ .flex-wrap {
3888
+ flex-wrap: wrap;
3889
+ }
3890
+ .flex-nowrap {
3891
+ flex-wrap: nowrap;
3892
+ }
3893
+ .flex-wrap-reverse {
3894
+ flex-wrap: wrap-reverse;
3895
+ }
3896
+ /* Flexbox grow/shrink */
3897
+ .flex-1 {
3898
+ flex: 1 1 0%;
3899
+ }
3900
+ .flex-auto {
3901
+ flex: 1 1 auto;
3902
+ }
3903
+ .flex-initial {
3904
+ flex: 0 1 auto;
3905
+ }
3906
+ .flex-none {
3907
+ flex: none;
3908
+ }
3909
+ .grow {
3910
+ flex-grow: 1;
3911
+ }
3912
+ .grow-0 {
3913
+ flex-grow: 0;
3914
+ }
3915
+ .shrink {
3916
+ flex-shrink: 1;
3917
+ }
3918
+ .shrink-0 {
3919
+ flex-shrink: 0;
3920
+ }
3921
+ /* Justify content */
3922
+ .justify-start {
3923
+ justify-content: flex-start;
3924
+ }
3925
+ .justify-end {
3926
+ justify-content: flex-end;
3927
+ }
3928
+ .justify-center {
3929
+ justify-content: center;
3930
+ }
3931
+ .justify-between {
3932
+ justify-content: space-between;
3933
+ }
3934
+ .justify-around {
3935
+ justify-content: space-around;
3936
+ }
3937
+ .justify-evenly {
3938
+ justify-content: space-evenly;
3939
+ }
3940
+ /* Align items */
3941
+ .items-start {
3942
+ align-items: flex-start;
3943
+ }
3944
+ .items-end {
3945
+ align-items: flex-end;
3946
+ }
3947
+ .items-center {
3948
+ align-items: center;
3949
+ }
3950
+ .items-baseline {
3951
+ align-items: baseline;
3952
+ }
3953
+ .items-stretch {
3954
+ align-items: stretch;
3955
+ }
3956
+ /* Align self */
3957
+ .self-auto {
3958
+ align-self: auto;
3959
+ }
3960
+ .self-start {
3961
+ align-self: flex-start;
3962
+ }
3963
+ .self-end {
3964
+ align-self: flex-end;
3965
+ }
3966
+ .self-center {
3967
+ align-self: center;
3968
+ }
3969
+ .self-stretch {
3970
+ align-self: stretch;
3971
+ }
3972
+ /* Visibility */
3973
+ .visible {
3974
+ visibility: visible;
3975
+ }
3976
+ .invisible {
3977
+ visibility: hidden;
3978
+ }
3979
+ /* Screen reader only - visually hidden but accessible */
3980
+ .sr-only {
3981
+ position: absolute;
3982
+ /* stylelint-disable-next-line unit-disallowed-list -- intentional 1px for a11y */
3983
+ block-size: 1px;
3984
+ /* stylelint-disable-next-line unit-disallowed-list -- intentional 1px for a11y */
3985
+ inline-size: 1px;
3986
+ padding: 0;
3987
+ /* stylelint-disable-next-line unit-disallowed-list -- intentional -1px for a11y */
3988
+ margin: -1px;
3989
+ overflow: hidden;
3990
+ white-space: nowrap;
3991
+ border-width: 0;
3992
+ clip-path: inset(50%);
3993
+ }
3994
+ }
3995
+ @layer utilities {
3996
+ .text-start {
3997
+ text-align: start;
3998
+ }
3999
+ .text-center {
4000
+ text-align: center;
4001
+ }
4002
+ .text-end {
4003
+ text-align: end;
4004
+ }
4005
+ .text-justify {
4006
+ text-align: justify;
4007
+ }
4008
+ .font-normal {
4009
+ font-weight: var(--ui-weight-normal);
4010
+ }
4011
+ .font-medium {
4012
+ font-weight: var(--ui-weight-medium);
4013
+ }
4014
+ .font-semibold {
4015
+ font-weight: var(--ui-weight-semibold);
4016
+ }
4017
+ .font-bold {
4018
+ font-weight: var(--ui-weight-bold);
4019
+ }
4020
+ .text-xs {
4021
+ font-size: var(--ui-font-size-xs);
4022
+ line-height: var(--ui-leading-xs);
4023
+ }
4024
+ .text-sm {
4025
+ font-size: var(--ui-font-size-sm);
4026
+ line-height: var(--ui-leading-sm);
4027
+ }
4028
+ .text-md {
4029
+ font-size: var(--ui-font-size-md);
4030
+ line-height: var(--ui-leading-md);
4031
+ }
4032
+ .text-lg {
4033
+ font-size: var(--ui-font-size-lg);
4034
+ line-height: var(--ui-leading-lg);
4035
+ }
4036
+ .text-xl {
4037
+ font-size: var(--ui-font-size-xl);
4038
+ line-height: var(--ui-leading-xl);
4039
+ }
4040
+ .text-2xl {
4041
+ font-size: var(--ui-font-size-2xl);
4042
+ line-height: var(--ui-leading-2xl);
4043
+ }
4044
+ .text-3xl {
4045
+ font-size: var(--ui-font-size-3xl);
4046
+ line-height: var(--ui-leading-3xl);
4047
+ }
4048
+ .text-4xl {
4049
+ font-size: var(--ui-font-size-4xl);
4050
+ line-height: var(--ui-leading-4xl);
4051
+ }
4052
+ .text-lead {
4053
+ font-size: var(--ui-lead-size);
4054
+ font-weight: var(--ui-lead-weight);
4055
+ line-height: var(--ui-lead-line-height);
4056
+ letter-spacing: var(--ui-lead-tracking);
4057
+ }
4058
+ .text-eyebrow {
4059
+ font-size: var(--ui-eyebrow-size);
4060
+ font-weight: var(--ui-eyebrow-weight);
4061
+ line-height: var(--ui-eyebrow-line-height);
4062
+ letter-spacing: var(--ui-eyebrow-tracking);
4063
+ text-transform: uppercase;
4064
+ }
4065
+ .text-caption {
4066
+ font-size: var(--ui-caption-size);
4067
+ font-weight: var(--ui-caption-weight);
4068
+ line-height: var(--ui-caption-line-height);
4069
+ letter-spacing: var(--ui-caption-tracking);
4070
+ }
4071
+ .text-body-sm {
4072
+ font-size: var(--ui-body-sm-size);
4073
+ font-weight: var(--ui-body-sm-weight);
4074
+ line-height: var(--ui-body-sm-line-height);
4075
+ letter-spacing: var(--ui-body-sm-tracking);
4076
+ }
4077
+ .font-sans {
4078
+ font-family: var(--ui-font-sans);
4079
+ }
4080
+ .font-mono {
4081
+ font-family: var(--ui-font-mono);
4082
+ }
4083
+ .underline {
4084
+ text-decoration: underline;
4085
+ }
4086
+ .line-through {
4087
+ text-decoration: line-through;
4088
+ }
4089
+ .no-underline {
4090
+ text-decoration: none;
4091
+ }
4092
+ .uppercase {
4093
+ text-transform: uppercase;
4094
+ }
4095
+ .lowercase {
4096
+ text-transform: lowercase;
4097
+ }
4098
+ .capitalize {
4099
+ text-transform: capitalize;
4100
+ }
4101
+ .normal-case {
4102
+ text-transform: none;
4103
+ }
4104
+ .text-primary {
4105
+ color: var(--ui-color-primary);
4106
+ }
4107
+ .text-muted {
4108
+ color: var(--ui-color-text-muted);
4109
+ }
4110
+ .text-success {
4111
+ color: var(--ui-color-success);
4112
+ }
4113
+ .text-warning {
4114
+ color: var(--ui-color-warning);
4115
+ }
4116
+ .text-danger {
4117
+ color: var(--ui-color-danger);
4118
+ }
4119
+ .truncate {
4120
+ overflow: hidden;
4121
+ text-overflow: ellipsis;
4122
+ white-space: nowrap;
4123
+ }
4124
+ .whitespace-normal {
4125
+ white-space: normal;
4126
+ }
4127
+ .whitespace-nowrap {
4128
+ white-space: nowrap;
4129
+ }
4130
+ .whitespace-pre {
4131
+ white-space: pre;
4132
+ }
4133
+ .whitespace-pre-wrap {
4134
+ white-space: pre-wrap;
4135
+ }
4136
+ .prose {
4137
+ max-inline-size: 65ch;
4138
+ }
4139
+ .prose-sm {
4140
+ max-inline-size: 45ch;
4141
+ }
4142
+ .prose-lg {
4143
+ max-inline-size: 75ch;
4144
+ }
4145
+ .tracking-display {
4146
+ letter-spacing: var(--ui-tracking-display);
4147
+ }
4148
+ .tracking-body {
4149
+ letter-spacing: var(--ui-tracking-body);
4150
+ }
4151
+ .tracking-caps {
4152
+ letter-spacing: var(--ui-tracking-caps);
4153
+ }
4154
+ }
4155
+ @layer utilities {
4156
+ .border {
4157
+ border: var(--ui-border-width-sm) solid var(--ui-color-border);
4158
+ }
4159
+ .border-0 {
4160
+ border: none;
4161
+ }
4162
+ .rounded {
4163
+ border-radius: var(--ui-radius-md);
4164
+ }
4165
+ .rounded-none {
4166
+ border-radius: 0;
4167
+ }
4168
+ .rounded-sm {
4169
+ border-radius: var(--ui-radius-sm);
4170
+ }
4171
+ .rounded-lg {
4172
+ border-radius: var(--ui-radius-lg);
4173
+ }
4174
+ .rounded-full {
4175
+ border-radius: var(--ui-radius-full);
4176
+ }
4177
+ .bg {
4178
+ background: var(--ui-color-bg);
4179
+ }
4180
+ .bg-subtle {
4181
+ background: var(--ui-color-bg-subtle);
4182
+ }
4183
+ .bg-muted {
4184
+ background: var(--ui-color-bg-muted);
4185
+ }
4186
+ .bg-transparent {
4187
+ background: transparent;
4188
+ }
4189
+ }
4190
+ @layer utilities {
4191
+ .visually-hidden {
4192
+ position: absolute;
4193
+ block-size: calc(0.5rem / 8);
4194
+ inline-size: calc(0.5rem / 8);
4195
+ padding: 0;
4196
+ margin: calc(0.5rem / -8);
4197
+ overflow: hidden;
4198
+ white-space: nowrap;
4199
+ border: 0;
4200
+ clip: rect(0 0 0 0);
4201
+ clip-path: inset(50%);
4202
+ }
4203
+ .visually-hidden--focusable:focus,
4204
+ .visually-hidden--focusable:active {
4205
+ position: static;
4206
+ block-size: auto;
4207
+ inline-size: auto;
4208
+ margin: 0;
4209
+ overflow: visible;
4210
+ white-space: normal;
4211
+ clip: auto;
4212
+ clip-path: none;
4213
+ }
4214
+ }
4215
+ @view-transition {
4216
+ navigation: auto;
4217
+ }
4218
+ @layer utilities {
4219
+ @keyframes vt-fade-in {
4220
+ from {
4221
+ opacity: 0;
4222
+ }
4223
+ }
4224
+ @keyframes vt-fade-out {
4225
+ to {
4226
+ opacity: 0;
4227
+ }
4228
+ }
4229
+ @keyframes vt-slide-in-up {
4230
+ from {
4231
+ opacity: 0;
4232
+ transform: translateY(1.25rem);
4233
+ }
4234
+ }
4235
+ @keyframes vt-slide-out-up {
4236
+ to {
4237
+ opacity: 0;
4238
+ transform: translateY(-1.25rem);
4239
+ }
4240
+ }
4241
+ @keyframes vt-slide-in-down {
4242
+ from {
4243
+ opacity: 0;
4244
+ transform: translateY(-1.25rem);
4245
+ }
4246
+ }
4247
+ @keyframes vt-slide-out-down {
4248
+ to {
4249
+ opacity: 0;
4250
+ transform: translateY(1.25rem);
4251
+ }
4252
+ }
4253
+ @keyframes vt-slide-in-start {
4254
+ from {
4255
+ opacity: 0;
4256
+ transform: translateX(-1.25rem);
4257
+ }
4258
+ }
4259
+ @keyframes vt-slide-out-start {
4260
+ to {
4261
+ opacity: 0;
4262
+ transform: translateX(-1.25rem);
4263
+ }
4264
+ }
4265
+ @keyframes vt-slide-in-end {
4266
+ from {
4267
+ opacity: 0;
4268
+ transform: translateX(1.25rem);
4269
+ }
4270
+ }
4271
+ @keyframes vt-slide-out-end {
4272
+ to {
4273
+ opacity: 0;
4274
+ transform: translateX(1.25rem);
4275
+ }
4276
+ }
4277
+ @keyframes vt-scale-in {
4278
+ from {
4279
+ opacity: 0;
4280
+ transform: scale(0.95);
4281
+ }
4282
+ }
4283
+ @keyframes vt-scale-out {
4284
+ to {
4285
+ opacity: 0;
4286
+ transform: scale(1.05);
4287
+ }
4288
+ }
4289
+ .transition-name-sidebar {
4290
+ view-transition-name: sidebar;
4291
+ }
4292
+ .transition-name-main {
4293
+ view-transition-name: main;
4294
+ }
4295
+ .transition-name-header {
4296
+ view-transition-name: header;
4297
+ }
4298
+ .transition-name-hero {
4299
+ view-transition-name: hero;
4300
+ }
4301
+ .transition-name-card {
4302
+ view-transition-name: card;
4303
+ }
4304
+ .transition-name-modal {
4305
+ view-transition-name: modal;
4306
+ }
4307
+ .transition-name-slide-up {
4308
+ view-transition-name: slide-up;
4309
+ }
4310
+ .transition-name-slide-down {
4311
+ view-transition-name: slide-down;
4312
+ }
4313
+ .transition-name-slide-start {
4314
+ view-transition-name: slide-start;
4315
+ }
4316
+ .transition-name-slide-end {
4317
+ view-transition-name: slide-end;
4318
+ }
4319
+ .transition-name-scale {
4320
+ view-transition-name: scale;
4321
+ }
4322
+ .transition-name-fade {
4323
+ view-transition-name: fade;
4324
+ }
4325
+ .transition-name-none {
4326
+ view-transition-name: none;
4327
+ }
4328
+ ::view-transition-old(sidebar),
4329
+ ::view-transition-new(sidebar),
4330
+ ::view-transition-old(header),
4331
+ ::view-transition-new(header) {
4332
+ animation: none;
4333
+ }
4334
+ ::view-transition-old(root),
4335
+ ::view-transition-new(root) {
4336
+ animation-duration: var(--ui-duration-base);
4337
+ animation-timing-function: var(--ui-ease-default);
4338
+ }
4339
+ ::view-transition-old(fade) {
4340
+ animation: vt-fade-out var(--ui-duration-base) var(--ui-ease-out);
4341
+ }
4342
+ ::view-transition-new(fade) {
4343
+ animation: vt-fade-in var(--ui-duration-base) var(--ui-ease-out);
4344
+ }
4345
+ ::view-transition-old(slide-up),
4346
+ ::view-transition-old(main) {
4347
+ animation: vt-slide-out-up var(--ui-duration-base) var(--ui-ease-out);
4348
+ }
4349
+ ::view-transition-new(slide-up),
4350
+ ::view-transition-new(main) {
4351
+ animation: vt-slide-in-up var(--ui-duration-base) var(--ui-ease-out);
4352
+ }
4353
+ ::view-transition-old(slide-down) {
4354
+ animation: vt-slide-out-down var(--ui-duration-base) var(--ui-ease-out);
4355
+ }
4356
+ ::view-transition-new(slide-down) {
4357
+ animation: vt-slide-in-down var(--ui-duration-base) var(--ui-ease-out);
4358
+ }
4359
+ ::view-transition-old(slide-start) {
4360
+ animation: vt-slide-out-start var(--ui-duration-base) var(--ui-ease-out);
4361
+ }
4362
+ ::view-transition-new(slide-start) {
4363
+ animation: vt-slide-in-start var(--ui-duration-base) var(--ui-ease-out);
4364
+ }
4365
+ ::view-transition-old(slide-end) {
4366
+ animation: vt-slide-out-end var(--ui-duration-base) var(--ui-ease-out);
4367
+ }
4368
+ ::view-transition-new(slide-end) {
4369
+ animation: vt-slide-in-end var(--ui-duration-base) var(--ui-ease-out);
4370
+ }
4371
+ ::view-transition-old(scale),
4372
+ ::view-transition-old(modal),
4373
+ ::view-transition-old(card) {
4374
+ animation: vt-scale-out var(--ui-duration-base) var(--ui-ease-out);
4375
+ }
4376
+ ::view-transition-new(scale),
4377
+ ::view-transition-new(modal),
4378
+ ::view-transition-new(card) {
4379
+ animation: vt-scale-in var(--ui-duration-base) var(--ui-ease-out);
4380
+ }
4381
+ ::view-transition-group(hero) {
4382
+ animation-duration: var(--ui-duration-slow);
4383
+ animation-timing-function: var(--ui-ease-in-out);
4384
+ }
4385
+ @media (prefers-reduced-motion: reduce) {
4386
+ ::view-transition-old(*),
4387
+ ::view-transition-new(*),
4388
+ ::view-transition-group(*) {
4389
+ animation-duration: 0s !important;
4390
+ }
4391
+ }
4392
+ }
4393
+ /* 99. Debug tools (dev only) */
4394
+ /* Debug grid overlay - add class="debug-grid" to body or any container */
4395
+ .debug-grid,
4396
+ .debug-grid-rows,
4397
+ .debug-baseline {
4398
+ position: relative;
4399
+ }
4400
+
4401
+ .debug-grid {
4402
+ --debug-color: hsl(var(--ui-hue-primary) 80% 50% / 0.15);
4403
+ }
4404
+
4405
+ .debug-grid::after {
4406
+ content: "";
4407
+ position: absolute;
4408
+ inset-block-start: 0;
4409
+ inset-inline-start: 0;
4410
+ z-index: var(--ui-z-debug);
4411
+ block-size: 100%;
4412
+ inline-size: 100%;
4413
+ min-block-size: 100vh;
4414
+ background-image: linear-gradient(to right, var(--debug-color) 1px, transparent 1px), linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px);
4415
+ pointer-events: none;
4416
+ background-size: var(--unit) var(--unit);
4417
+ background-position: 0 0;
4418
+ }
4419
+
4420
+ /* Stronger grid at row intervals (16px) */
4421
+ .debug-grid-rows {
4422
+ --debug-color: hsl(var(--ui-hue-primary) 80% 50% / 0.1);
4423
+ --debug-color-strong: hsl(var(--ui-hue-primary) 80% 50% / 0.25);
4424
+ }
4425
+
4426
+ .debug-grid-rows::after {
4427
+ content: "";
4428
+ position: absolute;
4429
+ inset-block-start: 0;
4430
+ inset-inline-start: 0;
4431
+ z-index: var(--ui-z-debug);
4432
+ block-size: 100%;
4433
+ inline-size: 100%;
4434
+ min-block-size: 100vh;
4435
+ background-image: linear-gradient(to right, var(--debug-color) 1px, transparent 1px), linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px), linear-gradient(to bottom, var(--debug-color-strong) 1px, transparent 1px);
4436
+ pointer-events: none;
4437
+ background-size: var(--unit) var(--unit), var(--unit) var(--unit), var(--unit) var(--ui-row);
4438
+ background-position: 0 0;
4439
+ }
4440
+
4441
+ /* Baseline grid only (horizontal lines) */
4442
+ .debug-baseline {
4443
+ --debug-color: hsl(var(--ui-hue-danger) 80% 50% / 0.2);
4444
+ }
4445
+
4446
+ .debug-baseline::after {
4447
+ content: "";
4448
+ position: absolute;
4449
+ inset-block-start: 0;
4450
+ inset-inline-start: 0;
4451
+ z-index: var(--ui-z-debug);
4452
+ block-size: 100%;
4453
+ inline-size: 100%;
4454
+ min-block-size: 100vh;
4455
+ background-image: linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px);
4456
+ pointer-events: none;
4457
+ background-size: 100% var(--unit);
4458
+ }
4459
+
4460
+ /* Element boundaries outline */
4461
+ .debug-outline * {
4462
+ outline: 1px solid hsla(0, 100%, 50%, 0.5);
4463
+ }