@teseor/css 1.2.0 → 1.2.2

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 (217) hide show
  1. package/dist/compiled.css +2013 -2017
  2. package/dist/index.css +2013 -2017
  3. package/package.json +1 -1
  4. package/src/00-config/tokens/shadows/index.scss +3 -3
  5. package/src/04-components/{button → actions/button}/button.visual.spec.ts +1 -1
  6. package/src/04-components/{button → actions/button}/index.scss +1 -1
  7. package/src/04-components/{button-group → actions/button-group}/button-group.visual.spec.ts +1 -1
  8. package/src/04-components/{button-group → actions/button-group}/index.scss +1 -1
  9. package/src/04-components/{avatar → data-display/avatar}/avatar.visual.spec.ts +1 -1
  10. package/src/04-components/{avatar → data-display/avatar}/index.scss +1 -1
  11. package/src/04-components/{badge → data-display/badge}/badge.visual.spec.ts +1 -1
  12. package/src/04-components/{badge → data-display/badge}/index.scss +1 -1
  13. package/src/04-components/{card → data-display/card}/card.visual.spec.ts +1 -1
  14. package/src/04-components/{card → data-display/card}/index.scss +1 -1
  15. package/src/04-components/{data-list → data-display/data-list}/data-list.visual.spec.ts +1 -1
  16. package/src/04-components/{data-list → data-display/data-list}/index.scss +1 -1
  17. package/src/04-components/{icon → data-display/icon}/icon.visual.spec.ts +1 -1
  18. package/src/04-components/{icon → data-display/icon}/index.scss +1 -1
  19. package/src/04-components/{status → data-display/status}/index.scss +1 -1
  20. package/src/04-components/{status → data-display/status}/status.visual.spec.ts +1 -1
  21. package/src/04-components/{table → data-display/table}/index.scss +1 -1
  22. package/src/04-components/{table → data-display/table}/table.visual.spec.ts +1 -1
  23. package/src/04-components/{tag → data-display/tag}/index.scss +1 -1
  24. package/src/04-components/{tag → data-display/tag}/tag.visual.spec.ts +1 -1
  25. package/src/04-components/{accordion → disclosure/accordion}/accordion.visual.spec.ts +1 -1
  26. package/src/04-components/{accordion → disclosure/accordion}/index.scss +1 -1
  27. package/src/04-components/disclosure/{disclosure.visual.spec.ts → disclosure/disclosure.visual.spec.ts} +1 -1
  28. package/src/04-components/disclosure/{index.scss → disclosure/index.scss} +1 -1
  29. package/src/04-components/{alert → feedback/alert}/alert.visual.spec.ts +1 -1
  30. package/src/04-components/{alert → feedback/alert}/index.scss +1 -1
  31. package/src/04-components/{progress → feedback/progress}/index.scss +1 -1
  32. package/src/04-components/{progress → feedback/progress}/progress.visual.spec.ts +1 -1
  33. package/src/04-components/{skeleton → feedback/skeleton}/index.scss +1 -1
  34. package/src/04-components/{skeleton → feedback/skeleton}/skeleton.visual.spec.ts +1 -1
  35. package/src/04-components/{spinner → feedback/spinner}/index.scss +1 -1
  36. package/src/04-components/{spinner → feedback/spinner}/spinner.visual.spec.ts +1 -1
  37. package/src/04-components/{toast → feedback/toast}/index.scss +1 -1
  38. package/src/04-components/{toast → feedback/toast}/toast.visual.spec.ts +1 -1
  39. package/src/04-components/{checkbox → forms/checkbox}/checkbox.visual.spec.ts +1 -1
  40. package/src/04-components/{checkbox → forms/checkbox}/index.scss +1 -1
  41. package/src/04-components/{field → forms/field}/field.visual.spec.ts +1 -1
  42. package/src/04-components/{field → forms/field}/index.scss +1 -1
  43. package/src/04-components/{form-error → forms/form-error}/form-error.visual.spec.ts +1 -1
  44. package/src/04-components/{form-error → forms/form-error}/index.scss +1 -1
  45. package/src/04-components/{form-helper → forms/form-helper}/form-helper.visual.spec.ts +1 -1
  46. package/src/04-components/{form-helper → forms/form-helper}/index.scss +1 -1
  47. package/src/04-components/{input → forms/input}/index.scss +1 -1
  48. package/src/04-components/{input → forms/input}/input.visual.spec.ts +1 -1
  49. package/src/04-components/{label → forms/label}/index.scss +1 -1
  50. package/src/04-components/{label → forms/label}/label.visual.spec.ts +1 -1
  51. package/src/04-components/{radio → forms/radio}/index.scss +1 -1
  52. package/src/04-components/{radio → forms/radio}/radio.visual.spec.ts +1 -1
  53. package/src/04-components/{select → forms/select}/index.scss +1 -1
  54. package/src/04-components/{select → forms/select}/select.visual.spec.ts +1 -1
  55. package/src/04-components/{textarea → forms/textarea}/index.scss +1 -1
  56. package/src/04-components/{textarea → forms/textarea}/textarea.visual.spec.ts +1 -1
  57. package/src/04-components/{toggle → forms/toggle}/index.scss +1 -1
  58. package/src/04-components/{toggle → forms/toggle}/toggle.visual.spec.ts +1 -1
  59. package/src/04-components/index.scss +42 -42
  60. package/src/04-components/{divider → layout/divider}/divider.visual.spec.ts +1 -1
  61. package/src/04-components/{divider → layout/divider}/index.scss +1 -1
  62. package/src/04-components/{breadcrumb → navigation/breadcrumb}/breadcrumb.visual.spec.ts +1 -1
  63. package/src/04-components/{breadcrumb → navigation/breadcrumb}/index.scss +1 -1
  64. package/src/04-components/{menu → navigation/menu}/index.scss +1 -1
  65. package/src/04-components/{menu → navigation/menu}/menu.visual.spec.ts +1 -1
  66. package/src/04-components/{nav → navigation/nav}/index.scss +1 -1
  67. package/src/04-components/{nav → navigation/nav}/nav.visual.spec.ts +1 -1
  68. package/src/04-components/{pagination → navigation/pagination}/index.scss +1 -1
  69. package/src/04-components/{pagination → navigation/pagination}/pagination.visual.spec.ts +1 -1
  70. package/src/04-components/{tabs → navigation/tabs}/index.scss +1 -1
  71. package/src/04-components/{tabs → navigation/tabs}/tabs.visual.spec.ts +1 -1
  72. package/src/04-components/{dialog → overlays/dialog}/dialog.visual.spec.ts +1 -1
  73. package/src/04-components/{dialog → overlays/dialog}/index.scss +1 -1
  74. package/src/04-components/{drawer → overlays/drawer}/drawer.visual.spec.ts +1 -1
  75. package/src/04-components/{drawer → overlays/drawer}/index.scss +1 -1
  76. package/src/04-components/{modal → overlays/modal}/index.scss +1 -1
  77. package/src/04-components/{modal → overlays/modal}/modal.visual.spec.ts +1 -1
  78. package/src/04-components/{overlay → overlays/overlay}/index.scss +1 -1
  79. package/src/04-components/{overlay → overlays/overlay}/overlay.visual.spec.ts +1 -1
  80. package/src/04-components/{popover → overlays/popover}/index.scss +1 -1
  81. package/src/04-components/{popover → overlays/popover}/popover.visual.spec.ts +1 -1
  82. package/src/04-components/{tooltip → overlays/tooltip}/index.scss +1 -1
  83. package/src/04-components/{tooltip → overlays/tooltip}/tooltip.visual.spec.ts +1 -1
  84. package/src/04-components/{code → typography/code}/code.visual.spec.ts +1 -1
  85. package/src/04-components/{code → typography/code}/index.scss +1 -1
  86. package/src/04-components/{heading → typography/heading}/heading.visual.spec.ts +1 -1
  87. package/src/04-components/{heading → typography/heading}/index.scss +1 -1
  88. package/src/04-components/{link → typography/link}/index.scss +1 -1
  89. package/src/04-components/{link → typography/link}/link.visual.spec.ts +1 -1
  90. package/src/99-debug/grid-overlay.scss +9 -8
  91. package/src/testing/sidebar-toggles.spec.ts +103 -0
  92. /package/src/04-components/{button → actions/button}/button-visual.png +0 -0
  93. /package/src/04-components/{button → actions/button}/button.api.json +0 -0
  94. /package/src/04-components/{button → actions/button}/button.docs.json +0 -0
  95. /package/src/04-components/{button-group → actions/button-group}/button-group-visual.png +0 -0
  96. /package/src/04-components/{button-group → actions/button-group}/button-group.api.json +0 -0
  97. /package/src/04-components/{button-group → actions/button-group}/button-group.docs.json +0 -0
  98. /package/src/04-components/{avatar → data-display/avatar}/avatar-visual.png +0 -0
  99. /package/src/04-components/{avatar → data-display/avatar}/avatar.api.json +0 -0
  100. /package/src/04-components/{avatar → data-display/avatar}/avatar.docs.json +0 -0
  101. /package/src/04-components/{badge → data-display/badge}/badge-visual.png +0 -0
  102. /package/src/04-components/{badge → data-display/badge}/badge.api.json +0 -0
  103. /package/src/04-components/{badge → data-display/badge}/badge.docs.json +0 -0
  104. /package/src/04-components/{card → data-display/card}/card-visual.png +0 -0
  105. /package/src/04-components/{card → data-display/card}/card.api.json +0 -0
  106. /package/src/04-components/{card → data-display/card}/card.docs.json +0 -0
  107. /package/src/04-components/{data-list → data-display/data-list}/data-list-visual.png +0 -0
  108. /package/src/04-components/{data-list → data-display/data-list}/data-list.api.json +0 -0
  109. /package/src/04-components/{data-list → data-display/data-list}/data-list.docs.json +0 -0
  110. /package/src/04-components/{icon → data-display/icon}/icon-visual.png +0 -0
  111. /package/src/04-components/{icon → data-display/icon}/icon.api.json +0 -0
  112. /package/src/04-components/{icon → data-display/icon}/icon.docs.json +0 -0
  113. /package/src/04-components/{status → data-display/status}/status-visual.png +0 -0
  114. /package/src/04-components/{status → data-display/status}/status.api.json +0 -0
  115. /package/src/04-components/{status → data-display/status}/status.docs.json +0 -0
  116. /package/src/04-components/{table → data-display/table}/table-visual.png +0 -0
  117. /package/src/04-components/{table → data-display/table}/table.api.json +0 -0
  118. /package/src/04-components/{table → data-display/table}/table.docs.json +0 -0
  119. /package/src/04-components/{tag → data-display/tag}/tag-visual.png +0 -0
  120. /package/src/04-components/{tag → data-display/tag}/tag.api.json +0 -0
  121. /package/src/04-components/{tag → data-display/tag}/tag.docs.json +0 -0
  122. /package/src/04-components/{accordion → disclosure/accordion}/accordion-visual.png +0 -0
  123. /package/src/04-components/{accordion → disclosure/accordion}/accordion.api.json +0 -0
  124. /package/src/04-components/{accordion → disclosure/accordion}/accordion.docs.json +0 -0
  125. /package/src/04-components/disclosure/{disclosure-visual.png → disclosure/disclosure-visual.png} +0 -0
  126. /package/src/04-components/disclosure/{disclosure.api.json → disclosure/disclosure.api.json} +0 -0
  127. /package/src/04-components/disclosure/{disclosure.docs.json → disclosure/disclosure.docs.json} +0 -0
  128. /package/src/04-components/{alert → feedback/alert}/alert-visual.png +0 -0
  129. /package/src/04-components/{alert → feedback/alert}/alert.api.json +0 -0
  130. /package/src/04-components/{alert → feedback/alert}/alert.docs.json +0 -0
  131. /package/src/04-components/{progress → feedback/progress}/progress-visual.png +0 -0
  132. /package/src/04-components/{progress → feedback/progress}/progress.api.json +0 -0
  133. /package/src/04-components/{progress → feedback/progress}/progress.docs.json +0 -0
  134. /package/src/04-components/{skeleton → feedback/skeleton}/skeleton-visual.png +0 -0
  135. /package/src/04-components/{skeleton → feedback/skeleton}/skeleton.api.json +0 -0
  136. /package/src/04-components/{skeleton → feedback/skeleton}/skeleton.docs.json +0 -0
  137. /package/src/04-components/{spinner → feedback/spinner}/spinner-visual.png +0 -0
  138. /package/src/04-components/{spinner → feedback/spinner}/spinner.api.json +0 -0
  139. /package/src/04-components/{spinner → feedback/spinner}/spinner.docs.json +0 -0
  140. /package/src/04-components/{toast → feedback/toast}/toast-visual.png +0 -0
  141. /package/src/04-components/{toast → feedback/toast}/toast.api.json +0 -0
  142. /package/src/04-components/{toast → feedback/toast}/toast.docs.json +0 -0
  143. /package/src/04-components/{checkbox → forms/checkbox}/checkbox-visual.png +0 -0
  144. /package/src/04-components/{checkbox → forms/checkbox}/checkbox.api.json +0 -0
  145. /package/src/04-components/{checkbox → forms/checkbox}/checkbox.docs.json +0 -0
  146. /package/src/04-components/{field → forms/field}/field-visual.png +0 -0
  147. /package/src/04-components/{field → forms/field}/field.api.json +0 -0
  148. /package/src/04-components/{field → forms/field}/field.docs.json +0 -0
  149. /package/src/04-components/{form-error → forms/form-error}/form-error-visual.png +0 -0
  150. /package/src/04-components/{form-error → forms/form-error}/form-error.api.json +0 -0
  151. /package/src/04-components/{form-error → forms/form-error}/form-error.docs.json +0 -0
  152. /package/src/04-components/{form-helper → forms/form-helper}/form-helper-visual.png +0 -0
  153. /package/src/04-components/{form-helper → forms/form-helper}/form-helper.api.json +0 -0
  154. /package/src/04-components/{form-helper → forms/form-helper}/form-helper.docs.json +0 -0
  155. /package/src/04-components/{input → forms/input}/input-visual.png +0 -0
  156. /package/src/04-components/{input → forms/input}/input.api.json +0 -0
  157. /package/src/04-components/{input → forms/input}/input.docs.json +0 -0
  158. /package/src/04-components/{label → forms/label}/label-visual.png +0 -0
  159. /package/src/04-components/{label → forms/label}/label.api.json +0 -0
  160. /package/src/04-components/{label → forms/label}/label.docs.json +0 -0
  161. /package/src/04-components/{radio → forms/radio}/radio-visual.png +0 -0
  162. /package/src/04-components/{radio → forms/radio}/radio.api.json +0 -0
  163. /package/src/04-components/{radio → forms/radio}/radio.docs.json +0 -0
  164. /package/src/04-components/{select → forms/select}/select-visual.png +0 -0
  165. /package/src/04-components/{select → forms/select}/select.api.json +0 -0
  166. /package/src/04-components/{select → forms/select}/select.docs.json +0 -0
  167. /package/src/04-components/{textarea → forms/textarea}/textarea-visual.png +0 -0
  168. /package/src/04-components/{textarea → forms/textarea}/textarea.api.json +0 -0
  169. /package/src/04-components/{textarea → forms/textarea}/textarea.docs.json +0 -0
  170. /package/src/04-components/{toggle → forms/toggle}/toggle-visual.png +0 -0
  171. /package/src/04-components/{toggle → forms/toggle}/toggle.api.json +0 -0
  172. /package/src/04-components/{toggle → forms/toggle}/toggle.docs.json +0 -0
  173. /package/src/04-components/{divider → layout/divider}/divider-visual.png +0 -0
  174. /package/src/04-components/{divider → layout/divider}/divider.api.json +0 -0
  175. /package/src/04-components/{divider → layout/divider}/divider.docs.json +0 -0
  176. /package/src/04-components/{breadcrumb → navigation/breadcrumb}/breadcrumb-visual.png +0 -0
  177. /package/src/04-components/{breadcrumb → navigation/breadcrumb}/breadcrumb.api.json +0 -0
  178. /package/src/04-components/{breadcrumb → navigation/breadcrumb}/breadcrumb.docs.json +0 -0
  179. /package/src/04-components/{menu → navigation/menu}/menu-visual.png +0 -0
  180. /package/src/04-components/{menu → navigation/menu}/menu.api.json +0 -0
  181. /package/src/04-components/{menu → navigation/menu}/menu.docs.json +0 -0
  182. /package/src/04-components/{nav → navigation/nav}/nav-visual.png +0 -0
  183. /package/src/04-components/{nav → navigation/nav}/nav.api.json +0 -0
  184. /package/src/04-components/{nav → navigation/nav}/nav.docs.json +0 -0
  185. /package/src/04-components/{pagination → navigation/pagination}/pagination-visual.png +0 -0
  186. /package/src/04-components/{pagination → navigation/pagination}/pagination.api.json +0 -0
  187. /package/src/04-components/{pagination → navigation/pagination}/pagination.docs.json +0 -0
  188. /package/src/04-components/{tabs → navigation/tabs}/tabs-visual.png +0 -0
  189. /package/src/04-components/{tabs → navigation/tabs}/tabs.api.json +0 -0
  190. /package/src/04-components/{tabs → navigation/tabs}/tabs.docs.json +0 -0
  191. /package/src/04-components/{dialog → overlays/dialog}/dialog-visual.png +0 -0
  192. /package/src/04-components/{dialog → overlays/dialog}/dialog.api.json +0 -0
  193. /package/src/04-components/{dialog → overlays/dialog}/dialog.docs.json +0 -0
  194. /package/src/04-components/{drawer → overlays/drawer}/drawer-visual.png +0 -0
  195. /package/src/04-components/{drawer → overlays/drawer}/drawer.api.json +0 -0
  196. /package/src/04-components/{drawer → overlays/drawer}/drawer.docs.json +0 -0
  197. /package/src/04-components/{modal → overlays/modal}/modal-visual.png +0 -0
  198. /package/src/04-components/{modal → overlays/modal}/modal.api.json +0 -0
  199. /package/src/04-components/{modal → overlays/modal}/modal.docs.json +0 -0
  200. /package/src/04-components/{overlay → overlays/overlay}/overlay-visual.png +0 -0
  201. /package/src/04-components/{overlay → overlays/overlay}/overlay.api.json +0 -0
  202. /package/src/04-components/{overlay → overlays/overlay}/overlay.docs.json +0 -0
  203. /package/src/04-components/{popover → overlays/popover}/popover-visual.png +0 -0
  204. /package/src/04-components/{popover → overlays/popover}/popover.api.json +0 -0
  205. /package/src/04-components/{popover → overlays/popover}/popover.docs.json +0 -0
  206. /package/src/04-components/{tooltip → overlays/tooltip}/tooltip-visual.png +0 -0
  207. /package/src/04-components/{tooltip → overlays/tooltip}/tooltip.api.json +0 -0
  208. /package/src/04-components/{tooltip → overlays/tooltip}/tooltip.docs.json +0 -0
  209. /package/src/04-components/{code → typography/code}/code-visual.png +0 -0
  210. /package/src/04-components/{code → typography/code}/code.api.json +0 -0
  211. /package/src/04-components/{code → typography/code}/code.docs.json +0 -0
  212. /package/src/04-components/{heading → typography/heading}/heading-visual.png +0 -0
  213. /package/src/04-components/{heading → typography/heading}/heading.api.json +0 -0
  214. /package/src/04-components/{heading → typography/heading}/heading.docs.json +0 -0
  215. /package/src/04-components/{link → typography/link}/link-visual.png +0 -0
  216. /package/src/04-components/{link → typography/link}/link.api.json +0 -0
  217. /package/src/04-components/{link → typography/link}/link.docs.json +0 -0
