@devalok/shilp-sutra 0.36.1 → 0.37.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/MIGRATION.md +346 -0
  2. package/README.md +26 -29
  3. package/dist/_chunks/badge-group.js +42 -42
  4. package/dist/_chunks/badge-group.js.map +1 -1
  5. package/dist/_chunks/chat.js +324 -327
  6. package/dist/_chunks/chat.js.map +1 -1
  7. package/dist/_chunks/date-picker.js +245 -245
  8. package/dist/_chunks/date-picker.js.map +1 -1
  9. package/dist/_chunks/document-preview.js +33 -33
  10. package/dist/_chunks/document-preview.js.map +1 -1
  11. package/dist/_chunks/file-preview.js +264 -264
  12. package/dist/_chunks/file-preview.js.map +1 -1
  13. package/dist/_chunks/image-preview.js +45 -45
  14. package/dist/_chunks/image-preview.js.map +1 -1
  15. package/dist/_chunks/mention-suggestion.js +85 -85
  16. package/dist/_chunks/mention-suggestion.js.map +1 -1
  17. package/dist/_chunks/motion-provider.js +13 -13
  18. package/dist/_chunks/motion-provider.js.map +1 -1
  19. package/dist/_chunks/popover.js +36 -36
  20. package/dist/_chunks/popover.js.map +1 -1
  21. package/dist/_chunks/primitives.js +489 -489
  22. package/dist/_chunks/primitives.js.map +1 -1
  23. package/dist/_chunks/rich-chat-input.js +1065 -1065
  24. package/dist/_chunks/rich-chat-input.js.map +1 -1
  25. package/dist/_chunks/shared.js +43 -43
  26. package/dist/_chunks/shared.js.map +1 -1
  27. package/dist/_chunks/text.js +432 -0
  28. package/dist/_chunks/text.js.map +1 -0
  29. package/dist/_chunks/tiptap.js +6053 -6187
  30. package/dist/_chunks/tiptap.js.map +1 -1
  31. package/dist/_chunks/tree-view.js +97 -97
  32. package/dist/_chunks/tree-view.js.map +1 -1
  33. package/dist/_chunks/use-calendar.js.map +1 -1
  34. package/dist/ai/ai-command-provider.d.ts.map +1 -1
  35. package/dist/ai/ai-command-provider.js.map +1 -1
  36. package/dist/ai/block-renderer.d.ts.map +1 -1
  37. package/dist/ai/block-renderer.js +43 -43
  38. package/dist/ai/block-renderer.js.map +1 -1
  39. package/dist/ai/blocks/block-table.d.ts.map +1 -1
  40. package/dist/ai/blocks/confirm.d.ts.map +1 -1
  41. package/dist/ai/blocks/divider.d.ts.map +1 -1
  42. package/dist/ai/blocks/error.d.ts.map +1 -1
  43. package/dist/ai/blocks/index.d.ts +5 -5
  44. package/dist/ai/blocks/index.d.ts.map +1 -1
  45. package/dist/ai/blocks/index.js +2 -2
  46. package/dist/ai/blocks/info.d.ts.map +1 -1
  47. package/dist/ai/blocks/loading.d.ts.map +1 -1
  48. package/dist/ai/blocks/stat-row.d.ts.map +1 -1
  49. package/dist/ai/blocks/success.d.ts.map +1 -1
  50. package/dist/ai/blocks/text.d.ts.map +1 -1
  51. package/dist/ai/command-bar.d.ts +0 -11
  52. package/dist/ai/command-bar.d.ts.map +1 -1
  53. package/dist/ai/command-bar.js +128 -128
  54. package/dist/ai/command-bar.js.map +1 -1
  55. package/dist/ai/conversation.d.ts +1 -1
  56. package/dist/ai/conversation.d.ts.map +1 -1
  57. package/dist/ai/conversation.js +76 -76
  58. package/dist/ai/conversation.js.map +1 -1
  59. package/dist/ai/devadoot-icon.d.ts +0 -12
  60. package/dist/ai/devadoot-icon.d.ts.map +1 -1
  61. package/dist/ai/index.d.ts +11 -11
  62. package/dist/ai/index.d.ts.map +1 -1
  63. package/dist/ai/index.js +44 -44
  64. package/dist/ai/index.js.map +1 -1
  65. package/dist/composed/activity-feed.d.ts.map +1 -1
  66. package/dist/composed/activity-feed.js +93 -93
  67. package/dist/composed/activity-feed.js.map +1 -1
  68. package/dist/composed/avatar-group.d.ts.map +1 -1
  69. package/dist/composed/avatar-group.js +50 -50
  70. package/dist/composed/avatar-group.js.map +1 -1
  71. package/dist/composed/bulk-action-bar.d.ts.map +1 -1
  72. package/dist/composed/bulk-action-bar.js +40 -40
  73. package/dist/composed/bulk-action-bar.js.map +1 -1
  74. package/dist/composed/command-palette.d.ts +0 -6
  75. package/dist/composed/command-palette.d.ts.map +1 -1
  76. package/dist/composed/command-palette.js +131 -131
  77. package/dist/composed/command-palette.js.map +1 -1
  78. package/dist/composed/confirm-dialog.d.ts.map +1 -1
  79. package/dist/composed/confirm-dialog.js.map +1 -1
  80. package/dist/composed/content-card.d.ts.map +1 -1
  81. package/dist/composed/content-card.js.map +1 -1
  82. package/dist/composed/date-picker/calendar-grid.d.ts.map +1 -1
  83. package/dist/composed/date-picker/date-picker.d.ts.map +1 -1
  84. package/dist/composed/date-picker/date-range-picker.d.ts.map +1 -1
  85. package/dist/composed/date-picker/date-time-picker.d.ts.map +1 -1
  86. package/dist/composed/date-picker/index.d.ts +11 -11
  87. package/dist/composed/date-picker/index.d.ts.map +1 -1
  88. package/dist/composed/date-picker/index.js +1 -1
  89. package/dist/composed/date-picker/month-picker.d.ts.map +1 -1
  90. package/dist/composed/date-picker/presets.d.ts.map +1 -1
  91. package/dist/composed/date-picker/time-picker.d.ts.map +1 -1
  92. package/dist/composed/date-picker/year-picker.d.ts.map +1 -1
  93. package/dist/composed/deadline-indicator.d.ts.map +1 -1
  94. package/dist/composed/deadline-indicator.js +25 -25
  95. package/dist/composed/deadline-indicator.js.map +1 -1
  96. package/dist/composed/emoji-picker.d.ts.map +1 -1
  97. package/dist/composed/emoji-picker.js +37 -37
  98. package/dist/composed/emoji-picker.js.map +1 -1
  99. package/dist/composed/empty-state.d.ts.map +1 -1
  100. package/dist/composed/empty-state.js +21 -21
  101. package/dist/composed/empty-state.js.map +1 -1
  102. package/dist/composed/error-boundary.d.ts +1 -1
  103. package/dist/composed/error-boundary.d.ts.map +1 -1
  104. package/dist/composed/error-boundary.js.map +1 -1
  105. package/dist/composed/extensions/emoji-node.d.ts.map +1 -1
  106. package/dist/composed/extensions/emoji-suggestion.d.ts.map +1 -1
  107. package/dist/composed/extensions/file-attachment.d.ts.map +1 -1
  108. package/dist/composed/extensions/mention-suggestion.d.ts +1 -1
  109. package/dist/composed/extensions/mention-suggestion.d.ts.map +1 -1
  110. package/dist/composed/extensions/slash-command.d.ts +1 -1
  111. package/dist/composed/extensions/slash-command.d.ts.map +1 -1
  112. package/dist/composed/file-preview/audio-preview.d.ts.map +1 -1
  113. package/dist/composed/file-preview/document-preview.d.ts.map +1 -1
  114. package/dist/composed/file-preview/embed-preview.d.ts.map +1 -1
  115. package/dist/composed/file-preview/image-preview.d.ts.map +1 -1
  116. package/dist/composed/file-preview/shared.d.ts.map +1 -1
  117. package/dist/composed/file-preview/video-preview.d.ts.map +1 -1
  118. package/dist/composed/file-preview.d.ts.map +1 -1
  119. package/dist/composed/filter-bar.d.ts +1 -1
  120. package/dist/composed/filter-bar.d.ts.map +1 -1
  121. package/dist/composed/filter-bar.js +54 -54
  122. package/dist/composed/filter-bar.js.map +1 -1
  123. package/dist/composed/form-section.d.ts.map +1 -1
  124. package/dist/composed/form-section.js +26 -26
  125. package/dist/composed/form-section.js.map +1 -1
  126. package/dist/composed/global-loading.d.ts.map +1 -1
  127. package/dist/composed/global-loading.js.map +1 -1
  128. package/dist/composed/index.d.ts +55 -55
  129. package/dist/composed/index.d.ts.map +1 -1
  130. package/dist/composed/index.js +17 -17
  131. package/dist/composed/inline-edit.d.ts.map +1 -1
  132. package/dist/composed/inline-edit.js.map +1 -1
  133. package/dist/composed/loading-skeleton.d.ts +1 -1
  134. package/dist/composed/loading-skeleton.d.ts.map +1 -1
  135. package/dist/composed/loading-skeleton.js.map +1 -1
  136. package/dist/composed/markdown-viewer.d.ts.map +1 -1
  137. package/dist/composed/markdown-viewer.js +3 -3
  138. package/dist/composed/markdown-viewer.js.map +1 -1
  139. package/dist/composed/master-detail.d.ts.map +1 -1
  140. package/dist/composed/master-detail.js +42 -42
  141. package/dist/composed/master-detail.js.map +1 -1
  142. package/dist/composed/member-picker.d.ts.map +1 -1
  143. package/dist/composed/member-picker.js.map +1 -1
  144. package/dist/composed/multi-select-popover.d.ts.map +1 -1
  145. package/dist/composed/multi-select-popover.js +55 -55
  146. package/dist/composed/multi-select-popover.js.map +1 -1
  147. package/dist/composed/page-header.d.ts.map +1 -1
  148. package/dist/composed/page-header.js.map +1 -1
  149. package/dist/composed/page-skeletons.d.ts.map +1 -1
  150. package/dist/composed/page-skeletons.js.map +1 -1
  151. package/dist/composed/priority-indicator.d.ts.map +1 -1
  152. package/dist/composed/priority-indicator.js +34 -34
  153. package/dist/composed/priority-indicator.js.map +1 -1
  154. package/dist/composed/responsive-overlay.d.ts.map +1 -1
  155. package/dist/composed/responsive-overlay.js.map +1 -1
  156. package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -1
  157. package/dist/composed/rich-chat-input/audio-player.d.ts.map +1 -1
  158. package/dist/composed/rich-chat-input/audio-waveform.d.ts.map +1 -1
  159. package/dist/composed/rich-chat-input/chat-toolbar.d.ts.map +1 -1
  160. package/dist/composed/rich-chat-input/recording-overlay.d.ts.map +1 -1
  161. package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -1
  162. package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -1
  163. package/dist/composed/rich-chat-input.d.ts +6 -6
  164. package/dist/composed/rich-chat-input.d.ts.map +1 -1
  165. package/dist/composed/rich-chat-input.js +1 -1
  166. package/dist/composed/rich-text-editor.d.ts.map +1 -1
  167. package/dist/composed/rich-text-editor.js +24 -24
  168. package/dist/composed/rich-text-editor.js.map +1 -1
  169. package/dist/composed/schedule-view.d.ts.map +1 -1
  170. package/dist/composed/schedule-view.js +53 -53
  171. package/dist/composed/schedule-view.js.map +1 -1
  172. package/dist/composed/simple-tooltip.d.ts.map +1 -1
  173. package/dist/composed/simple-tooltip.js.map +1 -1
  174. package/dist/composed/status-badge.d.ts +1 -1
  175. package/dist/composed/status-badge.d.ts.map +1 -1
  176. package/dist/composed/status-badge.js +30 -30
  177. package/dist/composed/status-badge.js.map +1 -1
  178. package/dist/hooks/index.d.ts +3 -3
  179. package/dist/hooks/index.d.ts.map +1 -1
  180. package/dist/hooks/index.js +1 -1
  181. package/dist/hooks/use-color-mode.js.map +1 -1
  182. package/dist/hooks/use-toast.d.ts +1 -1
  183. package/dist/hooks/use-toast.d.ts.map +1 -1
  184. package/dist/motion/index.d.ts +2 -2
  185. package/dist/motion/index.d.ts.map +1 -1
  186. package/dist/motion/index.js.map +1 -1
  187. package/dist/motion/motion-provider.d.ts +1 -1
  188. package/dist/motion/motion-provider.d.ts.map +1 -1
  189. package/dist/motion/primitives-index.d.ts +1 -1
  190. package/dist/motion/primitives-index.d.ts.map +1 -1
  191. package/dist/motion/primitives-index.js +40 -40
  192. package/dist/motion/primitives-index.js.map +1 -1
  193. package/dist/motion/primitives.d.ts +1 -1
  194. package/dist/motion/primitives.d.ts.map +1 -1
  195. package/dist/shell/app-command-palette.d.ts +0 -8
  196. package/dist/shell/app-command-palette.d.ts.map +1 -1
  197. package/dist/shell/app-command-palette.js.map +1 -1
  198. package/dist/shell/bottom-navbar.d.ts +0 -6
  199. package/dist/shell/bottom-navbar.d.ts.map +1 -1
  200. package/dist/shell/bottom-navbar.js +62 -62
  201. package/dist/shell/bottom-navbar.js.map +1 -1
  202. package/dist/shell/index.d.ts +8 -8
  203. package/dist/shell/index.d.ts.map +1 -1
  204. package/dist/shell/index.js +5 -5
  205. package/dist/shell/link-context.d.ts +1 -1
  206. package/dist/shell/link-context.d.ts.map +1 -1
  207. package/dist/shell/notification-center.d.ts +0 -6
  208. package/dist/shell/notification-center.d.ts.map +1 -1
  209. package/dist/shell/notification-center.js +54 -54
  210. package/dist/shell/notification-center.js.map +1 -1
  211. package/dist/shell/notification-preferences.d.ts +0 -6
  212. package/dist/shell/notification-preferences.d.ts.map +1 -1
  213. package/dist/shell/notification-preferences.js +22 -22
  214. package/dist/shell/notification-preferences.js.map +1 -1
  215. package/dist/shell/sidebar.d.ts.map +1 -1
  216. package/dist/shell/sidebar.js.map +1 -1
  217. package/dist/shell/top-bar.d.ts +0 -6
  218. package/dist/shell/top-bar.d.ts.map +1 -1
  219. package/dist/shell/top-bar.js.map +1 -1
  220. package/dist/tailwind/index.cjs +15 -499
  221. package/dist/tailwind/preset.d.ts +21 -0
  222. package/dist/tailwind/preset.d.ts.map +1 -1
  223. package/dist/tailwind/preset.js +14 -489
  224. package/dist/tailwind/preset.js.map +1 -1
  225. package/dist/tokens/animations.css +139 -0
  226. package/dist/tokens/base.css +26 -0
  227. package/dist/tokens/index.css +22 -0
  228. package/dist/tokens/primitives.css +2 -0
  229. package/dist/tokens/semantic.css +500 -465
  230. package/dist/tokens/shilp-sutra.css +54 -0
  231. package/dist/tokens/typography-semantic.css +48 -41
  232. package/dist/tokens/utilities.css +328 -0
  233. package/dist/tokens/variants.css +14 -0
  234. package/dist/ui/accordion.d.ts +2 -2
  235. package/dist/ui/accordion.d.ts.map +1 -1
  236. package/dist/ui/accordion.js +23 -23
  237. package/dist/ui/accordion.js.map +1 -1
  238. package/dist/ui/alert-dialog.d.ts +2 -2
  239. package/dist/ui/alert-dialog.d.ts.map +1 -1
  240. package/dist/ui/alert-dialog.js +37 -37
  241. package/dist/ui/alert-dialog.js.map +1 -1
  242. package/dist/ui/alert.d.ts.map +1 -1
  243. package/dist/ui/alert.js +36 -36
  244. package/dist/ui/alert.js.map +1 -1
  245. package/dist/ui/aspect-ratio.d.ts +1 -1
  246. package/dist/ui/aspect-ratio.d.ts.map +1 -1
  247. package/dist/ui/aspect-ratio.js.map +1 -1
  248. package/dist/ui/autocomplete.d.ts +1 -1
  249. package/dist/ui/autocomplete.d.ts.map +1 -1
  250. package/dist/ui/autocomplete.js +27 -27
  251. package/dist/ui/autocomplete.js.map +1 -1
  252. package/dist/ui/avatar.d.ts +2 -2
  253. package/dist/ui/avatar.d.ts.map +1 -1
  254. package/dist/ui/avatar.js +41 -41
  255. package/dist/ui/avatar.js.map +1 -1
  256. package/dist/ui/badge-group.d.ts.map +1 -1
  257. package/dist/ui/badge-indicator.d.ts.map +1 -1
  258. package/dist/ui/badge-indicator.js +10 -10
  259. package/dist/ui/badge-indicator.js.map +1 -1
  260. package/dist/ui/badge.d.ts +2 -2
  261. package/dist/ui/badge.d.ts.map +1 -1
  262. package/dist/ui/banner.d.ts.map +1 -1
  263. package/dist/ui/banner.js +28 -28
  264. package/dist/ui/banner.js.map +1 -1
  265. package/dist/ui/breadcrumb.d.ts +1 -1
  266. package/dist/ui/breadcrumb.d.ts.map +1 -1
  267. package/dist/ui/breadcrumb.js.map +1 -1
  268. package/dist/ui/button-group.d.ts.map +1 -1
  269. package/dist/ui/button-group.js.map +1 -1
  270. package/dist/ui/button-processing.d.ts.map +1 -1
  271. package/dist/ui/button-processing.js +15 -15
  272. package/dist/ui/button-processing.js.map +1 -1
  273. package/dist/ui/button.d.ts.map +1 -1
  274. package/dist/ui/button.js +84 -84
  275. package/dist/ui/button.js.map +1 -1
  276. package/dist/ui/card.d.ts +1 -1
  277. package/dist/ui/card.d.ts.map +1 -1
  278. package/dist/ui/card.js +28 -28
  279. package/dist/ui/card.js.map +1 -1
  280. package/dist/ui/charts/_internal/axes.d.ts +1 -1
  281. package/dist/ui/charts/_internal/axes.d.ts.map +1 -1
  282. package/dist/ui/charts/_internal/grid-lines.d.ts.map +1 -1
  283. package/dist/ui/charts/_internal/legend.d.ts.map +1 -1
  284. package/dist/ui/charts/_internal/tooltip.d.ts +1 -1
  285. package/dist/ui/charts/_internal/tooltip.d.ts.map +1 -1
  286. package/dist/ui/charts/area-chart.d.ts.map +1 -1
  287. package/dist/ui/charts/bar-chart.d.ts +1 -1
  288. package/dist/ui/charts/bar-chart.d.ts.map +1 -1
  289. package/dist/ui/charts/chart-container.d.ts.map +1 -1
  290. package/dist/ui/charts/gauge-chart.d.ts.map +1 -1
  291. package/dist/ui/charts/index.d.ts +5 -5
  292. package/dist/ui/charts/index.d.ts.map +1 -1
  293. package/dist/ui/charts/index.js +616 -616
  294. package/dist/ui/charts/index.js.map +1 -1
  295. package/dist/ui/charts/line-chart.d.ts.map +1 -1
  296. package/dist/ui/charts/pie-chart.d.ts.map +1 -1
  297. package/dist/ui/charts/radar-chart.d.ts.map +1 -1
  298. package/dist/ui/charts/sparkline.d.ts.map +1 -1
  299. package/dist/ui/chat/date-separator.d.ts.map +1 -1
  300. package/dist/ui/chat/index.d.ts +4 -4
  301. package/dist/ui/chat/index.d.ts.map +1 -1
  302. package/dist/ui/chat/index.js +1 -1
  303. package/dist/ui/chat/message-input.d.ts.map +1 -1
  304. package/dist/ui/chat/message-list.d.ts.map +1 -1
  305. package/dist/ui/chat/message.d.ts +1 -1
  306. package/dist/ui/chat/message.d.ts.map +1 -1
  307. package/dist/ui/chat/system-message.d.ts.map +1 -1
  308. package/dist/ui/chat/typing-indicator.d.ts.map +1 -1
  309. package/dist/ui/chat/unread-separator.d.ts.map +1 -1
  310. package/dist/ui/checkbox.d.ts.map +1 -1
  311. package/dist/ui/checkbox.js +18 -18
  312. package/dist/ui/checkbox.js.map +1 -1
  313. package/dist/ui/code.d.ts.map +1 -1
  314. package/dist/ui/code.js.map +1 -1
  315. package/dist/ui/collapsible.d.ts +2 -2
  316. package/dist/ui/collapsible.d.ts.map +1 -1
  317. package/dist/ui/collapsible.js +10 -10
  318. package/dist/ui/collapsible.js.map +1 -1
  319. package/dist/ui/color-input.d.ts.map +1 -1
  320. package/dist/ui/color-input.js +85 -85
  321. package/dist/ui/color-input.js.map +1 -1
  322. package/dist/ui/color-swatch.d.ts.map +1 -1
  323. package/dist/ui/color-swatch.js.map +1 -1
  324. package/dist/ui/combobox.d.ts.map +1 -1
  325. package/dist/ui/combobox.js +58 -58
  326. package/dist/ui/combobox.js.map +1 -1
  327. package/dist/ui/container.d.ts.map +1 -1
  328. package/dist/ui/container.js.map +1 -1
  329. package/dist/ui/context-menu.d.ts +2 -2
  330. package/dist/ui/context-menu.d.ts.map +1 -1
  331. package/dist/ui/context-menu.js +47 -47
  332. package/dist/ui/context-menu.js.map +1 -1
  333. package/dist/ui/data-table-body.d.ts +1 -1
  334. package/dist/ui/data-table-body.d.ts.map +1 -1
  335. package/dist/ui/data-table-body.js +43 -43
  336. package/dist/ui/data-table-body.js.map +1 -1
  337. package/dist/ui/data-table-bulk-actions.js.map +1 -1
  338. package/dist/ui/data-table-card.d.ts.map +1 -1
  339. package/dist/ui/data-table-card.js +7 -7
  340. package/dist/ui/data-table-card.js.map +1 -1
  341. package/dist/ui/data-table-context.d.ts +1 -1
  342. package/dist/ui/data-table-context.d.ts.map +1 -1
  343. package/dist/ui/data-table-context.js.map +1 -1
  344. package/dist/ui/data-table-header.js +38 -38
  345. package/dist/ui/data-table-header.js.map +1 -1
  346. package/dist/ui/data-table-pagination.js.map +1 -1
  347. package/dist/ui/data-table-toolbar.d.ts.map +1 -1
  348. package/dist/ui/data-table-toolbar.js.map +1 -1
  349. package/dist/ui/data-table.d.ts +2 -2
  350. package/dist/ui/data-table.d.ts.map +1 -1
  351. package/dist/ui/data-table.js +5 -5
  352. package/dist/ui/data-table.js.map +1 -1
  353. package/dist/ui/devalok-grain.js +8 -8
  354. package/dist/ui/devalok-grain.js.map +1 -1
  355. package/dist/ui/dialog.d.ts +2 -2
  356. package/dist/ui/dialog.d.ts.map +1 -1
  357. package/dist/ui/dialog.js +41 -41
  358. package/dist/ui/dialog.js.map +1 -1
  359. package/dist/ui/dropdown-menu.d.ts +2 -2
  360. package/dist/ui/dropdown-menu.d.ts.map +1 -1
  361. package/dist/ui/dropdown-menu.js +46 -46
  362. package/dist/ui/dropdown-menu.js.map +1 -1
  363. package/dist/ui/file-upload.d.ts.map +1 -1
  364. package/dist/ui/file-upload.js +54 -54
  365. package/dist/ui/file-upload.js.map +1 -1
  366. package/dist/ui/form.d.ts.map +1 -1
  367. package/dist/ui/form.js +17 -17
  368. package/dist/ui/form.js.map +1 -1
  369. package/dist/ui/hover-card.d.ts +2 -2
  370. package/dist/ui/hover-card.d.ts.map +1 -1
  371. package/dist/ui/hover-card.js +19 -19
  372. package/dist/ui/hover-card.js.map +1 -1
  373. package/dist/ui/icon-button.d.ts.map +1 -1
  374. package/dist/ui/icon-button.js.map +1 -1
  375. package/dist/ui/icon-group.d.ts.map +1 -1
  376. package/dist/ui/icon-group.js +4 -4
  377. package/dist/ui/icon-group.js.map +1 -1
  378. package/dist/ui/icon.d.ts.map +1 -1
  379. package/dist/ui/icon.js +32 -32
  380. package/dist/ui/icon.js.map +1 -1
  381. package/dist/ui/index.d.ts +57 -57
  382. package/dist/ui/index.d.ts.map +1 -1
  383. package/dist/ui/index.js +27 -27
  384. package/dist/ui/index.js.map +1 -1
  385. package/dist/ui/input-otp.d.ts +1 -1
  386. package/dist/ui/input-otp.d.ts.map +1 -1
  387. package/dist/ui/input-otp.js.map +1 -1
  388. package/dist/ui/input.d.ts.map +1 -1
  389. package/dist/ui/input.js +14 -14
  390. package/dist/ui/input.js.map +1 -1
  391. package/dist/ui/label.d.ts +1 -1
  392. package/dist/ui/label.d.ts.map +1 -1
  393. package/dist/ui/label.js.map +1 -1
  394. package/dist/ui/lib/bottom-sheet.d.ts.map +1 -1
  395. package/dist/ui/lib/index.d.ts +4 -4
  396. package/dist/ui/lib/index.d.ts.map +1 -1
  397. package/dist/ui/lib/slot.d.ts +1 -1
  398. package/dist/ui/lib/slot.d.ts.map +1 -1
  399. package/dist/ui/lib/utils.d.ts.map +1 -1
  400. package/dist/ui/lib/utils.js.map +1 -1
  401. package/dist/ui/link.d.ts.map +1 -1
  402. package/dist/ui/link.js.map +1 -1
  403. package/dist/ui/menubar.d.ts +2 -2
  404. package/dist/ui/menubar.d.ts.map +1 -1
  405. package/dist/ui/menubar.js +64 -64
  406. package/dist/ui/menubar.js.map +1 -1
  407. package/dist/ui/navigation-menu.d.ts +2 -2
  408. package/dist/ui/navigation-menu.d.ts.map +1 -1
  409. package/dist/ui/navigation-menu.js +72 -72
  410. package/dist/ui/navigation-menu.js.map +1 -1
  411. package/dist/ui/number-input.d.ts.map +1 -1
  412. package/dist/ui/number-input.js.map +1 -1
  413. package/dist/ui/pagination.d.ts +1 -1
  414. package/dist/ui/pagination.d.ts.map +1 -1
  415. package/dist/ui/pagination.js.map +1 -1
  416. package/dist/ui/popover.d.ts +2 -2
  417. package/dist/ui/popover.d.ts.map +1 -1
  418. package/dist/ui/progress-ring.d.ts +1 -1
  419. package/dist/ui/progress-ring.d.ts.map +1 -1
  420. package/dist/ui/progress-ring.js +33 -33
  421. package/dist/ui/progress-ring.js.map +1 -1
  422. package/dist/ui/progress.d.ts +2 -2
  423. package/dist/ui/progress.d.ts.map +1 -1
  424. package/dist/ui/progress.js +23 -23
  425. package/dist/ui/progress.js.map +1 -1
  426. package/dist/ui/radio.d.ts.map +1 -1
  427. package/dist/ui/radio.js +19 -19
  428. package/dist/ui/radio.js.map +1 -1
  429. package/dist/ui/search-input.d.ts.map +1 -1
  430. package/dist/ui/search-input.js +17 -17
  431. package/dist/ui/search-input.js.map +1 -1
  432. package/dist/ui/segmented-control.d.ts.map +1 -1
  433. package/dist/ui/segmented-control.js +18 -18
  434. package/dist/ui/segmented-control.js.map +1 -1
  435. package/dist/ui/select.d.ts +2 -2
  436. package/dist/ui/select.d.ts.map +1 -1
  437. package/dist/ui/select.js +68 -68
  438. package/dist/ui/select.js.map +1 -1
  439. package/dist/ui/separator.d.ts +1 -1
  440. package/dist/ui/separator.d.ts.map +1 -1
  441. package/dist/ui/separator.js.map +1 -1
  442. package/dist/ui/sheet.d.ts +2 -2
  443. package/dist/ui/sheet.d.ts.map +1 -1
  444. package/dist/ui/sheet.js +44 -44
  445. package/dist/ui/sheet.js.map +1 -1
  446. package/dist/ui/sidebar.d.ts +1 -1
  447. package/dist/ui/sidebar.d.ts.map +1 -1
  448. package/dist/ui/sidebar.js +155 -155
  449. package/dist/ui/sidebar.js.map +1 -1
  450. package/dist/ui/skeleton.d.ts +1 -1
  451. package/dist/ui/skeleton.d.ts.map +1 -1
  452. package/dist/ui/skeleton.js +2 -2
  453. package/dist/ui/skeleton.js.map +1 -1
  454. package/dist/ui/slider.d.ts +2 -2
  455. package/dist/ui/slider.d.ts.map +1 -1
  456. package/dist/ui/slider.js +5 -5
  457. package/dist/ui/slider.js.map +1 -1
  458. package/dist/ui/spinner.d.ts.map +1 -1
  459. package/dist/ui/spinner.js +21 -21
  460. package/dist/ui/spinner.js.map +1 -1
  461. package/dist/ui/split-button.d.ts +1 -1
  462. package/dist/ui/split-button.d.ts.map +1 -1
  463. package/dist/ui/split-button.js +28 -28
  464. package/dist/ui/split-button.js.map +1 -1
  465. package/dist/ui/stack.d.ts +1 -1
  466. package/dist/ui/stack.d.ts.map +1 -1
  467. package/dist/ui/stack.js.map +1 -1
  468. package/dist/ui/stat-card.d.ts.map +1 -1
  469. package/dist/ui/stat-card.js +73 -73
  470. package/dist/ui/stat-card.js.map +1 -1
  471. package/dist/ui/status-dot.d.ts.map +1 -1
  472. package/dist/ui/status-dot.js.map +1 -1
  473. package/dist/ui/stepper.d.ts +1 -1
  474. package/dist/ui/stepper.d.ts.map +1 -1
  475. package/dist/ui/stepper.js +48 -48
  476. package/dist/ui/stepper.js.map +1 -1
  477. package/dist/ui/switch.d.ts +1 -1
  478. package/dist/ui/switch.d.ts.map +1 -1
  479. package/dist/ui/switch.js +15 -15
  480. package/dist/ui/switch.js.map +1 -1
  481. package/dist/ui/table.d.ts +1 -1
  482. package/dist/ui/table.d.ts.map +1 -1
  483. package/dist/ui/table.js.map +1 -1
  484. package/dist/ui/tabs.d.ts +2 -2
  485. package/dist/ui/tabs.d.ts.map +1 -1
  486. package/dist/ui/tabs.js +52 -52
  487. package/dist/ui/tabs.js.map +1 -1
  488. package/dist/ui/text.d.ts +1 -1
  489. package/dist/ui/text.d.ts.map +1 -1
  490. package/dist/ui/text.js.map +1 -1
  491. package/dist/ui/textarea.d.ts.map +1 -1
  492. package/dist/ui/textarea.js +13 -13
  493. package/dist/ui/textarea.js.map +1 -1
  494. package/dist/ui/toast-registry.js.map +1 -1
  495. package/dist/ui/toast.d.ts +3 -3
  496. package/dist/ui/toast.d.ts.map +1 -1
  497. package/dist/ui/toast.js +164 -164
  498. package/dist/ui/toast.js.map +1 -1
  499. package/dist/ui/toaster.d.ts.map +1 -1
  500. package/dist/ui/toaster.js +6 -6
  501. package/dist/ui/toaster.js.map +1 -1
  502. package/dist/ui/toggle-group.d.ts +1 -1
  503. package/dist/ui/toggle-group.d.ts.map +1 -1
  504. package/dist/ui/toggle-group.js.map +1 -1
  505. package/dist/ui/toggle.d.ts +1 -1
  506. package/dist/ui/toggle.d.ts.map +1 -1
  507. package/dist/ui/toggle.js +14 -14
  508. package/dist/ui/toggle.js.map +1 -1
  509. package/dist/ui/tooltip.d.ts +2 -2
  510. package/dist/ui/tooltip.d.ts.map +1 -1
  511. package/dist/ui/tooltip.js +26 -26
  512. package/dist/ui/tooltip.js.map +1 -1
  513. package/dist/ui/tree-view/index.d.ts +2 -2
  514. package/dist/ui/tree-view/index.d.ts.map +1 -1
  515. package/dist/ui/tree-view/index.js +1 -1
  516. package/dist/ui/tree-view/tree-view.d.ts +1 -1
  517. package/dist/ui/tree-view/tree-view.d.ts.map +1 -1
  518. package/dist/ui/visually-hidden.d.ts.map +1 -1
  519. package/dist/ui/visually-hidden.js.map +1 -1
  520. package/docs/components/_header.md +96 -0
  521. package/docs/rollback.md +179 -0
  522. package/llms-full.txt +97 -1
  523. package/llms.txt +24 -2
  524. package/package.json +302 -277
  525. package/dist/_chunks/framer.js +0 -5604
  526. package/dist/_chunks/framer.js.map +0 -1
  527. package/dist/_chunks/rolldown-runtime.js +0 -21
  528. package/dist/_chunks/sonner.js +0 -616
  529. package/dist/_chunks/sonner.js.map +0 -1
  530. package/dist/_chunks/stat-row.js +0 -432
  531. package/dist/_chunks/stat-row.js.map +0 -1
