@wealthx/shadcn 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/.turbo/turbo-build.log +235 -154
  2. package/CHANGELOG.md +6 -0
  3. package/dist/{chunk-6OJF6XRN.mjs → chunk-24FUO7TD.mjs} +4 -8
  4. package/dist/{chunk-4AJ5HWHD.mjs → chunk-2I5S2AMY.mjs} +3 -3
  5. package/dist/chunk-2SF672SZ.mjs +161 -0
  6. package/dist/{chunk-GPRJQ24C.mjs → chunk-34NWQURD.mjs} +2 -2
  7. package/dist/{chunk-MQ72DIBH.mjs → chunk-3GF7OVTP.mjs} +14 -5
  8. package/dist/chunk-3WMX6KWS.mjs +245 -0
  9. package/dist/{chunk-PMKODV6M.mjs → chunk-462HMNO4.mjs} +6 -10
  10. package/dist/chunk-4CX4SBRO.mjs +153 -0
  11. package/dist/chunk-4MN6UQHG.mjs +443 -0
  12. package/dist/{chunk-GLW2UO6O.mjs → chunk-5QQVZTVZ.mjs} +82 -61
  13. package/dist/{chunk-BGP2N52Z.mjs → chunk-66MI7Q4B.mjs} +5 -5
  14. package/dist/chunk-6FCGKSZX.mjs +268 -0
  15. package/dist/{chunk-CGOKTPXU.mjs → chunk-6JQFUE5I.mjs} +20 -23
  16. package/dist/{chunk-Z3MK2KKZ.mjs → chunk-7DHU4VGG.mjs} +7 -3
  17. package/dist/{chunk-VZ2NR7L3.mjs → chunk-7PYJD5JI.mjs} +35 -27
  18. package/dist/{chunk-JU2RUWHF.mjs → chunk-7XJHLGUV.mjs} +1 -1
  19. package/dist/{chunk-BMFN37JH.mjs → chunk-7YAU5CY6.mjs} +1 -1
  20. package/dist/chunk-A56YQQHG.mjs +402 -0
  21. package/dist/chunk-AH52LG6N.mjs +315 -0
  22. package/dist/{chunk-SLWCCURD.mjs → chunk-CLIN5525.mjs} +8 -4
  23. package/dist/{chunk-3VQNJ235.mjs → chunk-CSDO6VBW.mjs} +7 -0
  24. package/dist/chunk-D4ILTPOG.mjs +293 -0
  25. package/dist/{chunk-HS7TFG7V.mjs → chunk-D6ID6M4V.mjs} +1 -1
  26. package/dist/chunk-DOH3EHX7.mjs +378 -0
  27. package/dist/{chunk-MJIEMGRD.mjs → chunk-EFRENWEJ.mjs} +9 -17
  28. package/dist/{chunk-YBXCIF5Q.mjs → chunk-ERGGHC2V.mjs} +36 -49
  29. package/dist/{chunk-OXQQNQZI.mjs → chunk-FEZKMUCF.mjs} +10 -1
  30. package/dist/{chunk-55CEW76V.mjs → chunk-FH6QVUVZ.mjs} +1 -1
  31. package/dist/chunk-FMAXJ2SI.mjs +71 -0
  32. package/dist/chunk-FZIXGLMV.mjs +173 -0
  33. package/dist/{chunk-DS2AMHN2.mjs → chunk-GYMYRIZP.mjs} +2 -2
  34. package/dist/{chunk-KQDD5MU3.mjs → chunk-H45TKD34.mjs} +5 -5
  35. package/dist/{chunk-BBJBJSXQ.mjs → chunk-J5UICVJS.mjs} +1 -1
  36. package/dist/{chunk-RL772EH7.mjs → chunk-JHJHG4GO.mjs} +4 -12
  37. package/dist/{chunk-RN67642N.mjs → chunk-KMCGSZTX.mjs} +47 -41
  38. package/dist/{chunk-FHNT55I5.mjs → chunk-KUDCQ4FI.mjs} +4 -4
  39. package/dist/chunk-LE6YFY6D.mjs +209 -0
  40. package/dist/{chunk-NLLKTU4B.mjs → chunk-LLVQKSU3.mjs} +21 -17
  41. package/dist/{chunk-KKHTJNMM.mjs → chunk-MARPPFOJ.mjs} +8 -4
  42. package/dist/{chunk-6AFMNC42.mjs → chunk-N2PT566P.mjs} +15 -11
  43. package/dist/chunk-NLCKVHWB.mjs +161 -0
  44. package/dist/{chunk-YN5SYTOO.mjs → chunk-NQPOYKAQ.mjs} +9 -5
  45. package/dist/{chunk-ZZV5JVNW.mjs → chunk-NSLMILBT.mjs} +3 -7
  46. package/dist/chunk-NXA3CZ7A.mjs +248 -0
  47. package/dist/chunk-OGOYQ7BG.mjs +150 -0
  48. package/dist/{chunk-3NQGYJEZ.mjs → chunk-P6AM5V7O.mjs} +10 -18
  49. package/dist/{chunk-CZ3BW5GL.mjs → chunk-P76HMUI6.mjs} +5 -11
  50. package/dist/chunk-PCPLO5HT.mjs +671 -0
  51. package/dist/chunk-PG6K5XEC.mjs +475 -0
  52. package/dist/{chunk-5JGQAAQV.mjs → chunk-PJHPSRYD.mjs} +84 -62
  53. package/dist/{chunk-DDPA2XXS.mjs → chunk-PMB3A7V3.mjs} +2 -2
  54. package/dist/chunk-PR6V5XKM.mjs +209 -0
  55. package/dist/{chunk-46OFHMQA.mjs → chunk-Q76O3RIQ.mjs} +10 -6
  56. package/dist/chunk-QVKWW6KE.mjs +272 -0
  57. package/dist/chunk-RGU7HOEC.mjs +140 -0
  58. package/dist/{chunk-JF4PHPD5.mjs → chunk-RGVKLTLH.mjs} +4 -4
  59. package/dist/{chunk-VG6UF6UT.mjs → chunk-RP3SQYA3.mjs} +2 -2
  60. package/dist/chunk-RRBS6D63.mjs +163 -0
  61. package/dist/{chunk-UEL4RD5P.mjs → chunk-SMQ3DG25.mjs} +80 -67
  62. package/dist/chunk-SPJ5KXW7.mjs +199 -0
  63. package/dist/chunk-SYOD63OZ.mjs +225 -0
  64. package/dist/chunk-UFYSFDER.mjs +42 -0
  65. package/dist/chunk-VACKZOMY.mjs +190 -0
  66. package/dist/chunk-VLQZANBF.mjs +42 -0
  67. package/dist/chunk-WA6O6EUR.mjs +1885 -0
  68. package/dist/{chunk-E3K6O4FZ.mjs → chunk-WAZD7NFU.mjs} +5 -2
  69. package/dist/chunk-WG6JGJXB.mjs +165 -0
  70. package/dist/{chunk-I64K754C.mjs → chunk-WNGWBVLV.mjs} +2 -2
  71. package/dist/{chunk-3U7SD3MS.mjs → chunk-WOEHFRGB.mjs} +3 -3
  72. package/dist/{chunk-DKZRJOMF.mjs → chunk-XIRTEFKH.mjs} +12 -12
  73. package/dist/chunk-Y6DWJSKZ.mjs +79 -0
  74. package/dist/chunk-YKPROFLB.mjs +161 -0
  75. package/dist/{chunk-CJ46PDXE.mjs → chunk-ZRO5JO3H.mjs} +106 -66
  76. package/dist/{chunk-VYMHBV6D.mjs → chunk-ZU4NV6RG.mjs} +5 -3
  77. package/dist/components/ui/accordion.js +40 -4
  78. package/dist/components/ui/accordion.mjs +2 -2
  79. package/dist/components/ui/add-column-modal.js +789 -0
  80. package/dist/components/ui/add-column-modal.mjs +17 -0
  81. package/dist/components/ui/add-lead-modal.js +647 -0
  82. package/dist/components/ui/add-lead-modal.mjs +16 -0
  83. package/dist/components/ui/ai-assistant-drawer.js +686 -0
  84. package/dist/components/ui/ai-assistant-drawer.mjs +16 -0
  85. package/dist/components/ui/alert-dialog.js +37 -5
  86. package/dist/components/ui/alert-dialog.mjs +4 -4
  87. package/dist/components/ui/alert.js +37 -11
  88. package/dist/components/ui/alert.mjs +2 -2
  89. package/dist/components/ui/avatar.js +36 -8
  90. package/dist/components/ui/avatar.mjs +2 -2
  91. package/dist/components/ui/backoffice-alert-history-chart.js +624 -0
  92. package/dist/components/ui/backoffice-alert-history-chart.mjs +16 -0
  93. package/dist/components/ui/backoffice-contact-history-chart.js +687 -0
  94. package/dist/components/ui/backoffice-contact-history-chart.mjs +16 -0
  95. package/dist/components/ui/badge.js +37 -2
  96. package/dist/components/ui/badge.mjs +2 -2
  97. package/dist/components/ui/borrowing-capacity-line-chart.js +639 -0
  98. package/dist/components/ui/borrowing-capacity-line-chart.mjs +16 -0
  99. package/dist/components/ui/button.js +35 -3
  100. package/dist/components/ui/button.mjs +2 -2
  101. package/dist/components/ui/calendar.js +43 -19
  102. package/dist/components/ui/calendar.mjs +3 -3
  103. package/dist/components/ui/card.js +40 -4
  104. package/dist/components/ui/card.mjs +2 -2
  105. package/dist/components/ui/cash-balance-line-chart.js +627 -0
  106. package/dist/components/ui/cash-balance-line-chart.mjs +16 -0
  107. package/dist/components/ui/cashflow-bar-chart.js +123 -69
  108. package/dist/components/ui/cashflow-bar-chart.mjs +8 -8
  109. package/dist/components/ui/checkbox.js +36 -5
  110. package/dist/components/ui/checkbox.mjs +2 -3
  111. package/dist/components/ui/chip.js +37 -2
  112. package/dist/components/ui/chip.mjs +3 -3
  113. package/dist/components/ui/combobox.js +68 -49
  114. package/dist/components/ui/combobox.mjs +2 -2
  115. package/dist/components/ui/data-table.js +160 -88
  116. package/dist/components/ui/data-table.mjs +10 -11
  117. package/dist/components/ui/date-picker.js +44 -20
  118. package/dist/components/ui/date-picker.mjs +6 -7
  119. package/dist/components/ui/dialog.js +44 -12
  120. package/dist/components/ui/dialog.mjs +4 -4
  121. package/dist/components/ui/drawer.js +46 -10
  122. package/dist/components/ui/drawer.mjs +3 -3
  123. package/dist/components/ui/dropdown-menu.js +40 -16
  124. package/dist/components/ui/dropdown-menu.mjs +3 -3
  125. package/dist/components/ui/empty.js +41 -5
  126. package/dist/components/ui/empty.mjs +2 -2
  127. package/dist/components/ui/expense-bar-chart.js +165 -66
  128. package/dist/components/ui/expense-bar-chart.mjs +8 -8
  129. package/dist/components/ui/field.js +53 -21
  130. package/dist/components/ui/field.mjs +4 -4
  131. package/dist/components/ui/financial-cards.js +1002 -0
  132. package/dist/components/ui/financial-cards.mjs +24 -0
  133. package/dist/components/ui/financial-drawers.js +637 -0
  134. package/dist/components/ui/financial-drawers.mjs +17 -0
  135. package/dist/components/ui/financial-primitives.js +218 -0
  136. package/dist/components/ui/financial-primitives.mjs +22 -0
  137. package/dist/components/ui/financial-sections.js +1422 -0
  138. package/dist/components/ui/financial-sections.mjs +30 -0
  139. package/dist/components/ui/form-primitives.js +682 -0
  140. package/dist/components/ui/form-primitives.mjs +19 -0
  141. package/dist/components/ui/income-bar-chart.js +163 -65
  142. package/dist/components/ui/income-bar-chart.mjs +8 -8
  143. package/dist/components/ui/input-group.js +43 -7
  144. package/dist/components/ui/input-group.mjs +5 -5
  145. package/dist/components/ui/input-otp.js +39 -3
  146. package/dist/components/ui/input-otp.mjs +2 -2
  147. package/dist/components/ui/input.js +34 -2
  148. package/dist/components/ui/input.mjs +2 -2
  149. package/dist/components/ui/kanban-column.js +1143 -0
  150. package/dist/components/ui/kanban-column.mjs +20 -0
  151. package/dist/components/ui/label.js +35 -7
  152. package/dist/components/ui/label.mjs +2 -2
  153. package/dist/components/ui/opportunity-card.js +960 -0
  154. package/dist/components/ui/opportunity-card.mjs +20 -0
  155. package/dist/components/ui/opportunity-edit-modals.js +3360 -0
  156. package/dist/components/ui/opportunity-edit-modals.mjs +37 -0
  157. package/dist/components/ui/opportunity-summary-tab.js +4365 -0
  158. package/dist/components/ui/opportunity-summary-tab.mjs +34 -0
  159. package/dist/components/ui/pagination.js +35 -3
  160. package/dist/components/ui/pagination.mjs +3 -3
  161. package/dist/components/ui/pipeline-alerts.js +103 -0
  162. package/dist/components/ui/pipeline-alerts.mjs +8 -0
  163. package/dist/components/ui/pipeline-board.js +1408 -0
  164. package/dist/components/ui/pipeline-board.mjs +24 -0
  165. package/dist/components/ui/pipeline-chart.js +216 -0
  166. package/dist/components/ui/pipeline-chart.mjs +10 -0
  167. package/dist/components/ui/pipeline-dialogs.js +1183 -0
  168. package/dist/components/ui/pipeline-dialogs.mjs +23 -0
  169. package/dist/components/ui/pipeline-primitives.js +300 -0
  170. package/dist/components/ui/pipeline-primitives.mjs +11 -0
  171. package/dist/components/ui/popover.js +45 -4
  172. package/dist/components/ui/popover.mjs +3 -3
  173. package/dist/components/ui/progress.js +33 -1
  174. package/dist/components/ui/progress.mjs +2 -2
  175. package/dist/components/ui/property-cashflow-doughnut-chart.js +523 -0
  176. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +16 -0
  177. package/dist/components/ui/property-debt-equity-doughnut-chart.js +521 -0
  178. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +16 -0
  179. package/dist/components/ui/property-mobile-estimate-line-chart.js +682 -0
  180. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +16 -0
  181. package/dist/components/ui/radio-group.js +33 -1
  182. package/dist/components/ui/radio-group.mjs +2 -2
  183. package/dist/components/ui/select.js +66 -26
  184. package/dist/components/ui/select.mjs +3 -3
  185. package/dist/components/ui/separator.js +33 -1
  186. package/dist/components/ui/separator.mjs +2 -2
  187. package/dist/components/ui/sheet.js +37 -9
  188. package/dist/components/ui/sheet.mjs +3 -3
  189. package/dist/components/ui/skeleton.js +33 -1
  190. package/dist/components/ui/skeleton.mjs +2 -2
  191. package/dist/components/ui/slider.js +86 -102
  192. package/dist/components/ui/slider.mjs +2 -2
  193. package/dist/components/ui/spinner.js +33 -1
  194. package/dist/components/ui/spinner.mjs +2 -2
  195. package/dist/components/ui/stage-timeline.js +579 -0
  196. package/dist/components/ui/stage-timeline.mjs +15 -0
  197. package/dist/components/ui/switch.js +37 -4
  198. package/dist/components/ui/switch.mjs +2 -3
  199. package/dist/components/ui/table.js +37 -5
  200. package/dist/components/ui/table.mjs +2 -2
  201. package/dist/components/ui/tabs.js +36 -12
  202. package/dist/components/ui/tabs.mjs +2 -2
  203. package/dist/components/ui/textarea.js +34 -2
  204. package/dist/components/ui/textarea.mjs +2 -2
  205. package/dist/components/ui/toggle-group.js +35 -4
  206. package/dist/components/ui/toggle-group.mjs +3 -4
  207. package/dist/components/ui/toggle.js +35 -4
  208. package/dist/components/ui/toggle.mjs +2 -3
  209. package/dist/components/ui/tooltip.js +51 -22
  210. package/dist/components/ui/tooltip.mjs +3 -3
  211. package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +528 -0
  212. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +16 -0
  213. package/dist/components/ui/transactions-income-expense-bar-chart.js +76 -38
  214. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +8 -8
  215. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +528 -0
  216. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +16 -0
  217. package/dist/index.js +11616 -3831
  218. package/dist/index.mjs +333 -161
  219. package/dist/lib/theme-provider.js +10 -1
  220. package/dist/lib/theme-provider.mjs +1 -1
  221. package/dist/lib/typography.js +8 -0
  222. package/dist/lib/typography.mjs +3 -1
  223. package/dist/lib/utils.js +33 -1
  224. package/dist/lib/utils.mjs +1 -1
  225. package/dist/styles.css +1 -1
  226. package/package.json +140 -5
  227. package/src/components/index.tsx +296 -42
  228. package/src/components/ui/accordion.tsx +6 -3
  229. package/src/components/ui/add-column-modal.tsx +339 -0
  230. package/src/components/ui/add-lead-modal.tsx +290 -0
  231. package/src/components/ui/ai-assistant-drawer.tsx +408 -0
  232. package/src/components/ui/alert-dialog.tsx +80 -54
  233. package/src/components/ui/alert.tsx +28 -28
  234. package/src/components/ui/avatar.tsx +30 -29
  235. package/src/components/ui/backoffice-alert-history-chart.tsx +260 -0
  236. package/src/components/ui/backoffice-contact-history-chart.tsx +325 -0
  237. package/src/components/ui/badge.tsx +17 -15
  238. package/src/components/ui/borrowing-capacity-line-chart.tsx +357 -0
  239. package/src/components/ui/button.tsx +30 -27
  240. package/src/components/ui/calendar.tsx +53 -67
  241. package/src/components/ui/card.tsx +27 -24
  242. package/src/components/ui/cash-balance-line-chart.tsx +302 -0
  243. package/src/components/ui/cashflow-bar-chart.tsx +104 -77
  244. package/src/components/ui/chart-shared.tsx +176 -15
  245. package/src/components/ui/checkbox.tsx +30 -26
  246. package/src/components/ui/combobox.tsx +78 -72
  247. package/src/components/ui/data-table.tsx +160 -99
  248. package/src/components/ui/date-picker.tsx +0 -2
  249. package/src/components/ui/dialog.tsx +70 -60
  250. package/src/components/ui/drawer.tsx +57 -48
  251. package/src/components/ui/dropdown-menu.tsx +90 -82
  252. package/src/components/ui/empty.tsx +31 -27
  253. package/src/components/ui/expense-bar-chart.tsx +83 -65
  254. package/src/components/ui/field.tsx +70 -62
  255. package/src/components/ui/financial-cards.tsx +830 -0
  256. package/src/components/ui/financial-drawers.tsx +339 -0
  257. package/src/components/ui/financial-primitives.tsx +331 -0
  258. package/src/components/ui/financial-sections.tsx +672 -0
  259. package/src/components/ui/form-primitives.tsx +536 -0
  260. package/src/components/ui/income-bar-chart.tsx +79 -60
  261. package/src/components/ui/input-group.tsx +41 -34
  262. package/src/components/ui/input-otp.tsx +29 -24
  263. package/src/components/ui/input.tsx +8 -8
  264. package/src/components/ui/kanban-column.tsx +333 -0
  265. package/src/components/ui/label.tsx +9 -12
  266. package/src/components/ui/opportunity-card.tsx +616 -0
  267. package/src/components/ui/opportunity-edit-modals.tsx +2528 -0
  268. package/src/components/ui/opportunity-summary-tab.tsx +579 -0
  269. package/src/components/ui/pipeline-alerts.tsx +74 -0
  270. package/src/components/ui/pipeline-board.tsx +268 -0
  271. package/src/components/ui/pipeline-chart.tsx +173 -0
  272. package/src/components/ui/pipeline-dialogs.tsx +303 -0
  273. package/src/components/ui/pipeline-primitives.tsx +108 -0
  274. package/src/components/ui/popover.tsx +41 -36
  275. package/src/components/ui/property-cashflow-doughnut-chart.tsx +188 -0
  276. package/src/components/ui/property-debt-equity-doughnut-chart.tsx +185 -0
  277. package/src/components/ui/property-mobile-estimate-line-chart.tsx +393 -0
  278. package/src/components/ui/select.tsx +65 -52
  279. package/src/components/ui/sheet.tsx +55 -52
  280. package/src/components/ui/slider.tsx +54 -77
  281. package/src/components/ui/stage-timeline.tsx +205 -0
  282. package/src/components/ui/switch.tsx +42 -29
  283. package/src/components/ui/table.tsx +28 -28
  284. package/src/components/ui/tabs.tsx +22 -28
  285. package/src/components/ui/textarea.tsx +8 -8
  286. package/src/components/ui/toggle-group.tsx +0 -2
  287. package/src/components/ui/toggle.tsx +13 -15
  288. package/src/components/ui/tooltip.tsx +30 -28
  289. package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +191 -0
  290. package/src/components/ui/transactions-income-expense-bar-chart.tsx +45 -38
  291. package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +191 -0
  292. package/src/lib/theme-provider.tsx +10 -0
  293. package/src/lib/typography.ts +9 -0
  294. package/src/lib/utils.ts +41 -3
  295. package/src/styles/globals.css +371 -124
  296. package/src/styles/styles-css.ts +1 -1
  297. package/tsup.config.ts +27 -0
  298. package/dist/chunk-3EQP72AW.mjs +0 -58
  299. package/dist/chunk-K74JRTJR.mjs +0 -105
  300. package/dist/chunk-V7CNWJT3.mjs +0 -10
