@unisane/ui 0.1.0-next.b67ebfd0

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 (533) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -0
  3. package/dist/components/accordion.d.ts +30 -0
  4. package/dist/components/accordion.d.ts.map +1 -0
  5. package/dist/components/accordion.js +47 -0
  6. package/dist/components/accordion.js.map +1 -0
  7. package/dist/components/alert.d.ts +13 -0
  8. package/dist/components/alert.d.ts.map +1 -0
  9. package/dist/components/alert.js +33 -0
  10. package/dist/components/alert.js.map +1 -0
  11. package/dist/components/avatar.d.ts +20 -0
  12. package/dist/components/avatar.d.ts.map +1 -0
  13. package/dist/components/avatar.js +38 -0
  14. package/dist/components/avatar.js.map +1 -0
  15. package/dist/components/badge.d.ts +19 -0
  16. package/dist/components/badge.d.ts.map +1 -0
  17. package/dist/components/badge.js +92 -0
  18. package/dist/components/badge.js.map +1 -0
  19. package/dist/components/banner.d.ts +24 -0
  20. package/dist/components/banner.d.ts.map +1 -0
  21. package/dist/components/banner.js +43 -0
  22. package/dist/components/banner.js.map +1 -0
  23. package/dist/components/bottom-app-bar.d.ts +34 -0
  24. package/dist/components/bottom-app-bar.d.ts.map +1 -0
  25. package/dist/components/bottom-app-bar.js +32 -0
  26. package/dist/components/bottom-app-bar.js.map +1 -0
  27. package/dist/components/breadcrumb.d.ts +26 -0
  28. package/dist/components/breadcrumb.d.ts.map +1 -0
  29. package/dist/components/breadcrumb.js +23 -0
  30. package/dist/components/breadcrumb.js.map +1 -0
  31. package/dist/components/button.d.ts +20 -0
  32. package/dist/components/button.d.ts.map +1 -0
  33. package/dist/components/button.js +66 -0
  34. package/dist/components/button.js.map +1 -0
  35. package/dist/components/calendar.d.ts +14 -0
  36. package/dist/components/calendar.d.ts.map +1 -0
  37. package/dist/components/calendar.js +178 -0
  38. package/dist/components/calendar.js.map +1 -0
  39. package/dist/components/canonical-layouts.d.ts +36 -0
  40. package/dist/components/canonical-layouts.d.ts.map +1 -0
  41. package/dist/components/canonical-layouts.js +49 -0
  42. package/dist/components/canonical-layouts.js.map +1 -0
  43. package/dist/components/card.d.ts +20 -0
  44. package/dist/components/card.d.ts.map +1 -0
  45. package/dist/components/card.js +70 -0
  46. package/dist/components/card.js.map +1 -0
  47. package/dist/components/carousel.d.ts +42 -0
  48. package/dist/components/carousel.d.ts.map +1 -0
  49. package/dist/components/carousel.js +225 -0
  50. package/dist/components/carousel.js.map +1 -0
  51. package/dist/components/checkbox.d.ts +10 -0
  52. package/dist/components/checkbox.d.ts.map +1 -0
  53. package/dist/components/checkbox.js +31 -0
  54. package/dist/components/checkbox.js.map +1 -0
  55. package/dist/components/chip.d.ts +27 -0
  56. package/dist/components/chip.d.ts.map +1 -0
  57. package/dist/components/chip.js +69 -0
  58. package/dist/components/chip.js.map +1 -0
  59. package/dist/components/combobox.d.ts +27 -0
  60. package/dist/components/combobox.d.ts.map +1 -0
  61. package/dist/components/combobox.js +261 -0
  62. package/dist/components/combobox.js.map +1 -0
  63. package/dist/components/command.d.ts +87 -0
  64. package/dist/components/command.d.ts.map +1 -0
  65. package/dist/components/command.js +31 -0
  66. package/dist/components/command.js.map +1 -0
  67. package/dist/components/confirm-dialog.d.ts +22 -0
  68. package/dist/components/confirm-dialog.d.ts.map +1 -0
  69. package/dist/components/confirm-dialog.js +72 -0
  70. package/dist/components/confirm-dialog.js.map +1 -0
  71. package/dist/components/date-input.d.ts +30 -0
  72. package/dist/components/date-input.d.ts.map +1 -0
  73. package/dist/components/date-input.js +334 -0
  74. package/dist/components/date-input.js.map +1 -0
  75. package/dist/components/date-picker.d.ts +13 -0
  76. package/dist/components/date-picker.d.ts.map +1 -0
  77. package/dist/components/date-picker.js +93 -0
  78. package/dist/components/date-picker.js.map +1 -0
  79. package/dist/components/date-range-picker.d.ts +29 -0
  80. package/dist/components/date-range-picker.d.ts.map +1 -0
  81. package/dist/components/date-range-picker.js +196 -0
  82. package/dist/components/date-range-picker.js.map +1 -0
  83. package/dist/components/dialog.d.ts +31 -0
  84. package/dist/components/dialog.d.ts.map +1 -0
  85. package/dist/components/dialog.js +58 -0
  86. package/dist/components/dialog.js.map +1 -0
  87. package/dist/components/divider.d.ts +8 -0
  88. package/dist/components/divider.d.ts.map +1 -0
  89. package/dist/components/divider.js +8 -0
  90. package/dist/components/divider.js.map +1 -0
  91. package/dist/components/drawer.d.ts +30 -0
  92. package/dist/components/drawer.d.ts.map +1 -0
  93. package/dist/components/drawer.js +27 -0
  94. package/dist/components/drawer.js.map +1 -0
  95. package/dist/components/dropdown-menu.d.ts +61 -0
  96. package/dist/components/dropdown-menu.d.ts.map +1 -0
  97. package/dist/components/dropdown-menu.js +572 -0
  98. package/dist/components/dropdown-menu.js.map +1 -0
  99. package/dist/components/fab-menu.d.ts +18 -0
  100. package/dist/components/fab-menu.d.ts.map +1 -0
  101. package/dist/components/fab-menu.js +56 -0
  102. package/dist/components/fab-menu.js.map +1 -0
  103. package/dist/components/fab.d.ts +25 -0
  104. package/dist/components/fab.d.ts.map +1 -0
  105. package/dist/components/fab.js +75 -0
  106. package/dist/components/fab.js.map +1 -0
  107. package/dist/components/field.d.ts +15 -0
  108. package/dist/components/field.d.ts.map +1 -0
  109. package/dist/components/field.js +14 -0
  110. package/dist/components/field.js.map +1 -0
  111. package/dist/components/icon-button.d.ts +27 -0
  112. package/dist/components/icon-button.d.ts.map +1 -0
  113. package/dist/components/icon-button.js +80 -0
  114. package/dist/components/icon-button.js.map +1 -0
  115. package/dist/components/icon.d.ts +18 -0
  116. package/dist/components/icon.d.ts.map +1 -0
  117. package/dist/components/icon.js +50 -0
  118. package/dist/components/icon.js.map +1 -0
  119. package/dist/components/list.d.ts +43 -0
  120. package/dist/components/list.d.ts.map +1 -0
  121. package/dist/components/list.js +74 -0
  122. package/dist/components/list.js.map +1 -0
  123. package/dist/components/mode-switcher.d.ts +9 -0
  124. package/dist/components/mode-switcher.d.ts.map +1 -0
  125. package/dist/components/mode-switcher.js +22 -0
  126. package/dist/components/mode-switcher.js.map +1 -0
  127. package/dist/components/month-picker.d.ts +22 -0
  128. package/dist/components/month-picker.d.ts.map +1 -0
  129. package/dist/components/month-picker.js +210 -0
  130. package/dist/components/month-picker.js.map +1 -0
  131. package/dist/components/navigation-bar.d.ts +8 -0
  132. package/dist/components/navigation-bar.d.ts.map +1 -0
  133. package/dist/components/navigation-bar.js +23 -0
  134. package/dist/components/navigation-bar.js.map +1 -0
  135. package/dist/components/navigation-drawer.d.ts +18 -0
  136. package/dist/components/navigation-drawer.d.ts.map +1 -0
  137. package/dist/components/navigation-drawer.js +64 -0
  138. package/dist/components/navigation-drawer.js.map +1 -0
  139. package/dist/components/navigation-rail.d.ts +13 -0
  140. package/dist/components/navigation-rail.d.ts.map +1 -0
  141. package/dist/components/navigation-rail.js +23 -0
  142. package/dist/components/navigation-rail.js.map +1 -0
  143. package/dist/components/pagination.d.ts +32 -0
  144. package/dist/components/pagination.d.ts.map +1 -0
  145. package/dist/components/pagination.js +68 -0
  146. package/dist/components/pagination.js.map +1 -0
  147. package/dist/components/pane-group.d.ts +9 -0
  148. package/dist/components/pane-group.d.ts.map +1 -0
  149. package/dist/components/pane-group.js +6 -0
  150. package/dist/components/pane-group.js.map +1 -0
  151. package/dist/components/popover.d.ts +26 -0
  152. package/dist/components/popover.d.ts.map +1 -0
  153. package/dist/components/popover.js +242 -0
  154. package/dist/components/popover.js.map +1 -0
  155. package/dist/components/progress.d.ts +15 -0
  156. package/dist/components/progress.d.ts.map +1 -0
  157. package/dist/components/progress.js +37 -0
  158. package/dist/components/progress.js.map +1 -0
  159. package/dist/components/radio.d.ts +9 -0
  160. package/dist/components/radio.d.ts.map +1 -0
  161. package/dist/components/radio.js +19 -0
  162. package/dist/components/radio.js.map +1 -0
  163. package/dist/components/rating.d.ts +19 -0
  164. package/dist/components/rating.d.ts.map +1 -0
  165. package/dist/components/rating.js +64 -0
  166. package/dist/components/rating.js.map +1 -0
  167. package/dist/components/ripple.d.ts +10 -0
  168. package/dist/components/ripple.d.ts.map +1 -0
  169. package/dist/components/ripple.js +44 -0
  170. package/dist/components/ripple.js.map +1 -0
  171. package/dist/components/scroll-area.d.ts +6 -0
  172. package/dist/components/scroll-area.d.ts.map +1 -0
  173. package/dist/components/scroll-area.js +6 -0
  174. package/dist/components/scroll-area.js.map +1 -0
  175. package/dist/components/search-bar.d.ts +12 -0
  176. package/dist/components/search-bar.d.ts.map +1 -0
  177. package/dist/components/search-bar.js +71 -0
  178. package/dist/components/search-bar.js.map +1 -0
  179. package/dist/components/segmented-button.d.ts +39 -0
  180. package/dist/components/segmented-button.d.ts.map +1 -0
  181. package/dist/components/segmented-button.js +162 -0
  182. package/dist/components/segmented-button.js.map +1 -0
  183. package/dist/components/select-field.d.ts +46 -0
  184. package/dist/components/select-field.d.ts.map +1 -0
  185. package/dist/components/select-field.js +56 -0
  186. package/dist/components/select-field.js.map +1 -0
  187. package/dist/components/select.d.ts +45 -0
  188. package/dist/components/select.d.ts.map +1 -0
  189. package/dist/components/select.js +356 -0
  190. package/dist/components/select.js.map +1 -0
  191. package/dist/components/sheet.d.ts +28 -0
  192. package/dist/components/sheet.d.ts.map +1 -0
  193. package/dist/components/sheet.js +122 -0
  194. package/dist/components/sheet.js.map +1 -0
  195. package/dist/components/sidebar/components/sidebar-drawer.d.ts +14 -0
  196. package/dist/components/sidebar/components/sidebar-drawer.d.ts.map +1 -0
  197. package/dist/components/sidebar/components/sidebar-drawer.js +60 -0
  198. package/dist/components/sidebar/components/sidebar-drawer.js.map +1 -0
  199. package/dist/components/sidebar/components/sidebar-inset.d.ts +6 -0
  200. package/dist/components/sidebar/components/sidebar-inset.d.ts.map +1 -0
  201. package/dist/components/sidebar/components/sidebar-inset.js +24 -0
  202. package/dist/components/sidebar/components/sidebar-inset.js.map +1 -0
  203. package/dist/components/sidebar/components/sidebar-navigation.d.ts +13 -0
  204. package/dist/components/sidebar/components/sidebar-navigation.d.ts.map +1 -0
  205. package/dist/components/sidebar/components/sidebar-navigation.js +40 -0
  206. package/dist/components/sidebar/components/sidebar-navigation.js.map +1 -0
  207. package/dist/components/sidebar/components/sidebar-rail.d.ts +5 -0
  208. package/dist/components/sidebar/components/sidebar-rail.d.ts.map +1 -0
  209. package/dist/components/sidebar/components/sidebar-rail.js +19 -0
  210. package/dist/components/sidebar/components/sidebar-rail.js.map +1 -0
  211. package/dist/components/sidebar/components/sidebar-shell.d.ts +13 -0
  212. package/dist/components/sidebar/components/sidebar-shell.d.ts.map +1 -0
  213. package/dist/components/sidebar/components/sidebar-shell.js +42 -0
  214. package/dist/components/sidebar/components/sidebar-shell.js.map +1 -0
  215. package/dist/components/sidebar/context/sidebar-provider.d.ts +5 -0
  216. package/dist/components/sidebar/context/sidebar-provider.d.ts.map +1 -0
  217. package/dist/components/sidebar/context/sidebar-provider.js +335 -0
  218. package/dist/components/sidebar/context/sidebar-provider.js.map +1 -0
  219. package/dist/components/sidebar/index.d.ts +11 -0
  220. package/dist/components/sidebar/index.d.ts.map +1 -0
  221. package/dist/components/sidebar/index.js +7 -0
  222. package/dist/components/sidebar/index.js.map +1 -0
  223. package/dist/components/sidebar/model/sidebar.state.d.ts +44 -0
  224. package/dist/components/sidebar/model/sidebar.state.d.ts.map +1 -0
  225. package/dist/components/sidebar/model/sidebar.state.js +122 -0
  226. package/dist/components/sidebar/model/sidebar.state.js.map +1 -0
  227. package/dist/components/sidebar/model/sidebar.types.d.ts +79 -0
  228. package/dist/components/sidebar/model/sidebar.types.d.ts.map +1 -0
  229. package/dist/components/sidebar/model/sidebar.types.js +2 -0
  230. package/dist/components/sidebar/model/sidebar.types.js.map +1 -0
  231. package/dist/components/skeleton.d.ts +27 -0
  232. package/dist/components/skeleton.d.ts.map +1 -0
  233. package/dist/components/skeleton.js +37 -0
  234. package/dist/components/skeleton.js.map +1 -0
  235. package/dist/components/slider.d.ts +16 -0
  236. package/dist/components/slider.d.ts.map +1 -0
  237. package/dist/components/slider.js +41 -0
  238. package/dist/components/slider.js.map +1 -0
  239. package/dist/components/stat-card.d.ts +20 -0
  240. package/dist/components/stat-card.d.ts.map +1 -0
  241. package/dist/components/stat-card.js +13 -0
  242. package/dist/components/stat-card.js.map +1 -0
  243. package/dist/components/stepper.d.ts +21 -0
  244. package/dist/components/stepper.d.ts.map +1 -0
  245. package/dist/components/stepper.js +49 -0
  246. package/dist/components/stepper.js.map +1 -0
  247. package/dist/components/switch.d.ts +8 -0
  248. package/dist/components/switch.d.ts.map +1 -0
  249. package/dist/components/switch.js +23 -0
  250. package/dist/components/switch.js.map +1 -0
  251. package/dist/components/table.d.ts +8 -0
  252. package/dist/components/table.d.ts.map +1 -0
  253. package/dist/components/table.js +9 -0
  254. package/dist/components/table.js.map +1 -0
  255. package/dist/components/tabs.d.ts +23 -0
  256. package/dist/components/tabs.d.ts.map +1 -0
  257. package/dist/components/tabs.js +96 -0
  258. package/dist/components/tabs.js.map +1 -0
  259. package/dist/components/text-field.d.ts +31 -0
  260. package/dist/components/text-field.d.ts.map +1 -0
  261. package/dist/components/text-field.js +103 -0
  262. package/dist/components/text-field.js.map +1 -0
  263. package/dist/components/time-picker.d.ts +11 -0
  264. package/dist/components/time-picker.d.ts.map +1 -0
  265. package/dist/components/time-picker.js +284 -0
  266. package/dist/components/time-picker.js.map +1 -0
  267. package/dist/components/toast.d.ts +40 -0
  268. package/dist/components/toast.d.ts.map +1 -0
  269. package/dist/components/toast.js +194 -0
  270. package/dist/components/toast.js.map +1 -0
  271. package/dist/components/token-field.d.ts +48 -0
  272. package/dist/components/token-field.d.ts.map +1 -0
  273. package/dist/components/token-field.js +244 -0
  274. package/dist/components/token-field.js.map +1 -0
  275. package/dist/components/tooltip.d.ts +12 -0
  276. package/dist/components/tooltip.d.ts.map +1 -0
  277. package/dist/components/tooltip.js +81 -0
  278. package/dist/components/tooltip.js.map +1 -0
  279. package/dist/components/top-app-bar.d.ts +28 -0
  280. package/dist/components/top-app-bar.d.ts.map +1 -0
  281. package/dist/components/top-app-bar.js +31 -0
  282. package/dist/components/top-app-bar.js.map +1 -0
  283. package/dist/components/typography.d.ts +17 -0
  284. package/dist/components/typography.d.ts.map +1 -0
  285. package/dist/components/typography.js +57 -0
  286. package/dist/components/typography.js.map +1 -0
  287. package/dist/hooks/use-scroll-lock.d.ts +6 -0
  288. package/dist/hooks/use-scroll-lock.d.ts.map +1 -0
  289. package/dist/hooks/use-scroll-lock.js +30 -0
  290. package/dist/hooks/use-scroll-lock.js.map +1 -0
  291. package/dist/index.css +5138 -0
  292. package/dist/index.d.ts +143 -0
  293. package/dist/index.d.ts.map +1 -0
  294. package/dist/index.js +79 -0
  295. package/dist/index.js.map +1 -0
  296. package/dist/layout/action-cluster.d.ts +7 -0
  297. package/dist/layout/action-cluster.d.ts.map +1 -0
  298. package/dist/layout/action-cluster.js +19 -0
  299. package/dist/layout/action-cluster.js.map +1 -0
  300. package/dist/layout/app-layout.d.ts +14 -0
  301. package/dist/layout/app-layout.d.ts.map +1 -0
  302. package/dist/layout/app-layout.js +9 -0
  303. package/dist/layout/app-layout.js.map +1 -0
  304. package/dist/layout/appearance-provider.d.ts +63 -0
  305. package/dist/layout/appearance-provider.d.ts.map +1 -0
  306. package/dist/layout/appearance-provider.js +250 -0
  307. package/dist/layout/appearance-provider.js.map +1 -0
  308. package/dist/layout/card-grid.d.ts +6 -0
  309. package/dist/layout/card-grid.d.ts.map +1 -0
  310. package/dist/layout/card-grid.js +13 -0
  311. package/dist/layout/card-grid.js.map +1 -0
  312. package/dist/layout/container.d.ts +8 -0
  313. package/dist/layout/container.d.ts.map +1 -0
  314. package/dist/layout/container.js +13 -0
  315. package/dist/layout/container.js.map +1 -0
  316. package/dist/layout/page-section.d.ts +9 -0
  317. package/dist/layout/page-section.d.ts.map +1 -0
  318. package/dist/layout/page-section.js +24 -0
  319. package/dist/layout/page-section.js.map +1 -0
  320. package/dist/layout/pane.d.ts +20 -0
  321. package/dist/layout/pane.d.ts.map +1 -0
  322. package/dist/layout/pane.js +48 -0
  323. package/dist/layout/pane.js.map +1 -0
  324. package/dist/layout/preview-frame.d.ts +8 -0
  325. package/dist/layout/preview-frame.d.ts.map +1 -0
  326. package/dist/layout/preview-frame.js +23 -0
  327. package/dist/layout/preview-frame.js.map +1 -0
  328. package/dist/layout/window-size-provider.d.ts +12 -0
  329. package/dist/layout/window-size-provider.d.ts.map +1 -0
  330. package/dist/layout/window-size-provider.js +40 -0
  331. package/dist/layout/window-size-provider.js.map +1 -0
  332. package/dist/lib/action-control.d.ts +27 -0
  333. package/dist/lib/action-control.d.ts.map +1 -0
  334. package/dist/lib/action-control.js +28 -0
  335. package/dist/lib/action-control.js.map +1 -0
  336. package/dist/lib/action-size.d.ts +41 -0
  337. package/dist/lib/action-size.d.ts.map +1 -0
  338. package/dist/lib/action-size.js +59 -0
  339. package/dist/lib/action-size.js.map +1 -0
  340. package/dist/lib/field-shell.d.ts +31 -0
  341. package/dist/lib/field-shell.d.ts.map +1 -0
  342. package/dist/lib/field-shell.js +48 -0
  343. package/dist/lib/field-shell.js.map +1 -0
  344. package/dist/lib/field-size.d.ts +44 -0
  345. package/dist/lib/field-size.d.ts.map +1 -0
  346. package/dist/lib/field-size.js +126 -0
  347. package/dist/lib/field-size.js.map +1 -0
  348. package/dist/lib/navigation-action.d.ts +21 -0
  349. package/dist/lib/navigation-action.d.ts.map +1 -0
  350. package/dist/lib/navigation-action.js +53 -0
  351. package/dist/lib/navigation-action.js.map +1 -0
  352. package/dist/lib/navigation-visuals.d.ts +38 -0
  353. package/dist/lib/navigation-visuals.d.ts.map +1 -0
  354. package/dist/lib/navigation-visuals.js +27 -0
  355. package/dist/lib/navigation-visuals.js.map +1 -0
  356. package/dist/lib/portal-layer.d.ts +3 -0
  357. package/dist/lib/portal-layer.d.ts.map +1 -0
  358. package/dist/lib/portal-layer.js +13 -0
  359. package/dist/lib/portal-layer.js.map +1 -0
  360. package/dist/lib/selection-control-size.d.ts +8 -0
  361. package/dist/lib/selection-control-size.d.ts.map +1 -0
  362. package/dist/lib/selection-control-size.js +15 -0
  363. package/dist/lib/selection-control-size.js.map +1 -0
  364. package/dist/lib/typography-roles.d.ts +20 -0
  365. package/dist/lib/typography-roles.d.ts.map +1 -0
  366. package/dist/lib/typography-roles.js +19 -0
  367. package/dist/lib/typography-roles.js.map +1 -0
  368. package/dist/lib/use-anchored-overlay-position.d.ts +21 -0
  369. package/dist/lib/use-anchored-overlay-position.d.ts.map +1 -0
  370. package/dist/lib/use-anchored-overlay-position.js +50 -0
  371. package/dist/lib/use-anchored-overlay-position.js.map +1 -0
  372. package/dist/lib/use-controllable-state.d.ts +8 -0
  373. package/dist/lib/use-controllable-state.d.ts.map +1 -0
  374. package/dist/lib/use-controllable-state.js +14 -0
  375. package/dist/lib/use-controllable-state.js.map +1 -0
  376. package/dist/lib/use-field-state.d.ts +16 -0
  377. package/dist/lib/use-field-state.d.ts.map +1 -0
  378. package/dist/lib/use-field-state.js +14 -0
  379. package/dist/lib/use-field-state.js.map +1 -0
  380. package/dist/lib/use-overlay-behavior.d.ts +17 -0
  381. package/dist/lib/use-overlay-behavior.d.ts.map +1 -0
  382. package/dist/lib/use-overlay-behavior.js +230 -0
  383. package/dist/lib/use-overlay-behavior.js.map +1 -0
  384. package/dist/lib/utils.d.ts +47 -0
  385. package/dist/lib/utils.d.ts.map +1 -0
  386. package/dist/lib/utils.js +176 -0
  387. package/dist/lib/utils.js.map +1 -0
  388. package/dist/primitives/input.d.ts +15 -0
  389. package/dist/primitives/input.d.ts.map +1 -0
  390. package/dist/primitives/input.js +17 -0
  391. package/dist/primitives/input.js.map +1 -0
  392. package/dist/primitives/label.d.ts +14 -0
  393. package/dist/primitives/label.d.ts.map +1 -0
  394. package/dist/primitives/label.js +13 -0
  395. package/dist/primitives/label.js.map +1 -0
  396. package/dist/primitives/menu.d.ts +34 -0
  397. package/dist/primitives/menu.d.ts.map +1 -0
  398. package/dist/primitives/menu.js +56 -0
  399. package/dist/primitives/menu.js.map +1 -0
  400. package/dist/primitives/surface.d.ts +15 -0
  401. package/dist/primitives/surface.d.ts.map +1 -0
  402. package/dist/primitives/surface.js +53 -0
  403. package/dist/primitives/surface.js.map +1 -0
  404. package/dist/primitives/text.d.ts +16 -0
  405. package/dist/primitives/text.d.ts.map +1 -0
  406. package/dist/primitives/text.js +78 -0
  407. package/dist/primitives/text.js.map +1 -0
  408. package/dist/primitives/textarea.d.ts +16 -0
  409. package/dist/primitives/textarea.d.ts.map +1 -0
  410. package/dist/primitives/textarea.js +18 -0
  411. package/dist/primitives/textarea.js.map +1 -0
  412. package/dist/types/navigation.d.ts +26 -0
  413. package/dist/types/navigation.d.ts.map +1 -0
  414. package/dist/types/navigation.js +2 -0
  415. package/dist/types/navigation.js.map +1 -0
  416. package/package.json +485 -0
  417. package/registry/components/accordion.tsx +166 -0
  418. package/registry/components/alert.tsx +90 -0
  419. package/registry/components/avatar.tsx +86 -0
  420. package/registry/components/badge.tsx +104 -0
  421. package/registry/components/banner.tsx +165 -0
  422. package/registry/components/bottom-app-bar.tsx +88 -0
  423. package/registry/components/breadcrumb.tsx +87 -0
  424. package/registry/components/button.tsx +195 -0
  425. package/registry/components/calendar.tsx +334 -0
  426. package/registry/components/canonical-layouts.tsx +264 -0
  427. package/registry/components/card.tsx +165 -0
  428. package/registry/components/carousel.tsx +482 -0
  429. package/registry/components/checkbox.tsx +154 -0
  430. package/registry/components/chip.tsx +201 -0
  431. package/registry/components/combobox.tsx +504 -0
  432. package/registry/components/command.tsx +165 -0
  433. package/registry/components/confirm-dialog.tsx +146 -0
  434. package/registry/components/date-input.tsx +570 -0
  435. package/registry/components/date-picker.tsx +214 -0
  436. package/registry/components/date-range-picker.tsx +449 -0
  437. package/registry/components/dialog.tsx +253 -0
  438. package/registry/components/divider.tsx +33 -0
  439. package/registry/components/drawer.tsx +217 -0
  440. package/registry/components/dropdown-menu.tsx +879 -0
  441. package/registry/components/fab-menu.tsx +138 -0
  442. package/registry/components/fab.tsx +185 -0
  443. package/registry/components/field.tsx +48 -0
  444. package/registry/components/icon-button.tsx +209 -0
  445. package/registry/components/icon.tsx +118 -0
  446. package/registry/components/list.tsx +319 -0
  447. package/registry/components/mode-switcher.tsx +48 -0
  448. package/registry/components/month-picker.tsx +363 -0
  449. package/registry/components/navigation-bar.tsx +112 -0
  450. package/registry/components/navigation-drawer.tsx +189 -0
  451. package/registry/components/navigation-rail.tsx +113 -0
  452. package/registry/components/pagination.tsx +243 -0
  453. package/registry/components/pane-group.tsx +38 -0
  454. package/registry/components/popover.tsx +395 -0
  455. package/registry/components/progress.tsx +112 -0
  456. package/registry/components/radio.tsx +103 -0
  457. package/registry/components/rating.tsx +150 -0
  458. package/registry/components/ripple.tsx +82 -0
  459. package/registry/components/scroll-area.tsx +26 -0
  460. package/registry/components/search-bar.tsx +171 -0
  461. package/registry/components/segmented-button.tsx +352 -0
  462. package/registry/components/select-field.tsx +216 -0
  463. package/registry/components/select.tsx +720 -0
  464. package/registry/components/sheet.tsx +318 -0
  465. package/registry/components/sidebar/components/sidebar-drawer.tsx +177 -0
  466. package/registry/components/sidebar/components/sidebar-inset.tsx +46 -0
  467. package/registry/components/sidebar/components/sidebar-navigation.tsx +208 -0
  468. package/registry/components/sidebar/components/sidebar-rail.tsx +47 -0
  469. package/registry/components/sidebar/components/sidebar-shell.tsx +100 -0
  470. package/registry/components/sidebar/context/sidebar-provider.tsx +402 -0
  471. package/registry/components/sidebar/index.ts +25 -0
  472. package/registry/components/sidebar/model/sidebar.state.ts +172 -0
  473. package/registry/components/sidebar/model/sidebar.types.ts +87 -0
  474. package/registry/components/skeleton.tsx +103 -0
  475. package/registry/components/slider.tsx +170 -0
  476. package/registry/components/stat-card.tsx +78 -0
  477. package/registry/components/stepper.tsx +183 -0
  478. package/registry/components/switch.tsx +123 -0
  479. package/registry/components/table.tsx +71 -0
  480. package/registry/components/tabs.tsx +235 -0
  481. package/registry/components/text-field.tsx +273 -0
  482. package/registry/components/time-picker.tsx +571 -0
  483. package/registry/components/toast.tsx +402 -0
  484. package/registry/components/token-field.tsx +438 -0
  485. package/registry/components/tooltip.tsx +149 -0
  486. package/registry/components/top-app-bar.tsx +120 -0
  487. package/registry/components/typography.tsx +95 -0
  488. package/registry/hooks/use-scroll-lock.ts +36 -0
  489. package/registry/layout/action-cluster.tsx +40 -0
  490. package/registry/layout/app-layout.tsx +82 -0
  491. package/registry/layout/appearance-provider.tsx +367 -0
  492. package/registry/layout/card-grid.tsx +31 -0
  493. package/registry/layout/container.tsx +26 -0
  494. package/registry/layout/page-section.tsx +54 -0
  495. package/registry/layout/pane.tsx +126 -0
  496. package/registry/layout/preview-frame.tsx +50 -0
  497. package/registry/layout/window-size-provider.tsx +59 -0
  498. package/registry/lib/action-control.tsx +68 -0
  499. package/registry/lib/action-size.ts +67 -0
  500. package/registry/lib/field-shell.ts +115 -0
  501. package/registry/lib/field-size.ts +169 -0
  502. package/registry/lib/navigation-action.tsx +109 -0
  503. package/registry/lib/navigation-visuals.tsx +173 -0
  504. package/registry/lib/portal-layer.ts +17 -0
  505. package/registry/lib/selection-control-size.ts +24 -0
  506. package/registry/lib/typography-roles.ts +23 -0
  507. package/registry/lib/use-anchored-overlay-position.ts +95 -0
  508. package/registry/lib/use-controllable-state.ts +29 -0
  509. package/registry/lib/use-field-state.ts +32 -0
  510. package/registry/lib/use-overlay-behavior.ts +324 -0
  511. package/registry/lib/utils.ts +205 -0
  512. package/registry/primitives/input.tsx +37 -0
  513. package/registry/primitives/label.tsx +35 -0
  514. package/registry/primitives/menu.tsx +218 -0
  515. package/registry/primitives/surface.tsx +67 -0
  516. package/registry/primitives/text.tsx +105 -0
  517. package/registry/primitives/textarea.tsx +38 -0
  518. package/registry/registry-schema.json +91 -0
  519. package/registry/registry.json +1369 -0
  520. package/registry/styles/globals.css +1370 -0
  521. package/registry/styles/themes/black.css +342 -0
  522. package/registry/styles/themes/blue.css +342 -0
  523. package/registry/styles/themes/cyan.css +342 -0
  524. package/registry/styles/themes/green.css +342 -0
  525. package/registry/styles/themes/neutral.css +342 -0
  526. package/registry/styles/themes/orange.css +342 -0
  527. package/registry/styles/themes/pink.css +342 -0
  528. package/registry/styles/themes/purple.css +342 -0
  529. package/registry/styles/themes/red.css +342 -0
  530. package/registry/styles/themes/yellow.css +342 -0
  531. package/registry/tsconfig.json +10 -0
  532. package/registry/types/navigation.ts +35 -0
  533. package/unisane.meta.json +99 -0
