@epilot/spark-ui 0.18.2 → 0.20.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 (280) hide show
  1. package/dist/components/attachment.d.cts +1 -1
  2. package/dist/components/attachment.d.ts +1 -1
  3. package/dist/components/avatar.cjs +1 -1
  4. package/dist/components/avatar.cjs.map +1 -1
  5. package/dist/components/avatar.js +1 -1
  6. package/dist/components/avatar.js.map +1 -1
  7. package/dist/components/badge.cjs +1 -1
  8. package/dist/components/badge.cjs.map +1 -1
  9. package/dist/components/badge.d.cts +2 -1
  10. package/dist/components/badge.d.ts +2 -1
  11. package/dist/components/badge.js +1 -1
  12. package/dist/components/badge.js.map +1 -1
  13. package/dist/components/{energy-bar-chart.cjs → bar-chart-with-total.cjs} +4 -4
  14. package/dist/components/bar-chart-with-total.cjs.map +1 -0
  15. package/dist/components/bar-chart-with-total.d.cts +19 -0
  16. package/dist/components/bar-chart-with-total.d.ts +19 -0
  17. package/dist/components/{energy-bar-chart.js → bar-chart-with-total.js} +4 -4
  18. package/dist/components/bar-chart-with-total.js.map +1 -0
  19. package/dist/components/bar-chart.cjs +1 -1
  20. package/dist/components/bar-chart.js +2 -2
  21. package/dist/components/bubble.d.cts +1 -1
  22. package/dist/components/bubble.d.ts +1 -1
  23. package/dist/components/button-group.cjs +2 -2
  24. package/dist/components/button-group.cjs.map +1 -1
  25. package/dist/components/button-group.d.cts +1 -1
  26. package/dist/components/button-group.d.ts +1 -1
  27. package/dist/components/button-group.js +2 -2
  28. package/dist/components/button-group.js.map +1 -1
  29. package/dist/components/button.cjs +6 -4
  30. package/dist/components/button.cjs.map +1 -1
  31. package/dist/components/button.d.cts +6 -5
  32. package/dist/components/button.d.ts +6 -5
  33. package/dist/components/button.js +6 -4
  34. package/dist/components/button.js.map +1 -1
  35. package/dist/components/calendar.cjs +3 -3
  36. package/dist/components/calendar.cjs.map +1 -1
  37. package/dist/components/calendar.js +3 -3
  38. package/dist/components/calendar.js.map +1 -1
  39. package/dist/components/callout.cjs +10 -10
  40. package/dist/components/callout.cjs.map +1 -1
  41. package/dist/components/callout.d.cts +1 -1
  42. package/dist/components/callout.d.ts +1 -1
  43. package/dist/components/callout.js +10 -10
  44. package/dist/components/callout.js.map +1 -1
  45. package/dist/components/checkbox.cjs +1 -1
  46. package/dist/components/checkbox.cjs.map +1 -1
  47. package/dist/components/checkbox.js +1 -1
  48. package/dist/components/checkbox.js.map +1 -1
  49. package/dist/components/circular-gauge.cjs +7 -7
  50. package/dist/components/circular-gauge.cjs.map +1 -1
  51. package/dist/components/circular-gauge.js +7 -7
  52. package/dist/components/circular-gauge.js.map +1 -1
  53. package/dist/components/day-of-week-picker.cjs +21 -41
  54. package/dist/components/day-of-week-picker.cjs.map +1 -1
  55. package/dist/components/day-of-week-picker.d.cts +19 -23
  56. package/dist/components/day-of-week-picker.d.ts +19 -23
  57. package/dist/components/day-of-week-picker.js +21 -41
  58. package/dist/components/day-of-week-picker.js.map +1 -1
  59. package/dist/components/{device-card.cjs → entity-card.cjs} +31 -31
  60. package/dist/components/entity-card.cjs.map +1 -0
  61. package/dist/components/{device-card.d.cts → entity-card.d.cts} +15 -15
  62. package/dist/components/{device-card.d.ts → entity-card.d.ts} +15 -15
  63. package/dist/components/{device-card.js → entity-card.js} +20 -20
  64. package/dist/components/entity-card.js.map +1 -0
  65. package/dist/components/field.cjs +1 -1
  66. package/dist/components/field.cjs.map +1 -1
  67. package/dist/components/field.js +1 -1
  68. package/dist/components/field.js.map +1 -1
  69. package/dist/components/{feed-in-hero.cjs → hero-metric.cjs} +10 -15
  70. package/dist/components/hero-metric.cjs.map +1 -0
  71. package/dist/components/hero-metric.d.cts +27 -0
  72. package/dist/components/hero-metric.d.ts +27 -0
  73. package/dist/components/{feed-in-hero.js → hero-metric.js} +7 -12
  74. package/dist/components/hero-metric.js.map +1 -0
  75. package/dist/components/info-block.d.cts +1 -1
  76. package/dist/components/info-block.d.ts +1 -1
  77. package/dist/components/input-date.cjs +6 -6
  78. package/dist/components/input-date.cjs.map +1 -1
  79. package/dist/components/input-date.d.cts +2 -1
  80. package/dist/components/input-date.d.ts +2 -1
  81. package/dist/components/input-date.js +6 -6
  82. package/dist/components/input-date.js.map +1 -1
  83. package/dist/components/input-group.d.cts +1 -1
  84. package/dist/components/input-group.d.ts +1 -1
  85. package/dist/components/input-otp.cjs +1 -1
  86. package/dist/components/input-otp.cjs.map +1 -1
  87. package/dist/components/input-otp.js +1 -1
  88. package/dist/components/input-otp.js.map +1 -1
  89. package/dist/components/input.cjs +1 -1
  90. package/dist/components/input.cjs.map +1 -1
  91. package/dist/components/input.js +1 -1
  92. package/dist/components/input.js.map +1 -1
  93. package/dist/components/label.cjs +1 -1
  94. package/dist/components/label.cjs.map +1 -1
  95. package/dist/components/label.js +1 -1
  96. package/dist/components/label.js.map +1 -1
  97. package/dist/components/line-chart.cjs +2 -2
  98. package/dist/components/line-chart.js +3 -3
  99. package/dist/components/number-flow.d.cts +12 -2
  100. package/dist/components/number-flow.d.ts +12 -2
  101. package/dist/components/page-header.d.cts +1 -1
  102. package/dist/components/page-header.d.ts +1 -1
  103. package/dist/components/period-tabs.cjs +2 -22
  104. package/dist/components/period-tabs.cjs.map +1 -1
  105. package/dist/components/period-tabs.d.cts +5 -22
  106. package/dist/components/period-tabs.d.ts +5 -22
  107. package/dist/components/period-tabs.js +2 -22
  108. package/dist/components/period-tabs.js.map +1 -1
  109. package/dist/components/pill.cjs +2 -2
  110. package/dist/components/pill.cjs.map +1 -1
  111. package/dist/components/pill.js +2 -2
  112. package/dist/components/pill.js.map +1 -1
  113. package/dist/components/progress.cjs +1 -1
  114. package/dist/components/progress.cjs.map +1 -1
  115. package/dist/components/progress.js +1 -1
  116. package/dist/components/progress.js.map +1 -1
  117. package/dist/components/radio.cjs +1 -1
  118. package/dist/components/radio.cjs.map +1 -1
  119. package/dist/components/radio.js +1 -1
  120. package/dist/components/radio.js.map +1 -1
  121. package/dist/components/sankey-chart.cjs +1 -11
  122. package/dist/components/sankey-chart.cjs.map +1 -1
  123. package/dist/components/sankey-chart.d.cts +2 -3
  124. package/dist/components/sankey-chart.d.ts +2 -3
  125. package/dist/components/sankey-chart.js +2 -11
  126. package/dist/components/sankey-chart.js.map +1 -1
  127. package/dist/components/segmented-control.cjs +2 -2
  128. package/dist/components/segmented-control.cjs.map +1 -1
  129. package/dist/components/segmented-control.js +2 -2
  130. package/dist/components/segmented-control.js.map +1 -1
  131. package/dist/components/select.cjs +32 -2
  132. package/dist/components/select.cjs.map +1 -1
  133. package/dist/components/select.d.cts +11 -1
  134. package/dist/components/select.d.ts +11 -1
  135. package/dist/components/select.js +32 -4
  136. package/dist/components/select.js.map +1 -1
  137. package/dist/components/stepper.cjs +1 -1
  138. package/dist/components/stepper.cjs.map +1 -1
  139. package/dist/components/stepper.d.cts +4 -4
  140. package/dist/components/stepper.d.ts +4 -4
  141. package/dist/components/stepper.js +1 -1
  142. package/dist/components/stepper.js.map +1 -1
  143. package/dist/components/table.cjs +147 -0
  144. package/dist/components/table.cjs.map +1 -0
  145. package/dist/components/table.d.cts +75 -0
  146. package/dist/components/table.d.ts +75 -0
  147. package/dist/components/table.js +138 -0
  148. package/dist/components/table.js.map +1 -0
  149. package/dist/components/textarea.cjs +1 -1
  150. package/dist/components/textarea.cjs.map +1 -1
  151. package/dist/components/textarea.js +1 -1
  152. package/dist/components/textarea.js.map +1 -1
  153. package/dist/components/tooltip.cjs +1 -1
  154. package/dist/components/tooltip.cjs.map +1 -1
  155. package/dist/components/tooltip.js +1 -1
  156. package/dist/components/tooltip.js.map +1 -1
  157. package/dist/components/typography.cjs +1 -1
  158. package/dist/components/typography.cjs.map +1 -1
  159. package/dist/components/typography.d.cts +4 -1
  160. package/dist/components/typography.d.ts +4 -1
  161. package/dist/components/typography.js +1 -1
  162. package/dist/components/typography.js.map +1 -1
  163. package/dist/components/wizard-layout.cjs +57 -0
  164. package/dist/components/wizard-layout.cjs.map +1 -0
  165. package/dist/components/wizard-layout.d.cts +34 -0
  166. package/dist/components/wizard-layout.d.ts +34 -0
  167. package/dist/components/wizard-layout.js +50 -0
  168. package/dist/components/wizard-layout.js.map +1 -0
  169. package/dist/lib/accent-colors.cjs +4 -1
  170. package/dist/lib/accent-colors.cjs.map +1 -1
  171. package/dist/lib/accent-colors.d.cts +1 -1
  172. package/dist/lib/accent-colors.d.ts +1 -1
  173. package/dist/lib/accent-colors.js +4 -1
  174. package/dist/lib/accent-colors.js.map +1 -1
  175. package/dist/lib/accent-theme.cjs +144 -9
  176. package/dist/lib/accent-theme.cjs.map +1 -1
  177. package/dist/lib/accent-theme.d.cts +37 -1
  178. package/dist/lib/accent-theme.d.ts +37 -1
  179. package/dist/lib/accent-theme.js +140 -10
  180. package/dist/lib/accent-theme.js.map +1 -1
  181. package/dist/styles/index.css +10 -1
  182. package/dist/styles/spark-default.css +75 -321
  183. package/dist/styles/theme.css +54 -8
  184. package/dist/utils/format.cjs +0 -13
  185. package/dist/utils/format.cjs.map +1 -1
  186. package/dist/utils/format.d.cts +1 -7
  187. package/dist/utils/format.d.ts +1 -7
  188. package/dist/utils/format.js +1 -12
  189. package/dist/utils/format.js.map +1 -1
  190. package/package.json +1 -1
  191. package/dist/components/battery-progress-row.cjs +0 -135
  192. package/dist/components/battery-progress-row.cjs.map +0 -1
  193. package/dist/components/battery-progress-row.d.cts +0 -69
  194. package/dist/components/battery-progress-row.d.ts +0 -69
  195. package/dist/components/battery-progress-row.js +0 -125
  196. package/dist/components/battery-progress-row.js.map +0 -1
  197. package/dist/components/device-card.cjs.map +0 -1
  198. package/dist/components/device-card.js.map +0 -1
  199. package/dist/components/energy-bar-chart.cjs.map +0 -1
  200. package/dist/components/energy-bar-chart.d.cts +0 -43
  201. package/dist/components/energy-bar-chart.d.ts +0 -43
  202. package/dist/components/energy-bar-chart.js.map +0 -1
  203. package/dist/components/energy-breakdown.cjs +0 -80
  204. package/dist/components/energy-breakdown.cjs.map +0 -1
  205. package/dist/components/energy-breakdown.d.cts +0 -24
  206. package/dist/components/energy-breakdown.d.ts +0 -24
  207. package/dist/components/energy-breakdown.js +0 -79
  208. package/dist/components/energy-breakdown.js.map +0 -1
  209. package/dist/components/energy-history-chart.cjs +0 -63
  210. package/dist/components/energy-history-chart.cjs.map +0 -1
  211. package/dist/components/energy-history-chart.d.cts +0 -64
  212. package/dist/components/energy-history-chart.d.ts +0 -64
  213. package/dist/components/energy-history-chart.js +0 -62
  214. package/dist/components/energy-history-chart.js.map +0 -1
  215. package/dist/components/feed-in-hero.cjs.map +0 -1
  216. package/dist/components/feed-in-hero.d.cts +0 -32
  217. package/dist/components/feed-in-hero.d.ts +0 -32
  218. package/dist/components/feed-in-hero.js.map +0 -1
  219. package/dist/components/metering-row.cjs +0 -59
  220. package/dist/components/metering-row.cjs.map +0 -1
  221. package/dist/components/metering-row.d.cts +0 -31
  222. package/dist/components/metering-row.d.ts +0 -31
  223. package/dist/components/metering-row.js +0 -55
  224. package/dist/components/metering-row.js.map +0 -1
  225. package/dist/components/money-saved-block.cjs +0 -83
  226. package/dist/components/money-saved-block.cjs.map +0 -1
  227. package/dist/components/money-saved-block.d.cts +0 -55
  228. package/dist/components/money-saved-block.d.ts +0 -55
  229. package/dist/components/money-saved-block.js +0 -76
  230. package/dist/components/money-saved-block.js.map +0 -1
  231. package/dist/components/on-off-button.cjs +0 -32
  232. package/dist/components/on-off-button.cjs.map +0 -1
  233. package/dist/components/on-off-button.d.cts +0 -18
  234. package/dist/components/on-off-button.d.ts +0 -18
  235. package/dist/components/on-off-button.js +0 -31
  236. package/dist/components/on-off-button.js.map +0 -1
  237. package/dist/components/onboarding-layout.cjs +0 -67
  238. package/dist/components/onboarding-layout.cjs.map +0 -1
  239. package/dist/components/onboarding-layout.d.cts +0 -44
  240. package/dist/components/onboarding-layout.d.ts +0 -44
  241. package/dist/components/onboarding-layout.js +0 -60
  242. package/dist/components/onboarding-layout.js.map +0 -1
  243. package/dist/components/power-history-chart.cjs +0 -498
  244. package/dist/components/power-history-chart.cjs.map +0 -1
  245. package/dist/components/power-history-chart.d.cts +0 -71
  246. package/dist/components/power-history-chart.d.ts +0 -71
  247. package/dist/components/power-history-chart.js +0 -496
  248. package/dist/components/power-history-chart.js.map +0 -1
  249. package/dist/components/power-history.cjs +0 -114
  250. package/dist/components/power-history.cjs.map +0 -1
  251. package/dist/components/power-history.d.cts +0 -40
  252. package/dist/components/power-history.d.ts +0 -41
  253. package/dist/components/power-history.js +0 -114
  254. package/dist/components/power-history.js.map +0 -1
  255. package/dist/components/power-network.cjs +0 -559
  256. package/dist/components/power-network.cjs.map +0 -1
  257. package/dist/components/power-network.d.cts +0 -80
  258. package/dist/components/power-network.d.ts +0 -80
  259. package/dist/components/power-network.js +0 -553
  260. package/dist/components/power-network.js.map +0 -1
  261. package/dist/components/smart-toggle-button.cjs +0 -24
  262. package/dist/components/smart-toggle-button.cjs.map +0 -1
  263. package/dist/components/smart-toggle-button.d.cts +0 -16
  264. package/dist/components/smart-toggle-button.d.ts +0 -16
  265. package/dist/components/smart-toggle-button.js +0 -23
  266. package/dist/components/smart-toggle-button.js.map +0 -1
  267. package/dist/components/solar-forecast-chart.cjs +0 -108
  268. package/dist/components/solar-forecast-chart.cjs.map +0 -1
  269. package/dist/components/solar-forecast-chart.d.cts +0 -77
  270. package/dist/components/solar-forecast-chart.d.ts +0 -77
  271. package/dist/components/solar-forecast-chart.js +0 -103
  272. package/dist/components/solar-forecast-chart.js.map +0 -1
  273. package/dist/number-flow-Bch81ixZ.d.cts +0 -14
  274. package/dist/number-flow-Bch81ixZ.d.ts +0 -14
  275. package/dist/utils/build-sankey-nodes.cjs +0 -72
  276. package/dist/utils/build-sankey-nodes.cjs.map +0 -1
  277. package/dist/utils/build-sankey-nodes.d.cts +0 -27
  278. package/dist/utils/build-sankey-nodes.d.ts +0 -27
  279. package/dist/utils/build-sankey-nodes.js +0 -71
  280. package/dist/utils/build-sankey-nodes.js.map +0 -1