@@ -11,17 +11,23 @@
11
11
  * (e.g. when packages/shadcn is outside the Vite root apps/docs).
12
12
  * These cover all state-dependent classes used in Checkbox, Button, etc.
13
13
  */
14
- @source inline("h-2 h-10 h-12 h-16 h-20 h-24 h-28 h-32 h-36 h-40 h-44 h-48 size-10 size-12 size-14 size-16 rounded-full w-4/5 shrink-0 bg-muted transition-all");
14
+ @source inline("h-2 h-10 h-12 h-16 h-20 h-24 h-28 h-32 h-36 h-40 h-44 h-48 size-10 size-12 size-14 size-16 rounded-full w-4/5 shrink-0 bg-muted transition-all flex-wrap gap-x-4 gap-y-1.5 mt-3");
15
15
 
16
16
  @source inline("has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 border-border border-destructive/40 bg-destructive/10 border-warning/40 bg-warning/10 text-warning border-success/40 bg-success/10 text-success border-info/40 bg-info/10 text-info *:data-[slot=alert-description]:text-warning/90 *:data-[slot=alert-description]:text-success/90 *:data-[slot=alert-description]:text-info/90 *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-destructive [&>svg]:text-warning [&>svg]:text-success [&>svg]:text-info");
17
17
 