@@ -1,337 +1,475 @@
1
+ /* ═══════════════════════════════════════════════════════════════════
2
+ SEMANTIC TOKENS (TW4 native)
3
+
4
+ This file expresses the design system's PUBLIC token surface as
5
+ Tailwind 4 `@theme` variables. Every `@theme` variable below maps
6
+ to an auto-generated utility class:
7
+
8
+ --color-accent-9 → bg-accent-9, text-accent-9, border-accent-9, ...
9
+ --spacing-ds-03 → p-ds-03, m-ds-03, gap-ds-03, w-ds-03, ...
10
+ --text-ds-md → text-ds-md
11
+ --leading-ds-relaxed → leading-ds-relaxed
12
+ --radius-ds-md → rounded-ds-md
13
+ --shadow-raised → shadow-raised
14
+ --ease-productive-standard → ease-productive-standard
15
+ --breakpoint-md → md:* variant
16
+ --animate-skeleton-shimmer → animate-skeleton-shimmer
17
+
18
+ Declared in @theme but utilities generated by explicit @utility blocks
19
+ in tokens/utilities.css (TW4 has no auto-namespace for these):
20
+ --z-popover → z-popover (via @utility)
21
+ --duration-moderate-01 → duration-moderate-01 (via @utility)
22
+
23
+ INTERNAL tokens (not utility-generating) stay in plain `:root { }`:
24
+ - --action-*-opacity (consumed by `opacity-action-*` via preset — moving
25
+ these to theme would pollute the `opacity-*` namespace)
26
+ - --shadow-color, --shadow-strength, --shadow-xs/sm/md/lg internals
27
+ - --size-*, --icon-*, --border-width-*, --border-focus-*
28
+ - --max-width*, --shadow-transition, --shadow-kbd
29
+ - --chart-* (consumed via var() in chart components, not utility)
30
+ - --gradient-brand-* (consumed via var() in DevalokGrain)
31
+ - --color-inset-glow*, --color-text-shadow, --color-overlay*
32
+ (consumed via var() in internal effect layers)
33
+
34
+ The `.dark { }` block below overrides theme variables for dark mode.
35
+ TW4 supports this cascade: an `@theme` variable re-declared under a
36
+ scoped selector is honored at runtime.
37
+ ═══════════════════════════════════════════════════════════════════ */
38
+
1
39
  :root {
2
40
  color-scheme: light;
41
+ }
3
42
 