package/dist/compiled.css CHANGED
@@ -140,9 +140,9 @@
140
140
  }
141
141
 
142
142
  :root {
143
- --shadow-sm: 0 1px 2px hsl(var(--ui-hue-primary) 10% 20% / 0.05);
144
- --shadow-md: 0 4px 6px hsl(var(--ui-hue-primary) 10% 20% / 0.1);
145
- --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);
146
146
  }
147
147
 
148
148
  @layer tokens {
@@ -778,166 +778,255 @@
778
778
  }
779
779
  /* 04. Components */
780
780
  @layer components.tokens {
781
- .accordion {
782
- --_border-color: var(--ui-accordion-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
783
- --_border-width: var(--ui-accordion-border-width, 1px);
784
- --_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%)));
785
791
  }
786
- }
787
- @layer components.styles {
788
- .accordion {
789
- border-radius: var(--_radius);
790
- outline: var(--_border-width) solid var(--_border-color);
791
- outline-offset: calc(var(--_border-width) * -1);
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));
792
796
  }
793
- .accordion > .disclosure {
794
- --_border-width: 0;
795
- border: none;
796
- border-radius: 0;
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));
797
801
  }
798
- .accordion > .disclosure + .disclosure {
799
- border-block-start: 1px solid var(--_border-color);
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));
800
807
  }
801
- .accordion > .disclosure:first-child .disclosure__trigger {
802
- border-start-start-radius: var(--_radius);
803
- border-start-end-radius: var(--_radius);
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%));
804
812
  }