18
18
  @source inline("focus-visible:border-primary focus-visible:ring-primary/20 focus:bg-primary/5 focus:text-foreground data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 select-none scroll-my-1 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-disabled:pointer-events-none data-disabled:opacity-50 data-selected:bg-primary/10 data-active:bg-primary/10 data-active:text-foreground data-active:shadow-sm data-active:bg-transparent data-active:shadow-none data-active:after:opacity-100 after:bg-primary data-popup-open:border-primary data-popup-open:ring-[3px] data-popup-open:ring-primary/20 data-highlighted:bg-primary/5 data-highlighted:text-foreground px-1.5");
19
+
20
+ /* Toggle / ToggleGroup pressed-state safelist — data-pressed is set by @base-ui/react/toggle */
21
+ @source inline("data-pressed:bg-primary/10 data-pressed:inset-ring data-pressed:inset-ring-primary data-pressed:text-foreground data-pressed:hover:bg-primary/10 data-pressed:hover:text-foreground");
19
22
  @source inline("bg-foreground/50 hover:bg-foreground/5 focus:ring-border focus:ring-2 focus:ring-offset-0 fixed inset-0 translate-x-[-50%] translate-y-[-50%] max-w-[calc(100%-2rem)] sm:max-w-lg border-t pt-4 justify-end gap-1.5");