4
- /* ═══════════════════════════════════════════════════════════
5
- TYPOGRAPHY
6
- ═══════════════════════════════════════════════════════════ */
43
+ /* ═══════════════════════════════════════════════════════════════════
44
+ PUBLIC TOKENS (utility-generating)
45
+ ═══════════════════════════════════════════════════════════════════ */
46
+ @theme {
47
+ /* ───────────────────────────────────────────────────────────
48
+ TYPOGRAPHY — font families, weights, sizes, leading, tracking
49
+ ─────────────────────────────────────────────────────────── */
7
50
 
8
- /* Font families — override these with next/font CSS variables */
51
+ /* Font families — consumers override with next/font CSS variables.
52
+ TW4 namespace: --font-* → font-* utility */
9
53
  --font-sans: "Inter", system-ui, sans-serif;
10
54
  --font-display: "Inter", system-ui, sans-serif;
11
55
  --font-body: "Inter", system-ui, sans-serif;
12
56
  --font-accent: Ranade, sans-serif;
13
57
  --font-mono: "SF Mono", "Fira Code", monospace;
14
58
 
15
- /* ── Font Weights ──────────────────────────── */
59
+ /* Font weights TW4 namespace: --font-weight-* → font-* (semibold, bold, etc.) */
16
60
  --font-weight-light: 300;
17
61
  --font-weight-regular: 400;
18
62
  --font-weight-medium: 500;
19
63
  --font-weight-semibold: 600;
20
64
  --font-weight-bold: 700;
21
65
 
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
- /* ═══════════════════════════════════════════════════════════
66
+ /* Type scale (rem). Base: 16px = 1rem.
67
+ TW4 namespace: --text-* text-* utility.
68
+ We use the `ds-` prefix to avoid collision with consumer's own
69
+ text sizes (TW4 default supplies text-xs, text-sm, etc.). */
70
+ --text-ds-xs: 0.625rem; /* 10px */
71
+ --text-ds-sm: 0.75rem; /* 12px */
72
+ --text-ds-md: 0.875rem; /* 14px */
73
+ --text-ds-base: 1rem; /* 16px */
74
+ --text-ds-lg: 1.125rem; /* 18px */
75
+ --text-ds-xl: 1.25rem; /* 20px */
76
+ --text-ds-2xl: 1.5rem; /* 24px */
77
+ --text-ds-3xl: clamp(1.5rem, 1.125rem + 1.25vw, 2rem); /* 24→32 fluid */
78
+ --text-ds-4xl: clamp(1.75rem, 1.25rem + 1.5vw, 2.25rem); /* 28→36 fluid */
79
+ --text-ds-5xl: clamp(2rem, 1.25rem + 2.5vw, 3rem); /* 32→48 fluid */
80
+ --text-ds-6xl: clamp(2.25rem, 1.5rem + 3vw, 3.75rem); /* 36→60 fluid */
81
+
82
+ /* Line heights — TW4 namespace: --leading-* leading-* utility.
83
+ `ds-` prefix to namespace our scale, not collide with TW4 defaults. */
84
+ --leading-ds-none: 1;
85
+ --leading-ds-tight: 1.15;
86
+ --leading-ds-snug: 1.25;
87
+ --leading-ds-normal: 1.4;
88
+ --leading-ds-relaxed: 1.5;
89
+ --leading-ds-loose: 1.6;
90
+
91
+ /* Letter spacing TW4 namespace: --tracking-* → tracking-* utility.
92
+ `ds-` prefix preserves TW4 defaults (tracking-tight, tracking-wide, etc.) */
93
+ --tracking-ds-tighter: -0.05em;
94
+ --tracking-ds-tight: -0.025em;
95
+ --tracking-ds-normal: 0;
96
+ --tracking-ds-wide: 0.025em;
97
+ --tracking-ds-wider: 0.05em;
98
+ --tracking-ds-widest: 0.1em;
99
+
100
+ /* ───────────────────────────────────────────────────────────
64
101
  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);
102
+ ─────────────────────────────────────────────────────────── */
103
+ --color-accent-1: var(--pink-1);
104
+ --color-accent-2: var(--pink-2);
105
+ --color-accent-3: var(--pink-3);
106
+ --color-accent-4: var(--pink-4);
107
+ --color-accent-5: var(--pink-5);
108
+ --color-accent-6: var(--pink-6);
109
+ --color-accent-7: var(--pink-7);
110
+ --color-accent-8: var(--pink-8);
111
+ --color-accent-9: var(--pink-9);
75
112
  --color-accent-10: var(--pink-10);
76
113
  --color-accent-11: var(--pink-11);
77
114
  --color-accent-12: var(--pink-12);
78
115
  --color-accent-fg: var(--neutral-1);
79
116
 
80
- /* ═══════════════════════════════════════════════════════════
117
+ /* ───────────────────────────────────────────────────────────
81
118
  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);
119
+ ─────────────────────────────────────────────────────────── */
120
+ --color-secondary-1: var(--purple-1);
121
+ --color-secondary-2: var(--purple-2);
122
+ --color-secondary-3: var(--purple-3);
123
+ --color-secondary-4: var(--purple-4);
124
+ --color-secondary-5: var(--purple-5);
125
+ --color-secondary-6: var(--purple-6);
126
+ --color-secondary-7: var(--purple-7);
127
+ --color-secondary-8: var(--purple-8);
128
+ --color-secondary-9: var(--purple-9);
92
129
  --color-secondary-10: var(--purple-10);
93
130
  --color-secondary-11: var(--purple-11);
94
131
  --color-secondary-12: var(--purple-12);
95
132
  --color-secondary-fg: var(--neutral-1);
96
133
 
97
- /* ═══════════════════════════════════════════════════════════
134
+ /* ───────────────────────────────────────────────────────────
135
+ NEUTRAL (primitive → @theme alias)
136
+ Bridges `:root`-declared `--neutral-*` primitives into the
137
+ TW4 `--color-*` namespace so `bg-neutral-5`, `border-neutral-7`,
138
+ `text-neutral-11`, etc. actually emit utilities. Without this,
139
+ every CVA referencing bg-neutral-* silently renders unstyled.
140
+ ─────────────────────────────────────────────────────────── */
141
+ --color-neutral-1: var(--neutral-1);
142
+ --color-neutral-2: var(--neutral-2);
143
+ --color-neutral-3: var(--neutral-3);
144
+ --color-neutral-4: var(--neutral-4);
145
+ --color-neutral-5: var(--neutral-5);
146
+ --color-neutral-6: var(--neutral-6);
147
+ --color-neutral-7: var(--neutral-7);
148
+ --color-neutral-8: var(--neutral-8);
149
+ --color-neutral-9: var(--neutral-9);
150
+ --color-neutral-10: var(--neutral-10);
151
+ --color-neutral-11: var(--neutral-11);
152
+ --color-neutral-12: var(--neutral-12);
153
+
154
+ /* ───────────────────────────────────────────────────────────
98
155
  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);
156
+ ─────────────────────────────────────────────────────────── */
157
+ /* Numeric layering aliases — canonical per CLAUDE.md surface rule.
158
+ Consumers and stories use bg-surface-1..4; without these @theme
159
+ entries TW4 emits zero rules for them. */
160
+ --color-surface-1: var(--neutral-1);
161
+ --color-surface-2: var(--neutral-2);
162
+ --color-surface-3: var(--neutral-3);
163
+ --color-surface-4: var(--neutral-4);
164
+
165
+ --color-surface-base: var(--neutral-2);
166
+ --color-surface-sunken: var(--color-surface-0);
167
+ --color-surface-raised: var(--neutral-1);
168
+ --color-surface-overlay: var(--neutral-1);
169
+ --color-surface-raised-hover: var(--neutral-3);
106
170
  --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
- /* ═══════════════════════════════════════════════════════════
171
+ --color-surface-inverted: var(--neutral-12);
172
+ --color-surface-inverted-fg: var(--neutral-1);
173
+ --color-surface-disabled: var(--neutral-2);
174
+ --color-surface-fg-disabled: var(--neutral-8);
175
+ --color-surface-fg: var(--neutral-12);
176
+ --color-surface-fg-muted: var(--neutral-11);
177
+ --color-surface-fg-subtle: var(--neutral-9); /* darkened for WCAG AA 4.5:1 */
178
+ --color-surface-border: var(--neutral-6); /* bumped for WCAG 1.4.11 */
179
+ --color-surface-border-strong: var(--neutral-7);
180
+ --color-surface-border-subtle: var(--neutral-5);
181
+ --color-backdrop: oklch(0 0 0 / 0.4);
182
+
183
+ /* Overlay + disabled — promoted from internal :root into @theme so
184
+ `bg-overlay`, `text-overlay`, `bg-disabled`, `text-disabled` emit. */
185
+ --color-overlay: oklch(0 0 0 / 0.50);
186
+ --color-disabled: var(--neutral-5);
187
+
188
+ /* ───────────────────────────────────────────────────────────
121
189
  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);
190
+ Full step subset: 2, 3, 4, 5, 6, 7, 9, 10, 11.
191
+ Step 6 added in 0.37.0-next.1 (missed in original migration)
192
+ — SplitButton soft variants and status-dot muted tones use it.
193
+ ─────────────────────────────────────────────────────────── */
194
+ --color-error-2: var(--red-2);
195
+ --color-error-3: var(--red-3);
196
+ --color-error-4: var(--red-4);
197
+ --color-error-5: var(--red-5);
198
+ --color-error-6: var(--red-6);
199
+ --color-error-7: var(--red-7);
200
+ --color-error-9: var(--red-9);
129
201
  --color-error-10: var(--red-10);
130
202
  --color-error-11: var(--red-11);
131
203
  --color-error-fg: var(--neutral-1);
132
204
 
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);
205
+ /* ─── Status — Success ─── */
206
+ --color-success-2: var(--green-2);
207
+ --color-success-3: var(--green-3);
208
+ --color-success-4: var(--green-4);
209
+ --color-success-5: var(--green-5);
210
+ --color-success-6: var(--green-6);
211
+ --color-success-7: var(--green-7);
212
+ --color-success-9: var(--green-9);
140
213
  --color-success-10: var(--green-10);
