@teseor/css 1.1.0 → 1.2.1

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 (236) hide show
  1. package/dist/compiled.css +1967 -1877
  2. package/dist/index.css +2015 -1925
  3. package/package.json +1 -1
  4. package/src/00-config/tokens/_variables.scss +39 -25
  5. package/src/00-config/tokens/colors/index.scss +22 -21
  6. package/src/00-config/tokens/shadows/index.scss +3 -3
  7. package/src/03-layout/cluster/cluster-visual.png +0 -0
  8. package/src/03-layout/cluster/cluster.visual.spec.ts +15 -0
  9. package/src/03-layout/sidebar/sidebar-visual.png +0 -0
  10. package/src/03-layout/sidebar/sidebar.docs.json +62 -0
  11. package/src/03-layout/sidebar/sidebar.visual.spec.ts +14 -0
  12. package/src/03-layout/sidebar-nav/sidebar-nav.api.json +29 -80
  13. package/src/04-components/actions/button/button-visual.png +0 -0
  14. package/src/04-components/{button → actions/button}/button.api.json +30 -56
  15. package/src/04-components/{button → actions/button}/button.docs.json +75 -0
  16. package/src/04-components/{button → actions/button}/button.visual.spec.ts +1 -1
  17. package/src/04-components/{button → actions/button}/index.scss +28 -18
  18. package/src/04-components/actions/button-group/button-group-visual.png +0 -0
  19. package/src/04-components/{button-group → actions/button-group}/button-group.api.json +5 -1
  20. package/src/04-components/{button-group → actions/button-group}/button-group.visual.spec.ts +3 -2
  21. package/src/04-components/{button-group → actions/button-group}/index.scss +1 -1
  22. package/src/04-components/{avatar → data-display/avatar}/avatar.api.json +5 -0
  23. package/src/04-components/{avatar → data-display/avatar}/avatar.visual.spec.ts +1 -1
  24. package/src/04-components/{avatar → data-display/avatar}/index.scss +1 -1
  25. package/src/04-components/{badge → data-display/badge}/badge.visual.spec.ts +1 -1
  26. package/src/04-components/{badge → data-display/badge}/index.scss +13 -10
  27. package/src/04-components/{card → data-display/card}/card.visual.spec.ts +1 -1
  28. package/src/04-components/{card → data-display/card}/index.scss +1 -1
  29. package/src/04-components/data-display/data-list/data-list-visual.png +0 -0
  30. package/src/04-components/{data-list → data-display/data-list}/data-list.api.json +16 -1
  31. package/src/04-components/{data-list → data-display/data-list}/data-list.visual.spec.ts +3 -2
  32. package/src/04-components/{data-list → data-display/data-list}/index.scss +4 -3
  33. package/src/04-components/data-display/icon/icon-visual.png +0 -0
  34. package/src/04-components/{icon → data-display/icon}/icon.api.json +7 -6
  35. package/src/04-components/{icon → data-display/icon}/icon.docs.json +86 -22
  36. package/src/04-components/{icon → data-display/icon}/icon.visual.spec.ts +1 -1
  37. package/src/04-components/{icon → data-display/icon}/index.scss +7 -20
  38. package/src/04-components/{status → data-display/status}/index.scss +1 -1
  39. package/src/04-components/{status → data-display/status}/status.api.json +14 -1
  40. package/src/04-components/{status → data-display/status}/status.visual.spec.ts +1 -1
  41. package/src/04-components/{table → data-display/table}/index.scss +1 -1
  42. package/src/04-components/{table → data-display/table}/table.api.json +8 -1
  43. package/src/04-components/{table → data-display/table}/table.visual.spec.ts +1 -1
  44. package/src/04-components/{tag → data-display/tag}/index.scss +1 -1
  45. package/src/04-components/{tag → data-display/tag}/tag.api.json +4 -0
  46. package/src/04-components/{tag → data-display/tag}/tag.visual.spec.ts +1 -1
  47. package/src/04-components/{accordion → disclosure/accordion}/accordion.api.json +5 -1
  48. package/src/04-components/{accordion → disclosure/accordion}/accordion.visual.spec.ts +1 -1
  49. package/src/04-components/{accordion → disclosure/accordion}/index.scss +1 -1
  50. package/src/04-components/disclosure/{disclosure.api.json → disclosure/disclosure.api.json} +13 -1
  51. package/src/04-components/disclosure/{disclosure.visual.spec.ts → disclosure/disclosure.visual.spec.ts} +1 -1
  52. package/src/04-components/disclosure/{index.scss → disclosure/index.scss} +1 -1
  53. package/src/04-components/{alert → feedback/alert}/alert.api.json +6 -0
  54. package/src/04-components/{alert → feedback/alert}/alert.visual.spec.ts +1 -1
  55. package/src/04-components/{alert → feedback/alert}/index.scss +11 -16
  56. package/src/04-components/{progress → feedback/progress}/index.scss +1 -1
  57. package/src/04-components/{progress → feedback/progress}/progress.api.json +20 -1
  58. package/src/04-components/{progress → feedback/progress}/progress.visual.spec.ts +1 -1
  59. package/src/04-components/{skeleton → feedback/skeleton}/index.scss +1 -1
  60. package/src/04-components/{skeleton → feedback/skeleton}/skeleton.api.json +8 -1
  61. package/src/04-components/{skeleton → feedback/skeleton}/skeleton.visual.spec.ts +1 -1
  62. package/src/04-components/{spinner → feedback/spinner}/index.scss +1 -1
  63. package/src/04-components/{spinner → feedback/spinner}/spinner.visual.spec.ts +1 -1
  64. package/src/04-components/{toast → feedback/toast}/index.scss +1 -1
  65. package/src/04-components/{toast → feedback/toast}/toast.api.json +22 -1
  66. package/src/04-components/{toast → feedback/toast}/toast.visual.spec.ts +1 -1
  67. package/src/04-components/forms/checkbox/checkbox-visual.png +0 -0
  68. package/src/04-components/{checkbox → forms/checkbox}/checkbox.api.json +1 -1
  69. package/src/04-components/{checkbox → forms/checkbox}/checkbox.visual.spec.ts +1 -1
  70. package/src/04-components/{checkbox → forms/checkbox}/index.scss +1 -1
  71. package/src/04-components/forms/field/field.api.json +19 -0
  72. package/src/04-components/{field → forms/field}/field.visual.spec.ts +1 -1
  73. package/src/04-components/{field → forms/field}/index.scss +1 -1
  74. package/src/04-components/forms/form-error/form-error-visual.png +0 -0
  75. package/src/04-components/{form-error → forms/form-error}/form-error.api.json +3 -0
  76. package/src/04-components/{form-error → forms/form-error}/form-error.visual.spec.ts +1 -1
  77. package/src/04-components/{form-error → forms/form-error}/index.scss +1 -1
  78. package/src/04-components/{form-helper → forms/form-helper}/form-helper.visual.spec.ts +1 -1
  79. package/src/04-components/{form-helper → forms/form-helper}/index.scss +1 -1
  80. package/src/04-components/{input → forms/input}/index.scss +1 -1
  81. package/src/04-components/forms/input/input-visual.png +0 -0
  82. package/src/04-components/{input → forms/input}/input.api.json +31 -0
  83. package/src/04-components/{input → forms/input}/input.visual.spec.ts +1 -1
  84. package/src/04-components/{label → forms/label}/index.scss +1 -1
  85. package/src/04-components/{label → forms/label}/label.api.json +4 -0
  86. package/src/04-components/{label → forms/label}/label.visual.spec.ts +1 -1
  87. package/src/04-components/{radio → forms/radio}/index.scss +1 -1
  88. package/src/04-components/forms/radio/radio-visual.png +0 -0
  89. package/src/04-components/{radio → forms/radio}/radio.api.json +1 -1
  90. package/src/04-components/{radio → forms/radio}/radio.visual.spec.ts +1 -1
  91. package/src/04-components/{select → forms/select}/index.scss +1 -1
  92. package/src/04-components/{select → forms/select}/select.api.json +3 -0
  93. package/src/04-components/{select → forms/select}/select.visual.spec.ts +1 -1
  94. package/src/04-components/{textarea → forms/textarea}/index.scss +1 -1
  95. package/src/04-components/{textarea → forms/textarea}/textarea.api.json +3 -0
  96. package/src/04-components/{textarea → forms/textarea}/textarea.visual.spec.ts +1 -1
  97. package/src/04-components/{toggle → forms/toggle}/index.scss +1 -1
  98. package/src/04-components/{toggle → forms/toggle}/toggle.api.json +5 -0
  99. package/src/04-components/{toggle → forms/toggle}/toggle.visual.spec.ts +1 -1
  100. package/src/04-components/index.scss +42 -41
  101. package/src/04-components/{divider → layout/divider}/divider.api.json +3 -0
  102. package/src/04-components/{divider → layout/divider}/divider.visual.spec.ts +1 -1
  103. package/src/04-components/{divider → layout/divider}/index.scss +1 -1
  104. package/src/04-components/{breadcrumb → navigation/breadcrumb}/breadcrumb.api.json +5 -0
  105. package/src/04-components/{breadcrumb → navigation/breadcrumb}/breadcrumb.visual.spec.ts +1 -1
  106. package/src/04-components/{breadcrumb → navigation/breadcrumb}/index.scss +1 -1
  107. package/src/04-components/{menu → navigation/menu}/index.scss +1 -1
  108. package/src/04-components/{menu → navigation/menu}/menu.api.json +24 -0
  109. package/src/04-components/{menu → navigation/menu}/menu.visual.spec.ts +1 -1
  110. package/src/04-components/navigation/nav/index.scss +142 -0
  111. package/src/04-components/navigation/nav/nav-visual.png +0 -0
  112. package/src/04-components/navigation/nav/nav.api.json +55 -0
  113. package/src/04-components/navigation/nav/nav.docs.json +242 -0
  114. package/src/04-components/navigation/nav/nav.visual.spec.ts +14 -0
  115. package/src/04-components/{pagination → navigation/pagination}/index.scss +1 -1
  116. package/src/04-components/{pagination → navigation/pagination}/pagination.api.json +22 -1
  117. package/src/04-components/{pagination → navigation/pagination}/pagination.visual.spec.ts +1 -1
  118. package/src/04-components/{tabs → navigation/tabs}/index.scss +1 -1
  119. package/src/04-components/{tabs → navigation/tabs}/tabs.api.json +17 -0
  120. package/src/04-components/{tabs → navigation/tabs}/tabs.visual.spec.ts +1 -1
  121. package/src/04-components/{dialog → overlays/dialog}/dialog.api.json +12 -1
  122. package/src/04-components/{dialog → overlays/dialog}/dialog.visual.spec.ts +1 -1
  123. package/src/04-components/{dialog → overlays/dialog}/index.scss +1 -1
  124. package/src/04-components/{drawer → overlays/drawer}/drawer.api.json +17 -1
  125. package/src/04-components/{drawer → overlays/drawer}/drawer.visual.spec.ts +1 -1
  126. package/src/04-components/{drawer → overlays/drawer}/index.scss +1 -1
  127. package/src/04-components/{modal → overlays/modal}/index.scss +1 -1
  128. package/src/04-components/{modal → overlays/modal}/modal.api.json +12 -1
  129. package/src/04-components/{modal → overlays/modal}/modal.visual.spec.ts +1 -1
  130. package/src/04-components/{overlay → overlays/overlay}/index.scss +1 -1
  131. package/src/04-components/{overlay → overlays/overlay}/overlay.api.json +14 -1
  132. package/src/04-components/{overlay → overlays/overlay}/overlay.visual.spec.ts +1 -1
  133. package/src/04-components/{popover → overlays/popover}/index.scss +1 -1
  134. package/src/04-components/{popover → overlays/popover}/popover.api.json +9 -1
  135. package/src/04-components/{popover → overlays/popover}/popover.visual.spec.ts +1 -1
  136. package/src/04-components/{tooltip → overlays/tooltip}/index.scss +1 -1
  137. package/src/04-components/{tooltip → overlays/tooltip}/tooltip.api.json +11 -1
  138. package/src/04-components/{tooltip → overlays/tooltip}/tooltip.visual.spec.ts +1 -1
  139. package/src/04-components/{code → typography/code}/code.api.json +6 -1
  140. package/src/04-components/{code → typography/code}/code.visual.spec.ts +1 -1
  141. package/src/04-components/{code → typography/code}/index.scss +1 -1
  142. package/src/04-components/{heading → typography/heading}/heading.visual.spec.ts +1 -1
  143. package/src/04-components/{heading → typography/heading}/index.scss +1 -1
  144. package/src/04-components/{link → typography/link}/index.scss +1 -1
  145. package/src/04-components/typography/link/link-visual.png +0 -0
  146. package/src/04-components/{link → typography/link}/link.api.json +6 -0
  147. package/src/04-components/{link → typography/link}/link.visual.spec.ts +1 -1
  148. package/src/99-debug/grid-overlay.scss +9 -8
  149. package/src/testing/page-setup.ts +25 -9
  150. package/src/testing/sidebar-toggles.spec.ts +103 -0
  151. package/src/04-components/button/button-visual.png +0 -0
  152. package/src/04-components/button-group/button-group-visual.png +0 -0
  153. package/src/04-components/checkbox/checkbox-visual.png +0 -0
  154. package/src/04-components/data-list/data-list-visual.png +0 -0
  155. package/src/04-components/field/field.api.json +0 -11
  156. package/src/04-components/form-error/form-error-visual.png +0 -0
  157. package/src/04-components/icon/icon-visual.png +0 -0
  158. package/src/04-components/input/input-visual.png +0 -0
  159. package/src/04-components/link/link-visual.png +0 -0
  160. package/src/04-components/radio/radio-visual.png +0 -0
  161. /package/src/04-components/{button-group → actions/button-group}/button-group.docs.json +0 -0
  162. /package/src/04-components/{avatar → data-display/avatar}/avatar-visual.png +0 -0
  163. /package/src/04-components/{avatar → data-display/avatar}/avatar.docs.json +0 -0
  164. /package/src/04-components/{badge → data-display/badge}/badge-visual.png +0 -0
  165. /package/src/04-components/{badge → data-display/badge}/badge.api.json +0 -0
  166. /package/src/04-components/{badge → data-display/badge}/badge.docs.json +0 -0
  167. /package/src/04-components/{card → data-display/card}/card-visual.png +0 -0
  168. /package/src/04-components/{card → data-display/card}/card.api.json +0 -0
  169. /package/src/04-components/{card → data-display/card}/card.docs.json +0 -0
  170. /package/src/04-components/{data-list → data-display/data-list}/data-list.docs.json +0 -0
  171. /package/src/04-components/{status → data-display/status}/status-visual.png +0 -0
  172. /package/src/04-components/{status → data-display/status}/status.docs.json +0 -0
  173. /package/src/04-components/{table → data-display/table}/table-visual.png +0 -0
  174. /package/src/04-components/{table → data-display/table}/table.docs.json +0 -0
  175. /package/src/04-components/{tag → data-display/tag}/tag-visual.png +0 -0
  176. /package/src/04-components/{tag → data-display/tag}/tag.docs.json +0 -0
  177. /package/src/04-components/{accordion → disclosure/accordion}/accordion-visual.png +0 -0
  178. /package/src/04-components/{accordion → disclosure/accordion}/accordion.docs.json +0 -0
  179. /package/src/04-components/disclosure/{disclosure-visual.png → disclosure/disclosure-visual.png} +0 -0
  180. /package/src/04-components/disclosure/{disclosure.docs.json → disclosure/disclosure.docs.json} +0 -0
  181. /package/src/04-components/{alert → feedback/alert}/alert-visual.png +0 -0
  182. /package/src/04-components/{alert → feedback/alert}/alert.docs.json +0 -0
  183. /package/src/04-components/{progress → feedback/progress}/progress-visual.png +0 -0
  184. /package/src/04-components/{progress → feedback/progress}/progress.docs.json +0 -0
  185. /package/src/04-components/{skeleton → feedback/skeleton}/skeleton-visual.png +0 -0
  186. /package/src/04-components/{skeleton → feedback/skeleton}/skeleton.docs.json +0 -0
  187. /package/src/04-components/{spinner → feedback/spinner}/spinner-visual.png +0 -0
  188. /package/src/04-components/{spinner → feedback/spinner}/spinner.api.json +0 -0
  189. /package/src/04-components/{spinner → feedback/spinner}/spinner.docs.json +0 -0
  190. /package/src/04-components/{toast → feedback/toast}/toast-visual.png +0 -0
  191. /package/src/04-components/{toast → feedback/toast}/toast.docs.json +0 -0
  192. /package/src/04-components/{checkbox → forms/checkbox}/checkbox.docs.json +0 -0
  193. /package/src/04-components/{field → forms/field}/field-visual.png +0 -0
  194. /package/src/04-components/{field → forms/field}/field.docs.json +0 -0
  195. /package/src/04-components/{form-error → forms/form-error}/form-error.docs.json +0 -0
  196. /package/src/04-components/{form-helper → forms/form-helper}/form-helper-visual.png +0 -0
  197. /package/src/04-components/{form-helper → forms/form-helper}/form-helper.api.json +0 -0
  198. /package/src/04-components/{form-helper → forms/form-helper}/form-helper.docs.json +0 -0
  199. /package/src/04-components/{input → forms/input}/input.docs.json +0 -0
  200. /package/src/04-components/{label → forms/label}/label-visual.png +0 -0
  201. /package/src/04-components/{label → forms/label}/label.docs.json +0 -0
  202. /package/src/04-components/{radio → forms/radio}/radio.docs.json +0 -0
  203. /package/src/04-components/{select → forms/select}/select-visual.png +0 -0
  204. /package/src/04-components/{select → forms/select}/select.docs.json +0 -0
  205. /package/src/04-components/{textarea → forms/textarea}/textarea-visual.png +0 -0
  206. /package/src/04-components/{textarea → forms/textarea}/textarea.docs.json +0 -0
  207. /package/src/04-components/{toggle → forms/toggle}/toggle-visual.png +0 -0
  208. /package/src/04-components/{toggle → forms/toggle}/toggle.docs.json +0 -0
  209. /package/src/04-components/{divider → layout/divider}/divider-visual.png +0 -0
  210. /package/src/04-components/{divider → layout/divider}/divider.docs.json +0 -0
  211. /package/src/04-components/{breadcrumb → navigation/breadcrumb}/breadcrumb-visual.png +0 -0
  212. /package/src/04-components/{breadcrumb → navigation/breadcrumb}/breadcrumb.docs.json +0 -0
  213. /package/src/04-components/{menu → navigation/menu}/menu-visual.png +0 -0
  214. /package/src/04-components/{menu → navigation/menu}/menu.docs.json +0 -0
  215. /package/src/04-components/{pagination → navigation/pagination}/pagination-visual.png +0 -0
  216. /package/src/04-components/{pagination → navigation/pagination}/pagination.docs.json +0 -0
  217. /package/src/04-components/{tabs → navigation/tabs}/tabs-visual.png +0 -0
  218. /package/src/04-components/{tabs → navigation/tabs}/tabs.docs.json +0 -0
  219. /package/src/04-components/{dialog → overlays/dialog}/dialog-visual.png +0 -0
  220. /package/src/04-components/{dialog → overlays/dialog}/dialog.docs.json +0 -0
  221. /package/src/04-components/{drawer → overlays/drawer}/drawer-visual.png +0 -0
  222. /package/src/04-components/{drawer → overlays/drawer}/drawer.docs.json +0 -0
  223. /package/src/04-components/{modal → overlays/modal}/modal-visual.png +0 -0
  224. /package/src/04-components/{modal → overlays/modal}/modal.docs.json +0 -0
  225. /package/src/04-components/{overlay → overlays/overlay}/overlay-visual.png +0 -0
  226. /package/src/04-components/{overlay → overlays/overlay}/overlay.docs.json +0 -0
  227. /package/src/04-components/{popover → overlays/popover}/popover-visual.png +0 -0
  228. /package/src/04-components/{popover → overlays/popover}/popover.docs.json +0 -0
  229. /package/src/04-components/{tooltip → overlays/tooltip}/tooltip-visual.png +0 -0
  230. /package/src/04-components/{tooltip → overlays/tooltip}/tooltip.docs.json +0 -0
  231. /package/src/04-components/{code → typography/code}/code-visual.png +0 -0
  232. /package/src/04-components/{code → typography/code}/code.docs.json +0 -0
  233. /package/src/04-components/{heading → typography/heading}/heading-visual.png +0 -0
  234. /package/src/04-components/{heading → typography/heading}/heading.api.json +0 -0
  235. /package/src/04-components/{heading → typography/heading}/heading.docs.json +0 -0
  236. /package/src/04-components/{link → typography/link}/link.docs.json +0 -0
package/dist/compiled.css CHANGED
@@ -9,26 +9,25 @@
9
9
  @import "https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500;700&family=Noto+Sans+Mono:wght@400;500&display=swap";
10
10
  @layer reset, tokens, base, primitives, components.styles, components.tokens, utilities, themes;
11
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%);
12
+ --ui-color-primary: oklch(55% 0.22 250);
13
+ --ui-color-success: oklch(60% 0.18 145);
14
+ --ui-color-warning: oklch(75% 0.18 70);
15
+ --ui-color-danger: oklch(60% 0.22 25);
16
+ --ui-color-neutral: oklch(50% 0.02 250);
17
+ --ui-color-primary-light: color-mix(in oklch, var(--ui-color-primary) 50%, white);
18
+ --ui-color-primary-dark: color-mix(in oklch, var(--ui-color-primary) 75%, black);
19
+ --ui-color-primary-subtle: color-mix(in oklch, var(--ui-color-primary) 12%, white);
20
+ --ui-color-primary-hover: color-mix(in oklch, var(--ui-color-primary) 85%, black);
21
+ --ui-color-neutral-50: color-mix(in oklch, var(--ui-color-neutral) 3%, white);
22
+ --ui-color-neutral-100: color-mix(in oklch, var(--ui-color-neutral) 6%, white);
23
+ --ui-color-neutral-200: color-mix(in oklch, var(--ui-color-neutral) 12%, white);
24
+ --ui-color-neutral-300: color-mix(in oklch, var(--ui-color-neutral) 25%, white);
25
+ --ui-color-neutral-400: color-mix(in oklch, var(--ui-color-neutral) 50%, white);
26
+ --ui-color-neutral-500: var(--ui-color-neutral);
27
+ --ui-color-neutral-600: color-mix(in oklch, var(--ui-color-neutral) 85%, black);
28
+ --ui-color-neutral-700: color-mix(in oklch, var(--ui-color-neutral) 70%, black);
29
+ --ui-color-neutral-800: color-mix(in oklch, var(--ui-color-neutral) 50%, black);
30
+ --ui-color-neutral-900: color-mix(in oklch, var(--ui-color-neutral) 35%, black);
32
31
  }
33
32
 
34
33
  :root {
@@ -141,9 +140,9 @@
141
140
  }
142
141
 
143
142
  :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);
143
+ --shadow-sm: 0 1px 2px hsl(var(--ui-hue-primary, 220) 10% 20% / 0.05);
144
+ --shadow-md: 0 4px 6px hsl(var(--ui-hue-primary, 220) 10% 20% / 0.1);
145
+ --shadow-lg: 0 10px 15px hsl(var(--ui-hue-primary, 220) 10% 20% / 0.15);
147
146
  }
148
147
 
149
148
  @layer tokens {
@@ -779,134 +778,216 @@
779
778
  }
780
779
  /* 04. Components */