@@ -0,0 +1,1370 @@
1
+ /* Unisane UI local runtime baseline. App overrides belong below this block. */
2
+ @import "tailwindcss";
3
+ @source "../**/*.{ts,tsx,mdx}";
4
+
5
+ /* unisane:theme:start */
6
+ /* Generated theme: Blue. Replace this managed region with the CLI. */
7
+ :root {
8
+ --color-primary: #007bb4;
9
+ --color-on-primary: #ffffff;
10
+ --color-primary-container: #c8f3ff;
11
+ --color-on-primary-container: #001f41;
12
+ --color-secondary: #4a7493;
13
+ --color-on-secondary: #ffffff;
14
+ --color-secondary-container: #deeefa;
15
+ --color-on-secondary-container: #031d2e;
16
+ --color-tertiary: #6e63a7;
17
+ --color-on-tertiary: #ffffff;
18
+ --color-tertiary-container: #eae8ff;
19
+ --color-on-tertiary-container: #1b123a;
20
+ --color-surface: #ffffff;
21
+ --color-on-surface: #171b1e;
22
+ --color-surface-container-lowest: #ffffff;
23
+ --color-surface-container-low: #f6f8f9;
24
+ --color-surface-container: #f1f4f5;
25
+ --color-surface-container-high: #eef1f2;
26
+ --color-surface-container-highest: #e8eced;
27
+ --color-surface-variant: #e7ecef;
28
+ --color-on-surface-variant: #49545a;
29
+ --color-background: #ffffff;
30
+ --color-on-background: #171b1e;
31
+ --color-outline: #a1adb3;
32
+ --color-outline-variant: #bcc6cb;
33
+ --color-control-outline: #859198;
34
+ --color-error: #c13234;
35
+ --color-on-error: #ffffff;
36
+ --color-error-container: #ffdcd6;
37
+ --color-on-error-container: #450000;
38
+ --color-success: #008819;
39
+ --color-on-success: #ffffff;
40
+ --color-success-container: #d2f7d2;
41
+ --color-on-success-container: #002700;
42
+ --color-warning: #986300;
43
+ --color-on-warning: #ffffff;
44
+ --color-warning-container: #fde9c1;
45
+ --color-on-warning-container: #311000;
46
+ --color-info: #0073c4;
47
+ --color-on-info: #ffffff;
48
+ --color-info-container: #cdf0ff;
49
+ --color-on-info-container: #00194a;
50
+ --color-inverse-surface: #30363a;
51
+ --color-inverse-on-surface: #f3f5f7;
52
+ --color-inverse-primary: #9ee2ff;
53
+ }
54
+
55
+ @media (prefers-color-scheme: dark) {
56
+ :root:not(.light) {
57
+ --color-primary: #9ee2ff;
58
+ --color-on-primary: #003d69;
59
+ --color-primary-container: #005d91;
60
+ --color-on-primary-container: #c8f3ff;
61
+ --color-secondary: #c3dbee;
62
+ --color-on-secondary: #173950;
63
+ --color-secondary-container: #305773;
64
+ --color-on-secondary-container: #deeefa;
65
+ --color-tertiary: #d6d2fc;
66
+ --color-on-tertiary: #362b5f;
67
+ --color-tertiary-container: #524785;
68
+ --color-on-tertiary-container: #eae8ff;
69
+ --color-surface: #0c1012;
70
+ --color-on-surface: #e8eced;
71
+ --color-surface-container-lowest: #0c1012;
72
+ --color-surface-container-low: #171b1e;
73
+ --color-surface-container: #292f32;
74
+ --color-surface-container-high: #383e42;
75
+ --color-surface-container-highest: #3d4447;
76
+ --color-surface-variant: #49545a;
77
+ --color-on-surface-variant: #d1d9dd;
78
+ --color-background: #0c1012;
79
+ --color-on-background: #e8eced;
80
+ --color-outline: #859198;
81
+ --color-outline-variant: #647177;
82
+ --color-control-outline: #647177;
83
+ --color-error: #ffbeb7;
84
+ --color-on-error: #700001;
85
+ --color-error-container: #9b0d1a;
86
+ --color-on-error-container: #ffdcd6;
87
+ --color-success: #afe9af;
88
+ --color-on-success: #004700;
89
+ --color-success-container: #006800;
90
+ --color-on-success-container: #d2f7d2;
91
+ --color-warning: #f2d494;
92
+ --color-on-warning: #542a00;
93
+ --color-warning-container: #784700;
94
+ --color-on-warning-container: #fde9c1;
95
+ --color-info: #a7deff;
96
+ --color-on-info: #003675;
97
+ --color-info-container: #00559f;
98
+ --color-on-info-container: #cdf0ff;
99
+ --color-inverse-surface: #e8eced;
100
+ --color-inverse-on-surface: #30363a;
101
+ --color-inverse-primary: #007bb4;
102
+ }
103
+ }
104
+
105
+ .dark {
106
+ --color-primary: #9ee2ff;
107
+ --color-on-primary: #003d69;
108
+ --color-primary-container: #005d91;
109
+ --color-on-primary-container: #c8f3ff;
110
+ --color-secondary: #c3dbee;
111
+ --color-on-secondary: #173950;
112
+ --color-secondary-container: #305773;
113
+ --color-on-secondary-container: #deeefa;
114
+ --color-tertiary: #d6d2fc;
115
+ --color-on-tertiary: #362b5f;
116
+ --color-tertiary-container: #524785;
117
+ --color-on-tertiary-container: #eae8ff;
118
+ --color-surface: #0c1012;
119
+ --color-on-surface: #e8eced;
120
+ --color-surface-container-lowest: #0c1012;
121
+ --color-surface-container-low: #171b1e;
122
+ --color-surface-container: #292f32;
123
+ --color-surface-container-high: #383e42;
124
+ --color-surface-container-highest: #3d4447;
125
+ --color-surface-variant: #49545a;
126
+ --color-on-surface-variant: #d1d9dd;
127
+ --color-background: #0c1012;
128
+ --color-on-background: #e8eced;
129
+ --color-outline: #859198;
130
+ --color-outline-variant: #647177;
131
+ --color-control-outline: #647177;
132
+ --color-error: #ffbeb7;
133
+ --color-on-error: #700001;
134
+ --color-error-container: #9b0d1a;
135
+ --color-on-error-container: #ffdcd6;
136
+ --color-success: #afe9af;
137
+ --color-on-success: #004700;
138
+ --color-success-container: #006800;
139
+ --color-on-success-container: #d2f7d2;
140
+ --color-warning: #f2d494;
141
+ --color-on-warning: #542a00;
142
+ --color-warning-container: #784700;
143
+ --color-on-warning-container: #fde9c1;
144
+ --color-info: #a7deff;
145
+ --color-on-info: #003675;
146
+ --color-info-container: #00559f;
147
+ --color-on-info-container: #cdf0ff;
148
+ --color-inverse-surface: #e8eced;
149
+ --color-inverse-on-surface: #30363a;
150
+ --color-inverse-primary: #007bb4;
151
+ }
152
+
153
+ [data-contrast="medium"] {
154
+ --color-primary: #005d91;
155
+ --color-on-primary: #ffffff;
156
+ --color-primary-container: #ddfbff;
157
+ --color-on-primary-container: #001f41;
158
+ --color-secondary: #305773;
159
+ --color-on-secondary: #ffffff;
160
+ --color-secondary-container: #ecf7ff;
161
+ --color-on-secondary-container: #031d2e;
162
+ --color-tertiary: #524785;
163
+ --color-on-tertiary: #ffffff;
164
+ --color-tertiary-container: #f4f3ff;
165
+ --color-on-tertiary-container: #1b123a;
166
+ --color-surface: #ffffff;
167
+ --color-on-surface: #171b1e;
168
+ --color-surface-container-lowest: #ffffff;
169
+ --color-surface-container-low: #f6f8f9;
170
+ --color-surface-container: #f1f4f5;
171
+ --color-surface-container-high: #eef1f2;
172
+ --color-surface-container-highest: #e8eced;
173
+ --color-surface-variant: #edf1f3;
174
+ --color-on-surface-variant: #3a4449;
175
+ --color-background: #ffffff;
176
+ --color-on-background: #171b1e;
177
+ --color-outline: #49545a;
178
+ --color-outline-variant: #647177;
179
+ --color-control-outline: #859198;
180
+ --color-error: #c13234;
181
+ --color-on-error: #ffffff;
182
+ --color-error-container: #ffdcd6;
183
+ --color-on-error-container: #450000;
184
+ --color-success: #006800;
185
+ --color-on-success: #ffffff;
186
+ --color-success-container: #e3fee3;
187
+ --color-on-success-container: #002700;
188
+ --color-warning: #784700;
189
+ --color-on-warning: #ffffff;
190
+ --color-warning-container: #fff4d7;
191
+ --color-on-warning-container: #311000;
192
+ --color-info: #00559f;
193
+ --color-on-info: #ffffff;
194
+ --color-info-container: #e0f9ff;
195
+ --color-on-info-container: #00194a;
196
+ --color-inverse-surface: #30363a;
197
+ --color-inverse-on-surface: #f3f5f7;
198
+ --color-inverse-primary: #9ee2ff;
199
+ }
200
+
201
+ .dark[data-contrast="medium"],
202
+ [data-contrast="medium"].dark {
203
+ --color-primary: #9ee2ff;
204
+ --color-on-primary: #003d69;
205
+ --color-primary-container: #005d91;
206
+ --color-on-primary-container: #ddfbff;
207
+ --color-secondary: #c3dbee;
208
+ --color-on-secondary: #173950;
209
+ --color-secondary-container: #305773;
210
+ --color-on-secondary-container: #ecf7ff;
211
+ --color-tertiary: #d6d2fc;
212
+ --color-on-tertiary: #362b5f;
213
+ --color-tertiary-container: #524785;
214
+ --color-on-tertiary-container: #f4f3ff;
215
+ --color-surface: #0c1012;
216
+ --color-on-surface: #f3f5f7;
217
+ --color-surface-container-lowest: #0c1012;
218
+ --color-surface-container-low: #171b1e;
219
+ --color-surface-container: #292f32;
220
+ --color-surface-container-high: #383e42;
221
+ --color-surface-container-highest: #3d4447;
222
+ --color-surface-variant: #3a4449;
223
+ --color-on-surface-variant: #e7ecef;
224
+ --color-background: #0c1012;
225
+ --color-on-background: #e8eced;
226
+ --color-outline: #a1adb3;
227
+ --color-outline-variant: #859198;
228
+ --color-control-outline: #859198;
229
+ --color-error: #ffbeb7;
230
+ --color-on-error: #700001;
231
+ --color-error-container: #9b0d1a;
232
+ --color-on-error-container: #ffdcd6;
233
+ --color-success: #afe9af;
234
+ --color-on-success: #004700;
235
+ --color-success-container: #006800;
236
+ --color-on-success-container: #d2f7d2;
237
+ --color-warning: #f2d494;
238
+ --color-on-warning: #542a00;
239
+ --color-warning-container: #784700;
240
+ --color-on-warning-container: #fde9c1;
241
+ --color-info: #a7deff;
242
+ --color-on-info: #003675;
243
+ --color-info-container: #00559f;
244
+ --color-on-info-container: #cdf0ff;
245
+ --color-inverse-surface: #e8eced;
246
+ --color-inverse-on-surface: #30363a;
247
+ --color-inverse-primary: #007bb4;
248
+ }
249
+
250
+ [data-contrast="high"] {
251
+ --color-primary: #003d69;
252
+ --color-on-primary: #ffffff;
253
+ --color-primary-container: #ddfbff;
254
+ --color-on-primary-container: #000000;
255
+ --color-secondary: #173950;
256
+ --color-on-secondary: #ffffff;
257
+ --color-secondary-container: #ecf7ff;
258
+ --color-on-secondary-container: #000000;
259
+ --color-tertiary: #362b5f;
260
+ --color-on-tertiary: #ffffff;
261
+ --color-tertiary-container: #f4f3ff;
262
+ --color-on-tertiary-container: #000000;
263
+ --color-surface: #ffffff;
264
+ --color-on-surface: #000000;
265
+ --color-surface-container-lowest: #ffffff;
266
+ --color-surface-container-low: #f6f8f9;
267
+ --color-surface-container: #f1f4f5;
268
+ --color-surface-container-high: #eef1f2;
269
+ --color-surface-container-highest: #e8eced;
270
+ --color-surface-variant: #f2f6f8;
271
+ --color-on-surface-variant: #2e373c;
272
+ --color-background: #ffffff;
273
+ --color-on-background: #000000;
274
+ --color-outline: #2e373c;
275
+ --color-outline-variant: #647177;
276
+ --color-control-outline: #647177;
277
+ --color-error: #700001;
278
+ --color-on-error: #ffffff;
279
+ --color-error-container: #ffdcd6;
280
+ --color-on-error-container: #450000;
281
+ --color-success: #004700;
282
+ --color-on-success: #ffffff;
283
+ --color-success-container: #e3fee3;
284
+ --color-on-success-container: #000000;
285
+ --color-warning: #542a00;
286
+ --color-on-warning: #ffffff;
287
+ --color-warning-container: #fff4d7;
288
+ --color-on-warning-container: #000000;
289
+ --color-info: #003675;
290
+ --color-on-info: #ffffff;
291
+ --color-info-container: #e0f9ff;
292
+ --color-on-info-container: #000000;
293
+ --color-inverse-surface: #30363a;
294
+ --color-inverse-on-surface: #f3f5f7;
295
+ --color-inverse-primary: #9ee2ff;
296
+ }
297
+
298
+ .dark[data-contrast="high"],
299
+ [data-contrast="high"].dark {
300
+ --color-primary: #ddfbff;
301
+ --color-on-primary: #000000;
302
+ --color-primary-container: #001f41;
303
+ --color-on-primary-container: #ffffff;
304
+ --color-secondary: #ecf7ff;
305
+ --color-on-secondary: #000000;
306
+ --color-secondary-container: #031d2e;
307
+ --color-on-secondary-container: #ffffff;
308
+ --color-tertiary: #f4f3ff;
309
+ --color-on-tertiary: #000000;
310
+ --color-tertiary-container: #1b123a;
311
+ --color-on-tertiary-container: #ffffff;
312
+ --color-surface: #0c1012;
313
+ --color-on-surface: #ffffff;
314
+ --color-surface-container-lowest: #0c1012;
315
+ --color-surface-container-low: #171b1e;
316
+ --color-surface-container: #292f32;
317
+ --color-surface-container-high: #383e42;
318
+ --color-surface-container-highest: #3d4447;
319
+ --color-surface-variant: #2e373c;
320
+ --color-on-surface-variant: #f2f6f8;
321
+ --color-background: #0c1012;
322
+ --color-on-background: #ffffff;
323
+ --color-outline: #d1d9dd;
324
+ --color-outline-variant: #a1adb3;
325
+ --color-control-outline: #a1adb3;
326
+ --color-error: #ffeae6;
327
+ --color-on-error: #000000;
328
+ --color-error-container: #9b0d1a;
329
+ --color-on-error-container: #ffdcd6;
330
+ --color-success: #e3fee3;
331
+ --color-on-success: #000000;
332
+ --color-success-container: #002700;
333
+ --color-on-success-container: #ffffff;
334
+ --color-warning: #fff4d7;
335
+ --color-on-warning: #000000;
336
+ --color-warning-container: #311000;
337
+ --color-on-warning-container: #ffffff;
338
+ --color-info: #e0f9ff;
339
+ --color-on-info: #000000;
340
+ --color-info-container: #00194a;
341
+ --color-on-info-container: #ffffff;
342
+ --color-inverse-surface: #e8eced;
343
+ --color-inverse-on-surface: #30363a;
344
+ --color-inverse-primary: #007bb4;
345
+ }
346
+ /* unisane:theme:end */
347
+ /* ============================================================
348
+ Unisane UI Design Tokens
349
+ Generated from "Blue" theme using OKLCH color science
350
+ ============================================================ */
351
+
352
+ :root {
353
+ /* === FOUNDATION SCALING === */
354
+ --scale-space-density: 1;
355
+ --scale-space-viewport: 1;
356
+ --scale-space: calc(var(--scale-space-density) * var(--scale-space-viewport));
357
+ --scale-type-density: 1;
358
+ --scale-type-user: 1;
359
+ --scale-type-viewport: 1;
360
+ --scale-type: calc(var(--scale-type-density) * var(--scale-type-user) * var(--scale-type-viewport));
361
+ /* Radius uses combined multiplier: density-radius × theme-radius */
362
+ --scale-radius-density: 1; /* Modified by data-density */
363
+ --scale-radius-theme: 1; /* Modified by data-radius */
364
+ --scale-radius: calc(var(--scale-radius-density) * var(--scale-radius-theme));
365
+ --unit: calc(4px * var(--scale-space));
366
+
367
+ /* Pane Widths */
368
+ --width-pane-list: 360px;
369
+ --width-pane-fixed: 412px;
370
+ --width-pane-supporting: 400px;
371
+ --width-rail-collapsed: 80px;
372
+ --width-drawer-compact: 360px;
373
+ --width-navigation-drawer: 300px;
374
+
375
+ --color-scrim: rgba(0, 0, 0, 0.32);
376
+ --color-scrim-soft: color-mix(in oklab, var(--color-scrim) 30%, transparent);
377
+
378
+ /* Outline role aliases (replaces ad-hoc /nn opacity usage)
379
+ Roles are anchored to outline/outline-variant so they remain readable
380
+ across light/dark and contrast presets. */
381
+ --color-outline-weak: color-mix(in oklab, var(--color-outline-variant) 30%, var(--color-surface) 70%);
382
+ --color-outline-soft: color-mix(in oklab, var(--color-outline-variant) 45%, var(--color-surface) 55%);
383
+ --color-outline-muted: color-mix(in oklab, var(--color-outline-variant) 52%, var(--color-surface) 48%);
384
+ --color-outline-subtle: color-mix(in oklab, var(--color-outline-variant) 60%, var(--color-surface) 40%);
385
+ --color-outline-medium: color-mix(in oklab, var(--color-outline) 45%, var(--color-outline-variant) 55%);
386
+ --color-outline-strong: var(--color-outline);
387
+
388
+ /* Surface interaction state aliases */
389
+ --color-state-hover: color-mix(in oklab, var(--color-on-surface) 8%, transparent);
390
+ --color-state-focus: color-mix(in oklab, var(--color-on-surface) 10%, transparent);
391
+ --color-state-pressed: color-mix(in oklab, var(--color-on-surface) 12%, transparent);
392
+ --color-state-selected: color-mix(in oklab, var(--color-primary) 10%, transparent);
393
+ --color-state-error: color-mix(in oklab, var(--color-error) 8%, transparent);
394
+ --color-focus-ring: var(--color-primary);
395
+ --color-focus-ring-error: var(--color-error);
396
+
397
+ /* Typography */
398
+ --font-sans: var(--font-inter, system-ui), -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
399
+
400
+ /* === TYPOGRAPHY === */
401
+ --type-display-large-font: var(--font-sans);
402
+ --type-display-large-weight: 400;
403
+ --type-display-large-size: calc(57px * var(--scale-type));
404
+ --type-display-large-line: calc(64px * var(--scale-type));
405
+ --type-display-large-tracking: -0.25px;
406
+ --type-display-medium-font: var(--font-sans);
407
+ --type-display-medium-weight: 400;
408
+ --type-display-medium-size: calc(45px * var(--scale-type));
409
+ --type-display-medium-line: calc(52px * var(--scale-type));
410
+ --type-display-medium-tracking: 0;
411
+ --type-display-small-font: var(--font-sans);
412
+ --type-display-small-weight: 400;
413
+ --type-display-small-size: calc(36px * var(--scale-type));
414
+ --type-display-small-line: calc(44px * var(--scale-type));
415
+ --type-display-small-tracking: 0;
416
+ --type-headline-large-font: var(--font-sans);
417
+ --type-headline-large-weight: 400;
418
+ --type-headline-large-size: calc(32px * var(--scale-type));
419
+ --type-headline-large-line: calc(40px * var(--scale-type));
420
+ --type-headline-large-tracking: 0;
421
+ --type-headline-medium-font: var(--font-sans);
422
+ --type-headline-medium-weight: 400;
423
+ --type-headline-medium-size: calc(28px * var(--scale-type));
424
+ --type-headline-medium-line: calc(36px * var(--scale-type));
425
+ --type-headline-medium-tracking: 0;
426
+ --type-headline-small-font: var(--font-sans);
427
+ --type-headline-small-weight: 400;
428
+ --type-headline-small-size: calc(24px * var(--scale-type));
429
+ --type-headline-small-line: calc(32px * var(--scale-type));
430
+ --type-headline-small-tracking: 0;
431
+ --type-title-large-font: var(--font-sans);
432
+ --type-title-large-weight: 400;
433
+ --type-title-large-size: calc(22px * var(--scale-type));
434
+ --type-title-large-line: calc(28px * var(--scale-type));
435
+ --type-title-large-tracking: 0;
436
+ --type-title-medium-font: var(--font-sans);
437
+ --type-title-medium-weight: 500;
438
+ --type-title-medium-size: calc(16px * var(--scale-type));
439
+ --type-title-medium-line: calc(24px * var(--scale-type));
440
+ --type-title-medium-tracking: 0.15px;
441
+ --type-title-small-font: var(--font-sans);
442
+ --type-title-small-weight: 500;
443
+ --type-title-small-size: calc(14px * var(--scale-type));
444
+ --type-title-small-line: calc(20px * var(--scale-type));
445
+ --type-title-small-tracking: 0.1px;
446
+ --type-body-large-font: var(--font-sans);
447
+ --type-body-large-weight: 400;
448
+ --type-body-large-size: calc(16px * var(--scale-type));
449
+ --type-body-large-line: calc(24px * var(--scale-type));
450
+ --type-body-large-tracking: 0.5px;
451
+ --type-body-medium-font: var(--font-sans);
452
+ --type-body-medium-weight: 400;
453
+ --type-body-medium-size: calc(14px * var(--scale-type));
454
+ --type-body-medium-line: calc(20px * var(--scale-type));
455
+ --type-body-medium-tracking: 0.25px;
456
+ --type-body-small-font: var(--font-sans);
457
+ --type-body-small-weight: 400;
458
+ --type-body-small-size: calc(12px * var(--scale-type));
459
+ --type-body-small-line: calc(16px * var(--scale-type));
460
+ --type-body-small-tracking: 0.4px;
461
+ --type-label-large-font: var(--font-sans);
462
+ --type-label-large-weight: 500;
463
+ --type-label-large-size: calc(14px * var(--scale-type));
464
+ --type-label-large-line: calc(20px * var(--scale-type));
465
+ --type-label-large-tracking: 0.1px;
466
+ --type-label-medium-font: var(--font-sans);
467
+ --type-label-medium-weight: 500;
468
+ --type-label-medium-size: calc(12px * var(--scale-type));
469
+ --type-label-medium-line: calc(16px * var(--scale-type));
470
+ --type-label-medium-tracking: 0.5px;
471
+ --type-label-small-font: var(--font-sans);
472
+ --type-label-small-weight: 500;
473
+ --type-label-small-size: calc(11px * var(--scale-type));
474
+ --type-label-small-line: calc(16px * var(--scale-type));
475
+ --type-label-small-tracking: 0.5px;
476
+
477
+ /* === RESPONSIVE TYPOGRAPHY ROLES === */
478
+ --type-role-hero-title-font: var(--font-sans);
479
+ --type-role-hero-title-weight: 400;
480
+ --type-role-hero-title-size: clamp(calc(36px * var(--scale-type)), 8vw, calc(57px * var(--scale-type)));
481
+ --type-role-hero-title-line: clamp(calc(44px * var(--scale-type)), calc(8vw * 1.1228070175438596), calc(64px * var(--scale-type)));
482
+ --type-role-hero-title-tracking: 0;
483
+ --type-role-page-title-font: var(--font-sans);
484
+ --type-role-page-title-weight: 400;
485
+ --type-role-page-title-size: clamp(calc(30px * var(--scale-type)), 5.5vw, calc(45px * var(--scale-type)));
486
+ --type-role-page-title-line: clamp(calc(36px * var(--scale-type)), calc(5.5vw * 1.1555555555555554), calc(52px * var(--scale-type)));
487
+ --type-role-page-title-tracking: 0;
488
+ --type-role-section-title-font: var(--font-sans);
489
+ --type-role-section-title-weight: 400;
490
+ --type-role-section-title-size: clamp(calc(24px * var(--scale-type)), 4vw, calc(36px * var(--scale-type)));
491
+ --type-role-section-title-line: clamp(calc(32px * var(--scale-type)), calc(4vw * 1.2222222222222223), calc(44px * var(--scale-type)));
492
+ --type-role-section-title-tracking: 0;
493
+ --type-role-section-lead-font: var(--font-sans);
494
+ --type-role-section-lead-weight: 400;
495
+ --type-role-section-lead-size: clamp(calc(16px * var(--scale-type)), 2.2vw, calc(16px * var(--scale-type)));
496
+ --type-role-section-lead-line: clamp(calc(24px * var(--scale-type)), calc(2.2vw * 1.5), calc(24px * var(--scale-type)));
497
+ --type-role-section-lead-tracking: 0;
498
+ --type-role-panel-title-font: var(--font-sans);
499
+ --type-role-panel-title-weight: 400;
500
+ --type-role-panel-title-size: clamp(calc(18px * var(--scale-type)), 2.5vw, calc(24px * var(--scale-type)));
501
+ --type-role-panel-title-line: clamp(calc(24px * var(--scale-type)), calc(2.5vw * 1.3333333333333333), calc(32px * var(--scale-type)));
502
+ --type-role-panel-title-tracking: 0;
503
+ --type-role-card-title-font: var(--font-sans);
504
+ --type-role-card-title-weight: 500;
505
+ --type-role-card-title-size: clamp(calc(14px * var(--scale-type)), 2vw, calc(16px * var(--scale-type)));
506
+ --type-role-card-title-line: clamp(calc(20px * var(--scale-type)), calc(2vw * 1.5), calc(24px * var(--scale-type)));
507
+ --type-role-card-title-tracking: 0;
508
+ --type-role-eyebrow-font: var(--font-sans);
509
+ --type-role-eyebrow-weight: 500;
510
+ --type-role-eyebrow-size: clamp(calc(11px * var(--scale-type)), 1.2vw, calc(11px * var(--scale-type)));
511
+ --type-role-eyebrow-line: clamp(calc(16px * var(--scale-type)), calc(1.2vw * 1.4545454545454546), calc(16px * var(--scale-type)));
512
+ --type-role-eyebrow-tracking: 0;
513
+
514
+ /* === SHAPE (Radius) === */
515
+ --radius-none: 0px;
516
+ --radius-xs: calc(4px * var(--scale-radius));
517
+ --radius-sm: calc(8px * var(--scale-radius));
518
+ --radius-md: calc(12px * var(--scale-radius));
519
+ --radius-lg: calc(20px * var(--scale-radius));
520
+ --radius-xl: calc(32px * var(--scale-radius));
521
+ --radius-2xl: calc(48px * var(--scale-radius));
522
+ --radius-full: 9999px;
523
+ --radius-button-default: var(--radius-sm);
524
+ --radius-button-full: var(--radius-full);
525
+ --radius-button-family: var(--radius-button-default);
526
+ --radius-button: var(--radius-button-family);
527
+ --radius-icon-button: var(--radius-button-family);
528
+ --radius-fab: calc(16px * var(--scale-radius));
529
+
530
+ /* === ELEVATION === */
531
+ /* Shadow opacity scale (controlled by data-elevation attribute) */
532
+ --shadow-opacity: 1;
533
+ --shadow-0: none;
534
+ --shadow-1: 0px 1px 3px 1px rgba(0, 0, 0, calc(0.15 * var(--shadow-opacity))), 0px 1px 2px 0px rgba(0, 0, 0, calc(0.30 * var(--shadow-opacity)));
535
+ --shadow-2: 0px 2px 6px 2px rgba(0, 0, 0, calc(0.15 * var(--shadow-opacity))), 0px 1px 2px 0px rgba(0, 0, 0, calc(0.30 * var(--shadow-opacity)));
536
+ --shadow-3: 0px 4px 8px 3px rgba(0, 0, 0, calc(0.15 * var(--shadow-opacity))), 0px 1px 3px 0px rgba(0, 0, 0, calc(0.30 * var(--shadow-opacity)));
537
+ --shadow-4: 0px 6px 10px 4px rgba(0, 0, 0, calc(0.15 * var(--shadow-opacity))), 0px 2px 3px 0px rgba(0, 0, 0, calc(0.30 * var(--shadow-opacity)));
538
+ --shadow-5: 0px 8px 12px 6px rgba(0, 0, 0, calc(0.15 * var(--shadow-opacity))), 0px 4px 4px 0px rgba(0, 0, 0, calc(0.30 * var(--shadow-opacity)));
539
+
540
+ /* === MOTION === */
541
+ --duration-short: 100ms;
542
+ --duration-snappy: 150ms;
543
+ --duration-medium: 250ms;
544
+ --duration-emphasized: 300ms;
545
+ --duration-long: 500ms;
546
+ --ease-standard: cubic-bezier(0.2, 0, 0, 1);
547
+ --ease-accelerate: cubic-bezier(0.3, 0, 1, 1);
548
+ --ease-decelerate: cubic-bezier(0, 0, 0, 1);
549
+ --ease-emphasized: cubic-bezier(0.2, 0, 0, 1);
550
+
551
+ /* === OPACITY === */
552
+ --opacity-hover: 0.08;
553
+ --opacity-focus: 0.10;
554
+ --opacity-pressed: 0.10;
555
+ --opacity-dragged: 0.16;
556
+ --opacity-disabled: 0.38;
557
+ --opacity-muted: 0.60;
558
+
559
+ /* === ICON SIZES === */
560
+ --icon-xs: 16px;
561
+ --icon-sm: 20px;
562
+ --icon-md: 24px;
563
+ --icon-lg: 32px;
564
+ --icon-xl: 48px;
565
+
566
+ /* === COMPONENT SIZES === */
567
+ --size-action-sm: calc(32px * var(--scale-space));
568
+ --size-action-md: calc(40px * var(--scale-space));
569
+ --size-action-lg: calc(48px * var(--scale-space));
570
+ --space-action-padding-x-sm: calc(16px * var(--scale-space));
571
+ --space-action-padding-x-md: calc(24px * var(--scale-space));
572
+ --space-action-padding-x-lg: calc(32px * var(--scale-space));
573
+
574
+ --size-icon-button-sm: var(--size-action-sm);
575
+ --size-icon-button-md: var(--size-action-md);
576
+ --size-icon-button-lg: var(--size-action-lg);
577
+
578
+ --size-fab-sm: calc(40px * var(--scale-space));
579
+ --size-fab-md: calc(56px * var(--scale-space));
580
+ --size-fab-lg: calc(96px * var(--scale-space));
581
+ --size-fab-extended-min: calc(80px * var(--scale-space));
582
+ --space-fab-extended-x: calc(24px * var(--scale-space));
583
+
584
+ --size-avatar-sm: calc(32px * var(--scale-space));
585
+ --size-avatar-md: calc(40px * var(--scale-space));
586
+ --size-avatar-lg: calc(48px * var(--scale-space));
587
+ --size-avatar-xl: calc(56px * var(--scale-space));
588
+
589
+ --size-pagination-button: calc(48px * var(--scale-space));
590
+
591
+ /* === LAYOUT === */
592
+ --layout-margin: calc(16px * var(--scale-space));
593
+ --layout-gutter: calc(16px * var(--scale-space));
594
+ --layout-pane-gap: calc(20px * var(--scale-space));
595
+ --layout-pane-list: calc(360px * var(--scale-space));
596
+ --layout-pane-fixed: calc(412px * var(--scale-space));
597
+ --layout-pane-supporting: calc(400px * var(--scale-space));
598
+ --layout-rail: calc(72px * var(--scale-space));
599
+ --layout-drawer: calc(360px * var(--scale-space));
600
+ --layout-navigation-drawer: calc(300px * var(--scale-space));
601
+ --layout-command-list-max-height: calc(300px * var(--scale-space));
602
+ --layout-page-x: clamp(calc(var(--unit) * 4), 4vw, calc(var(--unit) * 10));
603
+ --layout-section-y: clamp(calc(var(--unit) * 12), 8vw, calc(var(--unit) * 28));
604
+ --layout-section-y-compact: clamp(calc(var(--unit) * 8), 5vw, calc(var(--unit) * 18));
605
+ --layout-hero-y: clamp(calc(var(--unit) * 14), 10vw, calc(var(--unit) * 36));
606
+ --layout-content-gap: clamp(calc(var(--unit) * 6), 4vw, calc(var(--unit) * 14));
607
+ --layout-panel-padding: clamp(calc(var(--unit) * 4), 3vw, calc(var(--unit) * 8));
608
+ --layout-card-padding: clamp(calc(var(--unit) * 4), 2.5vw, calc(var(--unit) * 7));
609
+ --layout-cluster-gap: clamp(calc(var(--unit) * 3), 2vw, calc(var(--unit) * 5));
610
+ --layout-grid-gap: clamp(calc(var(--unit) * 4), 3vw, calc(var(--unit) * 8));
611
+
612
+ /* === Z-INDEX === */
613
+ --z-fab: 500;
614
+ --z-header: 1000;
615
+ --z-drawer: 1500;
616
+ --z-popover: 2000;
617
+ --z-modal: 3000;
618
+ }
619
+
620
+ /* Optional runtime preference axes. Add attributes only when the application exposes them. */
621
+ [data-density="compact"] {
622
+ --scale-space-density: 0.875;
623
+ --scale-type-density: 0.9;
624
+ --scale-radius-density: 0.9;
625
+ }
626
+
627
+ [data-density="dense"] {
628
+ --scale-space-density: 0.75;
629
+ --scale-type-density: 0.85;
630
+ --scale-radius-density: 0.85;
631
+ }
632
+
633
+ [data-density="comfortable"] {
634
+ --scale-space-density: 1.1;
635
+ --scale-type-density: 1;
636
+ --scale-radius-density: 1;
637
+ }
638
+
639
+ [data-radius="none"] { --scale-radius-theme: 0; }
640
+ [data-radius="minimal"] { --scale-radius-theme: 0.25; }
641
+ [data-radius="sharp"] { --scale-radius-theme: 0.5; }
642
+ [data-radius="standard"] { --scale-radius-theme: 1; }
643
+ [data-radius="soft"] { --scale-radius-theme: 1.25; }
644
+
645
+ [data-action-shape="standard"] { --radius-button-family: var(--radius-button-default); }
646
+ [data-action-shape="full"] { --radius-button-family: var(--radius-button-full); }
647
+
648
+ [data-elevation="flat"] { --shadow-opacity: 0; }
649
+ [data-elevation="subtle"] { --shadow-opacity: 0.25; }
650
+ [data-elevation="standard"] { --shadow-opacity: 0.5; }
651
+ [data-elevation="pronounced"] { --shadow-opacity: 1; }
652
+
653
+ /* ============================================================
654
+ SCROLLBAR STYLING
655
+ Consistent scrollbars for all modes
656
+ ============================================================ */
657
+
658
+ /* Webkit scrollbar (Chrome, Safari, Edge) */
659
+ ::-webkit-scrollbar {
660
+ width: 8px;
661
+ height: 8px;
662
+ }
663
+
664
+ ::-webkit-scrollbar-track {
665
+ background: var(--color-surface-container-low);
666
+ border-radius: 4px;
667
+ }
668
+
669
+ ::-webkit-scrollbar-thumb {
670
+ background: var(--color-outline-variant);
671
+ border-radius: 4px;
672
+ }
673
+
674
+ ::-webkit-scrollbar-thumb:hover {
675
+ background: var(--color-outline);
676
+ }
677
+
678
+ /* Firefox scrollbar */
679
+ * {
680
+ scrollbar-width: thin;
681
+ scrollbar-color: var(--color-outline-variant) var(--color-surface-container-low);
682
+ }
683
+
684
+ /* Dark mode scrollbar adjustments */
685
+ .dark ::-webkit-scrollbar-track,
686
+ :root:not(.light) ::-webkit-scrollbar-track {
687
+ background: var(--color-surface-container);
688
+ }
689
+
690
+ .dark ::-webkit-scrollbar-thumb,
691
+ :root:not(.light) ::-webkit-scrollbar-thumb {
692
+ background: var(--color-outline-variant);
693
+ }
694
+
695
+ .dark ::-webkit-scrollbar-thumb:hover,
696
+ :root:not(.light) ::-webkit-scrollbar-thumb:hover {
697
+ background: var(--color-outline);
698
+ }
699
+
700
+ @media (prefers-color-scheme: dark) {
701
+ :root:not(.light) {
702
+ scrollbar-color: var(--color-outline-variant) var(--color-surface-container);
703
+ }
704
+ }
705
+
706
+ .dark {
707
+ scrollbar-color: var(--color-outline-variant) var(--color-surface-container);
708
+ }
709
+
710
+ /* ============================================================
711
+ TAILWIND v4 THEME MAPPING
712
+ Maps CSS variables to Tailwind utilities
713
+ ============================================================ */
714
+
715
+ @theme inline {
716
+ /* Breakpoints */
717
+ --breakpoint-sm: 640px;
718
+ --breakpoint-md: 768px;
719
+ --breakpoint-lg: 1024px;
720
+ --breakpoint-xl: 1280px;
721
+ --breakpoint-2xl: 1536px;
722
+ --breakpoint-compact: 0px;
723
+ --breakpoint-medium: 600px;
724
+ --breakpoint-expanded: 840px;
725
+
726
+ /* Colors - Direct reference to CSS vars */
727
+ --color-primary: var(--color-primary);
728
+ --color-on-primary: var(--color-on-primary);
729
+ --color-primary-container: var(--color-primary-container);
730
+ --color-on-primary-container: var(--color-on-primary-container);
731
+ --color-secondary: var(--color-secondary);
732
+ --color-on-secondary: var(--color-on-secondary);
733
+ --color-secondary-container: var(--color-secondary-container);
734
+ --color-on-secondary-container: var(--color-on-secondary-container);
735
+ --color-tertiary: var(--color-tertiary);
736
+ --color-on-tertiary: var(--color-on-tertiary);
737
+ --color-tertiary-container: var(--color-tertiary-container);
738
+ --color-on-tertiary-container: var(--color-on-tertiary-container);
739
+ --color-surface: var(--color-surface);
740
+ --color-on-surface: var(--color-on-surface);
741
+ --color-surface-container-lowest: var(--color-surface-container-lowest);
742
+ --color-surface-container-low: var(--color-surface-container-low);
743
+ --color-surface-container: var(--color-surface-container);
744
+ --color-surface-container-high: var(--color-surface-container-high);
745
+ --color-surface-container-highest: var(--color-surface-container-highest);
746
+ --color-surface-variant: var(--color-surface-variant);
747
+ --color-on-surface-variant: var(--color-on-surface-variant);
748
+ --color-background: var(--color-background);
749
+ --color-on-background: var(--color-on-background);
750
+ --color-outline: var(--color-outline);
751
+ --color-outline-variant: var(--color-outline-variant);
752
+ --color-control-outline: var(--color-control-outline);
753
+ --color-error: var(--color-error);
754
+ --color-on-error: var(--color-on-error);
755
+ --color-error-container: var(--color-error-container);
756
+ --color-on-error-container: var(--color-on-error-container);
757
+ --color-success: var(--color-success);
758
+ --color-on-success: var(--color-on-success);
759
+ --color-success-container: var(--color-success-container);
760
+ --color-on-success-container: var(--color-on-success-container);
761
+ --color-warning: var(--color-warning);
762
+ --color-on-warning: var(--color-on-warning);
763
+ --color-warning-container: var(--color-warning-container);
764
+ --color-on-warning-container: var(--color-on-warning-container);
765
+ --color-info: var(--color-info);
766
+ --color-on-info: var(--color-on-info);
767
+ --color-info-container: var(--color-info-container);
768
+ --color-on-info-container: var(--color-on-info-container);
769
+ --color-inverse-surface: var(--color-inverse-surface);
770
+ --color-inverse-on-surface: var(--color-inverse-on-surface);
771
+ --color-inverse-primary: var(--color-inverse-primary);
772
+ --color-scrim: var(--color-scrim);
773
+ --color-scrim-soft: var(--color-scrim-soft);
774
+ --color-outline-weak: var(--color-outline-weak);
775
+ --color-outline-soft: var(--color-outline-soft);
776
+ --color-outline-muted: var(--color-outline-muted);
777
+ --color-outline-subtle: var(--color-outline-subtle);
778
+ --color-outline-medium: var(--color-outline-medium);
779
+ --color-outline-strong: var(--color-outline-strong);
780
+ --color-state-hover: var(--color-state-hover);
781
+ --color-state-focus: var(--color-state-focus);
782
+ --color-state-pressed: var(--color-state-pressed);
783
+ --color-state-selected: var(--color-state-selected);
784
+ --color-state-error: var(--color-state-error);
785
+ --color-focus-ring: var(--color-focus-ring);
786
+ --color-focus-ring-error: var(--color-focus-ring-error);
787
+
788
+ /* Radius */
789
+ --radius-none: var(--radius-none);
790
+ --radius-xs: var(--radius-xs);
791
+ --radius-sm: var(--radius-sm);
792
+ --radius-md: var(--radius-md);
793
+ --radius-lg: var(--radius-lg);
794
+ --radius-xl: var(--radius-xl);
795
+ --radius-2xl: var(--radius-2xl);
796
+ --radius-full: var(--radius-full);
797
+ --radius-button-default: var(--radius-button-default);
798
+ --radius-button-full: var(--radius-button-full);
799
+ --radius-button-family: var(--radius-button-family);
800
+ --radius-button: var(--radius-button);
801
+ --radius-icon-button: var(--radius-icon-button);
802
+ --radius-fab: var(--radius-fab);
803
+
804
+ /* Shadows */
805
+ --shadow-0: var(--shadow-0);
806
+ --shadow-1: var(--shadow-1);
807
+ --shadow-2: var(--shadow-2);
808
+ --shadow-3: var(--shadow-3);
809
+ --shadow-4: var(--shadow-4);
810
+ --shadow-5: var(--shadow-5);
811
+
812
+ /* Motion */
813
+ --duration-short: var(--duration-short);
814
+ --duration-snappy: var(--duration-snappy);
815
+ --duration-medium: var(--duration-medium);
816
+ --duration-emphasized: var(--duration-emphasized);
817
+ --duration-long: var(--duration-long);
818
+ --ease-standard: var(--ease-standard);
819
+ --ease-emphasized: var(--ease-emphasized);
820
+ --ease-decelerate: var(--ease-decelerate);
821
+ --ease-accelerate: var(--ease-accelerate);
822
+
823
+ /* Typography - using --text-* for Tailwind v4 text-* utilities */
824
+ --font-sans: var(--font-sans);
825
+ --text-display-large: var(--type-display-large-size);
826
+ --text-display-large--line-height: var(--type-display-large-line);
827
+ --text-display-large--letter-spacing: var(--type-display-large-tracking);
828
+ --text-display-large--font-weight: var(--type-display-large-weight);
829
+ --text-display-medium: var(--type-display-medium-size);
830
+ --text-display-medium--line-height: var(--type-display-medium-line);
831
+ --text-display-medium--letter-spacing: var(--type-display-medium-tracking);
832
+ --text-display-medium--font-weight: var(--type-display-medium-weight);
833
+ --text-display-small: var(--type-display-small-size);
834
+ --text-display-small--line-height: var(--type-display-small-line);
835
+ --text-display-small--letter-spacing: var(--type-display-small-tracking);
836
+ --text-display-small--font-weight: var(--type-display-small-weight);
837
+ --text-headline-large: var(--type-headline-large-size);
838
+ --text-headline-large--line-height: var(--type-headline-large-line);
839
+ --text-headline-large--letter-spacing: var(--type-headline-large-tracking);
840
+ --text-headline-large--font-weight: var(--type-headline-large-weight);
841
+ --text-headline-medium: var(--type-headline-medium-size);
842
+ --text-headline-medium--line-height: var(--type-headline-medium-line);
843
+ --text-headline-medium--letter-spacing: var(--type-headline-medium-tracking);
844
+ --text-headline-medium--font-weight: var(--type-headline-medium-weight);
845
+ --text-headline-small: var(--type-headline-small-size);
846
+ --text-headline-small--line-height: var(--type-headline-small-line);
847
+ --text-headline-small--letter-spacing: var(--type-headline-small-tracking);
848
+ --text-headline-small--font-weight: var(--type-headline-small-weight);
849
+ --text-title-large: var(--type-title-large-size);
850
+ --text-title-large--line-height: var(--type-title-large-line);
851
+ --text-title-large--letter-spacing: var(--type-title-large-tracking);
852
+ --text-title-large--font-weight: var(--type-title-large-weight);
853
+ --text-title-medium: var(--type-title-medium-size);
854
+ --text-title-medium--line-height: var(--type-title-medium-line);
855
+ --text-title-medium--letter-spacing: var(--type-title-medium-tracking);
856
+ --text-title-medium--font-weight: var(--type-title-medium-weight);
857
+ --text-title-small: var(--type-title-small-size);
858
+ --text-title-small--line-height: var(--type-title-small-line);
859
+ --text-title-small--letter-spacing: var(--type-title-small-tracking);
860
+ --text-title-small--font-weight: var(--type-title-small-weight);
861
+ --text-body-large: var(--type-body-large-size);
862
+ --text-body-large--line-height: var(--type-body-large-line);
863
+ --text-body-large--letter-spacing: var(--type-body-large-tracking);
864
+ --text-body-large--font-weight: var(--type-body-large-weight);
865
+ --text-body-medium: var(--type-body-medium-size);
866
+ --text-body-medium--line-height: var(--type-body-medium-line);
867
+ --text-body-medium--letter-spacing: var(--type-body-medium-tracking);
868
+ --text-body-medium--font-weight: var(--type-body-medium-weight);
869
+ --text-body-small: var(--type-body-small-size);
870
+ --text-body-small--line-height: var(--type-body-small-line);
871
+ --text-body-small--letter-spacing: var(--type-body-small-tracking);
872
+ --text-body-small--font-weight: var(--type-body-small-weight);
873
+ --text-label-large: var(--type-label-large-size);
874
+ --text-label-large--line-height: var(--type-label-large-line);
875
+ --text-label-large--letter-spacing: var(--type-label-large-tracking);
876
+ --text-label-large--font-weight: var(--type-label-large-weight);
877
+ --text-label-medium: var(--type-label-medium-size);
878
+ --text-label-medium--line-height: var(--type-label-medium-line);
879
+ --text-label-medium--letter-spacing: var(--type-label-medium-tracking);
880
+ --text-label-medium--font-weight: var(--type-label-medium-weight);
881
+ --text-label-small: var(--type-label-small-size);
882
+ --text-label-small--line-height: var(--type-label-small-line);
883
+ --text-label-small--letter-spacing: var(--type-label-small-tracking);
884
+ --text-label-small--font-weight: var(--type-label-small-weight);
885
+ --text-role-hero-title: var(--type-role-hero-title-size);
886
+ --text-role-hero-title--line-height: var(--type-role-hero-title-line);
887
+ --text-role-hero-title--letter-spacing: var(--type-role-hero-title-tracking);
888
+ --text-role-hero-title--font-weight: var(--type-role-hero-title-weight);
889
+ --text-role-page-title: var(--type-role-page-title-size);
890
+ --text-role-page-title--line-height: var(--type-role-page-title-line);
891
+ --text-role-page-title--letter-spacing: var(--type-role-page-title-tracking);
892
+ --text-role-page-title--font-weight: var(--type-role-page-title-weight);
893
+ --text-role-section-title: var(--type-role-section-title-size);
894
+ --text-role-section-title--line-height: var(--type-role-section-title-line);
895
+ --text-role-section-title--letter-spacing: var(--type-role-section-title-tracking);
896
+ --text-role-section-title--font-weight: var(--type-role-section-title-weight);
897
+ --text-role-section-lead: var(--type-role-section-lead-size);
898
+ --text-role-section-lead--line-height: var(--type-role-section-lead-line);
899
+ --text-role-section-lead--letter-spacing: var(--type-role-section-lead-tracking);
900
+ --text-role-section-lead--font-weight: var(--type-role-section-lead-weight);
901
+ --text-role-panel-title: var(--type-role-panel-title-size);
902
+ --text-role-panel-title--line-height: var(--type-role-panel-title-line);
903
+ --text-role-panel-title--letter-spacing: var(--type-role-panel-title-tracking);
904
+ --text-role-panel-title--font-weight: var(--type-role-panel-title-weight);
905
+ --text-role-card-title: var(--type-role-card-title-size);
906
+ --text-role-card-title--line-height: var(--type-role-card-title-line);
907
+ --text-role-card-title--letter-spacing: var(--type-role-card-title-tracking);
908
+ --text-role-card-title--font-weight: var(--type-role-card-title-weight);
909
+ --text-role-eyebrow: var(--type-role-eyebrow-size);
910
+ --text-role-eyebrow--line-height: var(--type-role-eyebrow-line);
911
+ --text-role-eyebrow--letter-spacing: var(--type-role-eyebrow-tracking);
912
+ --text-role-eyebrow--font-weight: var(--type-role-eyebrow-weight);
913
+
914
+ /* Spacing - Standard Tailwind keys mapped to density-scaled values */
915
+ /* These override Tailwind defaults so p-4, gap-2, etc. scale with density */
916
+ --spacing-0: 0px;
917
+ --spacing-0_5: calc(var(--unit) * 0.5);
918
+ --spacing-1: calc(var(--unit) * 1);
919
+ --spacing-1_5: calc(var(--unit) * 1.5);
920
+ --spacing-2: calc(var(--unit) * 2);
921
+ --spacing-2_5: calc(var(--unit) * 2.5);
922
+ --spacing-3: calc(var(--unit) * 3);
923
+ --spacing-3_5: calc(var(--unit) * 3.5);
924
+ --spacing-4: calc(var(--unit) * 4);
925
+ --spacing-5: calc(var(--unit) * 5);
926
+ --spacing-6: calc(var(--unit) * 6);
927
+ --spacing-7: calc(var(--unit) * 7);
928
+ --spacing-8: calc(var(--unit) * 8);
929
+ --spacing-9: calc(var(--unit) * 9);
930
+ --spacing-10: calc(var(--unit) * 10);
931
+ --spacing-11: calc(var(--unit) * 11);
932
+ --spacing-12: calc(var(--unit) * 12);
933
+ --spacing-14: calc(var(--unit) * 14);
934
+ --spacing-16: calc(var(--unit) * 16);
935
+ --spacing-20: calc(var(--unit) * 20);
936
+ --spacing-24: calc(var(--unit) * 24);
937
+ --spacing-25: calc(var(--unit) * 25);
938
+ --spacing-28: calc(var(--unit) * 28);
939
+ --spacing-30: calc(var(--unit) * 30);
940
+ --spacing-32: calc(var(--unit) * 32);
941
+ --spacing-36: calc(var(--unit) * 36);
942
+ --spacing-38: calc(var(--unit) * 38);
943
+ --spacing-40: calc(var(--unit) * 40);
944
+ --spacing-44: calc(var(--unit) * 44);
945
+ --spacing-48: calc(var(--unit) * 48);
946
+ --spacing-50: calc(var(--unit) * 50);
947
+ --spacing-52: calc(var(--unit) * 52);
948
+ --spacing-56: calc(var(--unit) * 56);
949
+ --spacing-60: calc(var(--unit) * 60);
950
+ --spacing-64: calc(var(--unit) * 64);
951
+ --spacing-70: calc(var(--unit) * 70);
952
+ --spacing-72: calc(var(--unit) * 72);
953
+ --spacing-78: calc(var(--unit) * 78);
954
+ --spacing-80: calc(var(--unit) * 80);
955
+ --spacing-86: calc(var(--unit) * 86);
956
+ --spacing-90: calc(var(--unit) * 90);
957
+ --spacing-96: calc(var(--unit) * 96);
958
+ --spacing-100: calc(var(--unit) * 100);
959
+ --spacing-120: calc(var(--unit) * 120);
960
+ --spacing-150: calc(var(--unit) * 150);
961
+ --spacing-170: calc(var(--unit) * 170);
962
+ --spacing-210: calc(var(--unit) * 210);
963
+ --spacing-250: calc(var(--unit) * 250);
964
+ --spacing-280: calc(var(--unit) * 280);
965
+
966
+ /* Layout */
967
+ --spacing-layout-margin: var(--layout-margin);
968
+ --spacing-layout-gutter: var(--layout-gutter);
969
+ --spacing-layout-page-x: var(--layout-page-x);
970
+ --spacing-layout-section-y: var(--layout-section-y);
971
+ --spacing-layout-section-y-compact: var(--layout-section-y-compact);
972
+ --spacing-layout-hero-y: var(--layout-hero-y);
973
+ --spacing-layout-content-gap: var(--layout-content-gap);
974
+ --spacing-layout-panel-padding: var(--layout-panel-padding);
975
+ --spacing-layout-card-padding: var(--layout-card-padding);
976
+ --spacing-layout-cluster-gap: var(--layout-cluster-gap);
977
+ --spacing-layout-grid-gap: var(--layout-grid-gap);
978
+ --width-pane-list: var(--layout-pane-list);
979
+ --width-pane-fixed: var(--layout-pane-fixed);
980
+ --width-pane-supporting: var(--layout-pane-supporting);
981
+ --width-rail: var(--layout-rail);
982
+ --width-drawer: var(--layout-drawer);
983
+ --width-navigation-drawer: var(--layout-navigation-drawer);
984
+
985
+ /* Z-Index */
986
+ --z-fab: var(--z-fab);
987
+ --z-header: var(--z-header);
988
+ --z-drawer: var(--z-drawer);
989
+ --z-popover: var(--z-popover);
990
+ --z-modal: var(--z-modal);
991
+
992
+ /* Icons - use with w-icon-sm, h-icon-sm */
993
+ --spacing-icon-xs: var(--icon-xs);
994
+ --spacing-icon-sm: var(--icon-sm);
995
+ --spacing-icon-md: var(--icon-md);
996
+ --spacing-icon-lg: var(--icon-lg);
997
+ --spacing-icon-xl: var(--icon-xl);
998
+
999
+ /* Size utilities for icons - use with size-icon-sm */
1000
+ --size-icon-xs: var(--icon-xs);
1001
+ --size-icon-sm: var(--icon-sm);
1002
+ --size-icon-md: var(--icon-md);
1003
+ --size-icon-lg: var(--icon-lg);
1004
+ --size-icon-xl: var(--icon-xl);
1005
+
1006
+ /* Opacity */
1007
+ --opacity-hover: var(--opacity-hover);
1008
+ --opacity-focus: var(--opacity-focus);
1009
+ --opacity-pressed: var(--opacity-pressed);
1010
+ --opacity-dragged: var(--opacity-dragged);
1011
+ --opacity-disabled: var(--opacity-disabled);
1012
+ --opacity-muted: var(--opacity-muted);
1013
+ }
1014
+
1015
+ /* ============================================================
1016
+ SHARED RUNTIME UTILITIES
1017
+ Public utility aliases that source-mode and package-mode consumers
1018
+ both rely on at runtime.
1019
+ ============================================================ */
1020
+
1021
+ @layer utilities {
1022
+ .duration-short {
1023
+ transition-duration: var(--duration-short);
1024
+ }
1025
+
1026
+ .duration-snappy {
1027
+ transition-duration: var(--duration-snappy);
1028
+ }
1029
+
1030
+ .duration-medium {
1031
+ transition-duration: var(--duration-medium);
1032
+ }
1033
+
1034
+ .duration-emphasized {
1035
+ transition-duration: var(--duration-emphasized);
1036
+ }
1037
+
1038
+ .duration-long {
1039
+ transition-duration: var(--duration-long);
1040
+ }
1041
+ }
1042
+
1043
+ /* Compile the complete first-party runtime baseline once. Consumers never scan package source. */
1044
+ @source "./**/*.{ts,tsx}";
1045
+
1046
+ /* Dark mode variant */
1047
+ @custom-variant dark (&:is(.dark *));
1048
+
1049
+ /* Expanded variant - 840px breakpoint for sidebar desktop mode */
1050
+ @custom-variant expanded (@media (min-width: 840px));
1051
+
1052
+ /* Medium breakpoint for tablet (M3 medium = 600px) */
1053
+ @custom-variant medium (@media (min-width: 600px));
1054
+
1055
+ /* Ripple animation - moved outside @theme for better performance */
1056
+ @keyframes ripple {
1057
+ from {
1058
+ opacity: 0.35;
1059
+ transform: scale(0);
1060
+ }
1061
+ to {
1062
+ opacity: 0;
1063
+ transform: scale(2);
1064
+ }
1065
+ }
1066
+
1067
+ @keyframes progress-indeterminate {
1068
+ from {
1069
+ transform: translateX(-100%);
1070
+ }
1071
+ to {
1072
+ transform: translateX(300%);
1073
+ }
1074
+ }
1075
+
1076
+ /* Stagger animation for list items */
1077
+ @keyframes stagger-in {
1078
+ from {
1079
+ opacity: 0;
1080
+ transform: translateY(8px);
1081
+ }
1082
+ to {
1083
+ opacity: 1;
1084
+ transform: translateY(0);
1085
+ }
1086
+ }
1087
+
1088
+ /* Content enter animation for drawer content transitions */
1089
+ @keyframes content-enter {
1090
+ from {
1091
+ opacity: 0;
1092
+ transform: translateX(-8px);
1093
+ }
1094
+ to {
1095
+ opacity: 1;
1096
+ transform: translateX(0);
1097
+ }
1098
+ }
1099
+
1100
+ @keyframes fade-enter {
1101
+ from {
1102
+ opacity: 0;
1103
+ }
1104
+ to {
1105
+ opacity: 1;
1106
+ }
1107
+ }
1108
+
1109
+ @keyframes surface-enter {
1110
+ from {
1111
+ opacity: 0;
1112
+ transform: translateY(4px) scale(0.98);
1113
+ }
1114
+ to {
1115
+ opacity: 1;
1116
+ transform: translateY(0) scale(1);
1117
+ }
1118
+ }
1119
+
1120
+ @keyframes panel-enter {
1121
+ from {
1122
+ opacity: 0;
1123
+ transform: translateY(6px);
1124
+ }
1125
+ to {
1126
+ opacity: 1;
1127
+ transform: translateY(0);
1128
+ }
1129
+ }
1130
+
1131
+ @keyframes scale-enter {
1132
+ from {
1133
+ opacity: 0;
1134
+ transform: scale(0.82);
1135
+ }
1136
+ to {
1137
+ opacity: 1;
1138
+ transform: scale(1);
1139
+ }
1140
+ }
1141
+
1142
+ @keyframes scale-x-enter {
1143
+ from {
1144
+ opacity: 0;
1145
+ transform: scaleX(0.82);
1146
+ }
1147
+ to {
1148
+ opacity: 1;
1149
+ transform: scaleX(1);
1150
+ }
1151
+ }
1152
+
1153
+ @keyframes toast-enter {
1154
+ from {
1155
+ opacity: 0;
1156
+ transform: translateX(16px);
1157
+ }
1158
+ to {
1159
+ opacity: 1;
1160
+ transform: translateX(0);
1161
+ }
1162
+ }
1163
+
1164
+ @keyframes drawer-fade-in {
1165
+ from {
1166
+ opacity: 0;
1167
+ }
1168
+ to {
1169
+ opacity: 1;
1170
+ }
1171
+ }
1172
+
1173
+ @keyframes drawer-fade-out {
1174
+ to {
1175
+ opacity: 0;
1176
+ }
1177
+ }
1178
+
1179
+ @keyframes drawer-slide-from-bottom {
1180
+ from {
1181
+ transform: translate3d(0, var(--initial-transform, 100%), 0);
1182
+ }
1183
+ to {
1184
+ transform: translate3d(0, 0, 0);
1185
+ }
1186
+ }
1187
+
1188
+ @keyframes drawer-slide-to-bottom {
1189
+ to {
1190
+ transform: translate3d(0, var(--initial-transform, 100%), 0);
1191
+ }
1192
+ }
1193
+
1194
+ @layer base {
1195
+ /* Remove default focus outline */
1196
+ *:focus {
1197
+ outline: none;
1198
+ }
1199
+
1200
+ /* Apply custom focus ring only for keyboard navigation */
1201
+ *:focus-visible {
1202
+ outline: 2px solid var(--color-primary);
1203
+ outline-offset: 2px;
1204
+ }
1205
+
1206
+ /* Ensure focus is visible on interactive elements */
1207
+ button:focus-visible,
1208
+ a:focus-visible,
1209
+ input:focus-visible,
1210
+ select:focus-visible,
1211
+ textarea:focus-visible {
1212
+ outline: 2px solid var(--color-primary);
1213
+ outline-offset: 2px;
1214
+ }
1215
+
1216
+ .unisane-text-field-control:-webkit-autofill,
1217
+ .unisane-text-field-control:-webkit-autofill:hover,
1218
+ .unisane-text-field-control:-webkit-autofill:focus,
1219
+ .unisane-text-field-control:-webkit-autofill:active {
1220
+ -webkit-box-shadow: 0 0 0 1000px var(--color-surface) inset;
1221
+ -webkit-text-fill-color: var(--color-on-surface);
1222
+ caret-color: var(--color-primary);
1223
+ transition: background-color 9999s ease-out;
1224
+ }
1225
+
1226
+ [data-vaul-drawer] {
1227
+ touch-action: none;
1228
+ will-change: transform;
1229
+ transition: transform 500ms cubic-bezier(0.32, 0.72, 0, 1);
1230
+ animation-duration: 500ms;
1231
+ animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1);
1232
+ }
1233
+
1234
+ [data-vaul-drawer][data-vaul-snap-points='false'][data-vaul-drawer-direction='bottom'][data-state='open'] {
1235
+ animation-name: drawer-slide-from-bottom;
1236
+ }
1237
+
1238
+ [data-vaul-drawer][data-vaul-snap-points='false'][data-vaul-drawer-direction='bottom'][data-state='closed'] {
1239
+ animation-name: drawer-slide-to-bottom;
1240
+ }
1241
+
1242
+ [data-vaul-overlay][data-vaul-snap-points='false'] {
1243
+ animation-duration: 500ms;
1244
+ animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1);
1245
+ }
1246
+
1247
+ [data-vaul-overlay][data-vaul-snap-points='false'][data-state='open'] {
1248
+ animation-name: drawer-fade-in;
1249
+ }
1250
+
1251
+ [data-vaul-overlay][data-state='closed'] {
1252
+ animation-name: drawer-fade-out;
1253
+ }
1254
+
1255
+ [data-vaul-animate='false'] {
1256
+ animation: none !important;
1257
+ }
1258
+
1259
+ [data-vaul-drawer]:not([data-vaul-custom-container='true'])::after {
1260
+ content: '';
1261
+ position: absolute;
1262
+ inset-inline: 0;
1263
+ top: 100%;
1264
+ height: 200%;
1265
+ background: inherit;
1266
+ background-color: inherit;
1267
+ }
1268
+
1269
+ [data-vaul-handle] {
1270
+ display: block;
1271
+ position: relative;
1272
+ opacity: 1;
1273
+ background: var(--color-outline-muted);
1274
+ margin-inline: auto;
1275
+ height: 4px;
1276
+ width: 32px;
1277
+ border-radius: var(--radius-full);
1278
+ touch-action: pan-y;
1279
+ }
1280
+
1281
+ [data-vaul-handle-hitarea] {
1282
+ position: absolute;
1283
+ left: 50%;
1284
+ top: 50%;
1285
+ transform: translate(-50%, -50%);
1286
+ width: max(100%, 2.75rem);
1287
+ height: max(100%, 2.75rem);
1288
+ touch-action: inherit;
1289
+ }
1290
+ }
1291
+
1292
+ @layer utilities {
1293
+ /* Sidebar inset - applies margin only on desktop (expanded breakpoint 840px+) */
1294
+ .sidebar-inset {
1295
+ margin-left: 0;
1296
+ }
1297
+
1298
+ @media (min-width: 840px) {
1299
+ .sidebar-inset {
1300
+ margin-left: var(--sidebar-desktop-margin, 96px);
1301
+ }
1302
+ }
1303
+
1304
+ /* Scrollbar utilities */
1305
+ .no-scrollbar::-webkit-scrollbar {
1306
+ display: none;
1307
+ }
1308
+
1309
+ .no-scrollbar {
1310
+ -ms-overflow-style: none;
1311
+ scrollbar-width: none;
1312
+ }
1313
+
1314
+ /* Ripple container */
1315
+ .ripple-container {
1316
+ position: relative;
1317
+ overflow: hidden;
1318
+ }
1319
+
1320
+ /* Animation utilities */
1321
+ .animate-in {
1322
+ animation-fill-mode: both;
1323
+ }
1324
+
1325
+ .animate-out {
1326
+ animation-fill-mode: both;
1327
+ animation-direction: reverse;
1328
+ }
1329
+
1330
+ .animate-stagger {
1331
+ animation: stagger-in 300ms ease-out;
1332
+ }
1333
+
1334
+ .animate-ripple {
1335
+ animation: ripple 600ms ease-out;
1336
+ }
1337
+
1338
+ .animate-content-enter {
1339
+ animation: content-enter 200ms ease-out;
1340
+ }
1341
+
1342
+ .animate-fade-enter {
1343
+ animation: fade-enter var(--duration-short, 120ms) var(--ease-standard, ease-out) both;
1344
+ }
1345
+
1346
+ .animate-surface-enter {
1347
+ animation: surface-enter var(--duration-short, 120ms) var(--ease-standard, ease-out) both;
1348
+ }
1349
+
1350
+ .animate-panel-enter {
1351
+ animation: panel-enter var(--duration-medium, 160ms) var(--ease-standard, ease-out) both;
1352
+ }
1353
+
1354
+ .animate-scale-enter {
1355
+ animation: scale-enter var(--duration-medium, 160ms) var(--ease-emphasized, ease-out) both;
1356
+ }
1357
+
1358
+ .animate-scale-x-enter {
1359
+ animation: scale-x-enter var(--duration-medium, 160ms) var(--ease-emphasized, ease-out) both;
1360
+ }
1361
+
1362
+ .animate-toast-enter {
1363
+ animation: toast-enter var(--duration-medium, 160ms) var(--ease-emphasized, ease-out) both;
1364
+ }
1365
+
1366
+ /* Z-index utilities for layering system */
1367
+ .z-modal {
1368
+ z-index: var(--z-modal, 3000);
1369
+ }
1370
+ }