141
214
  --color-success-11: var(--green-11);
142
215
  --color-success-fg: var(--neutral-1);
143
216
 
144
- /* ═══ Status — Warning (amber-bright lightness-corrected) ═══ */
217
+ /* ─── Status — Warning (amber-bright, lightness-corrected) ─── */
145
218
  --color-warning-2: var(--amber-bright-2);
146
219
  --color-warning-3: var(--amber-bright-3);
147
220
  --color-warning-4: var(--amber-bright-4);
148
221
  --color-warning-5: var(--amber-bright-5);
222
+ --color-warning-6: var(--amber-bright-6);
149
223
  --color-warning-7: var(--amber-bright-7);
150
224
  --color-warning-9: var(--amber-bright-9);
151
225
  --color-warning-10: var(--amber-bright-10);
152
226
  --color-warning-11: var(--amber-bright-11);
153
227
  --color-warning-fg: oklch(0.25 0.01 55);
154
228
 
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);
229
+ /* ─── Status — Info ─── */
230
+ --color-info-2: var(--blue-2);
231
+ --color-info-3: var(--blue-3);
232
+ --color-info-4: var(--blue-4);
233
+ --color-info-5: var(--blue-5);
234
+ --color-info-6: var(--blue-6);
235
+ --color-info-7: var(--blue-7);
236
+ --color-info-9: var(--blue-9);
162
237
  --color-info-10: var(--blue-10);