@@ -21,7 +21,7 @@
21
21
  --spark-8: #7aabe7;
22
22
  --spark-9: #005eb4;
23
23
  --spark-10: #004fa3;
24
- --spark-11: #0f65bc;
24
+ --spark-11: #0862b8;
25
25
  --spark-12: #113157;
26
26
 
27
27
  --spark-a1: #0055aa03;
@@ -34,7 +34,7 @@
34
34
  --spark-a8: #005ed185;
35
35
  --spark-a9: #005eb4;
36
36
  --spark-a10: #004fa3;
37
- --spark-a11: #005bb8f0;
37
+ --spark-a11: #005db6f7;
38
38
  --spark-a12: #00224bee;
39
39
 
40
40
  --spark-contrast: #ffffff;
@@ -44,104 +44,36 @@
44
44
  --spark-indicator: #005eb4;
45
45
  --spark-track: #005eb4;
46
46
 
47
- /* The colour axis (Button color="neutral"|"danger"|"success"|"warning"),
48
- generated the same way as --spark-* above: generateRadixColors() seeded with
49
- the brand hex, which the generator pins at step 9. Radix's stock step 9
50
- (#e5484d/#30a46c/#f76b15) is too light to carry white text (WCAG 2.97-3.91),
51
- and dark ink on it clears WCAG only by exploiting its blind spot for
52
- saturated mid-tones (APCA Lc 38-46, under the ~60 body-text floor). Seeding
53
- the generator with a darker step 9 satisfies both metrics (WCAG 4.68-5.55,
54
- Lc 77-82) and re-derives 1-8/11-12 and every alpha step around it, so the
55
- ramp stays internally consistent -- aN still composites to step N over the
56
- canvas. -surface stays step 2, the static families' convention (see
57
- neutralSparkVars in accent-theme.ts), not the generator's translucent
58
- surface. Declared per appearance because Radix's `<scale>.css` and
59
- `<scale>-dark.css` sit in this same layer. --neutral-* is untouched: it
60
- tracks the neutral knob. spark-default-parity.test.ts re-derives every value
61
- below from the same generator call, so drift fails the suite. */
62
- --red-1: #fffcfc;
63
- --red-2: #fff7f6;
64
- --red-3: #ffebe8;
65
- --red-4: #ffdbd5;
66
- --red-5: #ffcdc5;
67
- --red-6: #ffbcb4;
68
- --red-7: #f8a89e;
69
- --red-8: #f08d82;
70
- --red-9: #cf161c;
71
- --red-10: #be0006;
72
- --red-11: #d41f21;
73
- --red-12: #671512;
74
- --red-a1: #ff000003;
75
- --red-a2: #ff1d0009;
76
- --red-a3: #ff220017;
77
- --red-a4: #ff25002a;
78
- --red-a5: #ff24003a;
79
- --red-a6: #ff1c014b;
80
- --red-a7: #ed1b0061;
81
- --red-a8: #e117007d;
82
- --red-a9: #cb0007e9;
83
- --red-a10: #be0006;
84
- --red-a11: #ce0002e0;
85
- --red-a12: #5b0300ed;
47
+ /* Solid danger/success/warning fills only. Radix keeps --red/green/orange-*
48
+ (charts, tints, text), including steps 9/10. Its step 9 is too light for
49
+ white label text, and dark ink on it fails APCA, so solid style recipes
50
+ read these dedicated tokens instead of remapping --spark-9/10. */
51
+ --red-solid: #cf161c;
52
+ --red-solid-hover: #be0006;
86
53
  --red-contrast: #fff;