20
23
 
21
24
  @source inline("data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20");
22
25
 
23
26
  @source inline("h-(--accordion-panel-height) data-starting-style:h-0 data-ending-style:h-0 focus-visible:ring-foreground/30 [&[data-panel-open]>svg]:rotate-180");
24
27
 
28
+ /* Button typography tokens — custom utility classes that may not be picked up by glob scan */
29
+ @source inline("text-button text-button-xs");
30
+
25
31
  /* Animation safelist — all data-[open]/data-[ending-style] animation classes used by base-ui components */
26
32
  @source inline("animate-in animate-out animate-pulse animate-caret-blink fade-in-0 fade-out-0 zoom-in-95 data-open:slide-in-from-bottom data-open:slide-in-from-left data-open:slide-in-from-right data-open:slide-in-from-top data-ending-style:slide-out-to-bottom data-ending-style:slide-out-to-left data-ending-style:slide-out-to-right data-ending-style:slide-out-to-top data-open:duration-500 data-ending-style:duration-300 data-open:bg-accent data-open:text-accent-foreground");
27
33
 
@@ -63,17 +69,44 @@
63
69
  --color-input: var(--input);
64
70
  --color-ring: var(--ring);
65
71
 
66
- /* === WealthX additions: brand secondary (tenant-driven navy) === */
72
+ /* === WealthX additions: brand colors (tenant-driven) === */
73
+ --color-brand-primary: var(--primary);
67
74
  --color-brand-secondary: var(--brand-secondary);
68
75
  --color-brand-secondary-foreground: var(--brand-secondary-foreground);
69
76
 
77
+ /* === WealthX additions: text semantic aliases === */
78
+ --color-text-secondary: var(--muted-foreground);
79
+ --color-text-disabled: color-mix(
80
+ in srgb,
81
+ var(--muted-foreground) 50%,
82
+ transparent
83
+ );
84
+
85
+ /* === WealthX additions: chart tokens === */
86
+ --chart-grid: color-mix(in srgb, var(--border) 60%, transparent);
87
+
70
88
  /* === WealthX additions: state colors (not in shadcn defaults) === */
71
89
  --color-warning: var(--warning);
72
90
  --color-warning-foreground: var(--warning-foreground);
91
+ --color-warning-text: var(--warning-text);
73
92
  --color-success: var(--success);
74
93
  --color-success-foreground: var(--success-foreground);
94
+ --color-success-text: var(--success-text);
75
95
  --color-info: var(--info);
76
96
  --color-info-foreground: var(--info-foreground);
97
+ --color-info-text: var(--info-text);
98
+ --color-destructive-text: var(--destructive-text);
99
+
100
+ /* === Pipeline stage palette — defined in ThemeProvider, fallback to defaults here === */
101
+ /* Real values are injected by ThemeProvider via useThemeVars() / inline style. */
102
+ /* Do NOT use these :root fallbacks for production — they won't react to tenant theme. */
103
+ --color-stage-1: oklch(0.894 0.208 163);
104
+ --color-stage-2: oklch(0.894 0.208 163 / 80%);
105
+ --color-stage-3: oklch(0.894 0.208 163 / 60%);
106
+ --color-stage-4: oklch(0.894 0.208 163 / 40%);
107
+ --color-stage-5: oklch(0.894 0.208 163 / 20%);
108
+ /* Auto foreground for stage-colored backgrounds (WCAG contrast of primary) */
109
+ --color-stage-fg: var(--primary-foreground);
77
110
 
78
111
  /* === Chart colors (WealthX series) === */
79
112
  --color-chart-1: var(--chart-1);
@@ -99,19 +132,29 @@
99
132
  --radius-xl: 0px;
100
133
 
101
134
  /* === Font family === */
102
- --font-sans: "Figtree", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
135
+ --font-sans:
136
+ "Figtree", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
137
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
103
138
 
104
139
  /* === Accordion animations === */
105
140
  --animate-accordion-down: accordion-down 0.2s ease-out;
106
141
  --animate-accordion-up: accordion-up 0.2s ease-out;
107
142
 
108
143
  @keyframes accordion-down {
109
- from { height: 0; }
110
- to { height: var(--accordion-panel-height); }
144
+ from {
145
+ height: 0;
146
+ }
147
+ to {
148
+ height: var(--accordion-panel-height);
149
+ }
111
150
  }
112
151
  @keyframes accordion-up {
113
- from { height: var(--accordion-panel-height); }
114
- to { height: 0; }
152
+ from {
153
+ height: var(--accordion-panel-height);
154
+ }
155
+ to {
156
+ height: 0;
157
+ }
115
158
  }
116
159
  }
117
160
 
@@ -122,50 +165,104 @@
122
165
  * ========================================================================== */