163
238
  --color-info-11: var(--blue-11);
164
239
  --color-info-fg: var(--neutral-1);
165
240
 
166
- /* ═══════════════════════════════════════════════════════════
241
+ /* ───────────────────────────────────────────────────────────
167
242
  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 */
243
+ ─────────────────────────────────────────────────────────── */
244
+ --color-link: var(--color-accent-11);
245
+ --color-link-hover: var(--color-accent-12);
246
+ --color-link-visited: var(--purple-11);
172
247
 
173
- /* ═══════════════════════════════════════════════════════════
248
+ /* ───────────────────────────────────────────────────────────
174
249
  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);
250
+ ─────────────────────────────────────────────────────────── */
251
+ --color-category-teal-3: var(--teal-3);
252
+ --color-category-teal-7: var(--teal-7);
253
+ --color-category-teal-9: var(--teal-9);
254
+ --color-category-teal-11: var(--teal-11);
255
+
256
+ --color-category-amber-3: var(--amber-3);
257
+ --color-category-amber-7: var(--amber-7);
258
+ --color-category-amber-9: var(--amber-9);
259
+ --color-category-amber-11: var(--amber-11);
260
+
261
+ --color-category-slate-3: var(--slate-3);
262
+ --color-category-slate-7: var(--slate-7);
263
+ --color-category-slate-9: var(--slate-9);
264
+ --color-category-slate-11: var(--slate-11);
265
+
266
+ --color-category-indigo-3: var(--indigo-3);
267
+ --color-category-indigo-7: var(--indigo-7);
268
+ --color-category-indigo-9: var(--indigo-9);
269
+ --color-category-indigo-11: var(--indigo-11);
270
+
271
+ --color-category-cyan-3: var(--cyan-3);
272
+ --color-category-cyan-7: var(--cyan-7);
273
+ --color-category-cyan-9: var(--cyan-9);
274
+ --color-category-cyan-11: var(--cyan-11);
275
+
276
+ --color-category-orange-3: var(--orange-3);
277
+ --color-category-orange-7: var(--orange-7);
278
+ --color-category-orange-9: var(--orange-9);
279
+ --color-category-orange-11: var(--orange-11);
280
+
281
+ --color-category-emerald-3: var(--emerald-3);
282
+ --color-category-emerald-7: var(--emerald-7);
283
+ --color-category-emerald-9: var(--emerald-9);
209
284
  --color-category-emerald-11: var(--emerald-11);