87
54
  --red-on-solid: #fff;
88
55
  --red-surface: var(--red-2);
89
56
 
90
- --green-1: #fbfefc;
91
- --green-2: #f5fbf7;
92
- --green-3: #e7f6ec;
93
- --green-4: #d8f0e0;
94
- --green-5: #c7e8d2;
95
- --green-6: #b2dcc0;
96
- --green-7: #94cca8;
97
- --green-8: #69b787;
98
- --green-9: #147a49;
99
- --green-10: #006b3c;
100
- --green-11: #1c7f4d;
101
- --green-12: #203a2a;
102
- --green-a1: #00c04004;
103
- --green-a2: #0099330a;
104
- --green-a3: #00a03618;
105
- --green-a4: #009d3527;
106
- --green-a5: #00973338;
107
- --green-a6: #008c2f4d;
108
- --green-a7: #0186306b;
109
- --green-a8: #00853396;
110
- --green-a9: #006f3aeb;
111
- --green-a10: #006b3c;
112
- --green-a11: #006f37e3;
113
- --green-a12: #001e0cdf;
57
+ --green-solid: #147a49;
58
+ --green-solid-hover: #006b3c;
114
59
  --green-contrast: #fff;
115
60
  --green-on-solid: #fff;
116
61
  --green-surface: var(--green-2);