123
166
  :root {
124
167
  /* Display */
125
- --typography-display-large-size: 4rem; --typography-display-large-leading: 4.5rem; --typography-display-large-weight: 700; --typography-display-large-tracking: -0.03125rem;
126
- --typography-display-medium-size: 3rem; --typography-display-medium-leading: 3.5rem; --typography-display-medium-weight: 700;
127
- --typography-display-small-size: 2.125rem; --typography-display-small-leading: 2.625rem; --typography-display-small-weight: 600;
168
+ --typography-display-large-size: 4rem;
169
+ --typography-display-large-leading: 4.5rem;
170
+ --typography-display-large-weight: 700;
171
+ --typography-display-large-tracking: -0.03125rem;
172
+ --typography-display-medium-size: 3rem;
173
+ --typography-display-medium-leading: 3.5rem;
174
+ --typography-display-medium-weight: 700;
175
+ --typography-display-small-size: 2.125rem;
176
+ --typography-display-small-leading: 2.625rem;
177
+ --typography-display-small-weight: 600;
128
178
 
129
179
  /* Headings */
130
- --typography-h1-size: 2rem; --typography-h1-leading: 2.5rem; --typography-h1-weight: 700;
131
- --typography-h2-size: 1.75rem; --typography-h2-leading: 2.25rem; --typography-h2-weight: 600;
132
- --typography-h3-size: 1.5rem; --typography-h3-leading: 2rem; --typography-h3-weight: 600;
133
- --typography-h4-size: 1.3125rem; --typography-h4-leading: 1.75rem; --typography-h4-weight: 600;
134
- --typography-h5-size: 1.125rem; --typography-h5-leading: 1.5rem; --typography-h5-weight: 600;
135
- --typography-h6-size: 1rem; --typography-h6-leading: 1.375rem; --typography-h6-weight: 600;
180
+ --typography-h1-size: 2rem;
181
+ --typography-h1-leading: 2.5rem;
182
+ --typography-h1-weight: 700;
183
+ --typography-h2-size: 1.75rem;
184
+ --typography-h2-leading: 2.25rem;
185
+ --typography-h2-weight: 600;
186
+ --typography-h3-size: 1.5rem;
187
+ --typography-h3-leading: 2rem;
188
+ --typography-h3-weight: 600;
189
+ --typography-h4-size: 1.3125rem;
190
+ --typography-h4-leading: 1.75rem;
191
+ --typography-h4-weight: 600;
192
+ --typography-h5-size: 1.125rem;
193
+ --typography-h5-leading: 1.5rem;
194
+ --typography-h5-weight: 600;
195
+ --typography-h6-size: 1rem;
196
+ --typography-h6-leading: 1.375rem;
197
+ --typography-h6-weight: 600;
136
198
 
137
199
  /* Body */
138
- --typography-body-large-size: 1.125rem; --typography-body-large-leading: 1.75rem; --typography-body-large-weight: 400;
139
- --typography-body-medium-size: 1rem; --typography-body-medium-leading: 1.5rem; --typography-body-medium-weight: 400;
140
- --typography-body-small-size: 0.875rem; --typography-body-small-leading: 1.25rem; --typography-body-small-weight: 400;
200
+ --typography-body-large-size: 1.125rem;
201
+ --typography-body-large-leading: 1.75rem;
202
+ --typography-body-large-weight: 400;
203
+ --typography-body-medium-size: 1rem;
204
+ --typography-body-medium-leading: 1.5rem;
205
+ --typography-body-medium-weight: 400;
206
+ --typography-body-small-size: 0.875rem;
207
+ --typography-body-small-leading: 1.25rem;
208
+ --typography-body-small-weight: 400;
141
209
 
142
210
  /* Labels */
143
- --typography-label-large-size: 1rem; --typography-label-large-leading: 1.25rem; --typography-label-large-weight: 600;
144
- --typography-label-medium-size: 0.875rem; --typography-label-medium-leading: 1.125rem; --typography-label-medium-weight: 600;
145
- --typography-label-small-size: 0.75rem; --typography-label-small-leading: 1rem; --typography-label-small-weight: 600; --typography-label-small-tracking: 0.03125rem;
211
+ --typography-label-large-size: 1rem;
212
+ --typography-label-large-leading: 1.25rem;
213
+ --typography-label-large-weight: 600;
214
+ --typography-label-medium-size: 0.875rem;
215
+ --typography-label-medium-leading: 1.125rem;
216
+ --typography-label-medium-weight: 600;
217
+ --typography-label-small-size: 0.75rem;
218
+ --typography-label-small-leading: 1rem;
219
+ --typography-label-small-weight: 600;
220
+ --typography-label-small-tracking: 0.03125rem;
221
+
222
+ /* Button */
223
+ --typography-button-default-size: 0.875rem;
224
+ --typography-button-default-leading: 1.25rem;
225
+ --typography-button-default-weight: 500;
226
+ --typography-button-xs-size: 0.75rem;
227
+ --typography-button-xs-leading: 1.25rem;
228
+ --typography-button-xs-weight: 500;
146
229
 
147
230
  /* Utility */
148
- --typography-caption-size: 0.75rem; --typography-caption-leading: 1rem; --typography-caption-weight: 400;
149
- --typography-overline-size: 0.625rem; --typography-overline-leading: 0.875rem; --typography-overline-weight: 600; --typography-overline-tracking: 0.09375rem;
150
- --typography-code-size: 0.875rem; --typography-code-leading: 1.25rem; --typography-code-weight: 400;
231
+ --typography-caption-size: 0.75rem;
232
+ --typography-caption-leading: 1rem;
233
+ --typography-caption-weight: 400;
234
+ --typography-overline-size: 0.625rem;
235
+ --typography-overline-leading: 0.875rem;
236
+ --typography-overline-weight: 600;
237
+ --typography-overline-tracking: 0.09375rem;
238
+ --typography-code-size: 0.875rem;
239
+ --typography-code-leading: 1.25rem;
240
+ --typography-code-weight: 400;
151
241
  }
152
242
 
153
243
  /* Tablet — ≤1024px */
154
244
  @media (max-width: 1024px) {
155
245
  :root {
156
- --typography-display-large-size: 3.6rem; --typography-display-large-leading: 4.05rem;
157
- --typography-display-medium-size: 2.7rem; --typography-display-medium-leading: 3.15rem;
158
- --typography-display-small-size: 1.9125rem; --typography-display-small-leading: 2.3625rem;
246
+ --typography-display-large-size: 3.6rem;
247
+ --typography-display-large-leading: 4.05rem;
248
+ --typography-display-medium-size: 2.7rem;
249
+ --typography-display-medium-leading: 3.15rem;
250
+ --typography-display-small-size: 1.9125rem;
251
+ --typography-display-small-leading: 2.3625rem;
159
252
  }
160
253
  }
161
254
 
162
255
  /* Mobile — ≤768px */
163
256
  @media (max-width: 768px) {
164
257
  :root {
165
- --typography-display-large-size: 2.5rem; --typography-display-large-leading: 2.8125rem;
166
- --typography-display-medium-size: 2rem; --typography-display-medium-leading: 2.334rem;
167
- --typography-h1-size: 1.75rem; --typography-h1-leading: 2.1875rem;
168
- --typography-h2-size: 1.5rem; --typography-h2-leading: 1.93rem;
258
+ --typography-display-large-size: 2.5rem;
259
+ --typography-display-large-leading: 2.8125rem;
260
+ --typography-display-medium-size: 2rem;
261
+ --typography-display-medium-leading: 2.334rem;
262
+ --typography-h1-size: 1.75rem;
263
+ --typography-h1-leading: 2.1875rem;
264
+ --typography-h2-size: 1.5rem;
265
+ --typography-h2-leading: 1.93rem;
169
266
  }
170
267
  }
171
268
 
@@ -176,32 +273,140 @@
176
273
  * ========================================================================== */