210
285
 
211
- /* ═══════════════════════════════════════════════════════════
286
+ /* ───────────────────────────────────────────────────────────
212
287
  SKELETON
213
- ═══════════════════════════════════════════════════════════ */
214
- --color-skeleton-base: var(--neutral-3);
288
+ ─────────────────────────────────────────────────────────── */
289
+ --color-skeleton-base: var(--neutral-3);
215
290
  --color-skeleton-shimmer: var(--neutral-2);
216
291
 
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
- /* ═══════════════════════════════════════════════════════════
292
+ /* ───────────────────────────────────────────────────────────
293
+ SPACING numeric scale
294
+ Generates p-ds-* / m-ds-* / gap-ds-* / w-ds-* / h-ds-* / etc.
295
+ ─────────────────────────────────────────────────────────── */
296
+ --spacing-ds-01: 2px;
297
+ --spacing-ds-02: 4px;
298
+ --spacing-ds-02b: 6px;
299
+ --spacing-ds-03: 8px;
300
+ --spacing-ds-04: 12px;
301
+ --spacing-ds-05: 16px;
302
+ --spacing-ds-05b: 20px;
303
+ --spacing-ds-06: 24px;
304
+ --spacing-ds-06b: 28px;
305
+ --spacing-ds-07: 32px;
306
+ --spacing-ds-08: 40px;
307
+ --spacing-ds-09: 48px;
308
+ --spacing-ds-10: 64px;
309
+ --spacing-ds-11: 80px;
310
+ --spacing-ds-12: 96px;
311
+ --spacing-ds-13: 160px;
312
+
313
+ /* Named component sizes — drive w-ds-{xs|sm|md|lg|xl}, h-ds-*, min-w-ds-*, min-h-ds-*.
314
+ These are the heights of Avatar, Button, Input, IconButton, etc.
315
+ In TW4, spacing-namespaced tokens ALSO emit w-/h-/min-w/min-h/max-* utilities,
316
+ so one `--spacing-ds-<name>` entry covers all sizing utilities. */
317
+ --spacing-ds-xs: 24px;
318
+ --spacing-ds-xs-plus: 28px;
319
+ --spacing-ds-sm: 32px;
320
+ --spacing-ds-sm-plus: 36px;
321
+ --spacing-ds-md: 40px;
322
+ --spacing-ds-lg: 48px;
323
+ --spacing-ds-xl: 56px;
324
+
325
+ /* Icon sizes — drive w-ico-{sm|md|lg|xl}, h-ico-*. Same spacing-namespace
326
+ rule applies: one var emits both w- and h- utilities. */
327
+ --spacing-ico-sm: 16px;
328
+ --spacing-ico-md: 20px;
329
+ --spacing-ico-lg: 24px;
330
+ --spacing-ico-xl: 32px;
331
+
332
+ /* Layout spacing (responsive via @media in :root below).
333
+ Generates p-page-x, p-page-y, gap-section-gap, gap-card-gap, gap-stack-gap. */
334
+ --spacing-page-x: var(--spacing-ds-05);
335
+ --spacing-page-y: var(--spacing-ds-07);
336
+ --spacing-section-gap: var(--spacing-ds-08);
337
+ --spacing-card-gap: var(--spacing-ds-05);
338
+ --spacing-stack-gap: var(--spacing-ds-06);
339
+
340
+ /* ───────────────────────────────────────────────────────────
263
341
  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) ── */
342
+ ─────────────────────────────────────────────────────────── */
343
+ --radius: 4px; /* bare `rounded` class — TW4 default namespace */
344
+ --radius-ds-none: 0;
345
+ --radius-ds-sm: 2px;
346
+ --radius-ds-md: 6px;
347
+ --radius-ds-lg: 10px;
348
+ --radius-ds-xl: 16px;
349
+ --radius-ds-2xl: 24px;
350
+ --radius-ds-full: 9999px;
351
+
352
+ /* ───────────────────────────────────────────────────────────
353
+ DURATION (Carbon-inspired scale)
354
+ ─────────────────────────────────────────────────────────── */
355
+ --duration-instant: 0ms;
356
+ --duration-fast-01: 70ms;
357
+ --duration-fast-02: 110ms;
358
+ --duration-moderate-01: 150ms;
359
+ --duration-moderate-01b: 200ms;
360
+ --duration-moderate-02: 240ms;
361
+ --duration-slow-01: 400ms;
362
+ --duration-slow-02: 700ms;
363
+
364
+ /* ───────────────────────────────────────────────────────────
365
+ EASING
366
+ ─────────────────────────────────────────────────────────── */
367
+ /* Productive (task-focused, utilitarian) */
289
368
  --ease-productive-standard: cubic-bezier(0.2, 0, 0.38, 0.9);
290
369
  --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) ── */
370
+ --ease-productive-exit: cubic-bezier(0.2, 0, 1, 0.9);
371
+ /* Expressive (attention-grabbing, dramatic) */
294
372
  --ease-expressive-standard: cubic-bezier(0.4, 0.14, 0.3, 1);
295
373
  --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 ── */
374
+ --ease-expressive-exit: cubic-bezier(0.4, 0.14, 1, 1);
375
+ /* Utility */
299
376
  --ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
300
377
  --ease-linear: linear;
301
378
 
302
- /* ═══════════════════════════════════════════════════════════
303
- SHADOWS
304
- ═══════════════════════════════════════════════════════════ */
379
+ /* ───────────────────────────────────────────────────────────
380
+ SHADOW (semantic elevation — public API)
381
+ ─────────────────────────────────────────────────────────── */
382
+ --shadow-raised: var(--shadow-xs-internal);
383
+ --shadow-raised-hover: var(--shadow-sm-internal);
384
+ --shadow-floating: var(--shadow-md-internal);
385
+ --shadow-overlay: var(--shadow-lg-internal);
305
386
 
306
- /* Shadow color: cool blue tint for natural depth */
307
- --shadow-color: 0.15 0.015 260;
308
- --shadow-strength: 1;
387
+ /* Effect shadows */
388
+ --shadow-brand: 0 2px 8px oklch(0.55 0.19 360 / 0.20), 0 6px 20px oklch(0.55 0.19 360 / 0.15);
389
+ --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);
390
+ --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)));
391
+ --shadow-ring-sm: 0 0 0 1px var(--color-surface-border);
392
+ --shadow-ring: 0 0 0 2px oklch(0.55 0.19 360 / 0.30);
309
393
 
310
- /* Shadow transition */
311
- --shadow-transition: box-shadow var(--duration-fast-02) var(--ease-productive-standard);
394
+ --shadow-raised-inner: inset 0 1px 0 oklch(1 0 0 / 0.10), inset 0 -1px 0 oklch(0 0 0 / 0.06);
395
+ --shadow-pressed: 0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength)));
396
+ --shadow-success: 0 2px 8px oklch(0.55 0.14 145 / 0.20), 0 6px 20px oklch(0.55 0.14 145 / 0.15);
397
+ --shadow-error: 0 2px 8px oklch(0.55 0.18 25 / 0.20), 0 6px 20px oklch(0.55 0.18 25 / 0.15);
398
+ --shadow-warning: 0 2px 8px oklch(0.78 0.16 65 / 0.22), 0 6px 20px oklch(0.78 0.16 65 / 0.15);
312
399
 
313
400
  /* Keyboard shortcut badge shadow */
314
401
  --shadow-kbd: inset 0 -1px 0 oklch(0 0 0 / 0.1);
315
402
 
