@helixui/library 3.2.0 → 3.3.0-next.112

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 (294) hide show
  1. package/custom-elements.json +175 -326
  2. package/dist/components/hx-accordion/hx-accordion-item.styles.d.ts.map +1 -1
  3. package/dist/components/hx-accordion/index.js +1 -1
  4. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  5. package/dist/components/hx-alert/index.js +1 -1
  6. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  7. package/dist/components/hx-banner/index.js +1 -1
  8. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
  9. package/dist/components/hx-breadcrumb/index.js +1 -1
  10. package/dist/components/hx-button/hx-button.d.ts +46 -49
  11. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  12. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  13. package/dist/components/hx-button/index.js +1 -1
  14. package/dist/components/hx-card/hx-card.styles.d.ts.map +1 -1
  15. package/dist/components/hx-card/index.js +1 -1
  16. package/dist/components/hx-carousel/index.js +1 -1
  17. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  18. package/dist/components/hx-checkbox/index.js +1 -1
  19. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -1
  20. package/dist/components/hx-clinical-status/index.js +1 -1
  21. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  22. package/dist/components/hx-code-snippet/index.js +1 -1
  23. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  24. package/dist/components/hx-color-picker/index.js +1 -1
  25. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  26. package/dist/components/hx-combobox/index.js +1 -1
  27. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  28. package/dist/components/hx-data-table/index.js +1 -1
  29. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  30. package/dist/components/hx-date-picker/index.js +1 -1
  31. package/dist/components/hx-dialog/hx-dialog.styles.d.ts.map +1 -1
  32. package/dist/components/hx-dialog/index.js +1 -1
  33. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  34. package/dist/components/hx-drawer/index.js +1 -1
  35. package/dist/components/hx-file-upload/hx-file-upload.styles.d.ts.map +1 -1
  36. package/dist/components/hx-file-upload/index.js +1 -1
  37. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  38. package/dist/components/hx-icon-button/index.js +1 -1
  39. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  40. package/dist/components/hx-link/index.js +1 -1
  41. package/dist/components/hx-list/hx-list-item.styles.d.ts.map +1 -1
  42. package/dist/components/hx-list/index.js +1 -1
  43. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  44. package/dist/components/hx-menu/index.js +1 -1
  45. package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
  46. package/dist/components/hx-meter/index.js +1 -1
  47. package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
  48. package/dist/components/hx-nav/index.js +1 -1
  49. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  50. package/dist/components/hx-overflow-menu/index.js +1 -1
  51. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  52. package/dist/components/hx-pagination/index.js +1 -1
  53. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -1
  54. package/dist/components/hx-phi-field/index.js +1 -1
  55. package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
  56. package/dist/components/hx-popover/index.js +1 -1
  57. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  58. package/dist/components/hx-radio-group/index.js +1 -1
  59. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  60. package/dist/components/hx-rating/index.js +1 -1
  61. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  62. package/dist/components/hx-select/index.js +1 -1
  63. package/dist/components/hx-side-nav/hx-nav-item.d.ts +7 -5
  64. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  65. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  66. package/dist/components/hx-side-nav/hx-side-nav.d.ts +10 -23
  67. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  68. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  69. package/dist/components/hx-side-nav/index.js +1 -1
  70. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  71. package/dist/components/hx-slider/index.js +1 -1
  72. package/dist/components/hx-split-button/hx-split-button.d.ts +1 -1
  73. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  74. package/dist/components/hx-split-button/index.js +1 -1
  75. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  76. package/dist/components/hx-split-panel/index.js +1 -1
  77. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  78. package/dist/components/hx-steps/index.js +1 -1
  79. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  80. package/dist/components/hx-switch/index.js +1 -1
  81. package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -1
  82. package/dist/components/hx-table/index.js +1 -1
  83. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  84. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  85. package/dist/components/hx-tabs/index.js +1 -1
  86. package/dist/components/hx-text-input/hx-text-input.d.ts +18 -35
  87. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  88. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  89. package/dist/components/hx-text-input/index.js +1 -1
  90. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  91. package/dist/components/hx-textarea/index.js +1 -1
  92. package/dist/components/hx-theme/hx-theme.d.ts +14 -2
  93. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  94. package/dist/components/hx-theme/index.js +1 -1
  95. package/dist/components/hx-time-picker/index.js +1 -1
  96. package/dist/components/hx-toast/hx-toast.d.ts +12 -8
  97. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  98. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  99. package/dist/components/hx-toast/index.js +1 -1
  100. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  101. package/dist/components/hx-toggle-button/index.js +1 -1
  102. package/dist/components/hx-top-nav/hx-top-nav.styles.d.ts.map +1 -1
  103. package/dist/components/hx-top-nav/index.js +1 -1
  104. package/dist/components/hx-tree-view/hx-tree-item.styles.d.ts.map +1 -1
  105. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  106. package/dist/components/hx-tree-view/index.js +1 -1
  107. package/dist/css/helix-all.css +351 -308
  108. package/dist/css/helix-core.css +180 -56
  109. package/dist/css/helix-data.css +23 -16
  110. package/dist/css/helix-feedback.css +30 -29
  111. package/dist/css/helix-forms.css +53 -120
  112. package/dist/css/helix-layout.css +2 -8
  113. package/dist/css/helix-media.css +3 -3
  114. package/dist/css/helix-navigation.css +49 -45
  115. package/dist/css/helix-overlay.css +3 -12
  116. package/dist/css/helix-tokens.css +60 -5
  117. package/dist/css/helix-utility.css +5 -11
  118. package/dist/css/hx-alert.css +1 -4
  119. package/dist/css/hx-banner.css +2 -8
  120. package/dist/css/hx-button.css +176 -43
  121. package/dist/css/hx-card.css +1 -4
  122. package/dist/css/hx-carousel.css +3 -3
  123. package/dist/css/hx-checkbox.css +2 -5
  124. package/dist/css/hx-clinical-status.css +2 -4
  125. package/dist/css/hx-code-snippet.css +20 -6
  126. package/dist/css/hx-color-picker.css +3 -13
  127. package/dist/css/hx-combobox.css +7 -13
  128. package/dist/css/hx-data-table.css +2 -8
  129. package/dist/css/hx-date-picker.css +7 -23
  130. package/dist/css/hx-dialog.css +1 -4
  131. package/dist/css/hx-drawer.css +1 -4
  132. package/dist/css/hx-file-upload.css +4 -13
  133. package/dist/css/hx-icon-button.css +2 -5
  134. package/dist/css/hx-link.css +1 -4
  135. package/dist/css/hx-meter.css +1 -2
  136. package/dist/css/hx-nav.css +2 -8
  137. package/dist/css/hx-overflow-menu.css +2 -8
  138. package/dist/css/hx-pagination.css +2 -8
  139. package/dist/css/hx-phi-field.css +1 -4
  140. package/dist/css/hx-popover.css +1 -4
  141. package/dist/css/hx-rating.css +3 -4
  142. package/dist/css/hx-select.css +3 -7
  143. package/dist/css/hx-side-nav.css +41 -15
  144. package/dist/css/hx-slider.css +4 -7
  145. package/dist/css/hx-split-button.css +5 -11
  146. package/dist/css/hx-split-panel.css +2 -8
  147. package/dist/css/hx-switch.css +3 -6
  148. package/dist/css/hx-table.css +1 -2
  149. package/dist/css/hx-text-input.css +8 -14
  150. package/dist/css/hx-textarea.css +2 -5
  151. package/dist/css/hx-time-picker.css +3 -3
  152. package/dist/css/hx-toast.css +26 -15
  153. package/dist/css/hx-toggle-button.css +4 -7
  154. package/dist/css/hx-top-nav.css +1 -4
  155. package/dist/css/hx-tree-view.css +1 -2
  156. package/dist/css/index.css +1 -1
  157. package/dist/css/manifest.json +63 -46
  158. package/dist/index.js +46 -46
  159. package/dist/shared/{hx-accordion-cnKg4_la.js → hx-accordion-ZVzgDzTG.js} +4 -5
  160. package/dist/shared/hx-accordion-ZVzgDzTG.js.map +1 -0
  161. package/dist/shared/{hx-alert-BZH8iHQf.js → hx-alert-CLn7CstP.js} +2 -5
  162. package/dist/shared/hx-alert-CLn7CstP.js.map +1 -0
  163. package/dist/shared/{hx-banner-DT7Zn9Bo.js → hx-banner-D3DzpfcP.js} +7 -13
  164. package/dist/shared/hx-banner-D3DzpfcP.js.map +1 -0
  165. package/dist/shared/{hx-breadcrumb-item-COeYcB2x.js → hx-breadcrumb-item-3tKppF9h.js} +2 -5
  166. package/dist/shared/{hx-breadcrumb-item-COeYcB2x.js.map → hx-breadcrumb-item-3tKppF9h.js.map} +1 -1
  167. package/dist/shared/{hx-button-modUSOpY.js → hx-button-DPY6SPVT.js} +201 -69
  168. package/dist/shared/hx-button-DPY6SPVT.js.map +1 -0
  169. package/dist/shared/{hx-card-CU1QnjNb.js → hx-card-qNAM2QNV.js} +6 -9
  170. package/dist/shared/hx-card-qNAM2QNV.js.map +1 -0
  171. package/dist/shared/{hx-carousel-item-BaE4hpLl.js → hx-carousel-item-z1Lc24op.js} +4 -4
  172. package/dist/shared/hx-carousel-item-z1Lc24op.js.map +1 -0
  173. package/dist/shared/{hx-checkbox-C46TyXhM.js → hx-checkbox-D7xma9YH.js} +7 -10
  174. package/dist/shared/hx-checkbox-D7xma9YH.js.map +1 -0
  175. package/dist/shared/{hx-clinical-status-BmSjfSEN.js → hx-clinical-status-D3XQIOqX.js} +3 -5
  176. package/dist/shared/hx-clinical-status-D3XQIOqX.js.map +1 -0
  177. package/dist/shared/{hx-code-snippet-CJ0FbQYG.js → hx-code-snippet-fVV3Z2DZ.js} +55 -41
  178. package/dist/shared/hx-code-snippet-fVV3Z2DZ.js.map +1 -0
  179. package/dist/shared/{hx-color-picker-DiDLZyvK.js → hx-color-picker-uRc865FJ.js} +23 -33
  180. package/dist/shared/hx-color-picker-uRc865FJ.js.map +1 -0
  181. package/dist/shared/{hx-combobox-DaA5dBC4.js → hx-combobox-DDzqNKEW.js} +11 -17
  182. package/dist/shared/hx-combobox-DDzqNKEW.js.map +1 -0
  183. package/dist/shared/{hx-data-table-Cq3t86Ic.js → hx-data-table-CLqVqdxr.js} +3 -9
  184. package/dist/shared/hx-data-table-CLqVqdxr.js.map +1 -0
  185. package/dist/shared/{hx-date-picker-DMqRQNSB.js → hx-date-picker-2iRG1p74.js} +14 -30
  186. package/dist/shared/hx-date-picker-2iRG1p74.js.map +1 -0
  187. package/dist/shared/{hx-dialog-eIS8tcDm.js → hx-dialog-DRN_1-Y-.js} +2 -5
  188. package/dist/shared/hx-dialog-DRN_1-Y-.js.map +1 -0
  189. package/dist/shared/{hx-drawer-DDhDz7RI.js → hx-drawer-Y1Ui2IWJ.js} +2 -5
  190. package/dist/shared/hx-drawer-Y1Ui2IWJ.js.map +1 -0
  191. package/dist/shared/{hx-file-upload-zTDbjsRw.js → hx-file-upload-D3rKROK5.js} +17 -26
  192. package/dist/shared/hx-file-upload-D3rKROK5.js.map +1 -0
  193. package/dist/shared/{hx-icon-button-BmV97nqz.js → hx-icon-button-CGNdQSFM.js} +3 -6
  194. package/dist/shared/hx-icon-button-CGNdQSFM.js.map +1 -0
  195. package/dist/shared/{hx-link-DmiV-mPw.js → hx-link-C-O6vq0Q.js} +5 -8
  196. package/dist/shared/hx-link-C-O6vq0Q.js.map +1 -0
  197. package/dist/shared/{hx-list-CkphGi9T.js → hx-list-MyEhh8c7.js} +3 -5
  198. package/dist/shared/hx-list-MyEhh8c7.js.map +1 -0
  199. package/dist/shared/{hx-menu-divider-j__TZjH2.js → hx-menu-divider-C2omnPtj.js} +2 -5
  200. package/dist/shared/hx-menu-divider-C2omnPtj.js.map +1 -0
  201. package/dist/shared/{hx-meter-Cm7k_Ro8.js → hx-meter-BPscsw5t.js} +2 -3
  202. package/dist/shared/hx-meter-BPscsw5t.js.map +1 -0
  203. package/dist/shared/{hx-nav-item-D8xHLVOs.js → hx-nav-item-xqRPOCWX.js} +172 -110
  204. package/dist/shared/hx-nav-item-xqRPOCWX.js.map +1 -0
  205. package/dist/shared/{hx-nav-LoyEKZQC.js → hx-nav-ldFM3Fle.js} +37 -43
  206. package/dist/shared/hx-nav-ldFM3Fle.js.map +1 -0
  207. package/dist/shared/{hx-overflow-menu-BmKyAp5D.js → hx-overflow-menu-DCLsdIBy.js} +3 -9
  208. package/dist/shared/hx-overflow-menu-DCLsdIBy.js.map +1 -0
  209. package/dist/shared/{hx-pagination-Dqw5dorC.js → hx-pagination-C7y8GVyU.js} +54 -60
  210. package/dist/shared/hx-pagination-C7y8GVyU.js.map +1 -0
  211. package/dist/shared/{hx-phi-field-Bf9TdtC1.js → hx-phi-field-C19oxlrr.js} +2 -5
  212. package/dist/shared/hx-phi-field-C19oxlrr.js.map +1 -0
  213. package/dist/shared/{hx-popover-B93rTAfr.js → hx-popover-B-FP3-wW.js} +8 -11
  214. package/dist/shared/hx-popover-B-FP3-wW.js.map +1 -0
  215. package/dist/shared/{hx-radio-N8xgDd_5.js → hx-radio-CJvNU2yP.js} +4 -7
  216. package/dist/shared/{hx-radio-N8xgDd_5.js.map → hx-radio-CJvNU2yP.js.map} +1 -1
  217. package/dist/shared/{hx-rating-i2FL1WUN.js → hx-rating-C3QP53k9.js} +4 -5
  218. package/dist/shared/hx-rating-C3QP53k9.js.map +1 -0
  219. package/dist/shared/{hx-select-vgaBo1Ai.js → hx-select-C8fEHQhC.js} +4 -8
  220. package/dist/shared/hx-select-C8fEHQhC.js.map +1 -0
  221. package/dist/shared/{hx-slider-ydBamYhd.js → hx-slider-Blmv_rwS.js} +26 -29
  222. package/dist/shared/hx-slider-Blmv_rwS.js.map +1 -0
  223. package/dist/shared/{hx-split-button-BeMsmS6N.js → hx-split-button-Djnc5Aeg.js} +6 -12
  224. package/dist/shared/hx-split-button-Djnc5Aeg.js.map +1 -0
  225. package/dist/shared/{hx-split-panel-BVG1VWNT.js → hx-split-panel-B-u0Z3mm.js} +3 -9
  226. package/dist/shared/hx-split-panel-B-u0Z3mm.js.map +1 -0
  227. package/dist/shared/{hx-step-DL3PbOzm.js → hx-step-R2rjp1fT.js} +2 -5
  228. package/dist/shared/hx-step-R2rjp1fT.js.map +1 -0
  229. package/dist/shared/{hx-switch-Dougzsgp.js → hx-switch-BrZFaRue.js} +8 -11
  230. package/dist/shared/hx-switch-BrZFaRue.js.map +1 -0
  231. package/dist/shared/{hx-tab-panel-CbkO9VKu.js → hx-tab-panel-DspCrKqo.js} +3 -9
  232. package/dist/shared/{hx-tab-panel-CbkO9VKu.js.map → hx-tab-panel-DspCrKqo.js.map} +1 -1
  233. package/dist/shared/{hx-td-1zwTFLRw.js → hx-td-DnnEMIuA.js} +2 -3
  234. package/dist/shared/hx-td-DnnEMIuA.js.map +1 -0
  235. package/dist/shared/{hx-text-input-B-caO5fI.js → hx-text-input-D6FlOZM-.js} +24 -31
  236. package/dist/shared/hx-text-input-D6FlOZM-.js.map +1 -0
  237. package/dist/shared/{hx-textarea-D9O4U8cb.js → hx-textarea-CNG590KY.js} +3 -6
  238. package/dist/shared/hx-textarea-CNG590KY.js.map +1 -0
  239. package/dist/shared/{hx-theme-BiyQ7UUK.js → hx-theme-BsefFWTO.js} +83 -113
  240. package/dist/shared/hx-theme-BsefFWTO.js.map +1 -0
  241. package/dist/shared/{hx-time-picker-m0z4nFB-.js → hx-time-picker-BoEIZwzv.js} +4 -4
  242. package/dist/shared/{hx-time-picker-m0z4nFB-.js.map → hx-time-picker-BoEIZwzv.js.map} +1 -1
  243. package/dist/shared/{hx-toggle-button-Dd8clXB4.js → hx-toggle-button-iLiYrMbD.js} +24 -27
  244. package/dist/shared/hx-toggle-button-iLiYrMbD.js.map +1 -0
  245. package/dist/shared/{hx-top-nav-CchPYaiV.js → hx-top-nav-DP6OFS8C.js} +11 -14
  246. package/dist/shared/hx-top-nav-DP6OFS8C.js.map +1 -0
  247. package/dist/shared/{hx-tree-item-DtMC3DTa.js → hx-tree-item-C2CiWuDE.js} +4 -11
  248. package/dist/shared/hx-tree-item-C2CiWuDE.js.map +1 -0
  249. package/dist/shared/{toast-factory-DvDRAh0l.js → toast-factory-YSznocIV.js} +66 -56
  250. package/dist/shared/toast-factory-YSznocIV.js.map +1 -0
  251. package/figma-inventory.json +283 -420
  252. package/package.json +2 -2
  253. package/dist/shared/hx-accordion-cnKg4_la.js.map +0 -1
  254. package/dist/shared/hx-alert-BZH8iHQf.js.map +0 -1
  255. package/dist/shared/hx-banner-DT7Zn9Bo.js.map +0 -1
  256. package/dist/shared/hx-button-modUSOpY.js.map +0 -1
  257. package/dist/shared/hx-card-CU1QnjNb.js.map +0 -1
  258. package/dist/shared/hx-carousel-item-BaE4hpLl.js.map +0 -1
  259. package/dist/shared/hx-checkbox-C46TyXhM.js.map +0 -1
  260. package/dist/shared/hx-clinical-status-BmSjfSEN.js.map +0 -1
  261. package/dist/shared/hx-code-snippet-CJ0FbQYG.js.map +0 -1
  262. package/dist/shared/hx-color-picker-DiDLZyvK.js.map +0 -1
  263. package/dist/shared/hx-combobox-DaA5dBC4.js.map +0 -1
  264. package/dist/shared/hx-data-table-Cq3t86Ic.js.map +0 -1
  265. package/dist/shared/hx-date-picker-DMqRQNSB.js.map +0 -1
  266. package/dist/shared/hx-dialog-eIS8tcDm.js.map +0 -1
  267. package/dist/shared/hx-drawer-DDhDz7RI.js.map +0 -1
  268. package/dist/shared/hx-file-upload-zTDbjsRw.js.map +0 -1
  269. package/dist/shared/hx-icon-button-BmV97nqz.js.map +0 -1
  270. package/dist/shared/hx-link-DmiV-mPw.js.map +0 -1
  271. package/dist/shared/hx-list-CkphGi9T.js.map +0 -1
  272. package/dist/shared/hx-menu-divider-j__TZjH2.js.map +0 -1
  273. package/dist/shared/hx-meter-Cm7k_Ro8.js.map +0 -1
  274. package/dist/shared/hx-nav-LoyEKZQC.js.map +0 -1
  275. package/dist/shared/hx-nav-item-D8xHLVOs.js.map +0 -1
  276. package/dist/shared/hx-overflow-menu-BmKyAp5D.js.map +0 -1
  277. package/dist/shared/hx-pagination-Dqw5dorC.js.map +0 -1
  278. package/dist/shared/hx-phi-field-Bf9TdtC1.js.map +0 -1
  279. package/dist/shared/hx-popover-B93rTAfr.js.map +0 -1
  280. package/dist/shared/hx-rating-i2FL1WUN.js.map +0 -1
  281. package/dist/shared/hx-select-vgaBo1Ai.js.map +0 -1
  282. package/dist/shared/hx-slider-ydBamYhd.js.map +0 -1
  283. package/dist/shared/hx-split-button-BeMsmS6N.js.map +0 -1
  284. package/dist/shared/hx-split-panel-BVG1VWNT.js.map +0 -1
  285. package/dist/shared/hx-step-DL3PbOzm.js.map +0 -1
  286. package/dist/shared/hx-switch-Dougzsgp.js.map +0 -1
  287. package/dist/shared/hx-td-1zwTFLRw.js.map +0 -1
  288. package/dist/shared/hx-text-input-B-caO5fI.js.map +0 -1
  289. package/dist/shared/hx-textarea-D9O4U8cb.js.map +0 -1
  290. package/dist/shared/hx-theme-BiyQ7UUK.js.map +0 -1
  291. package/dist/shared/hx-toggle-button-Dd8clXB4.js.map +0 -1
  292. package/dist/shared/hx-top-nav-CchPYaiV.js.map +0 -1
  293. package/dist/shared/hx-tree-item-DtMC3DTa.js.map +0 -1
  294. package/dist/shared/toast-factory-DvDRAh0l.js.map +0 -1