805
- .accordion > .disclosure:last-child .disclosure__trigger {
806
- border-end-start-radius: var(--_radius);
807
- border-end-end-radius: var(--_radius);
813
+ .button--ghost {
814
+ --_bg: transparent;
815
+ --_bg-hover: color-mix(in oklch, var(--_accent) 10%, transparent);
816
+ --_text: var(--_accent);
808
817
  }
809
- .accordion > .disclosure:last-child .disclosure__content {
810
- border-end-start-radius: var(--_radius);
811
- border-end-end-radius: var(--_radius);
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;
812
824
  }
813
- .accordion--borderless {
814
- border: none;
825
+ .button--danger {
826
+ --_accent: var(--ui-color-danger, oklch(60% 0.22 25deg));
815
827
  }
816
- .accordion--borderless > .disclosure + .disclosure {
817
- border-block-start: none;
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;
818
836
  }
819
- .accordion--separated {
820
- display: flex;
821
- flex-direction: column;
822
- gap: calc(0.5rem * 1);
823
- border: none;
837
+ .button--icon {
838
+ --_padding-x: 0;
824
839
  }
825
- .accordion--separated > .disclosure {
826
- border: 1px solid var(--_border-color);
827
- border-radius: var(--_radius);
840
+ .button--radius-none {
841
+ --_radius: 0;
828
842
  }
829
- .accordion--separated > .disclosure + .disclosure {
830
- border-block-start: 1px solid var(--_border-color);
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;
831
851
  }
832
852
  }
833
- @layer components.tokens {
834
- .alert {
835
- --_accent: var(--ui-alert-accent, var(--ui-color-border, hsl(220, 10%, 90%)));
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: color-mix(in oklch, var(--_accent) 8%, white);
841
- --_border-color: var(--_accent);
842
- --_color: var(--ui-alert-color, var(--ui-color-text, hsl(220, 10%, 10%)));
843
- --_icon-color: var(--_accent);
853
+ @layer components.styles {
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);
871
+ border-radius: var(--_radius);
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);
844
874
  }
845
- .alert--info {
846
- --_accent: var(--ui-color-primary, oklch(55% 0.22 250deg));
875
+ .button:hover, .button--hover {
876
+ color: var(--_text-hover, var(--_text));
877
+ background: var(--_bg-hover);
847
878
  }
848
- .alert--success {
849
- --_accent: var(--ui-color-success, oklch(60% 0.18 145deg));
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);
850
882
  }
851
- .alert--warning {
852
- --_accent: var(--ui-color-warning, oklch(75% 0.18 70deg));
883
+ .button:active, .button--active {
884
+ transform: scale(0.98);
853
885
  }
854
- .alert--danger {
855
- --_accent: var(--ui-color-danger, oklch(60% 0.22 25deg));
886
+ .button:disabled {
887
+ opacity: 0.5;
888
+ cursor: not-allowed;
856
889
  }
857
- }
858
- @layer components.styles {
859
- .alert {
860
- display: flex;
861
- align-items: flex-start;
862
- gap: var(--_gap);
863
- padding: calc(var(--_padding) - var(--_border-width));
864
- padding-inline: var(--_padding);
865
- color: var(--_color);
890
+ .button:disabled:hover {
866
891
  background: var(--_bg);
867
- border: var(--_border-width) solid var(--_border-color);
868
- border-radius: var(--_radius);
869
- border-inline-start-width: calc(0.5rem * 0.5);
892
+ transform: none;
870
893
  }
871
- .alert__icon {
872
- flex-shrink: 0;
873
- color: var(--_icon-color);
894
+ .button--icon {
895
+ inline-size: var(--_height);
874
896
  }
875
- .alert__content {
876
- flex: 1;
877
- min-inline-size: 0;
897
+ .button--block {
898
+ inline-size: 100%;
878
899
  }
879
- .alert__title {
880
- margin: 0;
881
- font-weight: var(--ui-weight-medium, 500);
882
- line-height: var(--ui-row-1, 1rem);
900
+ .button--link {
901
+ text-decoration: underline;
902
+ text-underline-offset: var(--ui-space-quarter);
883
903
  }
884
- .alert__description {
885
- margin: 0;
886
- margin-block-start: calc(0.5rem * 1);
887
- font-size: var(--ui-font-size-sm, 0.875rem);
888
- line-height: var(--ui-row-1, 1rem);
889
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
904
+ .button--link:hover {
905
+ text-decoration-thickness: var(--ui-space-quarter);
890
906
  }
891
- .alert__close {
907
+ .button__icon {
892
908
  flex-shrink: 0;
893
- align-self: flex-start;
894
- padding: 0;
895
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
896
- background: none;
897
- border: none;
898
- cursor: pointer;
899
- }
900
- .alert__close:hover {
901
- color: var(--ui-color-text, hsl(220, 10%, 10%));
909
+ block-size: 1em;
910
+ inline-size: 1em;
902
911
  }
903
- }
904
- @layer components.tokens {
905
- .avatar {
906
- --_size: var(--ui-avatar-size, calc(0.5rem * 5));
907
- --_bg: var(--ui-avatar-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
908
- --_color: var(--ui-avatar-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
909
- --_font-size: var(--ui-avatar-font-size, var(--ui-font-size-sm, 0.875rem));
910
- --_radius: var(--ui-avatar-radius, 50%);
912
+ .button__icon--start {
913
+ order: -1;
911
914
  }
912
- .avatar--xs {
913
- --_size: var(--ui-avatar-size-xs, calc(0.5rem * 3));
914
- --_font-size: var(--ui-avatar-font-size-xs, var(--ui-font-size-xs, 0.75rem));
915
+ .button__icon--end {
916
+ order: 1;
915
917
  }
916
- .avatar--sm {
917
- --_size: var(--ui-avatar-size-sm, calc(0.5rem * 4));
918
- --_font-size: var(--ui-avatar-font-size-sm, var(--ui-font-size-xs, 0.75rem));
918
+ .button--loading {
919
+ position: relative;
920
+ opacity: 0.7;
921
+ pointer-events: none;
919
922
  }
920
- .avatar--lg {
921
- --_size: var(--ui-avatar-size-lg, calc(0.5rem * 6));
922
- --_font-size: var(--ui-avatar-font-size-lg, var(--ui-font-size-md, 1rem));
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;
923
932
  }
924
- .avatar--xl {
925
- --_size: var(--ui-avatar-size-xl, calc(0.5rem * 8));
926
- --_font-size: var(--ui-avatar-font-size-xl, var(--ui-font-size-lg, 1.25rem));
933
+ @keyframes button-spin {
934
+ to {
935
+ transform: rotate(360deg);
936
+ }
927
937
  }
928
- .avatar--square {
929
- --_radius: var(--ui-avatar-radius-square, var(--ui-radius-md, 0.5rem));
938
+ }
939
+ @layer components.tokens {
940
+ .button-group {
941
+ --_radius: var(--ui-button-group-radius, var(--ui-radius-md, calc(0.5rem / 2)));
930
942
  }
931
943
  }
932
944
  @layer components.styles {
933
- .avatar {
945
+ .button-group {
934
946
  display: inline-flex;
935
- flex-shrink: 0;
936
- align-items: center;
937
- justify-content: center;
938
- position: relative;
939
- block-size: var(--_size);
940
- inline-size: var(--_size);
947
+ }
948
+ .button-group > .button:not(:first-child, :last-child) {
949
+ border-radius: 0;
950
+ }
951
+ .button-group > .button:first-child:not(:last-child) {
952
+ border-start-end-radius: 0;
953
+ border-end-end-radius: 0;
954
+ }
955
+ .button-group > .button:last-child:not(:first-child) {
956
+ border-start-start-radius: 0;
957
+ border-end-start-radius: 0;
958
+ }
959
+ .button-group > .button + .button {
960
+ margin-inline-start: calc(0.5rem / -8);
961
+ }
962
+ .button-group > .button:focus-visible {
963
+ z-index: 1;
964
+ }
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;
991
+ }
992
+ }
993
+ @layer components.tokens {
994
+ .avatar {
995
+ --_size: var(--ui-avatar-size, calc(0.5rem * 5));
996
+ --_bg: var(--ui-avatar-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
997
+ --_color: var(--ui-avatar-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
998
+ --_font-size: var(--ui-avatar-font-size, var(--ui-font-size-sm, 0.875rem));
999
+ --_radius: var(--ui-avatar-radius, 50%);
1000
+ }
1001
+ .avatar--xs {
1002
+ --_size: var(--ui-avatar-size-xs, calc(0.5rem * 3));
1003
+ --_font-size: var(--ui-avatar-font-size-xs, var(--ui-font-size-xs, 0.75rem));
1004
+ }
1005
+ .avatar--sm {
1006
+ --_size: var(--ui-avatar-size-sm, calc(0.5rem * 4));
1007
+ --_font-size: var(--ui-avatar-font-size-sm, var(--ui-font-size-xs, 0.75rem));
1008
+ }
1009
+ .avatar--lg {
1010
+ --_size: var(--ui-avatar-size-lg, calc(0.5rem * 6));
1011
+ --_font-size: var(--ui-avatar-font-size-lg, var(--ui-font-size-md, 1rem));
1012
+ }
1013
+ .avatar--xl {
1014
+ --_size: var(--ui-avatar-size-xl, calc(0.5rem * 8));
1015
+ --_font-size: var(--ui-avatar-font-size-xl, var(--ui-font-size-lg, 1.25rem));
1016
+ }
1017
+ .avatar--square {
1018
+ --_radius: var(--ui-avatar-radius-square, var(--ui-radius-md, 0.5rem));
1019
+ }
1020
+ }
1021
+ @layer components.styles {
1022
+ .avatar {
1023
+ display: inline-flex;
1024
+ flex-shrink: 0;
1025
+ align-items: center;
1026
+ justify-content: center;
1027
+ position: relative;
1028
+ block-size: var(--_size);
1029
+ inline-size: var(--_size);
941
1030
  overflow: hidden;
942
1031
  font-size: var(--_font-size);
943
1032
  font-weight: var(--ui-weight-medium, 500);
@@ -1026,589 +1115,436 @@
1026
1115
  }
1027
1116
  }
1028
1117
  @layer components.tokens {
1029
- .breadcrumb {
1030
- --_height: var(--ui-breadcrumb-height, var(--ui-row-1, 1rem));
1031
- --_gap: var(--ui-breadcrumb-gap, calc(0.5rem * 1));
1032
- --_separator-color: var(--ui-breadcrumb-separator-color, var(--ui-color-text-muted));
1033
- --_link-color: var(--ui-breadcrumb-link-color, var(--ui-color-text-muted));
1034
- --_current-color: var(--ui-breadcrumb-current-color, var(--ui-color-text));
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));
1124
+ }
1125
+ .card--subtle {
1126
+ --_bg: var(--ui-card-bg-subtle, var(--ui-color-bg-subtle));
1127
+ }
1128
+ .card--muted {
1129
+ --_bg: var(--ui-card-bg-muted, var(--ui-color-bg-muted));
1130
+ }
1131
+ .card--sm {
1132
+ --_padding: var(--ui-card-padding-sm, var(--ui-space-2));
1133
+ }
1134
+ .card--lg {
1135
+ --_padding: var(--ui-card-padding-lg, var(--ui-space-6));
1136
+ }
1137
+ .card--flush {
1138
+ --_padding: 0;
1139
+ --_border-width: 0;
1035
1140
  }
1036
1141
  }
1037
1142
  @layer components.styles {
1038
- .breadcrumb {
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);
1149
+ }
1150
+ }
1151
+ @layer components.tokens {
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%)));
1157
+ }
1158
+ }
1159
+ @layer components.styles {
1160
+ .data-list {
1039
1161
  display: flex;
1040
- flex-wrap: wrap;
1041
- align-items: center;
1162
+ flex-direction: column;
1042
1163
  gap: var(--_gap);
1043
- block-size: var(--_height);
1044
- padding: 0;
1045
1164
  margin: 0;
1046
- font-size: var(--ui-font-size-sm, 0.875rem);
1047
- line-height: 1;
1048
- list-style: none;
1165
+ line-height: var(--ui-row-1, 1rem);
1049
1166
  }
1050
- .breadcrumb__item {
1167
+ .data-list__item {
1051
1168
  display: flex;
1052
- align-items: center;
1053
- gap: var(--_gap);
1054
- block-size: var(--_height);
1169
+ flex-direction: column;
1170
+ gap: var(--_item-gap);
1055
1171
  }
1056
- .breadcrumb__item:not(:last-child)::after {
1057
- content: var(--ui-breadcrumb-separator, "/");
1058
- color: var(--_separator-color);
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);
1059
1177
  }
1060
- .breadcrumb__link {
1061
- text-decoration: none;
1062
- color: var(--_link-color);
1063
- transition: color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
1178
+ .data-list__value {
1179
+ margin: 0;
1180
+ line-height: var(--ui-row-1, 1rem);
1181
+ color: var(--_value-color);
1064
1182
  }
1065
- .breadcrumb__link:hover {
1066
- text-decoration: underline;
1067
- color: var(--ui-color-primary);
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);
1068
1188
  }
1069
- .breadcrumb__item:last-child .breadcrumb__link,
1070
- .breadcrumb__current {
1071
- color: var(--_current-color);
1072
- pointer-events: none;
1189
+ .data-list--horizontal .data-list__label {
1190
+ flex-shrink: 0;
1073
1191
  }
1074
- .breadcrumb__item--hidden {
1075
- display: none;
1192
+ .data-list--horizontal .data-list__value {
1193
+ text-align: end;
1076
1194
  }
1077
- .breadcrumb__ellipsis {
1078
- color: var(--_separator-color);
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%));
1198
+ }
1199
+ .data-list--divided .data-list__item:last-child {
1200
+ padding-block-end: 0;
1201
+ border-block-end: none;
1202
+ }
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);
1207
+ }
1208
+ .data-list--sm {
1209
+ --_gap: calc(0.5rem * 1);
1210
+ --_item-gap: 0;
1211
+ font-size: var(--ui-font-size-sm, 0.875rem);
1212
+ }
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);
1079
1217
  }
1080
1218
  }
1081
1219
  @layer components.tokens {
1082
- .button {
1083
- --_accent: var(--ui-button-accent, var(--ui-color-primary, oklch(55% 0.22 250deg)));
1084
- --_height: var(--ui-button-height, var(--ui-row-2, 2rem));
1085
- --_padding-x: var(--ui-button-padding-x, var(--ui-space-2, 1rem));
1086
- --_font-size: var(--ui-button-font-size, var(--ui-font-size-sm, 0.875rem));
1087
- --_font-weight: var(--ui-button-font-weight, var(--ui-weight-medium, 500));
1088
- --_radius: var(--ui-button-radius, var(--ui-radius-md, 0.5rem));
1089
- --_bg: var(--_accent);
1090
- --_bg-hover: color-mix(in oklch, var(--_accent) 80%, black);
1091
- --_text: var(--ui-button-text, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1220
+ .icon {
1221
+ --_size: var(--ui-icon-size, var(--ui-ctx-size, 1rem));
1222
+ --_stroke: var(--ui-icon-stroke, 2);
1092
1223
  }
1093
- .button--sm {
1094
- --ui-ctx-size: var(--ui-size-sm, 0.75rem);
1095
- --_height: var(--ui-button-height-sm, calc(var(--row, 1rem) * 1.5));
1096
- --_font-size: var(--ui-button-font-size-sm, var(--ui-font-size-xs, 0.75rem));
1224
+ .icon--xs {
1225
+ --_size: var(--ui-icon-size-xs, var(--ui-size-xs, 0.5rem));
1097
1226
  }
1098
- .button--md {
1099
- --ui-ctx-size: var(--ui-size-md, 1rem);
1100
- --_height: var(--ui-button-height-md, var(--ui-row-2, 2rem));
1101
- --_font-size: var(--ui-button-font-size-md, var(--ui-font-size-sm, 0.875rem));
1227
+ .icon--sm {
1228
+ --_size: var(--ui-icon-size-sm, var(--ui-size-sm, 0.75rem));
1102
1229
  }
1103
- .button--lg {
1104
- --ui-ctx-size: var(--ui-size-lg, 1.25rem);
1105
- --_height: var(--ui-button-height-lg, calc(var(--row, 1rem) * 2.5));
1106
- --_padding-x: var(--ui-button-padding-x-lg, var(--ui-space-3, 1.5rem));
1107
- --_font-size: var(--ui-button-font-size-lg, var(--ui-font-size-md, 1rem));
1230
+ .icon--md {
1231
+ --_size: var(--ui-icon-size-md, var(--ui-size-md, 1rem));
1108
1232
  }
1109
- .button--secondary {
1110
- --_bg: var(--ui-color-bg-muted, hsl(220, 10%, 90%));
1111
- --_bg-hover: var(--ui-color-border-strong, hsl(220, 10%, 80%));
1112
- --_text: var(--ui-color-text, hsl(220, 10%, 10%));
1233
+ .icon--lg {
1234
+ --_size: var(--ui-icon-size-lg, var(--ui-size-lg, 1.25rem));
1113
1235
  }
1114
- .button--ghost {
1115
- --_bg: transparent;
1116
- --_bg-hover: color-mix(in oklch, var(--_accent) 10%, transparent);
1117
- --_text: var(--_accent);
1236
+ .icon--xl {
1237
+ --_size: var(--ui-icon-size-xl, var(--ui-size-xl, 1.5rem));
1118
1238
  }
1119
- .button--outline {
1120
- --_bg: transparent;
1121
- --_bg-hover: var(--_accent);
1122
- --_text: var(--_accent);
1123
- --_text-hover: var(--ui-color-text-inverse, hsl(220, 10%, 98%));
1124
- --_border: var(--ui-border-width-sm, 0.0625rem) solid currentColor;
1239
+ .icon--stroke-thin {
1240
+ --_stroke: var(--ui-icon-stroke-thin, 1);
1125
1241
  }
1126
- .button--danger {
1127
- --_accent: var(--ui-color-danger, oklch(60% 0.22 25deg));
1128
- }
1129
- .button--link {
1130
- --_bg: transparent;
1131
- --_bg-hover: transparent;
1132
- --_text: var(--_accent);
1133
- --_text-hover: color-mix(in oklch, var(--_accent) 70%, black);
1134
- --_height: auto;
1135
- --_padding-x: 0;
1136
- --_radius: 0;
1137
- }
1138
- .button--icon {
1139
- --_padding-x: 0;
1140
- }
1141
- .button--radius-none {
1142
- --_radius: 0;
1143
- }
1144
- .button--radius-sm {
1145
- --_radius: var(--ui-radius-sm, 0.25rem);
1146
- }
1147
- .button--radius-lg {
1148
- --_radius: var(--ui-radius-lg, 1rem);
1149
- }
1150
- .button--radius-full {
1151
- --_radius: 624.9375rem;
1242
+ .icon--stroke-thick {
1243
+ --_stroke: var(--ui-icon-stroke-thick, 2.5);
1152
1244
  }
1153
1245
  }
1154
1246
  @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);
1247
+ .icon {
1248
+ display: inline-block;
1249
+ flex-shrink: 0;
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;
1175
1259
  }
1176
- .button:hover, .button--hover {
1177
- color: var(--_text-hover, var(--_text));
1178
- background: var(--_bg-hover);
1260
+ .icon--filled {
1261
+ fill: currentcolor;
1262
+ stroke: none;
1179
1263
  }
1180
- .button:focus-visible, .button--focus {
1181
- outline: var(--ui-border-width-md, 0.125rem) solid var(--ui-color-focus, oklch(75% 0.15 250deg));
1182
- outline-offset: var(--ui-border-width-md, 0.125rem);
1264
+ .icon--spin {
1265
+ animation: icon-spin 1s linear infinite;
1183
1266
  }
1184
- .button:active, .button--active {
1185
- transform: scale(0.98);
1267
+ @keyframes icon-spin {
1268
+ to {
1269
+ transform: rotate(360deg);
1270
+ }
1186
1271
  }
1187
- .button:disabled {
1188
- opacity: 0.5;
1189
- cursor: not-allowed;
1272
+ }
1273
+ @layer components.tokens {
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));
1190
1278
  }
1191
- .button:disabled:hover {
1192
- background: var(--_bg);
1193
- transform: none;
1279
+ .status--success {
1280
+ --_color: var(--ui-color-success);
1194
1281
  }
1195
- .button--icon {
1196
- inline-size: var(--_height);
1282
+ .status--warning {
1283
+ --_color: var(--ui-color-warning);
1197
1284
  }
1198
- .button--block {
1199
- inline-size: 100%;
1285
+ .status--danger {
1286
+ --_color: var(--ui-color-danger);
1200
1287
  }
1201
- .button--link {
1202
- text-decoration: underline;
1203
- text-underline-offset: var(--ui-space-quarter);
1288
+ .status--info {
1289
+ --_color: var(--ui-color-primary);
1204
1290
  }
1205
- .button--link:hover {
1206
- text-decoration-thickness: var(--ui-space-quarter);
1291
+ }
1292
+ @layer components.styles {
1293
+ .status {
1294
+ display: inline-flex;
1295
+ align-items: center;
1296
+ gap: var(--_gap);
1207
1297
  }
1208
- .button__icon {
1298
+ .status__dot {
1209
1299
  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;
1300
+ block-size: var(--_size);
1301
+ inline-size: var(--_size);
1302
+ background: var(--_color);
1303
+ border-radius: 50%;
1218
1304
  }
1219
- .button--loading {
1305
+ .status--pulse .status__dot {
1220
1306
  position: relative;
1221
- opacity: 0.7;
1222
- pointer-events: none;
1223
1307
  }
1224
- .button--loading::after {
1308
+ .status--pulse .status__dot::before {
1225
1309
  content: "";
1226
1310
  position: absolute;
1227
- block-size: 1em;
1228
- inline-size: 1em;
1229
- border: 2px solid currentcolor;
1311
+ inset: 0;
1312
+ background: var(--_color);
1230
1313
  border-radius: 50%;
1231
- animation: button-spin 0.6s linear infinite;
1232
- border-inline-end-color: transparent;
1314
+ animation: status-pulse 2s infinite;
1233
1315
  }
1234
- @keyframes button-spin {
1235
- to {
1236
- transform: rotate(360deg);
1316
+ @keyframes status-pulse {
1317
+ 0% {
1318
+ opacity: 1;
1319
+ transform: scale(1);
1320
+ }
1321
+ 100% {
1322
+ opacity: 0;
1323
+ transform: scale(2.5);
1237
1324
  }
1238
1325
  }
1326
+ .status--sm {
1327
+ --_size: calc(0.5rem * 0.75);
1328
+ --_gap: calc(0.5rem * 0.75);
1329
+ }
1330
+ .status--lg {
1331
+ --_size: calc(0.5rem * 1.5);
1332
+ --_gap: calc(0.5rem * 1.5);
1333
+ }
1239
1334
  }
1240
1335
  @layer components.tokens {
1241
- .button-group {
1242
- --_radius: var(--ui-button-group-radius, var(--ui-radius-md, calc(0.5rem / 2)));
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));
1342
+ }
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);
1243
1347
  }
1244
1348
  }
1245
1349
  @layer components.styles {
1246
- .button-group {
1247
- display: inline-flex;
1248
- }
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;
1350
+ .table {
1351
+ inline-size: 100%;
1352
+ font-size: var(--_font-size);
1353
+ border-collapse: separate;
1354
+ border-spacing: 0;
1259
1355
  }
1260
- .button-group > .button + .button {
1261
- margin-inline-start: calc(0.5rem / -8);
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);
1262
1364
  }
1263
- .button-group > .button:focus-visible {
1264
- z-index: 1;
1365
+ .table th {
1366
+ font-weight: var(--ui-weight-medium, 500);
1367
+ background: var(--_header-bg);
1265
1368
  }
1266
- .button-group--vertical {
1267
- flex-direction: column;
1369
+ .table--striped tbody tr:nth-child(odd) {
1370
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
1268
1371
  }
1269
- .button-group--vertical > .button:not(:first-child, :last-child) {
1270
- border-radius: 0;
1372
+ .table--striped th {
1373
+ background: var(--ui-color-bg-muted, hsl(220, 10%, 90%));
1271
1374
  }
1272
- .button-group--vertical > .button:first-child:not(:last-child) {
1273
- border-end-start-radius: 0;
1274
- border-end-end-radius: 0;
1375
+ }
1376
+ @layer components.tokens {
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%)));
1275
1385
  }
1276
- .button-group--vertical > .button:last-child:not(:first-child) {
1277
- border-start-start-radius: 0;
1278
- border-start-end-radius: 0;
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));
1279
1390
  }
1280
- .button-group--vertical > .button + .button {
1281
- margin-block-start: calc(0.5rem / -8);
1282
- margin-inline-start: 0;
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%)));
1283
1394
  }
1284
- .button-group--attached > .button {
1285
- border-inline-end-width: 0;
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%)));
1286
1398
  }
1287
- .button-group--attached > .button:last-child {
1288
- border-inline-end-width: 1px;
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%)));
1289
1402
  }
1290
- .button-group--attached > .button + .button {
1291
- margin-inline-start: 0;
1292
- }
1293
- }
1294
- @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));
1301
- }
1302
- .card--subtle {
1303
- --_bg: var(--ui-card-bg-subtle, var(--ui-color-bg-subtle));
1304
- }
1305
- .card--muted {
1306
- --_bg: var(--ui-card-bg-muted, var(--ui-color-bg-muted));
1307
- }
1308
- .card--sm {
1309
- --_padding: var(--ui-card-padding-sm, var(--ui-space-2));
1310
- }
1311
- .card--lg {
1312
- --_padding: var(--ui-card-padding-lg, var(--ui-space-6));
1313
- }
1314
- .card--flush {
1315
- --_padding: 0;
1316
- --_border-width: 0;
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%)));
1317
1406
  }
1318
1407
  }
1319
1408
  @layer components.styles {
1320
- .card {
1321
- border: var(--_border-width) solid var(--_border-color);
1322
- border-radius: var(--_radius);
1409
+ .tag {
1410
+ display: inline-flex;
1411
+ align-items: center;
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);
1323
1420
  background: var(--_bg);
1324
- padding: calc(var(--_padding) - var(--_border-width));
1325
- line-height: var(--ui-row-1);
1326
- }
1327
- }
1328
- @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, oklch(55% 0.22 250deg)));
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, oklch(55% 0.22 250deg)));
1336
- --_check-color: var(--ui-checkbox-check-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
1337
- }
1338
- .checkbox--lg {
1339
- --_size: var(--ui-checkbox-size-lg, calc(0.5rem * 3));
1421
+ border-radius: var(--_radius);
1340
1422
  }
1341
- .checkbox--error {
1342
- --_border-color: var(--ui-checkbox-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
1343
- --_border-color-focus: var(--ui-checkbox-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
1423
+ .tag:disabled, .tag[aria-disabled=true] {
1424
+ opacity: 0.5;
1425
+ cursor: not-allowed;
1344
1426
  }
1345
- }
1346
- @layer components.styles {
1347
- .checkbox {
1427
+ .tag__remove {
1348
1428
  display: inline-flex;
1349
1429
  flex-shrink: 0;
1350
1430
  align-items: center;
1351
1431
  justify-content: center;
1352
- block-size: var(--_size);
1353
- inline-size: var(--_size);
1354
- margin: 0;
1355
- vertical-align: middle;
1356
- background: var(--_bg);
1357
- border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
1358
- border-radius: var(--_radius);
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;
1359
1438
  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
1439
  }
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);
1440
+ .tag__remove:hover {
1441
+ opacity: 1;
1371
1442
  }
1372
- .checkbox:hover:not(:disabled) {
1373
- border-color: var(--_border-color-focus);
1443
+ .tag-group {
1444
+ display: flex;
1445
+ flex-wrap: wrap;
1446
+ gap: calc(0.5rem * 0.5);
1374
1447
  }
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, oklch(75% 0.15 250deg));
1448
+ }
1449
+ @layer components.tokens {
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)));
1379
1454
  }