316
- /* Shadow primitives (internal) */
317
- --shadow-xs:
403
+ /* ───────────────────────────────────────────────────────────
404
+ Z-INDEX
405
+ TW4 does NOT auto-generate utilities from --z-*. These vars
406
+ exist as named CSS custom properties; the z-base/z-raised/etc.
407
+ utilities are declared explicitly in tokens/utilities.css via
408
+ @utility blocks that reference these names.
409
+ ─────────────────────────────────────────────────────────── */
410
+ --z-base: 0;
411
+ --z-raised: 10;
412
+ --z-dropdown: 1000;
413
+ --z-sticky: 1100;
414
+ --z-overlay: 1200;
415
+ --z-modal: 1300;
416
+ --z-popover: 1400;
417
+ --z-toast: 1500;
418
+ --z-tooltip: 1600;
419
+
420
+ /* ───────────────────────────────────────────────────────────
421
+ BREAKPOINTS (TW4 namespace: --breakpoint-* → variant)
422
+ ─────────────────────────────────────────────────────────── */
423
+ --breakpoint-sm: 640px;
424
+ --breakpoint-md: 768px;
425
+ --breakpoint-lg: 1024px;
426
+ --breakpoint-xl: 1280px;
427
+ --breakpoint-2xl: 1536px;
428
+ }
429
+
430
+ /* ═══════════════════════════════════════════════════════════════════
431
+ INTERNAL / META TOKENS (not utility-generating, consumed via var())
432
+ ═══════════════════════════════════════════════════════════════════ */
433
+ :root {
434
+ /* Action state opacities (reflected by preset `opacity-action-*` util) */
435
+ --action-hover-opacity: 0.04;
436
+ --action-selected-opacity: 0.08;
437
+ --action-disabled-opacity: 0.38;
438
+ --action-focus-opacity: 0.12;
439
+ --action-active-opacity: 0.12;
440
+
441
+ /* NOTE: --color-overlay and --color-disabled have been promoted to
442
+ @theme above (so TW4 emits `bg-overlay`, `text-disabled`, etc.).
443
+ The dark-mode override below and forced-colors override further
444
+ down still work because TW4 honors scoped redeclarations of
445
+ @theme vars. */
446
+
447
+ /* Shadow internals — the `--shadow-xs-internal` etc. are composed into
448
+ the public `--shadow-raised`/`--shadow-floating` @theme values above.
449
+ They depend on `--shadow-color` (a runtime var) so they cannot live
450
+ in @theme (TW4 may statically-inline theme values). */
451
+ --shadow-color: 0.15 0.015 260; /* cool blue tint */
452
+ --shadow-strength: 1;
453
+ --shadow-transition: box-shadow var(--duration-fast-02) var(--ease-productive-standard);
454
+
455
+ --shadow-xs-internal:
318
456
  0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
319
457
  0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
320
458
  0 1.5px 3px -1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
321
459
  0 3px 7px -2px oklch(var(--shadow-color) / calc(0.03 * var(--shadow-strength)));
322
- --shadow-sm:
460
+ --shadow-sm-internal:
323
461
  0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
324
462
  0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
325
463
  0 2px 4px -1.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
326
464
  0 6px 12px -3px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
327
465
  0 14px 28px -8px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
328
- --shadow-md:
466
+ --shadow-md-internal:
329
467
  0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
330
468
  0 1px 2px -1px oklch(var(--shadow-color) / calc(0.05 * var(--shadow-strength))),
331
469
  0 4px 8px -2px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
332
470
  0 10px 20px -5px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
333
471
  0 24px 44px -12px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
334
- --shadow-lg:
472
+ --shadow-lg-internal:
335
473
  0 0 0 1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
336
474
  0 1px 2px -1px oklch(var(--shadow-color) / calc(0.05 * var(--shadow-strength))),
337
475
  0 3px 6px -2px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
@@ -339,36 +477,14 @@
339
477
  0 18px 34px -8px oklch(var(--shadow-color) / calc(0.03 * var(--shadow-strength))),
340
478
  0 40px 64px -16px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
341
479
 
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;
480
+ /* Component sizes (consumed via w-ds-/h-ds- manual preset mappings) */
481
+ --size-xs: 24px;
366
482
  --size-xs-plus: 28px;
367
- --size-sm: 32px;
483
+ --size-sm: 32px;
368
484
  --size-sm-plus: 36px;
369
- --size-md: 40px;
370
- --size-lg: 48px;
371
- --size-xl: 56px;
485
+ --size-md: 40px;
486
+ --size-lg: 48px;
487
+ --size-xl: 56px;
372
488
  --icon-sm: 16px;
373
489
  --icon-md: 20px;
374
490
  --icon-lg: 24px;
@@ -376,42 +492,18 @@
376
492
  --border-width-sm: 1px;
377
493
  --border-width-md: 2px;
378
494
  --border-width-lg: 3px;
379
- --border-focus-width: 2px;
495
+ --border-focus-width: 2px;
380
496
  --border-focus-offset: 2px;
381
497
 
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;
498
+ /* Layout */
499
+ --max-width: 1280px;
397
500
  --max-width-body: 960px;
398
501
 
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
- ═══════════════════════════════════════════════════════════ */
502
+ /* Gradients (consumed via var() in DevalokGrain, not as utilities) */
409
503
  --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));
504
+ --gradient-brand-dark: linear-gradient(135deg, var(--pink-8), var(--purple-10));
411
505
 
412
- /* ═══════════════════════════════════════════════════════════
413
- CHART PALETTE
414
- ═══════════════════════════════════════════════════════════ */
506
+ /* Chart palette (consumed via var() in chart components) */
415
507
  --chart-1: var(--pink-9);
416
508
  --chart-2: var(--purple-9);
417
509
  --chart-3: var(--blue-9);
@@ -421,31 +513,30 @@
421
513
  --chart-7: var(--cyan-9);
422
514
  --chart-8: var(--orange-9);
423
515
 
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);
516
+ /* Inset glow & overlay (internal effect layers) */
517
+ --color-inset-glow: oklch(1 0 0 / 0.25);
518
+ --color-inset-glow-strong: oklch(1 0 0 / 0.16);
519
+ --color-inset-glow-subtle: oklch(1 0 0 / 0.10);
430
520
  --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);
521
+ --color-surface-overlay-dark: oklch(0 0 0 / 0.12);
522
+ --color-text-shadow: oklch(0 0 0 / 0.15);
433
523
  }
434
524
 
435
- /* ═══════════════════════════════════════════════════════════
525
+ /* ═══════════════════════════════════════════════════════════════════
436
526
  DARK MODE
437
- ═══════════════════════════════════════════════════════════ */
527
+ TW4 supports overriding @theme variables in scoped selectors.
528
+ ═══════════════════════════════════════════════════════════════════ */
438
529
  .dark {
439
530
  color-scheme: dark;
440
531
 
441
- /* Foreground on solid accent/status backgrounds — pure white on brand colors */
442
- --color-accent-fg: var(--neutral-0);
532
+ /* Foreground on solid accent/status backgrounds — pure white in dark mode */
533
+ --color-accent-fg: var(--neutral-0);
443
534
  --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);
535
+ --color-error-fg: var(--neutral-0);
536
+ --color-success-fg: var(--neutral-0);
537
+ --color-info-fg: var(--neutral-0);
447
538
 
448
- /* Warning: amber-bright dark ramp for dark mode */
539
+ /* Warning: amber-bright dark ramp */
449
540
  --color-warning-2: var(--amber-bright-2);
450
541
  --color-warning-3: var(--amber-bright-3);
451
542
  --color-warning-4: var(--amber-bright-4);
@@ -456,50 +547,44 @@
456
547
  --color-warning-11: var(--amber-bright-11);
457
548
  --color-warning-fg: var(--neutral-0);
458
549
 
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);
550
+ /* Surfacedark page, lighter cards */
551
+ --color-surface-base: var(--neutral-1); /* 0.11L */
552
+ --color-surface-raised: var(--neutral-2); /* 0.17L */
553
+ --color-surface-border: var(--neutral-4);
554
+ --color-surface-border-strong: var(--neutral-5);
555
+ --color-surface-overlay: oklch(0.13 0.0002 350);
556
+ --color-surface-border-subtle: var(--neutral-3);
557
+ --color-backdrop: oklch(0 0 0 / 0.6);
473
558
 
474
559
  /* Overlay */
475
560
  --color-overlay: oklch(0 0 0 / 0.70);
476
561
 
477
- /* Action State Opacities (higher in dark mode) */
478
- --action-hover-opacity: 0.08;
562
+ /* Action state opacities (higher in dark mode) */
563
+ --action-hover-opacity: 0.08;
479
564
  --action-selected-opacity: 0.12;
480
565
  --action-disabled-opacity: 0.38;
481
- --action-focus-opacity: 0.12;
482
- --action-active-opacity: 0.16;
566
+ --action-focus-opacity: 0.12;
567
+ --action-active-opacity: 0.16;
483
568
 
484
569
  /* Skeleton */
485
- --color-skeleton-base: var(--neutral-4);
570
+ --color-skeleton-base: var(--neutral-4);
486
571
  --color-skeleton-shimmer: var(--neutral-3);
487
572
 
488
573
  /* Shadows (heavier in dark mode) */
489
574
  --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);
575
+ --shadow-brand: 0 2px 8px oklch(0.55 0.19 360 / 0.30), 0 6px 20px oklch(0.55 0.19 360 / 0.20);
576
+ --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);
577
+ --shadow-ring: 0 0 0 2px oklch(0.55 0.19 360 / 0.45);
493
578
  --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);