117
62
 
118
- --orange-1: #fefcfb;
119
- --orange-2: #fff6f2;
120
- --orange-3: #ffebe2;
121
- --orange-4: #ffd8c3;
122
- --orange-5: #ffc9af;
123
- --orange-6: #ffbca0;
124
- --orange-7: #f5ab8d;
125
- --orange-8: #ea936f;
126
- --orange-9: #c84c00;
127
- --orange-10: #b93d00;
128
- --orange-11: #cb4f07;
129
- --orange-12: #562e1e;
130
- --orange-a1: #c0400004;
131
- --orange-a2: #ff4f000d;
132
- --orange-a3: #ff50001d;
133
- --orange-a4: #ff5a003c;
134
- --orange-a5: #ff530050;
135
- --orange-a6: #ff4c005f;
136
- --orange-a7: #e9440072;
137
- --orange-a8: #da400090;
138
- --orange-a9: #c84c00;
139
- --orange-a10: #b93d00;
140
- --orange-a11: #ca4a00f8;
141
- --orange-a12: #401200e1;
63
+ --orange-solid: #c84c00;
64
+ --orange-solid-hover: #b93d00;
142
65
  --orange-contrast: #fff;
143
66
  --orange-on-solid: #fff;
144
67
  --orange-surface: var(--orange-2);
68
+ /* Stock Radix light step 11 / a11 clears ~4.5:1 on pure white but fails on
69
+ soft fills (a3/a4 hover) — soft status chrome, warning-light, callout soft
70
+ actions. Keep the rest of the Radix ramp; darken ink only. */
71
+ --red-11: #be0006;
72
+ --red-a11: #be0006;
73
+ --green-11: #007040;
74
+ --green-a11: #007040;
75
+ --orange-11: #ab3000;
76
+ --orange-a11: #ab3000;
145
77
  /* Solid-fill ink per neutral family, so [data-neutral-color] swaps the ink
146
78
  with the ramp. Light step 9 is a desaturated mid-grey, where no ink
147
79
  satisfies both metrics: white reads best at APCA Lc 65.9-66.5 but only
@@ -155,6 +87,12 @@
155
87
  --sage-contrast: #fff;
156
88
  --olive-contrast: #fff;
157
89
  --sand-contrast: #fff;
90
+ --slate-placeholder: #00071696;
91
+ --mauve-placeholder: #06001393;
92
+ --gray-placeholder: #00000092;
93
+ --sage-placeholder: #000a0797;
94
+ --olive-placeholder: #020a0097;
95
+ --sand-placeholder: #0a0a0098;
158
96
  --neutral-on-solid: #fff;
159
97
  --neutral-surface: var(--neutral-2);
160
98
 
@@ -194,7 +132,7 @@
194
132
  --spark-8: oklch(73% 0.102 254.2);
195
133
  --spark-9: oklch(48.6% 0.1556 254.2);
196
134
  --spark-10: oklch(43.5% 0.1556 254.2);
197
- --spark-11: oklch(51% 0.1556 254.2);
135
+ --spark-11: oklch(49.9% 0.1556 254.2);
198
136
  --spark-12: oklch(31.3% 0.077 254.2);
199
137
 
200
138
  --spark-a1: color(display-p3 0.0235 0.349 0.6745 / 0.012);
@@ -207,7 +145,7 @@
207
145
  --spark-a8: color(display-p3 0.0039 0.3098 0.7647 / 0.483);
208
146
  --spark-a9: color(display-p3 0 0.2471 0.6235 / 0.848);
209
147
  --spark-a10: color(display-p3 0 0.2118 0.5608 / 0.879);
210
- --spark-a11: color(display-p3 0 0.2549 0.651 / 0.82);
148
+ --spark-a11: color(display-p3 0 0.251 0.6353 / 0.832);
211
149
  --spark-a12: color(display-p3 0 0.098 0.2549 / 0.899);
212
150
 
213
151
  --spark-contrast: #ffffff;
@@ -216,82 +154,6 @@
216
154
  --spark-background: #ffffff;
217
155
  --spark-indicator: oklch(48.6% 0.1556 254.2);
218
156
  --spark-track: oklch(48.6% 0.1556 254.2);
219
-
220
- /* Colour axis, wide-gamut twin (light). */
221
- --red-1: oklch(99.4% 0.0033 27.27);
222
- --red-2: oklch(98.3% 0.0088 27.27);
223
- --red-3: oklch(95.6% 0.0226 27.27);
224
- --red-4: oklch(92.8% 0.0508 27.27);
225
- --red-5: oklch(89.6% 0.0666 27.27);
226
- --red-6: oklch(85.7% 0.0802 27.27);
227
- --red-7: oklch(80.7% 0.0963 27.27);
228
- --red-8: oklch(74.5% 0.1219 27.27);
229
- --red-9: oklch(54.4% 0.2125 27.27);
230
- --red-10: oklch(49.8% 0.2125 27.27);
231
- --red-11: oklch(55.8% 0.2125 27.27);
232
- --red-12: oklch(33.9% 0.1158 27.27);
233
- --red-a1: color(display-p3 0.6745 0.0235 0.0235 / 0.012);
234
- --red-a2: color(display-p3 0.8941 0.1294 0.0235 / 0.036);
235
- --red-a3: color(display-p3 0.8667 0.1451 0.0118 / 0.087);
236
- --red-a4: color(display-p3 0.8549 0.149 0.0039 / 0.161);
237
- --red-a5: color(display-p3 0.8588 0.1451 0.0039 / 0.22);
238
- --red-a6: color(display-p3 0.8667 0.1294 0.0039 / 0.287);
239
- --red-a7: color(display-p3 0.8 0.1098 0.0039 / 0.369);
240
- --red-a8: color(display-p3 0.7608 0.102 0.0039 / 0.475);
241
- --red-a9: color(display-p3 0.6941 0.0275 0 / 0.84);
242
- --red-a10: color(display-p3 0.6471 0.0392 0 / 0.899);
243
- --red-a11: color(display-p3 0.7137 0.0392 0 / 0.824);
244
- --red-a12: color(display-p3 0.3059 0.0235 0 / 0.91);
245
-
246
- --green-1: oklch(99.4% 0.0041 156);
247
- --green-2: oklch(98.2% 0.0081 156);
248
- --green-3: oklch(95.9% 0.0205 156);
249
- --green-4: oklch(93.3% 0.0326 156);
250
- --green-5: oklch(90% 0.0451 156);
251
- --green-6: oklch(85.7% 0.0592 156);
252
- --green-7: oklch(79.8% 0.0776 156);
253
- --green-8: oklch(71.5% 0.1046 156);
254
- --green-9: oklch(51.2% 0.1175 156);
255
- --green-10: oklch(46.3% 0.1175 156);
256
- --green-11: oklch(52.8% 0.1175 156);
257
- --green-12: oklch(32.3% 0.0436 156);
258
- --green-a1: color(display-p3 0.0235 0.6745 0.0235 / 0.012);
259
- --green-a2: color(display-p3 0.0235 0.5647 0.1294 / 0.036);
260
- --green-a3: color(display-p3 0.0078 0.5765 0.1529 / 0.083);
261
- --green-a4: color(display-p3 0.0078 0.5333 0.1255 / 0.134);
262
- --green-a5: color(display-p3 0.0078 0.5255 0.1451 / 0.197);
263
- --green-a6: color(display-p3 0.0039 0.4824 0.1176 / 0.271);
264
- --green-a7: color(display-p3 0.0039 0.4431 0.1176 / 0.373);
265
- --green-a8: color(display-p3 0 0.4353 0.1176 / 0.514);
266
- --green-a9: color(display-p3 0 0.3176 0.102 / 0.777);
267
- --green-a10: color(display-p3 0 0.2863 0.0902 / 0.824);
268
- --green-a11: color(display-p3 0 0.3294 0.102 / 0.761);
269
- --green-a12: color(display-p3 0 0.0863 0.0235 / 0.851);
270
-
271
- --orange-1: oklch(99.2% 0.0025 42.62);
272
- --orange-2: oklch(98% 0.0121 42.62);
273
- --orange-3: oklch(95.7% 0.0294 42.62);
274
- --orange-4: oklch(92.1% 0.0654 42.62);
275
- --orange-5: oklch(89.1% 0.0867 42.62);
276
- --orange-6: oklch(85.6% 0.0924 42.62);
277
- --orange-7: oklch(80.5% 0.0978 42.62);
278
- --orange-8: oklch(74.4% 0.117 42.62);
279
- --orange-9: oklch(57.6% 0.172 42.62);
280
- --orange-10: oklch(53.2% 0.172 42.62);
281
- --orange-11: oklch(58.6% 0.172 42.62);
282
- --orange-12: oklch(34.9% 0.0649 42.62);
283
- --orange-a1: color(display-p3 0.7569 0.2667 0.0235 / 0.016);
284
- --orange-a2: color(display-p3 0.8392 0.2667 0.0235 / 0.048);
285
- --orange-a3: color(display-p3 0.8941 0.3255 0.0039 / 0.11);
286
- --orange-a4: color(display-p3 0.898 0.3373 0.0039 / 0.224);
287
- --orange-a5: color(display-p3 0.898 0.3176 0.0039 / 0.299);
288
- --orange-a6: color(display-p3 0.8902 0.298 0.0039 / 0.357);
289
- --orange-a7: color(display-p3 0.8078 0.2588 0.0039 / 0.428);
290
- --orange-a8: color(display-p3 0.7608 0.2431 0 / 0.538);
291
- --orange-a9: color(display-p3 0.6863 0.2314 0 / 0.871);
292
- --orange-a10: color(display-p3 0.6314 0.1843 0 / 0.891);
293
- --orange-a11: color(display-p3 0.6941 0.2314 0 / 0.859);
294
- --orange-a12: color(display-p3 0.2157 0.0667 0 / 0.871);
295
157
  }