177
274
  @layer utilities {
178
275
  /* Display */
179
- .text-display-large { font-size: var(--typography-display-large-size); line-height: var(--typography-display-large-leading); font-weight: var(--typography-display-large-weight); letter-spacing: var(--typography-display-large-tracking, normal); font-family: var(--font-sans); }
180
- .text-display-medium { font-size: var(--typography-display-medium-size); line-height: var(--typography-display-medium-leading); font-weight: var(--typography-display-medium-weight); font-family: var(--font-sans); }
181
- .text-display-small { font-size: var(--typography-display-small-size); line-height: var(--typography-display-small-leading); font-weight: var(--typography-display-small-weight); font-family: var(--font-sans); }
276
+ .text-display-large {
277
+ font-size: var(--typography-display-large-size);
278
+ line-height: var(--typography-display-large-leading);
279
+ font-weight: var(--typography-display-large-weight);
280
+ letter-spacing: var(--typography-display-large-tracking, normal);
281
+ font-family: var(--font-sans);
282
+ }
283
+ .text-display-medium {
284
+ font-size: var(--typography-display-medium-size);
285
+ line-height: var(--typography-display-medium-leading);
286
+ font-weight: var(--typography-display-medium-weight);
287
+ font-family: var(--font-sans);
288
+ }
289
+ .text-display-small {
290
+ font-size: var(--typography-display-small-size);
291
+ line-height: var(--typography-display-small-leading);
292
+ font-weight: var(--typography-display-small-weight);
293
+ font-family: var(--font-sans);
294
+ }
182
295
 
183
296
  /* Headings */
184
- .text-h1 { font-size: var(--typography-h1-size); line-height: var(--typography-h1-leading); font-weight: var(--typography-h1-weight); font-family: var(--font-sans); }
185
- .text-h2 { font-size: var(--typography-h2-size); line-height: var(--typography-h2-leading); font-weight: var(--typography-h2-weight); font-family: var(--font-sans); }
186
- .text-h3 { font-size: var(--typography-h3-size); line-height: var(--typography-h3-leading); font-weight: var(--typography-h3-weight); font-family: var(--font-sans); }
187
- .text-h4 { font-size: var(--typography-h4-size); line-height: var(--typography-h4-leading); font-weight: var(--typography-h4-weight); font-family: var(--font-sans); }
188
- .text-h5 { font-size: var(--typography-h5-size); line-height: var(--typography-h5-leading); font-weight: var(--typography-h5-weight); font-family: var(--font-sans); }
189
- .text-h6 { font-size: var(--typography-h6-size); line-height: var(--typography-h6-leading); font-weight: var(--typography-h6-weight); font-family: var(--font-sans); }
297
+ .text-h1 {
298
+ font-size: var(--typography-h1-size);
299
+ line-height: var(--typography-h1-leading);
300
+ font-weight: var(--typography-h1-weight);
301
+ font-family: var(--font-sans);
302
+ }
303
+ .text-h2 {
304
+ font-size: var(--typography-h2-size);
305
+ line-height: var(--typography-h2-leading);
306
+ font-weight: var(--typography-h2-weight);
307
+ font-family: var(--font-sans);
308
+ }
309
+ .text-h3 {
310
+ font-size: var(--typography-h3-size);
311
+ line-height: var(--typography-h3-leading);
312
+ font-weight: var(--typography-h3-weight);
313
+ font-family: var(--font-sans);
314
+ }
315
+ .text-h4 {
316
+ font-size: var(--typography-h4-size);
317
+ line-height: var(--typography-h4-leading);
318
+ font-weight: var(--typography-h4-weight);
319
+ font-family: var(--font-sans);
320
+ }
321
+ .text-h5 {
322
+ font-size: var(--typography-h5-size);
323
+ line-height: var(--typography-h5-leading);
324
+ font-weight: var(--typography-h5-weight);
325
+ font-family: var(--font-sans);
326
+ }
327
+ .text-h6 {
328
+ font-size: var(--typography-h6-size);
329
+ line-height: var(--typography-h6-leading);
330
+ font-weight: var(--typography-h6-weight);
331
+ font-family: var(--font-sans);
332
+ }
190
333
 
191
334
  /* Body */
192
- .text-body-large { font-size: var(--typography-body-large-size); line-height: var(--typography-body-large-leading); font-weight: var(--typography-body-large-weight); font-family: var(--font-sans); }
193
- .text-body-medium { font-size: var(--typography-body-medium-size); line-height: var(--typography-body-medium-leading); font-weight: var(--typography-body-medium-weight); font-family: var(--font-sans); }
194
- .text-body-small { font-size: var(--typography-body-small-size); line-height: var(--typography-body-small-leading); font-weight: var(--typography-body-small-weight); font-family: var(--font-sans); }
335
+ .text-body-large {
336
+ font-size: var(--typography-body-large-size);
337
+ line-height: var(--typography-body-large-leading);
338
+ font-weight: var(--typography-body-large-weight);
339
+ font-family: var(--font-sans);
340
+ }
341
+ .text-body-medium {
342
+ font-size: var(--typography-body-medium-size);
343
+ line-height: var(--typography-body-medium-leading);
344
+ font-weight: var(--typography-body-medium-weight);
345
+ font-family: var(--font-sans);
346
+ }
347
+ .text-body-small {
348
+ font-size: var(--typography-body-small-size);
349
+ line-height: var(--typography-body-small-leading);
350
+ font-weight: var(--typography-body-small-weight);
351
+ font-family: var(--font-sans);
352
+ }
195
353
 
196
354
  /* Labels */
197
- .text-label-large { font-size: var(--typography-label-large-size); line-height: var(--typography-label-large-leading); font-weight: var(--typography-label-large-weight); font-family: var(--font-sans); }
198
- .text-label-medium { font-size: var(--typography-label-medium-size); line-height: var(--typography-label-medium-leading); font-weight: var(--typography-label-medium-weight); font-family: var(--font-sans); }
199
- .text-label-small { font-size: var(--typography-label-small-size); line-height: var(--typography-label-small-leading); font-weight: var(--typography-label-small-weight); letter-spacing: var(--typography-label-small-tracking); font-family: var(--font-sans); }
355
+ .text-label-large {
356
+ font-size: var(--typography-label-large-size);
357
+ line-height: var(--typography-label-large-leading);
358
+ font-weight: var(--typography-label-large-weight);
359
+ font-family: var(--font-sans);
360
+ }
361
+ .text-label-medium {
362
+ font-size: var(--typography-label-medium-size);
363
+ line-height: var(--typography-label-medium-leading);
364
+ font-weight: var(--typography-label-medium-weight);
365
+ font-family: var(--font-sans);
366
+ }
367
+ .text-label-small {
368
+ font-size: var(--typography-label-small-size);
369
+ line-height: var(--typography-label-small-leading);
370
+ font-weight: var(--typography-label-small-weight);
371
+ letter-spacing: var(--typography-label-small-tracking);
372
+ font-family: var(--font-sans);
373
+ }
374
+
375
+ /* Button */
376
+ .text-button {
377
+ font-size: var(--typography-button-default-size);
378
+ line-height: var(--typography-button-default-leading);
379
+ font-weight: var(--typography-button-default-weight);
380
+ font-family: var(--font-sans);
381
+ }
382
+ .text-button-xs {
383
+ font-size: var(--typography-button-xs-size);
384
+ line-height: var(--typography-button-xs-leading);
385
+ font-weight: var(--typography-button-xs-weight);
386
+ font-family: var(--font-sans);
387
+ }
200
388
 
201
389
  /* Utility */
202
- .text-caption { font-size: var(--typography-caption-size); line-height: var(--typography-caption-leading); font-weight: var(--typography-caption-weight); font-family: var(--font-sans); }
203
- .text-overline { font-size: var(--typography-overline-size); line-height: var(--typography-overline-leading); font-weight: var(--typography-overline-weight); letter-spacing: var(--typography-overline-tracking); text-transform: uppercase; font-family: var(--font-sans); }
204
- .text-code { font-size: var(--typography-code-size); line-height: var(--typography-code-leading); font-weight: var(--typography-code-weight); font-family: var(--font-mono, ui-monospace, monospace); }
390
+ .text-caption {
391
+ font-size: var(--typography-caption-size);
392
+ line-height: var(--typography-caption-leading);
393
+ font-weight: var(--typography-caption-weight);
394
+ font-family: var(--font-sans);
395
+ }
396
+ .text-overline {
397
+ font-size: var(--typography-overline-size);
398
+ line-height: var(--typography-overline-leading);
399
+ font-weight: var(--typography-overline-weight);
400
+ letter-spacing: var(--typography-overline-tracking);
401
+ text-transform: uppercase;
402
+ font-family: var(--font-sans);
403
+ }
404
+ .text-code {
405
+ font-size: var(--typography-code-size);
406
+ line-height: var(--typography-code-leading);
407
+ font-weight: var(--typography-code-weight);
408
+ font-family: var(--font-mono, ui-monospace, monospace);
409
+ }
205
410
  }
206
411
 
207
412
  /* ==========================================================================
@@ -221,74 +426,96 @@
221
426
  --radius: 0; /* WealthX: sharp corners — no border radius */
222
427
 
223
428
  /* Core surfaces — from palette/background/* */
224
- --background: oklch(1.000 0 0); /* #FFFFFF — palette/background/default */
225
- --foreground: oklch(0.152 0.020 235.0); /* #040D13 — palette/text/primary */
429
+ --background: oklch(1 0 0); /* #FFFFFF — palette/background/default */
430
+ --foreground: oklch(0.152 0.02 235); /* #040D13 — palette/text/primary */
226
431
 
227
432
  /* Card — from color/background/elevated */
228
- --card: oklch(1.000 0 0); /* #FFFFFF */
229
- --card-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
433
+ --card: oklch(1 0 0); /* #FFFFFF */
434
+ --card-foreground: oklch(0.152 0.02 235); /* #040D13 */
230
435
 
231
436
  /* Popover — from color/background/elevated */
232
- --popover: oklch(1.000 0 0); /* #FFFFFF */
233
- --popover-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
437
+ --popover: oklch(1 0 0); /* #FFFFFF */
438
+ --popover-foreground: oklch(0.152 0.02 235); /* #040D13 */
234
439
 
235
440
  /* Primary — TENANT-DRIVEN (white-label)
236
441
  * Default: WealthX green #33FF99
237
442
  * Override at runtime via ThemeProvider for each tenant */
238
- --primary: oklch(0.894 0.208 163.0); /* #33FF99 — palette/primary/main */
239
- --primary-foreground: oklch(0.152 0.020 235.0); /* #040D13 — contrastText for bright primary (button text readability) */
443
+ --primary: oklch(0.894 0.208 163); /* #33FF99 — palette/primary/main */
444
+ --primary-foreground: oklch(
445
+ 0.152 0.02 235
446
+ ); /* #040D13 — contrastText for bright primary (button text readability) */
240
447
 
