@devalok/shilp-sutra 0.34.1 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/LICENSE +21 -21
  2. package/dist/_chunks/badge-group.js +95 -95
  3. package/dist/_chunks/badge-group.js.map +1 -0
  4. package/dist/_chunks/chat.js +7 -2
  5. package/dist/_chunks/chat.js.map +1 -0
  6. package/dist/_chunks/date-picker.js.map +1 -0
  7. package/dist/_chunks/document-preview.js.map +1 -0
  8. package/dist/_chunks/file-preview.js.map +1 -0
  9. package/dist/_chunks/framer.js +62 -62
  10. package/dist/_chunks/framer.js.map +1 -0
  11. package/dist/_chunks/image-preview.js +1 -1
  12. package/dist/_chunks/image-preview.js.map +1 -0
  13. package/dist/_chunks/keybinding.js.map +1 -0
  14. package/dist/_chunks/link-context.js.map +1 -0
  15. package/dist/_chunks/mention-suggestion.js.map +1 -0
  16. package/dist/_chunks/motion-provider.js.map +1 -0
  17. package/dist/_chunks/popover.js +32 -36
  18. package/dist/_chunks/popover.js.map +1 -0
  19. package/dist/_chunks/primitives.js +686 -686
  20. package/dist/_chunks/primitives.js.map +1 -0
  21. package/dist/_chunks/rich-chat-input.js +650 -649
  22. package/dist/_chunks/rich-chat-input.js.map +1 -0
  23. package/dist/_chunks/shared.js.map +1 -0
  24. package/dist/_chunks/sonner.js.map +1 -0
  25. package/dist/_chunks/stat-row.js +158 -158
  26. package/dist/_chunks/stat-row.js.map +1 -0
  27. package/dist/_chunks/tiptap.js +11 -11
  28. package/dist/_chunks/tiptap.js.map +1 -0
  29. package/dist/_chunks/tree-view.js +1 -1
  30. package/dist/_chunks/tree-view.js.map +1 -0
  31. package/dist/_chunks/use-calendar.js.map +1 -0
  32. package/dist/_chunks/vendor-client.js +1 -1
  33. package/dist/_chunks/vendor-client.js.map +1 -0
  34. package/dist/_chunks/vendor-utils.js.map +1 -0
  35. package/dist/ai/ai-command-provider.js.map +1 -0
  36. package/dist/ai/block-renderer.js.map +1 -0
  37. package/dist/ai/blocks/loading.d.ts.map +1 -1
  38. package/dist/ai/command-bar.js.map +1 -0
  39. package/dist/ai/conversation.js +76 -76
  40. package/dist/ai/conversation.js.map +1 -0
  41. package/dist/ai/devadoot-icon.d.ts.map +1 -1
  42. package/dist/ai/index.js.map +1 -0
  43. package/dist/composed/activity-feed.js.map +1 -0
  44. package/dist/composed/avatar-group.js +1 -1
  45. package/dist/composed/avatar-group.js.map +1 -0
  46. package/dist/composed/bulk-action-bar.js +13 -21
  47. package/dist/composed/bulk-action-bar.js.map +1 -0
  48. package/dist/composed/command-palette.js.map +1 -0
  49. package/dist/composed/confirm-dialog.js.map +1 -0
  50. package/dist/composed/content-card.js.map +1 -0
  51. package/dist/composed/deadline-indicator.js.map +1 -0
  52. package/dist/composed/emoji-picker.js.map +1 -0
  53. package/dist/composed/empty-state.d.ts.map +1 -1
  54. package/dist/composed/empty-state.js +30 -30
  55. package/dist/composed/empty-state.js.map +1 -0
  56. package/dist/composed/error-boundary.js.map +1 -0
  57. package/dist/composed/filter-bar.js.map +1 -0
  58. package/dist/composed/form-section.js.map +1 -0
  59. package/dist/composed/global-loading.js.map +1 -0
  60. package/dist/composed/inline-edit.js.map +1 -0
  61. package/dist/composed/lib/string-utils.js.map +1 -0
  62. package/dist/composed/loading-skeleton.js.map +1 -0
  63. package/dist/composed/markdown-viewer.js.map +1 -0
  64. package/dist/composed/master-detail.js.map +1 -0
  65. package/dist/composed/member-picker.js.map +1 -0
  66. package/dist/composed/multi-select-popover.d.ts.map +1 -1
  67. package/dist/composed/multi-select-popover.js +4 -0
  68. package/dist/composed/multi-select-popover.js.map +1 -0
  69. package/dist/composed/page-header.js.map +1 -0
  70. package/dist/composed/page-skeletons.js.map +1 -0
  71. package/dist/composed/priority-indicator.js.map +1 -0
  72. package/dist/composed/responsive-overlay.js.map +1 -0
  73. package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -1
  74. package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -1
  75. package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -1
  76. package/dist/composed/rich-chat-input.d.ts.map +1 -1
  77. package/dist/composed/rich-text-editor.js.map +1 -0
  78. package/dist/composed/schedule-view.js.map +1 -0
  79. package/dist/composed/simple-tooltip.js.map +1 -0
  80. package/dist/composed/status-badge.d.ts.map +1 -1
  81. package/dist/composed/status-badge.js.map +1 -0
  82. package/dist/hooks/use-color-mode.js.map +1 -0
  83. package/dist/hooks/use-mobile.js.map +1 -0
  84. package/dist/hooks/use-touch-device.js.map +1 -0
  85. package/dist/hooks/use-viewport-height.js.map +1 -0
  86. package/dist/motion/check-motion-provider.d.ts +3 -0
  87. package/dist/motion/check-motion-provider.d.ts.map +1 -0
  88. package/dist/motion/index.js +14 -0
  89. package/dist/motion/index.js.map +1 -0
  90. package/dist/motion/primitives-index.js.map +1 -0
  91. package/dist/primitives/react-accordion.d.ts +114 -114
  92. package/dist/primitives/react-alert-dialog.d.ts +51 -51
  93. package/dist/primitives/react-aspect-ratio.d.ts +11 -11
  94. package/dist/primitives/react-avatar.d.ts +24 -24
  95. package/dist/primitives/react-checkbox.d.ts +50 -50
  96. package/dist/primitives/react-collapsible.d.ts +33 -33
  97. package/dist/primitives/react-context-menu.d.ts +96 -96
  98. package/dist/primitives/react-dialog.d.ts +103 -103
  99. package/dist/primitives/react-dropdown-menu.d.ts +97 -97
  100. package/dist/primitives/react-hover-card.d.ts +79 -79
  101. package/dist/primitives/react-label.d.ts +10 -10
  102. package/dist/primitives/react-menu.d.ts +169 -169
  103. package/dist/primitives/react-menubar.d.ts +115 -115
  104. package/dist/primitives/react-navigation-menu.d.ts +126 -126
  105. package/dist/primitives/react-popover.d.ts +85 -85
  106. package/dist/primitives/react-progress.d.ts +19 -19
  107. package/dist/primitives/react-radio-group.d.ts +58 -58
  108. package/dist/primitives/react-roving-focus.d.ts +49 -49
  109. package/dist/primitives/react-select.d.ts +137 -137
  110. package/dist/primitives/react-separator.d.ts +21 -21
  111. package/dist/primitives/react-slider.d.ts +75 -75
  112. package/dist/primitives/react-switch.d.ts +21 -21
  113. package/dist/primitives/react-tabs.d.ts +56 -56
  114. package/dist/primitives/react-toast.d.ts +120 -120
  115. package/dist/primitives/react-toggle-group.d.ts +75 -75
  116. package/dist/primitives/react-toggle.d.ts +24 -24
  117. package/dist/primitives/react-tooltip.d.ts +101 -101
  118. package/dist/primitives/react-visually-hidden.d.ts +22 -22
  119. package/dist/shell/app-command-palette.d.ts +2 -0
  120. package/dist/shell/app-command-palette.d.ts.map +1 -1
  121. package/dist/shell/app-command-palette.js +42 -155
  122. package/dist/shell/app-command-palette.js.map +1 -0
  123. package/dist/shell/bottom-navbar.js +1 -1
  124. package/dist/shell/bottom-navbar.js.map +1 -0
  125. package/dist/shell/command-registry.js.map +1 -0
  126. package/dist/shell/notification-center.d.ts.map +1 -1
  127. package/dist/shell/notification-center.js +194 -169
  128. package/dist/shell/notification-center.js.map +1 -0
  129. package/dist/shell/notification-preferences.js.map +1 -0
  130. package/dist/shell/sidebar.js.map +1 -0
  131. package/dist/shell/top-bar.js +1 -1
  132. package/dist/shell/top-bar.js.map +1 -0
  133. package/dist/tailwind/index.cjs +48 -1
  134. package/dist/tailwind/preset.d.ts.map +1 -1
  135. package/dist/tailwind/preset.js +48 -1
  136. package/dist/tailwind/preset.js.map +1 -0
  137. package/dist/tokens/index.css +4 -4
  138. package/dist/tokens/primitives.css +442 -442
  139. package/dist/tokens/semantic.css +742 -547
  140. package/dist/tokens/typography-semantic.css +123 -100
  141. package/dist/tokens/typography.css +422 -422
  142. package/dist/ui/accordion.js +13 -13
  143. package/dist/ui/accordion.js.map +1 -0
  144. package/dist/ui/alert-dialog.d.ts +6 -2
  145. package/dist/ui/alert-dialog.d.ts.map +1 -1
  146. package/dist/ui/alert-dialog.js +43 -42
  147. package/dist/ui/alert-dialog.js.map +1 -0
  148. package/dist/ui/alert.d.ts +3 -2
  149. package/dist/ui/alert.d.ts.map +1 -1
  150. package/dist/ui/alert.js +31 -5
  151. package/dist/ui/alert.js.map +1 -0
  152. package/dist/ui/aspect-ratio.js +1 -1
  153. package/dist/ui/aspect-ratio.js.map +1 -0
  154. package/dist/ui/autocomplete.d.ts.map +1 -1
  155. package/dist/ui/autocomplete.js +92 -67
  156. package/dist/ui/autocomplete.js.map +1 -0
  157. package/dist/ui/avatar.js +9 -9
  158. package/dist/ui/avatar.js.map +1 -0
  159. package/dist/ui/badge-indicator.js.map +1 -0
  160. package/dist/ui/banner.js.map +1 -0
  161. package/dist/ui/breadcrumb.js +1 -1
  162. package/dist/ui/breadcrumb.js.map +1 -0
  163. package/dist/ui/button-group.js.map +1 -0
  164. package/dist/ui/button-processing.d.ts.map +1 -1
  165. package/dist/ui/button-processing.js +61 -40
  166. package/dist/ui/button-processing.js.map +1 -0
  167. package/dist/ui/button.js +8 -8
  168. package/dist/ui/button.js.map +1 -0
  169. package/dist/ui/card.js.map +1 -0
  170. package/dist/ui/charts/bar-chart.d.ts.map +1 -1
  171. package/dist/ui/charts/chart-container.d.ts +2 -0
  172. package/dist/ui/charts/chart-container.d.ts.map +1 -1
  173. package/dist/ui/charts/index.js +88 -65
  174. package/dist/ui/charts/index.js.map +1 -0
  175. package/dist/ui/charts/line-chart.d.ts.map +1 -1
  176. package/dist/ui/chat/message-input.d.ts.map +1 -1
  177. package/dist/ui/chat/message-list.d.ts +1 -1
  178. package/dist/ui/chat/message-list.d.ts.map +1 -1
  179. package/dist/ui/chat/message.d.ts.map +1 -1
  180. package/dist/ui/chat/system-message.d.ts.map +1 -1
  181. package/dist/ui/checkbox.d.ts.map +1 -1
  182. package/dist/ui/checkbox.js +33 -28
  183. package/dist/ui/checkbox.js.map +1 -0
  184. package/dist/ui/code.js.map +1 -0
  185. package/dist/ui/collapsible.js +1 -1
  186. package/dist/ui/collapsible.js.map +1 -0
  187. package/dist/ui/color-input.d.ts.map +1 -1
  188. package/dist/ui/color-input.js +165 -163
  189. package/dist/ui/color-input.js.map +1 -0
  190. package/dist/ui/color-swatch.js.map +1 -0
  191. package/dist/ui/combobox.d.ts +7 -0
  192. package/dist/ui/combobox.d.ts.map +1 -1
  193. package/dist/ui/combobox.js +147 -113
  194. package/dist/ui/combobox.js.map +1 -0
  195. package/dist/ui/container.js +1 -1
  196. package/dist/ui/container.js.map +1 -0
  197. package/dist/ui/context-menu.js.map +1 -0
  198. package/dist/ui/data-table-body.js.map +1 -0
  199. package/dist/ui/data-table-bulk-actions.js +1 -1
  200. package/dist/ui/data-table-bulk-actions.js.map +1 -0
  201. package/dist/ui/data-table-card.js.map +1 -0
  202. package/dist/ui/data-table-context.js.map +1 -0
  203. package/dist/ui/data-table-header.js.map +1 -0
  204. package/dist/ui/data-table-pagination.js.map +1 -0
  205. package/dist/ui/data-table-toolbar.js.map +1 -0
  206. package/dist/ui/data-table.js +34 -31
  207. package/dist/ui/data-table.js.map +1 -0
  208. package/dist/ui/devalok-grain.js.map +1 -0
  209. package/dist/ui/dialog.js +31 -35
  210. package/dist/ui/dialog.js.map +1 -0
  211. package/dist/ui/dropdown-menu.js.map +1 -0
  212. package/dist/ui/file-upload.js +120 -120
  213. package/dist/ui/file-upload.js.map +1 -0
  214. package/dist/ui/form.d.ts +8 -0
  215. package/dist/ui/form.d.ts.map +1 -1
  216. package/dist/ui/form.js +14 -12
  217. package/dist/ui/form.js.map +1 -0
  218. package/dist/ui/hover-card.js.map +1 -0
  219. package/dist/ui/icon-button.js.map +1 -0
  220. package/dist/ui/icon-context.js.map +1 -0
  221. package/dist/ui/icon-group.js.map +1 -0
  222. package/dist/ui/icon.js.map +1 -0
  223. package/dist/ui/index.d.ts +4 -4
  224. package/dist/ui/index.d.ts.map +1 -1
  225. package/dist/ui/index.js +82 -66
  226. package/dist/ui/index.js.map +1 -0
  227. package/dist/ui/input-otp.d.ts +12 -3
  228. package/dist/ui/input-otp.d.ts.map +1 -1
  229. package/dist/ui/input-otp.js +41 -27
  230. package/dist/ui/input-otp.js.map +1 -0
  231. package/dist/ui/input.d.ts.map +1 -1
  232. package/dist/ui/input.js +16 -15
  233. package/dist/ui/input.js.map +1 -0
  234. package/dist/ui/label.d.ts.map +1 -1
  235. package/dist/ui/label.js +19 -14
  236. package/dist/ui/label.js.map +1 -0
  237. package/dist/ui/lib/check-tokens.d.ts +3 -0
  238. package/dist/ui/lib/check-tokens.d.ts.map +1 -0
  239. package/dist/ui/lib/date-utils.js.map +1 -0
  240. package/dist/ui/lib/motion.d.ts +15 -4
  241. package/dist/ui/lib/motion.d.ts.map +1 -1
  242. package/dist/ui/lib/motion.js +18 -9
  243. package/dist/ui/lib/motion.js.map +1 -0
  244. package/dist/ui/lib/utils.js.map +1 -0
  245. package/dist/ui/link.js +2 -2
  246. package/dist/ui/link.js.map +1 -0
  247. package/dist/ui/menubar.js.map +1 -0
  248. package/dist/ui/navigation-menu.js.map +1 -0
  249. package/dist/ui/number-input.d.ts +16 -1
  250. package/dist/ui/number-input.d.ts.map +1 -1
  251. package/dist/ui/number-input.js +79 -49
  252. package/dist/ui/number-input.js.map +1 -0
  253. package/dist/ui/pagination.js +1 -1
  254. package/dist/ui/pagination.js.map +1 -0
  255. package/dist/ui/progress-ring.d.ts.map +1 -1
  256. package/dist/ui/progress-ring.js.map +1 -0
  257. package/dist/ui/progress.js.map +1 -0
  258. package/dist/ui/radio.d.ts.map +1 -1
  259. package/dist/ui/radio.js +27 -20
  260. package/dist/ui/radio.js.map +1 -0
  261. package/dist/ui/search-input.js.map +1 -0
  262. package/dist/ui/segmented-control.d.ts +1 -1
  263. package/dist/ui/segmented-control.d.ts.map +1 -1
  264. package/dist/ui/segmented-control.js +2 -0
  265. package/dist/ui/segmented-control.js.map +1 -0
  266. package/dist/ui/select.d.ts.map +1 -1
  267. package/dist/ui/select.js +54 -48
  268. package/dist/ui/select.js.map +1 -0
  269. package/dist/ui/separator.d.ts.map +1 -1
  270. package/dist/ui/separator.js +10 -7
  271. package/dist/ui/separator.js.map +1 -0
  272. package/dist/ui/sheet.js +29 -29
  273. package/dist/ui/sheet.js.map +1 -0
  274. package/dist/ui/sidebar.js +7 -7
  275. package/dist/ui/sidebar.js.map +1 -0
  276. package/dist/ui/skeleton.js.map +1 -0
  277. package/dist/ui/slider.d.ts +22 -3
  278. package/dist/ui/slider.d.ts.map +1 -1
  279. package/dist/ui/slider.js +57 -19
  280. package/dist/ui/slider.js.map +1 -0
  281. package/dist/ui/spinner.js.map +1 -0
  282. package/dist/ui/split-button.d.ts.map +1 -1
  283. package/dist/ui/split-button.js +77 -76
  284. package/dist/ui/split-button.js.map +1 -0
  285. package/dist/ui/stack.js.map +1 -0
  286. package/dist/ui/stat-card.js.map +1 -0
  287. package/dist/ui/status-dot.js.map +1 -0
  288. package/dist/ui/stepper.d.ts +10 -0
  289. package/dist/ui/stepper.d.ts.map +1 -1
  290. package/dist/ui/stepper.js +80 -75
  291. package/dist/ui/stepper.js.map +1 -0
  292. package/dist/ui/switch.d.ts.map +1 -1
  293. package/dist/ui/switch.js +26 -22
  294. package/dist/ui/switch.js.map +1 -0
  295. package/dist/ui/table.js.map +1 -0
  296. package/dist/ui/tabs.d.ts +3 -1
  297. package/dist/ui/tabs.d.ts.map +1 -1
  298. package/dist/ui/tabs.js +68 -48
  299. package/dist/ui/tabs.js.map +1 -0
  300. package/dist/ui/text.d.ts +1 -1
  301. package/dist/ui/text.d.ts.map +1 -1
  302. package/dist/ui/text.js +10 -2
  303. package/dist/ui/text.js.map +1 -0
  304. package/dist/ui/textarea.js +1 -1
  305. package/dist/ui/textarea.js.map +1 -0
  306. package/dist/ui/toast-registry.d.ts +8 -0
  307. package/dist/ui/toast-registry.d.ts.map +1 -0
  308. package/dist/ui/toast-registry.js +13 -0
  309. package/dist/ui/toast-registry.js.map +1 -0
  310. package/dist/ui/toast.d.ts.map +1 -1
  311. package/dist/ui/toast.js +141 -136
  312. package/dist/ui/toast.js.map +1 -0
  313. package/dist/ui/toaster.d.ts.map +1 -1
  314. package/dist/ui/toaster.js +15 -14
  315. package/dist/ui/toaster.js.map +1 -0
  316. package/dist/ui/toggle-group.d.ts +2 -0
  317. package/dist/ui/toggle-group.d.ts.map +1 -1
  318. package/dist/ui/toggle-group.js +23 -16
  319. package/dist/ui/toggle-group.js.map +1 -0
  320. package/dist/ui/toggle.d.ts +2 -0
  321. package/dist/ui/toggle.d.ts.map +1 -1
  322. package/dist/ui/toggle.js +14 -6
  323. package/dist/ui/toggle.js.map +1 -0
  324. package/dist/ui/tooltip.js.map +1 -0
  325. package/dist/ui/visually-hidden.js.map +1 -0
  326. package/docs/components/_header.md +85 -85
  327. package/docs/components/composed/activity-feed.md +62 -62
  328. package/docs/components/composed/avatar-group.md +65 -65
  329. package/docs/components/composed/bulk-action-bar.md +40 -40
  330. package/docs/components/composed/command-palette.md +40 -40
  331. package/docs/components/composed/confirm-dialog.md +46 -46
  332. package/docs/components/composed/content-card.md +36 -36
  333. package/docs/components/composed/date-picker.md +130 -130
  334. package/docs/components/composed/deadline-indicator.md +27 -27
  335. package/docs/components/composed/emoji-picker.md +52 -52
  336. package/docs/components/composed/empty-state.md +53 -53
  337. package/docs/components/composed/error-boundary.md +29 -29
  338. package/docs/components/composed/file-preview.md +40 -40
  339. package/docs/components/composed/filter-bar.md +57 -57
  340. package/docs/components/composed/form-section.md +31 -31
  341. package/docs/components/composed/global-loading.md +27 -27
  342. package/docs/components/composed/inline-edit.md +35 -35
  343. package/docs/components/composed/loading-skeleton.md +51 -51
  344. package/docs/components/composed/markdown-viewer.md +27 -27
  345. package/docs/components/composed/master-detail.md +48 -48
  346. package/docs/components/composed/member-picker.md +35 -35
  347. package/docs/components/composed/multi-select-popover.md +62 -62
  348. package/docs/components/composed/page-header.md +41 -41
  349. package/docs/components/composed/page-skeletons.md +32 -32
  350. package/docs/components/composed/priority-indicator.md +32 -32
  351. package/docs/components/composed/responsive-overlay.md +34 -34
  352. package/docs/components/composed/rich-text-editor.md +82 -82
  353. package/docs/components/composed/schedule-view.md +39 -39
  354. package/docs/components/composed/simple-tooltip.md +33 -33
  355. package/docs/components/composed/status-badge.md +55 -55
  356. package/docs/components/shell/app-command-palette.md +44 -44
  357. package/docs/components/shell/bottom-navbar.md +52 -52
  358. package/docs/components/shell/command-registry.md +48 -48
  359. package/docs/components/shell/link-context.md +41 -41
  360. package/docs/components/shell/notification-center.md +63 -63
  361. package/docs/components/shell/notification-preferences.md +42 -42
  362. package/docs/components/shell/sidebar.md +92 -92
  363. package/docs/components/shell/top-bar.md +143 -143
  364. package/docs/components/ui/accordion.md +51 -51
  365. package/docs/components/ui/alert-dialog.md +61 -61
  366. package/docs/components/ui/alert.md +46 -46
  367. package/docs/components/ui/aspect-ratio.md +25 -25
  368. package/docs/components/ui/autocomplete.md +48 -48
  369. package/docs/components/ui/avatar.md +56 -56
  370. package/docs/components/ui/badge.md +83 -82
  371. package/docs/components/ui/banner.md +42 -42
  372. package/docs/components/ui/breadcrumb.md +37 -37
  373. package/docs/components/ui/button-group.md +41 -41
  374. package/docs/components/ui/button.md +94 -93
  375. package/docs/components/ui/card.md +52 -52
  376. package/docs/components/ui/charts.md +43 -43
  377. package/docs/components/ui/checkbox.md +36 -36
  378. package/docs/components/ui/chip.md +47 -47
  379. package/docs/components/ui/code.md +28 -28
  380. package/docs/components/ui/collapsible.md +40 -40
  381. package/docs/components/ui/color-input.md +91 -91
  382. package/docs/components/ui/color-swatch.md +25 -25
  383. package/docs/components/ui/combobox.md +54 -54
  384. package/docs/components/ui/container.md +26 -26
  385. package/docs/components/ui/context-menu.md +43 -43
  386. package/docs/components/ui/data-table-body.md +1 -1
  387. package/docs/components/ui/data-table-bulk-actions.md +1 -1
  388. package/docs/components/ui/data-table-card.md +1 -1
  389. package/docs/components/ui/data-table-context.md +1 -1
  390. package/docs/components/ui/data-table-header.md +1 -1
  391. package/docs/components/ui/data-table-pagination.md +1 -1
  392. package/docs/components/ui/data-table-toolbar.md +44 -44
  393. package/docs/components/ui/data-table.md +94 -94
  394. package/docs/components/ui/dialog.md +54 -54
  395. package/docs/components/ui/dropdown-menu.md +48 -48
  396. package/docs/components/ui/file-upload.md +41 -41
  397. package/docs/components/ui/form.md +51 -51
  398. package/docs/components/ui/hover-card.md +32 -32
  399. package/docs/components/ui/icon-button.md +40 -40
  400. package/docs/components/ui/input-otp.md +44 -44
  401. package/docs/components/ui/input.md +74 -74
  402. package/docs/components/ui/label.md +25 -25
  403. package/docs/components/ui/link.md +29 -29
  404. package/docs/components/ui/menubar.md +44 -44
  405. package/docs/components/ui/navigation-menu.md +46 -46
  406. package/docs/components/ui/number-input.md +44 -44
  407. package/docs/components/ui/pagination.md +48 -48
  408. package/docs/components/ui/popover.md +30 -30
  409. package/docs/components/ui/progress-ring.md +41 -41
  410. package/docs/components/ui/progress.md +34 -34
  411. package/docs/components/ui/radio.md +34 -34
  412. package/docs/components/ui/search-input.md +43 -43
  413. package/docs/components/ui/segmented-control.md +50 -50
  414. package/docs/components/ui/select.md +53 -53
  415. package/docs/components/ui/separator.md +32 -32
  416. package/docs/components/ui/sheet.md +47 -47
  417. package/docs/components/ui/sidebar.md +72 -72
  418. package/docs/components/ui/skeleton.md +77 -77
  419. package/docs/components/ui/slider.md +29 -29
  420. package/docs/components/ui/spinner.md +54 -54
  421. package/docs/components/ui/stack.md +39 -39
  422. package/docs/components/ui/stat-card.md +61 -61
  423. package/docs/components/ui/status-dot.md +26 -26
  424. package/docs/components/ui/stepper.md +49 -49
  425. package/docs/components/ui/switch.md +47 -47
  426. package/docs/components/ui/table.md +47 -47
  427. package/docs/components/ui/tabs.md +60 -60
  428. package/docs/components/ui/text.md +37 -37
  429. package/docs/components/ui/textarea.md +39 -39
  430. package/docs/components/ui/toast.md +65 -65
  431. package/docs/components/ui/toaster.md +47 -47
  432. package/docs/components/ui/toggle-group.md +43 -43
  433. package/docs/components/ui/toggle.md +37 -37
  434. package/docs/components/ui/tooltip.md +38 -38
  435. package/docs/components/ui/tree-view.md +65 -65
  436. package/docs/components/ui/visually-hidden.md +21 -21
  437. package/llms-full.txt +5266 -5264
  438. package/llms.txt +624 -580
  439. package/package.json +7 -8