296
158
  }
297
159
  }
@@ -331,90 +193,30 @@
331
193
  --spark-indicator: #005eb4;
332
194
  --spark-track: #005eb4;
333
195
 
334
- /* Colour axis, dark twin -- see the light block above. */
335
- --red-1: #000;
336
- --red-2: #1c0a09;
337
- --red-3: #400103;
338
- --red-4: #5a0000;
339
- --red-5: #6f0000;
340
- --red-6: #840003;
341
- --red-7: #a00f13;
342
- --red-8: #cf151c;
343
- --red-9: #cf161c;
344
- --red-10: #be0006;
345
- --red-11: #ff9083;
346
- --red-12: #ffcdc4;
347
- --red-a1: #00000000;
348
- --red-a2: #ff5c521c;
349
- --red-a3: #ff040c40;
350
- --red-a4: #ff00005a;
351
- --red-a5: #ff00006f;
352
- --red-a6: #ff000684;
353
- --red-a7: #ff181fa0;
354
- --red-a8: #ff1a23cf;
355
- --red-a9: #ff1b23cf;
356
- --red-a10: #ff0008be;
357
- --red-a11: #ff9083;
358
- --red-a12: #ffcdc4;
196
+ --red-solid: #cf161c;
197
+ --red-solid-hover: #be0006;
359
198
  --red-contrast: #fff;
360
199
  --red-on-solid: #fff;
361
200
  --red-surface: var(--red-2);
362
201
 
363
- --green-1: #000;
364
- --green-2: #0b140e;
365
- --green-3: #0f291a;
366
- --green-4: #0a3a22;
367
- --green-5: #0f492b;
368
- --green-6: #155936;
369
- --green-7: #1a6a41;
370
- --green-8: #1b7e4d;
371
- --green-9: #147a49;
372
- --green-10: #196940;
373
- --green-11: #74ce97;
374
- --green-12: #aaf4c5;
375
- --green-a1: #00000000;
376
- --green-a2: #8dffb314;
377
- --green-a3: #5effa229;
378
- --green-a4: #2cff963a;
379
- --green-a5: #35ff9749;
380
- --green-a6: #3dff9b59;
381
- --green-a7: #3fff9d6a;
382
- --green-a8: #37ff9c7e;
383
- --green-a9: #2aff997a;
384
- --green-a10: #3dff9c69;
385
- --green-a11: #90ffbbce;
386
- --green-a12: #b2ffcef4;
202
+ --green-solid: #147a49;
203
+ --green-solid-hover: #196940;
387
204
  --green-contrast: #fff;
388
205
  --green-on-solid: #fff;
389
206
  --green-surface: var(--green-2);
390
207
 
