@flikk/ui 1.0.0-beta.27 → 1.0.0-beta.29

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 (319) hide show
  1. package/dist/bg/1.webp +0 -0
  2. package/dist/bg/10.webp +0 -0
  3. package/dist/bg/11.webp +0 -0
  4. package/dist/bg/12.webp +0 -0
  5. package/dist/bg/13.webp +0 -0
  6. package/dist/bg/14.webp +0 -0
  7. package/dist/bg/15.webp +0 -0
  8. package/dist/bg/16.webp +0 -0
  9. package/dist/bg/17.webp +0 -0
  10. package/dist/bg/18.webp +0 -0
  11. package/dist/bg/19.webp +0 -0
  12. package/dist/bg/2.webp +0 -0
  13. package/dist/bg/20.webp +0 -0
  14. package/dist/bg/21.webp +0 -0
  15. package/dist/bg/22.webp +0 -0
  16. package/dist/bg/3.webp +0 -0
  17. package/dist/bg/4.webp +0 -0
  18. package/dist/bg/5.webp +0 -0
  19. package/dist/bg/6.webp +0 -0
  20. package/dist/bg/7.webp +0 -0
  21. package/dist/bg/8.webp +0 -0
  22. package/dist/bg/9.webp +0 -0
  23. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
  24. package/dist/components/ai/PromptInput/PromptInput.js +7 -143
  25. package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -88
  26. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
  27. package/dist/components/canvas/Background.d.ts +19 -0
  28. package/dist/components/canvas/Background.js +23 -0
  29. package/dist/components/canvas/BaseNode.d.ts +15 -0
  30. package/dist/components/canvas/BaseNode.js +20 -0
  31. package/dist/components/canvas/CanvasToolbar.d.ts +34 -0
  32. package/dist/components/canvas/CanvasToolbar.js +34 -0
  33. package/dist/components/canvas/Edge.d.ts +35 -0
  34. package/dist/components/canvas/Edge.js +97 -0
  35. package/dist/components/canvas/EdgeLayer.d.ts +18 -0
  36. package/dist/components/canvas/EdgeLayer.js +111 -0
  37. package/dist/components/canvas/Handle.d.ts +11 -0
  38. package/dist/components/canvas/Handle.js +63 -0
  39. package/dist/components/canvas/MiniMap.d.ts +22 -0
  40. package/dist/components/canvas/MiniMap.js +105 -0
  41. package/dist/components/canvas/NodeCanvas.d.ts +10 -0
  42. package/dist/components/canvas/NodeCanvas.js +477 -0
  43. package/dist/components/canvas/NodeCanvas.theme.d.ts +7 -0
  44. package/dist/components/canvas/NodeCanvas.theme.js +9 -0
  45. package/dist/components/canvas/NodeCanvas.types.d.ts +187 -0
  46. package/dist/components/canvas/NodeControls.d.ts +25 -0
  47. package/dist/components/canvas/NodeControls.js +40 -0
  48. package/dist/components/canvas/NodeRenderer.d.ts +19 -0
  49. package/dist/components/canvas/NodeRenderer.js +117 -0
  50. package/dist/components/canvas/changes.d.ts +11 -0
  51. package/dist/components/canvas/changes.js +76 -0
  52. package/dist/components/canvas/context/CanvasContext.d.ts +32 -0
  53. package/dist/components/canvas/context/CanvasContext.js +14 -0
  54. package/dist/components/canvas/context/ConnectionContext.d.ts +33 -0
  55. package/dist/components/canvas/context/ConnectionContext.js +13 -0
  56. package/dist/components/canvas/context/HandleRegistry.d.ts +24 -0
  57. package/dist/components/canvas/context/HandleRegistry.js +15 -0
  58. package/dist/components/canvas/context/InteractionContext.d.ts +18 -0
  59. package/dist/components/canvas/context/InteractionContext.js +14 -0
  60. package/dist/components/canvas/context/NodeIdContext.d.ts +3 -0
  61. package/dist/components/canvas/context/NodeIdContext.js +15 -0
  62. package/dist/components/canvas/hooks/useConnection.d.ts +17 -0
  63. package/dist/components/canvas/hooks/useConnection.js +29 -0
  64. package/dist/components/canvas/hooks/useMarquee.d.ts +25 -0
  65. package/dist/components/canvas/hooks/useMarquee.js +91 -0
  66. package/dist/components/canvas/hooks/useNodeDrag.d.ts +23 -0
  67. package/dist/components/canvas/hooks/useNodeDrag.js +110 -0
  68. package/dist/components/canvas/hooks/usePanZoom.d.ts +30 -0
  69. package/dist/components/canvas/hooks/usePanZoom.js +189 -0
  70. package/dist/components/canvas/hooks/useViewport.d.ts +21 -0
  71. package/dist/components/canvas/hooks/useViewport.js +35 -0
  72. package/dist/components/canvas/index.d.ts +14 -0
  73. package/dist/components/canvas/index.js +12 -0
  74. package/dist/components/canvas/layout.d.ts +22 -0
  75. package/dist/components/canvas/layout.js +67 -0
  76. package/dist/components/canvas/utils.d.ts +4 -0
  77. package/dist/components/canvas/utils.js +16 -0
  78. package/dist/components/charts/AreaChart/AreaChart.js +136 -101
  79. package/dist/components/charts/AreaChart/AreaChart.types.d.ts +5 -5
  80. package/dist/components/charts/AreaChart/AreaChart.types.js +1 -0
  81. package/dist/components/charts/BarChart/BarChart.js +207 -143
  82. package/dist/components/charts/BarChart/BarChart.types.d.ts +4 -4
  83. package/dist/components/charts/BarChart/BarChart.types.js +1 -0
  84. package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
  85. package/dist/components/charts/LineChart/LineChart.js +88 -72
  86. package/dist/components/charts/LineChart/LineChart.types.d.ts +3 -3
  87. package/dist/components/charts/RadarChart/RadarChart.js +1 -1
  88. package/dist/components/charts/RadarChart/RadarChart.theme.js +5 -2
  89. package/dist/components/charts/ScatterPlot/ScatterPlot.js +62 -72
  90. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +10 -1
  91. package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +3 -9
  92. package/dist/components/charts/StackedBarChart/StackedBarChart.js +33 -33
  93. package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
  94. package/dist/components/charts/hooks/index.d.ts +2 -0
  95. package/dist/components/charts/hooks/useChartDimensions.d.ts +29 -0
  96. package/dist/components/charts/hooks/useChartDimensions.js +42 -0
  97. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +1 -1
  98. package/dist/components/charts/types/chart.types.d.ts +11 -2
  99. package/dist/components/charts/types/chart.types.js +10 -3
  100. package/dist/components/core/Avatar/Avatar.js +5 -1
  101. package/dist/components/core/AvatarGroup/AvatarGroup.js +5 -1
  102. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +4 -2
  103. package/dist/components/core/Badge/Badge.js +1 -1
  104. package/dist/components/core/Badge/Badge.theme.js +16 -15
  105. package/dist/components/core/Button/Button.js +1 -1
  106. package/dist/components/core/Button/Button.theme.js +2 -2
  107. package/dist/components/core/Calendar/Calendar.theme.js +1 -1
  108. package/dist/components/core/Card/Card.js +7 -3
  109. package/dist/components/core/Card/Card.theme.js +3 -3
  110. package/dist/components/core/Card/Card.types.d.ts +27 -2
  111. package/dist/components/core/CommandPalette/CommandPalette.theme.js +2 -2
  112. package/dist/components/core/ContextMenu/ContextMenu.theme.js +2 -2
  113. package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
  114. package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +1 -1
  115. package/dist/components/core/Dropdown/Dropdown.theme.js +3 -3
  116. package/dist/components/core/Dropdown/DropdownMenu.js +57 -29
  117. package/dist/components/core/HeroCard/HeroCard.d.ts +5 -0
  118. package/dist/components/core/HeroCard/HeroCard.js +99 -0
  119. package/dist/components/core/HeroCard/HeroCard.theme.d.ts +3 -0
  120. package/dist/components/core/HeroCard/HeroCard.theme.js +8 -0
  121. package/dist/components/core/HeroCard/HeroCard.types.d.ts +70 -0
  122. package/dist/components/core/HeroCard/index.d.ts +4 -0
  123. package/dist/components/core/Kbd/Kbd.theme.js +1 -1
  124. package/dist/components/core/Modal/Modal.d.ts +1 -1
  125. package/dist/components/core/Modal/Modal.js +2 -7
  126. package/dist/components/core/Modal/Modal.theme.js +4 -8
  127. package/dist/components/core/Modal/Modal.types.d.ts +0 -10
  128. package/dist/components/core/Modal/index.d.ts +1 -1
  129. package/dist/components/core/ModalStack/ModalStack.d.ts +1 -1
  130. package/dist/components/core/ModalStack/ModalStack.types.d.ts +1 -2
  131. package/dist/components/core/ModalStack/ModalStackModal.d.ts +1 -1
  132. package/dist/components/core/ModalStack/ModalStackModal.js +2 -7
  133. package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
  134. package/dist/components/core/Popover/Popover.theme.js +1 -1
  135. package/dist/components/core/ScrollArea/ScrollArea.js +242 -4
  136. package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -1
  137. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +4 -0
  138. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +23 -0
  139. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +4 -0
  140. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.types.d.ts +5 -0
  141. package/dist/components/core/Segmented/Segmented.theme.js +2 -2
  142. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  143. package/dist/components/core/index.d.ts +1 -0
  144. package/dist/components/core/index.js +2 -0
  145. package/dist/components/data-display/DescriptionList/DescriptionList.js +23 -7
  146. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +10 -3
  147. package/dist/components/data-display/DescriptionList/DescriptionList.types.d.ts +49 -10
  148. package/dist/components/data-display/DescriptionList/index.d.ts +1 -1
  149. package/dist/components/data-display/Feed/Feed.js +28 -5
  150. package/dist/components/data-display/Feed/Feed.theme.js +1 -1
  151. package/dist/components/data-display/Feed/Feed.types.d.ts +32 -1
  152. package/dist/components/data-display/Feed/index.d.ts +1 -1
  153. package/dist/components/data-display/Metric/Metric.js +8 -8
  154. package/dist/components/data-display/Metric/Metric.theme.d.ts +3 -2
  155. package/dist/components/data-display/Metric/Metric.theme.js +50 -68
  156. package/dist/components/data-display/Metric/Metric.types.d.ts +19 -21
  157. package/dist/components/data-display/Table/Table.js +2 -2
  158. package/dist/components/data-display/Table/Table.theme.js +24 -4
  159. package/dist/components/data-display/Table/Table.types.d.ts +8 -0
  160. package/dist/components/data-display/Table/TableBody.js +2 -2
  161. package/dist/components/data-display/Table/TableCell.js +1 -1
  162. package/dist/components/data-display/Table/TableRow.d.ts +1 -1
  163. package/dist/components/data-display/Table/TableRow.js +9 -2
  164. package/dist/components/data-display/Timeline/Timeline.js +27 -5
  165. package/dist/components/data-display/Timeline/Timeline.theme.d.ts +10 -2
  166. package/dist/components/data-display/Timeline/Timeline.theme.js +14 -8
  167. package/dist/components/data-display/Timeline/Timeline.types.d.ts +48 -16
  168. package/dist/components/data-display/Timeline/Timeline.utils.d.ts +6 -0
  169. package/dist/components/data-display/Timeline/Timeline.utils.js +11 -0
  170. package/dist/components/data-display/Timeline/TimelineItem.js +13 -20
  171. package/dist/components/data-display/Timeline/TimelineMarker.js +10 -8
  172. package/dist/components/data-display/Timeline/index.d.ts +2 -2
  173. package/dist/components/effects/3d/index.d.ts +0 -2
  174. package/dist/components/effects/3d/index.js +0 -1
  175. package/dist/components/effects/DotPattern/DotPattern.js +1 -1
  176. package/dist/components/effects/Overlay/Overlay.theme.js +1 -2
  177. package/dist/components/effects/Preloader/Preloader.animations.d.ts +23 -0
  178. package/dist/components/effects/Preloader/Preloader.animations.js +150 -0
  179. package/dist/components/effects/Preloader/Preloader.d.ts +3 -0
  180. package/dist/components/effects/Preloader/Preloader.js +119 -0
  181. package/dist/components/effects/Preloader/Preloader.types.d.ts +63 -0
  182. package/dist/components/effects/Preloader/index.d.ts +2 -0
  183. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +25 -14
  184. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +2 -0
  185. package/dist/components/effects/TiltCard/TiltCard.d.ts +12 -0
  186. package/dist/components/effects/TiltCard/TiltCard.glow.d.ts +28 -0
  187. package/dist/components/effects/TiltCard/TiltCard.glow.js +114 -0
  188. package/dist/components/effects/TiltCard/TiltCard.js +177 -0
  189. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.d.ts → TiltCard/TiltCard.shaders.d.ts} +1 -1
  190. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.js → TiltCard/TiltCard.shaders.js} +1 -1
  191. package/dist/components/effects/TiltCard/TiltCard.types.d.ts +88 -0
  192. package/dist/components/effects/TiltCard/index.d.ts +2 -0
  193. package/dist/components/effects/index.d.ts +4 -12
  194. package/dist/components/effects/index.js +2 -6
  195. package/dist/components/forms/Checkbox/Checkbox.js +7 -1
  196. package/dist/components/forms/DatePicker/DatePicker.theme.js +2 -2
  197. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +1 -1
  198. package/dist/components/forms/FileUpload/FileUpload.js +1 -89
  199. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  200. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +2 -2
  201. package/dist/components/forms/Slider/Slider.theme.js +1 -1
  202. package/dist/components/forms/Switch/Switch.js +27 -15
  203. package/dist/components/forms/Switch/Switch.theme.d.ts +36 -6
  204. package/dist/components/forms/Switch/Switch.theme.js +33 -4
  205. package/dist/components/forms/Switch/Switch.types.d.ts +12 -2
  206. package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -2
  207. package/dist/components/forms/TimePicker/TimePickerContent.js +1 -90
  208. package/dist/components/forms/forms.theme.js +1 -1
  209. package/dist/components/forms/index.d.ts +0 -4
  210. package/dist/components/forms/index.js +0 -92
  211. package/dist/components/generative/GenerativeView.d.ts +21 -0
  212. package/dist/components/generative/GenerativeView.js +116 -0
  213. package/dist/components/generative/actions.d.ts +26 -0
  214. package/dist/components/generative/actions.js +51 -0
  215. package/dist/components/generative/index.d.ts +11 -0
  216. package/dist/components/generative/index.js +9 -0
  217. package/dist/components/generative/registry.d.ts +43 -0
  218. package/dist/components/generative/registry.js +114 -0
  219. package/dist/components/generative/resolvers.d.ts +35 -0
  220. package/dist/components/generative/resolvers.js +93 -0
  221. package/dist/components/generative/schema.generated.d.ts +2 -0
  222. package/dist/components/generative/schema.generated.js +1639 -0
  223. package/dist/components/generative/schemaTypes.d.ts +30 -0
  224. package/dist/components/generative/streaming.d.ts +39 -0
  225. package/dist/components/generative/streaming.js +283 -0
  226. package/dist/components/generative/tools.d.ts +21 -0
  227. package/dist/components/generative/tools.js +54 -0
  228. package/dist/components/generative/types.d.ts +41 -0
  229. package/dist/components/generative/useGenerativeStream.d.ts +37 -0
  230. package/dist/components/generative/useGenerativeStream.js +36 -0
  231. package/dist/components/generative/validate.d.ts +24 -0
  232. package/dist/components/generative/validate.js +259 -0
  233. package/dist/components/layout/AppShell/AppShell.theme.js +2 -2
  234. package/dist/components/layout/FormLayout/FormLayout.js +1 -90
  235. package/dist/components/layout/Grid/Grid.d.ts +3 -0
  236. package/dist/components/layout/Grid/Grid.js +50 -0
  237. package/dist/components/layout/Grid/Grid.theme.d.ts +2 -0
  238. package/dist/components/layout/Grid/Grid.theme.js +35 -0
  239. package/dist/components/layout/Grid/Grid.types.d.ts +57 -0
  240. package/dist/components/layout/Grid/index.d.ts +3 -0
  241. package/dist/components/layout/Section/Section.d.ts +3 -0
  242. package/dist/components/layout/Section/Section.js +18 -0
  243. package/dist/components/layout/Section/Section.theme.d.ts +2 -0
  244. package/dist/components/layout/Section/Section.theme.js +10 -0
  245. package/dist/components/layout/Section/Section.types.d.ts +34 -0
  246. package/dist/components/layout/Section/index.d.ts +3 -0
  247. package/dist/components/layout/Stack/Stack.d.ts +3 -0
  248. package/dist/components/layout/Stack/Stack.js +19 -0
  249. package/dist/components/layout/Stack/Stack.theme.d.ts +2 -0
  250. package/dist/components/layout/Stack/Stack.theme.js +10 -0
  251. package/dist/components/layout/Stack/Stack.types.d.ts +39 -0
  252. package/dist/components/layout/Stack/index.d.ts +3 -0
  253. package/dist/components/layout/index.d.ts +3 -0
  254. package/dist/components/layout/index.js +6 -0
  255. package/dist/generative.schema.json +1637 -0
  256. package/dist/index.js +180 -180
  257. package/dist/registry.json +648 -464
  258. package/dist/styles.css +1 -1
  259. package/dist/tools.json +1731 -0
  260. package/package.json +17 -4
  261. package/src/global.scss +53 -101
  262. package/src/styles/theme.css +687 -493
  263. package/dist/bg/1.jpg +0 -0
  264. package/dist/bg/10.jpg +0 -0
  265. package/dist/bg/11.jpg +0 -0
  266. package/dist/bg/14.jpg +0 -0
  267. package/dist/bg/15.jpg +0 -0
  268. package/dist/bg/16.jpg +0 -0
  269. package/dist/bg/17.jpg +0 -0
  270. package/dist/bg/18.jpg +0 -0
  271. package/dist/bg/19.jpg +0 -0
  272. package/dist/bg/2.jpg +0 -0
  273. package/dist/bg/20.jpg +0 -0
  274. package/dist/bg/21.jpg +0 -0
  275. package/dist/bg/22.jpg +0 -0
  276. package/dist/bg/23.jpg +0 -0
  277. package/dist/bg/24.jpg +0 -0
  278. package/dist/bg/3.jpg +0 -0
  279. package/dist/bg/4.jpg +0 -0
  280. package/dist/bg/5.jpg +0 -0
  281. package/dist/bg/6.jpg +0 -0
  282. package/dist/bg/7.jpg +0 -0
  283. package/dist/bg/8.jpg +0 -0
  284. package/dist/bg/9.jpg +0 -0
  285. package/dist/components/effects/MorphingText/MorphingText.d.ts +0 -17
  286. package/dist/components/effects/MorphingText/MorphingText.js +0 -125
  287. package/dist/components/effects/MorphingText/MorphingText.types.d.ts +0 -18
  288. package/dist/components/effects/MorphingText/index.d.ts +0 -2
  289. package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +0 -8
  290. package/dist/components/effects/PageTransition/PageTransition.animations.js +0 -53
  291. package/dist/components/effects/PageTransition/PageTransition.d.ts +0 -3
  292. package/dist/components/effects/PageTransition/PageTransition.js +0 -82
  293. package/dist/components/effects/PageTransition/PageTransition.types.d.ts +0 -15
  294. package/dist/components/effects/PageTransition/index.d.ts +0 -2
  295. package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +0 -26
  296. package/dist/components/effects/ParallaxSection/ParallaxSection.js +0 -71
  297. package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +0 -11
  298. package/dist/components/effects/ParallaxSection/index.d.ts +0 -2
  299. package/dist/components/effects/Spotlight/Spotlight.d.ts +0 -36
  300. package/dist/components/effects/Spotlight/Spotlight.js +0 -112
  301. package/dist/components/effects/Spotlight/Spotlight.types.d.ts +0 -29
  302. package/dist/components/effects/Spotlight/index.d.ts +0 -2
  303. package/dist/components/effects/SpotlightBorder/SpotlightBorder.d.ts +0 -18
  304. package/dist/components/effects/SpotlightBorder/SpotlightBorder.js +0 -213
  305. package/dist/components/effects/SpotlightBorder/SpotlightBorder.types.d.ts +0 -61
  306. package/dist/components/effects/SpotlightBorder/index.d.ts +0 -2
  307. package/dist/components/effects/StickyScroll/StickyScroll.d.ts +0 -30
  308. package/dist/components/effects/StickyScroll/StickyScroll.js +0 -128
  309. package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +0 -19
  310. package/dist/components/effects/StickyScroll/index.d.ts +0 -2
  311. package/dist/components/forms/CronInput/CronInput.d.ts +0 -3
  312. package/dist/components/forms/CronInput/CronInput.js +0 -113
  313. package/dist/components/forms/CronInput/CronInput.theme.d.ts +0 -6
  314. package/dist/components/forms/CronInput/CronInput.theme.js +0 -75
  315. package/dist/components/forms/CronInput/CronInput.types.d.ts +0 -109
  316. package/dist/components/forms/CronInput/CronInput.utils.d.ts +0 -67
  317. package/dist/components/forms/CronInput/CronInput.utils.js +0 -505
  318. package/dist/components/forms/CronInput/index.d.ts +0 -4
  319. /package/dist/components/effects/{SpotlightBorder/SpotlightBorder.types.js → TiltCard/TiltCard.types.js} +0 -0
