@epilot/spark-ui 1.0.0-alpha.2 → 1.0.0-alpha.3

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 (549) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +2 -0
  3. package/README.md +7 -1
  4. package/dist/chunk-aJGBMT86.cjs +29 -0
  5. package/dist/components/accordion.cjs +57 -0
  6. package/dist/components/accordion.cjs.map +1 -0
  7. package/dist/components/accordion.d.cts +45 -0
  8. package/dist/components/accordion.d.ts +45 -0
  9. package/dist/components/accordion.js +51 -0
  10. package/dist/components/accordion.js.map +1 -0
  11. package/dist/components/alert-dialog.cjs +137 -0
  12. package/dist/components/alert-dialog.cjs.map +1 -0
  13. package/dist/components/alert-dialog.d.cts +63 -0
  14. package/dist/components/alert-dialog.d.ts +63 -0
  15. package/dist/components/alert-dialog.js +123 -0
  16. package/dist/components/alert-dialog.js.map +1 -0
  17. package/dist/components/attachment.cjs +119 -0
  18. package/dist/components/attachment.cjs.map +1 -0
  19. package/dist/components/attachment.d.cts +67 -0
  20. package/dist/components/attachment.d.ts +67 -0
  21. package/dist/components/attachment.js +108 -0
  22. package/dist/components/attachment.js.map +1 -0
  23. package/dist/components/badge.cjs +20 -0
  24. package/dist/components/badge.cjs.map +1 -0
  25. package/dist/components/badge.d.cts +12 -0
  26. package/dist/components/badge.d.ts +12 -0
  27. package/dist/components/badge.js +17 -0
  28. package/dist/components/badge.js.map +1 -0
  29. package/dist/components/bar-chart.cjs +519 -0
  30. package/dist/components/bar-chart.cjs.map +1 -0
  31. package/dist/components/bar-chart.d.cts +83 -0
  32. package/dist/components/bar-chart.d.ts +83 -0
  33. package/dist/components/bar-chart.js +517 -0
  34. package/dist/components/bar-chart.js.map +1 -0
  35. package/dist/components/battery-progress-row.cjs +140 -0
  36. package/dist/components/battery-progress-row.cjs.map +1 -0
  37. package/dist/components/battery-progress-row.d.cts +78 -0
  38. package/dist/components/battery-progress-row.d.ts +78 -0
  39. package/dist/components/battery-progress-row.js +129 -0
  40. package/dist/components/battery-progress-row.js.map +1 -0
  41. package/dist/components/breadcrumbs.cjs +65 -0
  42. package/dist/components/breadcrumbs.cjs.map +1 -0
  43. package/dist/components/breadcrumbs.d.cts +44 -0
  44. package/dist/components/breadcrumbs.d.ts +44 -0
  45. package/dist/components/breadcrumbs.js +58 -0
  46. package/dist/components/breadcrumbs.js.map +1 -0
  47. package/dist/components/bubble.cjs +84 -0
  48. package/dist/components/bubble.cjs.map +1 -0
  49. package/dist/components/bubble.d.cts +41 -0
  50. package/dist/components/bubble.d.ts +41 -0
  51. package/dist/components/bubble.js +78 -0
  52. package/dist/components/bubble.js.map +1 -0
  53. package/dist/components/button.cjs +54 -0
  54. package/dist/components/button.cjs.map +1 -0
  55. package/dist/components/button.d.cts +34 -0
  56. package/dist/components/button.d.ts +34 -0
  57. package/dist/components/button.js +50 -0
  58. package/dist/components/button.js.map +1 -0
  59. package/dist/components/calendar.cjs +58 -0
  60. package/dist/components/calendar.cjs.map +1 -0
  61. package/dist/components/calendar.d.cts +17 -0
  62. package/dist/components/calendar.d.ts +17 -0
  63. package/dist/components/calendar.js +55 -0
  64. package/dist/components/calendar.js.map +1 -0
  65. package/dist/components/callout.cjs +95 -0
  66. package/dist/components/callout.cjs.map +1 -0
  67. package/dist/components/callout.d.cts +39 -0
  68. package/dist/components/callout.d.ts +39 -0
  69. package/dist/components/callout.js +88 -0
  70. package/dist/components/callout.js.map +1 -0
  71. package/dist/components/card.cjs +86 -0
  72. package/dist/components/card.cjs.map +1 -0
  73. package/dist/components/card.d.cts +28 -0
  74. package/dist/components/card.d.ts +28 -0
  75. package/dist/components/card.js +76 -0
  76. package/dist/components/card.js.map +1 -0
  77. package/dist/components/chart.cjs +93 -0
  78. package/dist/components/chart.cjs.map +1 -0
  79. package/dist/components/chart.d.cts +83 -0
  80. package/dist/components/chart.d.ts +83 -0
  81. package/dist/components/chart.js +88 -0
  82. package/dist/components/chart.js.map +1 -0
  83. package/dist/components/checkbox.cjs +37 -0
  84. package/dist/components/checkbox.cjs.map +1 -0
  85. package/dist/components/checkbox.d.cts +22 -0
  86. package/dist/components/checkbox.d.ts +22 -0
  87. package/dist/components/checkbox.js +34 -0
  88. package/dist/components/checkbox.js.map +1 -0
  89. package/dist/components/circular-gauge.cjs +74 -0
  90. package/dist/components/circular-gauge.cjs.map +1 -0
  91. package/dist/components/circular-gauge.d.cts +38 -0
  92. package/dist/components/circular-gauge.d.ts +38 -0
  93. package/dist/components/circular-gauge.js +71 -0
  94. package/dist/components/circular-gauge.js.map +1 -0
  95. package/dist/components/day-of-week-picker.cjs +123 -0
  96. package/dist/components/day-of-week-picker.cjs.map +1 -0
  97. package/dist/components/day-of-week-picker.d.cts +39 -0
  98. package/dist/components/day-of-week-picker.d.ts +39 -0
  99. package/dist/components/day-of-week-picker.js +119 -0
  100. package/dist/components/day-of-week-picker.js.map +1 -0
  101. package/dist/components/device-card.cjs +118 -0
  102. package/dist/components/device-card.cjs.map +1 -0
  103. package/dist/components/device-card.d.cts +71 -0
  104. package/dist/components/device-card.d.ts +71 -0
  105. package/dist/components/device-card.js +104 -0
  106. package/dist/components/device-card.js.map +1 -0
  107. package/dist/components/dialog.cjs +115 -0
  108. package/dist/components/dialog.cjs.map +1 -0
  109. package/dist/components/dialog.d.cts +45 -0
  110. package/dist/components/dialog.d.ts +45 -0
  111. package/dist/components/dialog.js +103 -0
  112. package/dist/components/dialog.js.map +1 -0
  113. package/dist/components/donut-chart.cjs +71 -0
  114. package/dist/components/donut-chart.cjs.map +1 -0
  115. package/dist/components/donut-chart.d.cts +22 -0
  116. package/dist/components/donut-chart.d.ts +22 -0
  117. package/dist/components/donut-chart.js +69 -0
  118. package/dist/components/donut-chart.js.map +1 -0
  119. package/dist/components/drawer.cjs +95 -0
  120. package/dist/components/drawer.cjs.map +1 -0
  121. package/dist/components/drawer.d.cts +46 -0
  122. package/dist/components/drawer.d.ts +46 -0
  123. package/dist/components/drawer.js +83 -0
  124. package/dist/components/drawer.js.map +1 -0
  125. package/dist/components/dropdown-menu.cjs +165 -0
  126. package/dist/components/dropdown-menu.cjs.map +1 -0
  127. package/dist/components/dropdown-menu.d.cts +93 -0
  128. package/dist/components/dropdown-menu.d.ts +93 -0
  129. package/dist/components/dropdown-menu.js +148 -0
  130. package/dist/components/dropdown-menu.js.map +1 -0
  131. package/dist/components/empty-state.cjs +35 -0
  132. package/dist/components/empty-state.cjs.map +1 -0
  133. package/dist/components/empty-state.d.cts +22 -0
  134. package/dist/components/empty-state.d.ts +22 -0
  135. package/dist/components/empty-state.js +33 -0
  136. package/dist/components/empty-state.js.map +1 -0
  137. package/dist/components/energy-bar-chart.cjs +23 -0
  138. package/dist/components/energy-bar-chart.cjs.map +1 -0
  139. package/dist/components/energy-bar-chart.d.cts +43 -0
  140. package/dist/components/energy-bar-chart.d.ts +43 -0
  141. package/dist/components/energy-bar-chart.js +21 -0
  142. package/dist/components/energy-bar-chart.js.map +1 -0
  143. package/dist/components/energy-breakdown.cjs +81 -0
  144. package/dist/components/energy-breakdown.cjs.map +1 -0
  145. package/dist/components/energy-breakdown.d.cts +26 -0
  146. package/dist/components/energy-breakdown.d.ts +26 -0
  147. package/dist/components/energy-breakdown.js +79 -0
  148. package/dist/components/energy-breakdown.js.map +1 -0
  149. package/dist/components/energy-history-chart.cjs +56 -0
  150. package/dist/components/energy-history-chart.cjs.map +1 -0
  151. package/dist/components/energy-history-chart.d.cts +58 -0
  152. package/dist/components/energy-history-chart.d.ts +58 -0
  153. package/dist/components/energy-history-chart.js +54 -0
  154. package/dist/components/energy-history-chart.js.map +1 -0
  155. package/dist/components/feed-in-hero.cjs +56 -0
  156. package/dist/components/feed-in-hero.cjs.map +1 -0
  157. package/dist/components/feed-in-hero.d.cts +33 -0
  158. package/dist/components/feed-in-hero.d.ts +33 -0
  159. package/dist/components/feed-in-hero.js +51 -0
  160. package/dist/components/feed-in-hero.js.map +1 -0
  161. package/dist/components/field.cjs +257 -0
  162. package/dist/components/field.cjs.map +1 -0
  163. package/dist/components/field.d.cts +104 -0
  164. package/dist/components/field.d.ts +104 -0
  165. package/dist/components/field.js +243 -0
  166. package/dist/components/field.js.map +1 -0
  167. package/dist/components/icon.cjs +35 -0
  168. package/dist/components/icon.cjs.map +1 -0
  169. package/dist/components/icon.d.cts +27 -0
  170. package/dist/components/icon.d.ts +27 -0
  171. package/dist/components/icon.js +32 -0
  172. package/dist/components/icon.js.map +1 -0
  173. package/dist/components/info-block.cjs +75 -0
  174. package/dist/components/info-block.cjs.map +1 -0
  175. package/dist/components/info-block.d.cts +20 -0
  176. package/dist/components/info-block.d.ts +20 -0
  177. package/dist/components/info-block.js +65 -0
  178. package/dist/components/info-block.js.map +1 -0
  179. package/dist/components/input-group.cjs +164 -0
  180. package/dist/components/input-group.cjs.map +1 -0
  181. package/dist/components/input-group.d.cts +32 -0
  182. package/dist/components/input-group.d.ts +32 -0
  183. package/dist/components/input-group.js +158 -0
  184. package/dist/components/input-group.js.map +1 -0
  185. package/dist/components/input-otp.cjs +113 -0
  186. package/dist/components/input-otp.cjs.map +1 -0
  187. package/dist/components/input-otp.d.cts +22 -0
  188. package/dist/components/input-otp.d.ts +22 -0
  189. package/dist/components/input-otp.js +111 -0
  190. package/dist/components/input-otp.js.map +1 -0
  191. package/dist/components/input.cjs +112 -0
  192. package/dist/components/input.cjs.map +1 -0
  193. package/dist/components/input.d.cts +21 -0
  194. package/dist/components/input.d.ts +21 -0
  195. package/dist/components/input.js +109 -0
  196. package/dist/components/input.js.map +1 -0
  197. package/dist/components/label.cjs +18 -0
  198. package/dist/components/label.cjs.map +1 -0
  199. package/dist/components/label.d.cts +10 -0
  200. package/dist/components/label.d.ts +10 -0
  201. package/dist/components/label.js +15 -0
  202. package/dist/components/label.js.map +1 -0
  203. package/dist/components/layout.cjs +15 -0
  204. package/dist/components/layout.cjs.map +1 -0
  205. package/dist/components/layout.d.cts +12 -0
  206. package/dist/components/layout.d.ts +13 -0
  207. package/dist/components/layout.js +14 -0
  208. package/dist/components/layout.js.map +1 -0
  209. package/dist/components/line-chart.cjs +310 -0
  210. package/dist/components/line-chart.cjs.map +1 -0
  211. package/dist/components/line-chart.d.cts +71 -0
  212. package/dist/components/line-chart.d.ts +71 -0
  213. package/dist/components/line-chart.js +307 -0
  214. package/dist/components/line-chart.js.map +1 -0
  215. package/dist/components/list.cjs +132 -0
  216. package/dist/components/list.cjs.map +1 -0
  217. package/dist/components/list.d.cts +72 -0
  218. package/dist/components/list.d.ts +72 -0
  219. package/dist/components/list.js +122 -0
  220. package/dist/components/list.js.map +1 -0
  221. package/dist/components/marker.cjs +52 -0
  222. package/dist/components/marker.cjs.map +1 -0
  223. package/dist/components/marker.d.cts +29 -0
  224. package/dist/components/marker.d.ts +29 -0
  225. package/dist/components/marker.js +46 -0
  226. package/dist/components/marker.js.map +1 -0
  227. package/dist/components/message-scroller.cjs +73 -0
  228. package/dist/components/message-scroller.cjs.map +1 -0
  229. package/dist/components/message-scroller.d.cts +39 -0
  230. package/dist/components/message-scroller.d.ts +39 -0
  231. package/dist/components/message-scroller.js +62 -0
  232. package/dist/components/message-scroller.js.map +1 -0
  233. package/dist/components/message.cjs +60 -0
  234. package/dist/components/message.cjs.map +1 -0
  235. package/dist/components/message.d.cts +36 -0
  236. package/dist/components/message.d.ts +36 -0
  237. package/dist/components/message.js +52 -0
  238. package/dist/components/message.js.map +1 -0
  239. package/dist/components/metering-row.cjs +43 -0
  240. package/dist/components/metering-row.cjs.map +1 -0
  241. package/dist/components/metering-row.d.cts +32 -0
  242. package/dist/components/metering-row.d.ts +32 -0
  243. package/dist/components/metering-row.js +38 -0
  244. package/dist/components/metering-row.js.map +1 -0
  245. package/dist/components/money-saved-block.cjs +87 -0
  246. package/dist/components/money-saved-block.cjs.map +1 -0
  247. package/dist/components/money-saved-block.d.cts +57 -0
  248. package/dist/components/money-saved-block.d.ts +57 -0
  249. package/dist/components/money-saved-block.js +79 -0
  250. package/dist/components/money-saved-block.js.map +1 -0
  251. package/dist/components/number-flow.cjs +44 -0
  252. package/dist/components/number-flow.cjs.map +1 -0
  253. package/dist/components/number-flow.d.cts +4 -0
  254. package/dist/components/number-flow.d.ts +4 -0
  255. package/dist/components/number-flow.js +42 -0
  256. package/dist/components/number-flow.js.map +1 -0
  257. package/dist/components/on-off-button.cjs +36 -0
  258. package/dist/components/on-off-button.cjs.map +1 -0
  259. package/dist/components/on-off-button.d.cts +20 -0
  260. package/dist/components/on-off-button.d.ts +20 -0
  261. package/dist/components/on-off-button.js +34 -0
  262. package/dist/components/on-off-button.js.map +1 -0
  263. package/dist/components/onboarding-layout.cjs +68 -0
  264. package/dist/components/onboarding-layout.cjs.map +1 -0
  265. package/dist/components/onboarding-layout.d.cts +46 -0
  266. package/dist/components/onboarding-layout.d.ts +46 -0
  267. package/dist/components/onboarding-layout.js +60 -0
  268. package/dist/components/onboarding-layout.js.map +1 -0
  269. package/dist/components/page-header.cjs +50 -0
  270. package/dist/components/page-header.cjs.map +1 -0
  271. package/dist/components/page-header.d.cts +26 -0
  272. package/dist/components/page-header.d.ts +26 -0
  273. package/dist/components/page-header.js +44 -0
  274. package/dist/components/page-header.js.map +1 -0
  275. package/dist/components/page-spinner.cjs +19 -0
  276. package/dist/components/page-spinner.cjs.map +1 -0
  277. package/dist/components/page-spinner.d.cts +14 -0
  278. package/dist/components/page-spinner.d.ts +14 -0
  279. package/dist/components/page-spinner.js +17 -0
  280. package/dist/components/page-spinner.js.map +1 -0
  281. package/dist/components/period-tabs.cjs +79 -0
  282. package/dist/components/period-tabs.cjs.map +1 -0
  283. package/dist/components/period-tabs.d.cts +51 -0
  284. package/dist/components/period-tabs.d.ts +51 -0
  285. package/dist/components/period-tabs.js +73 -0
  286. package/dist/components/period-tabs.js.map +1 -0
  287. package/dist/components/popover.cjs +62 -0
  288. package/dist/components/popover.cjs.map +1 -0
  289. package/dist/components/popover.d.cts +29 -0
  290. package/dist/components/popover.d.ts +29 -0
  291. package/dist/components/popover.js +56 -0
  292. package/dist/components/popover.js.map +1 -0
  293. package/dist/components/power-history-chart.cjs +358 -0
  294. package/dist/components/power-history-chart.cjs.map +1 -0
  295. package/dist/components/power-history-chart.d.cts +54 -0
  296. package/dist/components/power-history-chart.d.ts +54 -0
  297. package/dist/components/power-history-chart.js +355 -0
  298. package/dist/components/power-history-chart.js.map +1 -0
  299. package/dist/components/power-history.cjs +115 -0
  300. package/dist/components/power-history.cjs.map +1 -0
  301. package/dist/components/power-history.d.cts +42 -0
  302. package/dist/components/power-history.d.ts +43 -0
  303. package/dist/components/power-history.js +114 -0
  304. package/dist/components/power-history.js.map +1 -0
  305. package/dist/components/power-network.cjs +530 -0
  306. package/dist/components/power-network.cjs.map +1 -0
  307. package/dist/components/power-network.d.cts +77 -0
  308. package/dist/components/power-network.d.ts +77 -0
  309. package/dist/components/power-network.js +523 -0
  310. package/dist/components/power-network.js.map +1 -0
  311. package/dist/components/progress.cjs +34 -0
  312. package/dist/components/progress.cjs.map +1 -0
  313. package/dist/components/progress.d.cts +17 -0
  314. package/dist/components/progress.d.ts +17 -0
  315. package/dist/components/progress.js +31 -0
  316. package/dist/components/progress.js.map +1 -0
  317. package/dist/components/radio-card-group.cjs +69 -0
  318. package/dist/components/radio-card-group.cjs.map +1 -0
  319. package/dist/components/radio-card-group.d.cts +21 -0
  320. package/dist/components/radio-card-group.d.ts +21 -0
  321. package/dist/components/radio-card-group.js +65 -0
  322. package/dist/components/radio-card-group.js.map +1 -0
  323. package/dist/components/radio.cjs +34 -0
  324. package/dist/components/radio.cjs.map +1 -0
  325. package/dist/components/radio.d.cts +21 -0
  326. package/dist/components/radio.d.ts +21 -0
  327. package/dist/components/radio.js +30 -0
  328. package/dist/components/radio.js.map +1 -0
  329. package/dist/components/reparent.cjs +55 -0
  330. package/dist/components/reparent.cjs.map +1 -0
  331. package/dist/components/reparent.d.cts +29 -0
  332. package/dist/components/reparent.d.ts +29 -0
  333. package/dist/components/reparent.js +49 -0
  334. package/dist/components/reparent.js.map +1 -0
  335. package/dist/components/sankey-chart.cjs +221 -0
  336. package/dist/components/sankey-chart.cjs.map +1 -0
  337. package/dist/components/sankey-chart.d.cts +58 -0
  338. package/dist/components/sankey-chart.d.ts +58 -0
  339. package/dist/components/sankey-chart.js +218 -0
  340. package/dist/components/sankey-chart.js.map +1 -0
  341. package/dist/components/schedule-editor.cjs +82 -0
  342. package/dist/components/schedule-editor.cjs.map +1 -0
  343. package/dist/components/schedule-editor.d.cts +25 -0
  344. package/dist/components/schedule-editor.d.ts +25 -0
  345. package/dist/components/schedule-editor.js +72 -0
  346. package/dist/components/schedule-editor.js.map +1 -0
  347. package/dist/components/schedule-list.cjs +110 -0
  348. package/dist/components/schedule-list.cjs.map +1 -0
  349. package/dist/components/schedule-list.d.cts +29 -0
  350. package/dist/components/schedule-list.d.ts +29 -0
  351. package/dist/components/schedule-list.js +99 -0
  352. package/dist/components/schedule-list.js.map +1 -0
  353. package/dist/components/scroll-area.cjs +53 -0
  354. package/dist/components/scroll-area.cjs.map +1 -0
  355. package/dist/components/scroll-area.d.cts +26 -0
  356. package/dist/components/scroll-area.d.ts +26 -0
  357. package/dist/components/scroll-area.js +44 -0
  358. package/dist/components/scroll-area.js.map +1 -0
  359. package/dist/components/select.cjs +136 -0
  360. package/dist/components/select.cjs.map +1 -0
  361. package/dist/components/select.d.cts +63 -0
  362. package/dist/components/select.d.ts +63 -0
  363. package/dist/components/select.js +124 -0
  364. package/dist/components/select.js.map +1 -0
  365. package/dist/components/separator.cjs +38 -0
  366. package/dist/components/separator.cjs.map +1 -0
  367. package/dist/components/separator.d.cts +13 -0
  368. package/dist/components/separator.d.ts +13 -0
  369. package/dist/components/separator.js +35 -0
  370. package/dist/components/separator.js.map +1 -0
  371. package/dist/components/series-legend.cjs +39 -0
  372. package/dist/components/series-legend.cjs.map +1 -0
  373. package/dist/components/series-legend.d.cts +31 -0
  374. package/dist/components/series-legend.d.ts +31 -0
  375. package/dist/components/series-legend.js +37 -0
  376. package/dist/components/series-legend.js.map +1 -0
  377. package/dist/components/sheet.cjs +102 -0
  378. package/dist/components/sheet.cjs.map +1 -0
  379. package/dist/components/sheet.d.cts +46 -0
  380. package/dist/components/sheet.d.ts +46 -0
  381. package/dist/components/sheet.js +90 -0
  382. package/dist/components/sheet.js.map +1 -0
  383. package/dist/components/skeleton.cjs +24 -0
  384. package/dist/components/skeleton.cjs.map +1 -0
  385. package/dist/components/skeleton.d.cts +24 -0
  386. package/dist/components/skeleton.d.ts +24 -0
  387. package/dist/components/skeleton.js +21 -0
  388. package/dist/components/skeleton.js.map +1 -0
  389. package/dist/components/slider.cjs +276 -0
  390. package/dist/components/slider.cjs.map +1 -0
  391. package/dist/components/slider.d.cts +150 -0
  392. package/dist/components/slider.d.ts +150 -0
  393. package/dist/components/slider.js +266 -0
  394. package/dist/components/slider.js.map +1 -0
  395. package/dist/components/smart-toggle-button.cjs +28 -0
  396. package/dist/components/smart-toggle-button.cjs.map +1 -0
  397. package/dist/components/smart-toggle-button.d.cts +18 -0
  398. package/dist/components/smart-toggle-button.d.ts +18 -0
  399. package/dist/components/smart-toggle-button.js +26 -0
  400. package/dist/components/smart-toggle-button.js.map +1 -0
  401. package/dist/components/solar-forecast-chart.cjs +105 -0
  402. package/dist/components/solar-forecast-chart.cjs.map +1 -0
  403. package/dist/components/solar-forecast-chart.d.cts +66 -0
  404. package/dist/components/solar-forecast-chart.d.ts +66 -0
  405. package/dist/components/solar-forecast-chart.js +99 -0
  406. package/dist/components/solar-forecast-chart.js.map +1 -0
  407. package/dist/components/sortable-list.cjs +69 -0
  408. package/dist/components/sortable-list.cjs.map +1 -0
  409. package/dist/components/sortable-list.d.cts +46 -0
  410. package/dist/components/sortable-list.d.ts +46 -0
  411. package/dist/components/sortable-list.js +67 -0
  412. package/dist/components/sortable-list.js.map +1 -0
  413. package/dist/components/spinner.cjs +42 -0
  414. package/dist/components/spinner.cjs.map +1 -0
  415. package/dist/components/spinner.d.cts +15 -0
  416. package/dist/components/spinner.d.ts +15 -0
  417. package/dist/components/spinner.js +39 -0
  418. package/dist/components/spinner.js.map +1 -0
  419. package/dist/components/stat-card.cjs +58 -0
  420. package/dist/components/stat-card.cjs.map +1 -0
  421. package/dist/components/stat-card.d.cts +36 -0
  422. package/dist/components/stat-card.d.ts +36 -0
  423. package/dist/components/stat-card.js +50 -0
  424. package/dist/components/stat-card.js.map +1 -0
  425. package/dist/components/stepper.cjs +79 -0
  426. package/dist/components/stepper.cjs.map +1 -0
  427. package/dist/components/stepper.d.cts +33 -0
  428. package/dist/components/stepper.d.ts +33 -0
  429. package/dist/components/stepper.js +76 -0
  430. package/dist/components/stepper.js.map +1 -0
  431. package/dist/components/switch.cjs +22 -0
  432. package/dist/components/switch.cjs.map +1 -0
  433. package/dist/components/switch.d.cts +28 -0
  434. package/dist/components/switch.d.ts +28 -0
  435. package/dist/components/switch.js +20 -0
  436. package/dist/components/switch.js.map +1 -0
  437. package/dist/components/tabs.cjs +175 -0
  438. package/dist/components/tabs.cjs.map +1 -0
  439. package/dist/components/tabs.d.cts +45 -0
  440. package/dist/components/tabs.d.ts +45 -0
  441. package/dist/components/tabs.js +167 -0
  442. package/dist/components/tabs.js.map +1 -0
  443. package/dist/components/theme.cjs +6 -0
  444. package/dist/components/theme.d.cts +38 -0
  445. package/dist/components/theme.d.ts +38 -0
  446. package/dist/components/theme.js +4 -0
  447. package/dist/components/thumbnail.cjs +54 -0
  448. package/dist/components/thumbnail.cjs.map +1 -0
  449. package/dist/components/thumbnail.d.cts +34 -0
  450. package/dist/components/thumbnail.d.ts +34 -0
  451. package/dist/components/thumbnail.js +51 -0
  452. package/dist/components/thumbnail.js.map +1 -0
  453. package/dist/components/time-picker.cjs +55 -0
  454. package/dist/components/time-picker.cjs.map +1 -0
  455. package/dist/components/time-picker.d.cts +41 -0
  456. package/dist/components/time-picker.d.ts +41 -0
  457. package/dist/components/time-picker.js +51 -0
  458. package/dist/components/time-picker.js.map +1 -0
  459. package/dist/components/toast.cjs +99 -0
  460. package/dist/components/toast.cjs.map +1 -0
  461. package/dist/components/toast.d.cts +18 -0
  462. package/dist/components/toast.d.ts +18 -0
  463. package/dist/components/toast.js +95 -0
  464. package/dist/components/toast.js.map +1 -0
  465. package/dist/components/tooltip.cjs +75 -0
  466. package/dist/components/tooltip.cjs.map +1 -0
  467. package/dist/components/tooltip.d.cts +47 -0
  468. package/dist/components/tooltip.d.ts +47 -0
  469. package/dist/components/tooltip.js +67 -0
  470. package/dist/components/tooltip.js.map +1 -0
  471. package/dist/components/typography.cjs +52 -0
  472. package/dist/components/typography.cjs.map +1 -0
  473. package/dist/components/typography.d.cts +32 -0
  474. package/dist/components/typography.d.ts +32 -0
  475. package/dist/components/typography.js +45 -0
  476. package/dist/components/typography.js.map +1 -0
  477. package/dist/hooks/use-container-width.cjs +22 -0
  478. package/dist/hooks/use-container-width.cjs.map +1 -0
  479. package/dist/hooks/use-container-width.d.cts +7 -0
  480. package/dist/hooks/use-container-width.d.ts +7 -0
  481. package/dist/hooks/use-container-width.js +20 -0
  482. package/dist/hooks/use-container-width.js.map +1 -0
  483. package/dist/icons/index.cjs +7 -0
  484. package/dist/icons/index.d.cts +4 -0
  485. package/dist/icons/index.d.ts +4 -0
  486. package/dist/icons/index.js +3 -0
  487. package/dist/icons/material-symbol.cjs +105 -0
  488. package/dist/icons/material-symbol.cjs.map +1 -0
  489. package/dist/icons/material-symbol.d.cts +23 -0
  490. package/dist/icons/material-symbol.d.ts +23 -0
  491. package/dist/icons/material-symbol.js +100 -0
  492. package/dist/icons/material-symbol.js.map +1 -0
  493. package/dist/input-box-variants-BMDdwvqg.cjs +40 -0
  494. package/dist/input-box-variants-BMDdwvqg.cjs.map +1 -0
  495. package/dist/input-box-variants-Dr1K7uYE.js +28 -0
  496. package/dist/input-box-variants-Dr1K7uYE.js.map +1 -0
  497. package/dist/number-flow-DMJouddg.d.cts +15 -0
  498. package/dist/number-flow-DSbucQ_K.d.ts +15 -0
  499. package/dist/styles/index.css +223 -0
  500. package/dist/styles/internal.css +5 -0
  501. package/dist/styles/material-symbol.css +22 -0
  502. package/dist/styles/spark-default.css +883 -0
  503. package/dist/styles/theme.css +542 -0
  504. package/dist/styles/utilities.css +557 -0
  505. package/dist/theme-B3WtiByA.js +574 -0
  506. package/dist/theme-B3WtiByA.js.map +1 -0
  507. package/dist/theme-C9_OSe0S.cjs +592 -0
  508. package/dist/theme-C9_OSe0S.cjs.map +1 -0
  509. package/dist/theme-types-DoROIXpi.d.ts +30 -0
  510. package/dist/theme-types-r20EJfEC.d.cts +30 -0
  511. package/dist/tones-DjgKOX3s.d.cts +8 -0
  512. package/dist/tones-DyCkL71h.d.ts +8 -0
  513. package/dist/utils/build-sankey-nodes.cjs +59 -0
  514. package/dist/utils/build-sankey-nodes.cjs.map +1 -0
  515. package/dist/utils/build-sankey-nodes.d.cts +27 -0
  516. package/dist/utils/build-sankey-nodes.d.ts +27 -0
  517. package/dist/utils/build-sankey-nodes.js +58 -0
  518. package/dist/utils/build-sankey-nodes.js.map +1 -0
  519. package/dist/utils/chars.cjs +18 -0
  520. package/dist/utils/chars.cjs.map +1 -0
  521. package/dist/utils/chars.d.cts +10 -0
  522. package/dist/utils/chars.d.ts +10 -0
  523. package/dist/utils/chars.js +14 -0
  524. package/dist/utils/chars.js.map +1 -0
  525. package/dist/utils/cn.cjs +10 -0
  526. package/dist/utils/cn.d.cts +4 -0
  527. package/dist/utils/cn.d.ts +4 -0
  528. package/dist/utils/cn.js +3 -0
  529. package/dist/utils/date-mask.cjs +45 -0
  530. package/dist/utils/date-mask.cjs.map +1 -0
  531. package/dist/utils/date-mask.d.cts +17 -0
  532. package/dist/utils/date-mask.d.ts +17 -0
  533. package/dist/utils/date-mask.js +41 -0
  534. package/dist/utils/date-mask.js.map +1 -0
  535. package/dist/utils/format.cjs +57 -0
  536. package/dist/utils/format.cjs.map +1 -0
  537. package/dist/utils/format.d.cts +23 -0
  538. package/dist/utils/format.d.ts +23 -0
  539. package/dist/utils/format.js +47 -0
  540. package/dist/utils/format.js.map +1 -0
  541. package/package.json +78 -63
  542. package/dist/index.cjs +0 -1631
  543. package/dist/index.cjs.map +0 -1
  544. package/dist/index.css +0 -1
  545. package/dist/index.d.cts +0 -299
  546. package/dist/index.d.ts +0 -299
  547. package/dist/index.js +0 -1518
  548. package/dist/index.js.map +0 -1
  549. package/dist/styles.js +0 -1