1380
- .checkbox:checked {
1381
- background: var(--_bg-checked);
1382
- border-color: var(--_bg-checked);
1455
+ }
1456
+ @layer components.styles {
1457
+ .accordion {
1458
+ border-radius: var(--_radius);
1459
+ outline: var(--_border-width) solid var(--_border-color);
1460
+ outline-offset: calc(var(--_border-width) * -1);
1383
1461
  }
1384
- .checkbox:checked::before {
1385
- opacity: 1;
1462
+ .accordion > .disclosure {
1463
+ --_border-width: 0;
1464
+ border: none;
1465
+ border-radius: 0;
1386
1466
  }
1387
- .checkbox:indeterminate {
1388
- background: var(--_bg-checked);
1389
- border-color: var(--_bg-checked);
1467
+ .accordion > .disclosure + .disclosure {
1468
+ border-block-start: 1px solid var(--_border-color);
1390
1469
  }
1391
- .checkbox:indeterminate::before {
1392
- opacity: 1;
1393
- clip-path: polygon(15% 45%, 85% 45%, 85% 55%, 15% 55%);
1470
+ .accordion > .disclosure:first-child .disclosure__trigger {
1471
+ border-start-start-radius: var(--_radius);
1472
+ border-start-end-radius: var(--_radius);
1394
1473
  }
1395
- .checkbox:disabled {
1396
- opacity: 0.5;
1397
- cursor: not-allowed;
1474
+ .accordion > .disclosure:last-child .disclosure__trigger {
1475
+ border-end-start-radius: var(--_radius);
1476
+ border-end-end-radius: var(--_radius);
1398
1477
  }
1399
- }
1400
- @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));
1478
+ .accordion > .disclosure:last-child .disclosure__content {
1479
+ border-end-start-radius: var(--_radius);
1480
+ border-end-end-radius: var(--_radius);
1407
1481
  }
1408
- .code--sm {
1409
- --_font-size: var(--ui-font-size-xs, 0.75rem);
1482
+ .accordion--borderless {
1483
+ border: none;
1410
1484
  }
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%)));
1485
+ .accordion--borderless > .disclosure + .disclosure {
1486
+ border-block-start: none;
1417
1487
  }
1418
- }
1419
- @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);
1488
+ .accordion--separated {
1489
+ display: flex;
1490
+ flex-direction: column;
1491
+ gap: calc(0.5rem * 1);
1492
+ border: none;
1427
1493
  }
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);
1494
+ .accordion--separated > .disclosure {
1495
+ border: 1px solid var(--_border-color);
1438
1496
  border-radius: var(--_radius);
1439
1497
  }
1440
- .code-block code {
1441
- padding: 0;
1442
- font-size: inherit;
1443
- background: none;
1498
+ .accordion--separated > .disclosure + .disclosure {
1499
+ border-block-start: 1px solid var(--_border-color);
1444
1500
  }
1445
1501
  }
1446
1502
  @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%)));
1503
+ .disclosure {
1504
+ --_border-color: var(--ui-disclosure-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
1505
+ --_border-width: var(--ui-disclosure-border-width, 1px);
1506
+ --_radius: var(--ui-disclosure-radius, var(--ui-radius-md, calc(0.5rem * 1)));
1507
+ --_trigger-height: var(--ui-disclosure-trigger-height, var(--ui-row-3, calc(1rem * 3)));
1508
+ --_padding-x: var(--ui-disclosure-padding-x, calc(0.5rem * 2));
1509
+ --_padding-y: var(--ui-disclosure-padding-y, calc(0.5rem * 2));
1452
1510
  }
1453
1511
  }
1454
1512
  @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);
1513
+ .disclosure {
1514
+ box-sizing: border-box;
1515
+ border-radius: var(--_radius);
1516
+ outline: var(--_border-width) solid var(--_border-color);
1517
+ outline-offset: calc(var(--_border-width) * -1);
1461
1518
  }
1462
- .data-list__item {
1463
- display: flex;
1464
- flex-direction: column;
1465
- gap: var(--_item-gap);
1519
+ .disclosure:not([open]) {
1520
+ block-size: var(--_trigger-height);
1466
1521
  }
1467
- .data-list__label {
1468
- font-size: var(--ui-font-size-sm, 0.875rem);
1522
+ .disclosure__trigger {
1523
+ display: flex;
1524
+ align-items: center;
1525
+ justify-content: space-between;
1526
+ gap: calc(0.5rem * 2);
1527
+ block-size: var(--_trigger-height);
1528
+ inline-size: 100%;
1529
+ padding-inline: var(--_padding-x);
1469
1530
  font-weight: var(--ui-weight-medium, 500);
1470
- line-height: var(--ui-row-1, 1rem);
1471
- color: var(--_label-color);
1531
+ line-height: 1;
1532
+ text-align: start;
1533
+ cursor: pointer;
1534
+ list-style: none;
1472
1535
  }
1473
- .data-list__value {
1474
- margin: 0;
1475
- line-height: var(--ui-row-1, 1rem);
1476
- color: var(--_value-color);
1536
+ .disclosure__trigger::-webkit-details-marker {
1537
+ display: none;
1477
1538
  }
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);
1539
+ .disclosure__trigger::marker {
1540
+ display: none;
1483
1541
  }
1484
- .data-list--horizontal .data-list__label {
1542
+ .disclosure__trigger:hover {
1543
+ background: var(--ui-color-bg-subtle, rgba(0, 0, 0, 0.02));
1544
+ }
1545
+ .disclosure__icon {
1485
1546
  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: calc(var(--_gap) - var(--ui-border-width-sm, 0.0625rem));
1492
- border-block-end: var(--ui-border-width-sm, 0.0625rem) solid var(--ui-color-border, hsl(220, 10%, 90%));
1493
- }
1494
- .data-list--divided .data-list__item:last-child {
1495
- padding-block-end: 0;
1496
- border-block-end: none;
1497
- }
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);
1502
- }
1503
- .data-list--sm {
1504
- --_gap: calc(0.5rem * 1);
1505
- --_item-gap: 0;
1506
- font-size: var(--ui-font-size-sm, 0.875rem);
1507
- }
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);
1512
- }
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)));
1520
- }
1521
- }
1522
- @layer components.styles {
1523
- .dialog .modal__content {
1524
- padding: 0;
1525
- }
1526
- .dialog__header {
1527
- 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;
1544
- }
1545
- .dialog__body {
1546
- flex: 1 1 auto;
1547
- padding: var(--_body-padding);
1548
- overflow-y: auto;
1549
- }
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);
1557
- border-block-start: 1px solid var(--_border-color);
1558
- }
1559
- .dialog--borderless .dialog__header {
1560
- border-block-end: none;
1561
- }
1562
- .dialog--borderless .dialog__footer {
1563
- border-block-start: none;
1564
- }
1565
- }
1566
- @layer components.tokens {
1567
- .disclosure {
1568
- --_border-color: var(--ui-disclosure-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
1569
- --_border-width: var(--ui-disclosure-border-width, 1px);
1570
- --_radius: var(--ui-disclosure-radius, var(--ui-radius-md, calc(0.5rem * 1)));
1571
- --_trigger-height: var(--ui-disclosure-trigger-height, var(--ui-row-3, calc(1rem * 3)));
1572
- --_padding-x: var(--ui-disclosure-padding-x, calc(0.5rem * 2));
1573
- --_padding-y: var(--ui-disclosure-padding-y, calc(0.5rem * 2));
1574
- }
1575
- }
1576
- @layer components.styles {
1577
- .disclosure {
1578
- box-sizing: border-box;
1579
- border-radius: var(--_radius);
1580
- outline: var(--_border-width) solid var(--_border-color);
1581
- outline-offset: calc(var(--_border-width) * -1);
1582
- }
1583
- .disclosure:not([open]) {
1584
- block-size: var(--_trigger-height);
1585
- }
1586
- .disclosure__trigger {
1587
- display: flex;
1588
- align-items: center;
1589
- justify-content: space-between;
1590
- gap: calc(0.5rem * 2);
1591
- block-size: var(--_trigger-height);
1592
- inline-size: 100%;
1593
- padding-inline: var(--_padding-x);
1594
- font-weight: var(--ui-weight-medium, 500);
1595
- line-height: 1;
1596
- text-align: start;
1597
- cursor: pointer;
1598
- list-style: none;
1599
- }
1600
- .disclosure__trigger::-webkit-details-marker {
1601
- display: none;
1602
- }
1603
- .disclosure__trigger::marker {
1604
- display: none;
1605
- }
1606
- .disclosure__trigger:hover {
1607
- background: var(--ui-color-bg-subtle, rgba(0, 0, 0, 0.02));
1608
- }
1609
- .disclosure__icon {
1610
- flex-shrink: 0;
1611
- transition: transform var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
1547
+ transition: transform var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
1612
1548
  }
1613
1549
  .disclosure[open] .disclosure__icon {
1614
1550
  transform: rotate(180deg);
@@ -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));
1650
- }
1651
- }
1652
- @layer components.styles {
1653
- .divider {
1654
- 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);
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);
1661
1591
  }
1662
- .divider::before,
1663
- .divider::after {
1664
- content: "";
1665
- flex: 1;
1666
- block-size: var(--_line-size);
1667
- background: var(--_color);
1592
+ .alert--info {
1593
+ --_accent: var(--ui-color-primary, oklch(55% 0.22 250deg));
1668
1594
  }
1669
- .divider:not(:empty) {
1670
- --_height: var(--ui-row-1, 1rem);
1595
+ .alert--success {
1596
+ --_accent: var(--ui-color-success, oklch(60% 0.18 145deg));
1671
1597
  }
1672
- .divider:not(:empty)::before {
1673
- margin-inline-end: calc(0.5rem * 2);
1598
+ .alert--warning {
1599
+ --_accent: var(--ui-color-warning, oklch(75% 0.18 70deg));
1674
1600
  }
1675
- .divider:not(:empty)::after {
1676
- margin-inline-start: calc(0.5rem * 2);
1601
+ .alert--danger {
1602
+ --_accent: var(--ui-color-danger, oklch(60% 0.22 25deg));
1677
1603
  }
1678
- .divider:empty::after {
1679
- display: none;
1604
+ }
1605
+ @layer components.styles {
1606
+ .alert {
1607
+ display: flex;
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);
1680
1617
  }
1681
- .divider--vertical {
1682
- flex-direction: column;
1683
- align-self: stretch;
1684
- margin: 0 var(--_gap);
1685
- writing-mode: vertical-rl;
1618
+ .alert__icon {
1619
+ flex-shrink: 0;
1620
+ color: var(--_icon-color);
1686
1621
  }
1687
- .divider--vertical::before,
1688
- .divider--vertical::after {
1622
+ .alert__content {
1689
1623
  flex: 1;
1690
- block-size: auto;
1691
- inline-size: var(--_size);
1692
- }
1693
- .divider--start::before {
1694
- display: none;
1695
- }
1696
- .divider--start:not(:empty)::after {
1697
- margin-inline-start: calc(0.5rem * 2);
1624
+ min-inline-size: 0;
1698
1625
  }
1699
- .divider--end::after {
1700
- display: none;
1626
+ .alert__title {
1627
+ margin: 0;
1628
+ font-weight: var(--ui-weight-medium, 500);
1629
+ line-height: var(--ui-row-1, 1rem);
1701
1630
  }
1702
- .divider--end:not(:empty)::before {
1703
- 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%));
1704
1637
  }
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);
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;
1708
1646
  }
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);
1647
+ .alert__close:hover {
1648
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
1712
1649
  }
1713
1650
  }
1714
1651
  @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%)));
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));
1724
1657
  }
1725
- .drawer--sm {
1726
- --_size: calc(0.5rem * 30);
1658
+ .progress--sm {
1659
+ --_height: calc(0.5rem * 1);
1727
1660
  }
1728
- .drawer--lg {
1729
- --_size: calc(0.5rem * 50);
1730
- }
1731
- .drawer--full {
1732
- --_size: 100%;
1733
- --_max-size: 100%;
1661
+ .progress--lg {
1662
+ --_height: calc(0.5rem * 2);
1734
1663
  }
1735
1664
  }
1736
1665
  @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));
1666
+ .progress {
1667
+ position: relative;
1668
+ block-size: var(--_height);
1669
+ overflow: hidden;
1670
+ background: var(--_bg);
1671
+ border-radius: var(--_radius);
1742
1672
  }
1743
- .drawer-overlay[data-state=open] {
1744
- animation: drawer-overlay-in var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
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);
1745
1678
  }
1746
- .drawer-overlay[data-state=closed] {
1747
- animation: drawer-overlay-out var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
1679
+ .progress--indeterminate .progress__bar {
1680
+ inline-size: 30%;
1681
+ animation: progress-indeterminate 1.5s infinite ease-in-out;
1748
1682
  }
1749
- @keyframes drawer-overlay-in {
1750
- from {
1751
- opacity: 0;
1683
+ @keyframes progress-indeterminate {
1684
+ 0% {
1685
+ transform: translateX(-100%);
1686
+ }
1687
+ 100% {
1688
+ transform: translateX(400%);
1752
1689
  }
1753
1690
  }
1754
- @keyframes drawer-overlay-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;
1694
+ }
1695
+ .progress--animated .progress__bar {
1696
+ animation: progress-stripes 1s linear infinite;
1697
+ }
1698
+ @keyframes progress-stripes {
1699
+ from {
1700
+ background-position: 0.5rem 0;
1701
+ }
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);
1872
- line-height: var(--ui-row-1, 1rem);
1817
+ @keyframes spinner-rotate {
1818
+ to {
1819
+ transform: rotate(360deg);
1820
+ }
1873
1821
  }
1874
- .drawer__description {
1875
- margin: 0;
1876
- font-size: var(--ui-font-size-sm, 0.875rem);
1877
- line-height: var(--ui-row-1, 1rem);
1878
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
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);
1879
1828
  }
1880
- .drawer__close {
1881
- flex-shrink: 0;
1882
- margin-inline-start: auto;
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));
1883
1836
  }
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);
1837
+ .toast--success {
1838
+ --_border-color: var(--ui-color-success);
1889
1839
  }
1890
- .drawer__footer {
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 {
1891
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);
1910
+ line-height: var(--ui-row-1, 1rem);
1911
+ }
1912
+ .toast__description {
1913
+ margin: 0;
1914
+ font-size: var(--ui-font-size-sm, 0.875rem);
1915
+ line-height: var(--ui-row-1, 1rem);
1916
+ color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
1917
+ }
1918
+ .toast__action {
1919
+ flex-shrink: 0;
1920
+ }
1921
+ .toast__close {
1922
+ display: inline-flex;
1892
1923
  flex-shrink: 0;
1893
1924
  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);
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;
1933
+ }
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;
1977
+ flex-shrink: 0;
1978
+ align-items: center;
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%)));
1973
- }
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));
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%)));
1977
2106
  }
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));
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));
1981
2110
  }
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));
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));
1985
2115
  }
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));
2116
+ .input--filled {
2117
+ --_bg: var(--ui-input-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2118
+ --_border-color: transparent;
1989
2119
  }
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));
2120
+ .input--ghost {
2121
+ --_bg: transparent;
2122
+ --_border-color: transparent;
1993
2123
  }
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));
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)));
1997
2127
  }
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, var(--ui-ctx-size, 1rem));
2015
- --_stroke: var(--ui-icon-stroke, 2);
2016
- }
2017
- .icon--xs {
2018
- --_size: var(--ui-icon-size-xs, var(--ui-size-xs, 0.5rem));
2019
- }
2020
- .icon--sm {
2021
- --_size: var(--ui-icon-size-sm, var(--ui-size-sm, 0.75rem));
2022
- }
2023
- .icon--md {
2024
- --_size: var(--ui-icon-size-md, var(--ui-size-md, 1rem));
2025
- }
2026
- .icon--lg {
2027
- --_size: var(--ui-icon-size-lg, var(--ui-size-lg, 1.25rem));
2028
- }
2029
- .icon--xl {
2030
- --_size: var(--ui-icon-size-xl, var(--ui-size-xl, 1.5rem));
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, oklch(55% 0.22 250deg)));
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, oklch(60% 0.22 25deg)));
2097
- --_border-color-focus: var(--ui-input-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2098
- }
2099
- .input--success {
2100
- --_border-color: var(--ui-input-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2101
- --_border-color-focus: var(--ui-input-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
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 {
@@ -2206,938 +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);
2296
+ }
2297
+ .radio:disabled {
2298
+ opacity: 0.5;
2299
+ cursor: not-allowed;
2257
2300
  }
2258
2301
  }
2259
2302
  @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%)));
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%)));
2271
2313
  }