@@ -1,384 +1,392 @@
1
1
  @theme {
2
- /* Primary color palette - full 50-950 range */
3
- --color-primary-50: oklch(0.962 0.018 272.314);
4
- --color-primary-100: oklch(0.93 0.034 272.788);
5
- --color-primary-200: oklch(0.87 0.065 274.039);
6
- --color-primary-300: oklch(0.785 0.115 274.713);
7
- --color-primary-400: oklch(0.673 0.182 276.935);
8
- --color-primary-500: oklch(0.585 0.233 277.117);
9
- --color-primary-600: oklch(0.511 0.262 276.966);
10
- --color-primary-700: oklch(0.457 0.24 277.023);
11
- --color-primary-800: oklch(0.398 0.195 277.366);
12
- --color-primary-900: oklch(0.359 0.144 278.697);
13
- --color-primary-950: oklch(0.257 0.09 281.288);
14
-
15
- --color-primary: var(--color-primary-600);
16
- --color-primary-contrast: var(--color-neutral-50);
17
-
18
- /* Secondary color palette - Tailwind v4 gray */
19
- --color-secondary-50: oklch(0.984 0.003 247.858);
20
- --color-secondary-100: oklch(0.968 0.007 247.896);
21
- --color-secondary-200: oklch(0.929 0.013 255.508);
22
- --color-secondary-300: oklch(0.869 0.022 252.894);
23
- --color-secondary-400: oklch(0.704 0.04 256.788);
24
- --color-secondary-500: oklch(0.554 0.046 257.417);
25
- --color-secondary-600: oklch(0.446 0.043 257.281);
26
- --color-secondary-700: oklch(0.372 0.044 257.287);
27
- --color-secondary-800: oklch(0.279 0.041 260.031);
28
- --color-secondary-900: oklch(0.208 0.042 265.755);
29
- --color-secondary-950: oklch(0.129 0.042 264.695);
30
-
31
- --color-secondary: var(--color-secondary-600);
32
- --color-secondary-contrast: var(--color-neutral-50);
33
-
34
- /* Danger/Error color palette - full 50-950 range */
35
- --color-danger-50: oklch(0.971 0.013 17.38);
36
- --color-danger-100: oklch(0.936 0.032 17.717);
37
- --color-danger-200: oklch(0.885 0.062 18.334);
38
- --color-danger-300: oklch(0.808 0.114 19.571);
39
- --color-danger-400: oklch(0.704 0.191 22.216);
40
- --color-danger-500: oklch(0.637 0.237 25.331);
41
- --color-danger-600: oklch(0.577 0.245 27.325);
42
- --color-danger-700: oklch(0.505 0.213 27.518);
43
- --color-danger-800: oklch(0.444 0.177 26.899);
44
- --color-danger-900: oklch(0.396 0.141 25.723);
45
- --color-danger-950: oklch(0.258 0.092 26.042);
46
-
47
- --color-danger: var(--color-danger-600);
48
- --color-danger-contrast: var(--color-neutral-50);
49
-
50
- /* Success color palette - Tailwind v4 teal */
51
- --color-success-50: oklch(0.984 0.014 180.72);
52
- --color-success-100: oklch(0.953 0.051 180.801);
53
- --color-success-200: oklch(0.91 0.096 180.426);
54
- --color-success-300: oklch(0.855 0.138 181.071);
55
- --color-success-400: oklch(0.777 0.152 181.912);
56
- --color-success-500: oklch(0.704 0.14 182.503);
57
- --color-success-600: oklch(0.6 0.118 184.704);
58
- --color-success-700: oklch(0.511 0.096 186.391);
59
- --color-success-800: oklch(0.437 0.078 188.216);
60
- --color-success-900: oklch(0.386 0.063 188.416);
61
- --color-success-950: oklch(0.277 0.046 192.524);
62
-
63
- --color-success: var(--color-success-600);
64
- --color-success-contrast: var(--color-neutral-50);
65
-
66
- /* Warning color palette - full 50-950 range */
67
- --color-warning-50: oklch(0.987 0.022 95.277);
68
- --color-warning-100: oklch(0.962 0.059 95.617);
69
- --color-warning-200: oklch(0.924 0.12 95.746);
70
- --color-warning-300: oklch(0.879 0.169 91.605);
71
- --color-warning-400: oklch(0.828 0.189 84.429);
72
- --color-warning-500: oklch(0.769 0.188 70.08);
73
- --color-warning-600: oklch(0.666 0.179 58.318);
74
- --color-warning-700: oklch(0.555 0.163 48.998);
75
- --color-warning-800: oklch(0.473 0.137 46.201);
76
- --color-warning-900: oklch(0.414 0.112 45.904);
77
- --color-warning-950: oklch(0.279 0.077 45.635);
78
-
79
- --color-warning: var(--color-warning-600);
80
- --color-warning-contrast: var(--color-neutral-50);
81
-
82
- /* text color */
83
- --color-text-primary: var(--color-neutral-950);
84
- --color-text-secondary: var(--color-neutral-700);
85
- --color-text-placeholder: var(--color-neutral-400);
86
- --color-text-muted: var(--color-neutral-500);
87
- --color-text-disabled: var(--color-neutral-400);
88
- --color-text-inverse: var(--color-neutral-50);
89
-
90
- /* generic colors */
91
- --color-border: oklch(93% 0 0);
92
- --color-border-secondary: oklch(87% 0 0);
93
- /* Interaction border (hover/focus-adjacent) — darkens in light for a clear
2
+ /* Primary color palette - full 50-950 range */
3
+ --color-primary-50: oklch(0.962 0.018 272.314);
4
+ --color-primary-100: oklch(0.93 0.034 272.788);
5
+ --color-primary-200: oklch(0.87 0.065 274.039);
6
+ --color-primary-300: oklch(0.785 0.115 274.713);
7
+ --color-primary-400: oklch(0.673 0.182 276.935);
8
+ --color-primary-500: oklch(0.585 0.233 277.117);
9
+ --color-primary-600: oklch(0.511 0.262 276.966);
10
+ --color-primary-700: oklch(0.457 0.24 277.023);
11
+ --color-primary-800: oklch(0.398 0.195 277.366);
12
+ --color-primary-900: oklch(0.359 0.144 278.697);
13
+ --color-primary-950: oklch(0.257 0.09 281.288);
14
+
15
+ --color-primary: var(--color-primary-600);
16
+ --color-primary-contrast: var(--color-neutral-50);
17
+
18
+ /* Secondary color palette - Tailwind v4 gray */
19
+ --color-secondary-50: oklch(0.984 0.003 247.858);
20
+ --color-secondary-100: oklch(0.968 0.007 247.896);
21
+ --color-secondary-200: oklch(0.929 0.013 255.508);
22
+ --color-secondary-300: oklch(0.869 0.022 252.894);
23
+ --color-secondary-400: oklch(0.704 0.04 256.788);
24
+ --color-secondary-500: oklch(0.554 0.046 257.417);
25
+ --color-secondary-600: oklch(0.446 0.043 257.281);
26
+ --color-secondary-700: oklch(0.372 0.044 257.287);
27
+ --color-secondary-800: oklch(0.279 0.041 260.031);
28
+ --color-secondary-900: oklch(0.208 0.042 265.755);
29
+ --color-secondary-950: oklch(0.129 0.042 264.695);
30
+
31
+ --color-secondary: var(--color-secondary-600);
32
+ --color-secondary-contrast: var(--color-neutral-50);
33
+
34
+ /* Danger/Error color palette - full 50-950 range */
35
+ --color-danger-50: oklch(0.971 0.013 17.38);
36
+ --color-danger-100: oklch(0.936 0.032 17.717);
37
+ --color-danger-200: oklch(0.885 0.062 18.334);
38
+ --color-danger-300: oklch(0.808 0.114 19.571);
39
+ --color-danger-400: oklch(0.704 0.191 22.216);
40
+ --color-danger-500: oklch(0.637 0.237 25.331);
41
+ --color-danger-600: oklch(0.577 0.245 27.325);
42
+ --color-danger-700: oklch(0.505 0.213 27.518);
43
+ --color-danger-800: oklch(0.444 0.177 26.899);
44
+ --color-danger-900: oklch(0.396 0.141 25.723);
45
+ --color-danger-950: oklch(0.258 0.092 26.042);
46
+
47
+ --color-danger: var(--color-danger-600);
48
+ --color-danger-contrast: var(--color-neutral-50);
49
+
50
+ /* Success color palette - Tailwind v4 teal */
51
+ --color-success-50: oklch(0.984 0.014 180.72);
52
+ --color-success-100: oklch(0.953 0.051 180.801);
53
+ --color-success-200: oklch(0.91 0.096 180.426);
54
+ --color-success-300: oklch(0.855 0.138 181.071);
55
+ --color-success-400: oklch(0.777 0.152 181.912);
56
+ --color-success-500: oklch(0.704 0.14 182.503);
57
+ --color-success-600: oklch(0.6 0.118 184.704);
58
+ --color-success-700: oklch(0.511 0.096 186.391);
59
+ --color-success-800: oklch(0.437 0.078 188.216);
60
+ --color-success-900: oklch(0.386 0.063 188.416);
61
+ --color-success-950: oklch(0.277 0.046 192.524);
62
+
63
+ --color-success: var(--color-success-500);
64
+ --color-success-contrast: var(--color-neutral-50);
65
+
66
+ /* Warning color palette - full 50-950 range */
67
+ --color-warning-50: oklch(0.987 0.022 95.277);
68
+ --color-warning-100: oklch(0.962 0.059 95.617);
69
+ --color-warning-200: oklch(0.924 0.12 95.746);
70
+ --color-warning-300: oklch(0.879 0.169 91.605);
71
+ --color-warning-400: oklch(0.828 0.189 84.429);
72
+ --color-warning-500: oklch(0.769 0.188 70.08);
73
+ --color-warning-600: oklch(0.666 0.179 58.318);
74
+ --color-warning-700: oklch(0.555 0.163 48.998);
75
+ --color-warning-800: oklch(0.473 0.137 46.201);
76
+ --color-warning-900: oklch(0.414 0.112 45.904);
77
+ --color-warning-950: oklch(0.279 0.077 45.635);
78
+
79
+ --color-warning: var(--color-warning-600);
80
+ --color-warning-contrast: var(--color-neutral-50);
81
+
82
+ /* text color */
83
+ --color-text-primary: var(--color-neutral-950);
84
+ --color-text-secondary: var(--color-neutral-700);
85
+ --color-text-placeholder: var(--color-neutral-400);
86
+ --color-text-muted: var(--color-neutral-500);
87
+ --color-text-disabled: var(--color-neutral-400);
88
+ --color-text-inverse: var(--color-neutral-50);
89
+
90
+ /* generic colors */
91
+ --color-border: oklch(93% 0 0);
92
+ --color-border-secondary: oklch(87% 0 0);
93
+ /* Interaction border (hover/focus-adjacent) — darkens in light for a clear
94
94
  edge, mirror of --color-surface-hover but on the border axis. */
95
- --color-border-hover: oklch(80% 0 0);
96
- /* Surface elevation ladder: surface-sunken < background (floor) < surface < surface-raised < surface-overlay.
97
- In light mode raised surfaces are ~white (elevation via shadow + border); sunken is recessed below the floor. */
98
- --color-surface-sunken: oklch(94% 0 0);
99
- --color-surface: oklch(100% 0 0);
100
- --color-surface-raised: oklch(100% 0 0);
101
- --color-surface-overlay: oklch(100% 0 0);
102
- /* Interaction fill (the one tokenized state): translucent tint so it composites correctly
95
+ --color-border-hover: oklch(80% 0 0);
96
+ /* Surface elevation ladder elevation reads LIGHTER (monotonic, symmetric with dark mode).
97
+ Light mode: a soft neutral page (background, 96.5%) with WHITE cards (surface) lifting off it.
98
+ raised/overlay are also white — white is the ceiling, so levels above the card separate by
99
+ shadow + border (and modals by a dimmed backdrop), not by luminance. sunken (95%) is the
100
+ recessed well that lives INSIDE white cards (inputs, code, table zebra, tracks) — 5% below the
101
+ card, and also below the floor. */
102
+ --color-surface-sunken: oklch(97.5% 0 0);
103
+ --color-surface: oklch(100% 0 0);
104
+ /* white — Card, KPI, Table, Sidebar… lift off the gray floor */
105
+ --color-surface-raised: oklch(100% 0 0);
106
+ /* white — Modal/Drawer; pop via shadow + dimmed backdrop */
107
+ --color-surface-overlay: oklch(100% 0 0);
108
+ /* white — Dropdown/Popover/Tooltip; pop via shadow */
109
+ /* Interaction fill (the one tokenized state): translucent tint so it composites correctly
103
110
  over ANY surface level — darkens in light, lightens in dark. For hover/active highlights. */
104
- --color-surface-hover: oklch(0% 0 0 / 0.05);
105
- --color-chart-track: rgba(0, 0, 0, 0.06);
106
- --color-background: oklch(98.5% 0.002 247.839);
107
- /* DEPRECATED (remove next major): alias of --color-surface. Use the surface ladder. */
108
- --color-background-secondary: var(--color-surface);
109
- /* DEPRECATED (remove next major): recessed/subtle fills. Migrate per-usage to --color-surface-sunken
111
+ --color-surface-hover: oklch(0% 0 0 / 0.05);
112
+ --color-chart-track: rgba(0, 0, 0, 0.06);
113
+ --color-background: oklch(94.5% 0 0);
114
+ /* clearly-readable light-gray page canvas white cards lift off it */
115
+ /* DEPRECATED (remove next major): alias of --color-surface. Use the surface ladder. */
116
+ --color-background-secondary: var(--color-surface);
117
+ /* DEPRECATED (remove next major): recessed/subtle fills. Migrate per-usage to --color-surface-sunken
110
118
  (dark values below are inverted vs. a correct sunken token, so no blind alias). */
111
- --color-background-tertiary: oklch(90% 0.002 247.839);
112
- --color-background-quaternary: oklch(85% 0.002 247.839);
113
- --color-background-quinary: oklch(80% 0.002 247.839);
114
- --color-background-disabled: var(--color-neutral-100);
115
-
116
- --color-neutral-50: oklch(98.5% 0 0);
117
- --color-neutral-100: oklch(97% 0 0);
118
- --color-neutral-200: oklch(92.2% 0 0);
119
- --color-neutral-300: oklch(87% 0 0);
120
- --color-neutral-400: oklch(70.8% 0 0);
121
- --color-neutral-500: oklch(55.6% 0 0);
122
- --color-neutral-600: oklch(43.9% 0 0);
123
- --color-neutral-700: oklch(37.1% 0 0);
124
- --color-neutral-800: oklch(26.9% 0 0);
125
- --color-neutral-900: oklch(20.5% 0 0);
126
- --color-neutral-950: oklch(14.5% 0 0);
127
-
128
- /* Font family variables */
129
- --font-family-base: var(--font-sans);
130
- --font-cursive: "Birthstone", cursive;
131
- --font-weight-light: 300;
132
- --font-weight-normal: 400;
133
- --font-weight-medium: 500;
134
- --font-weight-semibold: 600;
135
- --font-weight-bold: 700;
136
- --font-weight-extrabold: 800;
137
-
138
- /* Form element variables — fixed px so they don't scale with root font-size */
139
- --form-min-h-sm: 32px;
140
- /* h-8 in Tailwind */
141
- --form-min-h-md: 40px;
142
- /* h-10 in Tailwind */
143
- --form-min-h-lg: 48px;
144
- /* h-12 in Tailwind */
145
-
146
- --form-label-pb: 8px;
147
- /* pb-2 in Tailwind */
148
-
149
- --form-px-sm: 12px;
150
- /* px-3 in Tailwind */
151
- --form-px-md: 14px;
152
- /* px-3.5 in Tailwind */
153
- --form-px-lg: 16px;
154
- /* px-4 in Tailwind */
155
-
156
- --form-py-sm: 8px;
157
- /* py-1 in Tailwind */
158
- --form-py-md: 10px;
159
- /* py-2 in Tailwind */
160
- --form-py-lg: 12px;
161
- /* py-3 in Tailwind */
162
-
163
- /* ============================================
119
+ --color-background-tertiary: oklch(90% 0.002 247.839);
120
+ --color-background-quaternary: oklch(85% 0.002 247.839);
121
+ --color-background-quinary: oklch(80% 0.002 247.839);
122
+ --color-background-disabled: var(--color-neutral-100);
123
+
124
+ --color-neutral-50: oklch(98.5% 0 0);
125
+ --color-neutral-100: oklch(97% 0 0);
126
+ --color-neutral-200: oklch(92.2% 0 0);
127
+ --color-neutral-300: oklch(87% 0 0);
128
+ --color-neutral-400: oklch(70.8% 0 0);
129
+ --color-neutral-500: oklch(55.6% 0 0);
130
+ --color-neutral-600: oklch(43.9% 0 0);
131
+ --color-neutral-700: oklch(37.1% 0 0);
132
+ --color-neutral-800: oklch(26.9% 0 0);
133
+ --color-neutral-900: oklch(20.5% 0 0);
134
+ --color-neutral-950: oklch(14.5% 0 0);
135
+
136
+ /* Font family variables */
137
+ --font-family-base: var(--font-sans);
138
+ --font-cursive: "Birthstone", cursive;
139
+ --font-weight-light: 300;
140
+ --font-weight-normal: 400;
141
+ --font-weight-medium: 500;
142
+ --font-weight-semibold: 600;
143
+ --font-weight-bold: 700;
144
+ --font-weight-extrabold: 800;
145
+
146
+ /* Form element variables — fixed px so they don't scale with root font-size */
147
+ --form-min-h-sm: 32px;
148
+ /* h-8 in Tailwind */
149
+ --form-min-h-md: 40px;
150
+ /* h-10 in Tailwind */
151
+ --form-min-h-lg: 48px;
152
+ /* h-12 in Tailwind */
153
+
154
+ --form-label-pb: 8px;
155
+ /* pb-2 in Tailwind */
156
+
157
+ --form-px-sm: 12px;
158
+ /* px-3 in Tailwind */
159
+ --form-px-md: 14px;
160
+ /* px-3.5 in Tailwind */
161
+ --form-px-lg: 16px;
162
+ /* px-4 in Tailwind */
163
+
164
+ --form-py-sm: 8px;
165
+ /* py-1 in Tailwind */
166
+ --form-py-md: 10px;
167
+ /* py-2 in Tailwind */
168
+ --form-py-lg: 12px;
169
+ /* py-3 in Tailwind */
170
+
171
+ /* ============================================
164
172
  BORDER RADIUS SYSTEM
165
173
  Change --radius-base to adjust the entire UI.
166
174
  Individual --*-radius variables can be overridden independently.
167
175
  ============================================ */
168
- --radius-base: 8px;
169
- /* Base radius token */
170
-
171
- /* Forms & Controls (1x base = 8px) */
172
- --form-radius: var(--radius-base);
173
-
174
- /* Overlays (1.5x base = 12px) */
175
- --dropdown-radius: calc(var(--radius-base) * 1.5);
176
- --tooltip-radius: calc(var(--radius-base) / 2);
177
- --codeblock-radius: calc(var(--radius-base) * 1.5);
178
- --popover-radius: calc(var(--radius-base) * 1.5);
179
-
180
- /* Feedback surfaces */
181
- --alert-radius: calc(var(--radius-base) * 1.5);
182
- --toast-radius: calc(var(--radius-base) * 2);
183
- --drawer-radius: calc(var(--radius-base) * 2);
184
- --metric-radius: calc(var(--radius-base) * 2);
185
-
186
- /* Surfaces (3x base = 24px) */
187
- --card-radius: calc(var(--radius-base) * 1.5);
188
- --modal-radius: calc(var(--radius-base) * 1.5);
189
-
190
- /* Special shapes - not part of scale */
191
- --segmented-radius: var(--form-radius);
192
- --avatar-radius: 50%;
193
-
194
- /* Focus ring styling */
195
- --form-focus-ring-width: 2px;
196
- --form-focus-ring-offset: -1px;
197
- --form-focus-ring-opacity: 0.1;
198
-
199
- /* Outline/border styling */
200
- --form-outline-width: 1px;
201
- --form-outline-focused-width: 2px;
202
-
203
- /* Button variables - inheriting from form variables */
204
- --button-radius: var(--form-radius);
205
- --button-min-h-sm: var(--form-min-h-sm);
206
- --button-min-h-md: var(--form-min-h-md);
207
- --button-min-h-lg: var(--form-min-h-lg);
208
-
209
- /* Button padding — fixed px */
210
- --button-px-sm: 12px;
211
- --button-py-sm: 0;
212
- --button-px-md: 14px;
213
- --button-py-md: 0;
214
- --button-px-lg: 20px;
215
- --button-py-lg: 0;
216
-
217
- /* Button icon-only padding — fixed px */
218
- --button-icon-p-sm: 6px;
219
- --button-icon-p-md: 8px;
220
- --button-icon-p-lg: 10px;
221
-
222
- /* Button icon-only sizes */
223
- --button-icon-size-sm: var(--form-min-h-sm);
224
- --button-icon-size-md: var(--form-min-h-md);
225
- --button-icon-size-lg: var(--form-min-h-lg);
226
-
227
- /* Badge variables */
228
- --badge-radius: 6px;
229
-
230
- /* Segmented variables - now defined in radius system above */
231
- --segmented-min-h-sm: var(--form-min-h-sm);
232
- --segmented-min-h-md: var(--form-min-h-md);
233
- --segmented-min-h-lg: var(--form-min-h-lg);
234
-
235
- /* Segmented padding */
236
- --segmented-px-sm: 8px;
237
- --segmented-px-md: 10px;
238
- --segmented-px-lg: 12px;
239
-
240
- --segmented-py-sm: var(--form-py-sm);
241
- --segmented-py-md: var(--form-py-md);
242
- --segmented-py-lg: var(--form-py-lg);
243
-
244
- /* Segmented inner offset — drives wrapper padding AND inner radius so
176
+ --radius-base: 12px;
177
+ /* Base radius token */
178
+
179
+ /* Forms & Controls (1x base = 8px) */
180
+ --form-radius: var(--radius-base);
181
+
182
+ /* Overlays (1.5x base = 12px) */
183
+ --dropdown-radius: calc(var(--radius-base) * 1.5);
184
+ --tooltip-radius: calc(var(--radius-base) / 1);
185
+ --codeblock-radius: calc(var(--radius-base) * 1.5);
186
+ --popover-radius: calc(var(--radius-base) * 1.5);
187
+
188
+ /* Feedback surfaces */
189
+ --alert-radius: calc(var(--radius-base) * 1.5);
190
+ --toast-radius: calc(var(--radius-base) * 2);
191
+ --drawer-radius: calc(var(--radius-base) * 2);
192
+ --metric-radius: calc(var(--radius-base) * 2);
193
+
194
+ /* Surfaces (3x base = 24px) */
195
+ --card-radius: calc(var(--radius-base) * 1.5);
196
+ --modal-radius: calc(var(--radius-base) * 1.5);
197
+
198
+ /* Special shapes - not part of scale */
199
+ --segmented-radius: var(--form-radius);
200
+ --avatar-radius: 50%;
201
+
202
+ /* Focus ring styling */
203
+ --form-focus-ring-width: 2px;
204
+ --form-focus-ring-offset: -1px;
205
+ --form-focus-ring-opacity: 0.1;
206
+
207
+ /* Outline/border styling */
208
+ --form-outline-width: 1px;
209
+ --form-outline-focused-width: 2px;
210
+
211
+ /* Button variables - inheriting from form variables */
212
+ --button-radius: var(--form-radius);
213
+ --button-min-h-sm: var(--form-min-h-sm);
214
+ --button-min-h-md: var(--form-min-h-md);
215
+ --button-min-h-lg: var(--form-min-h-lg);
216
+
217
+ /* Button padding — fixed px */
218
+ --button-px-sm: 12px;
219
+ --button-py-sm: 0;
220
+ --button-px-md: 14px;
221
+ --button-py-md: 0;
222
+ --button-px-lg: 20px;
223
+ --button-py-lg: 0;
224
+
225
+ /* Button icon-only padding — fixed px */
226
+ --button-icon-p-sm: 6px;
227
+ --button-icon-p-md: 8px;
228
+ --button-icon-p-lg: 10px;
229
+
230
+ /* Button icon-only sizes */
231
+ --button-icon-size-sm: var(--form-min-h-sm);
232
+ --button-icon-size-md: var(--form-min-h-md);
233
+ --button-icon-size-lg: var(--form-min-h-lg);
234
+
235
+ /* Badge variables */
236
+ --badge-radius: 6px;
237
+
238
+ /* Segmented variables - now defined in radius system above */
239
+ --segmented-min-h-sm: var(--form-min-h-sm);
240
+ --segmented-min-h-md: var(--form-min-h-md);
241
+ --segmented-min-h-lg: var(--form-min-h-lg);
242
+
243
+ /* Segmented padding */
244
+ --segmented-px-sm: 8px;
245
+ --segmented-px-md: 10px;
246
+ --segmented-px-lg: 12px;
247
+
248
+ --segmented-py-sm: var(--form-py-sm);
249
+ --segmented-py-md: var(--form-py-md);
250
+ --segmented-py-lg: var(--form-py-lg);
251
+
252
+ /* Segmented inner offset — drives wrapper padding AND inner radius so
245
253
  the sliding background + items stay concentric with the outer shell.
246
254
  border (1px) + padding (--segmented-padding) = total inset. */
247
- --segmented-padding: 0.125rem;
248
- /* 2px */
249
- --segmented-inner-radius: calc(var(--segmented-radius) - var(--segmented-padding) - 1px);
250
-
251
- /* Segmented sliding background */
252
- --segmented-active-bg: #ffffff;
253
- --segmented-active-shadow:
254
- 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
255
-
256
- /* Glass effect variables */
257
- --glass-layer-padding: 0.5px;
258
- --glass-layer-border-width: 0.5px;
259
- --glass-layer-inner-offset: 1.5px;
260
-
261
- /* Glass effect gradient variables */
262
- --glass-gradient-outer: linear-gradient(to bottom,
263
- rgba(250, 250, 250, 0.8) 0%,
264
- rgba(229, 229, 229, 0.8) 30%,
265
- rgba(242, 242, 242, 0.8) 70%,
266
- rgba(250, 250, 250, 0.8) 100%);
267
- --glass-gradient-inner: linear-gradient(to bottom,
268
- rgba(242, 242, 242, 0.8) 0%,
269
- rgba(250, 250, 250, 0.8) 100%);
270
-
271
- /* Chat message variables */
272
- --chat-bubble-border-sender: rgba(255, 255, 255, 0.4);
273
- --chat-bubble-border-receiver: rgba(255, 255, 255, 1);
274
-
275
- /* Avatar variables — fixed px */
276
- --avatar-size-xs: 24px;
277
- /* size-6 in Tailwind */
278
- --avatar-size-sm: 32px;
279
- /* size-8 in Tailwind */
280
- --avatar-size-md: 40px;
281
- /* size-10 in Tailwind */
282
- --avatar-size-lg: 48px;
283
- /* size-12 in Tailwind */
284
- --avatar-size-xl: 64px;
285
- /* size-16 in Tailwind */
286
-
287
- /* Avatar radius - now defined in radius system above */
288
-
289
- /* Carousel Variables */
290
- --carousel-container-width: 100%;
291
- /* Full width container */
292
- --carousel-slide-width: 66vw;
293
- /* Default slide width - can be overridden */
294
- --carousel-slide-height: 44rem;
295
- /* 384px = h-96 */
296
- --carousel-slide-gap: 16px;
297
- /* gap between slides */
298
- --carousel-controls-size: 48px;
299
- /* control button size */
300
- --carousel-controls-offset: 16px;
301
- /* distance from edge */
302
-
303
- /* Popover variables - radius now defined in radius system above */
304
- --popover-shadow:
305
- 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
306
- --popover-border-width: 1px;
307
- --popover-backdrop-opacity: 0.5;
308
- --popover-offset-sm: 8px;
309
- --popover-offset-md: 8px;
310
- --popover-offset-lg: 12px;
311
- --popover-max-width-sm: 256px;
312
- --popover-max-width-md: 384px;
313
- --popover-max-width-lg: 512px;
314
- --popover-padding-sm: 12px;
315
- --popover-padding-md: 12px;
316
- --popover-padding-lg: 16px;
317
-
318
- /* NavItem variables */
319
- --nav-item-radius: var(--radius-base);
320
- --nav-item-min-h: 40px;
321
- /* h-10 in Tailwind */
322
-
323
- /* NavItem padding — fixed px */
324
- --nav-item-px: 12px;
325
- /* px-3 in Tailwind */
326
- --nav-item-py: 10px;
327
- /* py-2.5 in Tailwind */
328
-
329
- /* Modal and Drawer */
330
- --overlay-bg: rgba(0, 0, 0, 0.65);
331
- --overlay-blur: 2px;
332
- --color-scale-background: oklch(0% 0 0);
333
- /* backdrop behind scaled content */
334
- /* Modal radius - now defined in radius system above */
335
-
336
- /* Shadow color presets for utility generation */
337
- --shadow-color-primary: var(--color-primary);
338
- --shadow-color-success: var(--color-success);
339
- --shadow-color-warning: var(--color-warning);
340
- --shadow-color-danger: var(--color-danger);
341
- --shadow-color-secondary: var(--color-secondary);
342
-
343
- /* Neumorphic tokens — light mode (multi-layer realistic) */
344
- --neu-raised-shadow:
345
- 1px 1px 2px rgba(0, 0, 0, 0.04), 3px 3px 6px rgba(0, 0, 0, 0.06),
346
- 6px 6px 14px rgba(0, 0, 0, 0.08), 12px 12px 28px rgba(0, 0, 0, 0.04),
347
- -1px -1px 2px rgba(255, 255, 255, 0.5),
348
- -3px -3px 6px rgba(255, 255, 255, 0.5),
349
- -6px -6px 14px rgba(255, 255, 255, 0.3),
350
- inset 0 1px 0 rgba(255, 255, 255, 0.6), inset 0 -1px 0 rgba(0, 0, 0, 0.04);
351
- --neu-inset-shadow:
352
- inset 1px 1px 2px rgba(0, 0, 0, 0.06),
353
- inset 2px 2px 4px rgba(0, 0, 0, 0.06),
354
- inset 4px 4px 8px rgba(0, 0, 0, 0.05),
355
- inset 8px 8px 16px rgba(0, 0, 0, 0.03),
356
- inset -1px -1px 2px rgba(255, 255, 255, 0.5),
357
- inset -3px -3px 6px rgba(255, 255, 255, 0.4),
358
- inset -6px -6px 12px rgba(255, 255, 255, 0.2),
359
- 0 1px 0 rgba(255, 255, 255, 0.5);
360
- --neu-circle-groove-shadow:
361
- inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.08),
362
- inset 1px 1px 3px rgba(0, 0, 0, 0.08),
363
- inset 2px 2px 5px rgba(0, 0, 0, 0.04), 0.5px 0.5px 1px rgba(0, 0, 0, 0.4),
364
- 1px 1px 2px rgba(0, 0, 0, 0.3);
365
- --neu-circle-disc-shadow:
366
- inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.05),
367
- inset 1px 1px 3px rgba(0, 0, 0, 0.04),
368
- inset -0.5px -0.5px 1px rgba(255, 255, 255, 0.4),
369
- inset -1px -1px 2px rgba(255, 255, 255, 0.3), 0 1px 2px rgba(0, 0, 0, 0.06),
370
- 0 2px 4px rgba(0, 0, 0, 0.04);
371
- --neu-raised-border: linear-gradient(145deg,
372
- rgba(255, 255, 255, 0.7) 0%,
373
- rgba(255, 255, 255, 0.35) 30%,
374
- transparent 50%,
375
- rgba(0, 0, 0, 0.06) 100%);
376
- --neu-inset-border: linear-gradient(180deg,
377
- rgba(0, 0, 0, 0.1) 0%,
378
- rgba(0, 0, 0, 0.04) 25%,
379
- rgba(255, 255, 255, 0.15) 50%,
380
- rgba(255, 255, 255, 0.35) 75%,
381
- rgba(255, 255, 255, 0.5) 100%);
255
+ --segmented-padding: 0.125rem;
256
+ /* 2px */
257
+ --segmented-inner-radius: calc(var(--segmented-radius) - var(--segmented-padding) - 1px);
258
+
259
+ /* Segmented sliding background */
260
+ --segmented-active-bg: #ffffff;
261
+ --segmented-active-shadow:
262
+ 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
263
+
264
+ /* Glass effect variables */
265
+ --glass-layer-padding: 0.5px;
266
+ --glass-layer-border-width: 0.5px;
267
+ --glass-layer-inner-offset: 1.5px;
268
+
269
+ /* Glass effect gradient variables */
270
+ --glass-gradient-outer: linear-gradient(to bottom,
271
+ rgba(250, 250, 250, 0.8) 0%,
272
+ rgba(229, 229, 229, 0.8) 30%,
273
+ rgba(242, 242, 242, 0.8) 70%,
274
+ rgba(250, 250, 250, 0.8) 100%);
275
+ --glass-gradient-inner: linear-gradient(to bottom,
276
+ rgba(242, 242, 242, 0.8) 0%,
277
+ rgba(250, 250, 250, 0.8) 100%);
278
+
279
+ /* Chat message variables */
280
+ --chat-bubble-border-sender: rgba(255, 255, 255, 0.4);
281
+ --chat-bubble-border-receiver: rgba(255, 255, 255, 1);
282
+
283
+ /* Avatar variables — fixed px */
284
+ --avatar-size-xs: 24px;
285
+ /* size-6 in Tailwind */
286
+ --avatar-size-sm: 32px;
287
+ /* size-8 in Tailwind */
288
+ --avatar-size-md: 40px;
289
+ /* size-10 in Tailwind */
290
+ --avatar-size-lg: 48px;
291
+ /* size-12 in Tailwind */
292
+ --avatar-size-xl: 64px;
293
+ /* size-16 in Tailwind */
294
+
295
+ /* Avatar radius - now defined in radius system above */
296
+
297
+ /* Carousel Variables */
298
+ --carousel-container-width: 100%;
299
+ /* Full width container */
300
+ --carousel-slide-width: 66vw;
301
+ /* Default slide width - can be overridden */
302
+ --carousel-slide-height: 44rem;
303
+ /* 384px = h-96 */
304
+ --carousel-slide-gap: 16px;
305
+ /* gap between slides */
306
+ --carousel-controls-size: 48px;
307
+ /* control button size */
308
+ --carousel-controls-offset: 16px;
309
+ /* distance from edge */
310
+
311
+ /* Popover variables - radius now defined in radius system above */
312
+ --popover-shadow:
313
+ 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
314
+ --popover-border-width: 1px;
315
+ --popover-backdrop-opacity: 0.5;
316
+ --popover-offset-sm: 8px;
317
+ --popover-offset-md: 8px;
318
+ --popover-offset-lg: 12px;
319
+ --popover-max-width-sm: 256px;
320
+ --popover-max-width-md: 384px;
321
+ --popover-max-width-lg: 512px;
322
+ --popover-padding-sm: 12px;
323
+ --popover-padding-md: 12px;
324
+ --popover-padding-lg: 16px;
325
+
326
+ /* NavItem variables */
327
+ --nav-item-radius: var(--radius-base);
328
+ --nav-item-min-h: 40px;
329
+ /* h-10 in Tailwind */
330
+
331
+ /* NavItem padding — fixed px */
332
+ --nav-item-px: 12px;
333
+ /* px-3 in Tailwind */
334
+ --nav-item-py: 10px;
335
+ /* py-2.5 in Tailwind */
336
+
337
+ /* Modal and Drawer */
338
+ --overlay-bg: rgba(0, 0, 0, 0.65);
339
+ --overlay-blur: 8px;
340
+ --color-scale-background: oklch(0% 0 0);
341
+ /* backdrop behind scaled content */
342
+ /* Modal radius - now defined in radius system above */
343
+
344
+ /* Shadow color presets for utility generation */
345
+ --shadow-color-primary: var(--color-primary);
346
+ --shadow-color-success: var(--color-success);
347
+ --shadow-color-warning: var(--color-warning);
348
+ --shadow-color-danger: var(--color-danger);
349
+ --shadow-color-secondary: var(--color-secondary);
350
+
351
+ /* Neumorphic tokens — light mode (multi-layer realistic) */
352
+ --neu-raised-shadow:
353
+ 1px 1px 2px rgba(0, 0, 0, 0.04), 3px 3px 6px rgba(0, 0, 0, 0.06),
354
+ 6px 6px 14px rgba(0, 0, 0, 0.08), 12px 12px 28px rgba(0, 0, 0, 0.04),
355
+ -1px -1px 2px rgba(255, 255, 255, 0.5),
356
+ -3px -3px 6px rgba(255, 255, 255, 0.5),
357
+ -6px -6px 14px rgba(255, 255, 255, 0.3),
358
+ inset 0 1px 0 rgba(255, 255, 255, 0.6), inset 0 -1px 0 rgba(0, 0, 0, 0.04);
359
+ --neu-inset-shadow:
360
+ inset 1px 1px 2px rgba(0, 0, 0, 0.06),
361
+ inset 2px 2px 4px rgba(0, 0, 0, 0.06),
362
+ inset 4px 4px 8px rgba(0, 0, 0, 0.05),
363
+ inset 8px 8px 16px rgba(0, 0, 0, 0.03),
364
+ inset -1px -1px 2px rgba(255, 255, 255, 0.5),
365
+ inset -3px -3px 6px rgba(255, 255, 255, 0.4),
366
+ inset -6px -6px 12px rgba(255, 255, 255, 0.2),
367
+ 0 1px 0 rgba(255, 255, 255, 0.5);
368
+ --neu-circle-groove-shadow:
369
+ inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.08),
370
+ inset 1px 1px 3px rgba(0, 0, 0, 0.08),
371
+ inset 2px 2px 5px rgba(0, 0, 0, 0.04), 0.5px 0.5px 1px rgba(0, 0, 0, 0.4),
372
+ 1px 1px 2px rgba(0, 0, 0, 0.3);
373
+ --neu-circle-disc-shadow:
374
+ inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.05),
375
+ inset 1px 1px 3px rgba(0, 0, 0, 0.04),
376
+ inset -0.5px -0.5px 1px rgba(255, 255, 255, 0.4),
377
+ inset -1px -1px 2px rgba(255, 255, 255, 0.3), 0 1px 2px rgba(0, 0, 0, 0.06),
378
+ 0 2px 4px rgba(0, 0, 0, 0.04);
379
+ --neu-raised-border: linear-gradient(145deg,
380
+ rgba(255, 255, 255, 0.7) 0%,
381
+ rgba(255, 255, 255, 0.35) 30%,
382
+ transparent 50%,
383
+ rgba(0, 0, 0, 0.06) 100%);
384
+ --neu-inset-border: linear-gradient(180deg,
385
+ rgba(0, 0, 0, 0.1) 0%,
386
+ rgba(0, 0, 0, 0.04) 25%,
387
+ rgba(255, 255, 255, 0.15) 50%,
388
+ rgba(255, 255, 255, 0.35) 75%,
389
+ rgba(255, 255, 255, 0.5) 100%);
382
390
  }