@@ -0,0 +1,883 @@
1
+ /*
2
+ * Default Spark brand tokens.
3
+ *
4
+ * These match the portal runtime generator defaults (primary: #005EB4),
5
+ * but are shipped statically so the UI library has a sensible default.
6
+ *
7
+ * Consumers can override any `--spark-*` variables if they want runtime theming.
8
+ */
9
+
10
+ @layer base {
11
+ :root,
12
+ .light,
13
+ .light-theme {
14
+ --spark-1: #fcfdfe;
15
+ --spark-2: #f6fafe;
16
+ --spark-3: #ebf3fd;
17
+ --spark-4: #dcebfe;
18
+ --spark-5: #cbe1fe;
19
+ --spark-6: #b6d5fc;
20
+ --spark-7: #9dc3f2;
21
+ --spark-8: #7aabe7;
22
+ --spark-9: #005eb4;
23
+ --spark-10: #004fa3;
24
+ --spark-11: #0f65bc;
25
+ --spark-12: #113157;
26
+
27
+ --spark-a1: #0055aa03;
28
+ --spark-a2: #0072e309;
29
+ --spark-a3: #0066e614;
30
+ --spark-a4: #006ef823;
31
+ --spark-a5: #006cfb34;
32
+ --spark-a6: #006df549;
33
+ --spark-a7: #0063de62;
34
+ --spark-a8: #005ed185;
35
+ --spark-a9: #005eb4;
36
+ --spark-a10: #004fa3;
37
+ --spark-a11: #005bb8f0;
38
+ --spark-a12: #00224bee;
39
+
40
+ --spark-contrast: #ffffff;
41
+ --spark-on-solid: #fff;
42
+ --spark-surface: #f4f9fecc;
43
+ --spark-background: #ffffff;
44
+ --spark-indicator: #005eb4;
45
+ --spark-track: #005eb4;
46
+
47
+ /* Companion tokens for the colour axis (Button color="neutral"|"danger").
48
+ These reference gamut-aware scales / flip per appearance, so one declaration
49
+ covers sRGB + p3 and light + dark. --neutral-contrast tracks the neutral knob;
50
+ --red-contrast is white (clears 3:1 on the appearance-stable red-9). */
51
+ --red-contrast: #fff;
52
+ --red-on-solid: #fff;
53
+ --red-surface: var(--red-2);
54
+ --neutral-contrast: var(--neutral-12);
55
+ --neutral-on-solid: #fff;
56
+ --neutral-surface: var(--neutral-2);
57
+ }
58
+
59
+ @supports (color: color(display-p3 1 1 1)) {
60
+ @media (color-gamut: p3) {
61
+ :root,
62
+ .light,
63
+ .light-theme {
64
+ --spark-1: oklch(99.4% 0.0013 254.2);
65
+ --spark-2: oklch(98.3% 0.0072 254.2);
66
+ --spark-3: oklch(96.1% 0.0155 254.2);
67
+ --spark-4: oklch(93.5% 0.0304 254.2);
68
+ --spark-5: oklch(90.3% 0.046 254.2);
69
+ --spark-6: oklch(86.3% 0.0643 254.2);
70
+ --spark-7: oklch(80.7% 0.0782 254.2);
71
+ --spark-8: oklch(73% 0.102 254.2);
72
+ --spark-9: oklch(48.6% 0.1556 254.2);
73
+ --spark-10: oklch(43.5% 0.1556 254.2);
74
+ --spark-11: oklch(51% 0.1556 254.2);
75
+ --spark-12: oklch(31.3% 0.077 254.2);
76
+
77
+ --spark-a1: color(display-p3 0.0235 0.349 0.6745 / 0.012);
78
+ --spark-a2: color(display-p3 0.0196 0.3882 0.8784 / 0.032);
79
+ --spark-a3: color(display-p3 0.0078 0.3725 0.8431 / 0.075);
80
+ --spark-a4: color(display-p3 0.0078 0.3804 0.9098 / 0.126);
81
+ --spark-a5: color(display-p3 0.0078 0.3569 0.9176 / 0.189);
82
+ --spark-a6: color(display-p3 0.0039 0.3608 0.898 / 0.263);
83
+ --spark-a7: color(display-p3 0.0039 0.3255 0.8118 / 0.353);
84
+ --spark-a8: color(display-p3 0.0039 0.3098 0.7647 / 0.483);
85
+ --spark-a9: color(display-p3 0 0.2471 0.6235 / 0.848);
86
+ --spark-a10: color(display-p3 0 0.2118 0.5608 / 0.879);
87
+ --spark-a11: color(display-p3 0 0.2549 0.651 / 0.82);
88
+ --spark-a12: color(display-p3 0 0.098 0.2549 / 0.899);
89
+
90
+ --spark-contrast: #ffffff;
91
+ --spark-on-solid: #fff;
92
+ --spark-surface: color(display-p3 0.9608 0.9765 0.9961 / 0.8);
93
+ --spark-background: #ffffff;
94
+ --spark-indicator: oklch(48.6% 0.1556 254.2);
95
+ --spark-track: oklch(48.6% 0.1556 254.2);
96
+ }
97
+ }
98
+ }
99
+
100
+ .dark,
101
+ .dark-theme {
102
+ --spark-1: #07121f;
103
+ --spark-2: #0b1929;
104
+ --spark-3: #002650;
105
+ --spark-4: #002f6f;
106
+ --spark-5: #003b83;
107
+ --spark-6: #004996;
108
+ --spark-7: #0058ae;
109
+ --spark-8: #0069cf;
110
+ --spark-9: #005eb4;
111
+ --spark-10: #00509d;
112
+ --spark-11: #71b8ff;
113
+ --spark-12: #c5e4ff;
114
+
115
+ --spark-a1: #0025ff0d;
116
+ --spark-a2: #0066fd18;
117
+ --spark-a3: #0062ff42;
118
+ --spark-a4: #005efd64;
119
+ --spark-a5: #0069fd7a;
120
+ --spark-a6: #0075ff8e;
121
+ --spark-a7: #007dffa8;
122
+ --spark-a8: #007ffecc;
123
+ --spark-a9: #0082ffae;
124
+ --spark-a10: #007cfe96;
125
+ --spark-a11: #71b8ff;
126
+ --spark-a12: #c5e4ff;
127
+
128
+ --spark-contrast: #fff;
129
+ --spark-on-solid: #fff;
130
+ --spark-surface: #06213f80;
131
+ --spark-background: #111113;
132
+ --spark-indicator: #005eb4;
133
+ --spark-track: #005eb4;
134
+
135
+ --red-contrast: #fff;
136
+ --red-on-solid: #fff;
137
+ --red-surface: var(--red-2);
138
+ --neutral-contrast: var(--neutral-12);
139
+ --neutral-on-solid: #fff;
140
+ --neutral-surface: var(--neutral-2);
141
+ }
142
+
143
+ @supports (color: color(display-p3 1 1 1)) {
144
+ @media (color-gamut: p3) {
145
+ .dark,
146
+ .dark-theme {
147
+ --spark-1: oklch(17.9% 0.0326 254.2);
148
+ --spark-2: oklch(20.9% 0.0382 254.2);
149
+ --spark-3: oklch(27.2% 0.0872 254.2);
150
+ --spark-4: oklch(31.7% 0.126 254.2);
151
+ --spark-5: oklch(36.4% 0.1378 254.2);
152
+ --spark-6: oklch(41.2% 0.144 254.2);
153
+ --spark-7: oklch(46.8% 0.1556 254.2);
154
+ --spark-8: oklch(53% 0.1789 254.2);
155
+ --spark-9: oklch(48.6% 0.1556 254.2);
156
+ --spark-10: oklch(43.5% 0.144 254.2);
157
+ --spark-11: oklch(77.1% 0.1674 254.2);
158
+ --spark-12: oklch(90.8% 0.0614 254.2);
159
+
160
+ --spark-a1: color(display-p3 0 0.1529 0.9961 / 0.047);
161
+ --spark-a2: color(display-p3 0 0.4196 1 / 0.089);
162
+ --spark-a3: color(display-p3 0 0.3882 1 / 0.246);
163
+ --spark-a4: color(display-p3 0.0588 0.3725 1 / 0.373);
164
+ --spark-a5: color(display-p3 0.1137 0.4235 1 / 0.454);
165
+ --spark-a6: color(display-p3 0.149 0.4706 1 / 0.534);
166
+ --spark-a7: color(display-p3 0.1882 0.502 1 / 0.632);
167
+ --spark-a8: color(display-p3 0.2039 0.5059 1 / 0.767);
168
+ --spark-a9: color(display-p3 0.1961 0.5137 0.9961 / 0.657);
169
+ --spark-a10: color(display-p3 0.1725 0.498 1 / 0.564);
170
+ --spark-a11: color(display-p3 0.5176 0.7333 1 / 0.975);
171
+ --spark-a12: color(display-p3 0.8039 0.902 1 / 0.988);
172
+
173
+ --spark-contrast: #fff;
174
+ --spark-on-solid: #fff;
175
+ --spark-surface: color(display-p3 0.0431 0.1176 0.2353 / 0.5);
176
+ --spark-background: #111113;
177
+ --spark-indicator: oklch(48.6% 0.1556 254.2);
178
+ --spark-track: oklch(48.6% 0.1556 254.2);
179
+ }
180
+ }
181
+ }
182
+
183
+ /*
184
+ * Default "shape" (border radius) tokens.
185
+ * Default radius preset = `medium` (factor 2) = today's portal look.
186
+ * The [data-radius] presets below scale the factor; `full` also enables the
187
+ * pill token (--spark-rounded-full) used by the max() idiom on Button etc.
188
+ */
189
+ /* factor + pill on :root only, so nested scopes inherit rather than reset. */
190
+ :root {
191
+ --spark-rounded-factor: 2;
192
+ --spark-rounded-full: 0px;
193
+ }
194
+
195
+ /* size calcs on .spark-theme too, so a scope re-resolves them from its factor. */
196
+ :root,
197
+ .spark-theme {
198
+ --spark-rounded-sm: calc(3px * var(--spark-rounded-factor));
199
+ --spark-rounded-md: calc(4px * var(--spark-rounded-factor));
200
+ --spark-rounded-lg: calc(6px * var(--spark-rounded-factor));
201
+ --spark-rounded-xl: calc(8px * var(--spark-rounded-factor));
202
+ --spark-rounded-2xl: calc(12px * var(--spark-rounded-factor));
203
+ --spark-rounded-3xl: calc(16px * var(--spark-rounded-factor));
204
+ }
205
+
206
+ /*
207
+ * Roundness presets. Sets the factor on the scoped element; descendants
208
+ * inherit, so it cascades and is overridable at any level (global → block →
209
+ * element). No attribute = medium (the :root default above).
210
+ */
211
+ [data-radius='none'] {
212
+ --spark-rounded-factor: 0;
213
+ }
214
+
215
+ [data-radius='small'] {
216
+ --spark-rounded-factor: 1;
217
+ }
218
+
219
+ [data-radius='medium'] {
220
+ --spark-rounded-factor: 2;
221
+ }
222
+
223
+ [data-radius='large'] {
224
+ --spark-rounded-factor: 3;
225
+ }
226
+
227
+ /* non-full presets clear the pill, so a nested override drops an inherited full. */
228
+ [data-radius='none'],
229
+ [data-radius='small'],
230
+ [data-radius='medium'],
231
+ [data-radius='large'] {
232
+ --spark-rounded-full: 0px;
233
+ }
234
+
235
+ /* `full` does two complementary things (both intentional, not a temp hack): */
236
+ [data-radius='full'] {
237
+ --spark-rounded-factor: 3; /* large radii for normally-rounded elements */
238
+ --spark-rounded-full: 9999px; /* + pill token: pill-able components (Button via max()) become pills */
239
+ }
240
+
241
+ /*
242
+ * Neutral scale indirection. The semantic gray tokens in theme.css read
243
+ * --neutral-* instead of a hardwired scale, so [data-neutral-color] can swap the
244
+ * neutral. Default = slate; cascades & overrides like the radius presets.
245
+ */
246
+ /* also under .dark so neutrals re-resolve in dark mode with no [data-neutral-color] set. */
247
+ :root,
248
+ .dark,
249
+ .dark-theme {
250
+ --neutral-1: var(--slate-1);
251
+ --neutral-2: var(--slate-2);
252
+ --neutral-3: var(--slate-3);
253
+ --neutral-4: var(--slate-4);
254
+ --neutral-5: var(--slate-5);
255
+ --neutral-6: var(--slate-6);
256
+ --neutral-7: var(--slate-7);
257
+ --neutral-8: var(--slate-8);
258
+ --neutral-9: var(--slate-9);
259
+ --neutral-10: var(--slate-10);
260
+ --neutral-11: var(--slate-11);
261
+ --neutral-12: var(--slate-12);
262
+ --neutral-a1: var(--slate-a1);
263
+ --neutral-a2: var(--slate-a2);
264
+ --neutral-a3: var(--slate-a3);
265
+ --neutral-a4: var(--slate-a4);
266
+ --neutral-a5: var(--slate-a5);
267
+ --neutral-a6: var(--slate-a6);
268
+ --neutral-a7: var(--slate-a7);
269
+ --neutral-a8: var(--slate-a8);
270
+ --neutral-a9: var(--slate-a9);
271
+ --neutral-a10: var(--slate-a10);
272
+ --neutral-a11: var(--slate-a11);
273
+ --neutral-a12: var(--slate-a12);
274
+ }
275
+
276
+ [data-neutral-color='slate'] {
277
+ --neutral-1: var(--slate-1);
278
+ --neutral-2: var(--slate-2);
279
+ --neutral-3: var(--slate-3);
280
+ --neutral-4: var(--slate-4);
281
+ --neutral-5: var(--slate-5);
282
+ --neutral-6: var(--slate-6);
283
+ --neutral-7: var(--slate-7);
284
+ --neutral-8: var(--slate-8);
285
+ --neutral-9: var(--slate-9);
286
+ --neutral-10: var(--slate-10);
287
+ --neutral-11: var(--slate-11);
288
+ --neutral-12: var(--slate-12);
289
+ --neutral-a1: var(--slate-a1);
290
+ --neutral-a2: var(--slate-a2);
291
+ --neutral-a3: var(--slate-a3);
292
+ --neutral-a4: var(--slate-a4);
293
+ --neutral-a5: var(--slate-a5);
294
+ --neutral-a6: var(--slate-a6);
295
+ --neutral-a7: var(--slate-a7);
296
+ --neutral-a8: var(--slate-a8);
297
+ --neutral-a9: var(--slate-a9);
298
+ --neutral-a10: var(--slate-a10);
299
+ --neutral-a11: var(--slate-a11);
300
+ --neutral-a12: var(--slate-a12);
301
+ }
302
+
303
+ [data-neutral-color='mauve'] {
304
+ --neutral-1: var(--mauve-1);
305
+ --neutral-2: var(--mauve-2);
306
+ --neutral-3: var(--mauve-3);
307
+ --neutral-4: var(--mauve-4);
308
+ --neutral-5: var(--mauve-5);
309
+ --neutral-6: var(--mauve-6);
310
+ --neutral-7: var(--mauve-7);
311
+ --neutral-8: var(--mauve-8);
312
+ --neutral-9: var(--mauve-9);
313
+ --neutral-10: var(--mauve-10);
314
+ --neutral-11: var(--mauve-11);
315
+ --neutral-12: var(--mauve-12);
316
+ --neutral-a1: var(--mauve-a1);
317
+ --neutral-a2: var(--mauve-a2);
318
+ --neutral-a3: var(--mauve-a3);
319
+ --neutral-a4: var(--mauve-a4);
320
+ --neutral-a5: var(--mauve-a5);
321
+ --neutral-a6: var(--mauve-a6);
322
+ --neutral-a7: var(--mauve-a7);
323
+ --neutral-a8: var(--mauve-a8);
324
+ --neutral-a9: var(--mauve-a9);
325
+ --neutral-a10: var(--mauve-a10);
326
+ --neutral-a11: var(--mauve-a11);
327
+ --neutral-a12: var(--mauve-a12);
328
+ }
329
+
330
+ [data-neutral-color='gray'] {
331
+ --neutral-1: var(--gray-1);
332
+ --neutral-2: var(--gray-2);
333
+ --neutral-3: var(--gray-3);
334
+ --neutral-4: var(--gray-4);
335
+ --neutral-5: var(--gray-5);
336
+ --neutral-6: var(--gray-6);
337
+ --neutral-7: var(--gray-7);
338
+ --neutral-8: var(--gray-8);
339
+ --neutral-9: var(--gray-9);
340
+ --neutral-10: var(--gray-10);
341
+ --neutral-11: var(--gray-11);
342
+ --neutral-12: var(--gray-12);
343
+ --neutral-a1: var(--gray-a1);
344
+ --neutral-a2: var(--gray-a2);
345
+ --neutral-a3: var(--gray-a3);
346
+ --neutral-a4: var(--gray-a4);
347
+ --neutral-a5: var(--gray-a5);
348
+ --neutral-a6: var(--gray-a6);
349
+ --neutral-a7: var(--gray-a7);
350
+ --neutral-a8: var(--gray-a8);
351
+ --neutral-a9: var(--gray-a9);
352
+ --neutral-a10: var(--gray-a10);
353
+ --neutral-a11: var(--gray-a11);
354
+ --neutral-a12: var(--gray-a12);
355
+ }
356
+
357
+ [data-neutral-color='sage'] {
358
+ --neutral-1: var(--sage-1);
359
+ --neutral-2: var(--sage-2);
360
+ --neutral-3: var(--sage-3);
361
+ --neutral-4: var(--sage-4);
362
+ --neutral-5: var(--sage-5);
363
+ --neutral-6: var(--sage-6);
364
+ --neutral-7: var(--sage-7);
365
+ --neutral-8: var(--sage-8);
366
+ --neutral-9: var(--sage-9);
367
+ --neutral-10: var(--sage-10);
368
+ --neutral-11: var(--sage-11);
369
+ --neutral-12: var(--sage-12);
370
+ --neutral-a1: var(--sage-a1);
371
+ --neutral-a2: var(--sage-a2);
372
+ --neutral-a3: var(--sage-a3);
373
+ --neutral-a4: var(--sage-a4);
374
+ --neutral-a5: var(--sage-a5);
375
+ --neutral-a6: var(--sage-a6);
376
+ --neutral-a7: var(--sage-a7);
377
+ --neutral-a8: var(--sage-a8);
378
+ --neutral-a9: var(--sage-a9);
379
+ --neutral-a10: var(--sage-a10);
380
+ --neutral-a11: var(--sage-a11);
381
+ --neutral-a12: var(--sage-a12);
382
+ }
383
+
384
+ [data-neutral-color='olive'] {
385
+ --neutral-1: var(--olive-1);
386
+ --neutral-2: var(--olive-2);
387
+ --neutral-3: var(--olive-3);
388
+ --neutral-4: var(--olive-4);
389
+ --neutral-5: var(--olive-5);
390
+ --neutral-6: var(--olive-6);
391
+ --neutral-7: var(--olive-7);
392
+ --neutral-8: var(--olive-8);
393
+ --neutral-9: var(--olive-9);
394
+ --neutral-10: var(--olive-10);
395
+ --neutral-11: var(--olive-11);
396
+ --neutral-12: var(--olive-12);
397
+ --neutral-a1: var(--olive-a1);
398
+ --neutral-a2: var(--olive-a2);
399
+ --neutral-a3: var(--olive-a3);
400
+ --neutral-a4: var(--olive-a4);
401
+ --neutral-a5: var(--olive-a5);
402
+ --neutral-a6: var(--olive-a6);
403
+ --neutral-a7: var(--olive-a7);
404
+ --neutral-a8: var(--olive-a8);
405
+ --neutral-a9: var(--olive-a9);
406
+ --neutral-a10: var(--olive-a10);
407
+ --neutral-a11: var(--olive-a11);
408
+ --neutral-a12: var(--olive-a12);
409
+ }
410
+
411
+ [data-neutral-color='sand'] {
412
+ --neutral-1: var(--sand-1);
413
+ --neutral-2: var(--sand-2);
414
+ --neutral-3: var(--sand-3);
415
+ --neutral-4: var(--sand-4);
416
+ --neutral-5: var(--sand-5);
417
+ --neutral-6: var(--sand-6);
418
+ --neutral-7: var(--sand-7);
419
+ --neutral-8: var(--sand-8);
420
+ --neutral-9: var(--sand-9);
421
+ --neutral-10: var(--sand-10);
422
+ --neutral-11: var(--sand-11);
423
+ --neutral-12: var(--sand-12);
424
+ --neutral-a1: var(--sand-a1);
425
+ --neutral-a2: var(--sand-a2);
426
+ --neutral-a3: var(--sand-a3);
427
+ --neutral-a4: var(--sand-a4);
428
+ --neutral-a5: var(--sand-a5);
429
+ --neutral-a6: var(--sand-a6);
430
+ --neutral-a7: var(--sand-a7);
431
+ --neutral-a8: var(--sand-a8);
432
+ --neutral-a9: var(--sand-a9);
433
+ --neutral-a10: var(--sand-a10);
434
+ --neutral-a11: var(--sand-a11);
435
+ --neutral-a12: var(--sand-a12);
436
+ }
437
+
438
+ /*
439
+ * Spacing density presets. Swaps the Tailwind --spacing base for the scoped
440
+ * subtree (cascades like the others). No attribute = default (0.25rem).
441
+ */
442
+ [data-spacing='dense'] {
443
+ --spark-spacing: 0.2rem;
444
+ }
445
+
446
+ [data-spacing='default'] {
447
+ --spark-spacing: 0.25rem;
448
+ }
449
+
450
+ [data-spacing='roomy'] {
451
+ --spark-spacing: 0.3rem;
452
+ }
453
+
454
+ /*
455
+ * Scaling presets (global zoom). Composes with spacing (--spacing =
456
+ * --spark-spacing * --spark-scaling) and scales --text-*. No attribute = 100%.
457
+ */
458
+ [data-scaling='90%'] {
459
+ --spark-scaling: 0.9;
460
+ }
461
+
462
+ [data-scaling='95%'] {
463
+ --spark-scaling: 0.95;
464
+ }
465
+
466
+ [data-scaling='100%'] {
467
+ --spark-scaling: 1;
468
+ }
469
+
470
+ [data-scaling='105%'] {
471
+ --spark-scaling: 1.05;
472
+ }
473
+
474
+ [data-scaling='110%'] {
475
+ --spark-scaling: 1.1;
476
+ }
477
+
478
+ /* Only declared under [data-style]; no preset → Button falls back to the raw accent.
479
+ The zero-specificity `:where(… .spark-theme)` twin re-declares the tokens inside
480
+ nested themes: var() resolves on the declaring element, so without it a nested
481
+ <Theme accentColor> would inherit the ancestor's already-resolved fg/bg (wrong
482
+ accent, wrong contrast). A nested theme's own [data-style] still wins on specificity. */
483
+ [data-style='solid'],
484
+ :where([data-style='solid'] .spark-theme) {
485
+ --spark-style-bg: var(--spark-9);
486
+ --spark-style-bg-hover: var(--spark-10);
487
+ /* fg intentionally unset: a solid foreground means different things per role, so
488
+ each component falls back to the right contrast — Button *text* → --spark-contrast
489
+ (AA-enforced 4.5:1), Checkbox *check glyph* → --spark-on-solid (native ~3:1, white
490
+ on any accent). Baking one here would give one of them the wrong contrast. */
491
+ --spark-style-border: transparent;
492
+ }
493
+
494
+ [data-style='soft'],
495
+ :where([data-style='soft'] .spark-theme) {
496
+ --spark-style-bg: var(--spark-a3);
497
+ --spark-style-bg-hover: var(--spark-a4);
498
+ --spark-style-fg: var(--spark-a11);
499
+ --spark-style-border: transparent;
500
+ /* soft is borderless in both states (idle-border drops the unchecked affordance border) */
501
+ --spark-style-idle-border: transparent;
502
+ }
503
+
504
+ [data-style='surface'],
505
+ :where([data-style='surface'] .spark-theme) {
506
+ --spark-style-bg: var(--spark-surface);
507
+ --spark-style-bg-hover: var(--spark-a3);
508
+ --spark-style-fg: var(--spark-a11);
509
+ --spark-style-border: var(--spark-a6);
510
+ /* surface = a thin (1px), recessed edge: neutral chrome at rest, accent when
511
+ active — mirrors the switch surface (idle ring neutral, on ring accent). */
512
+ --spark-style-border-width: 1px;
513
+ --spark-style-idle-border: var(--color-gray-a7);
514
+ }
515
+
516
+ [data-style='ghost'],
517
+ :where([data-style='ghost'] .spark-theme) {
518
+ --spark-style-bg: transparent;
519
+ --spark-style-bg-hover: var(--spark-a3);
520
+ --spark-style-fg: var(--spark-a11);
521
+ --spark-style-border: transparent;
522
+ }
523
+
524
+ /* outline: no fill, accent border + accent fg (the unfilled control look). */
525
+ [data-style='outline'],
526
+ :where([data-style='outline'] .spark-theme) {
527
+ --spark-style-bg: transparent;
528
+ --spark-style-bg-hover: var(--spark-a3);
529
+ --spark-style-fg: var(--spark-a11);
530
+ --spark-style-border: var(--spark-a8);
531
+ }
532
+
533
+ /*
534
+ * Colour axis — re-point the accent scale so the shared [data-style] recipes paint
535
+ * with neutral (gray) or danger (red) instead of accent. Set on the element via
536
+ * data-accent-color (Button `color="neutral"|"danger"`). var() resolves on the
537
+ * declaring element, so re-pointing --spark-* here re-colours the recipe that reads
538
+ * them; the :where(… .spark-theme) twin re-resolves inside nested themes. Additive
539
+ * (new selectors, no existing token/value change) → parity holds.
540
+ */
541
+ [data-accent-color='gray'],
542
+ :where([data-accent-color='gray'] .spark-theme) {
543
+ --spark-1: var(--neutral-1);
544
+ --spark-2: var(--neutral-2);
545
+ --spark-3: var(--neutral-3);
546
+ --spark-4: var(--neutral-4);
547
+ --spark-5: var(--neutral-5);
548
+ --spark-6: var(--neutral-6);
549
+ --spark-7: var(--neutral-7);
550
+ --spark-8: var(--neutral-8);
551
+ --spark-9: var(--neutral-9);
552
+ --spark-10: var(--neutral-10);
553
+ --spark-11: var(--neutral-11);
554
+ --spark-12: var(--neutral-12);
555
+ --spark-a1: var(--neutral-a1);
556
+ --spark-a2: var(--neutral-a2);
557
+ --spark-a3: var(--neutral-a3);
558
+ --spark-a4: var(--neutral-a4);
559
+ --spark-a5: var(--neutral-a5);
560
+ --spark-a6: var(--neutral-a6);
561
+ --spark-a7: var(--neutral-a7);
562
+ --spark-a8: var(--neutral-a8);
563
+ --spark-a9: var(--neutral-a9);
564
+ --spark-a10: var(--neutral-a10);
565
+ --spark-a11: var(--neutral-a11);
566
+ --spark-a12: var(--neutral-a12);
567
+ --spark-contrast: var(--neutral-contrast);
568
+ --spark-on-solid: var(--neutral-on-solid);
569
+ --spark-surface: var(--neutral-surface);
570
+ --spark-indicator: var(--neutral-9);
571
+ --spark-track: var(--neutral-9);
572
+ }
573
+
574
+ [data-accent-color='red'],
575
+ :where([data-accent-color='red'] .spark-theme) {
576
+ --spark-1: var(--red-1);
577
+ --spark-2: var(--red-2);
578
+ --spark-3: var(--red-3);
579
+ --spark-4: var(--red-4);
580
+ --spark-5: var(--red-5);
581
+ --spark-6: var(--red-6);
582
+ --spark-7: var(--red-7);
583
+ --spark-8: var(--red-8);
584
+ --spark-9: var(--red-9);
585
+ --spark-10: var(--red-10);
586
+ --spark-11: var(--red-11);
587
+ --spark-12: var(--red-12);
588
+ --spark-a1: var(--red-a1);
589
+ --spark-a2: var(--red-a2);
590
+ --spark-a3: var(--red-a3);
591
+ --spark-a4: var(--red-a4);
592
+ --spark-a5: var(--red-a5);
593
+ --spark-a6: var(--red-a6);
594
+ --spark-a7: var(--red-a7);
595
+ --spark-a8: var(--red-a8);
596
+ --spark-a9: var(--red-a9);
597
+ --spark-a10: var(--red-a10);
598
+ --spark-a11: var(--red-a11);
599
+ --spark-a12: var(--red-a12);
600
+ --spark-contrast: var(--red-contrast);
601
+ --spark-on-solid: var(--red-on-solid);
602
+ --spark-surface: var(--red-surface);
603
+ --spark-indicator: var(--red-9);
604
+ --spark-track: var(--red-9);
605
+ }
606
+
607
+ /*
608
+ * Card container chrome — a CONTAINER-only knob (contract §11). Everything here
609
+ * writes only --spark-card-* / --spark-card-c-*, tokens read EXCLUSIVELY by <Card>;
610
+ * it never touches data-style, --spark-style-*, or the --spark-* scale, so styling
611
+ * OR colouring a card never cascades into the Buttons/Checkboxes inside it.
612
+ *
613
+ * [data-card-variant] = the app-level default look (from <Theme cardVariant>); a
614
+ * per-card `variant` prop overrides it via the cva recipe. [data-card-color='accent']
615
+ * re-points the 5-slot card mini-scale so the chrome tints with the accent while the
616
+ * card's content controls keep their own colour. Neutral fallbacks are baked into the
617
+ * cva classes + the presets below, so a default card tracks the app neutral knob.
618
+ * The :where(… .spark-theme) / (… [data-card-color]) twins re-resolve var() inside
619
+ * nested themes / recoloured cards (same reason as the [data-style] twins above).
620
+ * Every preset re-declares the FULL token set (equal-specificity sibling leak guard,
621
+ * like the [data-high-contrast] block). Additive → parity holds.
622
+ */
623
+ [data-card-color='accent'],
624
+ :where([data-card-color='accent'] .spark-theme) {
625
+ --spark-card-c-soft: var(--spark-a3);
626
+ --spark-card-c-surface: var(--spark-surface);
627
+ --spark-card-c-border: var(--spark-a6);
628
+ --spark-card-c-solid: var(--spark-9);
629
+ --spark-card-c-contrast: var(--spark-contrast);
630
+ }
631
+
632
+ [data-card-variant='soft'],
633
+ :where([data-card-variant='soft'] .spark-theme),
634
+ :where([data-card-variant='soft'] [data-card-color]) {
635
+ --spark-card-px: 1rem;
636
+ --spark-card-bg: var(--spark-card-c-soft, var(--neutral-a3));
637
+ --spark-card-border: transparent;
638
+ --spark-card-border-width: 0px;
639
+ --spark-card-fg: var(--neutral-a12);
640
+ --spark-card-fg-muted: var(--neutral-a11);
641
+ --spark-card-icon: var(--spark-a11);
642
+ }
643
+
644
+ [data-card-variant='surface'],
645
+ :where([data-card-variant='surface'] .spark-theme),
646
+ :where([data-card-variant='surface'] [data-card-color]) {
647
+ --spark-card-px: 1rem;
648
+ --spark-card-bg: var(--spark-card-c-surface, var(--neutral-2));
649
+ --spark-card-border: var(--spark-card-c-border, var(--neutral-a6));
650
+ --spark-card-border-width: 1px;
651
+ --spark-card-fg: var(--neutral-a12);
652
+ --spark-card-fg-muted: var(--neutral-a11);
653
+ --spark-card-icon: var(--spark-a11);
654
+ }
655
+
656
+ [data-card-variant='outline'],
657
+ :where([data-card-variant='outline'] .spark-theme),
658
+ :where([data-card-variant='outline'] [data-card-color]) {
659
+ --spark-card-px: 1rem;
660
+ --spark-card-bg: transparent;
661
+ --spark-card-border: var(--spark-card-c-border, var(--neutral-a6));
662
+ --spark-card-border-width: 1px;
663
+ --spark-card-fg: var(--neutral-a12);
664
+ --spark-card-fg-muted: var(--neutral-a11);
665
+ --spark-card-icon: var(--spark-a11);
666
+ }
667
+
668
+ [data-card-variant='ghost'],
669
+ :where([data-card-variant='ghost'] .spark-theme),
670
+ :where([data-card-variant='ghost'] [data-card-color]) {
671
+ /* flush horizontally (no chrome to inset against); vertical rhythm kept by py-3 */
672
+ --spark-card-px: 0px;
673
+ --spark-card-bg: transparent;
674
+ --spark-card-border: transparent;
675
+ --spark-card-border-width: 0px;
676
+ --spark-card-fg: var(--neutral-a12);
677
+ --spark-card-fg-muted: var(--neutral-a11);
678
+ --spark-card-icon: var(--spark-a11);
679
+ }
680
+
681
+ /* HIDDEN for now: `SparkCardVariant` omits `solid` (content-contrast story TBD),
682
+ so the typed API never emits data-card-variant='solid'. Kept dormant + ready. */
683
+ [data-card-variant='solid'],
684
+ :where([data-card-variant='solid'] .spark-theme),
685
+ :where([data-card-variant='solid'] [data-card-color]) {
686
+ /* dark fill → light contrast ink on all slots (accent contrast is AA-enforced) */
687
+ --spark-card-px: 1rem;
688
+ --spark-card-bg: var(--spark-card-c-solid, var(--neutral-9));
689
+ --spark-card-border: transparent;
690
+ --spark-card-border-width: 0px;
691
+ --spark-card-fg: var(--spark-card-c-contrast, var(--neutral-contrast));
692
+ --spark-card-fg-muted: var(
693
+ --spark-card-c-contrast,
694
+ var(--neutral-contrast)
695
+ );
696
+ --spark-card-icon: var(--spark-card-c-contrast, var(--neutral-contrast));
697
+ }
698
+
699
+ /*
700
+ * High-contrast — an ORTHOGONAL modifier layered on any [data-style]. Per the
701
+ * Spark Foundation reference (default vs high-contrast overview, Figma
702
+ * 1061-3166): a non-solid style keeps its EXACT default fill — HC only darkens
703
+ * the ink (fg a11→a12) and strengthens the visible border (→a11). `solid` is
704
+ * the sole style whose fill changes: it darkens 9→12 (fg stays step-1). Bare
705
+ * [data-high-contrast] = the solid case; each per-style rule must re-declare its
706
+ * default fill because the bare rule has equal specificity and later source
707
+ * order, so it would otherwise leak its step-12 fill onto the other styles.
708
+ * Mirrors the [data-style] `:where(… .spark-theme)` twin for nested themes.
709
+ */
710
+ [data-high-contrast],
711
+ [data-high-contrast] [data-style='solid'],
712
+ :where([data-high-contrast] .spark-theme) {
713
+ /* solid HC: step-12 fill + step-1 fg sit at opposite ends of the scale in
714
+ BOTH appearances, so the fg maximally contrasts the fill either way (a
715
+ fixed white fg would fail in dark mode where step-12 is near-white). */
716
+ --spark-style-bg: var(--spark-12);
717
+ --spark-style-bg-hover: var(--spark-11);
718
+ --spark-style-fg: var(--spark-1);
719
+ --spark-style-border: transparent;
720
+ }
721
+
722
+ [data-high-contrast][data-style='soft'],
723
+ [data-high-contrast] [data-style='soft'],
724
+ :where([data-high-contrast][data-style='soft'] .spark-theme) {
725
+ /* same faint fill as default soft; only the ink darkens (a11→a12) */
726
+ --spark-style-bg: var(--spark-a3);
727
+ --spark-style-bg-hover: var(--spark-a4);
728
+ --spark-style-fg: var(--spark-a12);
729
+ --spark-style-border: transparent;
730
+ --spark-style-idle-border: transparent;
731
+ }
732
+
733
+ [data-high-contrast][data-style='surface'],
734
+ [data-high-contrast] [data-style='surface'],
735
+ :where([data-high-contrast][data-style='surface'] .spark-theme) {
736
+ /* same surface fill as default; ink darkens + border strengthens a6→a11 */
737
+ --spark-style-bg: var(--spark-surface);
738
+ --spark-style-bg-hover: var(--spark-a3);
739
+ --spark-style-fg: var(--spark-a12);
740
+ --spark-style-border: var(--spark-a11);
741
+ }
742
+
743
+ [data-high-contrast][data-style='ghost'],
744
+ [data-high-contrast] [data-style='ghost'],
745
+ :where([data-high-contrast][data-style='ghost'] .spark-theme) {
746
+ --spark-style-bg: transparent;
747
+ --spark-style-bg-hover: var(--spark-a3);
748
+ --spark-style-fg: var(--spark-a12);
749
+ --spark-style-border: transparent;
750
+ }
751
+
752
+ [data-high-contrast][data-style='outline'],
753
+ [data-high-contrast] [data-style='outline'],
754
+ :where([data-high-contrast][data-style='outline'] .spark-theme) {
755
+ /* transparent fill unchanged; ink darkens + border strengthens a8→a11 */
756
+ --spark-style-bg: transparent;
757
+ --spark-style-bg-hover: var(--spark-a3);
758
+ --spark-style-fg: var(--spark-a12);
759
+ --spark-style-border: var(--spark-a11);
760
+ }
761
+
762
+ /*
763
+ * Switch ON-track intensity (Radix-aligned). Unlike a checkbox (fill varies
764
+ * per style), a switch's "on" needs a visibly filled track — so it reads
765
+ * --spark-switch-track, a STRONG accent by default (fallback --spark-9 covers
766
+ * solid/surface/outline); only `soft` lightens it. `surface` still adds its
767
+ * border via --spark-style-border. Matches Radix (classic/surface = strong
768
+ * accent, soft = lighter).
769
+ */
770
+ [data-style='soft'],
771
+ :where([data-style='soft'] .spark-theme) {
772
+ --spark-switch-track: var(--spark-a5);
773
+ }
774
+
775
+ /* surface's hallmark is a bordered ("recessed") track — a neutral ring, most
776
+ visible in the OFF state (Radix "surface"). switch-local so it never touches
777
+ the checkbox's accent idle-border. The ON border stays --spark-style-border. */
778
+ [data-style='surface'],
779
+ :where([data-style='surface'] .spark-theme) {
780
+ --spark-switch-idle-border: var(--color-gray-a7);
781
+ }
782
+
783
+ /* HC = the checkbox HC-solid model applied to the whole switch: the on-track
784
+ deepens to step-12 and the thumb flips to step-1 (opposite ends of the scale,
785
+ so they maximally contrast in BOTH appearances — light: near-white thumb on a
786
+ dark track; dark: near-dark thumb on a bright track). A fixed white thumb can't
787
+ do this (it vanishes on the near-white step-12 track in dark), and step-10 was
788
+ nearly indistinguishable from the default step-9. Uniform across styles so HC
789
+ is an unmistakable, legible override. */
790
+ [data-high-contrast],
791
+ :where([data-high-contrast] .spark-theme) {
792
+ --spark-switch-track: var(--spark-12);
793
+ --spark-switch-thumb: var(--spark-1);
794
+ }
795
+
796
+ /*
797
+ * Radio — a ring + dot (always round), so it can't reuse the checkbox's fill
798
+ * tokens: `solid` needs a VISIBLE accent ring (the checkbox's solid border is
799
+ * transparent), and the dot sits on the unfilled box so it must stay a
800
+ * background-legible accent. Both read radio-specific tokens; the default (solid)
801
+ * falls back to --spark-9 (ring 9, dot 9). soft drops the ring and softens the dot
802
+ * to a11; surface keeps the accent ring but softens the dot. HC deepens to step-12
803
+ * / a12 (the ring/dot darken together, mirroring the checkbox HC model in §11).
804
+ */
805
+ [data-style='soft'],
806
+ :where([data-style='soft'] .spark-theme) {
807
+ --spark-radio-ring: transparent;
808
+ --spark-radio-dot: var(--spark-a11);
809
+ }
810
+
811
+ [data-style='surface'],
812
+ :where([data-style='surface'] .spark-theme) {
813
+ --spark-radio-dot: var(--spark-a11);
814
+ }
815
+
816
+ [data-high-contrast],
817
+ :where([data-high-contrast] .spark-theme) {
818
+ --spark-radio-ring: var(--spark-12);
819
+ --spark-radio-dot: var(--spark-12);
820
+ }
821
+
822
+ [data-high-contrast][data-style='soft'],
823
+ :where([data-high-contrast][data-style='soft'] .spark-theme) {
824
+ --spark-radio-ring: transparent;
825
+ --spark-radio-dot: var(--spark-a12);
826
+ }
827
+
828
+ [data-high-contrast][data-style='surface'],
829
+ :where([data-high-contrast][data-style='surface'] .spark-theme) {
830
+ --spark-radio-dot: var(--spark-a12);
831
+ }
832
+
833
+ /*
834
+ * Tabs — NOT data-style-driven: a tab strip has no solid/soft/surface axis, so it
835
+ * themes via accent + neutral + radius + scaling + high-contrast only. Two component
836
+ * tokens, both accent-by-default via component fallbacks: the active/hover ink
837
+ * (fallback --spark-a11) and the underline indicator (fallback --spark-indicator,
838
+ * i.e. step 9). HC deepens both — ink a11→a12, indicator 9→12 — mirroring the §11
839
+ * model (ink darkens, the accent-filled element deepens to 12).
840
+ */
841
+ [data-high-contrast],
842
+ :where([data-high-contrast] .spark-theme) {
843
+ --spark-tabs-ink: var(--spark-a12);
844
+ --spark-tabs-indicator: var(--spark-12);
845
+ }
846
+
847
+ /*
848
+ * Slider — like Tabs, NOT data-style-driven: a track/thumb has no solid/soft/surface
849
+ * axis (a `soft` a3 fill would make the filled range invisible), so it themes via
850
+ * accent + neutral + radius + scaling + high-contrast only. --spark-slider-range is
851
+ * the accent that fills the range AND paints the thumb (fallback --spark-9); the rail
852
+ * (unfilled remainder) stays a neutral gray. --spark-slider-tick-on is the step-dot
853
+ * colour ON the accent fill (fallback --spark-on-solid, ~white). HC deepens the accent
854
+ * 9→12 (§11); because the HC fill is step-12 (near-white in dark), the on-fill dot
855
+ * flips to step-1 — the same opposite-scale-ends contrast trick as the switch thumb,
856
+ * so it stays legible in both appearances.
857
+ */
858
+ [data-high-contrast],
859
+ :where([data-high-contrast] .spark-theme) {
860
+ --spark-slider-range: var(--spark-12);
861
+ --spark-slider-tick-on: var(--spark-1);
862
+ }
863
+
864
+ /*
865
+ * Badge — a non-interactive chip. Unlike Button/Checkbox (bare = solid accent), an
866
+ * UNSTYLED <Badge> is intentionally NEUTRAL + low-emphasis: the component's own
867
+ * fallbacks read the gray/neutral scale (gray-a3 fill, gray-a11 ink), so with no
868
+ * [data-style] it's a quiet gray chip that ignores the accent. Any data-style brings
869
+ * in the accent via the shared --spark-style-* knob for free — soft, surface and
870
+ * outline already carry the right ink (a11) and borders. Only `solid` needs a fix:
871
+ * its fill is the strong accent (step 9, or step 12 in HC), so the ink must be the
872
+ * readable --spark-contrast, not a11. The shared solid preset leaves --spark-style-fg
873
+ * unset (a checkbox glyph wants --spark-on-solid, badge TEXT wants --spark-contrast),
874
+ * so the badge supplies its own --spark-badge-fg, consulted only when --spark-style-fg
875
+ * is unset — i.e. the solid style. High-contrast needs no badge rule: HC re-declares
876
+ * --spark-style-fg (step-1 on the step-12 solid fill; a12 on the faint non-solid
877
+ * fills), which wins the fallback chain outright.
878
+ */
879
+ [data-style='solid'],
880
+ :where([data-style='solid'] .spark-theme) {
881
+ --spark-badge-fg: var(--spark-contrast);
882
+ }
883
+ }