@@ -1,547 +1,742 @@
1
- :root {
2
- color-scheme: light;
3
-
4
- /* ═══════════════════════════════════════════════════════════
5
- TYPOGRAPHY
6
- ═══════════════════════════════════════════════════════════ */
7
-
8
- /* Font families — override these with next/font CSS variables */
9
- --font-sans: "Inter", system-ui, sans-serif;
10
- --font-display: "Inter", system-ui, sans-serif;
11
- --font-body: "Inter", system-ui, sans-serif;
12
- --font-accent: Ranade, sans-serif;
13
- --font-mono: "SF Mono", "Fira Code", monospace;
14
-
15
- /* ── Font Weights ──────────────────────────── */
16
- --font-weight-light: 300;
17
- --font-weight-regular: 400;
18
- --font-weight-medium: 500;
19
- --font-weight-semibold: 600;
20
- --font-weight-bold: 700;
21
-
22
- /* ── Type Scale (rem) ──────────────────────── */
23
- /* Base: 16px = 1rem (browser default) */
24
- --font-size-xs: 0.625rem;
25
- /* 10px */
26
- --font-size-sm: 0.75rem;
27
- /* 12px */
28
- --font-size-md: 0.875rem;
29
- /* 14px */
30
- --font-size-base: 1rem;
31
- /* 16px */
32
- --font-size-lg: 1.125rem;
33
- /* 18px */
34
- --font-size-xl: 1.25rem;
35
- /* 20px */
36
- --font-size-2xl: 1.5rem;
37
- /* 24px */
38
- --font-size-3xl: 2rem;
39
- /* 32px */
40
- --font-size-4xl: 2.25rem;
41
- /* 36px */
42
- --font-size-5xl: 3rem;
43
- /* 48px */
44
- --font-size-6xl: 3.75rem;
45
- /* 60px */
46
-
47
- /* ── Line Heights ──────────────────────────── */
48
- --line-height-none: 1;
49
- --line-height-tight: 1.15;
50
- --line-height-snug: 1.25;
51
- --line-height-normal: 1.4;
52
- --line-height-relaxed: 1.5;
53
- --line-height-loose: 1.6;
54
-
55
- /* ── Letter Spacing ────────────────────────── */
56
- --tracking-tighter: -0.05em;
57
- --tracking-tight: -0.025em;
58
- --tracking-normal: 0;
59
- --tracking-wide: 0.025em;
60
- --tracking-wider: 0.05em;
61
- --tracking-widest: 0.1em;
62
-
63
- /* ═══════════════════════════════════════════════════════════
64
- ACCENT (swappable — consumers override these to rebrand)
65
- ═══════════════════════════════════════════════════════════ */
66
- --color-accent-1: var(--pink-1);
67
- --color-accent-2: var(--pink-2);
68
- --color-accent-3: var(--pink-3);
69
- --color-accent-4: var(--pink-4);
70
- --color-accent-5: var(--pink-5);
71
- --color-accent-6: var(--pink-6);
72
- --color-accent-7: var(--pink-7);
73
- --color-accent-8: var(--pink-8);
74
- --color-accent-9: var(--pink-9);
75
- --color-accent-10: var(--pink-10);
76
- --color-accent-11: var(--pink-11);
77
- --color-accent-12: var(--pink-12);
78
- --color-accent-fg: var(--neutral-1);
79
-
80
- /* ═══════════════════════════════════════════════════════════
81
- SECONDARY ACCENT
82
- ═══════════════════════════════════════════════════════════ */
83
- --color-secondary-1: var(--purple-1);
84
- --color-secondary-2: var(--purple-2);
85
- --color-secondary-3: var(--purple-3);
86
- --color-secondary-4: var(--purple-4);
87
- --color-secondary-5: var(--purple-5);
88
- --color-secondary-6: var(--purple-6);
89
- --color-secondary-7: var(--purple-7);
90
- --color-secondary-8: var(--purple-8);
91
- --color-secondary-9: var(--purple-9);
92
- --color-secondary-10: var(--purple-10);
93
- --color-secondary-11: var(--purple-11);
94
- --color-secondary-12: var(--purple-12);
95
- --color-secondary-fg: var(--neutral-1);
96
-
97
- /* ═══════════════════════════════════════════════════════════
98
- SURFACE
99
- ═══════════════════════════════════════════════════════════ */
100
- /* Semantic surface tokens */
101
- --color-surface-base: var(--neutral-2); /* 0.97L — slightly grey page (Stripe/Linear pattern) */
102
- --color-surface-sunken: var(--color-surface-0);
103
- --color-surface-raised: var(--neutral-1); /* 0.99L — white cards float above the page */
104
- --color-surface-overlay: var(--neutral-1); /* same as raised — floating elements are white */
105
- --color-surface-raised-hover: var(--neutral-3);
106
- --color-surface-raised-active: var(--neutral-4);
107
- --color-surface-inverted: var(--neutral-12);
108
- --color-surface-inverted-fg: var(--neutral-1);
109
- --color-surface-disabled: var(--neutral-2);
110
- --color-surface-fg-disabled: var(--neutral-8);
111
-
112
- --color-surface-fg: var(--neutral-12);
113
- --color-surface-fg-muted: var(--neutral-11);
114
- --color-surface-fg-subtle: var(--neutral-8);
115
- --color-surface-border: var(--neutral-6); /* was neutral-5; bumped for WCAG 1.4.11 non-text contrast */
116
- --color-surface-border-strong: var(--neutral-7); /* was neutral-6 */
117
- --color-surface-border-subtle: var(--neutral-5); /* was neutral-4 */
118
- --color-backdrop: oklch(0 0 0 / 0.4);
119
-
120
- /* ═══════════════════════════════════════════════════════════
121
- STATUS — Error
122
- ═══════════════════════════════════════════════════════════ */
123
- --color-error-2: var(--red-2);
124
- --color-error-3: var(--red-3);
125
- --color-error-4: var(--red-4);
126
- --color-error-5: var(--red-5);
127
- --color-error-7: var(--red-7);
128
- --color-error-9: var(--red-9);
129
- --color-error-10: var(--red-10);
130
- --color-error-11: var(--red-11);
131
- --color-error-fg: var(--neutral-1);
132
-
133
- /* ═══ Status — Success ═══ */
134
- --color-success-2: var(--green-2);
135
- --color-success-3: var(--green-3);
136
- --color-success-4: var(--green-4);
137
- --color-success-5: var(--green-5);
138
- --color-success-7: var(--green-7);
139
- --color-success-9: var(--green-9);
140
- --color-success-10: var(--green-10);
141
- --color-success-11: var(--green-11);
142
- --color-success-fg: var(--neutral-1);
143
-
144
- /* ═══ Status — Warning (amber-bright — lightness-corrected) ═══ */
145
- --color-warning-2: var(--amber-bright-2);
146
- --color-warning-3: var(--amber-bright-3);
147
- --color-warning-4: var(--amber-bright-4);
148
- --color-warning-5: var(--amber-bright-5);
149
- --color-warning-7: var(--amber-bright-7);
150
- --color-warning-9: var(--amber-bright-9);
151
- --color-warning-10: var(--amber-bright-10);
152
- --color-warning-11: var(--amber-bright-11);
153
- --color-warning-fg: oklch(0.25 0.01 55);
154
-
155
- /* ═══ Status — Info ═══ */
156
- --color-info-2: var(--blue-2);
157
- --color-info-3: var(--blue-3);
158
- --color-info-4: var(--blue-4);
159
- --color-info-5: var(--blue-5);
160
- --color-info-7: var(--blue-7);
161
- --color-info-9: var(--blue-9);
162
- --color-info-10: var(--blue-10);
163
- --color-info-11: var(--blue-11);
164
- --color-info-fg: var(--neutral-1);
165
-
166
- /* ═══════════════════════════════════════════════════════════
167
- CATEGORY COLORS (Sapta Varna — step subsets)
168
- ═══════════════════════════════════════════════════════════ */
169
- --color-category-teal-3: var(--teal-3);
170
- --color-category-teal-7: var(--teal-7);
171
- --color-category-teal-9: var(--teal-9);
172
- --color-category-teal-11: var(--teal-11);
173
-
174
- --color-category-amber-3: var(--amber-3);
175
- --color-category-amber-7: var(--amber-7);
176
- --color-category-amber-9: var(--amber-9);
177
- --color-category-amber-11: var(--amber-11);
178
-
179
- --color-category-slate-3: var(--slate-3);
180
- --color-category-slate-7: var(--slate-7);
181
- --color-category-slate-9: var(--slate-9);
182
- --color-category-slate-11: var(--slate-11);
183
-
184
- --color-category-indigo-3: var(--indigo-3);
185
- --color-category-indigo-7: var(--indigo-7);
186
- --color-category-indigo-9: var(--indigo-9);
187
- --color-category-indigo-11: var(--indigo-11);
188
-
189
- --color-category-cyan-3: var(--cyan-3);
190
- --color-category-cyan-7: var(--cyan-7);
191
- --color-category-cyan-9: var(--cyan-9);
192
- --color-category-cyan-11: var(--cyan-11);
193
-
194
- --color-category-orange-3: var(--orange-3);
195
- --color-category-orange-7: var(--orange-7);
196
- --color-category-orange-9: var(--orange-9);
197
- --color-category-orange-11: var(--orange-11);
198
-
199
- --color-category-emerald-3: var(--emerald-3);
200
- --color-category-emerald-7: var(--emerald-7);
201
- --color-category-emerald-9: var(--emerald-9);
202
- --color-category-emerald-11: var(--emerald-11);
203
-
204
- /* ═══════════════════════════════════════════════════════════
205
- SKELETON
206
- ═══════════════════════════════════════════════════════════ */
207
- --color-skeleton-base: var(--neutral-3);
208
- --color-skeleton-shimmer: var(--neutral-2);
209
-
210
- /* ═══════════════════════════════════════════════════════════
211
- UTILITY TOKENS (not step-based, but semantically needed)
212
- ═══════════════════════════════════════════════════════════ */
213
- --color-overlay: oklch(0 0 0 / 0.50);
214
- --color-disabled: var(--neutral-5);
215
-
216
- /* ═══════════════════════════════════════════════════════════
217
- ACTION STATE OPACITIES
218
- ═══════════════════════════════════════════════════════════ */
219
- --action-hover-opacity: 0.04;
220
- --action-selected-opacity: 0.08;
221
- --action-disabled-opacity: 0.38;
222
- --action-focus-opacity: 0.12;
223
- --action-active-opacity: 0.12;
224
-
225
- /* ═══════════════════════════════════════════════════════════
226
- SPACING
227
- ═══════════════════════════════════════════════════════════ */
228
- --spacing-01: 2px;
229
- --spacing-02: 4px;
230
- --spacing-02b: 6px;
231
- --spacing-03: 8px;
232
- --spacing-04: 12px;
233
- --spacing-05: 16px;
234
- --spacing-05b: 20px;
235
- --spacing-06: 24px;
236
- --spacing-06b: 28px;
237
- --spacing-07: 32px;
238
- --spacing-08: 40px;
239
- --spacing-09: 48px;
240
- --spacing-10: 64px;
241
- --spacing-11: 80px;
242
- --spacing-12: 96px;
243
- --spacing-13: 160px;
244
-
245
- /* ═══════════════════════════════════════════════════════════
246
- RADIUS
247
- ═══════════════════════════════════════════════════════════ */
248
- --radius-none: 0;
249
- --radius-sm: 2px;
250
- --radius-default: 4px;
251
- --radius-md: 6px;
252
- --radius-lg: 10px;
253
- --radius-xl: 16px;
254
- --radius-2xl: 24px;
255
- --radius-full: 9999px;
256
-
257
- /* ═══════════════════════════════════════════════════════════
258
- MOTION
259
- ═══════════════════════════════════════════════════════════ */
260
-
261
- /* ── Motion: Durations (Carbon-inspired scale) ── */
262
- --duration-instant: 0ms;
263
- --duration-fast-01: 70ms;
264
- --duration-fast-02: 110ms;
265
- --duration-moderate-01: 150ms;
266
- --duration-moderate-02: 240ms;
267
- --duration-slow-01: 400ms;
268
- --duration-slow-02: 700ms;
269
-
270
- /* ── Motion: Easing — Productive (task-focused, utilitarian) ── */
271
- --ease-productive-standard: cubic-bezier(0.2, 0, 0.38, 0.9);
272
- --ease-productive-entrance: cubic-bezier(0, 0, 0.38, 0.9);
273
- --ease-productive-exit: cubic-bezier(0.2, 0, 1, 0.9);
274
-
275
- /* ── Motion: Easing — Expressive (attention-grabbing, dramatic) ── */
276
- --ease-expressive-standard: cubic-bezier(0.4, 0.14, 0.3, 1);
277
- --ease-expressive-entrance: cubic-bezier(0, 0, 0.3, 1);
278
- --ease-expressive-exit: cubic-bezier(0.4, 0.14, 1, 1);
279
-
280
- /* ── Motion: Easing — Utility ── */
281
- --ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
282
- --ease-linear: linear;
283
-
284
- /* ═══════════════════════════════════════════════════════════
285
- SHADOWS
286
- ═══════════════════════════════════════════════════════════ */
287
-
288
- /* Shadow color: cool blue tint for natural depth */
289
- --shadow-color: 0.15 0.015 260;
290
- --shadow-strength: 1;
291
-
292
- /* Shadow transition */
293
- --shadow-transition: box-shadow var(--duration-fast-02) var(--ease-productive-standard);
294
-
295
- /* Keyboard shortcut badge shadow */
296
- --shadow-kbd: inset 0 -1px 0 oklch(0 0 0 / 0.1);
297
-
298
- /* Shadow primitives (internal) */
299
- --shadow-xs:
300
- 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
301
- 0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
302
- 0 1.5px 3px -1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
303
- 0 3px 7px -2px oklch(var(--shadow-color) / calc(0.03 * var(--shadow-strength)));
304
- --shadow-sm:
305
- 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
306
- 0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
307
- 0 2px 4px -1.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
308
- 0 6px 12px -3px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
309
- 0 14px 28px -8px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
310
- --shadow-md:
311
- 0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
312
- 0 1px 2px -1px oklch(var(--shadow-color) / calc(0.05 * var(--shadow-strength))),
313
- 0 4px 8px -2px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
314
- 0 10px 20px -5px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
315
- 0 24px 44px -12px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
316
- --shadow-lg:
317
- 0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
318
- 0 1px 2px -1px oklch(var(--shadow-color) / calc(0.05 * var(--shadow-strength))),
319
- 0 3px 6px -2px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
320
- 0 8px 16px -4px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
321
- 0 18px 34px -8px oklch(var(--shadow-color) / calc(0.03 * var(--shadow-strength))),
322
- 0 40px 64px -16px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
323
-
324
- /* Semantic elevation shadows (public API) */
325
- --shadow-raised: var(--shadow-xs);
326
- --shadow-raised-hover: var(--shadow-sm);
327
- --shadow-floating: var(--shadow-md);
328
- --shadow-overlay: var(--shadow-lg);
329
-
330
- /* Effect shadows */
331
- --shadow-brand: 0 2px 8px oklch(0.55 0.19 360 / 0.20), 0 6px 20px oklch(0.55 0.19 360 / 0.15);
332
- --shadow-glow: 0 0 0 1.5px oklch(0.55 0.19 360 / 0.20), 0 0 7px oklch(0.55 0.19 360 / 0.12);
333
- --shadow-inset: inset 0 1px 2px oklch(var(--shadow-color) / calc(0.08 * var(--shadow-strength))), inset 0 2px 5px oklch(var(--shadow-color) / calc(0.06 * var(--shadow-strength)));
334
- --shadow-ring-sm: 0 0 0 1px var(--color-surface-border);
335
- --shadow-ring: 0 0 0 2px oklch(0.55 0.19 360 / 0.30);
336
-
337
- /* Status & state effect shadows */
338
- --shadow-raised-inner: inset 0 1px 0 oklch(1 0 0 / 0.10), inset 0 -1px 0 oklch(0 0 0 / 0.06);
339
- --shadow-pressed: 0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength)));
340
- --shadow-success: 0 2px 8px oklch(0.55 0.14 145 / 0.20), 0 6px 20px oklch(0.55 0.14 145 / 0.15);
341
- --shadow-error: 0 2px 8px oklch(0.55 0.18 25 / 0.20), 0 6px 20px oklch(0.55 0.18 25 / 0.15);
342
- --shadow-warning: 0 2px 8px oklch(0.78 0.16 65 / 0.22), 0 6px 20px oklch(0.78 0.16 65 / 0.15);
343
-
344
- /* ═══════════════════════════════════════════════════════════
345
- SIZES
346
- ═══════════════════════════════════════════════════════════ */
347
- --size-xs: 24px;
348
- --size-xs-plus: 28px;
349
- --size-sm: 32px;
350
- --size-sm-plus: 36px;
351
- --size-md: 40px;
352
- --size-lg: 48px;
353
- --size-xl: 56px;
354
- --icon-sm: 16px;
355
- --icon-md: 20px;
356
- --icon-lg: 24px;
357
- --icon-xl: 32px;
358
- --border-width-sm: 1px;
359
- --border-width-md: 2px;
360
- --border-width-lg: 3px;
361
- --border-focus-width: 2px;
362
- --border-focus-offset: 2px;
363
-
364
- /* ═══════════════════════════════════════════════════════════
365
- Z-INDEX
366
- ═══════════════════════════════════════════════════════════ */
367
- --z-base: 0;
368
- --z-raised: 10;
369
- --z-dropdown: 1000;
370
- --z-sticky: 1100;
371
- --z-overlay: 1200;
372
- --z-modal: 1300;
373
- --z-popover: 1400;
374
- --z-toast: 1500;
375
- --z-tooltip: 1600;
376
-
377
- /* ── Layout ─────────────────────────────────── */
378
- --max-width: 1280px;
379
- --max-width-body: 960px;
380
-
381
- /* ── Breakpoints ───────────────────────────── */
382
- --breakpoint-sm: 640px;
383
- --breakpoint-md: 768px;
384
- --breakpoint-lg: 1024px;
385
- --breakpoint-xl: 1280px;
386
- --breakpoint-2xl: 1536px;
387
-
388
- /* ═══════════════════════════════════════════════════════════
389
- GRADIENTS
390
- ═══════════════════════════════════════════════════════════ */
391
- --gradient-brand-light: linear-gradient(135deg, var(--pink-7), var(--purple-9));
392
- --gradient-brand-dark: linear-gradient(135deg, var(--pink-8), var(--purple-10));
393
-
394
- /* ═══════════════════════════════════════════════════════════
395
- CHART PALETTE
396
- ═══════════════════════════════════════════════════════════ */
397
- --chart-1: var(--pink-9);
398
- --chart-2: var(--purple-9);
399
- --chart-3: var(--blue-9);
400
- --chart-4: var(--green-9);
401
- --chart-5: var(--yellow-9);
402
- --chart-6: var(--red-9);
403
- --chart-7: var(--cyan-9);
404
- --chart-8: var(--orange-9);
405
-
406
- /* ═══════════════════════════════════════════════════════════
407
- INSET GLOW & OVERLAY
408
- ═══════════════════════════════════════════════════════════ */
409
- --color-inset-glow: oklch(1 0 0 / 0.25);
410
- --color-inset-glow-strong: oklch(1 0 0 / 0.16);
411
- --color-inset-glow-subtle: oklch(1 0 0 / 0.10);
412
- --color-surface-overlay-light: oklch(1 0 0 / 0.20);
413
- --color-surface-overlay-dark: oklch(0 0 0 / 0.12);
414
- --color-text-shadow: oklch(0 0 0 / 0.15);
415
- }
416
-
417
- /* ═══════════════════════════════════════════════════════════
418
- DARK MODE
419
- ═══════════════════════════════════════════════════════════ */
420
- .dark {
421
- color-scheme: dark;
422
-
423
- /* Foreground on solid accent/status backgrounds — pure white on brand colors */
424
- --color-accent-fg: var(--neutral-0);
425
- --color-secondary-fg: var(--neutral-0);
426
- --color-error-fg: var(--neutral-0);
427
- --color-success-fg: var(--neutral-0);
428
- --color-info-fg: var(--neutral-0);
429
-
430
- /* Warning: amber-bright dark ramp for dark mode */
431
- --color-warning-2: var(--amber-bright-2);
432
- --color-warning-3: var(--amber-bright-3);
433
- --color-warning-4: var(--amber-bright-4);
434
- --color-warning-5: var(--amber-bright-5);
435
- --color-warning-7: var(--amber-bright-7);
436
- --color-warning-9: var(--amber-bright-9);
437
- --color-warning-10: var(--amber-bright-10);
438
- --color-warning-11: var(--amber-bright-11);
439
- --color-warning-fg: var(--neutral-0);
440
-
441
- /* Dark mode borders need lower contrast bright borders look harsh.
442
- Drop to step 3/4 for subtle resting borders that don't overpower surfaces */
443
- /* Dark mode: restore base/raised to original direction (raised = lighter than base) */
444
- --color-surface-base: var(--neutral-1); /* 0.11L — dark page */
445
- --color-surface-raised: var(--neutral-2); /* 0.17L — lighter cards */
446
-
447
- --color-surface-border: var(--neutral-4); /* was neutral-3; bumped for contrast */
448
- --color-surface-border-strong: var(--neutral-5); /* was neutral-4 */
449
- --color-surface-overlay: oklch(0.13 0.0002 350);
450
- --color-surface-border-subtle: var(--neutral-3); /* was neutral-2 = same as raised = invisible (1:1) */
451
- --color-backdrop: oklch(0 0 0 / 0.6);
452
-
453
- /* Overlay */
454
- --color-overlay: oklch(0 0 0 / 0.70);
455
-
456
- /* Action State Opacities (higher in dark mode) */
457
- --action-hover-opacity: 0.08;
458
- --action-selected-opacity: 0.12;
459
- --action-disabled-opacity: 0.38;
460
- --action-focus-opacity: 0.12;
461
- --action-active-opacity: 0.16;
462
-
463
- /* Skeleton */
464
- --color-skeleton-base: var(--neutral-4);
465
- --color-skeleton-shimmer: var(--neutral-3);
466
-
467
- /* Shadows (heavier in dark mode) */
468
- --shadow-strength: 2.5;
469
- --shadow-brand: 0 2px 8px oklch(0.55 0.19 360 / 0.30), 0 6px 20px oklch(0.55 0.19 360 / 0.20);
470
- --shadow-glow: 0 0 0 1.5px oklch(0.55 0.19 360 / 0.35), 0 0 10px oklch(0.55 0.19 360 / 0.20);
471
- --shadow-ring: 0 0 0 2px oklch(0.55 0.19 360 / 0.45);
472
- --shadow-raised-inner: inset 0 1px 0 oklch(1 0 0 / 0.06), inset 0 -1px 0 oklch(0 0 0 / 0.12);
473
- --shadow-success: 0 2px 8px oklch(0.6 0.14 145 / 0.30), 0 6px 20px oklch(0.6 0.14 145 / 0.20);
474
- --shadow-error: 0 2px 8px oklch(0.6 0.18 25 / 0.30), 0 6px 20px oklch(0.6 0.18 25 / 0.20);
475
- --shadow-warning: 0 2px 8px oklch(0.78 0.16 65 / 0.30), 0 6px 20px oklch(0.78 0.16 65 / 0.20);
476
-
477
- /* Gradients */
478
- --gradient-brand-light: linear-gradient(135deg, var(--pink-9), var(--purple-9));
479
- --gradient-brand-dark: linear-gradient(135deg, var(--pink-10), var(--purple-10));
480
-
481
- /* Chart Palette (dark — use step 9 which is brighter in dark) */
482
- --chart-1: var(--pink-9);
483
- --chart-2: var(--purple-9);
484
- --chart-3: var(--blue-9);
485
- --chart-4: var(--green-9);
486
- --chart-5: var(--yellow-9);
487
- --chart-6: var(--red-9);
488
- --chart-7: var(--cyan-9);
489
- --chart-8: var(--orange-9);
490
-
491
- /* Inset Glow & Overlay */
492
- --color-inset-glow: oklch(1 0 0 / 0.10);
493
- --color-inset-glow-strong: oklch(1 0 0 / 0.08);
494
- --color-inset-glow-subtle: oklch(1 0 0 / 0.05);
495
- --color-surface-overlay-light: oklch(1 0 0 / 0.08);
496
- --color-surface-overlay-dark: oklch(0 0 0 / 0.25);
497
- --color-text-shadow: oklch(0 0 0 / 0.40);
498
- }
499
-
500
- /* Ensure Radix popper content (Select, Combobox, Popover, etc.)
501
- renders above Sheet/Dialog overlays */
502
- [data-radix-popper-content-wrapper] {
503
- z-index: var(--z-popover) !important;
504
- }
505
-
506
- /* ── Reduced Motion ──────────────────────────────────── */
507
- /* ═══════════════════════════════════════════════════════════
508
- PROCESSING ANIMATIONS
509
- ═══════════════════════════════════════════════════════════ */
510
-
511
- @property --border-angle {
512
- syntax: "<angle>";
513
- initial-value: 0deg;
514
- inherits: false;
515
- }
516
-
517
- @keyframes processing-ants-rotate {
518
- to {
519
- --border-angle: 360deg;
520
- }
521
- }
522
-
523
- @keyframes processing-ants-march {
524
- to {
525
- background-position: 16px 0, 100% 16px, calc(100% - 16px) 100%, 0 calc(100% - 16px);
526
- }
527
- }
528
-
529
- @keyframes processing-ants-svg {
530
- to {
531
- stroke-dashoffset: -10;
532
- }
533
- }
534
-
535
- /* ═══════════════════════════════════════════════════════════ */
536
-
537
- @media (prefers-reduced-motion: reduce) {
538
-
539
- *,
540
- *::before,
541
- *::after {
542
- animation-duration: 0.01ms !important;
543
- animation-iteration-count: 1 !important;
544
- transition-duration: 0.01ms !important;
545
- scroll-behavior: auto !important;
546
- }
547
- }
1
+ :root {
2
+ color-scheme: light;
3
+
4
+ /* ═══════════════════════════════════════════════════════════
5
+ TYPOGRAPHY
6
+ ═══════════════════════════════════════════════════════════ */
7
+
8
+ /* Font families — override these with next/font CSS variables */
9
+ --font-sans: "Inter", system-ui, sans-serif;
10
+ --font-display: "Inter", system-ui, sans-serif;
11
+ --font-body: "Inter", system-ui, sans-serif;
12
+ --font-accent: Ranade, sans-serif;
13
+ --font-mono: "SF Mono", "Fira Code", monospace;
14
+
15
+ /* ── Font Weights ──────────────────────────── */
16
+ --font-weight-light: 300;
17
+ --font-weight-regular: 400;
18
+ --font-weight-medium: 500;
19
+ --font-weight-semibold: 600;
20
+ --font-weight-bold: 700;
21
+
22
+ /* ── Type Scale (rem) ──────────────────────── */
23
+ /* Base: 16px = 1rem (browser default) */
24
+ --font-size-xs: 0.625rem;
25
+ /* 10px */
26
+ --font-size-sm: 0.75rem;
27
+ /* 12px */
28
+ --font-size-md: 0.875rem;
29
+ /* 14px */
30
+ --font-size-base: 1rem;
31
+ /* 16px */
32
+ --font-size-lg: 1.125rem;
33
+ /* 18px */
34
+ --font-size-xl: 1.25rem;
35
+ /* 20px */
36
+ --font-size-2xl: 1.5rem;
37
+ /* 24px */
38
+ --font-size-3xl: clamp(1.5rem, 1.125rem + 1.25vw, 2rem);
39
+ /* 24px → 32px fluid */
40
+ --font-size-4xl: clamp(1.75rem, 1.25rem + 1.5vw, 2.25rem);
41
+ /* 28px → 36px fluid */
42
+ --font-size-5xl: clamp(2rem, 1.25rem + 2.5vw, 3rem);
43
+ /* 32px → 48px fluid */
44
+ --font-size-6xl: clamp(2.25rem, 1.5rem + 3vw, 3.75rem);
45
+ /* 36px → 60px fluid */
46
+
47
+ /* ── Line Heights ──────────────────────────── */
48
+ --line-height-none: 1;
49
+ --line-height-tight: 1.15;
50
+ --line-height-snug: 1.25;
51
+ --line-height-normal: 1.4;
52
+ --line-height-relaxed: 1.5;
53
+ --line-height-loose: 1.6;
54
+
55
+ /* ── Letter Spacing ────────────────────────── */
56
+ --tracking-tighter: -0.05em;
57
+ --tracking-tight: -0.025em;
58
+ --tracking-normal: 0;
59
+ --tracking-wide: 0.025em;
60
+ --tracking-wider: 0.05em;
61
+ --tracking-widest: 0.1em;
62
+
63
+ /* ═══════════════════════════════════════════════════════════
64
+ ACCENT (swappable — consumers override these to rebrand)
65
+ ═══════════════════════════════════════════════════════════ */
66
+ --color-accent-1: var(--pink-1);
67
+ --color-accent-2: var(--pink-2);
68
+ --color-accent-3: var(--pink-3);
69
+ --color-accent-4: var(--pink-4);
70
+ --color-accent-5: var(--pink-5);
71
+ --color-accent-6: var(--pink-6);
72
+ --color-accent-7: var(--pink-7);
73
+ --color-accent-8: var(--pink-8);
74
+ --color-accent-9: var(--pink-9);
75
+ --color-accent-10: var(--pink-10);
76
+ --color-accent-11: var(--pink-11);
77
+ --color-accent-12: var(--pink-12);
78
+ --color-accent-fg: var(--neutral-1);
79
+
80
+ /* ═══════════════════════════════════════════════════════════
81
+ SECONDARY ACCENT
82
+ ═══════════════════════════════════════════════════════════ */
83
+ --color-secondary-1: var(--purple-1);
84
+ --color-secondary-2: var(--purple-2);
85
+ --color-secondary-3: var(--purple-3);
86
+ --color-secondary-4: var(--purple-4);
87
+ --color-secondary-5: var(--purple-5);
88
+ --color-secondary-6: var(--purple-6);
89
+ --color-secondary-7: var(--purple-7);
90
+ --color-secondary-8: var(--purple-8);
91
+ --color-secondary-9: var(--purple-9);
92
+ --color-secondary-10: var(--purple-10);
93
+ --color-secondary-11: var(--purple-11);
94
+ --color-secondary-12: var(--purple-12);
95
+ --color-secondary-fg: var(--neutral-1);
96
+
97
+ /* ═══════════════════════════════════════════════════════════
98
+ SURFACE
99
+ ═══════════════════════════════════════════════════════════ */
100
+ /* Semantic surface tokens */
101
+ --color-surface-base: var(--neutral-2); /* 0.97L — slightly grey page (Stripe/Linear pattern) */
102
+ --color-surface-sunken: var(--color-surface-0);
103
+ --color-surface-raised: var(--neutral-1); /* 0.99L — white cards float above the page */
104
+ --color-surface-overlay: var(--neutral-1); /* same as raised — floating elements are white */
105
+ --color-surface-raised-hover: var(--neutral-3);
106
+ --color-surface-raised-active: var(--neutral-4);
107
+ --color-surface-inverted: var(--neutral-12);
108
+ --color-surface-inverted-fg: var(--neutral-1);
109
+ --color-surface-disabled: var(--neutral-2);
110
+ --color-surface-fg-disabled: var(--neutral-8);
111
+
112
+ --color-surface-fg: var(--neutral-12);
113
+ --color-surface-fg-muted: var(--neutral-11);
114
+ --color-surface-fg-subtle: var(--neutral-9); /* was neutral-8; darkened for WCAG AA 4.5:1 contrast */
115
+ --color-surface-border: var(--neutral-6); /* was neutral-5; bumped for WCAG 1.4.11 non-text contrast */
116
+ --color-surface-border-strong: var(--neutral-7); /* was neutral-6 */
117
+ --color-surface-border-subtle: var(--neutral-5); /* was neutral-4 */
118
+ --color-backdrop: oklch(0 0 0 / 0.4);
119
+
120
+ /* ═══════════════════════════════════════════════════════════
121
+ STATUS — Error
122
+ ═══════════════════════════════════════════════════════════ */
123
+ --color-error-2: var(--red-2);
124
+ --color-error-3: var(--red-3);
125
+ --color-error-4: var(--red-4);
126
+ --color-error-5: var(--red-5);
127
+ --color-error-7: var(--red-7);
128
+ --color-error-9: var(--red-9);
129
+ --color-error-10: var(--red-10);
130
+ --color-error-11: var(--red-11);
131
+ --color-error-fg: var(--neutral-1);
132
+
133
+ /* ═══ Status — Success ═══ */
134
+ --color-success-2: var(--green-2);
135
+ --color-success-3: var(--green-3);
136
+ --color-success-4: var(--green-4);
137
+ --color-success-5: var(--green-5);
138
+ --color-success-7: var(--green-7);
139
+ --color-success-9: var(--green-9);
140
+ --color-success-10: var(--green-10);
141
+ --color-success-11: var(--green-11);
142
+ --color-success-fg: var(--neutral-1);
143
+
144
+ /* ═══ Status — Warning (amber-bright — lightness-corrected) ═══ */
145
+ --color-warning-2: var(--amber-bright-2);
146
+ --color-warning-3: var(--amber-bright-3);
147
+ --color-warning-4: var(--amber-bright-4);
148
+ --color-warning-5: var(--amber-bright-5);
149
+ --color-warning-7: var(--amber-bright-7);
150
+ --color-warning-9: var(--amber-bright-9);
151
+ --color-warning-10: var(--amber-bright-10);
152
+ --color-warning-11: var(--amber-bright-11);
153
+ --color-warning-fg: oklch(0.25 0.01 55);
154
+
155
+ /* ═══ Status — Info ═══ */
156
+ --color-info-2: var(--blue-2);
157
+ --color-info-3: var(--blue-3);
158
+ --color-info-4: var(--blue-4);
159
+ --color-info-5: var(--blue-5);
160
+ --color-info-7: var(--blue-7);
161
+ --color-info-9: var(--blue-9);
162
+ --color-info-10: var(--blue-10);
163
+ --color-info-11: var(--blue-11);
164
+ --color-info-fg: var(--neutral-1);
165
+
166
+ /* ═══════════════════════════════════════════════════════════
167
+ LINK COLORS
168
+ ═══════════════════════════════════════════════════════════ */
169
+ --color-link: var(--color-accent-11); /* default link text — high-contrast accent */
170
+ --color-link-hover: var(--color-accent-12); /* hover — darker for clear feedback */
171
+ --color-link-visited: var(--purple-11); /* visited — distinct from unvisited, uses secondary hue */
172
+
173
+ /* ═══════════════════════════════════════════════════════════
174
+ CATEGORY COLORS (Sapta Varna — step subsets)
175
+ ═══════════════════════════════════════════════════════════ */
176
+ --color-category-teal-3: var(--teal-3);
177
+ --color-category-teal-7: var(--teal-7);
178
+ --color-category-teal-9: var(--teal-9);
179
+ --color-category-teal-11: var(--teal-11);
180
+
181
+ --color-category-amber-3: var(--amber-3);
182
+ --color-category-amber-7: var(--amber-7);
183
+ --color-category-amber-9: var(--amber-9);
184
+ --color-category-amber-11: var(--amber-11);
185
+
186
+ --color-category-slate-3: var(--slate-3);
187
+ --color-category-slate-7: var(--slate-7);
188
+ --color-category-slate-9: var(--slate-9);
189
+ --color-category-slate-11: var(--slate-11);
190
+
191
+ --color-category-indigo-3: var(--indigo-3);
192
+ --color-category-indigo-7: var(--indigo-7);
193
+ --color-category-indigo-9: var(--indigo-9);
194
+ --color-category-indigo-11: var(--indigo-11);
195
+
196
+ --color-category-cyan-3: var(--cyan-3);
197
+ --color-category-cyan-7: var(--cyan-7);
198
+ --color-category-cyan-9: var(--cyan-9);
199
+ --color-category-cyan-11: var(--cyan-11);
200
+
201
+ --color-category-orange-3: var(--orange-3);
202
+ --color-category-orange-7: var(--orange-7);
203
+ --color-category-orange-9: var(--orange-9);
204
+ --color-category-orange-11: var(--orange-11);
205
+
206
+ --color-category-emerald-3: var(--emerald-3);
207
+ --color-category-emerald-7: var(--emerald-7);
208
+ --color-category-emerald-9: var(--emerald-9);
209
+ --color-category-emerald-11: var(--emerald-11);
210
+
211
+ /* ═══════════════════════════════════════════════════════════
212
+ SKELETON
213
+ ═══════════════════════════════════════════════════════════ */
214
+ --color-skeleton-base: var(--neutral-3);
215
+ --color-skeleton-shimmer: var(--neutral-2);
216
+
217
+ /* ═══════════════════════════════════════════════════════════
218
+ UTILITY TOKENS (not step-based, but semantically needed)
219
+ ═══════════════════════════════════════════════════════════ */
220
+ --color-overlay: oklch(0 0 0 / 0.50);
221
+ --color-disabled: var(--neutral-5);
222
+
223
+ /* ═══════════════════════════════════════════════════════════
224
+ ACTION STATE OPACITIES
225
+ ═══════════════════════════════════════════════════════════ */
226
+ --action-hover-opacity: 0.04;
227
+ --action-selected-opacity: 0.08;
228
+ --action-disabled-opacity: 0.38;
229
+ --action-focus-opacity: 0.12;
230
+ --action-active-opacity: 0.12;
231
+
232
+ /* ═══════════════════════════════════════════════════════════
233
+ SPACING
234
+ ═══════════════════════════════════════════════════════════ */
235
+ --spacing-01: 2px;
236
+ --spacing-02: 4px;
237
+ --spacing-02b: 6px;
238
+ --spacing-03: 8px;
239
+ --spacing-04: 12px;
240
+ --spacing-05: 16px;
241
+ --spacing-05b: 20px;
242
+ --spacing-06: 24px;
243
+ --spacing-06b: 28px;
244
+ --spacing-07: 32px;
245
+ --spacing-08: 40px;
246
+ --spacing-09: 48px;
247
+ --spacing-10: 64px;
248
+ --spacing-11: 80px;
249
+ --spacing-12: 96px;
250
+ --spacing-13: 160px;
251
+
252
+ /* ── Layout Spacing (semantic page/section-level) ──
253
+ These reference the base spacing scale but provide responsive overrides
254
+ via @media queries below. Components like Container use these instead
255
+ of hardcoding a single spacing token. */
256
+ --spacing-page-x: var(--spacing-05); /* 16px — horizontal page padding */
257
+ --spacing-page-y: var(--spacing-07); /* 32px — vertical page padding */
258
+ --spacing-section-gap: var(--spacing-08); /* 40px — between major page sections */
259
+ --spacing-card-gap: var(--spacing-05); /* 16px — between cards in a grid */
260
+ --spacing-stack-gap: var(--spacing-06); /* 24px — between stacked content blocks */
261
+
262
+ /* ═══════════════════════════════════════════════════════════
263
+ RADIUS
264
+ ═══════════════════════════════════════════════════════════ */
265
+ --radius-none: 0;
266
+ --radius-sm: 2px;
267
+ --radius-default: 4px;
268
+ --radius-md: 6px;
269
+ --radius-lg: 10px;
270
+ --radius-xl: 16px;
271
+ --radius-2xl: 24px;
272
+ --radius-full: 9999px;
273
+
274
+ /* ═══════════════════════════════════════════════════════════
275
+ MOTION
276
+ ═══════════════════════════════════════════════════════════ */
277
+
278
+ /* ── Motion: Durations (Carbon-inspired scale) ── */
279
+ --duration-instant: 0ms;
280
+ --duration-fast-01: 70ms;
281
+ --duration-fast-02: 110ms;
282
+ --duration-moderate-01: 150ms;
283
+ --duration-moderate-01b: 200ms; /* accordion, collapsible, layout transitions — most-used gap */
284
+ --duration-moderate-02: 240ms;
285
+ --duration-slow-01: 400ms;
286
+ --duration-slow-02: 700ms;
287
+
288
+ /* ── Motion: Easing Productive (task-focused, utilitarian) ── */
289
+ --ease-productive-standard: cubic-bezier(0.2, 0, 0.38, 0.9);
290
+ --ease-productive-entrance: cubic-bezier(0, 0, 0.38, 0.9);
291
+ --ease-productive-exit: cubic-bezier(0.2, 0, 1, 0.9);
292
+
293
+ /* ── Motion: Easing — Expressive (attention-grabbing, dramatic) ── */
294
+ --ease-expressive-standard: cubic-bezier(0.4, 0.14, 0.3, 1);
295
+ --ease-expressive-entrance: cubic-bezier(0, 0, 0.3, 1);
296
+ --ease-expressive-exit: cubic-bezier(0.4, 0.14, 1, 1);
297
+
298
+ /* ── Motion: Easing — Utility ── */
299
+ --ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
300
+ --ease-linear: linear;
301
+
302
+ /* ═══════════════════════════════════════════════════════════
303
+ SHADOWS
304
+ ═══════════════════════════════════════════════════════════ */
305
+
306
+ /* Shadow color: cool blue tint for natural depth */
307
+ --shadow-color: 0.15 0.015 260;
308
+ --shadow-strength: 1;
309
+
310
+ /* Shadow transition */
311
+ --shadow-transition: box-shadow var(--duration-fast-02) var(--ease-productive-standard);
312
+
313
+ /* Keyboard shortcut badge shadow */
314
+ --shadow-kbd: inset 0 -1px 0 oklch(0 0 0 / 0.1);
315
+
316
+ /* Shadow primitives (internal) */
317
+ --shadow-xs:
318
+ 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
319
+ 0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
320
+ 0 1.5px 3px -1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
321
+ 0 3px 7px -2px oklch(var(--shadow-color) / calc(0.03 * var(--shadow-strength)));
322
+ --shadow-sm:
323
+ 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
324
+ 0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
325
+ 0 2px 4px -1.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
326
+ 0 6px 12px -3px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
327
+ 0 14px 28px -8px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
328
+ --shadow-md:
329
+ 0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
330
+ 0 1px 2px -1px oklch(var(--shadow-color) / calc(0.05 * var(--shadow-strength))),
331
+ 0 4px 8px -2px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
332
+ 0 10px 20px -5px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
333
+ 0 24px 44px -12px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
334
+ --shadow-lg:
335
+ 0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
336
+ 0 1px 2px -1px oklch(var(--shadow-color) / calc(0.05 * var(--shadow-strength))),
337
+ 0 3px 6px -2px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
338
+ 0 8px 16px -4px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
339
+ 0 18px 34px -8px oklch(var(--shadow-color) / calc(0.03 * var(--shadow-strength))),
340
+ 0 40px 64px -16px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
341
+
342
+ /* Semantic elevation shadows (public API) */
343
+ --shadow-raised: var(--shadow-xs);
344
+ --shadow-raised-hover: var(--shadow-sm);
345
+ --shadow-floating: var(--shadow-md);
346
+ --shadow-overlay: var(--shadow-lg);
347
+
348
+ /* Effect shadows */
349
+ --shadow-brand: 0 2px 8px oklch(0.55 0.19 360 / 0.20), 0 6px 20px oklch(0.55 0.19 360 / 0.15);
350
+ --shadow-glow: 0 0 0 1.5px oklch(0.55 0.19 360 / 0.20), 0 0 7px oklch(0.55 0.19 360 / 0.12);
351
+ --shadow-inset: inset 0 1px 2px oklch(var(--shadow-color) / calc(0.08 * var(--shadow-strength))), inset 0 2px 5px oklch(var(--shadow-color) / calc(0.06 * var(--shadow-strength)));
352
+ --shadow-ring-sm: 0 0 0 1px var(--color-surface-border);
353
+ --shadow-ring: 0 0 0 2px oklch(0.55 0.19 360 / 0.30);
354
+
355
+ /* Status & state effect shadows */
356
+ --shadow-raised-inner: inset 0 1px 0 oklch(1 0 0 / 0.10), inset 0 -1px 0 oklch(0 0 0 / 0.06);
357
+ --shadow-pressed: 0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength)));
358
+ --shadow-success: 0 2px 8px oklch(0.55 0.14 145 / 0.20), 0 6px 20px oklch(0.55 0.14 145 / 0.15);
359
+ --shadow-error: 0 2px 8px oklch(0.55 0.18 25 / 0.20), 0 6px 20px oklch(0.55 0.18 25 / 0.15);
360
+ --shadow-warning: 0 2px 8px oklch(0.78 0.16 65 / 0.22), 0 6px 20px oklch(0.78 0.16 65 / 0.15);
361
+
362
+ /* ═══════════════════════════════════════════════════════════
363
+ SIZES
364
+ ═══════════════════════════════════════════════════════════ */
365
+ --size-xs: 24px;
366
+ --size-xs-plus: 28px;
367
+ --size-sm: 32px;
368
+ --size-sm-plus: 36px;
369
+ --size-md: 40px;
370
+ --size-lg: 48px;
371
+ --size-xl: 56px;
372
+ --icon-sm: 16px;
373
+ --icon-md: 20px;
374
+ --icon-lg: 24px;
375
+ --icon-xl: 32px;
376
+ --border-width-sm: 1px;
377
+ --border-width-md: 2px;
378
+ --border-width-lg: 3px;
379
+ --border-focus-width: 2px;
380
+ --border-focus-offset: 2px;
381
+
382
+ /* ═══════════════════════════════════════════════════════════
383
+ Z-INDEX
384
+ ═══════════════════════════════════════════════════════════ */
385
+ --z-base: 0;
386
+ --z-raised: 10;
387
+ --z-dropdown: 1000;
388
+ --z-sticky: 1100;
389
+ --z-overlay: 1200;
390
+ --z-modal: 1300;
391
+ --z-popover: 1400;
392
+ --z-toast: 1500;
393
+ --z-tooltip: 1600;
394
+
395
+ /* ── Layout ─────────────────────────────────── */
396
+ --max-width: 1280px;
397
+ --max-width-body: 960px;
398
+
399
+ /* ── Breakpoints ───────────────────────────── */
400
+ --breakpoint-sm: 640px;
401
+ --breakpoint-md: 768px;
402
+ --breakpoint-lg: 1024px;
403
+ --breakpoint-xl: 1280px;
404
+ --breakpoint-2xl: 1536px;
405
+
406
+ /* ═══════════════════════════════════════════════════════════
407
+ GRADIENTS
408
+ ═══════════════════════════════════════════════════════════ */
409
+ --gradient-brand-light: linear-gradient(135deg, var(--pink-7), var(--purple-9));
410
+ --gradient-brand-dark: linear-gradient(135deg, var(--pink-8), var(--purple-10));
411
+
412
+ /* ═══════════════════════════════════════════════════════════
413
+ CHART PALETTE
414
+ ═══════════════════════════════════════════════════════════ */
415
+ --chart-1: var(--pink-9);
416
+ --chart-2: var(--purple-9);
417
+ --chart-3: var(--blue-9);
418
+ --chart-4: var(--green-9);
419
+ --chart-5: var(--yellow-9);
420
+ --chart-6: var(--red-9);
421
+ --chart-7: var(--cyan-9);
422
+ --chart-8: var(--orange-9);
423
+
424
+ /* ═══════════════════════════════════════════════════════════
425
+ INSET GLOW & OVERLAY
426
+ ═══════════════════════════════════════════════════════════ */
427
+ --color-inset-glow: oklch(1 0 0 / 0.25);
428
+ --color-inset-glow-strong: oklch(1 0 0 / 0.16);
429
+ --color-inset-glow-subtle: oklch(1 0 0 / 0.10);
430
+ --color-surface-overlay-light: oklch(1 0 0 / 0.20);
431
+ --color-surface-overlay-dark: oklch(0 0 0 / 0.12);
432
+ --color-text-shadow: oklch(0 0 0 / 0.15);
433
+ }
434
+
435
+ /* ═══════════════════════════════════════════════════════════
436
+ DARK MODE
437
+ ═══════════════════════════════════════════════════════════ */
438
+ .dark {
439
+ color-scheme: dark;
440
+
441
+ /* Foreground on solid accent/status backgroundspure white on brand colors */
442
+ --color-accent-fg: var(--neutral-0);
443
+ --color-secondary-fg: var(--neutral-0);
444
+ --color-error-fg: var(--neutral-0);
445
+ --color-success-fg: var(--neutral-0);
446
+ --color-info-fg: var(--neutral-0);
447
+
448
+ /* Warning: amber-bright dark ramp for dark mode */
449
+ --color-warning-2: var(--amber-bright-2);
450
+ --color-warning-3: var(--amber-bright-3);
451
+ --color-warning-4: var(--amber-bright-4);
452
+ --color-warning-5: var(--amber-bright-5);
453
+ --color-warning-7: var(--amber-bright-7);
454
+ --color-warning-9: var(--amber-bright-9);
455
+ --color-warning-10: var(--amber-bright-10);
456
+ --color-warning-11: var(--amber-bright-11);
457
+ --color-warning-fg: var(--neutral-0);
458
+
459
+ /* Link colors — accent-11/12 already flip via semantic layer;
460
+ visited uses purple-11 which also flips via primitives dark block */
461
+
462
+ /* Dark mode borders need lower contrast — bright borders look harsh.
463
+ Drop to step 3/4 for subtle resting borders that don't overpower surfaces */
464
+ /* Dark mode: restore base/raised to original direction (raised = lighter than base) */
465
+ --color-surface-base: var(--neutral-1); /* 0.11L — dark page */
466
+ --color-surface-raised: var(--neutral-2); /* 0.17L — lighter cards */
467
+
468
+ --color-surface-border: var(--neutral-4); /* was neutral-3; bumped for contrast */
469
+ --color-surface-border-strong: var(--neutral-5); /* was neutral-4 */
470
+ --color-surface-overlay: oklch(0.13 0.0002 350);
471
+ --color-surface-border-subtle: var(--neutral-3); /* was neutral-2 = same as raised = invisible (1:1) */
472
+ --color-backdrop: oklch(0 0 0 / 0.6);
473
+
474
+ /* Overlay */
475
+ --color-overlay: oklch(0 0 0 / 0.70);
476
+
477
+ /* Action State Opacities (higher in dark mode) */
478
+ --action-hover-opacity: 0.08;
479
+ --action-selected-opacity: 0.12;
480
+ --action-disabled-opacity: 0.38;
481
+ --action-focus-opacity: 0.12;
482
+ --action-active-opacity: 0.16;
483
+
484
+ /* Skeleton */
485
+ --color-skeleton-base: var(--neutral-4);
486
+ --color-skeleton-shimmer: var(--neutral-3);
487
+
488
+ /* Shadows (heavier in dark mode) */
489
+ --shadow-strength: 2.5;
490
+ --shadow-brand: 0 2px 8px oklch(0.55 0.19 360 / 0.30), 0 6px 20px oklch(0.55 0.19 360 / 0.20);
491
+ --shadow-glow: 0 0 0 1.5px oklch(0.55 0.19 360 / 0.35), 0 0 10px oklch(0.55 0.19 360 / 0.20);
492
+ --shadow-ring: 0 0 0 2px oklch(0.55 0.19 360 / 0.45);
493
+ --shadow-raised-inner: inset 0 1px 0 oklch(1 0 0 / 0.06), inset 0 -1px 0 oklch(0 0 0 / 0.12);
494
+ --shadow-success: 0 2px 8px oklch(0.6 0.14 145 / 0.30), 0 6px 20px oklch(0.6 0.14 145 / 0.20);
495
+ --shadow-error: 0 2px 8px oklch(0.6 0.18 25 / 0.30), 0 6px 20px oklch(0.6 0.18 25 / 0.20);
496
+ --shadow-warning: 0 2px 8px oklch(0.78 0.16 65 / 0.30), 0 6px 20px oklch(0.78 0.16 65 / 0.20);
497
+
498
+ /* Gradients */
499
+ --gradient-brand-light: linear-gradient(135deg, var(--pink-9), var(--purple-9));
500
+ --gradient-brand-dark: linear-gradient(135deg, var(--pink-10), var(--purple-10));
501
+
502
+ /* Chart Palette (dark — use step 9 which is brighter in dark) */
503
+ --chart-1: var(--pink-9);
504
+ --chart-2: var(--purple-9);
505
+ --chart-3: var(--blue-9);
506
+ --chart-4: var(--green-9);
507
+ --chart-5: var(--yellow-9);
508
+ --chart-6: var(--red-9);
509
+ --chart-7: var(--cyan-9);
510
+ --chart-8: var(--orange-9);
511
+
512
+ /* Inset Glow & Overlay */
513
+ --color-inset-glow: oklch(1 0 0 / 0.10);
514
+ --color-inset-glow-strong: oklch(1 0 0 / 0.08);
515
+ --color-inset-glow-subtle: oklch(1 0 0 / 0.05);
516
+ --color-surface-overlay-light: oklch(1 0 0 / 0.08);
517
+ --color-surface-overlay-dark: oklch(0 0 0 / 0.25);
518
+ --color-text-shadow: oklch(0 0 0 / 0.40);
519
+ }
520
+
521
+ /* Ensure Radix popper content (Select, Combobox, Popover, etc.)
522
+ renders above Sheet/Dialog overlays */
523
+ [data-radix-popper-content-wrapper] {
524
+ z-index: var(--z-popover) !important;
525
+ }
526
+
527
+ /* ── Responsive Layout Spacing ──────────────────────── */
528
+ @media (min-width: 768px) {
529
+ :root {
530
+ --spacing-page-x: var(--spacing-06); /* 24px on tablet+ */
531
+ --spacing-section-gap: var(--spacing-10); /* 64px on tablet+ */
532
+ }
533
+ }
534
+
535
+ @media (min-width: 1280px) {
536
+ :root {
537
+ --spacing-page-x: var(--spacing-08); /* 40px on desktop+ */
538
+ }
539
+ }
540
+
541
+ /* ── Reduced Motion ──────────────────────────────────── */
542
+ /* ═══════════════════════════════════════════════════════════
543
+ PROCESSING ANIMATIONS
544
+ ═══════════════════════════════════════════════════════════ */
545
+
546
+ @property --border-angle {
547
+ syntax: "<angle>";
548
+ initial-value: 0deg;
549
+ inherits: false;
550
+ }
551
+
552
+ @keyframes processing-ants-rotate {
553
+ to {
554
+ --border-angle: 360deg;
555
+ }
556
+ }
557
+
558
+ @keyframes processing-ants-march {
559
+ to {
560
+ background-position: 16px 0, 100% 16px, calc(100% - 16px) 100%, 0 calc(100% - 16px);
561
+ }
562
+ }
563
+
564
+ @keyframes processing-ants-svg {
565
+ to {
566
+ stroke-dashoffset: -10;
567
+ }
568
+ }
569
+
570
+ /* ═══════════════════════════════════════════════════════════ */
571
+
572
+ @media (prefers-reduced-motion: reduce) {
573
+
574
+ *,
575
+ *::before,
576
+ *::after {
577
+ animation-duration: 0.01ms !important;
578
+ animation-iteration-count: 1 !important;
579
+ transition-duration: 0.01ms !important;
580
+ scroll-behavior: auto !important;
581
+ }
582
+ }
583
+
584
+ /* ═══════════════════════════════════════════════════════════
585
+ FORCED COLORS (Windows High Contrast, etc.)
586
+ ───────────────────────────────────────────────────────────
587
+ When the OS forces a color scheme, browsers strip our custom
588
+ palette and remap to a small set of system keywords. We opt
589
+ into this by default (forced-color-adjust: auto is the
590
+ default) and only *explicitly map* our semantic tokens to
591
+ system colors where the remapping would otherwise be lossy
592
+ or ambiguous.
593
+
594
+ Applies to BOTH light and dark themes — forced-colors is
595
+ orthogonal to theme. We override both :root and .dark.
596
+
597
+ Testing: Chrome DevTools → Rendering → "Emulate CSS media
598
+ feature forced-colors: active". Or Windows Settings → High
599
+ Contrast.
600
+ ═══════════════════════════════════════════════════════════ */
601
+ @media (forced-colors: active) {
602
+ :root,
603
+ .dark {
604
+ /* ── Surface ── */
605
+ --color-surface-fg: CanvasText;
606
+ --color-surface-fg-muted: CanvasText; /* Muted merges with fg; rely on weight/position for hierarchy */
607
+ --color-surface-fg-subtle: GrayText;
608
+ --color-surface-fg-disabled: GrayText;
609
+ --color-surface-base: Canvas;
610
+ --color-surface-sunken: Canvas;
611
+ --color-surface-raised: Canvas;
612
+ --color-surface-raised-hover: Canvas; /* System handles hover via :hover + Highlight */
613
+ --color-surface-raised-active: Canvas;
614
+ --color-surface-overlay: Canvas;
615
+ --color-surface-disabled: Canvas;
616
+ --color-surface-inverted: CanvasText;
617
+ --color-surface-inverted-fg: Canvas;
618
+ --color-surface-border: CanvasText;
619
+ --color-surface-border-strong: CanvasText;
620
+ --color-surface-border-subtle: GrayText;
621
+ --color-backdrop: Canvas;
622
+ --color-overlay: Canvas;
623
+ --color-disabled: GrayText;
624
+
625
+ /* ── Accent ──
626
+ Step 9/10 (solid backgrounds) → Highlight (system selected color).
627
+ Step 11 (text) → LinkText for emphasis / interactive text runs.
628
+ Step 3-5 (hover/subtle bg) collapse to Canvas — hover is expressed
629
+ by system Highlight on :hover automatically. */
630
+ --color-accent-1: Canvas;
631
+ --color-accent-2: Canvas;
632
+ --color-accent-3: Canvas;
633
+ --color-accent-4: Canvas;
634
+ --color-accent-5: Canvas;
635
+ --color-accent-6: Canvas;
636
+ --color-accent-7: Highlight;
637
+ --color-accent-8: Highlight;
638
+ --color-accent-9: Highlight;
639
+ --color-accent-10: Highlight;
640
+ --color-accent-11: LinkText;
641
+ --color-accent-12: LinkText;
642
+ --color-accent-fg: HighlightText;
643
+
644
+ /* ── Secondary accent ── (same pattern) */
645
+ --color-secondary-9: Highlight;
646
+ --color-secondary-10: Highlight;
647
+ --color-secondary-11: LinkText;
648
+ --color-secondary-12: LinkText;
649
+ --color-secondary-fg: HighlightText;
650
+
651
+ /* ── Status colors ──
652
+ Forced-colors has no distinct error/success/warning/info slots.
653
+ Step-11 text → CanvasText (still readable). Step-9 solid → Mark
654
+ (often highlighted/annotated color in system themes) for error
655
+ since errors are the most distinguishable need; others use
656
+ Highlight to stay legible. Meaning MUST be carried by iconography
657
+ + text, not color, under forced-colors. */
658
+ --color-error-3: Canvas;
659
+ --color-error-4: Canvas;
660
+ --color-error-5: Canvas;
661
+ --color-error-7: CanvasText;
662
+ --color-error-9: Mark;
663
+ --color-error-10: Mark;
664
+ --color-error-11: CanvasText;
665
+ --color-error-fg: CanvasText;
666
+
667
+ --color-success-3: Canvas;
668
+ --color-success-4: Canvas;
669
+ --color-success-5: Canvas;
670
+ --color-success-7: CanvasText;
671
+ --color-success-9: Highlight;
672
+ --color-success-10: Highlight;
673
+ --color-success-11: CanvasText;
674
+ --color-success-fg: HighlightText;
675
+
676
+ --color-warning-3: Canvas;
677
+ --color-warning-4: Canvas;
678
+ --color-warning-5: Canvas;
679
+ --color-warning-7: CanvasText;
680
+ --color-warning-9: Highlight;
681
+ --color-warning-10: Highlight;
682
+ --color-warning-11: CanvasText;
683
+ --color-warning-fg: HighlightText;
684
+
685
+ --color-info-3: Canvas;
686
+ --color-info-4: Canvas;
687
+ --color-info-5: Canvas;
688
+ --color-info-7: CanvasText;
689
+ --color-info-9: Highlight;
690
+ --color-info-10: Highlight;
691
+ --color-info-11: CanvasText;
692
+ --color-info-fg: HighlightText;
693
+
694
+ /* ── Links ──
695
+ VisitedText falls back to LinkText on browsers that don't
696
+ implement it; both render visibly. */
697
+ --color-link: LinkText;
698
+ --color-link-hover: LinkText;
699
+ --color-link-visited: VisitedText;
700
+
701
+ /* ── Skeleton ── collapse to Canvas; shimmer animation still runs */
702
+ --color-skeleton-base: GrayText;
703
+ --color-skeleton-shimmer: Canvas;
704
+ }
705
+
706
+ /* Focus ring — Tailwind's `ring-*` utility compiles to box-shadow, which
707
+ CAN be stripped by some UAs under forced-colors. Belt-and-suspenders:
708
+ enforce an `outline` too so focus is *always* visible. */
709
+ *:focus-visible {
710
+ outline: 2px solid Highlight !important;
711
+ outline-offset: 2px !important;
712
+ }
713
+
714
+ /* Interactive elements need a visible border even when their resting
715
+ background is transparent (ghost/link buttons, bare inputs). Canvas +
716
+ no background = invisible interactive area. Use ButtonText for
717
+ buttons, CanvasText for inputs — the system keywords closest in
718
+ intent. */
719
+ button,
720
+ [role="button"],
721
+ [role="menuitem"],
722
+ [role="option"],
723
+ [role="tab"] {
724
+ border: 1px solid ButtonText;
725
+ }
726
+
727
+ input,
728
+ select,
729
+ textarea {
730
+ border: 1px solid CanvasText;
731
+ }
732
+
733
+ /* Decorative texture layers are pure noise in high-contrast mode. */
734
+ [data-grain] {
735
+ display: none;
736
+ }
737
+
738
+ /* Skeleton shimmer can feel alarming in high-contrast; keep static. */
739
+ [data-skeleton] {
740
+ animation: none !important;
741
+ }
742
+ }