579
+ --shadow-success: 0 2px 8px oklch(0.6 0.14 145 / 0.30), 0 6px 20px oklch(0.6 0.14 145 / 0.20);
580
+ --shadow-error: 0 2px 8px oklch(0.6 0.18 25 / 0.30), 0 6px 20px oklch(0.6 0.18 25 / 0.20);
581
+ --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
582
 
498
583
  /* Gradients */
499
584
  --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));
585
+ --gradient-brand-dark: linear-gradient(135deg, var(--pink-10), var(--purple-10));
501
586
 
502
- /* Chart Palette (dark — use step 9 which is brighter in dark) */
587
+ /* Chart palette (dark — step 9 brighter) */
503
588
  --chart-1: var(--pink-9);
504
589
  --chart-2: var(--purple-9);
505
590
  --chart-3: var(--blue-9);
@@ -509,68 +594,47 @@
509
594
  --chart-7: var(--cyan-9);
510
595
  --chart-8: var(--orange-9);
511
596
 
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);
597
+ /* Inset glow & overlay */
598
+ --color-inset-glow: oklch(1 0 0 / 0.10);
599
+ --color-inset-glow-strong: oklch(1 0 0 / 0.08);
600
+ --color-inset-glow-subtle: oklch(1 0 0 / 0.05);
516
601
  --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);
602
+ --color-surface-overlay-dark: oklch(0 0 0 / 0.25);
603
+ --color-text-shadow: oklch(0 0 0 / 0.40);
519
604
  }
520
605
 
521
- /* Ensure Radix popper content (Select, Combobox, Popover, etc.)
522
- renders above Sheet/Dialog overlays */
606
+ /* ═══════════════════════════════════════════════════════════════════
607
+ Ensure Radix popper content (Select, Combobox, Popover, etc.)
608
+ renders above Sheet/Dialog overlays.
609
+ ═══════════════════════════════════════════════════════════════════ */
523
610
  [data-radix-popper-content-wrapper] {
524
611
  z-index: var(--z-popover) !important;
525
612
  }
526
613
 
527
- /* ── Responsive Layout Spacing ──────────────────────── */
614
+ /* ═══════════════════════════════════════════════════════════════════
615
+ Responsive layout spacing — overrides @theme values at breakpoints.
616
+ TW4 permits re-declaring @theme vars under @media scope.
617
+ ═══════════════════════════════════════════════════════════════════ */
528
618
  @media (min-width: 768px) {
529
619
  :root {
530
- --spacing-page-x: var(--spacing-06); /* 24px on tablet+ */
531
- --spacing-section-gap: var(--spacing-10); /* 64px on tablet+ */
620
+ --spacing-page-x: var(--spacing-ds-06);
621
+ --spacing-section-gap: var(--spacing-ds-10);
532
622
  }
533
623
  }
534
624
 
535
625
  @media (min-width: 1280px) {
536
626
  :root {
537
- --spacing-page-x: var(--spacing-08); /* 40px on desktop+ */
627
+ --spacing-ds-page-x: var(--spacing-ds-08);
538
628
  }
539
629
  }
540
630
 
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
- /* ═══════════════════════════════════════════════════════════ */
631
+ /* ═══════════════════════════════════════════════════════════════════
632
+ REDUCED MOTION
571
633
 
634
+ @property --border-angle and @keyframes definitions moved to
635
+ base.css and animations.css respectively (Phase 2 of 0.37 migration).
636
+ ═══════════════════════════════════════════════════════════════════ */
572
637
  @media (prefers-reduced-motion: reduce) {
573
-
574
638
  *,
575
639
  *::before,
576
640
  *::after {
@@ -581,85 +645,68 @@
581
645
  }
582
646
  }
583
647
 
584
- /* ═══════════════════════════════════════════════════════════
648
+ /* ═══════════════════════════════════════════════════════════════════
585
649
  FORCED COLORS (Windows High Contrast, etc.)
586
- ───────────────────────────────────────────────────────────
650
+
587
651
  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
- ═══════════════════════════════════════════════════════════ */
652
+ palette and remap to a small set of system keywords. Opt in
653
+ explicitly so the DS degrades legibly.
654
+ Applies to BOTH light and dark themes.
655
+ Test: Chrome DevTools Rendering "Emulate CSS media feature
656
+ forced-colors: active".
657
+ ═══════════════════════════════════════════════════════════════════ */
601
658
  @media (forced-colors: active) {
602
659
  :root,
603
660
  .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 */
661
+ /* Surface */
662
+ --color-surface-fg: CanvasText;
663
+ --color-surface-fg-muted: CanvasText;
664
+ --color-surface-fg-subtle: GrayText;
665
+ --color-surface-fg-disabled: GrayText;
666
+ --color-surface-base: Canvas;
667
+ --color-surface-sunken: Canvas;
668
+ --color-surface-raised: Canvas;
669
+ --color-surface-raised-hover: Canvas;
613
670
  --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;
671
+ --color-surface-overlay: Canvas;
672
+ --color-surface-disabled: Canvas;
673
+ --color-surface-inverted: CanvasText;
674
+ --color-surface-inverted-fg: Canvas;
675
+ --color-surface-border: CanvasText;
676
+ --color-surface-border-strong: CanvasText;
677
+ --color-surface-border-subtle: GrayText;
621
678
  --color-backdrop: Canvas;
622
- --color-overlay: Canvas;
679
+ --color-overlay: Canvas;
623
680
  --color-disabled: GrayText;
624
681
 
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. */
682
+ /* Accent */
630
683
  --color-accent-1: Canvas;
631
684
  --color-accent-2: Canvas;
632
685
  --color-accent-3: Canvas;
633
686
  --color-accent-4: Canvas;
634
687
  --color-accent-5: Canvas;
635
688
  --color-accent-6: Canvas;
636
- --color-accent-7: Highlight;
637
- --color-accent-8: Highlight;
638
- --color-accent-9: Highlight;
689
+ --color-accent-7: Highlight;
690
+ --color-accent-8: Highlight;
691
+ --color-accent-9: Highlight;
639
692
  --color-accent-10: Highlight;
640
693
  --color-accent-11: LinkText;
641
694
  --color-accent-12: LinkText;
642
695
  --color-accent-fg: HighlightText;
643
696
 
644
- /* ── Secondary accent ── (same pattern) */
645
- --color-secondary-9: Highlight;
697
+ /* Secondary */
698
+ --color-secondary-9: Highlight;
646
699
  --color-secondary-10: Highlight;
647
700
  --color-secondary-11: LinkText;
648
701
  --color-secondary-12: LinkText;
649
702
  --color-secondary-fg: HighlightText;
650
703
 
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. */
704
+ /* Status (meaning carried by iconography + text, not color) */
658
705
  --color-error-3: Canvas;
659
706
  --color-error-4: Canvas;
660
707
  --color-error-5: Canvas;
661
708
  --color-error-7: CanvasText;
662
- --color-error-9: Mark;
709
+ --color-error-9: Mark;
663
710
  --color-error-10: Mark;
664
711
  --color-error-11: CanvasText;
665
712
  --color-error-fg: CanvasText;
@@ -668,7 +715,7 @@
668
715
  --color-success-4: Canvas;
669
716
  --color-success-5: Canvas;
670
717
  --color-success-7: CanvasText;
671
- --color-success-9: Highlight;
718
+ --color-success-9: Highlight;
672
719
  --color-success-10: Highlight;
673
720
  --color-success-11: CanvasText;
674
721
  --color-success-fg: HighlightText;
@@ -677,7 +724,7 @@
677
724
  --color-warning-4: Canvas;
678
725
  --color-warning-5: Canvas;
679
726
  --color-warning-7: CanvasText;
680
- --color-warning-9: Highlight;
727
+ --color-warning-9: Highlight;
681
728
  --color-warning-10: Highlight;
682
729
  --color-warning-11: CanvasText;
683
730
  --color-warning-fg: HighlightText;
@@ -686,36 +733,28 @@
686
733
  --color-info-4: Canvas;
687
734
  --color-info-5: Canvas;
688
735
  --color-info-7: CanvasText;
689
- --color-info-9: Highlight;
736
+ --color-info-9: Highlight;
690
737
  --color-info-10: Highlight;
691
738
  --color-info-11: CanvasText;
692
739
  --color-info-fg: HighlightText;
693
740
 
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;
741
+ /* Links */
742
+ --color-link: LinkText;
743
+ --color-link-hover: LinkText;
699
744
  --color-link-visited: VisitedText;
700
745
 
701
- /* ── Skeleton ── collapse to Canvas; shimmer animation still runs */
702
- --color-skeleton-base: GrayText;
746
+ /* Skeleton collapses */
747
+ --color-skeleton-base: GrayText;
703
748
  --color-skeleton-shimmer: Canvas;
704
749
  }
705
750
 
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. */
751
+ /* Focus ring — enforce via outline so it's never stripped */
709
752
  *:focus-visible {
710
753
  outline: 2px solid Highlight !important;
711
754
  outline-offset: 2px !important;
712
755
  }
713
756
 
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. */
757
+ /* Interactive elements need a visible border even when bg collapses */
719
758
  button,
720
759
  [role="button"],
721
760
  [role="menuitem"],
@@ -730,13 +769,9 @@
730
769
  border: 1px solid CanvasText;
731
770
  }
732
771
 
733
- /* Decorative texture layers are pure noise in high-contrast mode. */
734
- [data-grain] {
735
- display: none;
736
- }
772
+ /* Decorative grain is pure noise in high-contrast */
773
+ [data-grain] { display: none; }
737
774
 
738
- /* Skeleton shimmer can feel alarming in high-contrast; keep static. */
739
- [data-skeleton] {
740
- animation: none !important;
741
- }
775
+ /* Skeleton shimmer can feel alarming in HC; keep static */
776
+ [data-skeleton] { animation: none !important; }
742
777
  }