391
- --orange-1: #000;
392
- --orange-2: #190e09;
393
- --orange-3: #391000;
394
- --orange-4: #530900;
395
- --orange-5: #651100;
396
- --orange-6: #771f00;
397
- --orange-7: #903000;
398
- --orange-8: #bb3f00;
399
- --orange-9: #c84c00;
400
- --orange-10: #b93d00;
401
- --orange-11: #ff9564;
402
- --orange-12: #ffd2be;
403
- --orange-a1: #00000000;
404
- --orange-a2: #ff8f5c19;
405
- --orange-a3: #ff480039;
406
- --orange-a4: #ff1c0053;
407
- --orange-a5: #ff2b0065;
408
- --orange-a6: #ff430077;
409
- --orange-a7: #ff550090;
410
- --orange-a8: #ff5600bb;
411
- --orange-a9: #ff6100c8;
412
- --orange-a10: #ff5400b9;
413
- --orange-a11: #ff9564;
414
- --orange-a12: #ffd2be;
208
+ --orange-solid: #c84c00;
209
+ --orange-solid-hover: #b93d00;
415
210
  --orange-contrast: #fff;
416
211
  --orange-on-solid: #fff;
417
212
  --orange-surface: var(--orange-2);
213
+ /* Re-assert Radix dark step 11 so light-mode AA ink on :root does not win. */
214
+ --red-11: #ff9592;
215
+ --red-a11: #ff9592;
216
+ --green-11: #3dd68c;
217
+ --green-a11: #46fea5d4;
218
+ --orange-11: #ffa057;
219
+ --orange-a11: #ffa057;
418
220
  /* Dark step 9 takes white on both metrics (WCAG 5.08-5.18, APCA 80.5-81.0);
419
221
  step 12 loses on both (4.38-4.46, 69.2-69.8). No trade-off here. */
420
222
  --slate-contrast: #fff;
@@ -423,6 +225,12 @@
423
225
  --sage-contrast: #fff;
424
226
  --olive-contrast: #fff;
425
227
  --sand-contrast: #fff;
228
+ --slate-placeholder: #f0f8ffaa;
229
+ --mauve-placeholder: #f4f1ffae;
230
+ --gray-placeholder: #ffffffa2;
231
+ --sage-placeholder: #f3fffba4;
232
+ --olive-placeholder: #f6fff3a4;
233
+ --sand-placeholder: #fffef4a4;
426
234
  --neutral-on-solid: #fff;
427
235
  --neutral-surface: var(--neutral-2);
428
236
 
@@ -480,82 +288,6 @@
480
288
  --spark-background: #000;
481
289
  --spark-indicator: oklch(48.6% 0.1556 254.2);
482
290
  --spark-track: oklch(48.6% 0.1556 254.2);
483
-
484
- /* Colour axis, wide-gamut twin (dark). */
485
- --red-1: oklch(0% 0.0193 27.27);
486
- --red-2: oklch(17.3% 0.0312 27.27);
487
- --red-3: oklch(23.5% 0.0933 27.27);
488
- --red-4: oklch(28.1% 0.1391 27.27);
489
- --red-5: oklch(32.7% 0.1546 27.27);
490
- --red-6: oklch(38% 0.1615 27.27);
491
- --red-7: oklch(44.9% 0.175 27.27);
492
- --red-8: oklch(54.3% 0.2125 27.27);
493
- --red-9: oklch(54.4% 0.2125 27.27);
494
- --red-10: oklch(49.8% 0.2125 27.27);
495
- --red-11: oklch(78.4% 0.2125 27.27);
496
- --red-12: oklch(90.2% 0.0766 27.27);
497
- --red-a1: color(display-p3 0 0 0 / 0);
498
- --red-a2: color(display-p3 1 0.4235 0.3882 / 0.102);
499
- --red-a3: color(display-p3 1 0.1216 0.1059 / 0.228);
500
- --red-a4: color(display-p3 1 0.1373 0.0745 / 0.322);
501
- --red-a5: color(display-p3 1 0.1608 0.0902 / 0.397);
502
- --red-a6: color(display-p3 1 0.1765 0.1255 / 0.475);
503
- --red-a7: color(display-p3 1 0.2314 0.2 / 0.577);
504
- --red-a8: color(display-p3 1 0.2471 0.2157 / 0.746);
505
- --red-a9: color(display-p3 1 0.2471 0.2157 / 0.746);
506
- --red-a10: color(display-p3 1 0.2 0.149 / 0.683);
507
- --red-a11: color(display-p3 1 0.6235 0.5608 / 0.942);
508
- --red-a12: color(display-p3 1 0.8392 0.8 / 0.969);
509
-
510
- --green-1: oklch(0% 0.0162 156);
511
- --green-2: oklch(18.1% 0.0185 156);
512
- --green-3: oklch(25.4% 0.0427 156);
513
- --green-4: oklch(31% 0.0671 156);
514
- --green-5: oklch(36.1% 0.0782 156);
515
- --green-6: oklch(41.2% 0.0884 156);
516
- --green-7: oklch(46.7% 0.1011 156);
517
- --green-8: oklch(52.5% 0.1175 156);
518
- --green-9: oklch(51.2% 0.1175 156);
519
- --green-10: oklch(46.3% 0.1011 156);
520
- --green-11: oklch(78% 0.1175 156);
521
- --green-12: oklch(90.7% 0.098 156);
522
- --green-a1: color(display-p3 0 0 0 / 0);
523
- --green-a2: color(display-p3 0.6471 0.9961 0.698 / 0.079);
524
- --green-a3: color(display-p3 0.5529 1 0.6745 / 0.157);
525
- --green-a4: color(display-p3 0.4392 1 0.6314 / 0.224);
526
- --green-a5: color(display-p3 0.4745 1 0.6392 / 0.283);
527
- --green-a6: color(display-p3 0.4902 1 0.6471 / 0.346);
528
- --green-a7: color(display-p3 0.502 1 0.6667 / 0.408);
529
- --green-a8: color(display-p3 0.4941 1 0.6549 / 0.487);
530
- --green-a9: color(display-p3 0.4784 1 0.6431 / 0.471);
531
- --green-a10: color(display-p3 0.498 1 0.6627 / 0.404);
532
- --green-a11: color(display-p3 0.6784 1 0.7608 / 0.8);
533
- --green-a12: color(display-p3 0.7686 1 0.8275 / 0.95);
534
-
535
- --orange-1: oklch(0% 0.0155 42.62);
536
- --orange-2: oklch(17.7% 0.0224 42.62);
537
- --orange-3: oklch(23.9% 0.0703 42.62);
538
- --orange-4: oklch(28.3% 0.114 42.62);
539
- --orange-5: oklch(32.7% 0.1271 42.62);
540
- --orange-6: oklch(37.9% 0.1304 42.62);
541
- --orange-7: oklch(44.7% 0.1406 42.62);
542
- --orange-8: oklch(53.8% 0.172 42.62);
543
- --orange-9: oklch(57.6% 0.172 42.62);
544
- --orange-10: oklch(53.2% 0.172 42.62);
545
- --orange-11: oklch(78.6% 0.172 42.62);
546
- --orange-12: oklch(90.2% 0.0625 42.62);
547
- --orange-a1: color(display-p3 0 0 0 / 0);
548
- --orange-a2: color(display-p3 0.9922 0.6039 0.4314 / 0.091);
549
- --orange-a3: color(display-p3 1 0.3686 0.0784 / 0.204);
550
- --orange-a4: color(display-p3 1 0.2235 0.0824 / 0.299);
551
- --orange-a5: color(display-p3 1 0.2745 0.098 / 0.361);
552
- --orange-a6: color(display-p3 1 0.349 0.1216 / 0.428);
553
- --orange-a7: color(display-p3 1 0.4157 0.1529 / 0.522);
554
- --orange-a8: color(display-p3 1 0.4157 0.1686 / 0.679);
555
- --orange-a9: color(display-p3 1 0.4549 0.1804 / 0.726);
556
- --orange-a10: color(display-p3 1 0.4118 0.1647 / 0.671);
557
- --orange-a11: color(display-p3 1 0.6392 0.4549 / 0.946);
558
- --orange-a12: color(display-p3 1 0.8549 0.7765 / 0.973);
559
291
  }