2272
- }
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);
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));
2284
2317
  }
2285
- .menu__group {
2286
- padding: 0;
2287
- margin: 0;
2288
- list-style: none;
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));
2289
2322
  }
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%));
2323
+ .select--filled {
2324
+ --_bg: var(--ui-select-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2325
+ --_border-color: transparent;
2298
2326
  }
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);
2327
+ .select--ghost {
2328
+ --_bg: transparent;
2329
+ --_border-color: transparent;
2313
2330
  }
2314
- .menu__item:hover, .menu__item:focus-visible {
2315
- background: var(--_item-bg-hover);
2316
- outline: none;
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)));
2317
2334
  }
2318
- .menu__item--danger {
2319
- color: var(--ui-color-danger, oklch(60% 0.22 25deg));
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)));
2320
2338
  }
2321
- .menu__item--danger:hover, .menu__item--danger:focus-visible {
2322
- color: var(--ui-color-danger, oklch(60% 0.22 25deg));
2339
+ }
2340
+ @layer components.styles {
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);
2353
+ border-radius: var(--_radius);
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);
2323
2360
  }
2324
- .menu__item--disabled,
2325
- .menu__item[aria-disabled=true] {
2361
+ .select:hover:not(:disabled, :focus) {
2362
+ border-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
2363
+ }
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));
2368
+ }
2369
+ .select:disabled, .select--disabled {
2326
2370
  opacity: 0.5;
2327
- pointer-events: none;
2371
+ cursor: not-allowed;
2328
2372
  }
2329
- .menu__item-icon {
2330
- flex-shrink: 0;
2331
- block-size: calc(0.5rem * 2);
2332
- inline-size: calc(0.5rem * 2);
2373
+ .select--block {
2374
+ inline-size: 100%;
2333
2375
  }
2334
- .menu__item-shortcut {
2335
- margin-inline-start: auto;
2336
- font-size: var(--ui-font-size-xs, 0.75rem);
2376
+ .select:invalid, .select--placeholder {
2337
2377
  color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2338
2378
  }
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%));
2379
+ }
2380
+ @layer components.tokens {
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%)));
2350
2392
  }
2351
- .menu__item--check,
2352
- .menu__item--radio {
2353
- position: relative;
2354
- padding-inline-start: calc(0.5rem * 4);
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));
2355
2396
  }
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);
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));
2364
2402
  }
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));
2403
+ .textarea--filled {
2404
+ --_bg: var(--ui-textarea-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2405
+ --_border-color: transparent;
2375
2406
  }
2376
- .modal--sm {
2377
- --_max-width: var(--ui-modal-max-width-sm, calc(0.5rem * 40));
2407
+ .textarea--ghost {
2408
+ --_bg: transparent;
2409
+ --_border-color: transparent;
2378
2410
  }
2379
- .modal--lg {
2380
- --_max-width: var(--ui-modal-max-width-lg, calc(0.5rem * 80));
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)));
2381
2414
  }
2382
- .modal--full {
2383
- --_max-width: calc(100vw - 0.5rem * 4);
2384
- --_max-height: calc(100vh - 0.5rem * 4);
2385
- --_radius: 0;
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)));
2386
2418
  }
2387
2419
  }
2388
2420
  @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;
2421
+ .textarea {
2422
+ display: block;
2423
+ box-sizing: border-box;
2402
2424
  inline-size: 100%;
2403
- max-block-size: var(--_max-height);
2404
- max-inline-size: var(--_max-width);
2405
- padding: var(--_padding);
2406
- overflow: hidden;
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);
2430
+ line-height: var(--ui-row-1, 1rem);
2431
+ color: var(--_text);
2407
2432
  background: var(--_bg);
2433
+ border: none;
2408
2434
  border-radius: var(--_radius);
2409
- box-shadow: var(--_shadow);
2435
+ outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
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);
2437
+ outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
2438
+ resize: vertical;
2410
2439
  }
2411
- .modal__body {
2412
- flex: 1 1 auto;
2413
- overflow-y: auto;
2440
+ .textarea::placeholder {
2441
+ color: var(--_placeholder);
2414
2442
  }
2415
- .modal--entering .modal__content,
2416
- .modal--visible .modal__content {
2417
- opacity: 1;
2418
- transform: scale(1);
2443
+ .textarea:hover:not(:disabled, :focus) {
2444
+ outline-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
2419
2445
  }
2420
- .modal--exiting .modal__content,
2421
- .modal--hidden .modal__content {
2422
- opacity: 0;
2423
- transform: scale(0.95);
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));
2424
2449
  }
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);
2450
+ .textarea:disabled, .textarea--disabled {
2451
+ opacity: 0.5;
2452
+ cursor: not-allowed;
2453
+ resize: none;
2427
2454
  }
2428
- .modal--hidden {
2429
- visibility: hidden;
2430
- pointer-events: none;
2455
+ .textarea:read-only {
2456
+ background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
2457
+ resize: none;
2458
+ }
2459
+ .textarea--resize-none {
2460
+ resize: none;
2461
+ }
2462
+ .textarea--resize-horizontal {
2463
+ resize: horizontal;
2464
+ }
2465
+ .textarea--resize-both {
2466
+ resize: both;
2431
2467
  }
2432
2468
  }