781
780
  @layer components.tokens {
782
- .accordion {
783
- --_border-color: var(--ui-accordion-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
784
- --_border-width: var(--ui-accordion-border-width, 1px);
785
- --_radius: var(--ui-accordion-radius, var(--ui-radius-md, calc(0.5rem * 1)));
781
+ .button {
782
+ --_accent: var(--ui-button-accent, var(--ui-color-primary, oklch(55% 0.22 250deg)));
783
+ --_height: var(--ui-button-height, var(--ui-row-2, 2rem));
784
+ --_padding-x: var(--ui-button-padding-x, var(--ui-space-2, 1rem));
785
+ --_font-size: var(--ui-button-font-size, var(--ui-font-size-sm, 0.875rem));
786
+ --_font-weight: var(--ui-button-font-weight, var(--ui-weight-medium, 500));
787
+ --_radius: var(--ui-button-radius, var(--ui-radius-md, 0.5rem));
788
+ --_bg: var(--_accent);
789
+ --_bg-hover: color-mix(in oklch, var(--_accent) 80%, black);
790
+ --_text: var(--ui-button-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
791
+ }
792
+ .button--sm {
793
+ --ui-ctx-size: var(--ui-size-sm, 0.75rem);
794
+ --_height: var(--ui-button-height-sm, calc(var(--row, 1rem) * 1.5));
795
+ --_font-size: var(--ui-button-font-size-sm, var(--ui-font-size-xs, 0.75rem));
796
+ }
797
+ .button--md {
798
+ --ui-ctx-size: var(--ui-size-md, 1rem);
799
+ --_height: var(--ui-button-height-md, var(--ui-row-2, 2rem));
800
+ --_font-size: var(--ui-button-font-size-md, var(--ui-font-size-sm, 0.875rem));
801
+ }
802
+ .button--lg {
803
+ --ui-ctx-size: var(--ui-size-lg, 1.25rem);
804
+ --_height: var(--ui-button-height-lg, calc(var(--row, 1rem) * 2.5));
805
+ --_padding-x: var(--ui-button-padding-x-lg, var(--ui-space-3, 1.5rem));
806
+ --_font-size: var(--ui-button-font-size-lg, var(--ui-font-size-md, 1rem));
807
+ }
808
+ .button--secondary {
809
+ --_bg: var(--ui-color-bg-muted, hsl(220, 10%, 90%));
810
+ --_bg-hover: var(--ui-color-border-strong, hsl(220, 10%, 80%));
811
+ --_text: var(--ui-color-text, hsl(220, 10%, 10%));
812
+ }
813
+ .button--ghost {
814
+ --_bg: transparent;
815
+ --_bg-hover: color-mix(in oklch, var(--_accent) 10%, transparent);
816
+ --_text: var(--_accent);
817
+ }
818
+ .button--outline {
819
+ --_bg: transparent;
820
+ --_bg-hover: var(--_accent);
821
+ --_text: var(--_accent);
822
+ --_text-hover: var(--ui-color-text-inverse, hsl(220, 10%, 98%));
823
+ --_border: var(--ui-border-width-sm, 0.0625rem) solid currentColor;
824
+ }
825
+ .button--danger {
826
+ --_accent: var(--ui-color-danger, oklch(60% 0.22 25deg));
827
+ }
828
+ .button--link {
829
+ --_bg: transparent;
830
+ --_bg-hover: transparent;
831
+ --_text: var(--_accent);
832
+ --_text-hover: color-mix(in oklch, var(--_accent) 70%, black);
833
+ --_height: auto;
834
+ --_padding-x: 0;
835
+ --_radius: 0;
836
+ }
837
+ .button--icon {
838
+ --_padding-x: 0;
839
+ }
840
+ .button--radius-none {
841
+ --_radius: 0;
842
+ }
843
+ .button--radius-sm {
844
+ --_radius: var(--ui-radius-sm, 0.25rem);
845
+ }
846
+ .button--radius-lg {
847
+ --_radius: var(--ui-radius-lg, 1rem);
848
+ }
849
+ .button--radius-full {
850
+ --_radius: 624.9375rem;
786
851
  }
787
852
  }
788
853
  @layer components.styles {
789
- .accordion {
854
+ .button {
855
+ display: inline-flex;
856
+ align-items: center;
857
+ justify-content: center;
858
+ gap: var(--ui-space-1, 0.5rem);
859
+ block-size: var(--_height);
860
+ padding-inline: var(--_padding-x);
861
+ margin: 0;
862
+ font-family: var(--ui-font-sans, Noto Sans, system-ui, -apple-system, sans-serif);
863
+ font-size: var(--_font-size);
864
+ font-weight: var(--_font-weight);
865
+ line-height: 1;
866
+ text-decoration: none;
867
+ white-space: nowrap;
868
+ color: var(--_text);
869
+ background: var(--_bg);
870
+ border: var(--_border, none);
790
871
  border-radius: var(--_radius);
791
- outline: var(--_border-width) solid var(--_border-color);
792
- outline-offset: calc(var(--_border-width) * -1);
872
+ cursor: pointer;
873
+ 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);
793
874
  }
794
- .accordion > .disclosure {
795
- --_border-width: 0;
796
- border: none;
797
- border-radius: 0;
875
+ .button:hover, .button--hover {
876
+ color: var(--_text-hover, var(--_text));
877
+ background: var(--_bg-hover);
798
878
  }
799
- .accordion > .disclosure + .disclosure {
800
- border-block-start: 1px solid var(--_border-color);
879
+ .button:focus-visible, .button--focus {
880
+ outline: var(--ui-border-width-md, 0.125rem) solid var(--ui-color-focus, oklch(75% 0.15 250deg));
881
+ outline-offset: var(--ui-border-width-md, 0.125rem);
801
882
  }
802
- .accordion > .disclosure:first-child .disclosure__trigger {
803
- border-start-start-radius: var(--_radius);
804
- border-start-end-radius: var(--_radius);
883
+ .button:active, .button--active {
884
+ transform: scale(0.98);
805
885
  }
806
- .accordion > .disclosure:last-child .disclosure__trigger {
807
- border-end-start-radius: var(--_radius);
808
- border-end-end-radius: var(--_radius);
886
+ .button:disabled {
887
+ opacity: 0.5;
888
+ cursor: not-allowed;
809
889
  }
810
- .accordion > .disclosure:last-child .disclosure__content {
811
- border-end-start-radius: var(--_radius);
812
- border-end-end-radius: var(--_radius);
890
+ .button:disabled:hover {
891
+ background: var(--_bg);
892
+ transform: none;
813
893
  }
814
- .accordion--borderless {
815
- border: none;
894
+ .button--icon {
895
+ inline-size: var(--_height);
816
896
  }
817
- .accordion--borderless > .disclosure + .disclosure {
818
- border-block-start: none;
897
+ .button--block {
898
+ inline-size: 100%;
819
899
  }
820
- .accordion--separated {
821
- display: flex;
822
- flex-direction: column;
823
- gap: calc(0.5rem * 1);
824
- border: none;
900
+ .button--link {
901
+ text-decoration: underline;
902
+ text-underline-offset: var(--ui-space-quarter);
825
903
  }
826
- .accordion--separated > .disclosure {
827
- border: 1px solid var(--_border-color);
828
- border-radius: var(--_radius);
904
+ .button--link:hover {
905
+ text-decoration-thickness: var(--ui-space-quarter);
829
906
  }
830
- .accordion--separated > .disclosure + .disclosure {
831
- border-block-start: 1px solid var(--_border-color);
907
+ .button__icon {
908
+ flex-shrink: 0;
909
+ block-size: 1em;
910
+ inline-size: 1em;
832
911
  }
833
- }
834
- @layer components.tokens {
835
- .alert {
836
- --_padding: var(--ui-alert-padding, var(--ui-space-2, 1rem));
837
- --_border-width: var(--ui-alert-border-width, var(--ui-border-width-sm, 0.0625rem));
838
- --_gap: var(--ui-alert-gap, var(--ui-space-1, 0.5rem));
839
- --_radius: var(--ui-alert-radius, var(--ui-radius-md, 0.5rem));
840
- --_bg: var(--ui-alert-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
841
- --_border-color: var(--ui-alert-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
842
- --_color: var(--ui-alert-color, var(--ui-color-text, hsl(220, 10%, 10%)));
843
- --_icon-color: var(--ui-alert-icon-color, currentcolor);
912
+ .button__icon--start {
913
+ order: -1;
844
914
  }
845
- .alert--info {
846
- --_bg: var(--ui-alert-info-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
847
- --_border-color: var(--ui-alert-info-border, var(--ui-color-primary, hsl(220, 85%, 50%)));
848
- --_icon-color: var(--ui-alert-info-icon, var(--ui-color-primary, hsl(220, 85%, 50%)));
915
+ .button__icon--end {
916
+ order: 1;
849
917
  }
850
- .alert--success {
851
- --_bg: var(--ui-alert-success-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
852
- --_border-color: var(--ui-alert-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
853
- --_icon-color: var(--ui-alert-success-icon, var(--ui-color-success, hsl(142, 70%, 45%)));
918
+ .button--loading {
919
+ position: relative;
920
+ opacity: 0.7;
921
+ pointer-events: none;
854
922
  }
855
- .alert--warning {
856
- --_bg: var(--ui-alert-warning-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
857
- --_border-color: var(--ui-alert-warning-border, var(--ui-color-warning, hsl(38, 90%, 50%)));
858
- --_icon-color: var(--ui-alert-warning-icon, var(--ui-color-warning, hsl(38, 90%, 50%)));
923
+ .button--loading::after {
924
+ content: "";
925
+ position: absolute;
926
+ block-size: 1em;
927
+ inline-size: 1em;
928
+ border: 2px solid currentcolor;
929
+ border-radius: 50%;
930
+ animation: button-spin 0.6s linear infinite;
931
+ border-inline-end-color: transparent;
859
932
  }
860
- .alert--danger {
861
- --_bg: var(--ui-alert-danger-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
862
- --_border-color: var(--ui-alert-danger-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
863
- --_icon-color: var(--ui-alert-danger-icon, var(--ui-color-danger, hsl(0, 70%, 50%)));
933
+ @keyframes button-spin {
934
+ to {
935
+ transform: rotate(360deg);
936
+ }
937
+ }
938
+ }
939
+ @layer components.tokens {
940
+ .button-group {
941
+ --_radius: var(--ui-button-group-radius, var(--ui-radius-md, calc(0.5rem / 2)));
864
942
  }
865
943
  }
866
944
  @layer components.styles {
867
- .alert {
868
- display: flex;
869
- align-items: flex-start;
870
- gap: var(--_gap);
871
- padding: calc(var(--_padding) - var(--_border-width));
872
- padding-inline: var(--_padding);
873
- color: var(--_color);
874
- background: var(--_bg);
875
- border: var(--_border-width) solid var(--_border-color);
876
- border-radius: var(--_radius);
877
- border-inline-start-width: calc(0.5rem * 0.5);
945
+ .button-group {
946
+ display: inline-flex;
878
947
  }
879
- .alert__icon {
880
- flex-shrink: 0;
881
- color: var(--_icon-color);
948
+ .button-group > .button:not(:first-child, :last-child) {
949
+ border-radius: 0;
882
950
  }
883
- .alert__content {
884
- flex: 1;
885
- min-inline-size: 0;
951
+ .button-group > .button:first-child:not(:last-child) {
952
+ border-start-end-radius: 0;
953
+ border-end-end-radius: 0;
886
954
  }
887
- .alert__title {
888
- margin: 0;
889
- font-weight: var(--ui-weight-medium, 500);
890
- line-height: var(--ui-row-1, 1rem);
955
+ .button-group > .button:last-child:not(:first-child) {
956
+ border-start-start-radius: 0;
957
+ border-end-start-radius: 0;
891
958
  }
892
- .alert__description {
893
- margin: 0;
894
- margin-block-start: calc(0.5rem * 1);
895
- font-size: var(--ui-font-size-sm, 0.875rem);
896
- line-height: var(--ui-row-1, 1rem);
897
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
959
+ .button-group > .button + .button {
960
+ margin-inline-start: calc(0.5rem / -8);
898
961
  }
899
- .alert__close {
900
- flex-shrink: 0;
901
- align-self: flex-start;
902
- padding: 0;
903
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
904
- background: none;
905
- border: none;
906
- cursor: pointer;
962
+ .button-group > .button:focus-visible {
963
+ z-index: 1;
907
964
  }
908
- .alert__close:hover {
909
- color: var(--ui-color-text, hsl(220, 10%, 10%));
965
+ .button-group--vertical {
966
+ flex-direction: column;
967
+ }
968
+ .button-group--vertical > .button:not(:first-child, :last-child) {
969
+ border-radius: 0;
970
+ }
971
+ .button-group--vertical > .button:first-child:not(:last-child) {
972
+ border-end-start-radius: 0;
973
+ border-end-end-radius: 0;
974
+ }
975
+ .button-group--vertical > .button:last-child:not(:first-child) {
976
+ border-start-start-radius: 0;
977
+ border-start-end-radius: 0;
978
+ }
979
+ .button-group--vertical > .button + .button {
980
+ margin-block-start: calc(0.5rem / -8);
981
+ margin-inline-start: 0;
982
+ }
983
+ .button-group--attached > .button {
984
+ border-inline-end-width: 0;
985
+ }
986
+ .button-group--attached > .button:last-child {
987
+ border-inline-end-width: 1px;
988
+ }
989
+ .button-group--attached > .button + .button {
990
+ margin-inline-start: 0;
910
991
  }
911
992
  }
912
993
  @layer components.tokens {
@@ -986,12 +1067,13 @@
986
1067
  }
987
1068
  @layer components.tokens {
988
1069
  .badge {
1070
+ --_accent: var(--ui-badge-accent, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
989
1071
  --_height: var(--ui-badge-height, calc(var(--ui-row, 1rem) * 1.25));
990
1072
  --_padding-x: var(--ui-badge-padding-x, var(--ui-space-1, 0.5rem));
991
1073
  --_font-size: var(--ui-badge-font-size, var(--ui-font-size-xs, 0.75rem));
992
1074
  --_font-weight: var(--ui-badge-font-weight, var(--ui-weight-medium, 500));
993
1075
  --_radius: var(--ui-badge-radius, var(--ui-radius-full, 9999px));
994
- --_bg: var(--ui-badge-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
1076
+ --_bg: var(--_accent);
995
1077
  --_text: var(--ui-badge-text, var(--ui-color-text, hsl(220, 10%, 10%)));
996
1078
  }
997
1079
  .badge--sm {
@@ -1000,20 +1082,20 @@
1000
1082
  --_font-size: var(--ui-badge-font-size-sm, calc(var(--ui-font-size-xs, 0.75rem) * 0.85));
1001
1083
  }
1002
1084
  .badge--primary {
1003
- --_bg: var(--ui-badge-primary-bg, var(--ui-color-primary, hsl(220, 85%, 50%)));
1004
- --_text: var(--ui-badge-primary-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1085
+ --_accent: var(--ui-color-primary, oklch(55% 0.22 250deg));
1086
+ --_text: var(--ui-color-text-inverse, hsl(220, 10%, 98%));
1005
1087
  }
1006
1088
  .badge--success {
1007
- --_bg: var(--ui-badge-success-bg, var(--ui-color-success, hsl(142, 70%, 45%)));
1008
- --_text: var(--ui-badge-success-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1089
+ --_accent: var(--ui-color-success, oklch(60% 0.18 145deg));
1090
+ --_text: var(--ui-color-text-inverse, hsl(220, 10%, 98%));
1009
1091
  }
1010
1092
  .badge--warning {
1011
- --_bg: var(--ui-badge-warning-bg, var(--ui-color-warning, hsl(38, 90%, 50%)));
1012
- --_text: var(--ui-badge-warning-text, var(--ui-color-text, hsl(220, 10%, 10%)));
1093
+ --_accent: var(--ui-color-warning, oklch(75% 0.18 70deg));
1094
+ --_text: var(--ui-color-text, hsl(220, 10%, 10%));
1013
1095
  }
1014
1096
  .badge--danger {
1015
- --_bg: var(--ui-badge-danger-bg, var(--ui-color-danger, hsl(0, 70%, 50%)));
1016
- --_text: var(--ui-badge-danger-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1097
+ --_accent: var(--ui-color-danger, oklch(60% 0.22 25deg));
1098
+ --_text: var(--ui-color-text-inverse, hsl(220, 10%, 98%));
1017
1099
  }
1018
1100
  }
1019
1101
  @layer components.styles {
@@ -1033,535 +1115,389 @@
1033
1115
  }
1034
1116
  }
1035
1117
  @layer components.tokens {
1036
- .breadcrumb {
1037
- --_height: var(--ui-breadcrumb-height, var(--ui-row-1, 1rem));
1038
- --_gap: var(--ui-breadcrumb-gap, calc(0.5rem * 1));
1039
- --_separator-color: var(--ui-breadcrumb-separator-color, var(--ui-color-text-muted));
1040
- --_link-color: var(--ui-breadcrumb-link-color, var(--ui-color-text-muted));
1041
- --_current-color: var(--ui-breadcrumb-current-color, var(--ui-color-text));
1042
- }
1043
- }
1044
- @layer components.styles {
1045
- .breadcrumb {
1046
- display: flex;
1047
- flex-wrap: wrap;
1048
- align-items: center;
1049
- gap: var(--_gap);
1050
- block-size: var(--_height);
1051
- padding: 0;
1052
- margin: 0;
1053
- font-size: var(--ui-font-size-sm, 0.875rem);
1054
- line-height: 1;
1055
- list-style: none;
1056
- }
1057
- .breadcrumb__item {
1058
- display: flex;
1059
- align-items: center;
1060
- gap: var(--_gap);
1061
- block-size: var(--_height);
1118
+ .card {
1119
+ --_padding: var(--ui-card-padding, var(--ui-space-4));
1120
+ --_border-width: var(--ui-card-border-width, var(--ui-border-width-sm));
1121
+ --_bg: var(--ui-card-bg, var(--ui-color-bg));
1122
+ --_border-color: var(--ui-card-border-color, var(--ui-color-border));
1123
+ --_radius: var(--ui-card-radius, var(--ui-radius-md));
1062
1124
  }
1063
- .breadcrumb__item:not(:last-child)::after {
1064
- content: var(--ui-breadcrumb-separator, "/");
1065
- color: var(--_separator-color);
1125
+ .card--subtle {
1126
+ --_bg: var(--ui-card-bg-subtle, var(--ui-color-bg-subtle));
1066
1127
  }
1067
- .breadcrumb__link {
1068
- text-decoration: none;
1069
- color: var(--_link-color);
1070
- transition: color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
1128
+ .card--muted {
1129
+ --_bg: var(--ui-card-bg-muted, var(--ui-color-bg-muted));
1071
1130
  }
1072
- .breadcrumb__link:hover {
1073
- text-decoration: underline;
1074
- color: var(--ui-color-primary);
1131
+ .card--sm {
1132
+ --_padding: var(--ui-card-padding-sm, var(--ui-space-2));
1075
1133
  }
1076
- .breadcrumb__item:last-child .breadcrumb__link,
1077
- .breadcrumb__current {
1078
- color: var(--_current-color);
1079
- pointer-events: none;
1134
+ .card--lg {
1135
+ --_padding: var(--ui-card-padding-lg, var(--ui-space-6));
1080
1136
  }
1081
- .breadcrumb__item--hidden {
1082
- display: none;
1137
+ .card--flush {
1138
+ --_padding: 0;
1139
+ --_border-width: 0;
1083
1140
  }
1084
- .breadcrumb__ellipsis {
1085
- color: var(--_separator-color);
1141
+ }
1142
+ @layer components.styles {
1143
+ .card {
1144
+ border: var(--_border-width) solid var(--_border-color);
1145
+ border-radius: var(--_radius);
1146
+ background: var(--_bg);
1147
+ padding: calc(var(--_padding) - var(--_border-width));
1148
+ line-height: var(--ui-row-1);
1086
1149
  }
1087
1150
  }
1088
1151
  @layer components.tokens {
1089
- .button {
1090
- --_height: var(--ui-button-height, var(--ui-row-2, 2rem));
1091
- --_padding-x: var(--ui-button-padding-x, var(--ui-space-2, 1rem));
1092
- --_font-size: var(--ui-button-font-size, var(--ui-font-size-sm, 0.875rem));
1093
- --_font-weight: var(--ui-button-font-weight, var(--ui-weight-medium, 500));
1094
- --_radius: var(--ui-button-radius, var(--ui-radius-md, 0.5rem));
1095
- --_bg: var(--ui-button-bg, var(--ui-color-primary, hsl(220, 85%, 50%)));
1096
- --_bg-hover: var(--ui-button-bg-hover, var(--ui-color-primary-dark, hsl(220, 85%, 40%)));
1097
- --_text: var(--ui-button-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1152
+ .data-list {
1153
+ --_gap: var(--ui-data-list-gap, calc(0.5rem * 2));
1154
+ --_item-gap: var(--ui-data-list-item-gap, calc(0.5rem * 1));
1155
+ --_label-color: var(--ui-data-list-label-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
1156
+ --_value-color: var(--ui-data-list-value-color, var(--ui-color-text, hsl(220, 10%, 10%)));
1098
1157
  }
1099
- .button--sm {
1100
- --_height: var(--ui-button-height-sm, calc(var(--row, 1rem) * 1.5));
1101
- --_font-size: var(--ui-button-font-size-sm, var(--ui-font-size-xs, 0.75rem));
1158
+ }
1159
+ @layer components.styles {
1160
+ .data-list {
1161
+ display: flex;
1162
+ flex-direction: column;
1163
+ gap: var(--_gap);
1164
+ margin: 0;
1165
+ line-height: var(--ui-row-1, 1rem);
1102
1166
  }
1103
- .button--lg {
1104
- --_height: var(--ui-button-height-lg, calc(var(--row, 1rem) * 2.5));
1105
- --_padding-x: var(--ui-button-padding-x-lg, var(--ui-space-3, 1.5rem));
1106
- --_font-size: var(--ui-button-font-size-lg, var(--ui-font-size-md, 1rem));
1167
+ .data-list__item {
1168
+ display: flex;
1169
+ flex-direction: column;
1170
+ gap: var(--_item-gap);
1107
1171
  }
1108
- .button--secondary {
1109
- --_bg: var(--ui-button-secondary-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
1110
- --_bg-hover: var(--ui-button-secondary-bg-hover, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
1111
- --_text: var(--ui-button-secondary-text, var(--ui-color-text, hsl(220, 10%, 10%)));
1172
+ .data-list__label {
1173
+ font-size: var(--ui-font-size-sm, 0.875rem);
1174
+ font-weight: var(--ui-weight-medium, 500);
1175
+ line-height: var(--ui-row-1, 1rem);
1176
+ color: var(--_label-color);
1112
1177
  }
1113
- .button--ghost {
1114
- --_bg: var(--ui-button-ghost-bg, transparent);
1115
- --_bg-hover: var(--ui-button-ghost-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
1116
- --_text: var(--ui-button-ghost-text, var(--ui-color-primary, hsl(220, 85%, 50%)));
1178
+ .data-list__value {
1179
+ margin: 0;
1180
+ line-height: var(--ui-row-1, 1rem);
1181
+ color: var(--_value-color);
1117
1182
  }
1118
- .button--outline {
1119
- --_bg: var(--ui-button-outline-bg, transparent);
1120
- --_bg-hover: var(--ui-button-outline-bg-hover, var(--ui-color-primary, hsl(220, 85%, 50%)));
1121
- --_text: var(--ui-button-outline-text, var(--ui-color-primary, hsl(220, 85%, 50%)));
1122
- --_text-hover: var(--ui-button-outline-text-hover, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1123
- --_border: var(--ui-button-outline-border, var(--ui-border-width-sm, 0.0625rem) solid currentColor);
1183
+ .data-list--horizontal .data-list__item {
1184
+ flex-direction: row;
1185
+ align-items: baseline;
1186
+ justify-content: space-between;
1187
+ gap: calc(0.5rem * 2);
1124
1188
  }
1125
- .button--danger {
1126
- --_bg: var(--ui-button-danger-bg, var(--ui-color-danger, hsl(0, 70%, 50%)));
1127
- --_bg-hover: var(--ui-button-danger-bg-hover, hsl(0, 70%, 40%));
1189
+ .data-list--horizontal .data-list__label {
1190
+ flex-shrink: 0;
1128
1191
  }
1129
- .button--link {
1130
- --_bg: transparent;
1131
- --_bg-hover: transparent;
1132
- --_text: var(--ui-button-link-text, var(--ui-color-primary, hsl(220, 85%, 50%)));
1133
- --_text-hover: var(--ui-button-link-text-hover, var(--ui-color-primary-dark, hsl(220, 85%, 40%)));
1134
- --_height: auto;
1135
- --_padding-x: 0;
1136
- --_radius: 0;
1192
+ .data-list--horizontal .data-list__value {
1193
+ text-align: end;
1137
1194
  }
1138
- .button--icon {
1139
- --_padding-x: 0;
1195
+ .data-list--divided .data-list__item {
1196
+ padding-block-end: calc(var(--_gap) - var(--ui-border-width-sm, 0.0625rem));
1197
+ border-block-end: var(--ui-border-width-sm, 0.0625rem) solid var(--ui-color-border, hsl(220, 10%, 90%));
1140
1198
  }
1141
- .button--radius-none {
1142
- --_radius: 0;
1199
+ .data-list--divided .data-list__item:last-child {
1200
+ padding-block-end: 0;
1201
+ border-block-end: none;
1143
1202
  }
1144
- .button--radius-sm {
1145
- --_radius: var(--ui-radius-sm, 0.25rem);
1203
+ .data-list--striped .data-list__item:nth-child(odd) {
1204
+ padding: calc(0.5rem * 1);
1205
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
1206
+ border-radius: var(--ui-radius-sm, 0.25rem);
1146
1207
  }
1147
- .button--radius-lg {
1148
- --_radius: var(--ui-radius-lg, 1rem);
1208
+ .data-list--sm {
1209
+ --_gap: calc(0.5rem * 1);
1210
+ --_item-gap: 0;
1211
+ font-size: var(--ui-font-size-sm, 0.875rem);
1149
1212
  }
1150
- .button--radius-full {
1151
- --_radius: 624.9375rem;
1213
+ .data-list--lg {
1214
+ --_gap: calc(0.5rem * 3);
1215
+ --_item-gap: calc(0.5rem * 1);
1216
+ font-size: var(--ui-font-size-lg, 1.25rem);
1152
1217
  }
1153
1218
  }
1154
- @layer components.styles {
1155
- .button {
1156
- display: inline-flex;
1157
- align-items: center;
1158
- justify-content: center;
1159
- gap: var(--ui-space-1, 0.5rem);
1160
- block-size: var(--_height);
1161
- padding-inline: var(--_padding-x);
1162
- margin: 0;
1163
- font-family: var(--ui-font-sans, Noto Sans, system-ui, -apple-system, sans-serif);
1164
- font-size: var(--_font-size);
1165
- font-weight: var(--_font-weight);
1166
- line-height: 1;
1167
- text-decoration: none;
1168
- white-space: nowrap;
1169
- color: var(--_text);
1170
- background: var(--_bg);
1171
- border: var(--_border, none);
1172
- border-radius: var(--_radius);
1173
- cursor: pointer;
1174
- 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);
1175
- }
1176
- .button:hover, .button--hover {
1177
- color: var(--_text-hover, var(--_text));
1178
- background: var(--_bg-hover);
1179
- }
1180
- .button:focus-visible, .button--focus {
1181
- outline: var(--ui-border-width-md, 0.125rem) solid var(--ui-color-focus, hsl(220, 85%, 65%));
1182
- outline-offset: var(--ui-border-width-md, 0.125rem);
1219
+ @layer components.tokens {
1220
+ .icon {
1221
+ --_size: var(--ui-icon-size, var(--ui-ctx-size, 1rem));
1222
+ --_stroke: var(--ui-icon-stroke, 2);
1183
1223
  }
1184
- .button:active, .button--active {
1185
- transform: scale(0.98);
1224
+ .icon--xs {
1225
+ --_size: var(--ui-icon-size-xs, var(--ui-size-xs, 0.5rem));
1186
1226
  }
1187
- .button:disabled {
1188
- opacity: 0.5;
1189
- cursor: not-allowed;
1227
+ .icon--sm {
1228
+ --_size: var(--ui-icon-size-sm, var(--ui-size-sm, 0.75rem));
1190
1229
  }
1191
- .button:disabled:hover {
1192
- background: var(--_bg);
1193
- transform: none;
1230
+ .icon--md {
1231
+ --_size: var(--ui-icon-size-md, var(--ui-size-md, 1rem));
1194
1232
  }
1195
- .button--icon {
1196
- inline-size: var(--_height);
1233
+ .icon--lg {
1234
+ --_size: var(--ui-icon-size-lg, var(--ui-size-lg, 1.25rem));
1197
1235
  }
1198
- .button--block {
1199
- inline-size: 100%;
1236
+ .icon--xl {
1237
+ --_size: var(--ui-icon-size-xl, var(--ui-size-xl, 1.5rem));
1200
1238
  }
1201
- .button--link {
1202
- text-decoration: underline;
1203
- text-underline-offset: var(--ui-space-quarter);
1239
+ .icon--stroke-thin {
1240
+ --_stroke: var(--ui-icon-stroke-thin, 1);
1204
1241
  }
1205
- .button--link:hover {
1206
- text-decoration-thickness: var(--ui-space-quarter);
1242
+ .icon--stroke-thick {
1243
+ --_stroke: var(--ui-icon-stroke-thick, 2.5);
1207
1244
  }
1208
- .button__icon {
1245
+ }
1246
+ @layer components.styles {
1247
+ .icon {
1248
+ display: inline-block;
1209
1249
  flex-shrink: 0;
1210
- block-size: 1em;
1211
- inline-size: 1em;
1212
- }
1213
- .button__icon--start {
1214
- order: -1;
1215
- }
1216
- .button__icon--end {
1217
- order: 1;
1250
+ block-size: var(--_size);
1251
+ inline-size: var(--_size);
1252
+ vertical-align: middle;
1253
+ color: currentcolor;
1254
+ fill: none;
1255
+ stroke: currentcolor;
1256
+ stroke-width: var(--_stroke);
1257
+ stroke-linecap: round;
1258
+ stroke-linejoin: round;
1218
1259
  }
1219
- .button--loading {
1220
- position: relative;
1221
- opacity: 0.7;
1222
- pointer-events: none;
1260
+ .icon--filled {
1261
+ fill: currentcolor;
1262
+ stroke: none;
1223
1263
  }
1224
- .button--loading::after {
1225
- content: "";
1226
- position: absolute;
1227
- block-size: 1em;
1228
- inline-size: 1em;
1229
- border: 2px solid currentcolor;
1230
- border-radius: 50%;
1231
- animation: button-spin 0.6s linear infinite;
1232
- border-inline-end-color: transparent;
1264
+ .icon--spin {
1265
+ animation: icon-spin 1s linear infinite;
1233
1266
  }
1234
- @keyframes button-spin {
1267
+ @keyframes icon-spin {
1235
1268
  to {
1236
1269
  transform: rotate(360deg);
1237
1270
  }
1238
1271
  }
1239
1272
  }
1240
1273
  @layer components.tokens {
1241
- .button-group {
1242
- --_radius: var(--ui-button-group-radius, var(--ui-radius-md, calc(0.5rem / 2)));
1274
+ .status {
1275
+ --_size: var(--ui-status-size, calc(0.5rem * 1));
1276
+ --_color: var(--ui-status-color, var(--ui-color-text-muted));
1277
+ --_gap: var(--ui-status-gap, calc(0.5rem * 1));
1243
1278
  }
1244
- }
1245
- @layer components.styles {
1246
- .button-group {
1247
- display: inline-flex;
1279
+ .status--success {
1280
+ --_color: var(--ui-color-success);
1248
1281
  }
1249
- .button-group > .button:not(:first-child, :last-child) {
1250
- border-radius: 0;
1251
- }
1252
- .button-group > .button:first-child:not(:last-child) {
1253
- border-start-end-radius: 0;
1254
- border-end-end-radius: 0;
1255
- }
1256
- .button-group > .button:last-child:not(:first-child) {
1257
- border-start-start-radius: 0;
1258
- border-end-start-radius: 0;
1259
- }
1260
- .button-group > .button + .button {
1261
- margin-inline-start: calc(0.5rem / -8);
1282
+ .status--warning {
1283
+ --_color: var(--ui-color-warning);
1262
1284
  }
1263
- .button-group > .button:focus-visible {
1264
- z-index: 1;
1285
+ .status--danger {
1286
+ --_color: var(--ui-color-danger);
1265
1287
  }
1266
- .button-group--vertical {
1267
- flex-direction: column;
1288
+ .status--info {
1289
+ --_color: var(--ui-color-primary);
1268
1290
  }
1269
- .button-group--vertical > .button:not(:first-child, :last-child) {
1270
- border-radius: 0;
1291
+ }
1292
+ @layer components.styles {
1293
+ .status {
1294
+ display: inline-flex;
1295
+ align-items: center;
1296
+ gap: var(--_gap);
1271
1297
  }
1272
- .button-group--vertical > .button:first-child:not(:last-child) {
1273
- border-end-start-radius: 0;
1274
- border-end-end-radius: 0;
1298
+ .status__dot {
1299
+ flex-shrink: 0;
1300
+ block-size: var(--_size);
1301
+ inline-size: var(--_size);
1302
+ background: var(--_color);
1303
+ border-radius: 50%;
1275
1304
  }
1276
- .button-group--vertical > .button:last-child:not(:first-child) {
1277
- border-start-start-radius: 0;
1278
- border-start-end-radius: 0;
1305
+ .status--pulse .status__dot {
1306
+ position: relative;
1279
1307
  }
1280
- .button-group--vertical > .button + .button {
1281
- margin-block-start: calc(0.5rem / -8);
1282
- margin-inline-start: 0;
1308
+ .status--pulse .status__dot::before {
1309
+ content: "";
1310
+ position: absolute;
1311
+ inset: 0;
1312
+ background: var(--_color);
1313
+ border-radius: 50%;
1314
+ animation: status-pulse 2s infinite;
1283
1315
  }
1284
- .button-group--attached > .button {
1285
- border-inline-end-width: 0;
1316
+ @keyframes status-pulse {
1317
+ 0% {
1318
+ opacity: 1;
1319
+ transform: scale(1);
1320
+ }
1321
+ 100% {
1322
+ opacity: 0;
1323
+ transform: scale(2.5);
1324
+ }
1286
1325
  }
1287
- .button-group--attached > .button:last-child {
1288
- border-inline-end-width: 1px;
1326
+ .status--sm {
1327
+ --_size: calc(0.5rem * 0.75);
1328
+ --_gap: calc(0.5rem * 0.75);
1289
1329
  }
1290
- .button-group--attached > .button + .button {
1291
- margin-inline-start: 0;
1330
+ .status--lg {
1331
+ --_size: calc(0.5rem * 1.5);
1332
+ --_gap: calc(0.5rem * 1.5);
1292
1333
  }
1293
1334
  }
1294
1335
  @layer components.tokens {
1295
- .card {
1296
- --_padding: var(--ui-card-padding, var(--ui-space-4));
1297
- --_border-width: var(--ui-card-border-width, var(--ui-border-width-sm));
1298
- --_bg: var(--ui-card-bg, var(--ui-color-bg));
1299
- --_border-color: var(--ui-card-border-color, var(--ui-color-border));
1300
- --_radius: var(--ui-card-radius, var(--ui-radius-md));
1336
+ .table {
1337
+ --_font-size: var(--ui-table-font-size, var(--ui-font-size-sm, 0.875rem));
1338
+ --_border-color: var(--ui-table-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
1339
+ --_header-bg: var(--ui-table-header-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
1340
+ --_cell-padding-x: var(--ui-table-cell-padding-x, var(--ui-space-2, 1rem));
1341
+ --_cell-padding-y: var(--ui-table-cell-padding-y, var(--ui-space-1, 0.5rem));
1301
1342
  }
1302
- .card--subtle {
1303
- --_bg: var(--ui-card-bg-subtle, var(--ui-color-bg-subtle));
1343
+ .table--compact {
1344
+ --_cell-padding-y: var(--ui-space-0, 0.25rem);
1345
+ --_cell-padding-x: var(--ui-space-1, 0.5rem);
1346
+ --_font-size: var(--ui-font-size-xs, 0.75rem);
1304
1347
  }
1305
- .card--muted {
1306
- --_bg: var(--ui-card-bg-muted, var(--ui-color-bg-muted));
1348
+ }
1349
+ @layer components.styles {
1350
+ .table {
1351
+ inline-size: 100%;
1352
+ font-size: var(--_font-size);
1353
+ border-collapse: separate;
1354
+ border-spacing: 0;
1307
1355
  }
1308
- .card--sm {
1309
- --_padding: var(--ui-card-padding-sm, var(--ui-space-2));
1356
+ .table th,
1357
+ .table td {
1358
+ padding-block-start: var(--_cell-padding-y);
1359
+ padding-block-end: calc(var(--_cell-padding-y) - var(--ui-border-width-sm, 0.0625rem));
1360
+ padding-inline: var(--_cell-padding-x);
1361
+ line-height: calc(var(--unit, 0.5rem) * 3);
1362
+ text-align: start;
1363
+ border-block-end: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
1310
1364
  }
1311
- .card--lg {
1312
- --_padding: var(--ui-card-padding-lg, var(--ui-space-6));
1365
+ .table th {
1366
+ font-weight: var(--ui-weight-medium, 500);
1367
+ background: var(--_header-bg);
1313
1368
  }
1314
- .card--flush {
1315
- --_padding: 0;
1316
- --_border-width: 0;
1369
+ .table--striped tbody tr:nth-child(odd) {
1370
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
1317
1371
  }
1318
- }
1319
- @layer components.styles {
1320
- .card {
1321
- border: var(--_border-width) solid var(--_border-color);
1322
- border-radius: var(--_radius);
1323
- background: var(--_bg);
1324
- padding: calc(var(--_padding) - var(--_border-width));
1325
- line-height: var(--ui-row-1);
1372
+ .table--striped th {
1373
+ background: var(--ui-color-bg-muted, hsl(220, 10%, 90%));
1326
1374
  }
1327
1375
  }
1328
1376
  @layer components.tokens {
1329
- .checkbox {
1330
- --_size: var(--ui-checkbox-size, calc(0.5rem * 2));
1331
- --_radius: var(--ui-checkbox-radius, var(--ui-radius-sm, 0.25rem));
1332
- --_bg: var(--ui-checkbox-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
1333
- --_bg-checked: var(--ui-checkbox-bg-checked, var(--ui-color-primary, hsl(220, 85%, 50%)));
1334
- --_border-color: var(--ui-checkbox-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
1335
- --_border-color-focus: var(--ui-checkbox-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
1336
- --_check-color: var(--ui-checkbox-check-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1377
+ .tag {
1378
+ --_height: var(--ui-tag-height, calc(0.5rem * 3));
1379
+ --_padding-x: var(--ui-tag-padding-x, var(--ui-space-1, 0.5rem));
1380
+ --_gap: var(--ui-tag-gap, calc(0.5rem * 0.5));
1381
+ --_radius: var(--ui-tag-radius, var(--ui-radius-full, 9999px));
1382
+ --_font-size: var(--ui-tag-font-size, var(--ui-font-size-sm, 0.875rem));
1383
+ --_bg: var(--ui-tag-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
1384
+ --_color: var(--ui-tag-color, var(--ui-color-text, hsl(220, 10%, 10%)));
1337
1385
  }
1338
- .checkbox--lg {
1339
- --_size: var(--ui-checkbox-size-lg, calc(0.5rem * 3));
1386
+ .tag--sm {
1387
+ --_height: var(--ui-tag-height-sm, calc(0.5rem * 2.5));
1388
+ --_padding-x: var(--ui-tag-padding-x-sm, calc(0.5rem * 1));
1389
+ --_font-size: var(--ui-tag-font-size-sm, var(--ui-font-size-xs, 0.75rem));
1340
1390
  }
1341
- .checkbox--error {
1342
- --_border-color: var(--ui-checkbox-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
1343
- --_border-color-focus: var(--ui-checkbox-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
1391
+ .tag--primary {
1392
+ --_bg: var(--ui-tag-primary-bg, var(--ui-color-primary, oklch(55% 0.22 250deg)));
1393
+ --_color: var(--ui-tag-primary-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1394
+ }
1395
+ .tag--success {
1396
+ --_bg: var(--ui-tag-success-bg, var(--ui-color-success, oklch(60% 0.18 145deg)));
1397
+ --_color: var(--ui-tag-success-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1398
+ }
1399
+ .tag--warning {
1400
+ --_bg: var(--ui-tag-warning-bg, var(--ui-color-warning, oklch(75% 0.18 70deg)));
1401
+ --_color: var(--ui-tag-warning-color, var(--ui-color-text, hsl(220, 10%, 10%)));
1402
+ }
1403
+ .tag--danger {
1404
+ --_bg: var(--ui-tag-danger-bg, var(--ui-color-danger, oklch(60% 0.22 25deg)));
1405
+ --_color: var(--ui-tag-danger-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1344
1406
  }
1345
1407
  }
1346
1408
  @layer components.styles {
1347
- .checkbox {
1409
+ .tag {
1348
1410
  display: inline-flex;
1349
- flex-shrink: 0;
1350
1411
  align-items: center;
1351
- justify-content: center;
1352
- block-size: var(--_size);
1353
- inline-size: var(--_size);
1354
- margin: 0;
1355
- vertical-align: middle;
1412
+ gap: var(--_gap);
1413
+ block-size: var(--_height);
1414
+ padding-inline: var(--_padding-x);
1415
+ font-size: var(--_font-size);
1416
+ font-weight: var(--ui-weight-medium, 500);
1417
+ line-height: 1;
1418
+ white-space: nowrap;
1419
+ color: var(--_color);
1356
1420
  background: var(--_bg);
1357
- border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
1358
1421
  border-radius: var(--_radius);
1359
- cursor: pointer;
1360
- appearance: none;
1361
- 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);
1362
- }
1363
- .checkbox::before {
1364
- content: "";
1365
- block-size: 65%;
1366
- inline-size: 65%;
1367
- background-color: var(--_check-color);
1368
- opacity: 0;
1369
- clip-path: polygon(20% 55%, 40% 75%, 80% 25%, 85% 30%, 40% 85%, 15% 60%);
1370
- transition: opacity var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
1371
- }
1372
- .checkbox:hover:not(:disabled) {
1373
- border-color: var(--_border-color-focus);
1374
- }
1375
- .checkbox:focus-visible {
1376
- border-color: var(--_border-color-focus);
1377
- outline: none;
1378
- box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
1379
1422
  }
1380
- .checkbox:checked {
1381
- background: var(--_bg-checked);
1382
- border-color: var(--_bg-checked);
1383
- }
1384
- .checkbox:checked::before {
1385
- opacity: 1;
1423
+ .tag:disabled, .tag[aria-disabled=true] {
1424
+ opacity: 0.5;
1425
+ cursor: not-allowed;
1386
1426
  }
1387
- .checkbox:indeterminate {
1388
- background: var(--_bg-checked);
1389
- border-color: var(--_bg-checked);
1427
+ .tag__remove {
1428
+ display: inline-flex;
1429
+ flex-shrink: 0;
1430
+ align-items: center;
1431
+ justify-content: center;
1432
+ padding: 0;
1433
+ margin-inline-start: calc(var(--_gap) * -0.5);
1434
+ color: currentcolor;
1435
+ background: none;
1436
+ border: none;
1437
+ opacity: 0.7;
1438
+ cursor: pointer;
1390
1439
  }
1391
- .checkbox:indeterminate::before {
1440
+ .tag__remove:hover {
1392
1441
  opacity: 1;
1393
- clip-path: polygon(15% 45%, 85% 45%, 85% 55%, 15% 55%);
1394
1442
  }
1395
- .checkbox:disabled {
1396
- opacity: 0.5;
1397
- cursor: not-allowed;
1443
+ .tag-group {
1444
+ display: flex;
1445
+ flex-wrap: wrap;
1446
+ gap: calc(0.5rem * 0.5);
1398
1447
  }
1399
1448
  }
1400
1449
  @layer components.tokens {
1401
- .code {
1402
- --_font-size: var(--ui-code-font-size, var(--ui-font-size-sm, 0.875rem));
1403
- --_bg: var(--ui-code-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
1404
- --_padding-x: var(--ui-code-padding-x, var(--ui-space-1, 0.5rem));
1405
- --_padding-y: var(--ui-code-padding-y, var(--ui-space-0, 0.25rem));
1406
- --_radius: var(--ui-code-radius, var(--ui-radius-sm, 0.25rem));
1407
- }
1408
- .code--sm {
1409
- --_font-size: var(--ui-font-size-xs, 0.75rem);
1410
- }
1411
- .code-block {
1412
- --_font-size: var(--ui-code-font-size-block, var(--ui-font-size-sm, 0.875rem));
1413
- --_bg: var(--ui-code-bg-block, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
1414
- --_padding: var(--ui-code-padding-block, var(--ui-space-3, 1.5rem));
1415
- --_radius: var(--ui-code-radius-block, var(--ui-radius-md, 0.5rem));
1416
- --_border-color: var(--ui-code-border-color-block, var(--ui-color-border, hsl(220, 10%, 90%)));
1450
+ .accordion {
1451
+ --_border-color: var(--ui-accordion-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
1452
+ --_border-width: var(--ui-accordion-border-width, 1px);
1453
+ --_radius: var(--ui-accordion-radius, var(--ui-radius-md, calc(0.5rem * 1)));
1417
1454
  }
1418
1455
  }
1419
1456
  @layer components.styles {
1420
- .code {
1421
- padding: var(--_padding-y) var(--_padding-x);
1422
- font-family: var(--ui-font-mono, Noto Sans Mono, ui-monospace, Cascadia Code, monospace);
1423
- font-size: var(--_font-size);
1424
- line-height: var(--ui-leading-tight-sm, 1rem);
1425
- background: var(--_bg);
1426
- border-radius: var(--_radius);
1427
- }
1428
- .code-block {
1429
- display: block;
1430
- padding: calc(var(--_padding) - var(--ui-border-width-sm, 0.0625rem));
1431
- overflow-x: auto;
1432
- font-family: var(--ui-font-mono, Noto Sans Mono, ui-monospace, Cascadia Code, monospace);
1433
- font-size: var(--_font-size);
1434
- line-height: var(--ui-leading-tight-sm, 1rem);
1435
- white-space: pre;
1436
- background: var(--_bg);
1437
- border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
1457
+ .accordion {
1438
1458
  border-radius: var(--_radius);
1459
+ outline: var(--_border-width) solid var(--_border-color);
1460
+ outline-offset: calc(var(--_border-width) * -1);
1439
1461
  }
1440
- .code-block code {
1441
- padding: 0;
1442
- font-size: inherit;
1443
- background: none;
1444
- }
1445
- }
1446
- @layer components.tokens {
1447
- .data-list {
1448
- --_gap: var(--ui-data-list-gap, calc(0.5rem * 2));
1449
- --_item-gap: var(--ui-data-list-item-gap, calc(0.5rem * 1));
1450
- --_label-color: var(--ui-data-list-label-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
1451
- --_value-color: var(--ui-data-list-value-color, var(--ui-color-text, hsl(220, 10%, 10%)));
1452
- }
1453
- }
1454
- @layer components.styles {
1455
- .data-list {
1456
- display: flex;
1457
- flex-direction: column;
1458
- gap: var(--_gap);
1459
- margin: 0;
1460
- line-height: var(--ui-row-1, 1rem);
1461
- }
1462
- .data-list__item {
1463
- display: flex;
1464
- flex-direction: column;
1465
- gap: var(--_item-gap);
1466
- }
1467
- .data-list__label {
1468
- font-size: var(--ui-font-size-sm, 0.875rem);
1469
- font-weight: var(--ui-weight-medium, 500);
1470
- line-height: var(--ui-row-1, 1rem);
1471
- color: var(--_label-color);
1472
- }
1473
- .data-list__value {
1474
- margin: 0;
1475
- line-height: var(--ui-row-1, 1rem);
1476
- color: var(--_value-color);
1477
- }
1478
- .data-list--horizontal .data-list__item {
1479
- flex-direction: row;
1480
- align-items: baseline;
1481
- justify-content: space-between;
1482
- gap: calc(0.5rem * 2);
1483
- }
1484
- .data-list--horizontal .data-list__label {
1485
- flex-shrink: 0;
1486
- }
1487
- .data-list--horizontal .data-list__value {
1488
- text-align: end;
1489
- }
1490
- .data-list--divided .data-list__item {
1491
- padding-block-end: var(--_gap);
1492
- border-block-end: 1px solid var(--ui-color-border, hsl(220, 10%, 90%));
1462
+ .accordion > .disclosure {
1463
+ --_border-width: 0;
1464
+ border: none;
1465
+ border-radius: 0;
1493
1466
  }
1494
- .data-list--divided .data-list__item:last-child {
1495
- padding-block-end: 0;
1496
- border-block-end: none;
1467
+ .accordion > .disclosure + .disclosure {
1468
+ border-block-start: 1px solid var(--_border-color);
1497
1469
  }
1498
- .data-list--striped .data-list__item:nth-child(odd) {
1499
- padding: calc(0.5rem * 1);
1500
- background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
1501
- border-radius: var(--ui-radius-sm, 0.25rem);
1470
+ .accordion > .disclosure:first-child .disclosure__trigger {
1471
+ border-start-start-radius: var(--_radius);
1472
+ border-start-end-radius: var(--_radius);
1502
1473
  }
1503
- .data-list--sm {
1504
- --_gap: calc(0.5rem * 1);
1505
- --_item-gap: 0;
1506
- font-size: var(--ui-font-size-sm, 0.875rem);
1474
+ .accordion > .disclosure:last-child .disclosure__trigger {
1475
+ border-end-start-radius: var(--_radius);
1476
+ border-end-end-radius: var(--_radius);
1507
1477
  }
1508
- .data-list--lg {
1509
- --_gap: calc(0.5rem * 3);
1510
- --_item-gap: calc(0.5rem * 1);
1511
- font-size: var(--ui-font-size-lg, 1.25rem);
1478
+ .accordion > .disclosure:last-child .disclosure__content {
1479
+ border-end-start-radius: var(--_radius);
1480
+ border-end-end-radius: var(--_radius);
1512
1481
  }
1513
- }
1514
- @layer components.tokens {
1515
- .dialog {
1516
- --_header-padding: var(--ui-dialog-header-padding, calc(0.5rem * 2) calc(0.5rem * 3));
1517
- --_body-padding: var(--ui-dialog-body-padding, calc(0.5rem * 3));
1518
- --_footer-padding: var(--ui-dialog-footer-padding, calc(0.5rem * 2) calc(0.5rem * 3));
1519
- --_border-color: var(--ui-dialog-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
1482
+ .accordion--borderless {
1483
+ border: none;
1520
1484
  }
1521
- }
1522
- @layer components.styles {
1523
- .dialog .modal__content {
1524
- padding: 0;
1485
+ .accordion--borderless > .disclosure + .disclosure {
1486
+ border-block-start: none;
1525
1487
  }
1526
- .dialog__header {
1488
+ .accordion--separated {
1527
1489
  display: flex;
1528
- flex-shrink: 0;
1529
- align-items: center;
1530
- justify-content: space-between;
1531
- gap: calc(0.5rem * 2);
1532
- padding: var(--_header-padding);
1533
- border-block-end: 1px solid var(--_border-color);
1534
- }
1535
- .dialog__title {
1536
- margin: 0;
1537
- font-size: var(--ui-font-size-lg, 1.25rem);
1538
- font-weight: var(--ui-weight-semibold, 600);
1539
- line-height: calc(0.5rem * 3);
1540
- }
1541
- .dialog__close {
1542
- flex-shrink: 0;
1543
- margin-inline-start: auto;
1490
+ flex-direction: column;
1491
+ gap: calc(0.5rem * 1);
1492
+ border: none;
1544
1493
  }
1545
- .dialog__body {
1546
- flex: 1 1 auto;
1547
- padding: var(--_body-padding);
1548
- overflow-y: auto;
1494
+ .accordion--separated > .disclosure {
1495
+ border: 1px solid var(--_border-color);
1496
+ border-radius: var(--_radius);
1549
1497
  }
1550
- .dialog__footer {
1551
- display: flex;
1552
- flex-shrink: 0;
1553
- align-items: center;
1554
- justify-content: flex-end;
1555
- gap: calc(0.5rem * 1.5);
1556
- padding: var(--_footer-padding);
1498
+ .accordion--separated > .disclosure + .disclosure {
1557
1499
  border-block-start: 1px solid var(--_border-color);
1558
1500
  }
1559
- .dialog--borderless .dialog__header {
1560
- border-block-end: none;
1561
- }
1562
- .dialog--borderless .dialog__footer {
1563
- border-block-start: none;
1564
- }
1565
1501
  }
1566
1502
  @layer components.tokens {
1567
1503
  .disclosure {
@@ -1642,259 +1578,451 @@
1642
1578
  }
1643
1579
  }
1644
1580
  @layer components.tokens {
1645
- .divider {
1646
- --_color: var(--ui-divider-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
1647
- --_line-size: var(--ui-divider-line-size, 1px);
1648
- --_height: var(--ui-divider-height, 0.5rem);
1649
- --_gap: var(--ui-divider-gap, calc(0.5rem * 2));
1581
+ .alert {
1582
+ --_accent: var(--ui-alert-accent, var(--ui-color-border, hsl(220, 10%, 90%)));
1583
+ --_padding: var(--ui-alert-padding, var(--ui-space-2, 1rem));
1584
+ --_border-width: var(--ui-alert-border-width, var(--ui-border-width-sm, 0.0625rem));
1585
+ --_gap: var(--ui-alert-gap, var(--ui-space-1, 0.5rem));
1586
+ --_radius: var(--ui-alert-radius, var(--ui-radius-md, 0.5rem));
1587
+ --_bg: color-mix(in oklch, var(--_accent) 8%, white);
1588
+ --_border-color: var(--_accent);
1589
+ --_color: var(--ui-alert-color, var(--ui-color-text, hsl(220, 10%, 10%)));
1590
+ --_icon-color: var(--_accent);
1591
+ }
1592
+ .alert--info {
1593
+ --_accent: var(--ui-color-primary, oklch(55% 0.22 250deg));
1594
+ }
1595
+ .alert--success {
1596
+ --_accent: var(--ui-color-success, oklch(60% 0.18 145deg));
1597
+ }
1598
+ .alert--warning {
1599
+ --_accent: var(--ui-color-warning, oklch(75% 0.18 70deg));
1600
+ }
1601
+ .alert--danger {
1602
+ --_accent: var(--ui-color-danger, oklch(60% 0.22 25deg));
1650
1603
  }
1651
1604
  }
1652
1605
  @layer components.styles {
1653
- .divider {
1606
+ .alert {
1654
1607
  display: flex;
1655
- align-items: center;
1656
- block-size: var(--_height);
1657
- margin: var(--_gap) 0;
1658
- font-size: var(--ui-font-size-sm, 0.875rem);
1659
- line-height: 1;
1660
- color: var(--ui-color-text-muted);
1608
+ align-items: flex-start;
1609
+ gap: var(--_gap);
1610
+ padding: calc(var(--_padding) - var(--_border-width));
1611
+ padding-inline: var(--_padding);
1612
+ color: var(--_color);
1613
+ background: var(--_bg);
1614
+ border: var(--_border-width) solid var(--_border-color);
1615
+ border-radius: var(--_radius);
1616
+ border-inline-start-width: calc(0.5rem * 0.5);
1661
1617
  }
1662
- .divider::before,
1663
- .divider::after {
1664
- content: "";
1618
+ .alert__icon {
1619
+ flex-shrink: 0;
1620
+ color: var(--_icon-color);
1621
+ }
1622
+ .alert__content {
1665
1623
  flex: 1;
1666
- block-size: var(--_line-size);
1667
- background: var(--_color);
1624
+ min-inline-size: 0;
1668
1625
  }
1669
- .divider:not(:empty) {
1670
- --_height: var(--ui-row-1, 1rem);
1626
+ .alert__title {
1627
+ margin: 0;
1628
+ font-weight: var(--ui-weight-medium, 500);
1629
+ line-height: var(--ui-row-1, 1rem);
1671
1630
  }
1672
- .divider:not(:empty)::before {
1673
- margin-inline-end: calc(0.5rem * 2);
1631
+ .alert__description {
1632
+ margin: 0;
1633
+ margin-block-start: calc(0.5rem * 1);
1634
+ font-size: var(--ui-font-size-sm, 0.875rem);
1635
+ line-height: var(--ui-row-1, 1rem);
1636
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
1674
1637
  }
1675
- .divider:not(:empty)::after {
1676
- margin-inline-start: calc(0.5rem * 2);
1638
+ .alert__close {
1639
+ flex-shrink: 0;
1640
+ align-self: flex-start;
1641
+ padding: 0;
1642
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
1643
+ background: none;
1644
+ border: none;
1645
+ cursor: pointer;
1677
1646
  }
1678
- .divider:empty::after {
1679
- display: none;
1647
+ .alert__close:hover {
1648
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
1680
1649
  }
1681
- .divider--vertical {
1682
- flex-direction: column;
1683
- align-self: stretch;
1684
- margin: 0 var(--_gap);
1685
- writing-mode: vertical-rl;
1650
+ }
1651
+ @layer components.tokens {
1652
+ .progress {
1653
+ --_height: var(--ui-progress-height, calc(0.5rem * 1));
1654
+ --_bg: var(--ui-progress-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
1655
+ --_fill: var(--ui-progress-fill, var(--ui-color-primary));
1656
+ --_radius: var(--ui-progress-radius, var(--ui-radius-full, 9999px));
1686
1657
  }
1687
- .divider--vertical::before,
1688
- .divider--vertical::after {
1689
- flex: 1;
1690
- block-size: auto;
1691
- inline-size: var(--_size);
1658
+ .progress--sm {
1659
+ --_height: calc(0.5rem * 1);
1692
1660
  }
1693
- .divider--start::before {
1694
- display: none;
1695
- }
1696
- .divider--start:not(:empty)::after {
1697
- margin-inline-start: calc(0.5rem * 2);
1698
- }
1699
- .divider--end::after {
1700
- display: none;
1701
- }
1702
- .divider--end:not(:empty)::before {
1703
- margin-inline-end: calc(0.5rem * 2);
1704
- }
1705
- .divider--dashed::before,
1706
- .divider--dashed::after {
1707
- background: repeating-linear-gradient(90deg, var(--_color) 0, var(--_color) calc(0.5rem / 2), transparent calc(0.5rem / 2), transparent 0.5rem);
1708
- }
1709
- .divider--vertical.divider--dashed::before,
1710
- .divider--vertical.divider--dashed::after {
1711
- background: repeating-linear-gradient(180deg, var(--_color) 0, var(--_color) calc(0.5rem / 2), transparent calc(0.5rem / 2), transparent 0.5rem);
1661
+ .progress--lg {
1662
+ --_height: calc(0.5rem * 2);
1712
1663
  }
1713
1664
  }
1714
- @layer components.tokens {
1715
- .drawer {
1716
- --_size: var(--ui-drawer-size, calc(0.5rem * 40));
1717
- --_max-size: var(--ui-drawer-max-size, 90%);
1718
- --_bg: var(--ui-drawer-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
1719
- --_shadow: var(--ui-drawer-shadow, var(--shadow-lg));
1720
- --_header-padding: var(--ui-drawer-header-padding, calc(0.5rem * 2) calc(0.5rem * 3));
1721
- --_body-padding: var(--ui-drawer-body-padding, calc(0.5rem * 3));
1722
- --_footer-padding: var(--ui-drawer-footer-padding, calc(0.5rem * 2) calc(0.5rem * 3));
1723
- --_border-color: var(--ui-drawer-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
1724
- }
1725
- .drawer--sm {
1726
- --_size: calc(0.5rem * 30);
1665
+ @layer components.styles {
1666
+ .progress {
1667
+ position: relative;
1668
+ block-size: var(--_height);
1669
+ overflow: hidden;
1670
+ background: var(--_bg);
1671
+ border-radius: var(--_radius);
1727
1672
  }
1728
- .drawer--lg {
1729
- --_size: calc(0.5rem * 50);
1673
+ .progress__bar {
1674
+ block-size: 100%;
1675
+ background: var(--_fill);
1676
+ border-radius: var(--_radius);
1677
+ transition: inline-size var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
1730
1678
  }
1731
- .drawer--full {
1732
- --_size: 100%;
1733
- --_max-size: 100%;
1679
+ .progress--indeterminate .progress__bar {
1680
+ inline-size: 30%;
1681
+ animation: progress-indeterminate 1.5s infinite ease-in-out;
1734
1682
  }
1735
- }
1736
- @layer components.styles {
1737
- .drawer-overlay {
1738
- position: fixed;
1739
- inset: 0;
1740
- z-index: var(--ui-z-drawer, 900);
1741
- background: var(--ui-overlay-bg, rgba(0, 0, 0, 0.5));
1683
+ @keyframes progress-indeterminate {
1684
+ 0% {
1685
+ transform: translateX(-100%);
1686
+ }
1687
+ 100% {
1688
+ transform: translateX(400%);
1689
+ }
1742
1690
  }
1743
- .drawer-overlay[data-state=open] {
1744
- animation: drawer-overlay-in var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1691
+ .progress--striped .progress__bar {
1692
+ 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);
1693
+ background-size: 0.5rem 0.5rem;
1745
1694
  }
1746
- .drawer-overlay[data-state=closed] {
1747
- animation: drawer-overlay-out var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1695
+ .progress--animated .progress__bar {
1696
+ animation: progress-stripes 1s linear infinite;
1748
1697
  }
1749
- @keyframes drawer-overlay-in {
1698
+ @keyframes progress-stripes {
1750
1699
  from {
1751
- opacity: 0;
1700
+ background-position: 0.5rem 0;
1752
1701
  }
1753
- }
1754
- @keyframes drawer-overlay-out {
1755
1702
  to {
1756
- opacity: 0;
1703
+ background-position: 0 0;
1757
1704
  }
1758
1705
  }
1759
- .drawer {
1760
- display: flex;
1761
- flex-direction: column;
1762
- position: fixed;
1763
- z-index: var(--ui-z-drawer, 900);
1764
- background: var(--_bg);
1765
- box-shadow: var(--_shadow);
1706
+ .progress--success {
1707
+ --_fill: var(--ui-color-success);
1766
1708
  }
1767
- .drawer--end {
1768
- inset-block: 0;
1769
- inset-inline-end: 0;
1770
- inline-size: var(--_size);
1771
- max-inline-size: var(--_max-size);
1772
- box-shadow: calc(var(--ui-border-width-sm, 1px) * -1) 0 0 var(--_border-color);
1709
+ .progress--warning {
1710
+ --_fill: var(--ui-color-warning);
1773
1711
  }
1774
- .drawer--start {
1775
- inset-block: 0;
1776
- inset-inline-start: 0;
1777
- inline-size: var(--_size);
1778
- max-inline-size: var(--_max-size);
1779
- box-shadow: var(--ui-border-width-sm, 1px) 0 0 var(--_border-color);
1712
+ .progress--danger {
1713
+ --_fill: var(--ui-color-danger);
1780
1714
  }
1781
- .drawer--top {
1782
- inset-block-start: 0;
1783
- inset-inline: 0;
1784
- block-size: var(--_size);
1785
- max-block-size: var(--_max-size);
1786
- box-shadow: 0 var(--ui-border-width-sm, 1px) 0 var(--_border-color);
1715
+ }
1716
+ @layer components.tokens {
1717
+ .skeleton {
1718
+ --_bg: var(--ui-skeleton-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
1719
+ --_shimmer: var(--ui-skeleton-shimmer, rgb(255 255 255 / 0.5));
1720
+ --_radius: var(--ui-skeleton-radius, var(--ui-radius-sm, calc(0.5rem / 2)));
1787
1721
  }
1788
- .drawer--bottom {
1789
- inset-block-end: 0;
1790
- inset-inline: 0;
1791
- block-size: var(--_size);
1792
- max-block-size: var(--_max-size);
1793
- box-shadow: 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
1722
+ }
1723
+ @layer components.styles {
1724
+ .skeleton {
1725
+ display: block;
1726
+ position: relative;
1727
+ overflow: hidden;
1728
+ background: var(--_bg);
1729
+ border-radius: var(--_radius);
1794
1730
  }
1795
- .drawer--end[data-state=open] {
1796
- animation: drawer-slide-in-end var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1731
+ .skeleton::after {
1732
+ content: "";
1733
+ position: absolute;
1734
+ inset: 0;
1735
+ background: linear-gradient(90deg, transparent 0%, var(--_shimmer) 50%, transparent 100%);
1736
+ animation: skeleton-shimmer 1.5s infinite;
1737
+ transform: translateX(-100%);
1797
1738
  }
1798
- .drawer--end[data-state=closed] {
1799
- animation: drawer-slide-out-end var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1739
+ @keyframes skeleton-shimmer {
1740
+ 100% {
1741
+ transform: translateX(100%);
1742
+ }
1800
1743
  }
1801
- .drawer--start[data-state=open] {
1802
- animation: drawer-slide-in-start var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1744
+ .skeleton--text {
1745
+ block-size: calc(0.5rem * 2);
1746
+ inline-size: 100%;
1803
1747
  }
1804
- .drawer--start[data-state=closed] {
1805
- animation: drawer-slide-out-start var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1748
+ .skeleton--heading {
1749
+ block-size: calc(0.5rem * 3);
1750
+ inline-size: 60%;
1806
1751
  }
1807
- .drawer--top[data-state=open] {
1808
- animation: drawer-slide-in-top var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1752
+ .skeleton--circle {
1753
+ block-size: calc(0.5rem * 5);
1754
+ inline-size: calc(0.5rem * 5);
1755
+ border-radius: 50%;
1809
1756
  }
1810
- .drawer--top[data-state=closed] {
1811
- animation: drawer-slide-out-top var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1757
+ .skeleton--rect {
1758
+ block-size: calc(0.5rem * 20);
1759
+ inline-size: 100%;
1812
1760
  }
1813
- .drawer--bottom[data-state=open] {
1814
- animation: drawer-slide-in-bottom var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1761
+ .skeleton--static::after {
1762
+ animation: none;
1815
1763
  }
1816
- .drawer--bottom[data-state=closed] {
1817
- animation: drawer-slide-out-bottom var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1764
+ .skeleton--pulse {
1765
+ animation: skeleton-pulse 1.5s infinite ease-in-out;
1818
1766
  }
1819
- @keyframes drawer-slide-in-end {
1820
- from {
1821
- transform: translateX(100%);
1822
- }
1767
+ .skeleton--pulse::after {
1768
+ display: none;
1823
1769
  }
1824
- @keyframes drawer-slide-out-end {
1825
- to {
1826
- transform: translateX(100%);
1770
+ @keyframes skeleton-pulse {
1771
+ 0%, 100% {
1772
+ opacity: 1;
1827
1773
  }
1828
- }
1829
- @keyframes drawer-slide-in-start {
1830
- from {
1831
- transform: translateX(-100%);
1774
+ 50% {
1775
+ opacity: 0.5;
1832
1776
  }
1833
1777
  }
1834
- @keyframes drawer-slide-out-start {
1835
- to {
1836
- transform: translateX(-100%);
1837
- }
1778
+ }
1779
+ @layer components.tokens {
1780
+ .spinner {
1781
+ --_size: var(--ui-spinner-size, calc(var(--unit) * 4));
1782
+ --_border-width: var(--ui-spinner-border-width, var(--ui-border-width-md));
1783
+ --_color: var(--ui-spinner-color, currentcolor);
1784
+ --_track-color: var(--ui-spinner-track-color, transparent);
1785
+ --_duration: var(--ui-spinner-duration, 750ms);
1838
1786
  }
1839
- @keyframes drawer-slide-in-top {
1840
- from {
1841
- transform: translateY(-100%);
1842
- }
1787
+ .spinner--xs {
1788
+ --_size: var(--ui-spinner-size-xs, calc(var(--unit) * 2));
1789
+ --_border-width: var(--ui-spinner-border-width-xs, var(--ui-border-width-sm));
1843
1790
  }
1844
- @keyframes drawer-slide-out-top {
1845
- to {
1846
- transform: translateY(-100%);
1847
- }
1791
+ .spinner--sm {
1792
+ --_size: var(--ui-spinner-size-sm, calc(var(--unit) * 3));
1793
+ --_border-width: var(--ui-spinner-border-width-sm, var(--ui-border-width-md));
1848
1794
  }
1849
- @keyframes drawer-slide-in-bottom {
1850
- from {
1851
- transform: translateY(100%);
1852
- }
1795
+ .spinner--lg {
1796
+ --_size: var(--ui-spinner-size-lg, calc(var(--unit) * 5));
1797
+ --_border-width: var(--ui-spinner-border-width-lg, var(--ui-border-width-md));
1853
1798
  }
1854
- @keyframes drawer-slide-out-bottom {
1855
- to {
1856
- transform: translateY(100%);
1857
- }
1799
+ .spinner--xl {
1800
+ --_size: var(--ui-spinner-size-xl, calc(var(--unit) * 6));
1801
+ --_border-width: var(--ui-spinner-border-width-xl, var(--ui-border-width-lg));
1858
1802
  }
1859
- .drawer__header {
1860
- display: flex;
1803
+ }
1804
+ @layer components.styles {
1805
+ .spinner {
1806
+ display: inline-block;
1861
1807
  flex-shrink: 0;
1862
- align-items: center;
1863
- justify-content: space-between;
1864
- gap: calc(0.5rem * 2);
1865
- padding: var(--_header-padding);
1866
- box-shadow: inset 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
1808
+ box-sizing: border-box;
1809
+ block-size: var(--_size);
1810
+ inline-size: var(--_size);
1811
+ vertical-align: middle;
1812
+ border: var(--_border-width) solid var(--_track-color);
1813
+ border-radius: 50%;
1814
+ border-block-start-color: var(--_color);
1815
+ animation: spinner-rotate var(--_duration) linear infinite;
1867
1816
  }
1868
- .drawer__title {
1869
- margin: 0;
1870
- font-size: var(--ui-font-size-lg, 1.25rem);
1871
- font-weight: var(--ui-weight-semibold, 600);
1817
+ @keyframes spinner-rotate {
1818
+ to {
1819
+ transform: rotate(360deg);
1820
+ }
1821
+ }
1822
+ }
1823
+ @layer components.tokens {
1824
+ .toast-viewport {
1825
+ --_gap: var(--ui-toast-viewport-gap, calc(0.5rem * 1));
1826
+ --_padding: var(--ui-toast-viewport-padding, calc(0.5rem * 2));
1827
+ --_max-width: var(--ui-toast-viewport-max-width, 420px);
1828
+ }
1829
+ .toast {
1830
+ --_padding: var(--ui-toast-padding, calc(0.5rem * 2));
1831
+ --_gap: var(--ui-toast-gap, calc(0.5rem * 1));
1832
+ --_radius: var(--ui-toast-radius, var(--ui-radius-md, 0.5rem));
1833
+ --_bg: var(--ui-toast-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
1834
+ --_border-color: var(--ui-toast-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
1835
+ --_shadow: var(--ui-toast-shadow, var(--shadow-lg));
1836
+ }
1837
+ .toast--success {
1838
+ --_border-color: var(--ui-color-success);
1839
+ }
1840
+ .toast--warning {
1841
+ --_border-color: var(--ui-color-warning);
1842
+ }
1843
+ .toast--danger {
1844
+ --_border-color: var(--ui-color-danger);
1845
+ }
1846
+ .toast--info {
1847
+ --_border-color: var(--ui-color-primary);
1848
+ }
1849
+ }
1850
+ @layer components.styles {
1851
+ .toast-viewport {
1852
+ display: flex;
1853
+ flex-direction: column;
1854
+ gap: var(--_gap);
1855
+ position: fixed;
1856
+ z-index: var(--ui-z-toast, 1000);
1857
+ max-inline-size: var(--_max-width);
1858
+ padding: var(--_padding);
1859
+ pointer-events: none;
1860
+ list-style: none;
1861
+ }
1862
+ .toast-viewport--top-end {
1863
+ inset-block-start: 0;
1864
+ inset-inline-end: 0;
1865
+ }
1866
+ .toast-viewport--top-start {
1867
+ inset-block-start: 0;
1868
+ inset-inline-start: 0;
1869
+ }
1870
+ .toast-viewport--bottom-end {
1871
+ inset-block-end: 0;
1872
+ inset-inline-end: 0;
1873
+ }
1874
+ .toast-viewport--bottom-start {
1875
+ inset-block-end: 0;
1876
+ inset-inline-start: 0;
1877
+ }
1878
+ .toast-viewport--top-center {
1879
+ inset-block-start: 0;
1880
+ inset-inline-start: 50%;
1881
+ transform: translateX(-50%);
1882
+ }
1883
+ .toast-viewport--bottom-center {
1884
+ inset-block-end: 0;
1885
+ inset-inline-start: 50%;
1886
+ transform: translateX(-50%);
1887
+ }
1888
+ .toast {
1889
+ display: flex;
1890
+ align-items: flex-start;
1891
+ gap: var(--_gap);
1892
+ padding: var(--_padding);
1893
+ background: var(--_bg);
1894
+ border-radius: var(--_radius);
1895
+ outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
1896
+ box-shadow: var(--_shadow);
1897
+ pointer-events: auto;
1898
+ outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
1899
+ }
1900
+ .toast__icon {
1901
+ flex-shrink: 0;
1902
+ }
1903
+ .toast__content {
1904
+ flex: 1;
1905
+ min-inline-size: 0;
1906
+ }
1907
+ .toast__title {
1908
+ margin: 0;
1909
+ font-weight: var(--ui-weight-medium, 500);
1872
1910
  line-height: var(--ui-row-1, 1rem);
1873
1911
  }
1874
- .drawer__description {
1912
+ .toast__description {
1875
1913
  margin: 0;
1876
1914
  font-size: var(--ui-font-size-sm, 0.875rem);
1877
1915
  line-height: var(--ui-row-1, 1rem);
1878
1916
  color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
1879
1917
  }
1880
- .drawer__close {
1918
+ .toast__action {
1881
1919
  flex-shrink: 0;
1882
- margin-inline-start: auto;
1883
1920
  }
1884
- .drawer__body {
1885
- flex: 1 1 auto;
1886
- padding: var(--_body-padding);
1887
- overflow-y: auto;
1888
- line-height: var(--ui-row-1, 1rem);
1921
+ .toast__close {
1922
+ display: inline-flex;
1923
+ flex-shrink: 0;
1924
+ align-items: center;
1925
+ justify-content: center;
1926
+ block-size: var(--ui-row-1, 1rem);
1927
+ inline-size: var(--ui-row-1, 1rem);
1928
+ padding: 0;
1929
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
1930
+ background: none;
1931
+ border: none;
1932
+ cursor: pointer;
1889
1933
  }
1890
- .drawer__footer {
1891
- display: flex;
1934
+ .toast__close:hover {
1935
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
1936
+ }
1937
+ .toast[data-state=open] {
1938
+ animation: toast-slide-in var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
1939
+ }
1940
+ .toast[data-state=closed] {
1941
+ animation: toast-slide-out var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1942
+ }
1943
+ @keyframes toast-slide-in {
1944
+ from {
1945
+ opacity: 0;
1946
+ transform: translateX(100%);
1947
+ }
1948
+ }
1949
+ @keyframes toast-slide-out {
1950
+ to {
1951
+ opacity: 0;
1952
+ transform: translateX(100%);
1953
+ }
1954
+ }
1955
+ }
1956
+ @layer components.tokens {
1957
+ .checkbox {
1958
+ --_size: var(--ui-checkbox-size, calc(0.5rem * 2));
1959
+ --_radius: var(--ui-checkbox-radius, var(--ui-radius-sm, 0.25rem));
1960
+ --_bg: var(--ui-checkbox-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
1961
+ --_bg-checked: var(--ui-checkbox-bg-checked, var(--ui-color-primary, oklch(55% 0.22 250deg)));
1962
+ --_border-color: var(--ui-checkbox-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
1963
+ --_border-color-focus: var(--ui-checkbox-border-color-focus, var(--ui-color-primary, oklch(55% 0.22 250deg)));
1964
+ --_check-color: var(--ui-checkbox-check-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1965
+ }
1966
+ .checkbox--lg {
1967
+ --_size: var(--ui-checkbox-size-lg, calc(0.5rem * 3));
1968
+ }
1969
+ .checkbox--error {
1970
+ --_border-color: var(--ui-checkbox-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
1971
+ --_border-color-focus: var(--ui-checkbox-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
1972
+ }
1973
+ }
1974
+ @layer components.styles {
1975
+ .checkbox {
1976
+ display: inline-flex;
1892
1977
  flex-shrink: 0;
1893
1978
  align-items: center;
1894
- justify-content: flex-end;
1895
- gap: calc(0.5rem * 2);
1896
- padding: var(--_footer-padding);
1897
- box-shadow: inset 0 var(--ui-border-width-sm, 1px) 0 var(--_border-color);
1979
+ justify-content: center;
1980
+ block-size: var(--_size);
1981
+ inline-size: var(--_size);
1982
+ margin: 0;
1983
+ vertical-align: middle;
1984
+ background: var(--_bg);
1985
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
1986
+ border-radius: var(--_radius);
1987
+ cursor: pointer;
1988
+ appearance: none;
1989
+ 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);
1990
+ }
1991
+ .checkbox::before {
1992
+ content: "";
1993
+ block-size: 65%;
1994
+ inline-size: 65%;
1995
+ background-color: var(--_check-color);
1996
+ opacity: 0;
1997
+ clip-path: polygon(20% 55%, 40% 75%, 80% 25%, 85% 30%, 40% 85%, 15% 60%);
1998
+ transition: opacity var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
1999
+ }
2000
+ .checkbox:hover:not(:disabled) {
2001
+ border-color: var(--_border-color-focus);
2002
+ }
2003
+ .checkbox:focus-visible {
2004
+ border-color: var(--_border-color-focus);
2005
+ outline: none;
2006
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, oklch(75% 0.15 250deg));
2007
+ }
2008
+ .checkbox:checked {
2009
+ background: var(--_bg-checked);
2010
+ border-color: var(--_bg-checked);
2011
+ }
2012
+ .checkbox:checked::before {
2013
+ opacity: 1;
2014
+ }
2015
+ .checkbox:indeterminate {
2016
+ background: var(--_bg-checked);
2017
+ border-color: var(--_bg-checked);
2018
+ }
2019
+ .checkbox:indeterminate::before {
2020
+ opacity: 1;
2021
+ clip-path: polygon(15% 45%, 85% 45%, 85% 55%, 15% 55%);
2022
+ }
2023
+ .checkbox:disabled {
2024
+ opacity: 0.5;
2025
+ cursor: not-allowed;
1898
2026
  }
1899
2027
  }
1900
2028
  @layer components.tokens {
@@ -1965,140 +2093,41 @@
1965
2093
  }
1966
2094
  }
1967
2095
  @layer components.tokens {
1968
- .heading {
1969
- --_font-size: var(--ui-heading-font-size, var(--ui-font-size-xl, 1.5rem));
1970
- --_line-height: var(--ui-heading-line-height, var(--ui-leading-xl, 2rem));
1971
- --_weight: var(--ui-heading-weight, var(--ui-weight-bold, 700));
1972
- --_color: var(--ui-heading-color, var(--ui-color-text, hsl(220, 10%, 10%)));
2096
+ .input {
2097
+ --_height: var(--ui-input-height, var(--ui-row-2, 2rem));
2098
+ --_padding-x: var(--ui-input-padding-x, var(--ui-space-1, 0.5rem));
2099
+ --_font-size: var(--ui-input-font-size, var(--ui-font-size-sm, 0.875rem));
2100
+ --_radius: var(--ui-input-radius, var(--ui-radius-md, 0.5rem));
2101
+ --_bg: var(--ui-input-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2102
+ --_border-color: var(--ui-input-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2103
+ --_border-color-focus: var(--ui-input-border-color-focus, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2104
+ --_text: var(--ui-input-text, var(--ui-color-text, hsl(220, 10%, 10%)));
2105
+ --_placeholder: var(--ui-input-placeholder, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
1973
2106
  }
1974
- .heading--4xl {
1975
- --_font-size: var(--ui-heading-font-size-4xl, var(--ui-font-size-4xl, 2.5rem));
1976
- --_line-height: var(--ui-heading-line-height-4xl, var(--ui-leading-4xl, 3rem));
2107
+ .input--sm {
2108
+ --_height: var(--ui-input-height-sm, calc(1rem * 1.5));
2109
+ --_font-size: var(--ui-input-font-size-sm, var(--ui-font-size-xs, 0.75rem));
1977
2110
  }
1978
- .heading--3xl {
1979
- --_font-size: var(--ui-heading-font-size-3xl, var(--ui-font-size-3xl, 2rem));
1980
- --_line-height: var(--ui-heading-line-height-3xl, var(--ui-leading-3xl, 2.5rem));
2111
+ .input--lg {
2112
+ --_height: var(--ui-input-height-lg, calc(1rem * 2.5));
2113
+ --_padding-x: var(--ui-input-padding-x-lg, var(--ui-space-2, 1rem));
2114
+ --_font-size: var(--ui-input-font-size-lg, var(--ui-font-size-md, 1rem));
1981
2115
  }
1982
- .heading--2xl {
1983
- --_font-size: var(--ui-heading-font-size-2xl, var(--ui-font-size-2xl, 1.75rem));
1984
- --_line-height: var(--ui-heading-line-height-2xl, var(--ui-leading-2xl, 2rem));
2116
+ .input--filled {
2117
+ --_bg: var(--ui-input-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2118
+ --_border-color: transparent;
1985
2119
  }
1986
- .heading--xl {
1987
- --_font-size: var(--ui-heading-font-size-xl, var(--ui-font-size-xl, 1.5rem));
1988
- --_line-height: var(--ui-heading-line-height-xl, var(--ui-leading-xl, 2rem));
2120
+ .input--ghost {
2121
+ --_bg: transparent;
2122
+ --_border-color: transparent;
1989
2123
  }
1990
- .heading--lg {
1991
- --_font-size: var(--ui-heading-font-size-lg, var(--ui-font-size-lg, 1.25rem));
1992
- --_line-height: var(--ui-heading-line-height-lg, var(--ui-leading-lg, 2rem));
2124
+ .input--error {
2125
+ --_border-color: var(--ui-input-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2126
+ --_border-color-focus: var(--ui-input-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
1993
2127
  }
1994
- .heading--md {
1995
- --_font-size: var(--ui-heading-font-size-md, var(--ui-font-size-md, 1rem));
1996
- --_line-height: var(--ui-heading-line-height-md, var(--ui-leading-tight-md, 1.5rem));
1997
- }
1998
- .heading--sm {
1999
- --_font-size: var(--ui-heading-font-size-sm, var(--ui-font-size-sm, 0.875rem));
2000
- --_line-height: var(--ui-heading-line-height-sm, var(--ui-leading-tight-sm, 1rem));
2001
- }
2002
- }
2003
- @layer components.styles {
2004
- .heading {
2005
- margin: 0;
2006
- font-size: var(--_font-size);
2007
- font-weight: var(--_weight);
2008
- line-height: var(--_line-height);
2009
- color: var(--_color);
2010
- }
2011
- }
2012
- @layer components.tokens {
2013
- .icon {
2014
- --_size: var(--ui-icon-size, 1em);
2015
- --_stroke: var(--ui-icon-stroke, 2);
2016
- }
2017
- .icon--xs {
2018
- --_size: var(--ui-icon-size-xs, calc(0.5rem * 2));
2019
- }
2020
- .icon--sm {
2021
- --_size: var(--ui-icon-size-sm, calc(0.5rem * 3));
2022
- }
2023
- .icon--md {
2024
- --_size: var(--ui-icon-size-md, calc(0.5rem * 4));
2025
- }
2026
- .icon--lg {
2027
- --_size: var(--ui-icon-size-lg, calc(0.5rem * 5));
2028
- }
2029
- .icon--xl {
2030
- --_size: var(--ui-icon-size-xl, calc(0.5rem * 6));
2031
- }
2032
- .icon--stroke-thin {
2033
- --_stroke: var(--ui-icon-stroke-thin, 1);
2034
- }
2035
- .icon--stroke-thick {
2036
- --_stroke: var(--ui-icon-stroke-thick, 2.5);
2037
- }
2038
- }
2039
- @layer components.styles {
2040
- .icon {
2041
- display: inline-block;
2042
- flex-shrink: 0;
2043
- block-size: var(--_size);
2044
- inline-size: var(--_size);
2045
- vertical-align: middle;
2046
- color: currentcolor;
2047
- fill: none;
2048
- stroke: currentcolor;
2049
- stroke-width: var(--_stroke);
2050
- stroke-linecap: round;
2051
- stroke-linejoin: round;
2052
- }
2053
- .icon--filled {
2054
- fill: currentcolor;
2055
- stroke: none;
2056
- }
2057
- .icon--spin {
2058
- animation: icon-spin 1s linear infinite;
2059
- }
2060
- @keyframes icon-spin {
2061
- to {
2062
- transform: rotate(360deg);
2063
- }
2064
- }
2065
- }
2066
- @layer components.tokens {
2067
- .input {
2068
- --_height: var(--ui-input-height, var(--ui-row-2, 2rem));
2069
- --_padding-x: var(--ui-input-padding-x, var(--ui-space-1, 0.5rem));
2070
- --_font-size: var(--ui-input-font-size, var(--ui-font-size-sm, 0.875rem));
2071
- --_radius: var(--ui-input-radius, var(--ui-radius-md, 0.5rem));
2072
- --_bg: var(--ui-input-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2073
- --_border-color: var(--ui-input-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2074
- --_border-color-focus: var(--ui-input-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
2075
- --_text: var(--ui-input-text, var(--ui-color-text, hsl(220, 10%, 10%)));
2076
- --_placeholder: var(--ui-input-placeholder, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2077
- }
2078
- .input--sm {
2079
- --_height: var(--ui-input-height-sm, calc(1rem * 1.5));
2080
- --_font-size: var(--ui-input-font-size-sm, var(--ui-font-size-xs, 0.75rem));
2081
- }
2082
- .input--lg {
2083
- --_height: var(--ui-input-height-lg, calc(1rem * 2.5));
2084
- --_padding-x: var(--ui-input-padding-x-lg, var(--ui-space-2, 1rem));
2085
- --_font-size: var(--ui-input-font-size-lg, var(--ui-font-size-md, 1rem));
2086
- }
2087
- .input--filled {
2088
- --_bg: var(--ui-input-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2089
- --_border-color: transparent;
2090
- }
2091
- .input--ghost {
2092
- --_bg: transparent;
2093
- --_border-color: transparent;
2094
- }
2095
- .input--error {
2096
- --_border-color: var(--ui-input-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2097
- --_border-color-focus: var(--ui-input-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2098
- }
2099
- .input--success {
2100
- --_border-color: var(--ui-input-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
2101
- --_border-color-focus: var(--ui-input-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
2128
+ .input--success {
2129
+ --_border-color: var(--ui-input-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2130
+ --_border-color-focus: var(--ui-input-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2102
2131
  }
2103
2132
  }
2104
2133
  @layer components.styles {
@@ -2125,7 +2154,7 @@
2125
2154
  .input:focus, .input--focus {
2126
2155
  border-color: var(--_border-color-focus);
2127
2156
  outline: none;
2128
- box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
2157
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, oklch(75% 0.15 250deg));
2129
2158
  }
2130
2159
  .input:disabled, .input--disabled {
2131
2160
  opacity: 0.5;
@@ -2176,7 +2205,7 @@
2176
2205
  .label {
2177
2206
  --_font-size: var(--ui-label-font-size, var(--ui-font-size-sm, 0.875rem));
2178
2207
  --_color: var(--ui-label-color, var(--ui-color-text, hsl(220, 10%, 10%)));
2179
- --_required-color: var(--ui-label-required-color, var(--ui-color-danger, hsl(0, 70%, 50%)));
2208
+ --_required-color: var(--ui-label-required-color, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2180
2209
  }
2181
2210
  .label--lg {
2182
2211
  --_font-size: var(--ui-label-font-size-lg, var(--ui-font-size-md, 1rem));
@@ -2206,844 +2235,723 @@
2206
2235
  }
2207
2236
  }
2208
2237
  @layer components.tokens {
2209
- .link {
2210
- --_color: var(--ui-link-color, var(--ui-color-primary));
2211
- --_color-hover: var(--ui-link-color-hover, var(--ui-color-primary-hover, color-mix(in srgb, var(--_color) 85%, black)));
2212
- --_color-visited: var(--ui-link-color-visited, var(--_color));
2213
- --_decoration: var(--ui-link-decoration, underline);
2214
- --_decoration-hover: var(--ui-link-decoration-hover, underline);
2238
+ .radio {
2239
+ --_size: var(--ui-radio-size, calc(0.5rem * 2));
2240
+ --_bg: var(--ui-radio-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2241
+ --_bg-checked: var(--ui-radio-bg-checked, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2242
+ --_border-color: var(--ui-radio-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2243
+ --_border-color-focus: var(--ui-radio-border-color-focus, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2244
+ --_dot-color: var(--ui-radio-dot-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
2215
2245
  }
2216
- .link--muted {
2217
- --_color: var(--ui-link-color-muted, var(--ui-color-text-muted));
2218
- --_color-hover: var(--ui-link-color-muted-hover, var(--ui-color-text));
2246
+ .radio--lg {
2247
+ --_size: var(--ui-radio-size-lg, calc(0.5rem * 3));
2219
2248
  }
2220
- .link--subtle {
2221
- --_decoration: none;
2222
- --_decoration-hover: underline;
2249
+ .radio--error {
2250
+ --_border-color: var(--ui-radio-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2251
+ --_border-color-focus: var(--ui-radio-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2223
2252
  }
2224
2253
  }
2225
2254
  @layer components.styles {
2226
- .link {
2227
- text-decoration: var(--_decoration);
2228
- color: var(--_color);
2255
+ .radio {
2256
+ display: inline-flex;
2257
+ flex-shrink: 0;
2258
+ align-items: center;
2259
+ justify-content: center;
2260
+ block-size: var(--_size);
2261
+ inline-size: var(--_size);
2262
+ margin: 0;
2263
+ vertical-align: middle;
2264
+ background: var(--_bg);
2265
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2266
+ border-radius: 50%;
2229
2267
  cursor: pointer;
2230
- transition: color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2231
- text-underline-offset: calc(0.5rem / 4);
2268
+ appearance: none;
2269
+ 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);
2232
2270
  }
2233
- .link:hover {
2234
- text-decoration: var(--_decoration-hover);
2235
- color: var(--_color-hover);
2271
+ .radio::before {
2272
+ content: "";
2273
+ block-size: 50%;
2274
+ inline-size: 50%;
2275
+ background-color: var(--_dot-color);
2276
+ border-radius: 50%;
2277
+ opacity: 0;
2278
+ transform: scale(0);
2279
+ transition: opacity var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), transform var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
2236
2280
  }
2237
- .link:focus-visible {
2238
- border-radius: calc(0.5rem / 4);
2239
- outline: 2px solid var(--ui-color-focus, var(--ui-color-primary));
2240
- outline-offset: calc(0.5rem / 4);
2281
+ .radio:hover:not(:disabled) {
2282
+ border-color: var(--_border-color-focus);
2241
2283
  }
2242
- .link:visited {
2243
- color: var(--_color-visited);
2284
+ .radio:focus-visible {
2285
+ border-color: var(--_border-color-focus);
2286
+ outline: none;
2287
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, oklch(75% 0.15 250deg));
2244
2288
  }
2245
- .link--disabled,
2246
- .link[aria-disabled=true] {
2247
- color: var(--ui-color-text-muted);
2248
- opacity: 0.6;
2249
- cursor: not-allowed;
2250
- pointer-events: none;
2289
+ .radio:checked {
2290
+ background: var(--_bg-checked);
2291
+ border-color: var(--_bg-checked);
2251
2292
  }
2252
- .link--external::after {
2253
- content: "↗";
2254
- display: inline-block;
2255
- margin-inline-start: calc(0.5rem / 4);
2256
- font-size: 0.75em;
2293
+ .radio:checked::before {
2294
+ opacity: 1;
2295
+ transform: scale(1);
2257
2296
  }
2258
- }
2259
- @layer components.tokens {
2260
- .menu {
2261
- --_min-width: var(--ui-menu-min-width, calc(0.5rem * 16));
2262
- --_max-height: var(--ui-menu-max-height, calc(0.5rem * 40));
2263
- --_padding: var(--ui-menu-padding, calc(0.5rem * 1));
2264
- --_radius: var(--ui-menu-radius, var(--ui-radius-md, 0.5rem));
2265
- --_bg: var(--ui-menu-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2266
- --_border-color: var(--ui-menu-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
2267
- --_shadow: var(--ui-menu-shadow, var(--shadow-lg));
2268
- --_item-padding: var(--ui-menu-item-padding, calc(0.5rem * 1) calc(0.5rem * 2));
2269
- --_item-radius: var(--ui-menu-item-radius, var(--ui-radius-sm, 0.25rem));
2270
- --_item-bg-hover: var(--ui-menu-item-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
2297
+ .radio:disabled {
2298
+ opacity: 0.5;
2299
+ cursor: not-allowed;
2271
2300
  }
2272
2301
  }
2273
- @layer components.styles {
2274
- .menu {
2275
- min-inline-size: var(--_min-width);
2276
- max-block-size: var(--_max-height);
2277
- padding: var(--_padding);
2278
- overflow-y: auto;
2279
- background: var(--_bg);
2280
- border-radius: var(--_radius);
2281
- outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2282
- box-shadow: var(--_shadow);
2283
- outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
2302
+ @layer components.tokens {
2303
+ .select {
2304
+ --_height: var(--ui-select-height, var(--ui-row-2, 2rem));
2305
+ --_padding-x: var(--ui-select-padding-x, var(--ui-space-1, 0.5rem));
2306
+ --_font-size: var(--ui-select-font-size, var(--ui-font-size-sm, 0.875rem));
2307
+ --_radius: var(--ui-select-radius, var(--ui-radius-md, 0.5rem));
2308
+ --_bg: var(--ui-select-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2309
+ --_border-color: var(--ui-select-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2310
+ --_border-color-focus: var(--ui-select-border-color-focus, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2311
+ --_text: var(--ui-select-text, var(--ui-color-text, hsl(220, 10%, 10%)));
2312
+ --_icon-color: var(--ui-select-icon-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2284
2313
  }
2285
- .menu__group {
2286
- padding: 0;
2287
- margin: 0;
2288
- list-style: none;
2314
+ .select--sm {
2315
+ --_height: var(--ui-select-height-sm, calc(1rem * 1.5));
2316
+ --_font-size: var(--ui-select-font-size-sm, var(--ui-font-size-xs, 0.75rem));
2289
2317
  }
2290
- .menu__label {
2291
- padding: var(--_item-padding);
2292
- font-size: var(--ui-font-size-xs, 0.75rem);
2293
- font-weight: var(--ui-weight-medium, 500);
2294
- line-height: var(--ui-row-1, 1rem);
2295
- letter-spacing: 0.05em;
2296
- text-transform: uppercase;
2297
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2318
+ .select--lg {
2319
+ --_height: var(--ui-select-height-lg, calc(1rem * 2.5));
2320
+ --_padding-x: var(--ui-select-padding-x-lg, var(--ui-space-2, 1rem));
2321
+ --_font-size: var(--ui-select-font-size-lg, var(--ui-font-size-md, 1rem));
2298
2322
  }
2299
- .menu__item {
2300
- display: flex;
2301
- align-items: center;
2302
- gap: calc(0.5rem * 1);
2303
- padding: var(--_item-padding);
2304
- font-size: var(--ui-font-size-sm, 0.875rem);
2305
- line-height: var(--ui-row-1, 1rem);
2306
- text-decoration: none;
2307
- color: var(--ui-color-text, hsl(220, 10%, 10%));
2308
- background: transparent;
2309
- border: none;
2310
- border-radius: var(--_item-radius);
2311
- cursor: pointer;
2312
- transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2323
+ .select--filled {
2324
+ --_bg: var(--ui-select-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2325
+ --_border-color: transparent;
2313
2326
  }
2314
- .menu__item:hover, .menu__item:focus-visible {
2315
- background: var(--_item-bg-hover);
2316
- outline: none;
2327
+ .select--ghost {
2328
+ --_bg: transparent;
2329
+ --_border-color: transparent;
2317
2330
  }
2318
- .menu__item--danger {
2319
- color: var(--ui-color-danger, hsl(0, 70%, 50%));
2331
+ .select--error {
2332
+ --_border-color: var(--ui-select-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2333
+ --_border-color-focus: var(--ui-select-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2320
2334
  }
2321
- .menu__item--danger:hover, .menu__item--danger:focus-visible {
2322
- color: var(--ui-color-danger, hsl(0, 70%, 50%));
2323
- }
2324
- .menu__item--disabled,
2325
- .menu__item[aria-disabled=true] {
2326
- opacity: 0.5;
2327
- pointer-events: none;
2328
- }
2329
- .menu__item-icon {
2330
- flex-shrink: 0;
2331
- block-size: calc(0.5rem * 2);
2332
- inline-size: calc(0.5rem * 2);
2333
- }
2334
- .menu__item-shortcut {
2335
- margin-inline-start: auto;
2336
- font-size: var(--ui-font-size-xs, 0.75rem);
2337
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2338
- }
2339
- .menu__separator {
2340
- display: flex;
2341
- align-items: center;
2342
- block-size: calc(0.5rem * 2);
2343
- margin: 0;
2344
- }
2345
- .menu__separator::before {
2346
- content: "";
2347
- flex: 1;
2348
- block-size: var(--ui-border-width-sm, 1px);
2349
- background: var(--ui-color-border, hsl(220, 10%, 90%));
2350
- }
2351
- .menu__item--check,
2352
- .menu__item--radio {
2353
- position: relative;
2354
- padding-inline-start: calc(0.5rem * 4);
2355
- }
2356
- .menu__item-indicator {
2357
- display: flex;
2358
- align-items: center;
2359
- justify-content: center;
2360
- position: absolute;
2361
- inset-inline-start: calc(0.5rem * 1);
2362
- block-size: calc(0.5rem * 2);
2363
- inline-size: calc(0.5rem * 2);
2364
- }
2365
- }
2366
- @layer components.tokens {
2367
- .modal {
2368
- --_bg: var(--ui-modal-bg, var(--ui-color-bg, white));
2369
- --_radius: var(--ui-modal-radius, var(--ui-radius-lg, calc(0.5rem * 1.5)));
2370
- --_shadow: var(--ui-modal-shadow, 0 calc(0.5rem * 3) calc(0.5rem * 6) rgb(0 0 0 / 0.25));
2371
- --_padding: var(--ui-modal-padding, calc(0.5rem * 3));
2372
- --_max-width: var(--ui-modal-max-width, calc(0.5rem * 60));
2373
- --_max-height: var(--ui-modal-max-height, calc(100vh - 0.5rem * 8));
2374
- --_z: var(--ui-modal-z, var(--ui-z-modal, 400));
2375
- }
2376
- .modal--sm {
2377
- --_max-width: var(--ui-modal-max-width-sm, calc(0.5rem * 40));
2378
- }
2379
- .modal--lg {
2380
- --_max-width: var(--ui-modal-max-width-lg, calc(0.5rem * 80));
2381
- }
2382
- .modal--full {
2383
- --_max-width: calc(100vw - 0.5rem * 4);
2384
- --_max-height: calc(100vh - 0.5rem * 4);
2385
- --_radius: 0;
2335
+ .select--success {
2336
+ --_border-color: var(--ui-select-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2337
+ --_border-color-focus: var(--ui-select-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2386
2338
  }
2387
2339
  }
2388
2340
  @layer components.styles {
2389
- .modal {
2390
- display: flex;
2391
- align-items: center;
2392
- justify-content: center;
2393
- position: fixed;
2394
- inset: 0;
2395
- z-index: var(--_z);
2396
- padding: calc(0.5rem * 2);
2397
- }
2398
- .modal__content {
2399
- display: flex;
2400
- flex-direction: column;
2401
- position: relative;
2402
- inline-size: 100%;
2403
- max-block-size: var(--_max-height);
2404
- max-inline-size: var(--_max-width);
2405
- padding: var(--_padding);
2406
- overflow: hidden;
2407
- background: var(--_bg);
2341
+ .select {
2342
+ display: inline-block;
2343
+ block-size: var(--_height);
2344
+ padding-inline-start: var(--_padding-x);
2345
+ padding-inline-end: calc(var(--_height) - var(--ui-space-half, 0.25rem));
2346
+ font-family: inherit;
2347
+ font-size: var(--_font-size);
2348
+ line-height: 1;
2349
+ color: var(--_text);
2350
+ background-color: var(--_bg);
2351
+ 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");
2352
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2408
2353
  border-radius: var(--_radius);
2409
- box-shadow: var(--_shadow);
2410
- }
2411
- .modal__body {
2412
- flex: 1 1 auto;
2413
- overflow-y: auto;
2414
- }
2415
- .modal--entering .modal__content,
2416
- .modal--visible .modal__content {
2417
- opacity: 1;
2418
- transform: scale(1);
2419
- }
2420
- .modal--exiting .modal__content,
2421
- .modal--hidden .modal__content {
2422
- opacity: 0;
2423
- transform: scale(0.95);
2424
- }
2425
- .modal--animate .modal__content {
2426
- transition: opacity var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease), transform var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
2427
- }
2428
- .modal--hidden {
2429
- visibility: hidden;
2430
- pointer-events: none;
2431
- }
2432
- }
2433
- @layer components.tokens {
2434
- .overlay {
2435
- --_bg: var(--ui-overlay-bg, rgb(0 0 0 / 0.5));
2436
- --_z: var(--ui-overlay-z, var(--ui-z-overlay, 300));
2437
- }
2438
- .overlay--light {
2439
- --_bg: var(--ui-overlay-bg-light, rgb(255 255 255 / 0.7));
2440
- }
2441
- .overlay--blur {
2442
- --_bg: var(--ui-overlay-bg-blur, rgb(0 0 0 / 0.3));
2354
+ cursor: pointer;
2355
+ appearance: none;
2356
+ 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);
2357
+ background-repeat: no-repeat;
2358
+ background-position: right var(--ui-space-half, 0.25rem) center;
2359
+ background-size: calc(var(--_height) * 0.5);
2443
2360
  }
2444
- }
2445
- @layer components.styles {
2446
- .overlay {
2447
- position: fixed;
2448
- inset: 0;
2449
- z-index: var(--_z);
2450
- background: var(--_bg);
2361
+ .select:hover:not(:disabled, :focus) {
2362
+ border-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
2451
2363
  }
2452
- .overlay--blur {
2453
- backdrop-filter: blur(calc(0.5rem * 0.5));
2364
+ .select:focus, .select--focus {
2365
+ border-color: var(--_border-color-focus);
2366
+ outline: none;
2367
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, oklch(75% 0.15 250deg));
2454
2368
  }
2455
- .overlay--entering,
2456
- .overlay--visible {
2457
- opacity: 1;
2369
+ .select:disabled, .select--disabled {
2370
+ opacity: 0.5;
2371
+ cursor: not-allowed;
2458
2372
  }
2459
- .overlay--exiting,
2460
- .overlay--hidden {
2461
- opacity: 0;
2462
- pointer-events: none;
2373
+ .select--block {
2374
+ inline-size: 100%;
2463
2375
  }
2464
- .overlay--animate {
2465
- transition: opacity var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
2376
+ .select:invalid, .select--placeholder {
2377
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2466
2378
  }
2467
2379
  }
2468
2380
  @layer components.tokens {
2469
- .pagination {
2470
- --_gap: var(--ui-pagination-gap, calc(0.5rem * 0.5));
2471
- --_item-size: var(--ui-pagination-item-size, calc(0.5rem * 4));
2472
- --_item-radius: var(--ui-pagination-item-radius, var(--ui-radius-sm, 0.25rem));
2473
- --_item-bg: var(--ui-pagination-item-bg, transparent);
2474
- --_item-bg-hover: var(--ui-pagination-item-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
2475
- --_item-bg-active: var(--ui-pagination-item-bg-active, var(--ui-color-primary));
2476
- --_item-color: var(--ui-pagination-item-color, var(--ui-color-text, hsl(220, 10%, 10%)));
2477
- --_item-color-active: var(--ui-pagination-item-color-active, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
2478
- }
2479
- }
2480
- @layer components.styles {
2481
- .pagination {
2482
- display: flex;
2483
- align-items: center;
2484
- gap: var(--_gap);
2485
- }
2486
- .pagination__list {
2487
- display: flex;
2488
- align-items: center;
2489
- gap: var(--_gap);
2490
- padding: 0;
2491
- margin: 0;
2492
- list-style: none;
2493
- }
2494
- .pagination__item {
2495
- display: flex;
2496
- }
2497
- .pagination__link {
2498
- display: inline-flex;
2499
- align-items: center;
2500
- justify-content: center;
2501
- block-size: var(--_item-size);
2502
- min-inline-size: var(--_item-size);
2503
- padding-inline: calc(0.5rem * 1);
2504
- font-size: var(--ui-font-size-sm, 0.875rem);
2505
- text-decoration: none;
2506
- color: var(--_item-color);
2507
- background: var(--_item-bg);
2508
- border-radius: var(--_item-radius);
2509
- transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease), color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2510
- }
2511
- .pagination__link:hover {
2512
- background: var(--_item-bg-hover);
2513
- }
2514
- .pagination__link[aria-current=page],
2515
- .pagination__link--active {
2516
- color: var(--_item-color-active);
2517
- background: var(--_item-bg-active);
2518
- pointer-events: none;
2381
+ .textarea {
2382
+ --_min-height: var(--ui-textarea-min-height, calc(1rem * 4));
2383
+ --_padding-x: var(--ui-textarea-padding-x, var(--ui-space-1, 0.5rem));
2384
+ --_padding-y: var(--ui-textarea-padding-y, var(--ui-space-1, 0.5rem));
2385
+ --_font-size: var(--ui-textarea-font-size, var(--ui-font-size-sm, 0.875rem));
2386
+ --_radius: var(--ui-textarea-radius, var(--ui-radius-md, 0.5rem));
2387
+ --_bg: var(--ui-textarea-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2388
+ --_border-color: var(--ui-textarea-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2389
+ --_border-color-focus: var(--ui-textarea-border-color-focus, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2390
+ --_text: var(--ui-textarea-text, var(--ui-color-text, hsl(220, 10%, 10%)));
2391
+ --_placeholder: var(--ui-textarea-placeholder, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2519
2392
  }
2520
- .pagination__link[aria-disabled=true],
2521
- .pagination__link--disabled {
2522
- opacity: 0.5;
2523
- pointer-events: none;
2393
+ .textarea--sm {
2394
+ --_min-height: var(--ui-textarea-min-height-sm, calc(1rem * 3));
2395
+ --_font-size: var(--ui-textarea-font-size-sm, var(--ui-font-size-xs, 0.75rem));
2524
2396
  }
2525
- .pagination__prev,
2526
- .pagination__next {
2527
- display: inline-flex;
2528
- align-items: center;
2529
- gap: calc(0.5rem * 0.5);
2530
- padding-inline: calc(0.5rem * 1.5);
2397
+ .textarea--lg {
2398
+ --_min-height: var(--ui-textarea-min-height-lg, calc(1rem * 6));
2399
+ --_padding-x: var(--ui-textarea-padding-x-lg, var(--ui-space-2, 1rem));
2400
+ --_padding-y: var(--ui-textarea-padding-y-lg, var(--ui-space-2, 1rem));
2401
+ --_font-size: var(--ui-textarea-font-size-lg, var(--ui-font-size-md, 1rem));
2531
2402
  }
2532
- .pagination__ellipsis {
2533
- display: inline-flex;
2534
- align-items: center;
2535
- justify-content: center;
2536
- block-size: var(--_item-size);
2537
- min-inline-size: var(--_item-size);
2538
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2403
+ .textarea--filled {
2404
+ --_bg: var(--ui-textarea-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2405
+ --_border-color: transparent;
2539
2406
  }
2540
- .pagination--sm {
2541
- --_item-size: calc(0.5rem * 3);
2542
- --_gap: calc(0.5rem * 0.25);
2407
+ .textarea--ghost {
2408
+ --_bg: transparent;
2409
+ --_border-color: transparent;
2543
2410
  }
2544
- .pagination--lg {
2545
- --_item-size: calc(0.5rem * 5);
2546
- --_gap: calc(0.5rem * 0.75);
2411
+ .textarea--error {
2412
+ --_border-color: var(--ui-textarea-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2413
+ --_border-color-focus: var(--ui-textarea-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2547
2414
  }
2548
- }
2549
- @layer components.tokens {
2550
- .popover {
2551
- --_bg: var(--ui-popover-bg, var(--ui-color-bg, white));
2552
- --_border-color: var(--ui-popover-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
2553
- --_radius: var(--ui-popover-radius, var(--ui-radius-md, calc(0.5rem * 1)));
2554
- --_shadow: var(--ui-popover-shadow, 0 calc(0.5rem / 2) calc(0.5rem * 2) rgb(0 0 0 / 0.15));
2555
- --_padding: var(--ui-popover-padding, calc(0.5rem * 2));
2556
- --_max-width: var(--ui-popover-max-width, calc(0.5rem * 40));
2557
- --_z: var(--ui-popover-z, var(--ui-z-popover, 500));
2558
- --_arrow-size: var(--ui-popover-arrow-size, calc(0.5rem));
2415
+ .textarea--success {
2416
+ --_border-color: var(--ui-textarea-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2417
+ --_border-color-focus: var(--ui-textarea-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2559
2418
  }
2560
2419
  }
2561
2420
  @layer components.styles {
2562
- .popover {
2563
- position: absolute;
2564
- z-index: var(--_z);
2565
- max-inline-size: var(--_max-width);
2566
- padding: var(--_padding);
2421
+ .textarea {
2422
+ display: block;
2423
+ box-sizing: border-box;
2424
+ inline-size: 100%;
2425
+ min-block-size: var(--_min-height);
2426
+ padding-block: var(--_padding-y);
2427
+ padding-inline: var(--_padding-x);
2428
+ font-family: inherit;
2429
+ font-size: var(--_font-size);
2567
2430
  line-height: var(--ui-row-1, 1rem);
2431
+ color: var(--_text);
2568
2432
  background: var(--_bg);
2433
+ border: none;
2569
2434
  border-radius: var(--_radius);
2570
2435
  outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2571
- box-shadow: var(--_shadow);
2436
+ 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);
2572
2437
  outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
2438
+ resize: vertical;
2573
2439
  }
2574
- .popover__header {
2575
- padding-block-end: calc(0.5rem * 2);
2576
- margin-block-end: calc(0.5rem * 2);
2577
- box-shadow: inset 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
2578
- }
2579
- .popover__title {
2580
- margin: 0;
2581
- font-size: var(--ui-font-size-md, 1rem);
2582
- font-weight: var(--ui-weight-semibold, 600);
2440
+ .textarea::placeholder {
2441
+ color: var(--_placeholder);
2583
2442
  }
2584
- .popover--top::after {
2585
- content: "";
2586
- position: absolute;
2587
- inset-block-start: 100%;
2588
- inset-inline-start: 50%;
2589
- border: var(--_arrow-size) solid transparent;
2590
- border-block-start-color: var(--_bg);
2591
- transform: translateX(-50%);
2443
+ .textarea:hover:not(:disabled, :focus) {
2444
+ outline-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
2592
2445
  }
2593
- .popover--top::before {
2594
- content: "";
2595
- position: absolute;
2596
- inset-block-start: 100%;
2597
- inset-inline-start: 50%;
2598
- border: calc(var(--_arrow-size) + 1px) solid transparent;
2599
- border-block-start-color: var(--_border-color);
2600
- transform: translateX(-50%);
2446
+ .textarea:focus, .textarea--focus {
2447
+ outline-color: var(--_border-color-focus);
2448
+ box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, oklch(75% 0.15 250deg));
2601
2449
  }
2602
- .popover--bottom::after {
2603
- content: "";
2604
- position: absolute;
2605
- inset-block-end: 100%;
2606
- inset-inline-start: 50%;
2607
- border: var(--_arrow-size) solid transparent;
2608
- border-block-end-color: var(--_bg);
2609
- transform: translateX(-50%);
2450
+ .textarea:disabled, .textarea--disabled {
2451
+ opacity: 0.5;
2452
+ cursor: not-allowed;
2453
+ resize: none;
2610
2454
  }
2611
- .popover--bottom::before {
2612
- content: "";
2613
- position: absolute;
2614
- inset-block-end: 100%;
2615
- inset-inline-start: 50%;
2616
- border: calc(var(--_arrow-size) + 1px) solid transparent;
2617
- border-block-end-color: var(--_border-color);
2618
- transform: translateX(-50%);
2455
+ .textarea:read-only {
2456
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
2457
+ resize: none;
2619
2458
  }
2620
- .popover--visible {
2621
- opacity: 1;
2459
+ .textarea--resize-none {
2460
+ resize: none;
2622
2461
  }
2623
- .popover--hidden {
2624
- opacity: 0;
2625
- pointer-events: none;
2462
+ .textarea--resize-horizontal {
2463
+ resize: horizontal;
2626
2464
  }
2627
- .popover--animate {
2628
- transition: opacity var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2465
+ .textarea--resize-both {
2466
+ resize: both;
2629
2467
  }
2630
2468
  }
2631
2469
  @layer components.tokens {
2632
- .progress {
2633
- --_height: var(--ui-progress-height, calc(0.5rem * 1));
2634
- --_bg: var(--ui-progress-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
2635
- --_fill: var(--ui-progress-fill, var(--ui-color-primary));
2636
- --_radius: var(--ui-progress-radius, var(--ui-radius-full, 9999px));
2470
+ .toggle {
2471
+ --_track-width: var(--ui-toggle-track-width, calc(0.5rem * 5));
2472
+ --_track-height: var(--ui-toggle-track-height, calc(0.5rem * 3));
2473
+ --_track-bg: var(--ui-toggle-track-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
2474
+ --_track-bg-checked: var(--ui-toggle-track-bg-checked, var(--ui-color-primary));
2475
+ --_track-radius: var(--ui-toggle-track-radius, calc(0.5rem * 1.5));
2476
+ --_thumb-size: var(--ui-toggle-thumb-size, calc(0.5rem * 2.5));
2477
+ --_thumb-bg: var(--ui-toggle-thumb-bg, white);
2478
+ --_thumb-offset: var(--ui-toggle-thumb-offset, calc(0.5rem / 4));
2637
2479
  }
2638
- .progress--sm {
2639
- --_height: calc(0.5rem * 1);
2480
+ .toggle--sm {
2481
+ --_track-width: calc(0.5rem * 4);
2482
+ --_track-height: calc(0.5rem * 2);
2483
+ --_track-radius: 0.5rem;
2484
+ --_thumb-size: calc(0.5rem * 1.5);
2640
2485
  }
2641
- .progress--lg {
2642
- --_height: calc(0.5rem * 2);
2486
+ .toggle--lg {
2487
+ --_track-width: calc(0.5rem * 6);
2488
+ --_track-height: calc(0.5rem * 4);
2489
+ --_track-radius: calc(0.5rem * 2);
2490
+ --_thumb-size: calc(0.5rem * 3.5);
2643
2491
  }
2644
2492
  }
2645
2493
  @layer components.styles {
2646
- .progress {
2494
+ .toggle {
2495
+ display: inline-flex;
2496
+ flex-shrink: 0;
2497
+ align-items: center;
2647
2498
  position: relative;
2648
- block-size: var(--_height);
2649
- overflow: hidden;
2650
- background: var(--_bg);
2651
- border-radius: var(--_radius);
2499
+ block-size: var(--_track-height);
2500
+ inline-size: var(--_track-width);
2501
+ background: var(--_track-bg);
2502
+ border-radius: var(--_track-radius);
2503
+ cursor: pointer;
2504
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2652
2505
  }
2653
- .progress__bar {
2506
+ .toggle__input {
2507
+ position: absolute;
2508
+ inset: 0;
2654
2509
  block-size: 100%;
2655
- background: var(--_fill);
2656
- border-radius: var(--_radius);
2657
- transition: inline-size var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
2658
- }
2659
- .progress--indeterminate .progress__bar {
2660
- inline-size: 30%;
2661
- animation: progress-indeterminate 1.5s infinite ease-in-out;
2510
+ inline-size: 100%;
2511
+ margin: 0;
2512
+ opacity: 0;
2513
+ cursor: pointer;
2662
2514
  }
2663
- @keyframes progress-indeterminate {
2664
- 0% {
2665
- transform: translateX(-100%);
2666
- }
2667
- 100% {
2668
- transform: translateX(400%);
2669
- }
2515
+ .toggle__track {
2516
+ position: absolute;
2517
+ inset: 0;
2518
+ background: var(--_track-bg);
2519
+ border-radius: var(--_track-radius);
2520
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2670
2521
  }
2671
- .progress--striped .progress__bar {
2672
- 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);
2673
- background-size: 0.5rem 0.5rem;
2522
+ .toggle__thumb {
2523
+ position: absolute;
2524
+ inset-block-start: var(--_thumb-offset);
2525
+ inset-inline-start: var(--_thumb-offset);
2526
+ block-size: var(--_thumb-size);
2527
+ inline-size: var(--_thumb-size);
2528
+ background: var(--_thumb-bg);
2529
+ border-radius: 50%;
2530
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
2531
+ transition: transform var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2674
2532
  }
2675
- .progress--animated .progress__bar {
2676
- animation: progress-stripes 1s linear infinite;
2533
+ .toggle__input:checked ~ .toggle__track {
2534
+ background: var(--_track-bg-checked);
2677
2535
  }
2678
- @keyframes progress-stripes {
2679
- from {
2680
- background-position: 0.5rem 0;
2681
- }
2682
- to {
2683
- background-position: 0 0;
2684
- }
2536
+ .toggle__input:checked ~ .toggle__thumb {
2537
+ transform: translateX(calc(var(--_track-width) - var(--_thumb-size) - var(--_thumb-offset) * 2));
2685
2538
  }
2686
- .progress--success {
2687
- --_fill: var(--ui-color-success);
2539
+ .toggle__input:focus-visible ~ .toggle__track {
2540
+ outline: 2px solid var(--ui-color-focus, var(--ui-color-primary));
2541
+ outline-offset: calc(0.5rem / 4);
2688
2542
  }
2689
- .progress--warning {
2690
- --_fill: var(--ui-color-warning);
2543
+ .toggle__input:disabled ~ .toggle__track,
2544
+ .toggle__input:disabled ~ .toggle__thumb {
2545
+ opacity: 0.5;
2546
+ cursor: not-allowed;
2691
2547
  }
2692
- .progress--danger {
2693
- --_fill: var(--ui-color-danger);
2548
+ .toggle:has(.toggle__input:disabled) {
2549
+ cursor: not-allowed;
2694
2550
  }
2695
2551
  }
2696
2552
  @layer components.tokens {
2697
- .radio {
2698
- --_size: var(--ui-radio-size, calc(0.5rem * 2));
2699
- --_bg: var(--ui-radio-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2700
- --_bg-checked: var(--ui-radio-bg-checked, var(--ui-color-primary, hsl(220, 85%, 50%)));
2701
- --_border-color: var(--ui-radio-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2702
- --_border-color-focus: var(--ui-radio-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
2703
- --_dot-color: var(--ui-radio-dot-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
2704
- }
2705
- .radio--lg {
2706
- --_size: var(--ui-radio-size-lg, calc(0.5rem * 3));
2707
- }
2708
- .radio--error {
2709
- --_border-color: var(--ui-radio-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2710
- --_border-color-focus: var(--ui-radio-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2711
- }
2712
- }
2713
- @layer components.styles {
2714
- .radio {
2715
- display: inline-flex;
2716
- flex-shrink: 0;
2717
- align-items: center;
2718
- justify-content: center;
2719
- block-size: var(--_size);
2720
- inline-size: var(--_size);
2721
- margin: 0;
2722
- vertical-align: middle;
2723
- background: var(--_bg);
2724
- border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2725
- border-radius: 50%;
2726
- cursor: pointer;
2727
- appearance: none;
2728
- 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);
2553
+ .divider {
2554
+ --_color: var(--ui-divider-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
2555
+ --_line-size: var(--ui-divider-line-size, 1px);
2556
+ --_height: var(--ui-divider-height, 0.5rem);
2557
+ --_gap: var(--ui-divider-gap, calc(0.5rem * 2));
2729
2558
  }
2730
- .radio::before {
2559
+ }
2560
+ @layer components.styles {
2561
+ .divider {
2562
+ display: flex;
2563
+ align-items: center;
2564
+ block-size: var(--_height);
2565
+ margin: var(--_gap) 0;
2566
+ font-size: var(--ui-font-size-sm, 0.875rem);
2567
+ line-height: 1;
2568
+ color: var(--ui-color-text-muted);
2569
+ }
2570
+ .divider::before,
2571
+ .divider::after {
2731
2572
  content: "";
2732
- block-size: 50%;
2733
- inline-size: 50%;
2734
- background-color: var(--_dot-color);
2735
- border-radius: 50%;
2736
- opacity: 0;
2737
- transform: scale(0);
2738
- transition: opacity var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), transform var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
2573
+ flex: 1;
2574
+ block-size: var(--_line-size);
2575
+ background: var(--_color);
2739
2576
  }
2740
- .radio:hover:not(:disabled) {
2741
- border-color: var(--_border-color-focus);
2577
+ .divider:not(:empty) {
2578
+ --_height: var(--ui-row-1, 1rem);
2742
2579
  }
2743
- .radio:focus-visible {
2744
- border-color: var(--_border-color-focus);
2745
- outline: none;
2746
- box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
2580
+ .divider:not(:empty)::before {
2581
+ margin-inline-end: calc(0.5rem * 2);
2747
2582
  }
2748
- .radio:checked {
2749
- background: var(--_bg-checked);
2750
- border-color: var(--_bg-checked);
2583
+ .divider:not(:empty)::after {
2584
+ margin-inline-start: calc(0.5rem * 2);
2751
2585
  }
2752
- .radio:checked::before {
2753
- opacity: 1;
2754
- transform: scale(1);
2586
+ .divider:empty::after {
2587
+ display: none;
2755
2588
  }
2756
- .radio:disabled {
2757
- opacity: 0.5;
2758
- cursor: not-allowed;
2589
+ .divider--vertical {
2590
+ flex-direction: column;
2591
+ align-self: stretch;
2592
+ margin: 0 var(--_gap);
2593
+ writing-mode: vertical-rl;
2759
2594
  }
2760
- }
2761
- @layer components.tokens {
2762
- .select {
2763
- --_height: var(--ui-select-height, var(--ui-row-2, 2rem));
2764
- --_padding-x: var(--ui-select-padding-x, var(--ui-space-1, 0.5rem));
2765
- --_font-size: var(--ui-select-font-size, var(--ui-font-size-sm, 0.875rem));
2766
- --_radius: var(--ui-select-radius, var(--ui-radius-md, 0.5rem));
2767
- --_bg: var(--ui-select-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2768
- --_border-color: var(--ui-select-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2769
- --_border-color-focus: var(--ui-select-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
2770
- --_text: var(--ui-select-text, var(--ui-color-text, hsl(220, 10%, 10%)));
2771
- --_icon-color: var(--ui-select-icon-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2595
+ .divider--vertical::before,
2596
+ .divider--vertical::after {
2597
+ flex: 1;
2598
+ block-size: auto;
2599
+ inline-size: var(--_size);
2772
2600
  }
2773
- .select--sm {
2774
- --_height: var(--ui-select-height-sm, calc(1rem * 1.5));
2775
- --_font-size: var(--ui-select-font-size-sm, var(--ui-font-size-xs, 0.75rem));
2601
+ .divider--start::before {
2602
+ display: none;
2776
2603
  }
2777
- .select--lg {
2778
- --_height: var(--ui-select-height-lg, calc(1rem * 2.5));
2779
- --_padding-x: var(--ui-select-padding-x-lg, var(--ui-space-2, 1rem));
2780
- --_font-size: var(--ui-select-font-size-lg, var(--ui-font-size-md, 1rem));
2604
+ .divider--start:not(:empty)::after {
2605
+ margin-inline-start: calc(0.5rem * 2);
2781
2606
  }
2782
- .select--filled {
2783
- --_bg: var(--ui-select-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2784
- --_border-color: transparent;
2607
+ .divider--end::after {
2608
+ display: none;
2785
2609
  }
2786
- .select--ghost {
2787
- --_bg: transparent;
2788
- --_border-color: transparent;
2610
+ .divider--end:not(:empty)::before {
2611
+ margin-inline-end: calc(0.5rem * 2);
2789
2612
  }
2790
- .select--error {
2791
- --_border-color: var(--ui-select-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2792
- --_border-color-focus: var(--ui-select-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
2613
+ .divider--dashed::before,
2614
+ .divider--dashed::after {
2615
+ background: repeating-linear-gradient(90deg, var(--_color) 0, var(--_color) calc(0.5rem / 2), transparent calc(0.5rem / 2), transparent 0.5rem);
2793
2616
  }
2794
- .select--success {
2795
- --_border-color: var(--ui-select-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
2796
- --_border-color-focus: var(--ui-select-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
2617
+ .divider--vertical.divider--dashed::before,
2618
+ .divider--vertical.divider--dashed::after {
2619
+ background: repeating-linear-gradient(180deg, var(--_color) 0, var(--_color) calc(0.5rem / 2), transparent calc(0.5rem / 2), transparent 0.5rem);
2620
+ }
2621
+ }
2622
+ @layer components.tokens {
2623
+ .breadcrumb {
2624
+ --_height: var(--ui-breadcrumb-height, var(--ui-row-1, 1rem));
2625
+ --_gap: var(--ui-breadcrumb-gap, calc(0.5rem * 1));
2626
+ --_separator-color: var(--ui-breadcrumb-separator-color, var(--ui-color-text-muted));
2627
+ --_link-color: var(--ui-breadcrumb-link-color, var(--ui-color-text-muted));
2628
+ --_current-color: var(--ui-breadcrumb-current-color, var(--ui-color-text));
2797
2629
  }
2798
2630
  }
2799
2631
  @layer components.styles {
2800
- .select {
2801
- display: inline-block;
2632
+ .breadcrumb {
2633
+ display: flex;
2634
+ flex-wrap: wrap;
2635
+ align-items: center;
2636
+ gap: var(--_gap);
2802
2637
  block-size: var(--_height);
2803
- padding-inline-start: var(--_padding-x);
2804
- padding-inline-end: calc(var(--_height) - var(--ui-space-half, 0.25rem));
2805
- font-family: inherit;
2806
- font-size: var(--_font-size);
2638
+ padding: 0;
2639
+ margin: 0;
2640
+ font-size: var(--ui-font-size-sm, 0.875rem);
2807
2641
  line-height: 1;
2808
- color: var(--_text);
2809
- background-color: var(--_bg);
2810
- 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");
2811
- border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2812
- border-radius: var(--_radius);
2813
- cursor: pointer;
2814
- appearance: none;
2815
- 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);
2816
- background-repeat: no-repeat;
2817
- background-position: right var(--ui-space-half, 0.25rem) center;
2818
- background-size: calc(var(--_height) * 0.5);
2642
+ list-style: none;
2819
2643
  }
2820
- .select:hover:not(:disabled, :focus) {
2821
- border-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
2644
+ .breadcrumb__item {
2645
+ display: flex;
2646
+ align-items: center;
2647
+ gap: var(--_gap);
2648
+ block-size: var(--_height);
2822
2649
  }
2823
- .select:focus, .select--focus {
2824
- border-color: var(--_border-color-focus);
2825
- outline: none;
2826
- box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
2650
+ .breadcrumb__item:not(:last-child)::after {
2651
+ content: var(--ui-breadcrumb-separator, "/");
2652
+ color: var(--_separator-color);
2827
2653
  }
2828
- .select:disabled, .select--disabled {
2829
- opacity: 0.5;
2830
- cursor: not-allowed;
2654
+ .breadcrumb__link {
2655
+ text-decoration: none;
2656
+ color: var(--_link-color);
2657
+ transition: color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2831
2658
  }
2832
- .select--block {
2833
- inline-size: 100%;
2659
+ .breadcrumb__link:hover {
2660
+ text-decoration: underline;
2661
+ color: var(--ui-color-primary);
2834
2662
  }
2835
- .select:invalid, .select--placeholder {
2836
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2663
+ .breadcrumb__item:last-child .breadcrumb__link,
2664
+ .breadcrumb__current {
2665
+ color: var(--_current-color);
2666
+ pointer-events: none;
2667
+ }
2668
+ .breadcrumb__item--hidden {
2669
+ display: none;
2670
+ }
2671
+ .breadcrumb__ellipsis {
2672
+ color: var(--_separator-color);
2837
2673
  }
2838
2674
  }
2839
2675
  @layer components.tokens {
2840
- .skeleton {
2841
- --_bg: var(--ui-skeleton-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
2842
- --_shimmer: var(--ui-skeleton-shimmer, rgb(255 255 255 / 0.5));
2843
- --_radius: var(--ui-skeleton-radius, var(--ui-radius-sm, calc(0.5rem / 2)));
2676
+ .menu {
2677
+ --_min-width: var(--ui-menu-min-width, calc(0.5rem * 16));
2678
+ --_max-height: var(--ui-menu-max-height, calc(0.5rem * 40));
2679
+ --_padding: var(--ui-menu-padding, calc(0.5rem * 1));
2680
+ --_radius: var(--ui-menu-radius, var(--ui-radius-md, 0.5rem));
2681
+ --_bg: var(--ui-menu-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2682
+ --_border-color: var(--ui-menu-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
2683
+ --_shadow: var(--ui-menu-shadow, var(--shadow-lg));
2684
+ --_item-padding: var(--ui-menu-item-padding, calc(0.5rem * 1) calc(0.5rem * 2));
2685
+ --_item-radius: var(--ui-menu-item-radius, var(--ui-radius-sm, 0.25rem));
2686
+ --_item-bg-hover: var(--ui-menu-item-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
2844
2687
  }
2845
2688
  }
2846
2689
  @layer components.styles {
2847
- .skeleton {
2848
- display: block;
2849
- position: relative;
2850
- overflow: hidden;
2690
+ .menu {
2691
+ min-inline-size: var(--_min-width);
2692
+ max-block-size: var(--_max-height);
2693
+ padding: var(--_padding);
2694
+ overflow-y: auto;
2851
2695
  background: var(--_bg);
2852
2696
  border-radius: var(--_radius);
2697
+ outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2698
+ box-shadow: var(--_shadow);
2699
+ outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
2853
2700
  }
2854
- .skeleton::after {
2855
- content: "";
2856
- position: absolute;
2857
- inset: 0;
2858
- background: linear-gradient(90deg, transparent 0%, var(--_shimmer) 50%, transparent 100%);
2859
- animation: skeleton-shimmer 1.5s infinite;
2860
- transform: translateX(-100%);
2861
- }
2862
- @keyframes skeleton-shimmer {
2863
- 100% {
2864
- transform: translateX(100%);
2865
- }
2701
+ .menu__group {
2702
+ padding: 0;
2703
+ margin: 0;
2704
+ list-style: none;
2866
2705
  }
2867
- .skeleton--text {
2868
- block-size: calc(0.5rem * 2);
2869
- inline-size: 100%;
2706
+ .menu__label {
2707
+ padding: var(--_item-padding);
2708
+ font-size: var(--ui-font-size-xs, 0.75rem);
2709
+ font-weight: var(--ui-weight-medium, 500);
2710
+ line-height: var(--ui-row-1, 1rem);
2711
+ letter-spacing: 0.05em;
2712
+ text-transform: uppercase;
2713
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2870
2714
  }
2871
- .skeleton--heading {
2872
- block-size: calc(0.5rem * 3);
2873
- inline-size: 60%;
2715
+ .menu__item {
2716
+ display: flex;
2717
+ align-items: center;
2718
+ gap: calc(0.5rem * 1);
2719
+ padding: var(--_item-padding);
2720
+ font-size: var(--ui-font-size-sm, 0.875rem);
2721
+ line-height: var(--ui-row-1, 1rem);
2722
+ text-decoration: none;
2723
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
2724
+ background: transparent;
2725
+ border: none;
2726
+ border-radius: var(--_item-radius);
2727
+ cursor: pointer;
2728
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2874
2729
  }
2875
- .skeleton--circle {
2876
- block-size: calc(0.5rem * 5);
2877
- inline-size: calc(0.5rem * 5);
2878
- border-radius: 50%;
2730
+ .menu__item:hover, .menu__item:focus-visible {
2731
+ background: var(--_item-bg-hover);
2732
+ outline: none;
2879
2733
  }
2880
- .skeleton--rect {
2881
- block-size: calc(0.5rem * 20);
2882
- inline-size: 100%;
2734
+ .menu__item--danger {
2735
+ color: var(--ui-color-danger, oklch(60% 0.22 25deg));
2883
2736
  }
2884
- .skeleton--static::after {
2885
- animation: none;
2737
+ .menu__item--danger:hover, .menu__item--danger:focus-visible {
2738
+ color: var(--ui-color-danger, oklch(60% 0.22 25deg));
2886
2739
  }
2887
- .skeleton--pulse {
2888
- animation: skeleton-pulse 1.5s infinite ease-in-out;
2740
+ .menu__item--disabled,
2741
+ .menu__item[aria-disabled=true] {
2742
+ opacity: 0.5;
2743
+ pointer-events: none;
2889
2744
  }
2890
- .skeleton--pulse::after {
2891
- display: none;
2745
+ .menu__item-icon {
2746
+ flex-shrink: 0;
2747
+ block-size: calc(0.5rem * 2);
2748
+ inline-size: calc(0.5rem * 2);
2892
2749
  }
2893
- @keyframes skeleton-pulse {
2894
- 0%, 100% {
2895
- opacity: 1;
2896
- }
2897
- 50% {
2898
- opacity: 0.5;
2899
- }
2750
+ .menu__item-shortcut {
2751
+ margin-inline-start: auto;
2752
+ font-size: var(--ui-font-size-xs, 0.75rem);
2753
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2900
2754
  }
2901
- }
2902
- @layer components.tokens {
2903
- .spinner {
2904
- --_size: var(--ui-spinner-size, calc(var(--unit) * 4));
2905
- --_border-width: var(--ui-spinner-border-width, var(--ui-border-width-md));
2906
- --_color: var(--ui-spinner-color, currentcolor);
2907
- --_track-color: var(--ui-spinner-track-color, transparent);
2908
- --_duration: var(--ui-spinner-duration, 750ms);
2755
+ .menu__separator {
2756
+ display: flex;
2757
+ align-items: center;
2758
+ block-size: calc(0.5rem * 2);
2759
+ margin: 0;
2909
2760
  }
2910
- .spinner--xs {
2911
- --_size: var(--ui-spinner-size-xs, calc(var(--unit) * 2));
2912
- --_border-width: var(--ui-spinner-border-width-xs, var(--ui-border-width-sm));
2761
+ .menu__separator::before {
2762
+ content: "";
2763
+ flex: 1;
2764
+ block-size: var(--ui-border-width-sm, 1px);
2765
+ background: var(--ui-color-border, hsl(220, 10%, 90%));
2913
2766
  }
2914
- .spinner--sm {
2915
- --_size: var(--ui-spinner-size-sm, calc(var(--unit) * 3));
2916
- --_border-width: var(--ui-spinner-border-width-sm, var(--ui-border-width-md));
2767
+ .menu__item--check,
2768
+ .menu__item--radio {
2769
+ position: relative;
2770
+ padding-inline-start: calc(0.5rem * 4);
2917
2771
  }
2918
- .spinner--lg {
2919
- --_size: var(--ui-spinner-size-lg, calc(var(--unit) * 5));
2920
- --_border-width: var(--ui-spinner-border-width-lg, var(--ui-border-width-md));
2772
+ .menu__item-indicator {
2773
+ display: flex;
2774
+ align-items: center;
2775
+ justify-content: center;
2776
+ position: absolute;
2777
+ inset-inline-start: calc(0.5rem * 1);
2778
+ block-size: calc(0.5rem * 2);
2779
+ inline-size: calc(0.5rem * 2);
2921
2780
  }
2922
- .spinner--xl {
2923
- --_size: var(--ui-spinner-size-xl, calc(var(--unit) * 6));
2924
- --_border-width: var(--ui-spinner-border-width-xl, var(--ui-border-width-lg));
2781
+ }
2782
+ @layer components.tokens {
2783
+ .nav {
2784
+ --_gap: var(--ui-nav-gap, var(--ui-space-1, 0.5rem));
2785
+ --_item-height: var(--ui-nav-item-height, var(--ui-row-2, 2rem));
2786
+ --_item-padding-x: var(--ui-nav-item-padding-x, var(--ui-space-2, 1rem));
2787
+ --_item-font-size: var(--ui-nav-item-font-size, var(--ui-font-size-sm, 0.875rem));
2788
+ --_item-font-weight: var(--ui-nav-item-font-weight, var(--ui-weight-medium, 500));
2789
+ --_item-color: var(--ui-nav-item-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2790
+ --_item-color-hover: var(--ui-nav-item-color-hover, var(--ui-color-text, hsl(220, 10%, 10%)));
2791
+ --_item-color-active: var(--ui-nav-item-color-active, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2792
+ --_item-radius: var(--ui-nav-item-radius, var(--ui-radius-sm, 0.25rem));
2793
+ --_border-color: var(--ui-nav-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
2794
+ }
2795
+ .nav--pills {
2796
+ --_item-bg-hover: var(--ui-nav-item-bg-hover, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2797
+ --_item-bg-active: var(--ui-nav-item-bg-active, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2798
+ --_item-color-active: var(--ui-nav-item-color-active, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
2925
2799
  }
2926
2800
  }
2927
2801
  @layer components.styles {
2928
- .spinner {
2929
- display: inline-block;
2930
- flex-shrink: 0;
2802
+ .nav__list {
2803
+ display: flex;
2804
+ align-items: stretch;
2805
+ gap: var(--_gap);
2931
2806
  box-sizing: border-box;
2932
- block-size: var(--_size);
2933
- inline-size: var(--_size);
2934
- vertical-align: middle;
2935
- border: var(--_border-width) solid var(--_track-color);
2936
- border-radius: 50%;
2937
- border-block-start-color: var(--_color);
2938
- animation: spinner-rotate var(--_duration) linear infinite;
2807
+ block-size: var(--_item-height);
2808
+ padding: 0;
2809
+ margin: 0;
2810
+ list-style: none;
2811
+ box-shadow: inset 0 calc(var(--ui-border-width-sm, 0.0625rem) * -1) 0 var(--_border-color);
2939
2812
  }
2940
- @keyframes spinner-rotate {
2941
- to {
2942
- transform: rotate(360deg);
2943
- }
2813
+ .nav__item {
2814
+ display: inline-flex;
2815
+ align-items: center;
2816
+ box-sizing: border-box;
2817
+ block-size: var(--_item-height);
2818
+ padding-inline: var(--_item-padding-x);
2819
+ font-family: var(--ui-font-sans, Noto Sans, system-ui, -apple-system, sans-serif);
2820
+ font-size: var(--_item-font-size);
2821
+ font-weight: var(--_item-font-weight);
2822
+ line-height: 1;
2823
+ text-decoration: none;
2824
+ white-space: nowrap;
2825
+ color: var(--_item-color);
2826
+ background: transparent;
2827
+ border: none;
2828
+ box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 transparent;
2829
+ cursor: pointer;
2830
+ transition: color var(--ui-duration-base) var(--ui-ease-default), background var(--ui-duration-base) var(--ui-ease-default), box-shadow var(--ui-duration-base) var(--ui-ease-default);
2944
2831
  }
2945
- }
2946
- @layer components.tokens {
2947
- .status {
2948
- --_size: var(--ui-status-size, calc(0.5rem * 1));
2949
- --_color: var(--ui-status-color, var(--ui-color-text-muted));
2950
- --_gap: var(--ui-status-gap, calc(0.5rem * 1));
2832
+ .nav__item:hover {
2833
+ color: var(--_item-color-hover);
2951
2834
  }
2952
- .status--success {
2953
- --_color: var(--ui-color-success);
2835
+ .nav__item--active {
2836
+ color: var(--_item-color-active);
2837
+ box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 var(--_item-color-active);
2954
2838
  }
2955
- .status--warning {
2956
- --_color: var(--ui-color-warning);
2839
+ .nav__item--disabled {
2840
+ opacity: 0.5;
2841
+ pointer-events: none;
2957
2842
  }
2958
- .status--danger {
2959
- --_color: var(--ui-color-danger);
2843
+ .nav--pills .nav__list {
2844
+ box-shadow: none;
2960
2845
  }
2961
- .status--info {
2962
- --_color: var(--ui-color-primary);
2846
+ .nav--pills .nav__item {
2847
+ border-radius: var(--_item-radius);
2848
+ box-shadow: none;
2963
2849
  }
2964
- }
2965
- @layer components.styles {
2966
- .status {
2967
- display: inline-flex;
2968
- align-items: center;
2969
- gap: var(--_gap);
2850
+ .nav--pills .nav__item:hover {
2851
+ background: var(--_item-bg-hover);
2970
2852
  }
2971
- .status__dot {
2972
- flex-shrink: 0;
2973
- block-size: var(--_size);
2974
- inline-size: var(--_size);
2975
- background: var(--_color);
2976
- border-radius: 50%;
2853
+ .nav--pills .nav__item--active {
2854
+ color: var(--_item-color-active);
2855
+ background: var(--_item-bg-active);
2977
2856
  }
2978
- .status--pulse .status__dot {
2979
- position: relative;
2857
+ .nav--vertical .nav__list {
2858
+ flex-direction: column;
2859
+ align-items: stretch;
2860
+ block-size: auto;
2861
+ box-shadow: inset calc(var(--ui-border-width-sm, 0.0625rem) * -1) 0 0 var(--_border-color);
2980
2862
  }
2981
- .status--pulse .status__dot::before {
2982
- content: "";
2983
- position: absolute;
2984
- inset: 0;
2985
- background: var(--_color);
2986
- border-radius: 50%;
2987
- animation: status-pulse 2s infinite;
2863
+ .nav--vertical .nav__item {
2864
+ box-shadow: inset calc(var(--ui-border-width-md, 0.125rem) * -1) 0 0 transparent;
2988
2865
  }
2989
- @keyframes status-pulse {
2990
- 0% {
2991
- opacity: 1;
2992
- transform: scale(1);
2993
- }
2994
- 100% {
2995
- opacity: 0;
2996
- transform: scale(2.5);
2997
- }
2866
+ .nav--vertical .nav__item--active {
2867
+ box-shadow: inset calc(var(--ui-border-width-md, 0.125rem) * -1) 0 0 var(--_item-color-active);
2998
2868
  }
2999
- .status--sm {
3000
- --_size: calc(0.5rem * 0.75);
3001
- --_gap: calc(0.5rem * 0.75);
2869
+ .nav--vertical.nav--pills .nav__list {
2870
+ box-shadow: none;
3002
2871
  }
3003
- .status--lg {
3004
- --_size: calc(0.5rem * 1.5);
3005
- --_gap: calc(0.5rem * 1.5);
2872
+ .nav--vertical.nav--pills .nav__item {
2873
+ box-shadow: none;
3006
2874
  }
3007
2875
  }
3008
2876
  @layer components.tokens {
3009
- .table {
3010
- --_font-size: var(--ui-table-font-size, var(--ui-font-size-sm, 0.875rem));
3011
- --_border-color: var(--ui-table-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
3012
- --_header-bg: var(--ui-table-header-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
3013
- --_cell-padding-x: var(--ui-table-cell-padding-x, var(--ui-space-2, 1rem));
3014
- --_cell-padding-y: var(--ui-table-cell-padding-y, var(--ui-space-1, 0.5rem));
3015
- }
3016
- .table--compact {
3017
- --_cell-padding-y: var(--ui-space-0, 0.25rem);
3018
- --_cell-padding-x: var(--ui-space-1, 0.5rem);
3019
- --_font-size: var(--ui-font-size-xs, 0.75rem);
2877
+ .pagination {
2878
+ --_gap: var(--ui-pagination-gap, calc(0.5rem * 0.5));
2879
+ --_item-size: var(--ui-pagination-item-size, calc(0.5rem * 4));
2880
+ --_item-radius: var(--ui-pagination-item-radius, var(--ui-radius-sm, 0.25rem));
2881
+ --_item-bg: var(--ui-pagination-item-bg, transparent);
2882
+ --_item-bg-hover: var(--ui-pagination-item-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
2883
+ --_item-bg-active: var(--ui-pagination-item-bg-active, var(--ui-color-primary));
2884
+ --_item-color: var(--ui-pagination-item-color, var(--ui-color-text, hsl(220, 10%, 10%)));
2885
+ --_item-color-active: var(--ui-pagination-item-color-active, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3020
2886
  }
3021
2887
  }
3022
2888
  @layer components.styles {
3023
- .table {
3024
- inline-size: 100%;
3025
- font-size: var(--_font-size);
3026
- border-collapse: separate;
3027
- border-spacing: 0;
2889
+ .pagination {
2890
+ display: flex;
2891
+ align-items: center;
2892
+ gap: var(--_gap);
3028
2893
  }
3029
- .table th,
3030
- .table td {
3031
- padding-block-start: var(--_cell-padding-y);
3032
- padding-block-end: calc(var(--_cell-padding-y) - var(--ui-border-width-sm, 0.0625rem));
3033
- padding-inline: var(--_cell-padding-x);
3034
- line-height: calc(var(--unit, 0.5rem) * 3);
3035
- text-align: start;
3036
- border-block-end: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2894
+ .pagination__list {
2895
+ display: flex;
2896
+ align-items: center;
2897
+ gap: var(--_gap);
2898
+ padding: 0;
2899
+ margin: 0;
2900
+ list-style: none;
3037
2901
  }
3038
- .table th {
3039
- font-weight: var(--ui-weight-medium, 500);
3040
- background: var(--_header-bg);
2902
+ .pagination__item {
2903
+ display: flex;
3041
2904
  }
3042
- .table--striped tbody tr:nth-child(odd) {
3043
- background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
2905
+ .pagination__link {
2906
+ display: inline-flex;
2907
+ align-items: center;
2908
+ justify-content: center;
2909
+ block-size: var(--_item-size);
2910
+ min-inline-size: var(--_item-size);
2911
+ padding-inline: calc(0.5rem * 1);
2912
+ font-size: var(--ui-font-size-sm, 0.875rem);
2913
+ text-decoration: none;
2914
+ color: var(--_item-color);
2915
+ background: var(--_item-bg);
2916
+ border-radius: var(--_item-radius);
2917
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease), color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2918
+ }
2919
+ .pagination__link:hover {
2920
+ background: var(--_item-bg-hover);
2921
+ }
2922
+ .pagination__link[aria-current=page],
2923
+ .pagination__link--active {
2924
+ color: var(--_item-color-active);
2925
+ background: var(--_item-bg-active);
2926
+ pointer-events: none;
2927
+ }
2928
+ .pagination__link[aria-disabled=true],
2929
+ .pagination__link--disabled {
2930
+ opacity: 0.5;
2931
+ pointer-events: none;
2932
+ }
2933
+ .pagination__prev,
2934
+ .pagination__next {
2935
+ display: inline-flex;
2936
+ align-items: center;
2937
+ gap: calc(0.5rem * 0.5);
2938
+ padding-inline: calc(0.5rem * 1.5);
2939
+ }
2940
+ .pagination__ellipsis {
2941
+ display: inline-flex;
2942
+ align-items: center;
2943
+ justify-content: center;
2944
+ block-size: var(--_item-size);
2945
+ min-inline-size: var(--_item-size);
2946
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2947
+ }
2948
+ .pagination--sm {
2949
+ --_item-size: calc(0.5rem * 3);
2950
+ --_gap: calc(0.5rem * 0.25);
3044
2951
  }
3045
- .table--striped th {
3046
- background: var(--ui-color-bg-muted, hsl(220, 10%, 90%));
2952
+ .pagination--lg {
2953
+ --_item-size: calc(0.5rem * 5);
2954
+ --_gap: calc(0.5rem * 0.75);
3047
2955
  }
3048
2956
  }
3049
2957
  @layer components.tokens {
@@ -3087,9 +2995,9 @@
3087
2995
  color: var(--ui-color-text, hsl(220, 10%, 10%));
3088
2996
  }
3089
2997
  .tabs__tab--active {
3090
- color: var(--ui-color-primary, hsl(220, 85%, 50%));
2998
+ color: var(--ui-color-primary, oklch(55% 0.22 250deg));
3091
2999
  background: var(--_tab-bg-active);
3092
- box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 var(--ui-color-primary, hsl(220, 85%, 50%));
3000
+ box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 var(--ui-color-primary, oklch(55% 0.22 250deg));
3093
3001
  }
3094
3002
  .tabs__panel {
3095
3003
  display: none;
@@ -3101,381 +3009,425 @@
3101
3009
  }
3102
3010
  }
3103
3011
  @layer components.tokens {
3104
- .tag {
3105
- --_height: var(--ui-tag-height, calc(0.5rem * 3));
3106
- --_padding-x: var(--ui-tag-padding-x, var(--ui-space-1, 0.5rem));
3107
- --_gap: var(--ui-tag-gap, calc(0.5rem * 0.5));
3108
- --_radius: var(--ui-tag-radius, var(--ui-radius-full, 9999px));
3109
- --_font-size: var(--ui-tag-font-size, var(--ui-font-size-sm, 0.875rem));
3110
- --_bg: var(--ui-tag-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
3111
- --_color: var(--ui-tag-color, var(--ui-color-text, hsl(220, 10%, 10%)));
3112
- }
3113
- .tag--sm {
3114
- --_height: var(--ui-tag-height-sm, calc(0.5rem * 2.5));
3115
- --_padding-x: var(--ui-tag-padding-x-sm, calc(0.5rem * 1));
3116
- --_font-size: var(--ui-tag-font-size-sm, var(--ui-font-size-xs, 0.75rem));
3117
- }
3118
- .tag--primary {
3119
- --_bg: var(--ui-tag-primary-bg, var(--ui-color-primary, hsl(220, 85%, 50%)));
3120
- --_color: var(--ui-tag-primary-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3121
- }
3122
- .tag--success {
3123
- --_bg: var(--ui-tag-success-bg, var(--ui-color-success, hsl(142, 70%, 45%)));
3124
- --_color: var(--ui-tag-success-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3125
- }
3126
- .tag--warning {
3127
- --_bg: var(--ui-tag-warning-bg, var(--ui-color-warning, hsl(38, 90%, 50%)));
3128
- --_color: var(--ui-tag-warning-color, var(--ui-color-text, hsl(220, 10%, 10%)));
3129
- }
3130
- .tag--danger {
3131
- --_bg: var(--ui-tag-danger-bg, var(--ui-color-danger, hsl(0, 70%, 50%)));
3132
- --_color: var(--ui-tag-danger-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3012
+ .dialog {
3013
+ --_header-padding: var(--ui-dialog-header-padding, calc(0.5rem * 2) calc(0.5rem * 3));
3014
+ --_body-padding: var(--ui-dialog-body-padding, calc(0.5rem * 3));
3015
+ --_footer-padding: var(--ui-dialog-footer-padding, calc(0.5rem * 2) calc(0.5rem * 3));
3016
+ --_border-color: var(--ui-dialog-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
3133
3017
  }
3134
3018
  }
3135
3019
  @layer components.styles {
3136
- .tag {
3137
- display: inline-flex;
3020
+ .dialog .modal__content {
3021
+ padding: 0;
3022
+ }
3023
+ .dialog__header {
3024
+ display: flex;
3025
+ flex-shrink: 0;
3138
3026
  align-items: center;
3139
- gap: var(--_gap);
3140
- block-size: var(--_height);
3141
- padding-inline: var(--_padding-x);
3142
- font-size: var(--_font-size);
3143
- font-weight: var(--ui-weight-medium, 500);
3144
- line-height: 1;
3145
- white-space: nowrap;
3146
- color: var(--_color);
3147
- background: var(--_bg);
3148
- border-radius: var(--_radius);
3027
+ justify-content: space-between;
3028
+ gap: calc(0.5rem * 2);
3029
+ padding: var(--_header-padding);
3030
+ border-block-end: 1px solid var(--_border-color);
3149
3031
  }
3150
- .tag:disabled, .tag[aria-disabled=true] {
3151
- opacity: 0.5;
3152
- cursor: not-allowed;
3032
+ .dialog__title {
3033
+ margin: 0;
3034
+ font-size: var(--ui-font-size-lg, 1.25rem);
3035
+ font-weight: var(--ui-weight-semibold, 600);
3036
+ line-height: calc(0.5rem * 3);
3153
3037
  }
3154
- .tag__remove {
3155
- display: inline-flex;
3038
+ .dialog__close {
3156
3039
  flex-shrink: 0;
3157
- align-items: center;
3158
- justify-content: center;
3159
- padding: 0;
3160
- margin-inline-start: calc(var(--_gap) * -0.5);
3161
- color: currentcolor;
3162
- background: none;
3163
- border: none;
3164
- opacity: 0.7;
3165
- cursor: pointer;
3040
+ margin-inline-start: auto;
3166
3041
  }
3167
- .tag__remove:hover {
3168
- opacity: 1;
3042
+ .dialog__body {
3043
+ flex: 1 1 auto;
3044
+ padding: var(--_body-padding);
3045
+ overflow-y: auto;
3169
3046
  }
3170
- .tag-group {
3047
+ .dialog__footer {
3171
3048
  display: flex;
3172
- flex-wrap: wrap;
3173
- gap: calc(0.5rem * 0.5);
3049
+ flex-shrink: 0;
3050
+ align-items: center;
3051
+ justify-content: flex-end;
3052
+ gap: calc(0.5rem * 1.5);
3053
+ padding: var(--_footer-padding);
3054
+ border-block-start: 1px solid var(--_border-color);
3055
+ }
3056
+ .dialog--borderless .dialog__header {
3057
+ border-block-end: none;
3058
+ }
3059
+ .dialog--borderless .dialog__footer {
3060
+ border-block-start: none;
3174
3061
  }
3175
3062
  }
3176
3063
  @layer components.tokens {
3177
- .textarea {
3178
- --_min-height: var(--ui-textarea-min-height, calc(1rem * 4));
3179
- --_padding-x: var(--ui-textarea-padding-x, var(--ui-space-1, 0.5rem));
3180
- --_padding-y: var(--ui-textarea-padding-y, var(--ui-space-1, 0.5rem));
3181
- --_font-size: var(--ui-textarea-font-size, var(--ui-font-size-sm, 0.875rem));
3182
- --_radius: var(--ui-textarea-radius, var(--ui-radius-md, 0.5rem));
3183
- --_bg: var(--ui-textarea-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
3184
- --_border-color: var(--ui-textarea-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
3185
- --_border-color-focus: var(--ui-textarea-border-color-focus, var(--ui-color-primary, hsl(220, 85%, 50%)));
3186
- --_text: var(--ui-textarea-text, var(--ui-color-text, hsl(220, 10%, 10%)));
3187
- --_placeholder: var(--ui-textarea-placeholder, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
3064
+ .drawer {
3065
+ --_size: var(--ui-drawer-size, calc(0.5rem * 40));
3066
+ --_max-size: var(--ui-drawer-max-size, 90%);
3067
+ --_bg: var(--ui-drawer-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
3068
+ --_shadow: var(--ui-drawer-shadow, var(--shadow-lg));
3069
+ --_header-padding: var(--ui-drawer-header-padding, calc(0.5rem * 2) calc(0.5rem * 3));
3070
+ --_body-padding: var(--ui-drawer-body-padding, calc(0.5rem * 3));
3071
+ --_footer-padding: var(--ui-drawer-footer-padding, calc(0.5rem * 2) calc(0.5rem * 3));
3072
+ --_border-color: var(--ui-drawer-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
3188
3073
  }
3189
- .textarea--sm {
3190
- --_min-height: var(--ui-textarea-min-height-sm, calc(1rem * 3));
3191
- --_font-size: var(--ui-textarea-font-size-sm, var(--ui-font-size-xs, 0.75rem));
3074
+ .drawer--sm {
3075
+ --_size: calc(0.5rem * 30);
3192
3076
  }
3193
- .textarea--lg {
3194
- --_min-height: var(--ui-textarea-min-height-lg, calc(1rem * 6));
3195
- --_padding-x: var(--ui-textarea-padding-x-lg, var(--ui-space-2, 1rem));
3196
- --_padding-y: var(--ui-textarea-padding-y-lg, var(--ui-space-2, 1rem));
3197
- --_font-size: var(--ui-textarea-font-size-lg, var(--ui-font-size-md, 1rem));
3077
+ .drawer--lg {
3078
+ --_size: calc(0.5rem * 50);
3198
3079
  }
3199
- .textarea--filled {
3200
- --_bg: var(--ui-textarea-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
3201
- --_border-color: transparent;
3080
+ .drawer--full {
3081
+ --_size: 100%;
3082
+ --_max-size: 100%;
3202
3083
  }
3203
- .textarea--ghost {
3204
- --_bg: transparent;
3205
- --_border-color: transparent;
3084
+ }
3085
+ @layer components.styles {
3086
+ .drawer-overlay {
3087
+ position: fixed;
3088
+ inset: 0;
3089
+ z-index: var(--ui-z-drawer, 900);
3090
+ background: var(--ui-overlay-bg, rgba(0, 0, 0, 0.5));
3206
3091
  }
3207
- .textarea--error {
3208
- --_border-color: var(--ui-textarea-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
3209
- --_border-color-focus: var(--ui-textarea-error-border, var(--ui-color-danger, hsl(0, 70%, 50%)));
3092
+ .drawer-overlay[data-state=open] {
3093
+ animation: drawer-overlay-in var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
3210
3094
  }
3211
- .textarea--success {
3212
- --_border-color: var(--ui-textarea-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
3213
- --_border-color-focus: var(--ui-textarea-success-border, var(--ui-color-success, hsl(142, 70%, 45%)));
3095
+ .drawer-overlay[data-state=closed] {
3096
+ animation: drawer-overlay-out var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
3214
3097
  }
3215
- }
3216
- @layer components.styles {
3217
- .textarea {
3218
- display: block;
3219
- box-sizing: border-box;
3220
- inline-size: 100%;
3221
- min-block-size: var(--_min-height);
3222
- padding-block: var(--_padding-y);
3223
- padding-inline: var(--_padding-x);
3224
- font-family: inherit;
3225
- font-size: var(--_font-size);
3226
- line-height: var(--ui-row-1, 1rem);
3227
- color: var(--_text);
3228
- background: var(--_bg);
3229
- border: none;
3230
- border-radius: var(--_radius);
3231
- outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3232
- 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);
3233
- outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
3234
- resize: vertical;
3098
+ @keyframes drawer-overlay-in {
3099
+ from {
3100
+ opacity: 0;
3101
+ }
3235
3102
  }
3236
- .textarea::placeholder {
3237
- color: var(--_placeholder);
3103
+ @keyframes drawer-overlay-out {
3104
+ to {
3105
+ opacity: 0;
3106
+ }
3238
3107
  }
3239
- .textarea:hover:not(:disabled, :focus) {
3240
- outline-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
3108
+ .drawer {
3109
+ display: flex;
3110
+ flex-direction: column;
3111
+ position: fixed;
3112
+ z-index: var(--ui-z-drawer, 900);
3113
+ background: var(--_bg);
3114
+ box-shadow: var(--_shadow);
3241
3115
  }
3242
- .textarea:focus, .textarea--focus {
3243
- outline-color: var(--_border-color-focus);
3244
- box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, hsl(220, 85%, 65%));
3116
+ .drawer--end {
3117
+ inset-block: 0;
3118
+ inset-inline-end: 0;
3119
+ inline-size: var(--_size);
3120
+ max-inline-size: var(--_max-size);
3121
+ box-shadow: calc(var(--ui-border-width-sm, 1px) * -1) 0 0 var(--_border-color);
3245
3122
  }
3246
- .textarea:disabled, .textarea--disabled {
3247
- opacity: 0.5;
3248
- cursor: not-allowed;
3249
- resize: none;
3123
+ .drawer--start {
3124
+ inset-block: 0;
3125
+ inset-inline-start: 0;
3126
+ inline-size: var(--_size);
3127
+ max-inline-size: var(--_max-size);
3128
+ box-shadow: var(--ui-border-width-sm, 1px) 0 0 var(--_border-color);
3250
3129
  }
3251
- .textarea:read-only {
3252
- background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
3253
- resize: none;
3130
+ .drawer--top {
3131
+ inset-block-start: 0;
3132
+ inset-inline: 0;
3133
+ block-size: var(--_size);
3134
+ max-block-size: var(--_max-size);
3135
+ box-shadow: 0 var(--ui-border-width-sm, 1px) 0 var(--_border-color);
3254
3136
  }
3255
- .textarea--resize-none {
3256
- resize: none;
3137
+ .drawer--bottom {
3138
+ inset-block-end: 0;
3139
+ inset-inline: 0;
3140
+ block-size: var(--_size);
3141
+ max-block-size: var(--_max-size);
3142
+ box-shadow: 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
3257
3143
  }
3258
- .textarea--resize-horizontal {
3259
- resize: horizontal;
3144
+ .drawer--end[data-state=open] {
3145
+ animation: drawer-slide-in-end var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
3260
3146
  }
3261
- .textarea--resize-both {
3262
- resize: both;
3147
+ .drawer--end[data-state=closed] {
3148
+ animation: drawer-slide-out-end var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
3263
3149
  }
3264
- }
3265
- @layer components.tokens {
3266
- .toast-viewport {
3267
- --_gap: var(--ui-toast-viewport-gap, calc(0.5rem * 1));
3268
- --_padding: var(--ui-toast-viewport-padding, calc(0.5rem * 2));
3269
- --_max-width: var(--ui-toast-viewport-max-width, 420px);
3150
+ .drawer--start[data-state=open] {
3151
+ animation: drawer-slide-in-start var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
3270
3152
  }
3271
- .toast {
3272
- --_padding: var(--ui-toast-padding, calc(0.5rem * 2));
3273
- --_gap: var(--ui-toast-gap, calc(0.5rem * 1));
3274
- --_radius: var(--ui-toast-radius, var(--ui-radius-md, 0.5rem));
3275
- --_bg: var(--ui-toast-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
3276
- --_border-color: var(--ui-toast-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
3277
- --_shadow: var(--ui-toast-shadow, var(--shadow-lg));
3153
+ .drawer--start[data-state=closed] {
3154
+ animation: drawer-slide-out-start var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
3155
+ }
3156
+ .drawer--top[data-state=open] {
3157
+ animation: drawer-slide-in-top var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
3278
3158
  }
3279
- .toast--success {
3280
- --_border-color: var(--ui-color-success);
3159
+ .drawer--top[data-state=closed] {
3160
+ animation: drawer-slide-out-top var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
3281
3161
  }
3282
- .toast--warning {
3283
- --_border-color: var(--ui-color-warning);
3162
+ .drawer--bottom[data-state=open] {
3163
+ animation: drawer-slide-in-bottom var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
3284
3164
  }
3285
- .toast--danger {
3286
- --_border-color: var(--ui-color-danger);
3165
+ .drawer--bottom[data-state=closed] {
3166
+ animation: drawer-slide-out-bottom var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
3287
3167
  }
3288
- .toast--info {
3289
- --_border-color: var(--ui-color-primary);
3168
+ @keyframes drawer-slide-in-end {
3169
+ from {
3170
+ transform: translateX(100%);
3171
+ }
3290
3172
  }
3291
- }
3292
- @layer components.styles {
3293
- .toast-viewport {
3294
- display: flex;
3295
- flex-direction: column;
3296
- gap: var(--_gap);
3297
- position: fixed;
3298
- z-index: var(--ui-z-toast, 1000);
3299
- max-inline-size: var(--_max-width);
3300
- padding: var(--_padding);
3301
- pointer-events: none;
3302
- list-style: none;
3173
+ @keyframes drawer-slide-out-end {
3174
+ to {
3175
+ transform: translateX(100%);
3176
+ }
3303
3177
  }
3304
- .toast-viewport--top-end {
3305
- inset-block-start: 0;
3306
- inset-inline-end: 0;
3178
+ @keyframes drawer-slide-in-start {
3179
+ from {
3180
+ transform: translateX(-100%);
3181
+ }
3307
3182
  }
3308
- .toast-viewport--top-start {
3309
- inset-block-start: 0;
3310
- inset-inline-start: 0;
3183
+ @keyframes drawer-slide-out-start {
3184
+ to {
3185
+ transform: translateX(-100%);
3186
+ }
3311
3187
  }
3312
- .toast-viewport--bottom-end {
3313
- inset-block-end: 0;
3314
- inset-inline-end: 0;
3188
+ @keyframes drawer-slide-in-top {
3189
+ from {
3190
+ transform: translateY(-100%);
3191
+ }
3315
3192
  }
3316
- .toast-viewport--bottom-start {
3317
- inset-block-end: 0;
3318
- inset-inline-start: 0;
3193
+ @keyframes drawer-slide-out-top {
3194
+ to {
3195
+ transform: translateY(-100%);
3196
+ }
3319
3197
  }
3320
- .toast-viewport--top-center {
3321
- inset-block-start: 0;
3322
- inset-inline-start: 50%;
3323
- transform: translateX(-50%);
3198
+ @keyframes drawer-slide-in-bottom {
3199
+ from {
3200
+ transform: translateY(100%);
3201
+ }
3324
3202
  }
3325
- .toast-viewport--bottom-center {
3326
- inset-block-end: 0;
3327
- inset-inline-start: 50%;
3328
- transform: translateX(-50%);
3203
+ @keyframes drawer-slide-out-bottom {
3204
+ to {
3205
+ transform: translateY(100%);
3206
+ }
3329
3207
  }
3330
- .toast {
3208
+ .drawer__header {
3331
3209
  display: flex;
3332
- align-items: flex-start;
3333
- gap: var(--_gap);
3334
- padding: var(--_padding);
3335
- background: var(--_bg);
3336
- border-radius: var(--_radius);
3337
- outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3338
- box-shadow: var(--_shadow);
3339
- pointer-events: auto;
3340
- outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
3341
- }
3342
- .toast__icon {
3343
3210
  flex-shrink: 0;
3211
+ align-items: center;
3212
+ justify-content: space-between;
3213
+ gap: calc(0.5rem * 2);
3214
+ padding: var(--_header-padding);
3215
+ box-shadow: inset 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
3344
3216
  }
3345
- .toast__content {
3346
- flex: 1;
3347
- min-inline-size: 0;
3348
- }
3349
- .toast__title {
3217
+ .drawer__title {
3350
3218
  margin: 0;
3351
- font-weight: var(--ui-weight-medium, 500);
3219
+ font-size: var(--ui-font-size-lg, 1.25rem);
3220
+ font-weight: var(--ui-weight-semibold, 600);
3352
3221
  line-height: var(--ui-row-1, 1rem);
3353
3222
  }
3354
- .toast__description {
3223
+ .drawer__description {
3355
3224
  margin: 0;
3356
3225
  font-size: var(--ui-font-size-sm, 0.875rem);
3357
3226
  line-height: var(--ui-row-1, 1rem);
3358
3227
  color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
3359
3228
  }
3360
- .toast__action {
3229
+ .drawer__close {
3361
3230
  flex-shrink: 0;
3231
+ margin-inline-start: auto;
3362
3232
  }
3363
- .toast__close {
3364
- display: inline-flex;
3233
+ .drawer__body {
3234
+ flex: 1 1 auto;
3235
+ padding: var(--_body-padding);
3236
+ overflow-y: auto;
3237
+ line-height: var(--ui-row-1, 1rem);
3238
+ }
3239
+ .drawer__footer {
3240
+ display: flex;
3365
3241
  flex-shrink: 0;
3366
3242
  align-items: center;
3243
+ justify-content: flex-end;
3244
+ gap: calc(0.5rem * 2);
3245
+ padding: var(--_footer-padding);
3246
+ box-shadow: inset 0 var(--ui-border-width-sm, 1px) 0 var(--_border-color);
3247
+ }
3248
+ }
3249
+ @layer components.tokens {
3250
+ .modal {
3251
+ --_bg: var(--ui-modal-bg, var(--ui-color-bg, white));
3252
+ --_radius: var(--ui-modal-radius, var(--ui-radius-lg, calc(0.5rem * 1.5)));
3253
+ --_shadow: var(--ui-modal-shadow, 0 calc(0.5rem * 3) calc(0.5rem * 6) rgb(0 0 0 / 0.25));
3254
+ --_padding: var(--ui-modal-padding, calc(0.5rem * 3));
3255
+ --_max-width: var(--ui-modal-max-width, calc(0.5rem * 60));
3256
+ --_max-height: var(--ui-modal-max-height, calc(100vh - 0.5rem * 8));
3257
+ --_z: var(--ui-modal-z, var(--ui-z-modal, 400));
3258
+ }
3259
+ .modal--sm {
3260
+ --_max-width: var(--ui-modal-max-width-sm, calc(0.5rem * 40));
3261
+ }
3262
+ .modal--lg {
3263
+ --_max-width: var(--ui-modal-max-width-lg, calc(0.5rem * 80));
3264
+ }
3265
+ .modal--full {
3266
+ --_max-width: calc(100vw - 0.5rem * 4);
3267
+ --_max-height: calc(100vh - 0.5rem * 4);
3268
+ --_radius: 0;
3269
+ }
3270
+ }
3271
+ @layer components.styles {
3272
+ .modal {
3273
+ display: flex;
3274
+ align-items: center;
3367
3275
  justify-content: center;
3368
- block-size: var(--ui-row-1, 1rem);
3369
- inline-size: var(--ui-row-1, 1rem);
3370
- padding: 0;
3371
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
3372
- background: none;
3373
- border: none;
3374
- cursor: pointer;
3276
+ position: fixed;
3277
+ inset: 0;
3278
+ z-index: var(--_z);
3279
+ padding: calc(0.5rem * 2);
3375
3280
  }
3376
- .toast__close:hover {
3377
- color: var(--ui-color-text, hsl(220, 10%, 10%));
3281
+ .modal__content {
3282
+ display: flex;
3283
+ flex-direction: column;
3284
+ position: relative;
3285
+ inline-size: 100%;
3286
+ max-block-size: var(--_max-height);
3287
+ max-inline-size: var(--_max-width);
3288
+ padding: var(--_padding);
3289
+ overflow: hidden;
3290
+ background: var(--_bg);
3291
+ border-radius: var(--_radius);
3292
+ box-shadow: var(--_shadow);
3378
3293
  }
3379
- .toast[data-state=open] {
3380
- animation: toast-slide-in var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
3294
+ .modal__body {
3295
+ flex: 1 1 auto;
3296
+ overflow-y: auto;
3381
3297
  }
3382
- .toast[data-state=closed] {
3383
- animation: toast-slide-out var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
3298
+ .modal--entering .modal__content,
3299
+ .modal--visible .modal__content {
3300
+ opacity: 1;
3301
+ transform: scale(1);
3384
3302
  }
3385
- @keyframes toast-slide-in {
3386
- from {
3387
- opacity: 0;
3388
- transform: translateX(100%);
3389
- }
3303
+ .modal--exiting .modal__content,
3304
+ .modal--hidden .modal__content {
3305
+ opacity: 0;
3306
+ transform: scale(0.95);
3390
3307
  }
3391
- @keyframes toast-slide-out {
3392
- to {
3393
- opacity: 0;
3394
- transform: translateX(100%);
3395
- }
3308
+ .modal--animate .modal__content {
3309
+ transition: opacity var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease), transform var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
3310
+ }
3311
+ .modal--hidden {
3312
+ visibility: hidden;
3313
+ pointer-events: none;
3396
3314
  }
3397
3315
  }
3398
3316
  @layer components.tokens {
3399
- .toggle {
3400
- --_track-width: var(--ui-toggle-track-width, calc(0.5rem * 5));
3401
- --_track-height: var(--ui-toggle-track-height, calc(0.5rem * 3));
3402
- --_track-bg: var(--ui-toggle-track-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
3403
- --_track-bg-checked: var(--ui-toggle-track-bg-checked, var(--ui-color-primary));
3404
- --_track-radius: var(--ui-toggle-track-radius, calc(0.5rem * 1.5));
3405
- --_thumb-size: var(--ui-toggle-thumb-size, calc(0.5rem * 2.5));
3406
- --_thumb-bg: var(--ui-toggle-thumb-bg, white);
3407
- --_thumb-offset: var(--ui-toggle-thumb-offset, calc(0.5rem / 4));
3317
+ .overlay {
3318
+ --_bg: var(--ui-overlay-bg, rgb(0 0 0 / 0.5));
3319
+ --_z: var(--ui-overlay-z, var(--ui-z-overlay, 300));
3408
3320
  }
3409
- .toggle--sm {
3410
- --_track-width: calc(0.5rem * 4);
3411
- --_track-height: calc(0.5rem * 2);
3412
- --_track-radius: 0.5rem;
3413
- --_thumb-size: calc(0.5rem * 1.5);
3321
+ .overlay--light {
3322
+ --_bg: var(--ui-overlay-bg-light, rgb(255 255 255 / 0.7));
3414
3323
  }
3415
- .toggle--lg {
3416
- --_track-width: calc(0.5rem * 6);
3417
- --_track-height: calc(0.5rem * 4);
3418
- --_track-radius: calc(0.5rem * 2);
3419
- --_thumb-size: calc(0.5rem * 3.5);
3324
+ .overlay--blur {
3325
+ --_bg: var(--ui-overlay-bg-blur, rgb(0 0 0 / 0.3));
3326
+ }
3327
+ }
3328
+ @layer components.styles {
3329
+ .overlay {
3330
+ position: fixed;
3331
+ inset: 0;
3332
+ z-index: var(--_z);
3333
+ background: var(--_bg);
3334
+ }
3335
+ .overlay--blur {
3336
+ backdrop-filter: blur(calc(0.5rem * 0.5));
3337
+ }
3338
+ .overlay--entering,
3339
+ .overlay--visible {
3340
+ opacity: 1;
3341
+ }
3342
+ .overlay--exiting,
3343
+ .overlay--hidden {
3344
+ opacity: 0;
3345
+ pointer-events: none;
3346
+ }
3347
+ .overlay--animate {
3348
+ transition: opacity var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
3420
3349
  }
3421
3350
  }
3422
- @layer components.styles {
3423
- .toggle {
3424
- display: inline-flex;
3425
- flex-shrink: 0;
3426
- align-items: center;
3427
- position: relative;
3428
- block-size: var(--_track-height);
3429
- inline-size: var(--_track-width);
3430
- background: var(--_track-bg);
3431
- border-radius: var(--_track-radius);
3432
- cursor: pointer;
3433
- transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3351
+ @layer components.tokens {
3352
+ .popover {
3353
+ --_bg: var(--ui-popover-bg, var(--ui-color-bg, white));
3354
+ --_border-color: var(--ui-popover-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
3355
+ --_radius: var(--ui-popover-radius, var(--ui-radius-md, calc(0.5rem * 1)));
3356
+ --_shadow: var(--ui-popover-shadow, 0 calc(0.5rem / 2) calc(0.5rem * 2) rgb(0 0 0 / 0.15));
3357
+ --_padding: var(--ui-popover-padding, calc(0.5rem * 2));
3358
+ --_max-width: var(--ui-popover-max-width, calc(0.5rem * 40));
3359
+ --_z: var(--ui-popover-z, var(--ui-z-popover, 500));
3360
+ --_arrow-size: var(--ui-popover-arrow-size, calc(0.5rem));
3434
3361
  }
3435
- .toggle__input {
3362
+ }
3363
+ @layer components.styles {
3364
+ .popover {
3436
3365
  position: absolute;
3437
- inset: 0;
3438
- block-size: 100%;
3439
- inline-size: 100%;
3366
+ z-index: var(--_z);
3367
+ max-inline-size: var(--_max-width);
3368
+ padding: var(--_padding);
3369
+ line-height: var(--ui-row-1, 1rem);
3370
+ background: var(--_bg);
3371
+ border-radius: var(--_radius);
3372
+ outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3373
+ box-shadow: var(--_shadow);
3374
+ outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
3375
+ }
3376
+ .popover__header {
3377
+ padding-block-end: calc(0.5rem * 2);
3378
+ margin-block-end: calc(0.5rem * 2);
3379
+ box-shadow: inset 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
3380
+ }
3381
+ .popover__title {
3440
3382
  margin: 0;
3441
- opacity: 0;
3442
- cursor: pointer;
3383
+ font-size: var(--ui-font-size-md, 1rem);
3384
+ font-weight: var(--ui-weight-semibold, 600);
3443
3385
  }
3444
- .toggle__track {
3386
+ .popover--top::after {
3387
+ content: "";
3445
3388
  position: absolute;
3446
- inset: 0;
3447
- background: var(--_track-bg);
3448
- border-radius: var(--_track-radius);
3449
- transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3389
+ inset-block-start: 100%;
3390
+ inset-inline-start: 50%;
3391
+ border: var(--_arrow-size) solid transparent;
3392
+ border-block-start-color: var(--_bg);
3393
+ transform: translateX(-50%);
3450
3394
  }
3451
- .toggle__thumb {
3395
+ .popover--top::before {
3396
+ content: "";
3452
3397
  position: absolute;
3453
- inset-block-start: var(--_thumb-offset);
3454
- inset-inline-start: var(--_thumb-offset);
3455
- block-size: var(--_thumb-size);
3456
- inline-size: var(--_thumb-size);
3457
- background: var(--_thumb-bg);
3458
- border-radius: 50%;
3459
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
3460
- transition: transform var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3398
+ inset-block-start: 100%;
3399
+ inset-inline-start: 50%;
3400
+ border: calc(var(--_arrow-size) + 1px) solid transparent;
3401
+ border-block-start-color: var(--_border-color);
3402
+ transform: translateX(-50%);
3461
3403
  }
3462
- .toggle__input:checked ~ .toggle__track {
3463
- background: var(--_track-bg-checked);
3404
+ .popover--bottom::after {
3405
+ content: "";
3406
+ position: absolute;
3407
+ inset-block-end: 100%;
3408
+ inset-inline-start: 50%;
3409
+ border: var(--_arrow-size) solid transparent;
3410
+ border-block-end-color: var(--_bg);
3411
+ transform: translateX(-50%);
3464
3412
  }
3465
- .toggle__input:checked ~ .toggle__thumb {
3466
- transform: translateX(calc(var(--_track-width) - var(--_thumb-size) - var(--_thumb-offset) * 2));
3413
+ .popover--bottom::before {
3414
+ content: "";
3415
+ position: absolute;
3416
+ inset-block-end: 100%;
3417
+ inset-inline-start: 50%;
3418
+ border: calc(var(--_arrow-size) + 1px) solid transparent;
3419
+ border-block-end-color: var(--_border-color);
3420
+ transform: translateX(-50%);
3467
3421
  }
3468
- .toggle__input:focus-visible ~ .toggle__track {
3469
- outline: 2px solid var(--ui-color-focus, var(--ui-color-primary));
3470
- outline-offset: calc(0.5rem / 4);
3422
+ .popover--visible {
3423
+ opacity: 1;
3471
3424
  }
3472
- .toggle__input:disabled ~ .toggle__track,
3473
- .toggle__input:disabled ~ .toggle__thumb {
3474
- opacity: 0.5;
3475
- cursor: not-allowed;
3425
+ .popover--hidden {
3426
+ opacity: 0;
3427
+ pointer-events: none;
3476
3428
  }
3477
- .toggle:has(.toggle__input:disabled) {
3478
- cursor: not-allowed;
3429
+ .popover--animate {
3430
+ transition: opacity var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3479
3431
  }
3480
3432
  }
3481
3433
  @layer components.tokens {
@@ -3551,6 +3503,148 @@
3551
3503
  transition: opacity var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3552
3504
  }
3553
3505
  }
3506
+ @layer components.tokens {
3507
+ .code {
3508
+ --_font-size: var(--ui-code-font-size, var(--ui-font-size-sm, 0.875rem));
3509
+ --_bg: var(--ui-code-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
3510
+ --_padding-x: var(--ui-code-padding-x, var(--ui-space-1, 0.5rem));
3511
+ --_padding-y: var(--ui-code-padding-y, var(--ui-space-0, 0.25rem));
3512
+ --_radius: var(--ui-code-radius, var(--ui-radius-sm, 0.25rem));
3513
+ }
3514
+ .code--sm {
3515
+ --_font-size: var(--ui-font-size-xs, 0.75rem);
3516
+ }
3517
+ .code-block {
3518
+ --_font-size: var(--ui-code-font-size-block, var(--ui-font-size-sm, 0.875rem));
3519
+ --_bg: var(--ui-code-bg-block, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
3520
+ --_padding: var(--ui-code-padding-block, var(--ui-space-3, 1.5rem));
3521
+ --_radius: var(--ui-code-radius-block, var(--ui-radius-md, 0.5rem));
3522
+ --_border-color: var(--ui-code-border-color-block, var(--ui-color-border, hsl(220, 10%, 90%)));
3523
+ }
3524
+ }
3525
+ @layer components.styles {
3526
+ .code {
3527
+ padding: var(--_padding-y) var(--_padding-x);
3528
+ font-family: var(--ui-font-mono, Noto Sans Mono, ui-monospace, Cascadia Code, monospace);
3529
+ font-size: var(--_font-size);
3530
+ line-height: var(--ui-leading-tight-sm, 1rem);
3531
+ background: var(--_bg);
3532
+ border-radius: var(--_radius);
3533
+ }
3534
+ .code-block {
3535
+ display: block;
3536
+ padding: calc(var(--_padding) - var(--ui-border-width-sm, 0.0625rem));
3537
+ overflow-x: auto;
3538
+ font-family: var(--ui-font-mono, Noto Sans Mono, ui-monospace, Cascadia Code, monospace);
3539
+ font-size: var(--_font-size);
3540
+ line-height: var(--ui-leading-tight-sm, 1rem);
3541
+ white-space: pre;
3542
+ background: var(--_bg);
3543
+ border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3544
+ border-radius: var(--_radius);
3545
+ }
3546
+ .code-block code {
3547
+ padding: 0;
3548
+ font-size: inherit;
3549
+ background: none;
3550
+ }
3551
+ }
3552
+ @layer components.tokens {
3553
+ .heading {
3554
+ --_font-size: var(--ui-heading-font-size, var(--ui-font-size-xl, 1.5rem));
3555
+ --_line-height: var(--ui-heading-line-height, var(--ui-leading-xl, 2rem));
3556
+ --_weight: var(--ui-heading-weight, var(--ui-weight-bold, 700));
3557
+ --_color: var(--ui-heading-color, var(--ui-color-text, hsl(220, 10%, 10%)));
3558
+ }
3559
+ .heading--4xl {
3560
+ --_font-size: var(--ui-heading-font-size-4xl, var(--ui-font-size-4xl, 2.5rem));
3561
+ --_line-height: var(--ui-heading-line-height-4xl, var(--ui-leading-4xl, 3rem));
3562
+ }
3563
+ .heading--3xl {
3564
+ --_font-size: var(--ui-heading-font-size-3xl, var(--ui-font-size-3xl, 2rem));
3565
+ --_line-height: var(--ui-heading-line-height-3xl, var(--ui-leading-3xl, 2.5rem));
3566
+ }
3567
+ .heading--2xl {
3568
+ --_font-size: var(--ui-heading-font-size-2xl, var(--ui-font-size-2xl, 1.75rem));
3569
+ --_line-height: var(--ui-heading-line-height-2xl, var(--ui-leading-2xl, 2rem));
3570
+ }
3571
+ .heading--xl {
3572
+ --_font-size: var(--ui-heading-font-size-xl, var(--ui-font-size-xl, 1.5rem));
3573
+ --_line-height: var(--ui-heading-line-height-xl, var(--ui-leading-xl, 2rem));
3574
+ }
3575
+ .heading--lg {
3576
+ --_font-size: var(--ui-heading-font-size-lg, var(--ui-font-size-lg, 1.25rem));
3577
+ --_line-height: var(--ui-heading-line-height-lg, var(--ui-leading-lg, 2rem));
3578
+ }
3579
+ .heading--md {
3580
+ --_font-size: var(--ui-heading-font-size-md, var(--ui-font-size-md, 1rem));
3581
+ --_line-height: var(--ui-heading-line-height-md, var(--ui-leading-tight-md, 1.5rem));
3582
+ }
3583
+ .heading--sm {
3584
+ --_font-size: var(--ui-heading-font-size-sm, var(--ui-font-size-sm, 0.875rem));
3585
+ --_line-height: var(--ui-heading-line-height-sm, var(--ui-leading-tight-sm, 1rem));
3586
+ }
3587
+ }
3588
+ @layer components.styles {
3589
+ .heading {
3590
+ margin: 0;
3591
+ font-size: var(--_font-size);
3592
+ font-weight: var(--_weight);
3593
+ line-height: var(--_line-height);
3594
+ color: var(--_color);
3595
+ }
3596
+ }
3597
+ @layer components.tokens {
3598
+ .link {
3599
+ --_color: var(--ui-link-color, var(--ui-color-primary));
3600
+ --_color-hover: var(--ui-link-color-hover, var(--ui-color-primary-hover, color-mix(in srgb, var(--_color) 85%, black)));
3601
+ --_color-visited: var(--ui-link-color-visited, var(--_color));
3602
+ --_decoration: var(--ui-link-decoration, underline);
3603
+ --_decoration-hover: var(--ui-link-decoration-hover, underline);
3604
+ }
3605
+ .link--muted {
3606
+ --_color: var(--ui-link-color-muted, var(--ui-color-text-muted));
3607
+ --_color-hover: var(--ui-link-color-muted-hover, var(--ui-color-text));
3608
+ }
3609
+ .link--subtle {
3610
+ --_decoration: none;
3611
+ --_decoration-hover: underline;
3612
+ }
3613
+ }
3614
+ @layer components.styles {
3615
+ .link {
3616
+ text-decoration: var(--_decoration);
3617
+ color: var(--_color);
3618
+ cursor: pointer;
3619
+ transition: color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3620
+ text-underline-offset: calc(0.5rem / 4);
3621
+ }
3622
+ .link:hover {
3623
+ text-decoration: var(--_decoration-hover);
3624
+ color: var(--_color-hover);
3625
+ }
3626
+ .link:focus-visible {
3627
+ border-radius: calc(0.5rem / 4);
3628
+ outline: 2px solid var(--ui-color-focus, var(--ui-color-primary));
3629
+ outline-offset: calc(0.5rem / 4);
3630
+ }
3631
+ .link:visited {
3632
+ color: var(--_color-visited);
3633
+ }
3634
+ .link--disabled,
3635
+ .link[aria-disabled=true] {
3636
+ color: var(--ui-color-text-muted);
3637
+ opacity: 0.6;
3638
+ cursor: not-allowed;
3639
+ pointer-events: none;
3640
+ }
3641
+ .link--external::after {
3642
+ content: "↗";
3643
+ display: inline-block;
3644
+ margin-inline-start: calc(0.5rem / 4);
3645
+ font-size: 0.75em;
3646
+ }
3647
+ }
3554
3648
  /* 05. Utilities (high specificity, load last) */
3555
3649
  /* Spacing utilities - all values align to 8px grid */
3556
3650
  /* Uses logical properties for international/RTL support */
@@ -4402,7 +4496,6 @@
4402
4496
  }
4403
4497
  }
4404
4498
  /* 99. Debug tools (dev only) */
4405
- /* Debug grid overlay - add class="debug-grid" to body or any container */
4406
4499
  .debug-grid,
4407
4500
  .debug-grid-rows,
4408
4501
  .debug-baseline {
@@ -4410,7 +4503,7 @@
4410
4503
  }
4411
4504
 
4412
4505
  .debug-grid {
4413
- --debug-color: hsl(var(--ui-hue-primary) 80% 50% / 0.15);
4506
+ --debug-color: hsl(var(--ui-hue-primary, 220) 80% 50% / 0.15);
4414
4507
  }
4415
4508
 
4416
4509
  .debug-grid::after {
@@ -4428,10 +4521,9 @@
4428
4521
  background-position: 0 0;
4429
4522
  }
4430
4523
 
4431
- /* Stronger grid at row intervals (16px) */
4432
4524
  .debug-grid-rows {
4433
- --debug-color: hsl(var(--ui-hue-primary) 80% 50% / 0.1);
4434
- --debug-color-strong: hsl(var(--ui-hue-primary) 80% 50% / 0.25);
4525
+ --debug-color: hsl(var(--ui-hue-primary, 220) 80% 50% / 0.1);
4526
+ --debug-color-strong: hsl(var(--ui-hue-primary, 220) 80% 50% / 0.25);
4435
4527
  }
4436
4528
 
4437
4529
  .debug-grid-rows::after {
@@ -4449,9 +4541,8 @@
4449
4541
  background-position: 0 0;
4450
4542
  }
4451
4543
 
4452
- /* Baseline grid only (horizontal lines) */
4453
4544
  .debug-baseline {
4454
- --debug-color: hsl(var(--ui-hue-danger) 80% 50% / 0.2);
4545
+ --debug-color: hsl(var(--ui-hue-danger, 0) 80% 50% / 0.2);
4455
4546
  }
4456
4547
 
4457
4548
  .debug-baseline::after {
@@ -4468,7 +4559,6 @@
4468
4559
  background-size: 100% var(--unit);
4469
4560
  }
4470
4561
 
4471
- /* Element boundaries outline */
4472
4562
  .debug-outline * {
4473
4563
  outline: 1px solid hsla(0, 100%, 50%, 0.5);
4474
4564
  }