560
292
  }
561
293
  }
@@ -671,6 +403,7 @@
671
403
  --neutral-a11: var(--slate-a11);
672
404
  --neutral-a12: var(--slate-a12);
673
405
  --neutral-contrast: var(--slate-contrast);
406
+ --neutral-placeholder: var(--slate-placeholder);
674
407
  }
675
408
 
676
409
  [data-neutral-color='slate'] {
@@ -699,6 +432,7 @@
699
432
  --neutral-a11: var(--slate-a11);
700
433
  --neutral-a12: var(--slate-a12);
701
434
  --neutral-contrast: var(--slate-contrast);
435
+ --neutral-placeholder: var(--slate-placeholder);
702
436
  }
703
437
 
704
438
  [data-neutral-color='mauve'] {
@@ -727,6 +461,7 @@
727
461
  --neutral-a11: var(--mauve-a11);
728
462
  --neutral-a12: var(--mauve-a12);
729
463
  --neutral-contrast: var(--mauve-contrast);
464
+ --neutral-placeholder: var(--mauve-placeholder);
730
465
  }
731
466
 
732
467
  [data-neutral-color='gray'] {
@@ -755,6 +490,7 @@
755
490
  --neutral-a11: var(--gray-a11);
756
491
  --neutral-a12: var(--gray-a12);
757
492
  --neutral-contrast: var(--gray-contrast);
493
+ --neutral-placeholder: var(--gray-placeholder);
758
494
  }
759
495
 
760
496
  [data-neutral-color='sage'] {
@@ -783,6 +519,7 @@
783
519
  --neutral-a11: var(--sage-a11);
784
520
  --neutral-a12: var(--sage-a12);
785
521
  --neutral-contrast: var(--sage-contrast);
522
+ --neutral-placeholder: var(--sage-placeholder);
786
523
  }
787
524
 
788
525
  [data-neutral-color='olive'] {
@@ -811,6 +548,7 @@
811
548
  --neutral-a11: var(--olive-a11);
812
549
  --neutral-a12: var(--olive-a12);
813
550
  --neutral-contrast: var(--olive-contrast);
551
+ --neutral-placeholder: var(--olive-placeholder);
814
552
  }
815
553
 
816
554
  [data-neutral-color='sand'] {
@@ -839,13 +577,14 @@
839
577
  --neutral-a11: var(--sand-a11);
840
578
  --neutral-a12: var(--sand-a12);
841
579
  --neutral-contrast: var(--sand-contrast);
580
+ --neutral-placeholder: var(--sand-placeholder);
842
581
  }
843
582
 
844
583
  /*
845
584
  * Spacing density presets (between-component only). Sets --spark-spacing,
846
585
  * which feeds --spark-layout-gap (the gap between siblings in layout /
847
- * collection primitives) — NOT Tailwind's --spacing base, so component
848
- * internals stay density-independent. Cascades. No attribute = default.
586
+ * collection primitives, plus Table row height) — NOT Tailwind's --spacing
587
+ * base. Cascades. No attribute = default.
849
588
  */