241
448
  /* Secondary — maps to WealthX paper/subtle background */
242
- --secondary: oklch(0.977 0.004 236.5); /* #F5F8FA — palette/background/paper */
243
- --secondary-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
449
+ --secondary: oklch(
450
+ 0.977 0.004 236.5
451
+ ); /* #F5F8FA — palette/background/paper */
452
+ --secondary-foreground: oklch(0.152 0.02 235); /* #040D13 */
244
453
 
245
454
  /* Muted — secondary text and disabled states */
246
- --muted: oklch(0.977 0.004 236.5); /* #F5F8FA — palette/background/paper */
247
- --muted-foreground: oklch(0.465 0.032 241.8); /* #4A5C6A — palette/text/secondary */
455
+ --muted: oklch(0.977 0.004 236.5); /* #F5F8FA — palette/background/paper */
456
+ --muted-foreground: oklch(
457
+ 0.465 0.032 241.8
458
+ ); /* #4A5C6A — palette/text/secondary */
248
459
 
249
460
  /* Accent — tertiary surface for hover/active states */
250
- --accent: oklch(0.936 0.003 247.9); /* #E8EAEC — color/background/tertiary */
251
- --accent-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
461
+ --accent: oklch(0.936 0.003 247.9); /* #E8EAEC — color/background/tertiary */
462
+ --accent-foreground: oklch(0.152 0.02 235); /* #040D13 */
252
463
 
253
464
  /* Destructive — error state */
254
- --destructive: oklch(0.643 0.215 28.8); /* #F44336 — palette/error/main */
255
- --destructive-foreground: oklch(1.000 0 0); /* #FFFFFF — light text on red */
465
+ --destructive: oklch(0.643 0.215 28.8); /* #F44336 — palette/error/main */
466
+ --destructive-foreground: oklch(1 0 0); /* #FFFFFF — light text on red */
256
467
 
257
468
  /* Borders */
258
- --border: oklch(0.936 0.003 247.9); /* #E8EAEC — color/border/default */
259
- --input: oklch(0.936 0.003 247.9); /* #E8EAEC — same as border */
260
- --ring: oklch(0.894 0.208 163.0); /* #33FF99 — primary (focus ring uses brand color) */
469
+ --border: oklch(0.936 0.003 247.9); /* #E8EAEC — color/border/default */
470
+ --input: oklch(0.936 0.003 247.9); /* #E8EAEC — same as border */
471
+ --ring: oklch(
472
+ 0.894 0.208 163
473
+ ); /* #33FF99 — primary (focus ring uses brand color) */
261
474
 
262
475
  /* WealthX custom: state colors */
263
- --warning: oklch(0.770 0.174 64.1); /* #FF9800 — palette/warning/main */
264
- --warning-foreground: oklch(1.000 0 0); /* #FFFFFF */
265
- --success: oklch(0.673 0.162 144.2); /* #4CAF50 — palette/success/main */
266
- --success-foreground: oklch(1.000 0 0); /* #FFFFFF */
267
- --info: oklch(0.658 0.169 248.8); /* #2196F3palette/info/main */
268
- --info-foreground: oklch(1.000 0 0); /* #FFFFFF */
476
+ --warning: oklch(0.77 0.174 64.1); /* #FF9800 — palette/warning/main */
477
+ --warning-foreground: oklch(1 0 0); /* #FFFFFF */
478
+ --warning-text: oklch(
479
+ 0.44 0.14 58
480
+ ); /* ~#7A5200darkened for text on light bg (4.5:1 on white) */
481
+ --success: oklch(0.673 0.162 144.2); /* #4CAF50 — palette/success/main */
482
+ --success-foreground: oklch(1 0 0); /* #FFFFFF */
483
+ --success-text: oklch(
484
+ 0.4 0.12 145
485
+ ); /* ~#1B5E20 — darkened for text on light bg */
486
+ --info: oklch(0.658 0.169 248.8); /* #2196F3 — palette/info/main */
487
+ --info-foreground: oklch(1 0 0); /* #FFFFFF */
488
+ --info-text: oklch(
489
+ 0.4 0.13 250
490
+ ); /* ~#0D47A1 — darkened for text on light bg */
491
+ --destructive-text: oklch(
492
+ 0.44 0.2 28.8
493
+ ); /* ~#8B0000 — darkened for text on light bg */
269
494
 
270
495
  /* Chart series — WealthX Charts collection */
271
- --chart-1: oklch(0.590 0.217 261.8); /* #2B72FB — series/blue */
272
- --chart-2: oklch(0.747 0.086 204.1); /* #64BDC6 — series/teal */
273
- --chart-3: oklch(0.846 0.160 94.6); /* #EECA34 — series/yellow */
274
- --chart-4: oklch(0.702 0.192 39.0); /* #FE6A35 — series/orange */
275
- --chart-5: oklch(0.661 0.213 27.5); /* #FA4B42 — series/red */
496
+ --chart-1: oklch(0.59 0.217 261.8); /* #2B72FB — series/blue */
497
+ --chart-2: oklch(0.747 0.086 204.1); /* #64BDC6 — series/teal */
498
+ --chart-3: oklch(0.846 0.16 94.6); /* #EECA34 — series/yellow */
499
+ --chart-4: oklch(0.702 0.192 39); /* #FE6A35 — series/orange */
500
+ --chart-5: oklch(0.661 0.213 27.5); /* #FA4B42 — series/red */
276
501
 
277
502
  /* Brand secondary — WealthX dark navy #162029 (tenant-driven via ThemeProvider)
278
503
  * NOTE: --secondary is reserved by shadcn for surface/paper (#F5F8FA).
279
504
  * --brand-secondary holds the WealthX brand navy used by the Secondary button variant. */
280
- --brand-secondary: oklch(0.238 0.023 246.1); /* #162029 — palette/secondary/main */
281
- --brand-secondary-foreground: oklch(1.000 0 0); /* #FFFFFF — white on dark navy */
505
+ --brand-secondary: oklch(
506
+ 0.238 0.023 246.1
507
+ ); /* #162029 — palette/secondary/main */
508
+ --brand-secondary-foreground: oklch(1 0 0); /* #FFFFFF — white on dark navy */
282
509
 
283
510
  /* Sidebar — uses paper/secondary background */
284
- --sidebar: oklch(0.977 0.004 236.5); /* #F5F8FA */
285
- --sidebar-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
286
- --sidebar-primary: oklch(0.894 0.208 163.0); /* #33FF99 — tenant primary */
287
- --sidebar-primary-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
288
- --sidebar-accent: oklch(0.936 0.003 247.9); /* #E8EAEC */
289
- --sidebar-accent-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
290
- --sidebar-border: oklch(0.936 0.003 247.9); /* #E8EAEC */
291
- --sidebar-ring: oklch(0.465 0.032 241.8); /* #4A5C6A */
511
+ --sidebar: oklch(0.977 0.004 236.5); /* #F5F8FA */
512
+ --sidebar-foreground: oklch(0.152 0.02 235); /* #040D13 */
513
+ --sidebar-primary: oklch(0.894 0.208 163); /* #33FF99 — tenant primary */
514
+ --sidebar-primary-foreground: oklch(0.152 0.02 235); /* #040D13 */
515
+ --sidebar-accent: oklch(0.936 0.003 247.9); /* #E8EAEC */
516
+ --sidebar-accent-foreground: oklch(0.152 0.02 235); /* #040D13 */
517
+ --sidebar-border: oklch(0.936 0.003 247.9); /* #E8EAEC */
518
+ --sidebar-ring: oklch(0.465 0.032 241.8); /* #4A5C6A */
292
519
  }
293
520
 
294
521
  /* ==========================================================================
@@ -298,11 +525,11 @@
298
525
  * ========================================================================== */