383
391
 
384
392
  /* ============================================
@@ -393,145 +401,331 @@
393
401
  Tailwind's generated theme styles.
394
402
  ============================================ */
395
403
  @layer theme {
396
- /* Scrollbar - light mode defaults.
404
+
405
+ /* Scrollbar - light mode defaults.
397
406
  These MUST live in @layer theme (not @layer base) alongside the .dark
398
407
  override below. The layer order is `theme, base, ...`, so values in
399
408
  @layer base win over @layer theme — if these defaults sat in base, the
400
409
  .dark override here would never apply and the scrollbar would render with
401
410
  the light (bright) thumb in dark mode. Keeping both in @layer theme means
402
411
  the .dark block (later source order, equal specificity) wins. */
403
- :root {
404
- /* Tell the UA which palette to paint native chrome (scrollbars, form
412
+ :root {
413
+ /* Tell the UA which palette to paint native chrome (scrollbars, form
405
414
  controls, etc.). Our custom `::-webkit-scrollbar` track/thumb are mostly
406
415
  transparent, so without this the browser composites its *default light*
407
416
  scrollbar underneath — in dark mode the visible (active) track then reads
408
417
  as an opaque white bar showing through the faint dark tint. `.dark` flips
409
418
  this to `dark` below so the UA scrollbar matches the surface. */
410
- color-scheme: light;
411
- --ui-scrollbar-size: 4px;
412
- --ui-scrollbar-thumb-rest: rgba(209, 213, 219, 0.3);
413
- --ui-scrollbar-thumb-active: rgb(209 213 219);
414
- --ui-scrollbar-track-rest: transparent;
415
- --ui-scrollbar-track-active: rgba(209, 213, 219, 0.1);
416
- }
417
-
418
- .dark {
419
- /* Paint native UA chrome (scrollbars, form controls) with the dark palette.
419
+ color-scheme: light;
420
+ --ui-scrollbar-size: 4px;
421
+ --ui-scrollbar-thumb-rest: rgba(209, 213, 219, 0.3);
422
+ --ui-scrollbar-thumb-active: rgb(209 213 219);
423
+ --ui-scrollbar-track-rest: transparent;
424
+ --ui-scrollbar-track-active: rgba(209, 213, 219, 0.1);
425
+ }
426
+
427
+ /* Realistic layered elevation shadows — light mode (source of truth).
428
+ Consumed by `@utility shadow-real-*` / `shadow-inner-real-*` in global.scss.
429
+ Tokenized here (NOT inline in the utility) so the `.dark` block below can
430
+ swap them — faint multi-layer black reads on light surfaces but is invisible
431
+ on the near-black dark floor, so dark gets a depth-pool + top-rim treatment.
432
+ 🔴 Named --elevation-* on purpose, NOT --shadow-*: a `--shadow-*` theme
433
+ property makes Tailwind v4 auto-generate a colliding `shadow-*` utility. */
434
+ :root {
435
+ --elevation-real-sm:
436
+ 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
437
+ 0.1px 3.6px 3.2px -4.1px rgba(0, 0, 0, 0.08);
438
+ --elevation-real-md:
439
+ 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
440
+ 0.1px 3.7px 3.3px -2px rgba(0, 0, 0, 0.09),
441
+ 0.4px 18.2px 16.2px -4.1px rgba(0, 0, 0, 0.06);
442
+ --elevation-real-lg:
443
+ 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
444
+ 0.1px 3.6px 3.2px -0.8px rgba(0, 0, 0, 0.06),
445
+ 0.2px 9.5px 8.5px -1.6px rgba(0, 0, 0, 0.06),
446
+ 0.5px 22.6px 20.2px -2.4px rgba(0, 0, 0, 0.05),
447
+ 1.1px 47.3px 42.2px -3.2px rgba(0, 0, 0, 0.04),
448
+ 2.1px 87.7px 78.3px -4.1px rgba(0, 0, 0, 0.03);
449
+ --elevation-real-xl:
450
+ 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
451
+ 0.2px 4.8px 4.3px -0.5px rgba(0, 0, 0, 0.06),
452
+ 0.4px 11.2px 10px -1px rgba(0, 0, 0, 0.06),
453
+ 0.7px 21.3px 19px -1.5px rgba(0, 0, 0, 0.05),
454
+ 1.2px 38.4px 34.3px -2px rgba(0, 0, 0, 0.05),
455
+ 2px 64.6px 57.7px -2.5px rgba(0, 0, 0, 0.04),
456
+ 3.1px 102.1px 91.2px -3px rgba(0, 0, 0, 0.03),
457
+ 4.7px 154.3px 137.8px -3.5px rgba(0, 0, 0, 0.03),
458
+ 6.8px 222.5px 198.7px -4.1px rgba(0, 0, 0, 0.02);
459
+ --elevation-real-2xl:
460
+ 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
461
+ 0.3px 6.2px 5.5px -0.3px rgba(0, 0, 0, 0.06),
462
+ 0.6px 14.8px 13.2px -0.6px rgba(0, 0, 0, 0.06),
463
+ 1px 27.1px 24.2px -0.9px rgba(0, 0, 0, 0.06),
464
+ 1.6px 45.2px 40.4px -1.2px rgba(0, 0, 0, 0.05),
465
+ 2.5px 70.3px 62.8px -1.5px rgba(0, 0, 0, 0.05),
466
+ 3.7px 104.2px 93.1px -1.8px rgba(0, 0, 0, 0.04),
467
+ 5.4px 148.9px 133px -2.1px rgba(0, 0, 0, 0.04),
468
+ 7.6px 207.4px 185.3px -2.4px rgba(0, 0, 0, 0.03),
469
+ 10.4px 283.8px 253.5px -2.7px rgba(0, 0, 0, 0.03),
470
+ 14px 381.6px 340.9px -3px rgba(0, 0, 0, 0.02),
471
+ 18.4px 503.7px 450px -3.3px rgba(0, 0, 0, 0.02);
472
+ --elevation-real-3xl:
473
+ 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
474
+ 0.4px 8.1px 7.2px -0.2px rgba(0, 0, 0, 0.06),
475
+ 0.8px 19.3px 17.2px -0.4px rgba(0, 0, 0, 0.06),
476
+ 1.3px 34.8px 31.1px -0.6px rgba(0, 0, 0, 0.06),
477
+ 2px 55.2px 49.3px -0.8px rgba(0, 0, 0, 0.06),
478
+ 3px 81.7px 73px -1px rgba(0, 0, 0, 0.05),
479
+ 4.3px 115.8px 103.4px -1.2px rgba(0, 0, 0, 0.05),
480
+ 6px 158.9px 142px -1.4px rgba(0, 0, 0, 0.05),
481
+ 8.2px 212.4px 189.7px -1.6px rgba(0, 0, 0, 0.04),
482
+ 10.9px 278.8px 249.1px -1.8px rgba(0, 0, 0, 0.04),
483
+ 14.2px 360.5px 322.1px -2px rgba(0, 0, 0, 0.03),
484
+ 18.2px 460.1px 411px -2.2px rgba(0, 0, 0, 0.03),
485
+ 23px 579.9px 518px -2.4px rgba(0, 0, 0, 0.02),
486
+ 28.7px 722.4px 645.3px -2.6px rgba(0, 0, 0, 0.02),
487
+ 35.3px 890.8px 796px -2.8px rgba(0, 0, 0, 0.02);
488
+
489
+ --elevation-inner-real-sm:
490
+ inset 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
491
+ inset 0px 3.6px 3.2px -1.5px rgba(0, 0, 0, 0.08);
492
+ --elevation-inner-real-md:
493
+ inset 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
494
+ inset 0px 3.7px 3.3px -2px rgba(0, 0, 0, 0.09),
495
+ inset 0px 18.2px 16.2px -4.1px rgba(0, 0, 0, 0.06);
496
+ --elevation-inner-real-lg:
497
+ inset 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
498
+ inset 0px 3.6px 3.2px -0.8px rgba(0, 0, 0, 0.06),
499
+ inset 0px 9.5px 8.5px -1.6px rgba(0, 0, 0, 0.06),
500
+ inset 0px 22.6px 20.2px -2.4px rgba(0, 0, 0, 0.05),
501
+ inset 0px 47.3px 42.2px -3.2px rgba(0, 0, 0, 0.04),
502
+ inset 0px 87.7px 78.3px -4.1px rgba(0, 0, 0, 0.03);
503
+ --elevation-inner-real-xl:
504
+ inset 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
505
+ inset 0px 4.8px 4.3px -0.5px rgba(0, 0, 0, 0.06),
506
+ inset 0px 11.2px 10px -1px rgba(0, 0, 0, 0.06),
507
+ inset 0px 21.3px 19px -1.5px rgba(0, 0, 0, 0.05),
508
+ inset 0px 38.4px 34.3px -2px rgba(0, 0, 0, 0.05),
509
+ inset 0px 64.6px 57.7px -2.5px rgba(0, 0, 0, 0.04),
510
+ inset 0px 102.1px 91.2px -3px rgba(0, 0, 0, 0.03),
511
+ inset 0px 154.3px 137.8px -3.5px rgba(0, 0, 0, 0.03),
512
+ inset 0px 222.5px 198.7px -4.1px rgba(0, 0, 0, 0.02);
513
+ --elevation-inner-real-2xl:
514
+ inset 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
515
+ inset 0px 6.2px 5.5px -0.3px rgba(0, 0, 0, 0.06),
516
+ inset 0px 14.8px 13.2px -0.6px rgba(0, 0, 0, 0.06),
517
+ inset 0px 27.1px 24.2px -0.9px rgba(0, 0, 0, 0.06),
518
+ inset 0px 45.2px 40.4px -1.2px rgba(0, 0, 0, 0.05),
519
+ inset 0px 70.3px 62.8px -1.5px rgba(0, 0, 0, 0.05),
520
+ inset 0px 104.2px 93.1px -1.8px rgba(0, 0, 0, 0.04),
521
+ inset 0px 148.9px 133px -2.1px rgba(0, 0, 0, 0.04),
522
+ inset 0px 207.4px 185.3px -2.4px rgba(0, 0, 0, 0.03),
523
+ inset 0px 283.8px 253.5px -2.7px rgba(0, 0, 0, 0.03),
524
+ inset 0px 381.6px 340.9px -3px rgba(0, 0, 0, 0.02),
525
+ inset 0px 503.7px 450px -3.3px rgba(0, 0, 0, 0.02);
526
+ --elevation-inner-real-3xl:
527
+ inset 0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
528
+ inset 0px 8.1px 7.2px -0.2px rgba(0, 0, 0, 0.06),
529
+ inset 0px 19.3px 17.2px -0.4px rgba(0, 0, 0, 0.06),
530
+ inset 0px 34.8px 31.1px -0.6px rgba(0, 0, 0, 0.06),
531
+ inset 0px 55.2px 49.3px -0.8px rgba(0, 0, 0, 0.06),
532
+ inset 0px 81.7px 73px -1px rgba(0, 0, 0, 0.05),
533
+ inset 0px 115.8px 103.4px -1.2px rgba(0, 0, 0, 0.05),
534
+ inset 0px 158.9px 142px -1.4px rgba(0, 0, 0, 0.05),
535
+ inset 0px 212.4px 189.7px -1.6px rgba(0, 0, 0, 0.04),
536
+ inset 0px 278.8px 249.1px -1.8px rgba(0, 0, 0, 0.04),
537
+ inset 0px 360.5px 322.1px -2px rgba(0, 0, 0, 0.03),
538
+ inset 0px 460.1px 411px -2.2px rgba(0, 0, 0, 0.03),
539
+ inset 0px 579.9px 518px -2.4px rgba(0, 0, 0, 0.02),
540
+ inset 0px 722.4px 645.3px -2.6px rgba(0, 0, 0, 0.02),
541
+ inset 0px 890.8px 796px -2.8px rgba(0, 0, 0, 0.02);
542
+ }
543
+
544
+ .dark {
545
+ /* Paint native UA chrome (scrollbars, form controls) with the dark palette.
420
546
  Pairs with `color-scheme: light` on :root — fixes the white native
421
547
  scrollbar track that showed through our transparent custom track in dark
422
548
  mode (Select, RichTextEditor dropdowns, any native-overflow surface). */
423
- color-scheme: dark;
549
+ color-scheme: dark;
424
550
 
425
- /* Text colors - inverted for dark backgrounds */
551
+ /* Text colors - inverted for dark backgrounds */
426
552
 
427
- /* Neutral text ramp (Linear's text reads essentially neutral off-white;
553
+ /* Neutral text ramp (Linear's text reads essentially neutral off-white;
428
554
  slate was too blue against the low-chroma surfaces). */
429
- --color-text-primary: var(--color-neutral-50);
430
- --color-text-secondary: var(--color-neutral-400);
431
- --color-text-placeholder: var(--color-neutral-600);
432
- --color-text-muted: var(--color-neutral-600);
433
- --color-text-disabled: var(--color-neutral-400);
434
- --color-text-inverse: var(--color-neutral-950);
435
-
436
- /* Base theme colors */
437
- --color-primary: var(--color-primary-400);
438
- --color-success: var(--color-success-400);
439
- --color-warning: var(--color-warning-400);
440
- --color-danger: var(--color-danger-400);
441
- --color-secondary: var(--color-secondary-400);
442
-
443
- /* Contrast colors for filled variants on semantic backgrounds */
444
- --color-primary-contrast: var(--color-neutral-50);
445
- --color-danger-contrast: var(--color-neutral-50);
446
- --color-success-contrast: var(--color-neutral-50);
447
- --color-warning-contrast: var(--color-neutral-50);
448
- --color-secondary-contrast: var(--color-neutral-50);
449
-
450
- /* Background colors - dark equivalents */
451
- /* Surface elevation ladder: sunken sits below the floor; surface levels ascend so each reads as raised. */
452
- /* Linear-mapped: near-black floor with a *faint* cool tint (chroma ~0.004,
453
- far subtler than slate closest to Linear's #08090a / #1c1d20 grays). */
454
- --color-surface-sunken: oklch(11% 0.004 255);
455
- --color-surface: oklch(17% 0.004 255);
456
- --color-surface-raised: oklch(20% 0.004 255);
457
- --color-surface-overlay: oklch(23% 0.005 255);
458
- --color-surface-hover: oklch(100% 0 0 / 0.07);
459
- --color-background: oklch(12.5% 0.004 255);
460
- /* DEPRECATED (remove next major): alias of --color-surface. */
461
- --color-background-secondary: var(--color-surface);
462
- /* DEPRECATED (remove next major): migrate per-usage to --color-surface-sunken / surface ladder. */
463
- --color-background-tertiary: oklch(22% 0 0);
464
- --color-background-quaternary: oklch(26% 0 0);
465
- --color-background-quinary: oklch(30% 0 0);
466
- --color-background-disabled: var(--color-neutral-800);
467
-
468
- /* Scale backdrop */
469
- --color-scale-background: oklch(8% 0.004 255);
470
-
471
- /* Border - Linear-style subtle light hairline (a faint lift that catches
555
+ --color-text-primary: var(--color-neutral-50);
556
+ --color-text-secondary: var(--color-neutral-400);
557
+ --color-text-placeholder: var(--color-neutral-600);
558
+ --color-text-muted: var(--color-neutral-600);
559
+ --color-text-disabled: var(--color-neutral-400);
560
+ --color-text-inverse: var(--color-neutral-950);
561
+
562
+ /* Base theme colors */
563
+ --color-primary: var(--color-primary-500);
564
+ --color-success: var(--color-success-400);
565
+ --color-warning: var(--color-warning-400);
566
+ --color-danger: var(--color-danger-400);
567
+ --color-secondary: var(--color-secondary-400);
568
+
569
+ /* Contrast colors for filled variants on semantic backgrounds */
570
+ --color-primary-contrast: var(--color-neutral-50);
571
+ --color-danger-contrast: var(--color-neutral-50);
572
+ --color-success-contrast: var(--color-neutral-50);
573
+ --color-warning-contrast: var(--color-neutral-50);
574
+ --color-secondary-contrast: var(--color-neutral-50);
575
+
576
+ /* Background colors - dark equivalents */
577
+ /* Surface elevation ladder. With a near-black floor (#010102, 6.9%), sunken
578
+ can't recess *below* the floor it sits between background and surface,
579
+ recessed relative to the cards where wells/tracks/code/zebra actually live
580
+ (that's its real job). surface raised → overlay ascend so each reads lifted.
581
+ Derived from hex: 0f1011 / 141516 / 18191a; faint cool tint (chroma ~0.003, hue ~248). */
582
+ --color-surface-sunken: oklch(12% 0.003 248);
583
+ --color-surface: oklch(17.2% 0.003 248);
584
+ --color-surface-raised: oklch(19.5% 0.003 248);
585
+ --color-surface-overlay: oklch(21.3% 0.003 248);
586
+ --color-surface-hover: oklch(100% 0 0 / 0.07);
587
+ --color-background: oklch(6.9% 0.008 284);
588
+ /* #010102 true-black canvas */
589
+ /* DEPRECATED (remove next major): alias of --color-surface. */
590
+ --color-background-secondary: var(--color-surface);
591
+ /* DEPRECATED (remove next major): migrate per-usage to --color-surface-sunken / surface ladder. */
592
+ --color-background-tertiary: oklch(22% 0 0);
593
+ --color-background-quaternary: oklch(26% 0 0);
594
+ --color-background-quinary: oklch(30% 0 0);
595
+ --color-background-disabled: var(--color-neutral-800);
596
+
597
+ /* Scale backdrop sits behind scaled content, darker than the near-black floor */
598
+ --color-scale-background: oklch(3% 0.006 280);
599
+
600
+ /* Border - Linear-style subtle light hairline (a faint lift that catches
472
601
  light on the dark surface, rather than a flat mid-gray line). */
473
- --color-border: oklch(100% 0.01 255 / 0.05);
474
- --color-border-secondary: oklch(100% 0.01 255 / 0.10);
475
- /* Interaction border — lightens in dark (higher alpha) so an edge "lifts"
602
+ --color-border: oklch(100% 0.01 255 / 0.05);
603
+ --color-border-secondary: oklch(100% 0.01 255 / 0.10);
604
+ /* Interaction border — lightens in dark (higher alpha) so an edge "lifts"
476
605
  on hover, matching the --color-surface-hover lighten-in-dark behavior. */
477
- --color-border-hover: oklch(100% 0.01 255 / 0.18);
478
- --color-chart-track: rgba(255, 255, 255, 0.05);
479
-
480
- /* Glass effect gradients - dark mode */
481
- --glass-gradient-outer: linear-gradient(135deg,
482
- var(--color-background-tertiary) 0%,
483
- var(--color-background-secondary) 30%,
484
- var(--color-background) 70%,
485
- var(--color-background-tertiary) 100%);
486
- --glass-gradient-inner: linear-gradient(to bottom,
487
- var(--color-background-secondary) 0%,
488
- var(--color-background) 100%);
489
-
490
- /* Scrollbar - dark mode */
491
- --ui-scrollbar-thumb-rest: rgba(75, 85, 99, 0.3);
492
- --ui-scrollbar-thumb-active: rgb(75 85 99, 0.75);
493
- --ui-scrollbar-track-rest: transparent;
494
- --ui-scrollbar-track-active: rgba(55, 65, 81, 0.1);
495
-
496
- /* Neumorphic tokens dark mode (multi-layer realistic) */
497
- --neu-raised-shadow:
498
- 1px 1px 2px rgba(0, 0, 0, 0.2), 3px 3px 6px rgba(0, 0, 0, 0.25),
499
- 6px 6px 14px rgba(0, 0, 0, 0.2), 12px 12px 28px rgba(0, 0, 0, 0.1),
500
- -1px -1px 2px rgba(255, 255, 255, 0.02),
501
- -3px -3px 6px rgba(255, 255, 255, 0.015),
502
- -6px -6px 14px rgba(255, 255, 255, 0.01),
503
- inset 0 1px 0 rgba(255, 255, 255, 0.04),
504
- inset 0 -1px 0 rgba(0, 0, 0, 0.15);
505
- --neu-inset-shadow:
506
- inset 1px 1px 2px rgba(0, 0, 0, 0.3),
507
- inset 2px 2px 4px rgba(0, 0, 0, 0.25),
508
- inset 4px 4px 8px rgba(0, 0, 0, 0.2),
509
- inset 8px 8px 16px rgba(0, 0, 0, 0.1),
510
- inset -1px -1px 2px rgba(255, 255, 255, 0.02),
511
- inset -3px -3px 6px rgba(255, 255, 255, 0.015),
512
- 0 1px 0 rgba(255, 255, 255, 0.04);
513
- --neu-circle-groove-shadow:
514
- inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.4),
515
- inset 1px 1px 2px rgba(0, 0, 0, 0.35),
516
- inset 2px 2px 5px rgba(0, 0, 0, 0.2),
517
- 0.5px 0.5px 1px rgba(255, 255, 255, 0.04),
518
- 1px 1px 2px rgba(255, 255, 255, 0.03);
519
- --neu-circle-disc-shadow:
520
- inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.2),
521
- inset 1px 1px 3px rgba(0, 0, 0, 0.15),
522
- inset -0.5px -0.5px 1px rgba(255, 255, 255, 0.04),
523
- inset -1px -1px 2px rgba(255, 255, 255, 0.03),
524
- 0 1px 2px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.2);
525
- --neu-raised-border: linear-gradient(145deg,
526
- rgba(255, 255, 255, 0.2) 0%,
527
- rgba(255, 255, 255, 0.08) 30%,
528
- transparent 50%,
529
- rgba(0, 0, 0, 0.12) 100%);
530
- --neu-inset-border: linear-gradient(180deg,
531
- rgba(0, 0, 0, 0.4) 0%,
532
- rgba(0, 0, 0, 0.15) 25%,
533
- rgba(255, 255, 255, 0.03) 50%,
534
- rgba(255, 255, 255, 0.08) 75%,
535
- rgba(255, 255, 255, 0.12) 100%);
536
- }
606
+ --color-border-hover: oklch(100% 0.01 255 / 0.18);
607
+
608
+ /* Realistic elevation shadows — dark mode. Faint black is invisible on the
609
+ near-black floor, so light's 6–15-layer penumbra is replaced by a stronger
610
+ black "depth-pool" (alpha 0.40–0.60) + a 1px white TOP RIM (inset 0 1px 0)
611
+ that defines the lit top edge — the primary "raised panel" cue in dark UIs
612
+ (Linear/GitHub/Radix). Rim alpha grows slightly with elevation. */
613
+ --elevation-real-sm:
614
+ inset 0 1px 0 rgba(255, 255, 255, 0.05),
615
+ 0 1px 2px rgba(0, 0, 0, 0.40),
616
+ 0 2px 6px -1px rgba(0, 0, 0, 0.45);
617
+ --elevation-real-md:
618
+ inset 0 1px 0 rgba(255, 255, 255, 0.06),
619
+ 0 1px 2px rgba(0, 0, 0, 0.40),
620
+ 0 4px 10px -2px rgba(0, 0, 0, 0.45),
621
+ 0 8px 20px -4px rgba(0, 0, 0, 0.40);
622
+ --elevation-real-lg:
623
+ inset 0 1px 0 rgba(255, 255, 255, 0.06),
624
+ 0 1px 2px rgba(0, 0, 0, 0.45),
625
+ 0 8px 18px -4px rgba(0, 0, 0, 0.50),
626
+ 0 16px 36px -6px rgba(0, 0, 0, 0.42);
627
+ --elevation-real-xl:
628
+ inset 0 1px 0 rgba(255, 255, 255, 0.07),
629
+ 0 1px 3px rgba(0, 0, 0, 0.50),
630
+ 0 12px 28px -6px rgba(0, 0, 0, 0.55),
631
+ 0 28px 56px -10px rgba(0, 0, 0, 0.45);
632
+ --elevation-real-2xl:
633
+ inset 0 1px 0 rgba(255, 255, 255, 0.07),
634
+ 0 2px 4px rgba(0, 0, 0, 0.50),
635
+ 0 18px 40px -8px rgba(0, 0, 0, 0.55),
636
+ 0 40px 80px -14px rgba(0, 0, 0, 0.48);
637
+ --elevation-real-3xl:
638
+ inset 0 1px 0 rgba(255, 255, 255, 0.08),
639
+ 0 2px 6px rgba(0, 0, 0, 0.55),
640
+ 0 28px 60px -10px rgba(0, 0, 0, 0.60),
641
+ 0 60px 120px -20px rgba(0, 0, 0, 0.50);
642
+
643
+ /* Inset/recessed in dark: a black inset barely shows on the near-black floor
644
+ (same reason outer shadows fail), so the recess is carried by the WHITE
645
+ BOTTOM LIP light pooling on the well's lower inner edge is the readable
646
+ "carved" cue in dark (inverse of the outer set's top rim). The white lip is
647
+ the primary signal here, NOT the black; the black inset only adds in-card
648
+ depth where the well sits on a lighter card. */
649
+ --elevation-inner-real-sm:
650
+ inset 0 1px 2px rgba(0, 0, 0, 0.30),
651
+ inset 0 -1px 0 rgba(255, 255, 255, 0.09);
652
+ --elevation-inner-real-md:
653
+ inset 0 1px 2px rgba(0, 0, 0, 0.30),
654
+ inset 0 3px 6px -1px rgba(0, 0, 0, 0.30),
655
+ inset 0 -1px 0 rgba(255, 255, 255, 0.10);
656
+ --elevation-inner-real-lg:
657
+ inset 0 2px 4px rgba(0, 0, 0, 0.32),
658
+ inset 0 6px 12px -2px rgba(0, 0, 0, 0.30),
659
+ inset 0 -1px 0 rgba(255, 255, 255, 0.10);
660
+ --elevation-inner-real-xl:
661
+ inset 0 2px 5px rgba(0, 0, 0, 0.35),
662
+ inset 0 10px 20px -4px rgba(0, 0, 0, 0.32),
663
+ inset 0 -1px 0 rgba(255, 255, 255, 0.11);
664
+ --elevation-inner-real-2xl:
665
+ inset 0 3px 6px rgba(0, 0, 0, 0.38),
666
+ inset 0 14px 28px -6px rgba(0, 0, 0, 0.34),
667
+ inset 0 -1px 0 rgba(255, 255, 255, 0.11);
668
+ --elevation-inner-real-3xl:
669
+ inset 0 3px 8px rgba(0, 0, 0, 0.40),
670
+ inset 0 20px 40px -8px rgba(0, 0, 0, 0.36),
671
+ inset 0 -1px 0 rgba(255, 255, 255, 0.12);
672
+ --color-chart-track: rgba(255, 255, 255, 0.05);
673
+
674
+ /* Glass effect gradients - dark mode */
675
+ --glass-gradient-outer: linear-gradient(135deg,
676
+ var(--color-background-tertiary) 0%,
677
+ var(--color-background-secondary) 30%,
678
+ var(--color-background) 70%,
679
+ var(--color-background-tertiary) 100%);
680
+ --glass-gradient-inner: linear-gradient(to bottom,
681
+ var(--color-background-secondary) 0%,
682
+ var(--color-background) 100%);
683
+
684
+ /* Scrollbar - dark mode */
685
+ --ui-scrollbar-thumb-rest: rgba(75, 85, 99, 0.3);
686
+ --ui-scrollbar-thumb-active: rgb(75 85 99, 0.75);
687
+ --ui-scrollbar-track-rest: transparent;
688
+ --ui-scrollbar-track-active: rgba(55, 65, 81, 0.1);
689
+
690
+ /* Neumorphic tokens — dark mode (multi-layer realistic) */
691
+ --neu-raised-shadow:
692
+ 1px 1px 2px rgba(0, 0, 0, 0.2), 3px 3px 6px rgba(0, 0, 0, 0.25),
693
+ 6px 6px 14px rgba(0, 0, 0, 0.2), 12px 12px 28px rgba(0, 0, 0, 0.1),
694
+ -1px -1px 2px rgba(255, 255, 255, 0.02),
695
+ -3px -3px 6px rgba(255, 255, 255, 0.015),
696
+ -6px -6px 14px rgba(255, 255, 255, 0.01),
697
+ inset 0 1px 0 rgba(255, 255, 255, 0.04),
698
+ inset 0 -1px 0 rgba(0, 0, 0, 0.15);
699
+ --neu-inset-shadow:
700
+ inset 1px 1px 2px rgba(0, 0, 0, 0.3),
701
+ inset 2px 2px 4px rgba(0, 0, 0, 0.25),
702
+ inset 4px 4px 8px rgba(0, 0, 0, 0.2),
703
+ inset 8px 8px 16px rgba(0, 0, 0, 0.1),
704
+ inset -1px -1px 2px rgba(255, 255, 255, 0.02),
705
+ inset -3px -3px 6px rgba(255, 255, 255, 0.015),
706
+ 0 1px 0 rgba(255, 255, 255, 0.04);
707
+ --neu-circle-groove-shadow:
708
+ inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.4),
709
+ inset 1px 1px 2px rgba(0, 0, 0, 0.35),
710
+ inset 2px 2px 5px rgba(0, 0, 0, 0.2),
711
+ 0.5px 0.5px 1px rgba(255, 255, 255, 0.04),
712
+ 1px 1px 2px rgba(255, 255, 255, 0.03);
713
+ --neu-circle-disc-shadow:
714
+ inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.2),
715
+ inset 1px 1px 3px rgba(0, 0, 0, 0.15),
716
+ inset -0.5px -0.5px 1px rgba(255, 255, 255, 0.04),
717
+ inset -1px -1px 2px rgba(255, 255, 255, 0.03),
718
+ 0 1px 2px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.2);
719
+ --neu-raised-border: linear-gradient(145deg,
720
+ rgba(255, 255, 255, 0.2) 0%,
721
+ rgba(255, 255, 255, 0.08) 30%,
722
+ transparent 50%,
723
+ rgba(0, 0, 0, 0.12) 100%);
724
+ --neu-inset-border: linear-gradient(180deg,
725
+ rgba(0, 0, 0, 0.4) 0%,
726
+ rgba(0, 0, 0, 0.15) 25%,
727
+ rgba(255, 255, 255, 0.03) 50%,
728
+ rgba(255, 255, 255, 0.08) 75%,
729
+ rgba(255, 255, 255, 0.12) 100%);
730
+ }
537
731
  }