850
589
  [data-spacing='dense'] {
851
590
  --spark-spacing: 0.2rem;
@@ -862,7 +601,7 @@
862
601
  /* Between-component gap base: density × zoom. On .spark-theme too, so a nested
863
602
  scope re-resolves it from its own knobs (mirrors the --spark-rounded-* calcs
864
603
  above). Layout / collection primitives read this via
865
- gap-[calc(var(--spark-layout-gap)*N)]; component internals never do. */
604
+ gap-[calc(var(--spark-layout-gap)*N)]; Table row height reads it too. */
866
605
  :root,
867
606
  .spark-theme {
868
607
  --spark-layout-gap: calc(
@@ -901,8 +640,8 @@
901
640
  accent, wrong contrast). A nested theme's own [data-style] still wins on specificity. */
902
641
  [data-style='solid'],
903
642
  :where([data-style='solid'] .spark-theme) {
904
- --spark-style-bg: var(--spark-9);
905
- --spark-style-bg-hover: var(--spark-10);
643
+ --spark-style-bg: var(--spark-solid, var(--spark-9));
644
+ --spark-style-bg-hover: var(--spark-solid-hover, var(--spark-10));
906
645
  /* fg intentionally has no *value* here — a solid foreground means different things
907
646
  per role, so each component should fall back to its own right contrast: Button
908
647
  *text* → --spark-contrast (AA-enforced 4.5:1), Checkbox *check glyph* →
@@ -1023,11 +762,16 @@
1023
762
  --spark-a10: var(--red-a10);
1024
763
  --spark-a11: var(--red-a11);
1025
764
  --spark-a12: var(--red-a12);
765
+ --spark-solid: var(--red-solid);
766
+ --spark-solid-hover: var(--red-solid-hover);
1026
767
  --spark-contrast: var(--red-contrast);
1027
768
  --spark-on-solid: var(--red-on-solid);
1028
769
  --spark-surface: var(--red-surface);
1029
770
  --spark-indicator: var(--red-9);
1030
771
  --spark-track: var(--red-9);
772
+ --spark-switch-track: var(--red-solid);
773
+ --spark-radio-ring: var(--red-solid);
774
+ --spark-radio-dot: var(--red-solid);
1031
775
  }
1032
776
 
1033
777
  [data-accent-color='green'],
@@ -1056,11 +800,16 @@
1056
800
  --spark-a10: var(--green-a10);
1057
801
  --spark-a11: var(--green-a11);
1058
802
  --spark-a12: var(--green-a12);
803
+ --spark-solid: var(--green-solid);
804
+ --spark-solid-hover: var(--green-solid-hover);
1059
805
  --spark-contrast: var(--green-contrast);
1060
806
  --spark-on-solid: var(--green-on-solid);
1061
807
  --spark-surface: var(--green-surface);
1062
808
  --spark-indicator: var(--green-9);
1063
809
  --spark-track: var(--green-9);
810
+ --spark-switch-track: var(--green-solid);
811
+ --spark-radio-ring: var(--green-solid);
812
+ --spark-radio-dot: var(--green-solid);
1064
813
  }
1065
814
 
1066
815
  [data-accent-color='orange'],
@@ -1089,11 +838,16 @@
1089
838
  --spark-a10: var(--orange-a10);
1090
839
  --spark-a11: var(--orange-a11);
1091
840
  --spark-a12: var(--orange-a12);
841
+ --spark-solid: var(--orange-solid);
842
+ --spark-solid-hover: var(--orange-solid-hover);
1092
843
  --spark-contrast: var(--orange-contrast);
1093
844
  --spark-on-solid: var(--orange-on-solid);
1094
845
  --spark-surface: var(--orange-surface);
1095
846
  --spark-indicator: var(--orange-9);
1096
847
  --spark-track: var(--orange-9);
848
+ --spark-switch-track: var(--orange-solid);
849
+ --spark-radio-ring: var(--orange-solid);
850
+ --spark-radio-dot: var(--orange-solid);
1097
851
  }
1098
852
 
1099
853
  /*
@@ -388,6 +388,7 @@
388
388
  --color-gray-light: var(--neutral-a11);
389
389
  --color-gray-contrast: #ffffff;
390
390
  --color-gray-disabled: var(--neutral-a8);
391
+ --color-gray-placeholder: var(--neutral-placeholder);
391
392
  --color-gray-active: var(--neutral-a9);
392
393
 
393
394
  --color-accent-light: var(--spark-a11);
@@ -425,6 +426,43 @@
425
426
  --color-warning-hover: var(--orange-a11);
426
427
  --color-warning-focus: var(--orange-a11);
427
428
 
429
+ /*
430
+ * Frozen public roles (Phase C). Paint with these; ladder stays --spark-*.
431
+ * Bare error/success/warning above stay legacy ink (a12) until a follow-up
432
+ * flips them — solid status fills use *-foreground pairs + base-*-solid.
433
+ */
434
+ --color-primary: var(--spark-9);
435
+ --color-primary-foreground: var(--spark-contrast);
436
+ --color-primary-soft: var(--spark-a3);
437
+ --color-primary-soft-foreground: var(--spark-a11);
438
+ --color-primary-hover: var(--spark-10);
439
+ --color-primary-soft-hover: var(--spark-a4);
440
+
441
+ --color-destructive: var(--red-solid, var(--red-9));
442
+ --color-destructive-foreground: var(--red-contrast);
443
+ --color-destructive-soft: var(--red-a3);
444
+ --color-destructive-soft-foreground: var(--red-a11);
445
+ --color-destructive-hover: var(--red-solid-hover, var(--red-10));
446
+ --color-destructive-soft-hover: var(--red-a4);
447
+
448
+ --color-error-foreground: var(--red-contrast);
449
+ --color-error-soft: var(--red-a3);
450
+ --color-error-soft-foreground: var(--red-a11);
451
+ --color-error-hover: var(--red-solid-hover, var(--red-10));
452
+ --color-error-soft-hover: var(--red-a4);
453
+
454
+ --color-success-foreground: var(--green-contrast);
455
+ --color-success-soft: var(--green-a3);
456
+ --color-success-soft-foreground: var(--green-a11);
457
+ --color-success-hover: var(--green-solid-hover, var(--green-10));
458
+ --color-success-soft-hover: var(--green-a4);
459
+
460
+ --color-warning-foreground: var(--orange-contrast);
461
+ --color-warning-soft: var(--orange-a3);
462
+ --color-warning-soft-foreground: var(--orange-a11);
463
+ --color-warning-hover: var(--orange-solid-hover, var(--orange-10));
464
+ --color-warning-soft-hover: var(--orange-a4);
465
+
428
466
  /* Background-only semantic tokens */
429
467
  --color-base-gray-surface: var(--neutral-a2);
430
468
  --color-base-gray-soft: var(--neutral-a3);
@@ -434,18 +472,18 @@
434
472
  --color-base-accent-soft: var(--spark-a3);
435
473
  --color-base-accent-solid: var(--spark-9);
436
474
  --color-base-accent-skeleton: var(--spark-a5);
437
- --color-base-error-soft: var(--red-a3);
475
+ --color-base-error-soft: var(--color-error-soft);
438
476
  --color-base-error-surface: var(--spark-background);
439
- --color-base-error-solid: var(--red-9);
440
- --color-base-success-soft: var(--green-a3);
477
+ --color-base-error-solid: var(--red-solid, var(--red-9));
478
+ --color-base-success-soft: var(--color-success-soft);
441
479
  --color-base-success-surface: var(--spark-background);
442
- --color-base-success-solid: var(--green-9);
480
+ --color-base-success-solid: var(--green-solid, var(--green-9));
443
481
  --color-base-info-soft: var(--blue-a3);
444
482
  --color-base-info-surface: var(--spark-background);
445
483
  --color-base-info-solid: var(--blue-9);
446
- --color-base-warning-soft: var(--orange-a3);
484
+ --color-base-warning-soft: var(--color-warning-soft);
447
485
  --color-base-warning-surface: var(--spark-background);
448
- --color-base-warning-solid: var(--orange-9);
486
+ --color-base-warning-solid: var(--orange-solid, var(--orange-9));
449
487
 
450
488
  --color-input-base: var(--spark-a3);
451
489
  --color-input-base-hover: var(--spark-a4);
@@ -483,8 +521,7 @@
483
521
  /* Spacing scale base (used by --spacing() function). Reads ONLY --spark-scaling
484
522
  (the [data-scaling] zoom knob), so component internals — padding, control
485
523
  sizes, icon glyphs — zoom but stay density-independent. The [data-spacing]
486
- density knob is peeled off onto --spark-layout-gap (see spark-default.css),
487
- so it affects the space BETWEEN components, not within them. */
524
+ density knob is peeled off onto --spark-layout-gap instead (see spark-default.css). */
488
525
  --spacing: calc(0.25rem * var(--spark-scaling, 1));
489
526
 
490
527
  /* Font sizes scale with the [data-scaling] zoom (--spark-scaling). Tailwind's
@@ -590,6 +627,7 @@
590
627
  * (3:1) for every accent in both appearances.
591
628
  */
592
629
  --color-focus-root: var(--spark-11);
630
+ --color-primary-focus: var(--spark-11);
593
631
  --color-selection-root: var(--spark-a5);
594
632
  --color-autofill-root: var(--spark-a3);
595
633
  }
@@ -619,6 +657,14 @@
619
657
  @source inline(
620
658
  'text-{error,warning}-{light,contrast,disabled,active,hover,focus}'
621
659
  );
660
+ @source inline(
661
+ '{text,bg,border}-{primary,destructive}-{foreground,soft,soft-foreground,hover,soft-hover}'
662
+ );
663
+ @source inline('{text,bg,border}-{primary,destructive}');
664
+ @source inline(
665
+ '{text,bg,border}-{error,success,warning}-{foreground,soft,soft-foreground,hover,soft-hover}'
666
+ );
667
+ @source inline('ring-{primary,destructive,error,success,warning}');
622
668
  @source inline('bg-base-{gray,accent}-{surface,soft,solid,skeleton}');
623
669
  @source inline('bg-base-{error,success,info,warning}-{surface,soft,solid}');
624
670
  @source inline(