299
526
  .dark {
300
527
  /* Core surfaces */
301
- --background: oklch(0.188 0.013 248.5); /* #0F1419 — dark navy */
302
- --foreground: oklch(0.977 0.004 236.5); /* #F5F8FA — light text */
528
+ --background: oklch(0.188 0.013 248.5); /* #0F1419 — dark navy */
529
+ --foreground: oklch(0.977 0.004 236.5); /* #F5F8FA — light text */
303
530
 
304
531
  /* Card */
305
- --card: oklch(0.238 0.023 246.1); /* #162029 — secondary as dark card */
532
+ --card: oklch(0.238 0.023 246.1); /* #162029 — secondary as dark card */
306
533
  --card-foreground: oklch(0.977 0.004 236.5);
307
534
 
308
535
  /* Popover */
@@ -310,57 +537,69 @@
310
537
  --popover-foreground: oklch(0.977 0.004 236.5);
311
538
 
312
539
  /* Primary — stays same hue, slightly brighter in dark mode */
313
- --primary: oklch(0.894 0.208 163.0); /* #33FF99 — same green works on dark */
314
- --primary-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
540
+ --primary: oklch(0.894 0.208 163); /* #33FF99 — same green works on dark */
541
+ --primary-foreground: oklch(0.152 0.02 235); /* #040D13 */
315
542
 
316
543
  /* Secondary */
317
- --secondary: oklch(0.278 0.023 241.1); /* #1E2A33 */
544
+ --secondary: oklch(0.278 0.023 241.1); /* #1E2A33 */
318
545
  --secondary-foreground: oklch(0.977 0.004 236.5);
319
546
 
320
547
  /* Muted */
321
- --muted: oklch(0.278 0.023 241.1); /* #1E2A33 */
322
- --muted-foreground: oklch(0.732 0.021 245.7); /* #9EAAB5 — palette/text/disabled */
548
+ --muted: oklch(0.278 0.023 241.1); /* #1E2A33 */
549
+ --muted-foreground: oklch(
550
+ 0.732 0.021 245.7
551
+ ); /* #9EAAB5 — palette/text/disabled */
323
552
 
324
553
  /* Accent */
325
- --accent: oklch(0.314 0.030 246.9); /* #253340 */
554
+ --accent: oklch(0.314 0.03 246.9); /* #253340 */
326
555
  --accent-foreground: oklch(0.977 0.004 236.5);
327
556
 
328
557
  /* Destructive */
329
- --destructive: oklch(0.712 0.181 22.8); /* #FF6B6B — brighter red for dark */
330
- --destructive-foreground: oklch(0.152 0.020 235.0);
558
+ --destructive: oklch(0.712 0.181 22.8); /* #FF6B6B — brighter red for dark */
559
+ --destructive-foreground: oklch(0.152 0.02 235);
331
560
 
332
561
  /* Borders */
333
- --border: oklch(0.314 0.030 246.9); /* #253340 */
334
- --input: oklch(0.314 0.030 246.9);
335
- --ring: oklch(0.894 0.208 163.0); /* #33FF99 */
562
+ --border: oklch(0.314 0.03 246.9); /* #253340 */
563
+ --input: oklch(0.314 0.03 246.9);
564
+ --ring: oklch(0.894 0.208 163); /* #33FF99 */
336
565
 
337
566
  /* State colors — brighter variants for dark mode */
338
- --warning: oklch(0.829 0.145 73.5); /* #FFB74D */
339
- --warning-foreground: oklch(0.152 0.020 235.0);
340
- --success: oklch(0.766 0.118 145.3); /* #81C784 */
341
- --success-foreground: oklch(0.152 0.020 235.0);
342
- --info: oklch(0.748 0.123 244.7); /* #64B5F6 */
343
- --info-foreground: oklch(0.152 0.020 235.0);
567
+ --warning: oklch(0.829 0.145 73.5); /* #FFB74D */
568
+ --warning-foreground: oklch(0.152 0.02 235);
569
+ --warning-text: oklch(
570
+ 0.829 0.145 73.5
571
+ ); /* dark mode: use the bright token directly — bg is dark */
572
+ --success: oklch(0.766 0.118 145.3); /* #81C784 */
573
+ --success-foreground: oklch(0.152 0.02 235);
574
+ --success-text: oklch(0.766 0.118 145.3);
575
+ --info: oklch(0.748 0.123 244.7); /* #64B5F6 */
576
+ --info-foreground: oklch(0.152 0.02 235);
577
+ --info-text: oklch(0.748 0.123 244.7);
578
+ --destructive-text: oklch(0.704 0.191 27.5); /* lighter red for dark bg */
344
579
 
345
580
  /* Chart series — same in dark */
346
- --chart-1: oklch(0.590 0.217 261.8);
581
+ --chart-1: oklch(0.59 0.217 261.8);
347
582
  --chart-2: oklch(0.747 0.086 204.1);
348
- --chart-3: oklch(0.846 0.160 94.6);
349
- --chart-4: oklch(0.702 0.192 39.0);
583
+ --chart-3: oklch(0.846 0.16 94.6);
584
+ --chart-4: oklch(0.702 0.192 39);
350
585
  --chart-5: oklch(0.661 0.213 27.5);
351
586
 
352
587
  /* Brand secondary — brighter/lighter in dark mode for legibility */
353
- --brand-secondary: oklch(0.314 0.030 246.9); /* #253340 — slightly lighter navy */
354
- --brand-secondary-foreground: oklch(0.977 0.004 236.5); /* #F5F8FA — near-white on dark */
588
+ --brand-secondary: oklch(
589
+ 0.314 0.03 246.9
590
+ ); /* #253340 — slightly lighter navy */
591
+ --brand-secondary-foreground: oklch(
592
+ 0.977 0.004 236.5
593
+ ); /* #F5F8FA — near-white on dark */
355
594
 
356
595
  /* Sidebar */
357
- --sidebar: oklch(0.238 0.023 246.1); /* #162029 */
596
+ --sidebar: oklch(0.238 0.023 246.1); /* #162029 */
358
597
  --sidebar-foreground: oklch(0.977 0.004 236.5);
359
- --sidebar-primary: oklch(0.894 0.208 163.0);
360
- --sidebar-primary-foreground: oklch(0.152 0.020 235.0);
361
- --sidebar-accent: oklch(0.314 0.030 246.9);
598
+ --sidebar-primary: oklch(0.894 0.208 163);
599
+ --sidebar-primary-foreground: oklch(0.152 0.02 235);
600
+ --sidebar-accent: oklch(0.314 0.03 246.9);
362
601
  --sidebar-accent-foreground: oklch(0.977 0.004 236.5);
363
- --sidebar-border: oklch(0.314 0.030 246.9);
602
+ --sidebar-border: oklch(0.314 0.03 246.9);
364
603
  --sidebar-ring: oklch(0.465 0.032 241.8);
365
604
  }
366
605
 
@@ -383,7 +622,15 @@ textarea::selection {
383
622
  * Inset box-shadow avoids corner artifacts from mixing 4px left + 1px other borders.
384
623
  * !important required to override Sonner's own styles.
385
624
  */
386
- [data-sonner-toast][data-type="success"] { box-shadow: inset 4px 0 0 var(--success) !important; }
387
- [data-sonner-toast][data-type="error"] { box-shadow: inset 4px 0 0 var(--destructive) !important; }
388
- [data-sonner-toast][data-type="warning"] { box-shadow: inset 4px 0 0 var(--warning) !important; }
389
- [data-sonner-toast][data-type="info"] { box-shadow: inset 4px 0 0 var(--info) !important; }
625
+ [data-sonner-toast][data-type="success"] {
626
+ box-shadow: inset 4px 0 0 var(--success) !important;
627
+ }
628
+ [data-sonner-toast][data-type="error"] {
629
+ box-shadow: inset 4px 0 0 var(--destructive) !important;
630
+ }
631
+ [data-sonner-toast][data-type="warning"] {
632
+ box-shadow: inset 4px 0 0 var(--warning) !important;
633
+ }
634
+ [data-sonner-toast][data-type="info"] {
635
+ box-shadow: inset 4px 0 0 var(--info) !important;
636
+ }