2433
2469
  @layer components.tokens {
2434
- .nav {
2435
- --_gap: var(--ui-nav-gap, var(--ui-space-1, 0.5rem));
2436
- --_item-height: var(--ui-nav-item-height, var(--ui-row-2, 2rem));
2437
- --_item-padding-x: var(--ui-nav-item-padding-x, var(--ui-space-2, 1rem));
2438
- --_item-font-size: var(--ui-nav-item-font-size, var(--ui-font-size-sm, 0.875rem));
2439
- --_item-font-weight: var(--ui-nav-item-font-weight, var(--ui-weight-medium, 500));
2440
- --_item-color: var(--ui-nav-item-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2441
- --_item-color-hover: var(--ui-nav-item-color-hover, var(--ui-color-text, hsl(220, 10%, 10%)));
2442
- --_item-color-active: var(--ui-nav-item-color-active, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2443
- --_item-radius: var(--ui-nav-item-radius, var(--ui-radius-sm, 0.25rem));
2444
- --_border-color: var(--ui-nav-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
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));
2445
2479
  }
2446
- .nav--pills {
2447
- --_item-bg-hover: var(--ui-nav-item-bg-hover, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2448
- --_item-bg-active: var(--ui-nav-item-bg-active, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2449
- --_item-color-active: var(--ui-nav-item-color-active, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
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);
2485
+ }
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);
2450
2491
  }
2451
2492
  }
2452
2493
  @layer components.styles {
2453
- .nav__list {
2454
- display: flex;
2455
- align-items: stretch;
2456
- gap: var(--_gap);
2457
- box-sizing: border-box;
2458
- block-size: var(--_item-height);
2459
- padding: 0;
2460
- margin: 0;
2461
- list-style: none;
2462
- box-shadow: inset 0 calc(var(--ui-border-width-sm, 0.0625rem) * -1) 0 var(--_border-color);
2463
- }
2464
- .nav__item {
2494
+ .toggle {
2465
2495
  display: inline-flex;
2496
+ flex-shrink: 0;
2466
2497
  align-items: center;
2467
- box-sizing: border-box;
2468
- block-size: var(--_item-height);
2469
- padding-inline: var(--_item-padding-x);
2470
- font-family: var(--ui-font-sans, Noto Sans, system-ui, -apple-system, sans-serif);
2471
- font-size: var(--_item-font-size);
2472
- font-weight: var(--_item-font-weight);
2473
- line-height: 1;
2474
- text-decoration: none;
2475
- white-space: nowrap;
2476
- color: var(--_item-color);
2477
- background: transparent;
2478
- border: none;
2479
- box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 transparent;
2498
+ position: relative;
2499
+ block-size: var(--_track-height);
2500
+ inline-size: var(--_track-width);
2501
+ background: var(--_track-bg);
2502
+ border-radius: var(--_track-radius);
2480
2503
  cursor: pointer;
2481
- 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);
2504
+ transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2482
2505
  }
2483
- .nav__item:hover {
2484
- color: var(--_item-color-hover);
2506
+ .toggle__input {
2507
+ position: absolute;
2508
+ inset: 0;
2509
+ block-size: 100%;
2510
+ inline-size: 100%;
2511
+ margin: 0;
2512
+ opacity: 0;
2513
+ cursor: pointer;
2485
2514
  }
2486
- .nav__item--active {
2487
- color: var(--_item-color-active);
2488
- box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 var(--_item-color-active);
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);
2489
2521
  }
2490
- .nav__item--disabled {
2491
- opacity: 0.5;
2492
- pointer-events: none;
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);
2493
2532
  }
2494
- .nav--pills .nav__list {
2495
- box-shadow: none;
2533
+ .toggle__input:checked ~ .toggle__track {
2534
+ background: var(--_track-bg-checked);
2496
2535
  }
2497
- .nav--pills .nav__item {
2498
- border-radius: var(--_item-radius);
2499
- box-shadow: none;
2536
+ .toggle__input:checked ~ .toggle__thumb {
2537
+ transform: translateX(calc(var(--_track-width) - var(--_thumb-size) - var(--_thumb-offset) * 2));
2500
2538
  }
2501
- .nav--pills .nav__item:hover {
2502
- background: var(--_item-bg-hover);
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);
2503
2542
  }
2504
- .nav--pills .nav__item--active {
2505
- color: var(--_item-color-active);
2506
- background: var(--_item-bg-active);
2543
+ .toggle__input:disabled ~ .toggle__track,
2544
+ .toggle__input:disabled ~ .toggle__thumb {
2545
+ opacity: 0.5;
2546
+ cursor: not-allowed;
2507
2547
  }
2508
- .nav--vertical .nav__list {
2509
- flex-direction: column;
2510
- align-items: stretch;
2511
- block-size: auto;
2512
- box-shadow: inset calc(var(--ui-border-width-sm, 0.0625rem) * -1) 0 0 var(--_border-color);
2548
+ .toggle:has(.toggle__input:disabled) {
2549
+ cursor: not-allowed;
2513
2550
  }
2514
- .nav--vertical .nav__item {
2515
- box-shadow: inset calc(var(--ui-border-width-md, 0.125rem) * -1) 0 0 transparent;
2551
+ }
2552
+ @layer components.tokens {
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));
2516
2558
  }
2517
- .nav--vertical .nav__item--active {
2518
- box-shadow: inset calc(var(--ui-border-width-md, 0.125rem) * -1) 0 0 var(--_item-color-active);
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);
2519
2569
  }
2520
- .nav--vertical.nav--pills .nav__list {
2521
- box-shadow: none;
2570
+ .divider::before,
2571
+ .divider::after {
2572
+ content: "";
2573
+ flex: 1;
2574
+ block-size: var(--_line-size);
2575
+ background: var(--_color);
2522
2576
  }
2523
- .nav--vertical.nav--pills .nav__item {
2524
- box-shadow: none;
2577
+ .divider:not(:empty) {
2578
+ --_height: var(--ui-row-1, 1rem);
2525
2579
  }
2526
- }
2527
- @layer components.tokens {
2528
- .overlay {
2529
- --_bg: var(--ui-overlay-bg, rgb(0 0 0 / 0.5));
2530
- --_z: var(--ui-overlay-z, var(--ui-z-overlay, 300));
2580
+ .divider:not(:empty)::before {
2581
+ margin-inline-end: calc(0.5rem * 2);
2531
2582
  }
2532
- .overlay--light {
2533
- --_bg: var(--ui-overlay-bg-light, rgb(255 255 255 / 0.7));
2583
+ .divider:not(:empty)::after {
2584
+ margin-inline-start: calc(0.5rem * 2);
2534
2585
  }
2535
- .overlay--blur {
2536
- --_bg: var(--ui-overlay-bg-blur, rgb(0 0 0 / 0.3));
2586
+ .divider:empty::after {
2587
+ display: none;
2537
2588
  }
2538
- }
2539
- @layer components.styles {
2540
- .overlay {
2541
- position: fixed;
2542
- inset: 0;
2543
- z-index: var(--_z);
2544
- background: var(--_bg);
2589
+ .divider--vertical {
2590
+ flex-direction: column;
2591
+ align-self: stretch;
2592
+ margin: 0 var(--_gap);
2593
+ writing-mode: vertical-rl;
2545
2594
  }
2546
- .overlay--blur {
2547
- backdrop-filter: blur(calc(0.5rem * 0.5));
2595
+ .divider--vertical::before,
2596
+ .divider--vertical::after {
2597
+ flex: 1;
2598
+ block-size: auto;
2599
+ inline-size: var(--_size);
2548
2600
  }
2549
- .overlay--entering,
2550
- .overlay--visible {
2551
- opacity: 1;
2601
+ .divider--start::before {
2602
+ display: none;
2552
2603
  }
2553
- .overlay--exiting,
2554
- .overlay--hidden {
2555
- opacity: 0;
2556
- pointer-events: none;
2604
+ .divider--start:not(:empty)::after {
2605
+ margin-inline-start: calc(0.5rem * 2);
2557
2606
  }
2558
- .overlay--animate {
2559
- transition: opacity var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
2607
+ .divider--end::after {
2608
+ display: none;
2609
+ }
2610
+ .divider--end:not(:empty)::before {
2611
+ margin-inline-end: calc(0.5rem * 2);
2612
+ }
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);
2616
+ }
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);
2560
2620
  }
2561
2621
  }
2562
2622
  @layer components.tokens {
2563
- .pagination {
2564
- --_gap: var(--ui-pagination-gap, calc(0.5rem * 0.5));
2565
- --_item-size: var(--ui-pagination-item-size, calc(0.5rem * 4));
2566
- --_item-radius: var(--ui-pagination-item-radius, var(--ui-radius-sm, 0.25rem));
2567
- --_item-bg: var(--ui-pagination-item-bg, transparent);
2568
- --_item-bg-hover: var(--ui-pagination-item-bg-hover, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
2569
- --_item-bg-active: var(--ui-pagination-item-bg-active, var(--ui-color-primary));
2570
- --_item-color: var(--ui-pagination-item-color, var(--ui-color-text, hsl(220, 10%, 10%)));
2571
- --_item-color-active: var(--ui-pagination-item-color-active, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
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));
2572
2629
  }
2573
2630
  }
2574
2631
  @layer components.styles {
2575
- .pagination {
2576
- display: flex;
2577
- align-items: center;
2578
- gap: var(--_gap);
2579
- }
2580
- .pagination__list {
2632
+ .breadcrumb {
2581
2633
  display: flex;
2634
+ flex-wrap: wrap;
2582
2635
  align-items: center;
2583
2636
  gap: var(--_gap);
2637
+ block-size: var(--_height);
2584
2638
  padding: 0;
2585
2639
  margin: 0;
2640
+ font-size: var(--ui-font-size-sm, 0.875rem);
2641
+ line-height: 1;
2586
2642
  list-style: none;
2587
2643
  }
2588
- .pagination__item {
2644
+ .breadcrumb__item {
2589
2645
  display: flex;
2590
- }
2591
- .pagination__link {
2592
- display: inline-flex;
2593
2646
  align-items: center;
2594
- justify-content: center;
2595
- block-size: var(--_item-size);
2596
- min-inline-size: var(--_item-size);
2597
- padding-inline: calc(0.5rem * 1);
2598
- font-size: var(--ui-font-size-sm, 0.875rem);
2599
- text-decoration: none;
2600
- color: var(--_item-color);
2601
- background: var(--_item-bg);
2602
- border-radius: var(--_item-radius);
2603
- transition: background var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease), color var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2647
+ gap: var(--_gap);
2648
+ block-size: var(--_height);
2604
2649
  }
2605
- .pagination__link:hover {
2606
- background: var(--_item-bg-hover);
2650
+ .breadcrumb__item:not(:last-child)::after {
2651
+ content: var(--ui-breadcrumb-separator, "/");
2652
+ color: var(--_separator-color);
2607
2653
  }
2608
- .pagination__link[aria-current=page],
2609
- .pagination__link--active {
2610
- color: var(--_item-color-active);
2611
- background: var(--_item-bg-active);
2612
- pointer-events: none;
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);
2613
2658
  }
2614
- .pagination__link[aria-disabled=true],
2615
- .pagination__link--disabled {
2616
- opacity: 0.5;
2617
- pointer-events: none;
2659
+ .breadcrumb__link:hover {
2660
+ text-decoration: underline;
2661
+ color: var(--ui-color-primary);
2618
2662
  }
2619
- .pagination__prev,
2620
- .pagination__next {
2621
- display: inline-flex;
2622
- align-items: center;
2623
- gap: calc(0.5rem * 0.5);
2624
- padding-inline: calc(0.5rem * 1.5);
2663
+ .breadcrumb__item:last-child .breadcrumb__link,
2664
+ .breadcrumb__current {
2665
+ color: var(--_current-color);
2666
+ pointer-events: none;
2625
2667
  }
2626
- .pagination__ellipsis {
2627
- display: inline-flex;
2628
- align-items: center;
2629
- justify-content: center;
2630
- block-size: var(--_item-size);
2631
- min-inline-size: var(--_item-size);
2632
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
2668
+ .breadcrumb__item--hidden {
2669
+ display: none;
2633
2670
  }
2634
- .pagination--sm {
2635
- --_item-size: calc(0.5rem * 3);
2636
- --_gap: calc(0.5rem * 0.25);
2637
- }
2638
- .pagination--lg {
2639
- --_item-size: calc(0.5rem * 5);
2640
- --_gap: calc(0.5rem * 0.75);
2671
+ .breadcrumb__ellipsis {
2672
+ color: var(--_separator-color);
2641
2673
  }
2642
2674
  }
2643
2675
  @layer components.tokens {
2644
- .popover {
2645
- --_bg: var(--ui-popover-bg, var(--ui-color-bg, white));
2646
- --_border-color: var(--ui-popover-border-color, var(--ui-color-border, rgb(0 0 0 / 0.1)));
2647
- --_radius: var(--ui-popover-radius, var(--ui-radius-md, calc(0.5rem * 1)));
2648
- --_shadow: var(--ui-popover-shadow, 0 calc(0.5rem / 2) calc(0.5rem * 2) rgb(0 0 0 / 0.15));
2649
- --_padding: var(--ui-popover-padding, calc(0.5rem * 2));
2650
- --_max-width: var(--ui-popover-max-width, calc(0.5rem * 40));
2651
- --_z: var(--ui-popover-z, var(--ui-z-popover, 500));
2652
- --_arrow-size: var(--ui-popover-arrow-size, calc(0.5rem));
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%)));
2653
2687
  }
2654
2688
  }
2655
2689
  @layer components.styles {
2656
- .popover {
2657
- position: absolute;
2658
- z-index: var(--_z);
2659
- max-inline-size: var(--_max-width);
2690
+ .menu {
2691
+ min-inline-size: var(--_min-width);
2692
+ max-block-size: var(--_max-height);
2660
2693
  padding: var(--_padding);
2661
- line-height: var(--ui-row-1, 1rem);
2694
+ overflow-y: auto;
2662
2695
  background: var(--_bg);
2663
2696
  border-radius: var(--_radius);
2664
2697
  outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2665
2698
  box-shadow: var(--_shadow);
2666
2699
  outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
2667
2700
  }
2668
- .popover__header {
2669
- padding-block-end: calc(0.5rem * 2);
2670
- margin-block-end: calc(0.5rem * 2);
2671
- box-shadow: inset 0 calc(var(--ui-border-width-sm, 1px) * -1) 0 var(--_border-color);
2672
- }
2673
- .popover__title {
2701
+ .menu__group {
2702
+ padding: 0;
2674
2703
  margin: 0;
2675
- font-size: var(--ui-font-size-md, 1rem);
2676
- font-weight: var(--ui-weight-semibold, 600);
2704
+ list-style: none;
2677
2705
  }
2678
- .popover--top::after {
2679
- content: "";
2680
- position: absolute;
2681
- inset-block-start: 100%;
2682
- inset-inline-start: 50%;
2683
- border: var(--_arrow-size) solid transparent;
2684
- border-block-start-color: var(--_bg);
2685
- transform: translateX(-50%);
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%));
2686
2714
  }
2687
- .popover--top::before {
2688
- content: "";
2689
- position: absolute;
2690
- inset-block-start: 100%;
2691
- inset-inline-start: 50%;
2692
- border: calc(var(--_arrow-size) + 1px) solid transparent;
2693
- border-block-start-color: var(--_border-color);
2694
- transform: translateX(-50%);
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);
2695
2729
  }
2696
- .popover--bottom::after {
2697
- content: "";
2698
- position: absolute;
2699
- inset-block-end: 100%;
2700
- inset-inline-start: 50%;
2701
- border: var(--_arrow-size) solid transparent;
2702
- border-block-end-color: var(--_bg);
2703
- transform: translateX(-50%);
2730
+ .menu__item:hover, .menu__item:focus-visible {
2731
+ background: var(--_item-bg-hover);
2732
+ outline: none;
2704
2733
  }
2705
- .popover--bottom::before {
2706
- content: "";
2707
- position: absolute;
2708
- inset-block-end: 100%;
2709
- inset-inline-start: 50%;
2710
- border: calc(var(--_arrow-size) + 1px) solid transparent;
2711
- border-block-end-color: var(--_border-color);
2712
- transform: translateX(-50%);
2734
+ .menu__item--danger {
2735
+ color: var(--ui-color-danger, oklch(60% 0.22 25deg));
2713
2736
  }
2714
- .popover--visible {
2715
- opacity: 1;
2737
+ .menu__item--danger:hover, .menu__item--danger:focus-visible {
2738
+ color: var(--ui-color-danger, oklch(60% 0.22 25deg));
2716
2739
  }
2717
- .popover--hidden {
2718
- opacity: 0;
2740
+ .menu__item--disabled,
2741
+ .menu__item[aria-disabled=true] {
2742
+ opacity: 0.5;
2719
2743
  pointer-events: none;
2720
2744
  }
2721
- .popover--animate {
2722
- transition: opacity var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
2723
- }
2724
- }
2725
- @layer components.tokens {
2726
- .progress {
2727
- --_height: var(--ui-progress-height, calc(0.5rem * 1));
2728
- --_bg: var(--ui-progress-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
2729
- --_fill: var(--ui-progress-fill, var(--ui-color-primary));
2730
- --_radius: var(--ui-progress-radius, var(--ui-radius-full, 9999px));
2731
- }
2732
- .progress--sm {
2733
- --_height: calc(0.5rem * 1);
2734
- }
2735
- .progress--lg {
2736
- --_height: calc(0.5rem * 2);
2737
- }
2738
- }
2739
- @layer components.styles {
2740
- .progress {
2741
- position: relative;
2742
- block-size: var(--_height);
2743
- overflow: hidden;
2744
- background: var(--_bg);
2745
- border-radius: var(--_radius);
2746
- }
2747
- .progress__bar {
2748
- block-size: 100%;
2749
- background: var(--_fill);
2750
- border-radius: var(--_radius);
2751
- transition: inline-size var(--ui-duration-normal, 200ms) var(--ui-ease-default, ease);
2752
- }
2753
- .progress--indeterminate .progress__bar {
2754
- inline-size: 30%;
2755
- animation: progress-indeterminate 1.5s infinite ease-in-out;
2756
- }
2757
- @keyframes progress-indeterminate {
2758
- 0% {
2759
- transform: translateX(-100%);
2760
- }
2761
- 100% {
2762
- transform: translateX(400%);
2763
- }
2764
- }
2765
- .progress--striped .progress__bar {
2766
- 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);
2767
- background-size: 0.5rem 0.5rem;
2768
- }
2769
- .progress--animated .progress__bar {
2770
- animation: progress-stripes 1s linear infinite;
2771
- }
2772
- @keyframes progress-stripes {
2773
- from {
2774
- background-position: 0.5rem 0;
2775
- }
2776
- to {
2777
- background-position: 0 0;
2778
- }
2779
- }
2780
- .progress--success {
2781
- --_fill: var(--ui-color-success);
2782
- }
2783
- .progress--warning {
2784
- --_fill: var(--ui-color-warning);
2785
- }
2786
- .progress--danger {
2787
- --_fill: var(--ui-color-danger);
2788
- }
2789
- }
2790
- @layer components.tokens {
2791
- .radio {
2792
- --_size: var(--ui-radio-size, calc(0.5rem * 2));
2793
- --_bg: var(--ui-radio-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2794
- --_bg-checked: var(--ui-radio-bg-checked, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2795
- --_border-color: var(--ui-radio-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2796
- --_border-color-focus: var(--ui-radio-border-color-focus, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2797
- --_dot-color: var(--ui-radio-dot-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
2798
- }
2799
- .radio--lg {
2800
- --_size: var(--ui-radio-size-lg, calc(0.5rem * 3));
2745
+ .menu__item-icon {
2746
+ flex-shrink: 0;
2747
+ block-size: calc(0.5rem * 2);
2748
+ inline-size: calc(0.5rem * 2);
2801
2749
  }
2802
- .radio--error {
2803
- --_border-color: var(--ui-radio-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2804
- --_border-color-focus: var(--ui-radio-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
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%));
2805
2754
  }
2806
- }
2807
- @layer components.styles {
2808
- .radio {
2809
- display: inline-flex;
2810
- flex-shrink: 0;
2755
+ .menu__separator {
2756
+ display: flex;
2811
2757
  align-items: center;
2812
- justify-content: center;
2813
- block-size: var(--_size);
2814
- inline-size: var(--_size);
2758
+ block-size: calc(0.5rem * 2);
2815
2759
  margin: 0;
2816
- vertical-align: middle;
2817
- background: var(--_bg);
2818
- border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2819
- border-radius: 50%;
2820
- cursor: pointer;
2821
- appearance: none;
2822
- 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);
2823
2760
  }
2824
- .radio::before {
2761
+ .menu__separator::before {
2825
2762
  content: "";
2826
- block-size: 50%;
2827
- inline-size: 50%;
2828
- background-color: var(--_dot-color);
2829
- border-radius: 50%;
2830
- opacity: 0;
2831
- transform: scale(0);
2832
- transition: opacity var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease), transform var(--ui-duration-fast, 150ms) var(--ui-ease-default, ease);
2833
- }
2834
- .radio:hover:not(:disabled) {
2835
- border-color: var(--_border-color-focus);
2836
- }
2837
- .radio:focus-visible {
2838
- border-color: var(--_border-color-focus);
2839
- outline: none;
2840
- box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, oklch(75% 0.15 250deg));
2841
- }
2842
- .radio:checked {
2843
- background: var(--_bg-checked);
2844
- border-color: var(--_bg-checked);
2763
+ flex: 1;
2764
+ block-size: var(--ui-border-width-sm, 1px);
2765
+ background: var(--ui-color-border, hsl(220, 10%, 90%));
2845
2766
  }
2846
- .radio:checked::before {
2847
- opacity: 1;
2848
- transform: scale(1);
2767
+ .menu__item--check,
2768
+ .menu__item--radio {
2769
+ position: relative;
2770
+ padding-inline-start: calc(0.5rem * 4);
2849
2771
  }
2850
- .radio:disabled {
2851
- opacity: 0.5;
2852
- cursor: not-allowed;
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);
2853
2780
  }
2854
2781
  }
2855
2782
  @layer components.tokens {
2856
- .select {
2857
- --_height: var(--ui-select-height, var(--ui-row-2, 2rem));
2858
- --_padding-x: var(--ui-select-padding-x, var(--ui-space-1, 0.5rem));
2859
- --_font-size: var(--ui-select-font-size, var(--ui-font-size-sm, 0.875rem));
2860
- --_radius: var(--ui-select-radius, var(--ui-radius-md, 0.5rem));
2861
- --_bg: var(--ui-select-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
2862
- --_border-color: var(--ui-select-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
2863
- --_border-color-focus: var(--ui-select-border-color-focus, var(--ui-color-primary, oklch(55% 0.22 250deg)));
2864
- --_text: var(--ui-select-text, var(--ui-color-text, hsl(220, 10%, 10%)));
2865
- --_icon-color: var(--ui-select-icon-color, var(--ui-color-text-muted, hsl(220, 10%, 45%)));
2866
- }
2867
- .select--sm {
2868
- --_height: var(--ui-select-height-sm, calc(1rem * 1.5));
2869
- --_font-size: var(--ui-select-font-size-sm, var(--ui-font-size-xs, 0.75rem));
2870
- }
2871
- .select--lg {
2872
- --_height: var(--ui-select-height-lg, calc(1rem * 2.5));
2873
- --_padding-x: var(--ui-select-padding-x-lg, var(--ui-space-2, 1rem));
2874
- --_font-size: var(--ui-select-font-size-lg, var(--ui-font-size-md, 1rem));
2875
- }
2876
- .select--filled {
2877
- --_bg: var(--ui-select-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
2878
- --_border-color: transparent;
2879
- }
2880
- .select--ghost {
2881
- --_bg: transparent;
2882
- --_border-color: transparent;
2883
- }
2884
- .select--error {
2885
- --_border-color: var(--ui-select-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2886
- --_border-color-focus: var(--ui-select-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
2887
- }
2888
- .select--success {
2889
- --_border-color: var(--ui-select-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2890
- --_border-color-focus: var(--ui-select-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
2891
- }
2892
- }
2893
- @layer components.styles {
2894
- .select {
2895
- display: inline-block;
2896
- block-size: var(--_height);
2897
- padding-inline-start: var(--_padding-x);
2898
- padding-inline-end: calc(var(--_height) - var(--ui-space-half, 0.25rem));
2899
- font-family: inherit;
2900
- font-size: var(--_font-size);
2901
- line-height: 1;
2902
- color: var(--_text);
2903
- background-color: var(--_bg);
2904
- 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");
2905
- border: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
2906
- border-radius: var(--_radius);
2907
- cursor: pointer;
2908
- appearance: none;
2909
- 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);
2910
- background-repeat: no-repeat;
2911
- background-position: right var(--ui-space-half, 0.25rem) center;
2912
- background-size: calc(var(--_height) * 0.5);
2913
- }
2914
- .select:hover:not(:disabled, :focus) {
2915
- border-color: var(--ui-color-border-strong, hsl(220, 10%, 80%));
2916
- }
2917
- .select:focus, .select--focus {
2918
- border-color: var(--_border-color-focus);
2919
- outline: none;
2920
- box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, oklch(75% 0.15 250deg));
2921
- }
2922
- .select:disabled, .select--disabled {
2923
- opacity: 0.5;
2924
- cursor: not-allowed;
2925
- }
2926
- .select--block {
2927
- inline-size: 100%;
2928
- }
2929
- .select:invalid, .select--placeholder {
2930
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
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%)));
2931
2794
  }
2932
- }
2933
- @layer components.tokens {
2934
- .skeleton {
2935
- --_bg: var(--ui-skeleton-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
2936
- --_shimmer: var(--ui-skeleton-shimmer, rgb(255 255 255 / 0.5));
2937
- --_radius: var(--ui-skeleton-radius, var(--ui-radius-sm, calc(0.5rem / 2)));
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%)));
2938
2799
  }
2939
2800
  }
2940
2801
  @layer components.styles {
2941
- .skeleton {
2942
- display: block;
2943
- position: relative;
2944
- overflow: hidden;
2945
- background: var(--_bg);
2946
- border-radius: var(--_radius);
2947
- }
2948
- .skeleton::after {
2949
- content: "";
2950
- position: absolute;
2951
- inset: 0;
2952
- background: linear-gradient(90deg, transparent 0%, var(--_shimmer) 50%, transparent 100%);
2953
- animation: skeleton-shimmer 1.5s infinite;
2954
- transform: translateX(-100%);
2955
- }
2956
- @keyframes skeleton-shimmer {
2957
- 100% {
2958
- transform: translateX(100%);
2959
- }
2960
- }
2961
- .skeleton--text {
2962
- block-size: calc(0.5rem * 2);
2963
- inline-size: 100%;
2964
- }
2965
- .skeleton--heading {
2966
- block-size: calc(0.5rem * 3);
2967
- inline-size: 60%;
2968
- }
2969
- .skeleton--circle {
2970
- block-size: calc(0.5rem * 5);
2971
- inline-size: calc(0.5rem * 5);
2972
- border-radius: 50%;
2973
- }
2974
- .skeleton--rect {
2975
- block-size: calc(0.5rem * 20);
2976
- inline-size: 100%;
2977
- }
2978
- .skeleton--static::after {
2979
- animation: none;
2980
- }
2981
- .skeleton--pulse {
2982
- animation: skeleton-pulse 1.5s infinite ease-in-out;
2802
+ .nav__list {
2803
+ display: flex;
2804
+ align-items: stretch;
2805
+ gap: var(--_gap);
2806
+ box-sizing: border-box;
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);
2983
2812
  }
2984
- .skeleton--pulse::after {
2985
- display: none;
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);
2986
2831
  }
2987
- @keyframes skeleton-pulse {
2988
- 0%, 100% {
2989
- opacity: 1;
2990
- }
2991
- 50% {
2992
- opacity: 0.5;
2993
- }
2832
+ .nav__item:hover {
2833
+ color: var(--_item-color-hover);
2994
2834
  }
2995
- }
2996
- @layer components.tokens {
2997
- .spinner {
2998
- --_size: var(--ui-spinner-size, calc(var(--unit) * 4));
2999
- --_border-width: var(--ui-spinner-border-width, var(--ui-border-width-md));
3000
- --_color: var(--ui-spinner-color, currentcolor);
3001
- --_track-color: var(--ui-spinner-track-color, transparent);
3002
- --_duration: var(--ui-spinner-duration, 750ms);
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);
3003
2838
  }
3004
- .spinner--xs {
3005
- --_size: var(--ui-spinner-size-xs, calc(var(--unit) * 2));
3006
- --_border-width: var(--ui-spinner-border-width-xs, var(--ui-border-width-sm));
2839
+ .nav__item--disabled {
2840
+ opacity: 0.5;
2841
+ pointer-events: none;
3007
2842
  }
3008
- .spinner--sm {
3009
- --_size: var(--ui-spinner-size-sm, calc(var(--unit) * 3));
3010
- --_border-width: var(--ui-spinner-border-width-sm, var(--ui-border-width-md));
2843
+ .nav--pills .nav__list {
2844
+ box-shadow: none;
3011
2845
  }
3012
- .spinner--lg {
3013
- --_size: var(--ui-spinner-size-lg, calc(var(--unit) * 5));
3014
- --_border-width: var(--ui-spinner-border-width-lg, var(--ui-border-width-md));
2846
+ .nav--pills .nav__item {
2847
+ border-radius: var(--_item-radius);
2848
+ box-shadow: none;
3015
2849
  }
3016
- .spinner--xl {
3017
- --_size: var(--ui-spinner-size-xl, calc(var(--unit) * 6));
3018
- --_border-width: var(--ui-spinner-border-width-xl, var(--ui-border-width-lg));
2850
+ .nav--pills .nav__item:hover {
2851
+ background: var(--_item-bg-hover);
3019
2852
  }
3020
- }
3021
- @layer components.styles {
3022
- .spinner {
3023
- display: inline-block;
3024
- flex-shrink: 0;
3025
- box-sizing: border-box;
3026
- block-size: var(--_size);
3027
- inline-size: var(--_size);
3028
- vertical-align: middle;
3029
- border: var(--_border-width) solid var(--_track-color);
3030
- border-radius: 50%;
3031
- border-block-start-color: var(--_color);
3032
- animation: spinner-rotate var(--_duration) linear infinite;
2853
+ .nav--pills .nav__item--active {
2854
+ color: var(--_item-color-active);
2855
+ background: var(--_item-bg-active);
3033
2856
  }
3034
- @keyframes spinner-rotate {
3035
- to {
3036
- transform: rotate(360deg);
3037
- }
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);
3038
2862
  }
3039
- }
3040
- @layer components.tokens {
3041
- .status {
3042
- --_size: var(--ui-status-size, calc(0.5rem * 1));
3043
- --_color: var(--ui-status-color, var(--ui-color-text-muted));
3044
- --_gap: var(--ui-status-gap, calc(0.5rem * 1));
2863
+ .nav--vertical .nav__item {
2864
+ box-shadow: inset calc(var(--ui-border-width-md, 0.125rem) * -1) 0 0 transparent;
3045
2865
  }
3046
- .status--success {
3047
- --_color: var(--ui-color-success);
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);
3048
2868
  }
3049
- .status--warning {
3050
- --_color: var(--ui-color-warning);
2869
+ .nav--vertical.nav--pills .nav__list {
2870
+ box-shadow: none;
3051
2871
  }
3052
- .status--danger {
3053
- --_color: var(--ui-color-danger);
2872
+ .nav--vertical.nav--pills .nav__item {
2873
+ box-shadow: none;
3054
2874
  }
3055
- .status--info {
3056
- --_color: var(--ui-color-primary);
2875
+ }
2876
+ @layer components.tokens {
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%)));
3057
2886
  }
3058
2887
  }
3059
2888
  @layer components.styles {
3060
- .status {
3061
- display: inline-flex;
2889
+ .pagination {
2890
+ display: flex;
3062
2891
  align-items: center;
3063
2892
  gap: var(--_gap);
3064
2893
  }
3065
- .status__dot {
3066
- flex-shrink: 0;
3067
- block-size: var(--_size);
3068
- inline-size: var(--_size);
3069
- background: var(--_color);
3070
- border-radius: 50%;
3071
- }
3072
- .status--pulse .status__dot {
3073
- position: relative;
3074
- }
3075
- .status--pulse .status__dot::before {
3076
- content: "";
3077
- position: absolute;
3078
- inset: 0;
3079
- background: var(--_color);
3080
- border-radius: 50%;
3081
- animation: status-pulse 2s infinite;
3082
- }
3083
- @keyframes status-pulse {
3084
- 0% {
3085
- opacity: 1;
3086
- transform: scale(1);
3087
- }
3088
- 100% {
3089
- opacity: 0;
3090
- transform: scale(2.5);
3091
- }
2894
+ .pagination__list {
2895
+ display: flex;
2896
+ align-items: center;
2897
+ gap: var(--_gap);
2898
+ padding: 0;
2899
+ margin: 0;
2900
+ list-style: none;
3092
2901
  }
3093
- .status--sm {
3094
- --_size: calc(0.5rem * 0.75);
3095
- --_gap: calc(0.5rem * 0.75);
2902
+ .pagination__item {
2903
+ display: flex;
3096
2904
  }
3097
- .status--lg {
3098
- --_size: calc(0.5rem * 1.5);
3099
- --_gap: calc(0.5rem * 1.5);
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);
3100
2918
  }
3101
- }
3102
- @layer components.tokens {
3103
- .table {
3104
- --_font-size: var(--ui-table-font-size, var(--ui-font-size-sm, 0.875rem));
3105
- --_border-color: var(--ui-table-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
3106
- --_header-bg: var(--ui-table-header-bg, var(--ui-color-bg-subtle, hsl(220, 10%, 96%)));
3107
- --_cell-padding-x: var(--ui-table-cell-padding-x, var(--ui-space-2, 1rem));
3108
- --_cell-padding-y: var(--ui-table-cell-padding-y, var(--ui-space-1, 0.5rem));
2919
+ .pagination__link:hover {
2920
+ background: var(--_item-bg-hover);
3109
2921
  }
3110
- .table--compact {
3111
- --_cell-padding-y: var(--ui-space-0, 0.25rem);
3112
- --_cell-padding-x: var(--ui-space-1, 0.5rem);
3113
- --_font-size: var(--ui-font-size-xs, 0.75rem);
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;
3114
2927
  }
3115
- }
3116
- @layer components.styles {
3117
- .table {
3118
- inline-size: 100%;
3119
- font-size: var(--_font-size);
3120
- border-collapse: separate;
3121
- border-spacing: 0;
2928
+ .pagination__link[aria-disabled=true],
2929
+ .pagination__link--disabled {
2930
+ opacity: 0.5;
2931
+ pointer-events: none;
3122
2932
  }
3123
- .table th,
3124
- .table td {
3125
- padding-block-start: var(--_cell-padding-y);
3126
- padding-block-end: calc(var(--_cell-padding-y) - var(--ui-border-width-sm, 0.0625rem));
3127
- padding-inline: var(--_cell-padding-x);
3128
- line-height: calc(var(--unit, 0.5rem) * 3);
3129
- text-align: start;
3130
- border-block-end: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
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);
3131
2939
  }
3132
- .table th {
3133
- font-weight: var(--ui-weight-medium, 500);
3134
- background: var(--_header-bg);
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%));
3135
2947
  }
3136
- .table--striped tbody tr:nth-child(odd) {
3137
- background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
2948
+ .pagination--sm {
2949
+ --_item-size: calc(0.5rem * 3);
2950
+ --_gap: calc(0.5rem * 0.25);
3138
2951
  }
3139
- .table--striped th {
3140
- 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);
3141
2955
  }
3142
2956
  }
3143
2957
  @layer components.tokens {
@@ -3178,398 +2992,442 @@
3178
2992
  transition: color var(--ui-duration-base) var(--ui-ease-default), box-shadow var(--ui-duration-base) var(--ui-ease-default);
3179
2993
  }
3180
2994
  .tabs__tab:hover {
3181
- color: var(--ui-color-text, hsl(220, 10%, 10%));
3182
- }
3183
- .tabs__tab--active {
3184
- color: var(--ui-color-primary, oklch(55% 0.22 250deg));
3185
- background: var(--_tab-bg-active);
3186
- box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 var(--ui-color-primary, oklch(55% 0.22 250deg));
3187
- }
3188
- .tabs__panel {
3189
- display: none;
3190
- padding: var(--_panel-padding);
3191
- line-height: var(--ui-row-1, 1rem);
3192
- }
3193
- .tabs__panel--active {
3194
- display: block;
3195
- }
3196
- }
3197
- @layer components.tokens {
3198
- .tag {
3199
- --_height: var(--ui-tag-height, calc(0.5rem * 3));
3200
- --_padding-x: var(--ui-tag-padding-x, var(--ui-space-1, 0.5rem));
3201
- --_gap: var(--ui-tag-gap, calc(0.5rem * 0.5));
3202
- --_radius: var(--ui-tag-radius, var(--ui-radius-full, 9999px));
3203
- --_font-size: var(--ui-tag-font-size, var(--ui-font-size-sm, 0.875rem));
3204
- --_bg: var(--ui-tag-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
3205
- --_color: var(--ui-tag-color, var(--ui-color-text, hsl(220, 10%, 10%)));
3206
- }
3207
- .tag--sm {
3208
- --_height: var(--ui-tag-height-sm, calc(0.5rem * 2.5));
3209
- --_padding-x: var(--ui-tag-padding-x-sm, calc(0.5rem * 1));
3210
- --_font-size: var(--ui-tag-font-size-sm, var(--ui-font-size-xs, 0.75rem));
2995
+ color: var(--ui-color-text, hsl(220, 10%, 10%));
3211
2996
  }
3212
- .tag--primary {
3213
- --_bg: var(--ui-tag-primary-bg, var(--ui-color-primary, oklch(55% 0.22 250deg)));
3214
- --_color: var(--ui-tag-primary-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
2997
+ .tabs__tab--active {
2998
+ color: var(--ui-color-primary, oklch(55% 0.22 250deg));
2999
+ background: var(--_tab-bg-active);
3000
+ box-shadow: inset 0 calc(var(--ui-border-width-md, 0.125rem) * -1) 0 var(--ui-color-primary, oklch(55% 0.22 250deg));
3215
3001
  }
3216
- .tag--success {
3217
- --_bg: var(--ui-tag-success-bg, var(--ui-color-success, oklch(60% 0.18 145deg)));
3218
- --_color: var(--ui-tag-success-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3002
+ .tabs__panel {
3003
+ display: none;
3004
+ padding: var(--_panel-padding);
3005
+ line-height: var(--ui-row-1, 1rem);
3219
3006
  }
3220
- .tag--warning {
3221
- --_bg: var(--ui-tag-warning-bg, var(--ui-color-warning, oklch(75% 0.18 70deg)));
3222
- --_color: var(--ui-tag-warning-color, var(--ui-color-text, hsl(220, 10%, 10%)));
3007
+ .tabs__panel--active {
3008
+ display: block;
3223
3009
  }
3224
- .tag--danger {
3225
- --_bg: var(--ui-tag-danger-bg, var(--ui-color-danger, oklch(60% 0.22 25deg)));
3226
- --_color: var(--ui-tag-danger-color, var(--ui-color-text-inverse, hsl(220, 10%, 98%)));
3010
+ }
3011
+ @layer components.tokens {
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)));
3227
3017
  }
3228
3018
  }
3229
3019
  @layer components.styles {
3230
- .tag {
3231
- display: inline-flex;
3020
+ .dialog .modal__content {
3021
+ padding: 0;
3022
+ }
3023
+ .dialog__header {
3024
+ display: flex;
3025
+ flex-shrink: 0;
3232
3026
  align-items: center;
3233
- gap: var(--_gap);
3234
- block-size: var(--_height);
3235
- padding-inline: var(--_padding-x);
3236
- font-size: var(--_font-size);
3237
- font-weight: var(--ui-weight-medium, 500);
3238
- line-height: 1;
3239
- white-space: nowrap;
3240
- color: var(--_color);
3241
- background: var(--_bg);
3242
- 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);
3243
3031
  }
3244
- .tag:disabled, .tag[aria-disabled=true] {
3245
- opacity: 0.5;
3246
- 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);
3247
3037
  }
3248
- .tag__remove {
3249
- display: inline-flex;
3038
+ .dialog__close {
3250
3039
  flex-shrink: 0;
3251
- align-items: center;
3252
- justify-content: center;
3253
- padding: 0;
3254
- margin-inline-start: calc(var(--_gap) * -0.5);
3255
- color: currentcolor;
3256
- background: none;
3257
- border: none;
3258
- opacity: 0.7;
3259
- cursor: pointer;
3040
+ margin-inline-start: auto;
3260
3041
  }
3261
- .tag__remove:hover {
3262
- opacity: 1;
3042
+ .dialog__body {
3043
+ flex: 1 1 auto;
3044
+ padding: var(--_body-padding);
3045
+ overflow-y: auto;
3263
3046
  }
3264
- .tag-group {
3047
+ .dialog__footer {
3265
3048
  display: flex;
3266
- flex-wrap: wrap;
3267
- 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;
3268
3061
  }
3269
3062
  }
3270
3063
  @layer components.tokens {
3271
- .textarea {
3272
- --_min-height: var(--ui-textarea-min-height, calc(1rem * 4));
3273
- --_padding-x: var(--ui-textarea-padding-x, var(--ui-space-1, 0.5rem));
3274
- --_padding-y: var(--ui-textarea-padding-y, var(--ui-space-1, 0.5rem));
3275
- --_font-size: var(--ui-textarea-font-size, var(--ui-font-size-sm, 0.875rem));
3276
- --_radius: var(--ui-textarea-radius, var(--ui-radius-md, 0.5rem));
3277
- --_bg: var(--ui-textarea-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
3278
- --_border-color: var(--ui-textarea-border-color, var(--ui-color-border-strong, hsl(220, 10%, 80%)));
3279
- --_border-color-focus: var(--ui-textarea-border-color-focus, var(--ui-color-primary, oklch(55% 0.22 250deg)));
3280
- --_text: var(--ui-textarea-text, var(--ui-color-text, hsl(220, 10%, 10%)));
3281
- --_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%)));
3282
3073
  }
3283
- .textarea--sm {
3284
- --_min-height: var(--ui-textarea-min-height-sm, calc(1rem * 3));
3285
- --_font-size: var(--ui-textarea-font-size-sm, var(--ui-font-size-xs, 0.75rem));
3074
+ .drawer--sm {
3075
+ --_size: calc(0.5rem * 30);
3286
3076
  }
3287
- .textarea--lg {
3288
- --_min-height: var(--ui-textarea-min-height-lg, calc(1rem * 6));
3289
- --_padding-x: var(--ui-textarea-padding-x-lg, var(--ui-space-2, 1rem));
3290
- --_padding-y: var(--ui-textarea-padding-y-lg, var(--ui-space-2, 1rem));
3291
- --_font-size: var(--ui-textarea-font-size-lg, var(--ui-font-size-md, 1rem));
3077
+ .drawer--lg {
3078
+ --_size: calc(0.5rem * 50);
3292
3079
  }
3293
- .textarea--filled {
3294
- --_bg: var(--ui-textarea-filled-bg, var(--ui-color-bg-muted, hsl(220, 10%, 90%)));
3295
- --_border-color: transparent;
3080
+ .drawer--full {
3081
+ --_size: 100%;
3082
+ --_max-size: 100%;
3296
3083
  }
3297
- .textarea--ghost {
3298
- --_bg: transparent;
3299
- --_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));
3300
3091
  }
3301
- .textarea--error {
3302
- --_border-color: var(--ui-textarea-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
3303
- --_border-color-focus: var(--ui-textarea-error-border, var(--ui-color-danger, oklch(60% 0.22 25deg)));
3092
+ .drawer-overlay[data-state=open] {
3093
+ animation: drawer-overlay-in var(--ui-duration-normal, 200ms) var(--ui-ease-out, ease-out);
3304
3094
  }
3305
- .textarea--success {
3306
- --_border-color: var(--ui-textarea-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
3307
- --_border-color-focus: var(--ui-textarea-success-border, var(--ui-color-success, oklch(60% 0.18 145deg)));
3095
+ .drawer-overlay[data-state=closed] {
3096
+ animation: drawer-overlay-out var(--ui-duration-fast, 100ms) var(--ui-ease-in, ease-in);
3308
3097
  }
3309
- }
3310
- @layer components.styles {
3311
- .textarea {
3312
- display: block;
3313
- box-sizing: border-box;
3314
- inline-size: 100%;
3315
- min-block-size: var(--_min-height);
3316
- padding-block: var(--_padding-y);
3317
- padding-inline: var(--_padding-x);
3318
- font-family: inherit;
3319
- font-size: var(--_font-size);
3320
- line-height: var(--ui-row-1, 1rem);
3321
- color: var(--_text);
3322
- background: var(--_bg);
3323
- border: none;
3324
- border-radius: var(--_radius);
3325
- outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3326
- 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);
3327
- outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
3328
- resize: vertical;
3098
+ @keyframes drawer-overlay-in {
3099
+ from {
3100
+ opacity: 0;
3101
+ }
3329
3102
  }
3330
- .textarea::placeholder {
3331
- color: var(--_placeholder);
3103
+ @keyframes drawer-overlay-out {
3104
+ to {
3105
+ opacity: 0;
3106
+ }
3332
3107
  }
3333
- .textarea:hover:not(:disabled, :focus) {
3334
- 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);
3335
3115
  }
3336
- .textarea:focus, .textarea--focus {
3337
- outline-color: var(--_border-color-focus);
3338
- box-shadow: 0 0 0 var(--ui-border-width-md, 0.125rem) var(--ui-color-focus, oklch(75% 0.15 250deg));
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);
3339
3122
  }
3340
- .textarea:disabled, .textarea--disabled {
3341
- opacity: 0.5;
3342
- cursor: not-allowed;
3343
- 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);
3344
3129
  }
3345
- .textarea:read-only {
3346
- background: var(--ui-color-bg-subtle, hsl(220, 10%, 96%));
3347
- 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);
3348
3136
  }
3349
- .textarea--resize-none {
3350
- 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);
3351
3143
  }
3352
- .textarea--resize-horizontal {
3353
- 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);
3354
3146
  }
3355
- .textarea--resize-both {
3356
- 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);
3357
3149
  }
3358
- }
3359
- @layer components.tokens {
3360
- .toast-viewport {
3361
- --_gap: var(--ui-toast-viewport-gap, calc(0.5rem * 1));
3362
- --_padding: var(--ui-toast-viewport-padding, calc(0.5rem * 2));
3363
- --_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);
3364
3152
  }
3365
- .toast {
3366
- --_padding: var(--ui-toast-padding, calc(0.5rem * 2));
3367
- --_gap: var(--ui-toast-gap, calc(0.5rem * 1));
3368
- --_radius: var(--ui-toast-radius, var(--ui-radius-md, 0.5rem));
3369
- --_bg: var(--ui-toast-bg, var(--ui-color-bg, hsl(220, 10%, 98%)));
3370
- --_border-color: var(--ui-toast-border-color, var(--ui-color-border, hsl(220, 10%, 90%)));
3371
- --_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);
3372
3158
  }
3373
- .toast--success {
3374
- --_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);
3375
3161
  }
3376
- .toast--warning {
3377
- --_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);
3378
3164
  }
3379
- .toast--danger {
3380
- --_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);
3381
3167
  }
3382
- .toast--info {
3383
- --_border-color: var(--ui-color-primary);
3168
+ @keyframes drawer-slide-in-end {
3169
+ from {
3170
+ transform: translateX(100%);
3171
+ }
3384
3172
  }
3385
- }
3386
- @layer components.styles {
3387
- .toast-viewport {
3388
- display: flex;
3389
- flex-direction: column;
3390
- gap: var(--_gap);
3391
- position: fixed;
3392
- z-index: var(--ui-z-toast, 1000);
3393
- max-inline-size: var(--_max-width);
3394
- padding: var(--_padding);
3395
- pointer-events: none;
3396
- list-style: none;
3173
+ @keyframes drawer-slide-out-end {
3174
+ to {
3175
+ transform: translateX(100%);
3176
+ }
3397
3177
  }
3398
- .toast-viewport--top-end {
3399
- inset-block-start: 0;
3400
- inset-inline-end: 0;
3178
+ @keyframes drawer-slide-in-start {
3179
+ from {
3180
+ transform: translateX(-100%);
3181
+ }
3401
3182
  }
3402
- .toast-viewport--top-start {
3403
- inset-block-start: 0;
3404
- inset-inline-start: 0;
3183
+ @keyframes drawer-slide-out-start {
3184
+ to {
3185
+ transform: translateX(-100%);
3186
+ }
3405
3187
  }
3406
- .toast-viewport--bottom-end {
3407
- inset-block-end: 0;
3408
- inset-inline-end: 0;
3188
+ @keyframes drawer-slide-in-top {
3189
+ from {
3190
+ transform: translateY(-100%);
3191
+ }
3409
3192
  }
3410
- .toast-viewport--bottom-start {
3411
- inset-block-end: 0;
3412
- inset-inline-start: 0;
3193
+ @keyframes drawer-slide-out-top {
3194
+ to {
3195
+ transform: translateY(-100%);
3196
+ }
3413
3197
  }
3414
- .toast-viewport--top-center {
3415
- inset-block-start: 0;
3416
- inset-inline-start: 50%;
3417
- transform: translateX(-50%);
3198
+ @keyframes drawer-slide-in-bottom {
3199
+ from {
3200
+ transform: translateY(100%);
3201
+ }
3418
3202
  }
3419
- .toast-viewport--bottom-center {
3420
- inset-block-end: 0;
3421
- inset-inline-start: 50%;
3422
- transform: translateX(-50%);
3203
+ @keyframes drawer-slide-out-bottom {
3204
+ to {
3205
+ transform: translateY(100%);
3206
+ }
3423
3207
  }
3424
- .toast {
3208
+ .drawer__header {
3425
3209
  display: flex;
3426
- align-items: flex-start;
3427
- gap: var(--_gap);
3428
- padding: var(--_padding);
3429
- background: var(--_bg);
3430
- border-radius: var(--_radius);
3431
- outline: var(--ui-border-width-sm, 0.0625rem) solid var(--_border-color);
3432
- box-shadow: var(--_shadow);
3433
- pointer-events: auto;
3434
- outline-offset: calc(var(--ui-border-width-sm, 0.0625rem) * -1);
3435
- }
3436
- .toast__icon {
3437
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);
3438
3216
  }
3439
- .toast__content {
3440
- flex: 1;
3441
- min-inline-size: 0;
3442
- }
3443
- .toast__title {
3217
+ .drawer__title {
3444
3218
  margin: 0;
3445
- 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);
3446
3221
  line-height: var(--ui-row-1, 1rem);
3447
3222
  }
3448
- .toast__description {
3223
+ .drawer__description {
3449
3224
  margin: 0;
3450
3225
  font-size: var(--ui-font-size-sm, 0.875rem);
3451
3226
  line-height: var(--ui-row-1, 1rem);
3452
3227
  color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
3453
3228
  }
3454
- .toast__action {
3229
+ .drawer__close {
3455
3230
  flex-shrink: 0;
3231
+ margin-inline-start: auto;
3456
3232
  }
3457
- .toast__close {
3458
- 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;
3459
3241
  flex-shrink: 0;
3460
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;
3461
3275
  justify-content: center;
3462
- block-size: var(--ui-row-1, 1rem);
3463
- inline-size: var(--ui-row-1, 1rem);
3464
- padding: 0;
3465
- color: var(--ui-color-text-muted, hsl(220, 10%, 45%));
3466
- background: none;
3467
- border: none;
3468
- cursor: pointer;
3276
+ position: fixed;
3277
+ inset: 0;
3278
+ z-index: var(--_z);
3279
+ padding: calc(0.5rem * 2);
3469
3280
  }
3470
- .toast__close:hover {
3471
- 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);
3472
3293
  }
3473
- .toast[data-state=open] {
3474
- 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;
3475
3297
  }
3476
- .toast[data-state=closed] {
3477
- 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);
3478
3302
  }
3479
- @keyframes toast-slide-in {
3480
- from {
3481
- opacity: 0;
3482
- transform: translateX(100%);
3483
- }
3303
+ .modal--exiting .modal__content,
3304
+ .modal--hidden .modal__content {
3305
+ opacity: 0;
3306
+ transform: scale(0.95);
3484
3307
  }
3485
- @keyframes toast-slide-out {
3486
- to {
3487
- opacity: 0;
3488
- transform: translateX(100%);
3489
- }
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;
3490
3314
  }
3491
3315
  }
3492
3316
  @layer components.tokens {
3493
- .toggle {
3494
- --_track-width: var(--ui-toggle-track-width, calc(0.5rem * 5));
3495
- --_track-height: var(--ui-toggle-track-height, calc(0.5rem * 3));
3496
- --_track-bg: var(--ui-toggle-track-bg, var(--ui-color-bg-subtle, rgb(0 0 0 / 0.1)));
3497
- --_track-bg-checked: var(--ui-toggle-track-bg-checked, var(--ui-color-primary));
3498
- --_track-radius: var(--ui-toggle-track-radius, calc(0.5rem * 1.5));
3499
- --_thumb-size: var(--ui-toggle-thumb-size, calc(0.5rem * 2.5));
3500
- --_thumb-bg: var(--ui-toggle-thumb-bg, white);
3501
- --_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));
3502
3320
  }
3503
- .toggle--sm {
3504
- --_track-width: calc(0.5rem * 4);
3505
- --_track-height: calc(0.5rem * 2);
3506
- --_track-radius: 0.5rem;
3507
- --_thumb-size: calc(0.5rem * 1.5);
3321
+ .overlay--light {
3322
+ --_bg: var(--ui-overlay-bg-light, rgb(255 255 255 / 0.7));
3508
3323
  }
3509
- .toggle--lg {
3510
- --_track-width: calc(0.5rem * 6);
3511
- --_track-height: calc(0.5rem * 4);
3512
- --_track-radius: calc(0.5rem * 2);
3513
- --_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);
3514
3349
  }
3515
3350
  }
3516
- @layer components.styles {
3517
- .toggle {
3518
- display: inline-flex;
3519
- flex-shrink: 0;
3520
- align-items: center;
3521
- position: relative;
3522
- block-size: var(--_track-height);
3523
- inline-size: var(--_track-width);
3524
- background: var(--_track-bg);
3525
- border-radius: var(--_track-radius);
3526
- cursor: pointer;
3527
- 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));
3528
3361
  }
3529
- .toggle__input {
3362
+ }
3363
+ @layer components.styles {
3364
+ .popover {
3530
3365
  position: absolute;
3531
- inset: 0;
3532
- block-size: 100%;
3533
- 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 {
3534
3382
  margin: 0;
3535
- opacity: 0;
3536
- cursor: pointer;
3383
+ font-size: var(--ui-font-size-md, 1rem);
3384
+ font-weight: var(--ui-weight-semibold, 600);
3537
3385
  }
3538
- .toggle__track {
3386
+ .popover--top::after {
3387
+ content: "";
3539
3388
  position: absolute;
3540
- inset: 0;
3541
- background: var(--_track-bg);
3542
- border-radius: var(--_track-radius);
3543
- 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%);
3544
3394
  }
3545
- .toggle__thumb {
3395
+ .popover--top::before {
3396
+ content: "";
3546
3397
  position: absolute;
3547
- inset-block-start: var(--_thumb-offset);
3548
- inset-inline-start: var(--_thumb-offset);
3549
- block-size: var(--_thumb-size);
3550
- inline-size: var(--_thumb-size);
3551
- background: var(--_thumb-bg);
3552
- border-radius: 50%;
3553
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
3554
- 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%);
3555
3403
  }
3556
- .toggle__input:checked ~ .toggle__track {
3557
- 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%);
3558
3412
  }
3559
- .toggle__input:checked ~ .toggle__thumb {
3560
- 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%);
3561
3421
  }
3562
- .toggle__input:focus-visible ~ .toggle__track {
3563
- outline: 2px solid var(--ui-color-focus, var(--ui-color-primary));
3564
- outline-offset: calc(0.5rem / 4);
3422
+ .popover--visible {
3423
+ opacity: 1;
3565
3424
  }
3566
- .toggle__input:disabled ~ .toggle__track,
3567
- .toggle__input:disabled ~ .toggle__thumb {
3568
- opacity: 0.5;
3569
- cursor: not-allowed;
3425
+ .popover--hidden {
3426
+ opacity: 0;
3427
+ pointer-events: none;
3570
3428
  }
3571
- .toggle:has(.toggle__input:disabled) {
3572
- cursor: not-allowed;
3429
+ .popover--animate {
3430
+ transition: opacity var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3573
3431
  }
3574
3432
  }
3575
3433
  @layer components.tokens {
@@ -3645,6 +3503,148 @@
3645
3503
  transition: opacity var(--ui-duration-fast, 100ms) var(--ui-ease-default, ease);
3646
3504
  }
3647
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
+ }
3648
3648
  /* 05. Utilities (high specificity, load last) */
3649
3649
  /* Spacing utilities - all values align to 8px grid */
3650
3650
  /* Uses logical properties for international/RTL support */
@@ -4496,7 +4496,6 @@
4496
4496
  }
4497
4497
  }
4498
4498
  /* 99. Debug tools (dev only) */
4499
- /* Debug grid overlay - add class="debug-grid" to body or any container */
4500
4499
  .debug-grid,
4501
4500
  .debug-grid-rows,
4502
4501
  .debug-baseline {
@@ -4504,7 +4503,7 @@
4504
4503
  }
4505
4504
 
4506
4505
  .debug-grid {
4507
- --debug-color: hsl(var(--ui-hue-primary) 80% 50% / 0.15);
4506
+ --debug-color: hsl(var(--ui-hue-primary, 220) 80% 50% / 0.15);
4508
4507
  }
4509
4508
 
4510
4509
  .debug-grid::after {
@@ -4522,10 +4521,9 @@
4522
4521
  background-position: 0 0;
4523
4522
  }
4524
4523
 
4525
- /* Stronger grid at row intervals (16px) */
4526
4524
  .debug-grid-rows {
4527
- --debug-color: hsl(var(--ui-hue-primary) 80% 50% / 0.1);
4528
- --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);
4529
4527
  }
4530
4528
 
4531
4529
  .debug-grid-rows::after {
@@ -4543,9 +4541,8 @@
4543
4541
  background-position: 0 0;
4544
4542
  }
4545
4543
 
4546
- /* Baseline grid only (horizontal lines) */
4547
4544
  .debug-baseline {
4548
- --debug-color: hsl(var(--ui-hue-danger) 80% 50% / 0.2);
4545
+ --debug-color: hsl(var(--ui-hue-danger, 0) 80% 50% / 0.2);
4549
4546
  }
4550
4547
 
4551
4548
  .debug-baseline::after {
@@ -4562,7 +4559,6 @@
4562
4559
  background-size: 100% var(--unit);
4563
4560
  }
4564
4561
 
4565
- /* Element boundaries outline */
4566
4562
  .debug-outline * {
4567
4563
  outline: 1px solid hsla(0, 100%, 50%, 0.5);
4568
4564
  }