@@ -395,10 +395,7 @@
395
395
 
396
396
  .button:focus-visible {
397
397
  outline: var(--hx-focus-ring-width, 2px) solid
398
- var(
399
- --hx-button-focus-ring-color,
400
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #429797))
401
- );
398
+ var(--hx-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
402
399
  outline-offset: var(--hx-focus-ring-offset, 2px);
403
400
  }
404
401
 
@@ -436,21 +433,24 @@
436
433
  /* ─── Style Variants ─── */
437
434
 
438
435
  .button--primary {
439
- --hx-button-bg: var(--hx-color-primary-500, #429797);
440
- --hx-button-color: var(--hx-color-text-on-primary, #ffffff);
436
+ --hx-button-bg: var(--hx-color-action-primary-bg, #429797);
437
+ /* Inline #0d1825 matches text.on-primary's resolved primitive (neutral-900);
438
+ cold-start without the semantic still paints AA-tuned dark-on-primary
439
+ rather than white-on-primary (3.43:1 fail). */
440
+ --hx-button-color: var(--hx-color-text-on-primary, #0d1825);
441
441
  --hx-button-border-color: transparent;
442
442
  }
443
443
 
444
444
  .button--secondary {
445
445
  --hx-button-bg: transparent;
446
- /* primary-500 (#429797) text on white surface = 3.43:1 — fails AA.
447
- primary-600 (#0F7078) on white = 6.06:1 — AA pass. */
448
- --hx-button-color: var(--hx-color-primary-600, #0f7078);
449
- --hx-button-border-color: var(--hx-color-primary-600, #0f7078);
446
+ /* primary-500 (#429797) text on white surface = 3.44:1 — fails AA.
447
+ primary-600 (#0F7078) on white = 5.82:1 — AA pass. */
448
+ --hx-button-color: var(--hx-color-action-secondary-fg, #0f7078);
449
+ --hx-button-border-color: var(--hx-color-action-secondary-border, #0f7078);
450
450
  }
451
451
 
452
452
  .button--secondary:hover {
453
- --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-surface-raised, #f5f8f3));
453
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-action-secondary-bg-hover, #ebf8f8));
454
454
  }
455
455
 
456
456
  .button--tertiary {
@@ -464,36 +464,52 @@
464
464
  }
465
465
 
466
466
  .button--danger {
467
- --hx-button-bg: var(--hx-color-error-500, #e5493e);
468
- --hx-button-color: var(--hx-color-text-on-error, #ffffff);
467
+ --hx-button-bg: var(--hx-color-action-danger-bg, #e5493e);
468
+ /* Inline #0d1825 matches text.on-error's resolved primitive (neutral-900);
469
+ cold-start without the semantic still paints AA-tuned dark-on-error
470
+ rather than white-on-error (3.92:1 fail). */
471
+ --hx-button-color: var(--hx-color-text-on-error, #0d1825);
469
472
  --hx-button-border-color: transparent;
470
473
  }
471
474
 
472
475
  /* on-error tokens are tuned for error-500 (neutral-900 on #E5493E ≈ 4.59:1).
473
- error-600 (#C92A2A) drops that to 2.25:1 — AA fail. Hold fg at neutral-0
474
- directly so darker hover fills stay legible. Mirrors hx-toast precedent
475
- (commit 300e21ab0). */
476
+ error-600 (#C92A2A) drops that to 3.28:1 — AA fail. text.on-error-strong
477
+ resolves to neutral-0 across modes (no dark flip) so the darker hover fill
478
+ stays legible. Mirrors hx-toast precedent (commit 300e21ab0); routed
479
+ through the semantic tier in 3.2.1 token-cascade remediation. */
476
480
  .button--danger:hover {
477
- --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-error-600, #c92a2a));
478
- --hx-button-color: var(--hx-color-neutral-0, #ffffff);
481
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-action-danger-bg-hover, #c92a2a));
482
+ --hx-button-color: var(--hx-color-text-on-error-strong, #ffffff);
483
+ }
484
+
485
+ /* Pressed state binds explicitly to action.danger.bg-active (error-700,
486
+ #A21312) + text.on-error-strong (neutral-0) = 7.96:1 AA. Base
487
+ .button:active filter:brightness(0.8) would compound on top of bg-hover
488
+ (#C92A2A) and produce ~3.3:1 sub-AA on the bound colors. Override the
489
+ filter to none. HC override on action.danger.bg-active flips to HC
490
+ error-500 so the on-error-strong (HC = #000) pair is AA in HC too. */
491
+ .button--danger:active {
492
+ --hx-button-bg: var(--hx-button-active-bg, var(--hx-color-action-danger-bg-active, #a21312));
493
+ --hx-button-color: var(--hx-color-text-on-error-strong, #ffffff);
494
+ filter: none;
479
495
  }
480
496
 
481
497
  .button--ghost {
482
498
  --hx-button-bg: transparent;
483
- /* primary-500 (#429797) text on white surface = 3.43:1 — fails AA.
484
- primary-600 (#0F7078) on white = 6.06:1 — AA pass. */
485
- --hx-button-color: var(--hx-color-primary-600, #0f7078);
499
+ /* primary-500 (#429797) text on white surface = 3.44:1 — fails AA.
500
+ primary-600 (#0F7078) on white = 5.82:1 — AA pass. */
501
+ --hx-button-color: var(--hx-color-action-ghost-fg, #0f7078);
486
502
  --hx-button-border-color: transparent;
487
503
  }
488
504
 
489
505
  .button--ghost:hover {
490
- --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-surface-raised, #f5f8f3));
506
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-action-ghost-bg-hover, #ebf8f8));
491
507
  }
492
508
 
493
509
  .button--outline {
494
510
  --hx-button-bg: transparent;
495
511
  --hx-button-color: var(--hx-color-text-primary, #0d1825);
496
- --hx-button-border-color: var(--hx-color-border-strong, #8e9c98);
512
+ --hx-button-border-color: var(--hx-color-border-strong, #66787b);
497
513
  }
498
514
 
499
515
  .button--outline:hover {
@@ -501,12 +517,24 @@
501
517
  }
502
518
 
503
519
  /* on-primary token resolves to neutral-900 (#0D1825) — tuned for primary-500.
504
- primary-600 (#0F7078) drops the pair to 3.07:1 — AA fail. Pin fg at
505
- neutral-0 for the darker hover fill. Mirrors hx-toast precedent
506
- (commit 300e21ab0). */
520
+ primary-600 (#0F7078) drops the pair to 3.07:1 — AA fail. text.on-primary-strong
521
+ resolves to neutral-0 across modes (no dark flip) for the darker hover fill.
522
+ Mirrors hx-toast precedent (commit 300e21ab0); routed through the semantic
523
+ tier in 3.2.1 token-cascade remediation. */
507
524
  .button--primary:hover {
508
- --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-primary-600, #0f7078));
509
- --hx-button-color: var(--hx-color-neutral-0, #ffffff);
525
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-action-primary-bg-hover, #0f7078));
526
+ --hx-button-color: var(--hx-color-text-on-primary-strong, #ffffff);
527
+ }
528
+
529
+ /* Pressed state binds explicitly to action.primary.bg-active (primary-700,
530
+ #0F6363) + text.on-primary-strong (neutral-0) = 7.03:1 AA. The base
531
+ .button:active filter:brightness(0.8) would compound on top of bg-hover
532
+ (#0F7078) and produce ~3.7:1 sub-AA on the bound colors. Override the
533
+ filter to none so the action.*.bg-active token is what actually paints. */
534
+ .button--primary:active {
535
+ --hx-button-bg: var(--hx-button-active-bg, var(--hx-color-action-primary-bg-active, #0f6363));
536
+ --hx-button-color: var(--hx-color-text-on-primary-strong, #ffffff);
537
+ filter: none;
510
538
  }
511
539
 
512
540
  /* ─── Disabled ─── */
@@ -550,9 +578,20 @@
550
578
 
551
579
  /* ─── Inverted Mode ─── */
552
580
 
581
+ /* Inline-fallback contract for the on-dark-* tokens in this section:
582
+ the literal rgba(255, 255, 255, 0.X) arms are a LIGHT-MODE-only last
583
+ resort (cold-start, CSS-not-loaded). At runtime, hx-theme injects
584
+ the dark.* override (overlay-black-* for the strong border and the
585
+ surface.on-dark-overlay-* fills) so dark-mode inverted buttons stay
586
+ visible on the now-light surface.inverse (#EBEEE9). The inline white
587
+ overlays would render invisible (≈1.1:1) on a light surface, but
588
+ they never paint when the theme is mounted. If a future change
589
+ moves these into a context where hx-theme is not guaranteed,
590
+ replace with mode-aware tokens. */
591
+
553
592
  /* Override text color and filter-based hover/active for all variants */
554
593
  :host([inverted]) .button {
555
- color: var(--hx-button-inverted-color, var(--hx-color-neutral-0, #ffffff));
594
+ color: var(--hx-button-inverted-color, var(--hx-color-text-inverse, #ffffff));
556
595
  filter: none;
557
596
  }
558
597
 
@@ -565,37 +604,115 @@
565
604
  }
566
605
 
567
606
  :host([inverted]) .button:focus-visible {
607
+ /* WCAG 1.4.11: focus indicator needs ≥3:1 against adjacent colors.
608
+ border-on-dark-strong (overlay-white-70) ≈ 5:1 on neutral-900 — passes.
609
+ The lower-alpha siblings used to live in border.* but were sub-3:1
610
+ against any plausible surface and could not honour a border contract;
611
+ they're now surface.on-dark-overlay-{default,subtle} (translucent
612
+ fills, not borders) and used elsewhere in this file. See
613
+ tokens.json color.surface.on-dark-overlay-* for canonical ratios. */
568
614
  outline-color: var(
569
615
  --hx-button-inverted-focus-ring-color,
570
- var(--hx-overlay-white-50, rgba(255, 255, 255, 0.5))
616
+ var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
571
617
  );
572
618
  }
573
619
 
574
- /* Primary inverted — slight transparent white overlay on hover */
575
- :host([inverted]) .button--primary:hover {
576
- --hx-button-bg: var(--hx-color-primary-400, #6ab1b1);
620
+ /* Primary inverted — resting bg routes through action.primary.bg-inverted-rest
621
+ so dark mode can flip the fill to primary-600. surface.inverse becomes light
622
+ (#EBEEE9) in dark mode; primary-500 on #EBEEE9 = 2.94:1 (sub-3:1 UI floor
623
+ fail for the inverted-button boundary). primary-600 on #EBEEE9 = 4.97:1
624
+ (AA pass). Light mode tracks action.primary.bg-inverted-rest's base value
625
+ (primary-500, 5.20:1 on dark surface.inverse).
626
+
627
+ Override path note (codex round-11): this binds --hx-button-bg directly,
628
+ matching the cascade convention every other .button--{variant} rule uses
629
+ (light primary at line 89, danger at 120, secondary, tertiary, ghost). The
630
+ consumer override path for inverted-primary rest is
631
+ --hx-color-action-primary-bg-inverted-rest, NOT --hx-button-bg — the same
632
+ pattern as light primary (consumers override --hx-color-action-primary-bg).
633
+ Pinned by dark-mode-resolution.test.ts:185-197 across both modes. */
634
+ :host([inverted]) .button--primary {
635
+ --hx-button-bg: var(--hx-color-action-primary-bg-inverted-rest, #429797);
636
+ }
637
+
638
+ /* Primary inverted — hover/pressed lift to action.primary.bg-inverted-hover
639
+ (primary-400, light teal). The base :host([inverted]) .button rule binds
640
+ color to text.inverse, which flips by mode (neutral-0 in light, neutral-900
641
+ in dark). On a permanent light-teal fill, white text drops to 2.4:1 in
642
+ light mode (AA fail). Pin color to text.on-primary (neutral-900, no
643
+ dark-mode flip) for both hover and active so the foreground is dark in
644
+ both modes — neutral-900 on primary-400 = 7.27:1 (AA pass).
645
+ Pressed === hover visually in inverted mode is acceptable UX (the
646
+ transient absence of pointer over the button signals release).
647
+ The fallback chain wraps --hx-button-active-bg (highest precedence) and
648
+ --hx-button-hover-bg so consumer overrides on either prop apply under
649
+ :host([inverted]) — the two share a paint here, so either knob is
650
+ honored, with active-bg winning when both are set. */
651
+ :host([inverted]) .button--primary:hover,
652
+ :host([inverted]) .button--primary:active {
653
+ --hx-button-bg: var(
654
+ --hx-button-active-bg,
655
+ var(--hx-button-hover-bg, var(--hx-color-action-primary-bg-inverted-hover, #6ab1b1))
656
+ );
657
+ color: var(
658
+ --hx-button-inverted-primary-interactive-color,
659
+ var(--hx-color-text-on-primary, #0d1825)
660
+ );
661
+ }
662
+
663
+ /* Danger inverted — sister to primary. Hover/pressed lift to
664
+ action.danger.bg-inverted-hover (error-400, #FC7264). Same foreground
665
+ contract: text.inverse fails in light mode (white on light red ≈ 2.6:1);
666
+ pin to text.on-error (neutral-900, no dark-mode flip) for 6.58:1 in both
667
+ modes. Same active-bg → hover-bg → semantic fallback chain as primary. */
668
+ :host([inverted]) .button--danger:hover,
669
+ :host([inverted]) .button--danger:active {
670
+ --hx-button-bg: var(
671
+ --hx-button-active-bg,
672
+ var(--hx-button-hover-bg, var(--hx-color-action-danger-bg-inverted-hover, #fc7264))
673
+ );
674
+ color: var(
675
+ --hx-button-inverted-danger-interactive-color,
676
+ var(--hx-color-text-on-error, #0d1825)
677
+ );
577
678
  }
578
679
 
579
- /* Secondary inverted — white border and text */
680
+ /* Secondary inverted — white border and translucent hover fill */
580
681
  :host([inverted]) .button--secondary {
581
- --hx-button-border-color: var(--hx-overlay-white-70, rgba(255, 255, 255, 0.7));
682
+ --hx-button-border-color: var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
582
683
  }
583
684
 
685
+ /* Inverted overlay fills read both names so consumer overrides reach paint
686
+ regardless of which token they target: the deprecated --hx-color-border-on-dark-*
687
+ names (3.2.0/3.2.1 public API, scheduled for removal in 4.0.0) and the canonical
688
+ --hx-color-surface-on-dark-overlay-* names (round-8 rename). Deprecated name
689
+ wins when set; otherwise resolves through the canonical alias chain. */
584
690
  :host([inverted]) .button--secondary:hover {
585
- --hx-button-bg: var(--hx-overlay-white-15, rgba(255, 255, 255, 0.15));
691
+ --hx-button-bg: var(
692
+ --hx-color-border-on-dark-default,
693
+ var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
694
+ );
586
695
  }
587
696
 
588
- /* Tertiary inverted */
697
+ /* Tertiary inverted — resting at the subtle overlay (10%) lifts to the default
698
+ overlay (30%) on hover so the runtime hover delta is visually distinct, not
699
+ collapsed onto a single token. */
589
700
  :host([inverted]) .button--tertiary {
590
- --hx-button-bg: var(--hx-overlay-white-15, rgba(255, 255, 255, 0.15));
701
+ --hx-button-bg: var(
702
+ --hx-color-border-on-dark-subtle,
703
+ var(--hx-color-surface-on-dark-overlay-subtle, rgba(255, 255, 255, 0.1))
704
+ );
591
705
  --hx-button-border-color: transparent;
592
706
  }
593
707
 
594
708
  :host([inverted]) .button--tertiary:hover {
595
- --hx-button-bg: var(--hx-overlay-white-25, rgba(255, 255, 255, 0.25));
709
+ --hx-button-bg: var(
710
+ --hx-color-border-on-dark-default,
711
+ var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
712
+ );
596
713
  }
597
714
 
598
- /* Ghost inverted — transparent base, white hover bg */
715
+ /* Ghost inverted — transparent base, translucent hover bg */
599
716
  :host([inverted]) .button--ghost {
600
717
  --hx-button-bg: transparent;
601
718
  --hx-button-border-color: transparent;
@@ -604,17 +721,23 @@
604
721
  :host([inverted]) .button--ghost:hover {
605
722
  --hx-button-bg: var(
606
723
  --hx-button-inverted-ghost-hover-bg,
607
- var(--hx-overlay-white-20, rgba(255, 255, 255, 0.2))
724
+ var(
725
+ --hx-color-border-on-dark-default,
726
+ var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
727
+ )
608
728
  );
609
729
  }
610
730
 
611
731
  /* Outline inverted — white border */
612
732
  :host([inverted]) .button--outline {
613
- --hx-button-border-color: var(--hx-overlay-white-70, rgba(255, 255, 255, 0.7));
733
+ --hx-button-border-color: var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
614
734
  }
615
735
 
616
736
  :host([inverted]) .button--outline:hover {
617
- --hx-button-bg: var(--hx-overlay-white-15, rgba(255, 255, 255, 0.15));
737
+ --hx-button-bg: var(
738
+ --hx-color-border-on-dark-default,
739
+ var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
740
+ );
618
741
  }
619
742
 
620
743
  /* ─── Prefix / Suffix / Label ─── */
@@ -642,6 +765,16 @@
642
765
  border: 2px solid ButtonText;
643
766
  }
644
767
 
768
+ .button:hover {
769
+ /* Hover affordance must survive in HC. Highlight/HighlightText is the
770
+ OS-level "selected" pair, mirroring the forcedColorsInteractive mixin's
771
+ hover contract — kept inline since this component owns its bespoke HC
772
+ block (XOR rule). */
773
+ background-color: Highlight;
774
+ color: HighlightText;
775
+ border-color: Highlight;
776
+ }
777
+
645
778
  .button:focus-visible {
646
779
  outline: 3px solid Highlight;
647
780
  outline-offset: 2px;
@@ -870,10 +1003,7 @@
870
1003
 
871
1004
  .card--interactive:focus-visible {
872
1005
  outline: var(--hx-focus-ring-width, 2px) solid
873
- var(
874
- --hx-card-focus-ring-color,
875
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #429797))
876
- );
1006
+ var(--hx-card-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
877
1007
  outline-offset: var(--hx-focus-ring-offset, 2px);
878
1008
  }
879
1009
 
@@ -1179,10 +1309,7 @@
1179
1309
 
1180
1310
  .button:focus-visible {
1181
1311
  outline: var(--hx-focus-ring-width, 2px) solid
1182
- var(
1183
- --hx-icon-button-focus-ring-color,
1184
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #429797))
1185
- );
1312
+ var(--hx-icon-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
1186
1313
  outline-offset: var(--hx-focus-ring-offset, 2px);
1187
1314
  }
1188
1315
 
@@ -1252,7 +1379,7 @@
1252
1379
  .button--tertiary {
1253
1380
  --hx-icon-button-bg: transparent;
1254
1381
  --hx-icon-button-color: var(--hx-color-text-strong, #202b39);
1255
- --hx-icon-button-border-color: var(--hx-color-border-strong, #8e9c98);
1382
+ --hx-icon-button-border-color: var(--hx-color-border-strong, #66787b);
1256
1383
  }
1257
1384
 
1258
1385
  .button--tertiary:hover {
@@ -1425,10 +1552,7 @@
1425
1552
 
1426
1553
  .link:focus-visible {
1427
1554
  outline: var(--hx-focus-ring-width, 2px) solid
1428
- var(
1429
- --hx-link-focus-ring-color,
1430
- var(--hx-focus-ring-color, var(--hx-color-primary-400, #6ab1b1))
1431
- );
1555
+ var(--hx-link-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
1432
1556
  outline-offset: var(--hx-focus-ring-offset, 2px);
1433
1557
  border-radius: var(--hx-border-radius-sm, 0.25rem);
1434
1558
  }
@@ -80,7 +80,8 @@
80
80
  min-width: var(--hx-touch-target-min, 2.75rem);
81
81
  min-height: var(--hx-touch-target-min, 2.75rem);
82
82
  padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
83
- border: var(--hx-border-width-thin, 1px) solid var(--hx-color-border-strong, #8e9c98);
83
+ border: var(--hx-border-width-thin, 1px) solid
84
+ var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
84
85
  border-radius: var(--hx-border-radius-sm, 0.25rem);
85
86
  /* Copy button sits on the always-dark block snippet surface; uses inverse family for contrast on the terminal background. */
86
87
  background-color: var(--hx-color-surface-inverse, #0d1825);
@@ -105,8 +106,14 @@
105
106
  }
106
107
 
107
108
  .code-snippet__copy-button:focus-visible {
108
- outline: var(--hx-focus-ring-width, 2px) solid
109
- var(--hx-focus-ring-color, var(--hx-color-primary-400, #6ab1b1));
109
+ /* Always-dark terminal surface — uses primary-400 (#6AB1B1, 7.27:1 on #0d1825)
110
+ instead of the light-mode --hx-focus-ring-color (primary-600, 3.07:1 — razor
111
+ above the 3:1 UI floor with no headroom). Deliberate primitive-tier consumption:
112
+ there is no semantic focus-ring-on-dark alias today — the dark.color.focus-ring
113
+ override at tokens.json only fires under theme=dark, but this surface is dark in
114
+ every theme. Tracked for promotion to a semantic alias in a future token-cascade
115
+ follow-up. */
116
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-color-primary-400, #6ab1b1);
110
117
  outline-offset: var(--hx-focus-ring-offset, 2px);
111
118
  }
112
119
 
@@ -125,7 +132,8 @@
125
132
  min-height: var(--hx-touch-target-min, 2.75rem);
126
133
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
127
134
  border: none;
128
- border-top: var(--hx-border-width-thin, 1px) solid var(--hx-color-border-strong, #8e9c98);
135
+ border-top: var(--hx-border-width-thin, 1px) solid
136
+ var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
129
137
  /* Expand button is attached to the always-dark block snippet — inverse family maintains the terminal aesthetic. */
130
138
  background-color: var(--hx-color-surface-inverse, #0d1825);
131
139
  color: var(--hx-color-text-inverse, #ffffff);
@@ -146,8 +154,14 @@
146
154
  }
147
155
 
148
156
  .code-snippet__expand-button:focus-visible {
149
- outline: var(--hx-focus-ring-width, 2px) solid
150
- var(--hx-focus-ring-color, var(--hx-color-primary-400, #6ab1b1));
157
+ /* Always-dark terminal surface — uses primary-400 (#6AB1B1, 7.27:1 on #0d1825)
158
+ instead of the light-mode --hx-focus-ring-color (primary-600, 3.07:1 — razor
159
+ above the 3:1 UI floor with no headroom). Deliberate primitive-tier consumption:
160
+ there is no semantic focus-ring-on-dark alias today — the dark.color.focus-ring
161
+ override at tokens.json only fires under theme=dark, but this surface is dark in
162
+ every theme. Tracked for promotion to a semantic alias in a future token-cascade
163
+ follow-up. */
164
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-color-primary-400, #6ab1b1);
151
165
  outline-offset: var(--hx-focus-ring-offset, 2px);
152
166
  }
153
167
 
@@ -301,10 +315,7 @@
301
315
 
302
316
  .sort-btn:focus-visible {
303
317
  outline: var(--hx-focus-ring-width, 2px) solid
304
- var(
305
- --hx-data-table-focus-ring-color,
306
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #429797))
307
- );
318
+ var(--hx-data-table-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
308
319
  outline-offset: var(--hx-focus-ring-offset, 2px);
309
320
  border-radius: var(--hx-border-radius-sm, 2px);
310
321
  }
@@ -406,10 +417,7 @@
406
417
  [part~='td']:focus-visible,
407
418
  [part~='th']:focus-visible {
408
419
  outline: var(--hx-focus-ring-width, 2px) solid
409
- var(
410
- --hx-data-table-focus-ring-color,
411
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #429797))
412
- );
420
+ var(--hx-data-table-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
413
421
  outline-offset: var(--hx-focus-ring-offset, -2px);
414
422
  border-radius: var(--hx-border-radius-sm, 2px);
415
423
  }
@@ -679,8 +687,7 @@ export const helixStructuredListRowStyles = css`
679
687
  /* ─── Focus ─── */
680
688
 
681
689
  ::slotted(:focus-visible) {
682
- outline: var(--hx-focus-ring-width, 2px) solid
683
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #429797));
690
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
684
691
  outline-offset: var(--hx-focus-ring-offset, -2px);
685
692
  }
686
693
 
@@ -160,10 +160,7 @@
160
160
 
161
161
  .alert__close-button:focus-visible {
162
162
  outline: var(--hx-focus-ring-width, 2px) solid
163
- var(
164
- --hx-alert-close-btn-focus-ring-color,
165
- var(--hx-focus-ring-color, var(--hx-color-primary-400, #6ab1b1))
166
- );
163
+ var(--hx-alert-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
167
164
  outline-offset: var(--hx-focus-ring-offset, 2px);
168
165
  opacity: 1;
169
166
  }
@@ -336,10 +333,7 @@
336
333
 
337
334
  .banner__action:focus-visible {
338
335
  outline: var(--hx-focus-ring-width, 2px) solid
339
- var(
340
- --hx-banner-action-focus-ring-color,
341
- var(--hx-focus-ring-color, var(--hx-color-primary-400, #6ab1b1))
342
- );
336
+ var(--hx-banner-action-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
343
337
  outline-offset: var(--hx-focus-ring-offset, 2px);
344
338
  border-radius: var(--hx-border-radius-sm, 0.25rem);
345
339
  }
@@ -380,10 +374,7 @@
380
374
 
381
375
  .banner__close-button:focus-visible {
382
376
  outline: var(--hx-focus-ring-width, 2px) solid
383
- var(
384
- --hx-banner-close-btn-focus-ring-color,
385
- var(--hx-focus-ring-color, var(--hx-color-primary-400, #6ab1b1))
386
- );
377
+ var(--hx-banner-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
387
378
  outline-offset: var(--hx-focus-ring-offset, 2px);
388
379
  opacity: 1;
389
380
  }
@@ -481,8 +472,7 @@
481
472
  }
482
473
 
483
474
  .meter:focus-visible {
484
- outline: var(--hx-focus-ring-width, 2px) solid
485
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #429797));
475
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
486
476
  outline-offset: var(--hx-focus-ring-offset, 2px);
487
477
  }
488
478
 
@@ -1233,33 +1223,38 @@
1233
1223
  * error-600) because the lighter -500 fills can't pass AA against white
1234
1224
  * text in the precision-cool palette. The neutral-900 on-{role} tokens
1235
1225
  * are tuned for the lighter -500 surfaces and would fail here (e.g.
1236
- * neutral-900 on primary-600 = 3.07:1), so we hold fg at neutral-0
1237
- * directly for primary/success/danger.
1238
- * - neutral-0 on primary-600 (#0F7078) = 5.39:1 — AA pass
1239
- * - neutral-0 on success-700 (#146831) = 6.88:1 — AA pass
1240
- * (success-600 #0E8A4A on white = 4.41:1 — drifts under AA at 14px)
1241
- * - neutral-0 on error-600 (#C92A2A) = 5.92:1 — AA pass
1242
- * - neutral-900 on warning-500 (#C2711C) = 4.83:1 — AA pass
1226
+ * neutral-900 on primary-600 = 3.07:1), so the on-{role}-strong tokens
1227
+ * (neutral-0, no dark-mode flip) keep fg legible on the darker fills.
1228
+ * - text.on-primary-strong on info.bg-strong (primary-600, #0F7078) = 5.82:1
1229
+ * - text.on-success-strong on success.bg-strong (success-700, #146831) = 6.88:1
1230
+ * (success-600 #0E8A4A on white = 4.42:1 — drifts under AA at 14px)
1231
+ * - text.on-error-strong on danger.bg-strong (error-600, #C92A2A) = 5.46:1
1232
+ * - text.on-warning on warning.bg-strong (warning-500, #C2711C) = 4.83:1
1243
1233
  * (warning stays on the lighter -500 surface so on-warning works)
1234
+ *
1235
+ * 3.2.1 token-cascade: bg variants now route through surface.{role}-strong
1236
+ * semantics; fg variants route through text.on-{role}-strong (or on-warning
1237
+ * for the warning variant). Component-tier tokens are NOT bypassed — the
1238
+ * --hx-toast-bg / --hx-toast-color slots remain the single override point.
1244
1239
  */
1245
1240
  .toast--success {
1246
- --hx-toast-bg: var(--hx-color-success-700, #146831);
1247
- --hx-toast-color: var(--hx-color-neutral-0, #ffffff);
1241
+ --hx-toast-bg: var(--hx-color-surface-success-strong, #146831);
1242
+ --hx-toast-color: var(--hx-color-text-on-success-strong, #ffffff);
1248
1243
  }
1249
1244
 
1250
1245
  .toast--warning {
1251
- --hx-toast-bg: var(--hx-color-warning-500, #c2711c);
1246
+ --hx-toast-bg: var(--hx-color-surface-warning-strong, #c2711c);
1252
1247
  --hx-toast-color: var(--hx-color-text-on-warning, #0d1825);
1253
1248
  }
1254
1249
 
1255
1250
  .toast--danger {
1256
- --hx-toast-bg: var(--hx-color-error-600, #c92a2a);
1257
- --hx-toast-color: var(--hx-color-neutral-0, #ffffff);
1251
+ --hx-toast-bg: var(--hx-color-surface-danger-strong, #c92a2a);
1252
+ --hx-toast-color: var(--hx-color-text-on-error-strong, #ffffff);
1258
1253
  }
1259
1254
 
1260
1255
  .toast--info {
1261
- --hx-toast-bg: var(--hx-color-primary-600, #0f7078);
1262
- --hx-toast-color: var(--hx-color-neutral-0, #ffffff);
1256
+ --hx-toast-bg: var(--hx-color-surface-info-strong, #0f7078);
1257
+ --hx-toast-color: var(--hx-color-text-on-primary-strong, #ffffff);
1263
1258
  }
1264
1259
 
1265
1260
  /* ─── Severity Label (WCAG 1.4.1) ─── */
@@ -1352,10 +1347,16 @@
1352
1347
  }
1353
1348
 
1354
1349
  /* ─── Forced Colors (Windows High Contrast) ─── */
1355
- /* Belt-and-suspenders: rich per-class HC overrides PLUS the forcedColorsSurface mixin. */
1350
+ /* Sole owner: bespoke per-class HC overrides on .toast and .toast__close.
1351
+ The shared forcedColorsSurface mixin was dropped in 3.2.1 (XOR rule);
1352
+ this block now carries the surface contract the mixin used to provide
1353
+ (background:Canvas + color:CanvasText + border:1px solid CanvasText)
1354
+ plus the per-class affordances the mixin never touched. */
1356
1355
 
1357
1356
  @media (forced-colors: active) {
1358
1357
  .toast {
1358
+ background: Canvas;
1359
+ color: CanvasText;
1359
1360
  border: 1px solid CanvasText;
1360
1361
  }
1361
1362