@helixui/library 3.6.0 → 3.8.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/custom-elements.json +2633 -805
  2. package/dist/components/hx-action-bar/hx-action-bar.d.ts +18 -0
  3. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  4. package/dist/components/hx-action-bar/hx-action-bar.styles.d.ts.map +1 -1
  5. package/dist/components/hx-action-bar/index.js +1 -1
  6. package/dist/components/hx-alert/hx-alert.d.ts +18 -0
  7. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  8. package/dist/components/hx-badge/index.js +1 -1
  9. package/dist/components/hx-banner/hx-banner.d.ts +19 -0
  10. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  11. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  12. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
  13. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +18 -0
  14. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  15. package/dist/components/hx-breadcrumb/index.js +1 -1
  16. package/dist/components/hx-button/hx-button.d.ts +18 -0
  17. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  18. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  19. package/dist/components/hx-button/index.js +1 -1
  20. package/dist/components/hx-button-group/hx-button-group.d.ts +47 -0
  21. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  22. package/dist/components/hx-button-group/index.js +1 -1
  23. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -0
  24. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  25. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  26. package/dist/components/hx-checkbox/index.js +1 -1
  27. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +36 -0
  28. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  29. package/dist/components/hx-checkbox-group/hx-checkbox-group.styles.d.ts.map +1 -1
  30. package/dist/components/hx-checkbox-group/index.js +1 -1
  31. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +19 -0
  32. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
  33. package/dist/components/hx-color-picker/hx-color-picker.d.ts +18 -0
  34. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  35. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  36. package/dist/components/hx-color-picker/index.js +1 -1
  37. package/dist/components/hx-combobox/hx-combobox.d.ts +18 -0
  38. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  39. package/dist/components/hx-copy-button/hx-copy-button.d.ts +18 -0
  40. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  41. package/dist/components/hx-copy-button/hx-copy-button.styles.d.ts.map +1 -1
  42. package/dist/components/hx-copy-button/index.js +1 -1
  43. package/dist/components/hx-date-picker/hx-date-picker.d.ts +18 -0
  44. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  45. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  46. package/dist/components/hx-date-picker/index.js +1 -1
  47. package/dist/components/hx-dialog/hx-dialog.d.ts +18 -0
  48. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  49. package/dist/components/hx-drawer/hx-drawer.d.ts +18 -0
  50. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  51. package/dist/components/hx-dropdown/hx-dropdown.d.ts +18 -0
  52. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  53. package/dist/components/hx-dropdown/hx-dropdown.styles.d.ts.map +1 -1
  54. package/dist/components/hx-dropdown/index.js +1 -1
  55. package/dist/components/hx-field/hx-field.d.ts +17 -0
  56. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  57. package/dist/components/hx-field-label/hx-field-label.d.ts +17 -0
  58. package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
  59. package/dist/components/hx-file-upload/hx-file-upload.d.ts +18 -0
  60. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  61. package/dist/components/hx-form/hx-form.d.ts +19 -0
  62. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  63. package/dist/components/hx-help-text/hx-help-text.d.ts +17 -0
  64. package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
  65. package/dist/components/hx-icon-button/hx-icon-button.d.ts +18 -0
  66. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  67. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  68. package/dist/components/hx-icon-button/index.js +1 -1
  69. package/dist/components/hx-menu/hx-menu.d.ts +18 -0
  70. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  71. package/dist/components/hx-nav/hx-nav.d.ts +18 -0
  72. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  73. package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
  74. package/dist/components/hx-nav/index.js +1 -1
  75. package/dist/components/hx-number-input/hx-number-input.d.ts +18 -0
  76. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  77. package/dist/components/hx-number-input/index.js +1 -1
  78. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +18 -0
  79. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  80. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  81. package/dist/components/hx-pagination/index.js +1 -1
  82. package/dist/components/hx-popover/hx-popover.d.ts +18 -0
  83. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  84. package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
  85. package/dist/components/hx-popover/index.js +1 -1
  86. package/dist/components/hx-popup/hx-popup.d.ts +18 -0
  87. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  88. package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
  89. package/dist/components/hx-popup/index.js +1 -1
  90. package/dist/components/hx-radio-group/hx-radio-group.d.ts +18 -0
  91. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  92. package/dist/components/hx-radio-group/hx-radio-group.styles.d.ts.map +1 -1
  93. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  94. package/dist/components/hx-radio-group/index.js +1 -1
  95. package/dist/components/hx-rating/hx-rating.d.ts +19 -0
  96. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  97. package/dist/components/hx-select/hx-select.d.ts +18 -0
  98. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  99. package/dist/components/hx-side-nav/hx-side-nav.d.ts +18 -0
  100. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  101. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  102. package/dist/components/hx-side-nav/index.js +1 -1
  103. package/dist/components/hx-slider/hx-slider.d.ts +19 -0
  104. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  105. package/dist/components/hx-split-button/hx-split-button.d.ts +18 -0
  106. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  107. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  108. package/dist/components/hx-split-button/index.js +1 -1
  109. package/dist/components/hx-steps/index.js +1 -1
  110. package/dist/components/hx-switch/hx-switch.d.ts +18 -0
  111. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  112. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  113. package/dist/components/hx-switch/index.js +1 -1
  114. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  115. package/dist/components/hx-tabs/hx-tabs.d.ts +18 -0
  116. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  117. package/dist/components/hx-tabs/index.js +1 -1
  118. package/dist/components/hx-text-input/hx-text-input.d.ts +18 -0
  119. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  120. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  121. package/dist/components/hx-text-input/index.js +1 -1
  122. package/dist/components/hx-textarea/hx-textarea.d.ts +18 -0
  123. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  124. package/dist/components/hx-time-picker/hx-time-picker.d.ts +18 -0
  125. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  126. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  127. package/dist/components/hx-time-picker/index.js +1 -1
  128. package/dist/components/hx-toast/hx-toast.d.ts +19 -0
  129. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  130. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +18 -0
  131. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  132. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  133. package/dist/components/hx-toggle-button/index.js +1 -1
  134. package/dist/components/hx-tooltip/hx-tooltip.d.ts +18 -0
  135. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  136. package/dist/components/hx-tooltip/hx-tooltip.styles.d.ts.map +1 -1
  137. package/dist/components/hx-tooltip/index.js +1 -1
  138. package/dist/components/hx-top-nav/hx-top-nav.d.ts +18 -0
  139. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  140. package/dist/components/hx-top-nav/hx-top-nav.styles.d.ts.map +1 -1
  141. package/dist/components/hx-top-nav/index.js +1 -1
  142. package/dist/css/helix-all.css +298 -64
  143. package/dist/css/helix-core.css +24 -15
  144. package/dist/css/helix-forms.css +133 -32
  145. package/dist/css/helix-navigation.css +49 -5
  146. package/dist/css/helix-overlay.css +53 -0
  147. package/dist/css/helix-tokens.css +15 -13
  148. package/dist/css/helix-utility.css +39 -12
  149. package/dist/css/hx-action-bar.css +12 -0
  150. package/dist/css/hx-badge.css +5 -5
  151. package/dist/css/hx-button.css +15 -5
  152. package/dist/css/hx-checkbox-group.css +11 -0
  153. package/dist/css/hx-checkbox.css +20 -4
  154. package/dist/css/hx-color-picker.css +14 -1
  155. package/dist/css/hx-copy-button.css +5 -2
  156. package/dist/css/hx-date-picker.css +11 -3
  157. package/dist/css/hx-dropdown.css +13 -0
  158. package/dist/css/hx-icon-button.css +4 -5
  159. package/dist/css/hx-nav.css +24 -2
  160. package/dist/css/hx-number-input.css +8 -8
  161. package/dist/css/hx-pagination.css +6 -3
  162. package/dist/css/hx-popover.css +13 -0
  163. package/dist/css/hx-popup.css +14 -0
  164. package/dist/css/hx-radio-group.css +10 -0
  165. package/dist/css/hx-side-nav.css +7 -0
  166. package/dist/css/hx-split-button.css +22 -10
  167. package/dist/css/hx-switch.css +19 -1
  168. package/dist/css/hx-text-input.css +4 -1
  169. package/dist/css/hx-time-picker.css +7 -2
  170. package/dist/css/hx-toggle-button.css +29 -12
  171. package/dist/css/hx-tooltip.css +13 -0
  172. package/dist/css/hx-top-nav.css +12 -0
  173. package/dist/css/index.css +1 -1
  174. package/dist/css/manifest.json +57 -20
  175. package/dist/index.js +28 -28
  176. package/dist/shared/{hx-action-bar-CitgcpGv.js → hx-action-bar-BlEG4aZv.js} +41 -29
  177. package/dist/shared/hx-action-bar-BlEG4aZv.js.map +1 -0
  178. package/dist/shared/hx-alert-Bto8-TIi.js.map +1 -1
  179. package/dist/shared/{hx-badge-JlFtAdxS.js → hx-badge-DFL35nzi.js} +16 -16
  180. package/dist/shared/hx-badge-DFL35nzi.js.map +1 -0
  181. package/dist/shared/hx-banner-fpRnciIO.js.map +1 -1
  182. package/dist/shared/{hx-breadcrumb-item-3tKppF9h.js → hx-breadcrumb-item-D8xYqe3s.js} +56 -43
  183. package/dist/shared/hx-breadcrumb-item-D8xYqe3s.js.map +1 -0
  184. package/dist/shared/{hx-button-BOwAEcF1.js → hx-button-DOZTZnz-.js} +29 -19
  185. package/dist/shared/hx-button-DOZTZnz-.js.map +1 -0
  186. package/dist/shared/hx-button-group-D3QUmSzl.js +248 -0
  187. package/dist/shared/hx-button-group-D3QUmSzl.js.map +1 -0
  188. package/dist/shared/{hx-checkbox-CYd0YV_u.js → hx-checkbox-DcgyGS9V.js} +27 -11
  189. package/dist/shared/hx-checkbox-DcgyGS9V.js.map +1 -0
  190. package/dist/shared/{hx-checkbox-group-D5piJLY8.js → hx-checkbox-group-C0q6HDqn.js} +101 -58
  191. package/dist/shared/hx-checkbox-group-C0q6HDqn.js.map +1 -0
  192. package/dist/shared/hx-clinical-status-D3XQIOqX.js.map +1 -1
  193. package/dist/shared/{hx-color-picker-DBwJzT5f.js → hx-color-picker-CYjx8i8R.js} +97 -84
  194. package/dist/shared/hx-color-picker-CYjx8i8R.js.map +1 -0
  195. package/dist/shared/hx-combobox-NgJaLbs2.js.map +1 -1
  196. package/dist/shared/{hx-copy-button-sUVuikyH.js → hx-copy-button-DJirFCUL.js} +18 -15
  197. package/dist/shared/hx-copy-button-DJirFCUL.js.map +1 -0
  198. package/dist/shared/{hx-date-picker-B49yo4Vm.js → hx-date-picker-0PtEav0K.js} +71 -63
  199. package/dist/shared/hx-date-picker-0PtEav0K.js.map +1 -0
  200. package/dist/shared/hx-dialog-B4weoj_1.js.map +1 -1
  201. package/dist/shared/hx-drawer-CM_upadk.js.map +1 -1
  202. package/dist/shared/{hx-dropdown-D626S2ZG.js → hx-dropdown-xHwTJecv.js} +44 -31
  203. package/dist/shared/hx-dropdown-xHwTJecv.js.map +1 -0
  204. package/dist/shared/hx-field-label-BVRyyKeh.js.map +1 -1
  205. package/dist/shared/hx-field-zw0U1KVi.js.map +1 -1
  206. package/dist/shared/hx-file-upload-D3rKROK5.js.map +1 -1
  207. package/dist/shared/hx-form-CkChEATa.js.map +1 -1
  208. package/dist/shared/hx-help-text-Xb2Yr8x2.js.map +1 -1
  209. package/dist/shared/{hx-icon-button-a6OpeQz5.js → hx-icon-button-B2BdVdyK.js} +10 -11
  210. package/dist/shared/hx-icon-button-B2BdVdyK.js.map +1 -0
  211. package/dist/shared/hx-menu-divider-A6Guuzi_.js.map +1 -1
  212. package/dist/shared/{hx-nav-ldFM3Fle.js → hx-nav-ChMTfn7o.js} +66 -44
  213. package/dist/shared/hx-nav-ChMTfn7o.js.map +1 -0
  214. package/dist/shared/{hx-nav-item-CODtUlew.js → hx-nav-item-ClN17f1y.js} +62 -55
  215. package/dist/shared/hx-nav-item-ClN17f1y.js.map +1 -0
  216. package/dist/shared/{hx-number-input-yUzFOSC1.js → hx-number-input-MggsT7F0.js} +13 -13
  217. package/dist/shared/hx-number-input-MggsT7F0.js.map +1 -0
  218. package/dist/shared/hx-overflow-menu-DFjJAziP.js.map +1 -1
  219. package/dist/shared/{hx-pagination-C7y8GVyU.js → hx-pagination-D726PyTM.js} +7 -4
  220. package/dist/shared/hx-pagination-D726PyTM.js.map +1 -0
  221. package/dist/shared/{hx-popover-BAlAFOH9.js → hx-popover-BjB0nkcq.js} +51 -38
  222. package/dist/shared/hx-popover-BjB0nkcq.js.map +1 -0
  223. package/dist/shared/{hx-popup-COUXXZ9X.js → hx-popup-BiV_2evC.js} +59 -45
  224. package/dist/shared/hx-popup-BiV_2evC.js.map +1 -0
  225. package/dist/shared/{hx-radio-C7eTj5YI.js → hx-radio-BY4zpwdh.js} +81 -63
  226. package/dist/shared/hx-radio-BY4zpwdh.js.map +1 -0
  227. package/dist/shared/hx-rating-C3QP53k9.js.map +1 -1
  228. package/dist/shared/hx-select-DahFehiZ.js.map +1 -1
  229. package/dist/shared/hx-slider-Blmv_rwS.js.map +1 -1
  230. package/dist/shared/{hx-split-button-Ddle8iVx.js → hx-split-button-CdNz1XAu.js} +62 -50
  231. package/dist/shared/hx-split-button-CdNz1XAu.js.map +1 -0
  232. package/dist/shared/{hx-step-R2rjp1fT.js → hx-step-CUzliIK_.js} +3 -3
  233. package/dist/shared/hx-step-CUzliIK_.js.map +1 -0
  234. package/dist/shared/{hx-switch-TvKGvZJz.js → hx-switch-BCXuNxEH.js} +42 -24
  235. package/dist/shared/hx-switch-BCXuNxEH.js.map +1 -0
  236. package/dist/shared/{hx-tab-panel-DzsX8BHV.js → hx-tab-panel-BfisavKo.js} +47 -32
  237. package/dist/shared/hx-tab-panel-BfisavKo.js.map +1 -0
  238. package/dist/shared/{hx-text-input-D6FlOZM-.js → hx-text-input-V5sQOpDh.js} +5 -2
  239. package/dist/shared/hx-text-input-V5sQOpDh.js.map +1 -0
  240. package/dist/shared/hx-textarea-CNG590KY.js.map +1 -1
  241. package/dist/shared/{hx-time-picker-Bo7FWzmf.js → hx-time-picker-DfJkBwcX.js} +41 -36
  242. package/dist/shared/hx-time-picker-DfJkBwcX.js.map +1 -0
  243. package/dist/shared/{hx-toggle-button-DwBers3A.js → hx-toggle-button-xNVYeA3X.js} +64 -47
  244. package/dist/shared/hx-toggle-button-xNVYeA3X.js.map +1 -0
  245. package/dist/shared/{hx-tooltip-DVqtKPCD.js → hx-tooltip-CamO-9nd.js} +24 -11
  246. package/dist/shared/hx-tooltip-CamO-9nd.js.map +1 -0
  247. package/dist/shared/{hx-top-nav-DP6OFS8C.js → hx-top-nav-CsTxOtVI.js} +26 -14
  248. package/dist/shared/hx-top-nav-CsTxOtVI.js.map +1 -0
  249. package/dist/shared/toast-factory-Dht3pVsw.js.map +1 -1
  250. package/figma-inventory.json +1258 -386
  251. package/package.json +2 -2
  252. package/dist/shared/hx-action-bar-CitgcpGv.js.map +0 -1
  253. package/dist/shared/hx-badge-JlFtAdxS.js.map +0 -1
  254. package/dist/shared/hx-breadcrumb-item-3tKppF9h.js.map +0 -1
  255. package/dist/shared/hx-button-BOwAEcF1.js.map +0 -1
  256. package/dist/shared/hx-button-group-4NUBpkyC.js +0 -181
  257. package/dist/shared/hx-button-group-4NUBpkyC.js.map +0 -1
  258. package/dist/shared/hx-checkbox-CYd0YV_u.js.map +0 -1
  259. package/dist/shared/hx-checkbox-group-D5piJLY8.js.map +0 -1
  260. package/dist/shared/hx-color-picker-DBwJzT5f.js.map +0 -1
  261. package/dist/shared/hx-copy-button-sUVuikyH.js.map +0 -1
  262. package/dist/shared/hx-date-picker-B49yo4Vm.js.map +0 -1
  263. package/dist/shared/hx-dropdown-D626S2ZG.js.map +0 -1
  264. package/dist/shared/hx-icon-button-a6OpeQz5.js.map +0 -1
  265. package/dist/shared/hx-nav-item-CODtUlew.js.map +0 -1
  266. package/dist/shared/hx-nav-ldFM3Fle.js.map +0 -1
  267. package/dist/shared/hx-number-input-yUzFOSC1.js.map +0 -1
  268. package/dist/shared/hx-pagination-C7y8GVyU.js.map +0 -1
  269. package/dist/shared/hx-popover-BAlAFOH9.js.map +0 -1
  270. package/dist/shared/hx-popup-COUXXZ9X.js.map +0 -1
  271. package/dist/shared/hx-radio-C7eTj5YI.js.map +0 -1
  272. package/dist/shared/hx-split-button-Ddle8iVx.js.map +0 -1
  273. package/dist/shared/hx-step-R2rjp1fT.js.map +0 -1
  274. package/dist/shared/hx-switch-TvKGvZJz.js.map +0 -1
  275. package/dist/shared/hx-tab-panel-DzsX8BHV.js.map +0 -1
  276. package/dist/shared/hx-text-input-D6FlOZM-.js.map +0 -1
  277. package/dist/shared/hx-time-picker-Bo7FWzmf.js.map +0 -1
  278. package/dist/shared/hx-toggle-button-DwBers3A.js.map +0 -1
  279. package/dist/shared/hx-tooltip-DVqtKPCD.js.map +0 -1
  280. package/dist/shared/hx-top-nav-DP6OFS8C.js.map +0 -1
@@ -145,8 +145,8 @@
145
145
  justify-content: center;
146
146
  gap: var(--hx-space-1, 0.25rem);
147
147
  border-radius: var(--hx-badge-border-radius, var(--hx-border-radius-md, 0.375rem));
148
- background-color: var(--hx-badge-bg, var(--hx-color-primary-500, #429797));
149
- color: var(--hx-badge-color, var(--hx-color-text-on-primary, #0d1825));
148
+ background-color: var(--hx-badge-bg, var(--hx-color-action-primary-bg, #0f7078));
149
+ color: var(--hx-badge-color, var(--hx-color-text-on-primary, #ffffff));
150
150
  font-family: var(--hx-badge-font-family, var(--hx-font-family-sans, sans-serif));
151
151
  font-weight: var(--hx-badge-font-weight, var(--hx-font-weight-semibold, 600));
152
152
  line-height: var(--hx-line-height-tight, 1.25);
@@ -178,11 +178,11 @@
178
178
  /* ─── Style Variants ─── */
179
179
 
180
180
  .badge--primary {
181
- --hx-badge-bg: var(--hx-badge-primary-bg, var(--hx-color-primary-500, #429797));
182
- --hx-badge-color: var(--hx-badge-primary-color, var(--hx-color-text-on-primary, #0d1825));
181
+ --hx-badge-bg: var(--hx-badge-primary-bg, var(--hx-color-action-primary-bg, #0f7078));
182
+ --hx-badge-color: var(--hx-badge-primary-color, var(--hx-color-text-on-primary, #ffffff));
183
183
  --hx-badge-pulse-color-internal: var(
184
184
  --hx-badge-pulse-color,
185
- var(--hx-badge-primary-bg, var(--hx-color-primary-500, #429797))
185
+ var(--hx-badge-primary-bg, var(--hx-color-action-primary-bg, #0f7078))
186
186
  );
187
187
  }
188
188
 
@@ -449,7 +449,10 @@
449
449
  .button--md {
450
450
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
451
451
  font-size: var(--hx-font-size-md, 1rem);
452
- min-height: var(--hx-size-10, 2.5rem);
452
+ /* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
453
+ Bound to --hx-touch-target-min so the default md variant clears the
454
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
455
+ min-height: var(--hx-touch-target-min, 2.75rem);
453
456
  }
454
457
 
455
458
  .button--lg {
@@ -667,9 +670,16 @@
667
670
  (primary-400, light teal). The base :host([inverted]) .button rule binds
668
671
  color to text.inverse, which flips by mode (neutral-0 in light, neutral-900
669
672
  in dark). On a permanent light-teal fill, white text drops to 2.4:1 in
670
- light mode (AA fail). Pin color to text.on-primary (neutral-900, no
671
- dark-mode flip) for both hover and active so the foreground is dark in
672
- both modes neutral-900 on primary-400 = 7.27:1 (AA pass).
673
+ light mode (AA fail). Pin color to neutral-900 directly (the primitive,
674
+ not text.primary which flips to neutral-100 in dark mode and would regress
675
+ the pair to ~2.10:1) so the foreground is dark in both modes —
676
+ neutral-900 on primary-400 = 7.27:1 AAA in Apex; AAA across all 6 brands.
677
+ Decoupled from text.on-primary in 3.3.x because text.on-primary now
678
+ resolves to neutral-0 (white) for the AAA-large coordinated pair on
679
+ primary-600; using it here would regress this pair to ~2.45:1 (Apex)
680
+ since primary-400 is light teal. neutral-900 is the correct anchor — it
681
+ is the primitive that both light/dark text.primary used to resolve to,
682
+ never flipped by mode/brand.
673
683
  Pressed === hover visually in inverted mode is acceptable UX (the
674
684
  transient absence of pointer over the button signals release).
675
685
  The fallback chain wraps --hx-button-active-bg (highest precedence) and
@@ -684,7 +694,7 @@
684
694
  );
685
695
  color: var(
686
696
  --hx-button-inverted-primary-interactive-color,
687
- var(--hx-color-text-on-primary, #0d1825)
697
+ var(--hx-color-neutral-900, #0d1825)
688
698
  );
689
699
  }
690
700
 
@@ -1394,16 +1404,15 @@
1394
1404
  /* ─── Style Variants ─── */
1395
1405
 
1396
1406
  .button--primary {
1397
- --hx-icon-button-bg: var(--hx-color-primary-500, #429797);
1407
+ --hx-icon-button-bg: var(--hx-color-action-primary-bg, #0f7078);
1398
1408
  --hx-icon-button-color: var(--hx-color-text-on-primary, #ffffff);
1399
1409
  --hx-icon-button-border-color: transparent;
1400
1410
  }
1401
1411
 
1402
- /* on-primary tokens are tuned for primary-500. primary-600 + on-primary
1403
- drops icon contrast to 3.07:1 — fails the 4.5:1 floor for meaningful
1404
- icons. Pin fg at neutral-0 (5.82:1 on primary-600). Mirrors hx-button. */
1412
+ /* Hover deepens to action.primary.bg-hover (primary-700) + neutral-0 = 7.03:1 AA.
1413
+ Mirrors hx-button. */
1405
1414
  .button--primary:hover {
1406
- --hx-icon-button-bg: var(--hx-color-primary-600, #0f7078);
1415
+ --hx-icon-button-bg: var(--hx-color-action-primary-bg-hover, #0f6363);
1407
1416
  --hx-icon-button-color: var(--hx-color-neutral-0, #ffffff);
1408
1417
  }
1409
1418
 
@@ -72,6 +72,16 @@
72
72
 
73
73
  /* ─── Focus Ring ─── */
74
74
 
75
+ /*
76
+ * Suppress the browser default ~1px host outline. Without this, the formal
77
+ * AAA audit harness (which measures computed outline-width on the focused
78
+ * host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
79
+ * The visual focus indicator is rendered on the inner .checkbox__box below.
80
+ */
81
+ :host {
82
+ outline: none;
83
+ }
84
+
75
85
  /*
76
86
  * Host-focus path: on the modern (IDL element-references) render branch the
77
87
  * host is the tabbable surface (tabindex=0) and the inner input is demoted
@@ -98,15 +108,21 @@
98
108
  /* ─── Checked State ─── */
99
109
 
100
110
  .checkbox--checked .checkbox__box {
101
- background-color: var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #429797));
102
- border-color: var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #429797));
111
+ background-color: var(--hx-checkbox-checked-bg, var(--hx-color-action-primary-bg, #0f7078));
112
+ border-color: var(
113
+ --hx-checkbox-checked-border-color,
114
+ var(--hx-color-action-primary-bg, #0f7078)
115
+ );
103
116
  }
104
117
 
105
118
  /* ─── Indeterminate State ─── */
106
119
 
107
120
  .checkbox--indeterminate .checkbox__box {
108
- background-color: var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #429797));
109
- border-color: var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #429797));
121
+ background-color: var(--hx-checkbox-checked-bg, var(--hx-color-action-primary-bg, #0f7078));
122
+ border-color: var(
123
+ --hx-checkbox-checked-border-color,
124
+ var(--hx-color-action-primary-bg, #0f7078)
125
+ );
110
126
  }
111
127
 
112
128
  /* ─── Error State ─── */
@@ -310,6 +326,17 @@
310
326
  cursor: not-allowed;
311
327
  }
312
328
 
329
+ /*
330
+ * AAA 2.4.13 Focus Appearance — host-level focus ring (group is focusable
331
+ * via roving tabindex in Tier-2). Token-driven: --hx-focus-ring-width
332
+ * resolves to ≥2px.
333
+ */
334
+ :host(:focus-visible) {
335
+ outline: var(--hx-focus-ring-width, 2px) solid
336
+ var(--hx-checkbox-group-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
337
+ outline-offset: var(--hx-focus-ring-offset, 2px);
338
+ }
339
+
313
340
  * {
314
341
  box-sizing: border-box;
315
342
  }
@@ -455,6 +482,10 @@
455
482
  background: var(--hx-color-neutral-0, #ffffff);
456
483
  cursor: pointer;
457
484
  transition: border-color var(--hx-transition-fast, 150ms ease);
485
+ /* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
486
+ Bound to --hx-touch-target-min so the trigger clears the AAA-strict
487
+ floor at default sizing. */
488
+ min-height: var(--hx-touch-target-min, 2.75rem);
458
489
  }
459
490
  .trigger:hover:not([disabled]) {
460
491
  border-color: var(
@@ -615,13 +646,20 @@
615
646
  }
616
647
  .format-btn {
617
648
  flex-shrink: 0;
649
+ /* WCAG 2.5.5 (Enhanced) AAA — interactive panel controls must clear
650
+ 44×44. Without min-width/min-height the format toggle collapses to
651
+ its label box (~44×24 in default rendering, sub-44 on the y-axis). */
652
+ min-width: var(--hx-touch-target-min, 2.75rem);
653
+ min-height: var(--hx-touch-target-min, 2.75rem);
618
654
  padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
619
655
  background: var(--hx-color-neutral-100, #ebeee9);
620
656
  border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #b6bfb9);
621
657
  border-radius: var(--hx-border-radius-sm, 0.25rem);
622
658
  cursor: pointer;
623
659
  font-size: var(--hx-font-size-xs, 0.75rem);
624
- color: var(--hx-color-neutral-600, #4a5362);
660
+ /* AAA 1.4.6: 12px label vs neutral-100 must be ≥7:1; neutral-700 = 9.34:1
661
+ (neutral-600 was 6.63:1, a tight AAA miss). */
662
+ color: var(--hx-color-neutral-700, #313e4b);
625
663
  text-transform: uppercase;
626
664
  font-weight: var(--hx-font-weight-semibold, 600);
627
665
  letter-spacing: 0.05em;
@@ -629,6 +667,8 @@
629
667
  .color-input {
630
668
  flex: 1;
631
669
  min-width: 0;
670
+ /* WCAG 2.5.5 (Enhanced) AAA — text input must clear 44×44. */
671
+ min-height: var(--hx-touch-target-min, 2.75rem);
632
672
  padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
633
673
  border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #b6bfb9);
634
674
  border-radius: var(--hx-border-radius-sm, 0.25rem);
@@ -1211,7 +1251,8 @@
1211
1251
  font-size: var(--hx-font-size-md, 1rem);
1212
1252
  color: var(--hx-date-picker-color, var(--hx-color-text-strong, #202b39));
1213
1253
  line-height: var(--hx-line-height-normal, 1.5);
1214
- min-height: var(--hx-size-10, 2.5rem);
1254
+ /* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44. */
1255
+ min-height: var(--hx-touch-target-min, 2.75rem);
1215
1256
  width: 100%;
1216
1257
  cursor: default;
1217
1258
  }
@@ -1232,6 +1273,10 @@
1232
1273
  display: flex;
1233
1274
  align-items: center;
1234
1275
  justify-content: center;
1276
+ /* WCAG 2.5.5 (Enhanced) AAA — calendar trigger must clear 44×44.
1277
+ Without min-width the icon button collapses to ~41 px wide. */
1278
+ min-width: var(--hx-touch-target-min, 2.75rem);
1279
+ min-height: var(--hx-touch-target-min, 2.75rem);
1235
1280
  padding: 0 var(--hx-space-3, 0.75rem);
1236
1281
  border: none;
1237
1282
  border-left: var(--hx-border-width-thin, 1px) solid
@@ -1405,13 +1450,16 @@
1405
1450
  }
1406
1451
 
1407
1452
  .calendar__day--selected {
1408
- background-color: var(--hx-date-picker-selected-bg, var(--hx-color-primary-500, #429797));
1453
+ background-color: var(--hx-date-picker-selected-bg, var(--hx-color-action-primary-bg, #0f7078));
1409
1454
  color: var(--hx-date-picker-selected-color, var(--hx-color-text-on-primary, #ffffff));
1410
1455
  font-weight: var(--hx-font-weight-semibold, 600);
1411
1456
  }
1412
1457
 
1413
1458
  .calendar__day--selected:hover {
1414
- background-color: var(--hx-date-picker-selected-hover-bg, var(--hx-color-primary-600, #0f7078));
1459
+ background-color: var(
1460
+ --hx-date-picker-selected-hover-bg,
1461
+ var(--hx-color-action-primary-bg-hover, #0f6363)
1462
+ );
1415
1463
  }
1416
1464
 
1417
1465
  .calendar__day--today:not(.calendar__day--selected) {
@@ -2146,13 +2194,13 @@
2146
2194
  .field__input-wrapper:focus-within {
2147
2195
  border-color: var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
2148
2196
  /* Fallback for Safari < 16.2 (no color-mix support) */
2149
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
2197
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2150
2198
  var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
2151
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
2199
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2152
2200
  color-mix(
2153
2201
  in srgb,
2154
2202
  var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color))
2155
- calc(var(--hx-focus-ring-opacity) * 100%),
2203
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2156
2204
  transparent
2157
2205
  );
2158
2206
  }
@@ -2166,13 +2214,13 @@
2166
2214
  .field--error .field__input-wrapper:focus-within {
2167
2215
  border-color: var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e));
2168
2216
  /* Fallback for Safari < 16.2 (no color-mix support) */
2169
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
2217
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2170
2218
  var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e));
2171
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
2219
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2172
2220
  color-mix(
2173
2221
  in srgb,
2174
2222
  var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e))
2175
- calc(var(--hx-focus-ring-opacity) * 100%),
2223
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2176
2224
  transparent
2177
2225
  );
2178
2226
  }
@@ -2199,10 +2247,10 @@
2199
2247
  color: var(--hx-number-input-color, var(--hx-color-text-strong));
2200
2248
  line-height: var(--hx-line-height-normal);
2201
2249
  width: 100%;
2202
- /* Size: md (default) */
2250
+ /* Size: md (default) — WCAG 2.5.5 (Enhanced) AAA touch target. */
2203
2251
  padding: var(--hx-space-2) var(--hx-space-3);
2204
2252
  font-size: var(--hx-font-size-md);
2205
- min-height: var(--hx-size-10);
2253
+ min-height: var(--hx-touch-target-min, 2.75rem);
2206
2254
  }
2207
2255
 
2208
2256
  .field__input::placeholder {
@@ -2420,6 +2468,16 @@
2420
2468
  pointer-events: none;
2421
2469
  }
2422
2470
 
2471
+ /*
2472
+ * AAA 2.4.13 Focus Appearance — host-level focus ring for the group host
2473
+ * when it carries focus via roving tabindex. Token-driven: ≥2px width.
2474
+ */
2475
+ :host(:focus-visible) {
2476
+ outline: var(--hx-focus-ring-width, 2px) solid
2477
+ var(--hx-radio-group-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
2478
+ outline-offset: var(--hx-focus-ring-offset, 2px);
2479
+ }
2480
+
2423
2481
  * {
2424
2482
  box-sizing: border-box;
2425
2483
  }
@@ -3343,6 +3401,13 @@
3343
3401
  /* ── hx-switch ── */
3344
3402
  :host {
3345
3403
  display: block;
3404
+ /*
3405
+ * Suppress the browser default ~1px host outline. Without this the formal
3406
+ * AAA audit harness (which measures computed outline-width on the focused
3407
+ * host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
3408
+ * The visual focus indicator is rendered on the inner .switch__track below.
3409
+ */
3410
+ outline: none;
3346
3411
  }
3347
3412
 
3348
3413
  :host([disabled]) {
@@ -3414,7 +3479,18 @@
3414
3479
  }
3415
3480
 
3416
3481
  .switch--checked .switch__track {
3417
- background-color: var(--hx-switch-track-checked-bg, var(--hx-color-primary-500, #429797));
3482
+ /* WCAG 1.4.6 AAA-strict 7:1: consume action.primary.bg (primary-700 since
3483
+ 3.4.0) so the checked track inherits the elevated AAA-strict action
3484
+ surface contract used by every other primary interactive surface
3485
+ (hx-button, hx-checkbox checked-bg, hx-radio checked-bg, etc.). The
3486
+ prior primary-500 fallback (#429797 in Apex) clears AA (5.20:1) but
3487
+ only resolves to ~6.11:1 in the formal harness's contrast probe —
3488
+ below the 7:1 AAA-strict floor. action.primary.bg = primary-700
3489
+ (#0F6363 in Apex) clears 7.03:1 across all 6 brands. */
3490
+ background-color: var(
3491
+ --hx-switch-track-checked-bg,
3492
+ var(--hx-color-action-primary-bg, var(--hx-color-primary-700, #0f7078))
3493
+ );
3418
3494
  }
3419
3495
 
3420
3496
  .switch:not(.switch--checked) .switch__track:hover {
@@ -3816,7 +3892,10 @@
3816
3892
  font-size: var(--_text-input-font-size);
3817
3893
  color: var(--_text-input-color);
3818
3894
  line-height: var(--hx-line-height-normal, 1.5);
3819
- min-height: var(--hx-size-10, 2.5rem);
3895
+ /* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44.
3896
+ --hx-touch-target-min resolves to 2.75rem (44px); --hx-size-10 alone
3897
+ resolves to 2.5rem (40px) and fails AAA on the inner input. */
3898
+ min-height: var(--hx-touch-target-min, 2.75rem);
3820
3899
  width: 100%;
3821
3900
  }
3822
3901
 
@@ -4290,7 +4369,8 @@
4290
4369
  font-size: var(--hx-font-size-md, 1rem);
4291
4370
  color: var(--hx-time-picker-color, var(--hx-color-text-strong, #202b39));
4292
4371
  line-height: var(--hx-line-height-normal, 1.5);
4293
- min-height: var(--hx-size-10, 2.5rem);
4372
+ /* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44. */
4373
+ min-height: var(--hx-touch-target-min, 2.75rem);
4294
4374
  width: 100%;
4295
4375
  cursor: text;
4296
4376
  }
@@ -4310,7 +4390,11 @@
4310
4390
  color: var(--hx-time-picker-chevron-color, var(--hx-color-text-muted, #4a5362));
4311
4391
  cursor: pointer;
4312
4392
  height: 100%;
4313
- min-height: var(--hx-size-10, 2.5rem);
4393
+ /* WCAG 2.5.5 (Enhanced) AAA — toggle button must meet 44×44 in
4394
+ BOTH dimensions; without min-width the icon button collapses to
4395
+ ~41 px wide and fails the matrix audit. */
4396
+ min-width: var(--hx-touch-target-min, 2.75rem);
4397
+ min-height: var(--hx-touch-target-min, 2.75rem);
4314
4398
  flex-shrink: 0;
4315
4399
  border-inline-start: var(--hx-border-width-thin, 1px) solid
4316
4400
  var(--hx-time-picker-border-color, var(--hx-color-border-strong, #66787b));
@@ -4458,6 +4542,13 @@
4458
4542
  /* ── hx-toggle-button ── */
4459
4543
  :host {
4460
4544
  display: inline-block;
4545
+ /*
4546
+ * Suppress the browser default ~1px host outline. Without this the formal
4547
+ * AAA audit harness (which measures computed outline-width on the focused
4548
+ * host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
4549
+ * The visual focus indicator is rendered on the inner .button below.
4550
+ */
4551
+ outline: none;
4461
4552
  }
4462
4553
 
4463
4554
  :host([disabled]) {
@@ -4474,7 +4565,7 @@
4474
4565
  gap: var(--hx-space-2, 0.5rem);
4475
4566
  border: var(--hx-border-width-thin, 1px) solid var(--hx-toggle-button-border-color, transparent);
4476
4567
  border-radius: var(--hx-toggle-button-border-radius, var(--hx-border-radius-md, 0.375rem));
4477
- background-color: var(--hx-toggle-button-bg, var(--hx-color-primary-500, #429797));
4568
+ background-color: var(--hx-toggle-button-bg, var(--hx-color-action-primary-bg, #0f7078));
4478
4569
  color: var(--hx-toggle-button-color, var(--hx-color-text-on-primary, #ffffff));
4479
4570
  font-family: var(--hx-toggle-button-font-family, var(--hx-font-family-sans, sans-serif));
4480
4571
  font-weight: var(--hx-toggle-button-font-weight, var(--hx-font-weight-semibold, 600));
@@ -4535,7 +4626,10 @@
4535
4626
  .button--md {
4536
4627
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
4537
4628
  font-size: var(--hx-font-size-md, 1rem);
4538
- min-height: var(--hx-size-10, 2.5rem);
4629
+ /* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
4630
+ Bound to --hx-touch-target-min so the default md variant clears the
4631
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
4632
+ min-height: var(--hx-touch-target-min, 2.75rem);
4539
4633
  }
4540
4634
 
4541
4635
  .button--lg {
@@ -4547,7 +4641,7 @@
4547
4641
  /* ─── Style Variants ─── */
4548
4642
 
4549
4643
  .button--primary {
4550
- --hx-toggle-button-bg: var(--hx-color-primary-500, #429797);
4644
+ --hx-toggle-button-bg: var(--hx-color-action-primary-bg, #0f7078);
4551
4645
  --hx-toggle-button-color: var(--hx-color-text-on-primary, #ffffff);
4552
4646
  --hx-toggle-button-border-color: transparent;
4553
4647
  }
@@ -4625,12 +4719,15 @@
4625
4719
  * so the state change is immediately legible.
4626
4720
  */
4627
4721
  .button--secondary.button--pressed {
4628
- --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-500, #429797));
4722
+ --hx-toggle-button-bg: var(
4723
+ --hx-toggle-button-pressed-bg,
4724
+ var(--hx-color-action-primary-bg, #0f7078)
4725
+ );
4629
4726
  --hx-toggle-button-color: var(
4630
4727
  --hx-toggle-button-pressed-color,
4631
4728
  var(--hx-color-text-on-primary, #ffffff)
4632
4729
  );
4633
- --hx-toggle-button-border-color: var(--hx-color-primary-500, #429797);
4730
+ --hx-toggle-button-border-color: var(--hx-color-action-primary-bg, #0f7078);
4634
4731
  }
4635
4732
 
4636
4733
  /* Tertiary pressed: use primary-100 bg + primary-700 text + border for WCAG 3:1 non-text contrast. */
@@ -4641,7 +4738,8 @@
4641
4738
  var(--hx-color-primary-700, #0f6363)
4642
4739
  );
4643
4740
  --hx-toggle-button-border-color: var(--hx-color-primary-600, #0f7078);
4644
- box-shadow: inset 0 0 0 1px var(--hx-color-primary-600, #0f7078);
4741
+ box-shadow: inset 0 0 0 var(--hx-toggle-button-pressed-ring-width, 1px)
4742
+ var(--hx-color-primary-600, #0f7078);
4645
4743
  }
4646
4744
 
4647
4745
  /* Ghost pressed: subtle neutral fill, matching hover behavior as a baseline. */
@@ -4665,7 +4763,8 @@
4665
4763
  var(--hx-color-text-primary, #0d1825)
4666
4764
  );
4667
4765
  --hx-toggle-button-border-color: var(--hx-color-text-muted, #4a5362);
4668
- box-shadow: inset 0 0 0 1px var(--hx-color-neutral-500, #66787b);
4766
+ box-shadow: inset 0 0 0 var(--hx-toggle-button-pressed-ring-width, 1px)
4767
+ var(--hx-color-neutral-500, #66787b);
4669
4768
  }
4670
4769
 
4671
4770
  /* ─── Disabled ─── */
@@ -4700,15 +4799,17 @@
4700
4799
  @media (forced-colors: active) {
4701
4800
  .button {
4702
4801
  forced-color-adjust: none;
4703
- background-color: ButtonFace;
4704
- color: ButtonText;
4705
- border: 2px solid ButtonText;
4802
+ background-color: var(--hx-toggle-button-fc-bg, ButtonFace);
4803
+ color: var(--hx-toggle-button-fc-color, ButtonText);
4804
+ border: var(--hx-toggle-button-fc-border-width, 2px) solid
4805
+ var(--hx-toggle-button-fc-border-color, ButtonText);
4706
4806
  }
4707
4807
 
4708
4808
  :host(:focus-visible) .button,
4709
4809
  .button:focus-visible {
4710
- outline: 3px solid Highlight;
4711
- outline-offset: 2px;
4810
+ outline: var(--hx-toggle-button-fc-focus-ring-width, 3px) solid
4811
+ var(--hx-toggle-button-fc-focus-ring-color, Highlight);
4812
+ outline-offset: var(--hx-toggle-button-fc-focus-ring-offset, 2px);
4712
4813
  }
4713
4814
 
4714
4815
  .button--pressed {
@@ -166,6 +166,16 @@
166
166
  align-items: center;
167
167
  gap: var(--hx-space-1, 0.25rem);
168
168
  padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));
169
+ /*
170
+ * WCAG 2.5.5 (Enhanced) AAA — nav links rendered with default padding
171
+ * land at ~37 px tall (8 px + 1.5 line-height + 8 px). The link
172
+ * content is first-party (rendered via consumer-supplied props on
173
+ * <hx-nav-item>), so the slotted-content carve-out does not apply —
174
+ * this is a real component obligation. Bind --hx-nav-link-min-height
175
+ * to --hx-touch-target-min (2.75rem / 44 px) to grow the interactive
176
+ * area without enlarging the visible label.
177
+ */
178
+ min-height: var(--hx-nav-link-min-height, var(--hx-touch-target-min, 2.75rem));
169
179
  color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #ebeee9));
170
180
  text-decoration: none;
171
181
  border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));
@@ -194,8 +204,20 @@
194
204
  }
195
205
 
196
206
  .nav__link--active {
197
- background-color: var(--hx-nav-link-active-bg, var(--hx-color-primary-600, #0f7078));
198
- color: var(--hx-nav-link-active-color, var(--hx-color-neutral-0, #ffffff));
207
+ background-color: var(--hx-nav-link-active-bg, var(--hx-color-action-primary-bg, #0f6363));
208
+ /* Use --hx-color-text-on-primary so the active-link text inherits the
209
+ * action-surface AAA-strict pairing (white on primary-700 in default
210
+ * themes; black on lighter primary-700 in the high-contrast theme).
211
+ * Pre-3.4.0 this consumed --hx-color-primary-600 directly which
212
+ * resolved to Apex #0F7078 + white = 5.82:1 — AAA-large only, AAA
213
+ * normal fail under WCAG 1.4.6 for body-text-sized link labels. The
214
+ * Phase 4 Tier 3 chain shift moved action.primary.bg to primary-700
215
+ * (Apex 7.03:1 with white) and consuming the action semantic here
216
+ * picks up the AAA-strict pairing across the full 6-brand matrix.
217
+ * Hardcoding white previously failed AAA-large in high-contrast
218
+ * (ratio 2.54 vs. 4.5 floor); the on-primary token resolves correctly
219
+ * in HC mode. */
220
+ color: var(--hx-nav-link-active-color, var(--hx-color-text-on-primary, #ffffff));
199
221
  }
200
222
 
201
223
  /* ─── Chevron Icon ─── */
@@ -575,7 +597,10 @@
575
597
 
576
598
  .button:hover:not(:disabled) {
577
599
  background: var(--hx-pagination-hover-bg, var(--hx-color-surface-sunken, #ebeee9));
578
- border-color: var(--hx-pagination-hover-border-color, var(--hx-color-primary-500, #429797));
600
+ border-color: var(
601
+ --hx-pagination-hover-border-color,
602
+ var(--hx-color-action-primary-bg, #0f7078)
603
+ );
579
604
  }
580
605
 
581
606
  .button:focus-visible {
@@ -585,10 +610,10 @@
585
610
  }
586
611
 
587
612
  .button[aria-current='page'] {
588
- background: var(--hx-pagination-active-bg, var(--hx-color-primary-500, #429797));
613
+ background: var(--hx-pagination-active-bg, var(--hx-color-action-primary-bg, #0f7078));
589
614
  border-color: var(
590
615
  --hx-pagination-active-border-color,
591
- var(--hx-pagination-active-bg, var(--hx-color-primary-500, #429797))
616
+ var(--hx-pagination-active-bg, var(--hx-color-action-primary-bg, #0f7078))
592
617
  );
593
618
  color: var(--hx-pagination-active-color, var(--hx-color-text-on-primary, #ffffff));
594
619
  font-weight: var(--hx-font-weight-semibold, 600);
@@ -809,8 +834,15 @@
809
834
  display: flex;
810
835
  align-items: center;
811
836
  justify-content: center;
837
+ /* Visual icon area stays 2rem (32px) — preserves the side-nav header
838
+ silhouette while the wrapping touch target grows to 44×44 to meet
839
+ WCAG 2.5.5 (Enhanced) AAA. min-width/min-height own the hit area;
840
+ width/height drive the visual painted area, but the button's
841
+ intrinsic size always matches the hit-area floor. */
812
842
  width: var(--hx-space-8, 2rem);
813
843
  height: var(--hx-space-8, 2rem);
844
+ min-width: var(--hx-touch-target-min, 2.75rem);
845
+ min-height: var(--hx-touch-target-min, 2.75rem);
814
846
  margin-inline-start: auto;
815
847
  flex-shrink: 0;
816
848
  padding: 0;
@@ -1146,6 +1178,18 @@
1146
1178
  outline-offset: var(--hx-focus-ring-offset, 2px);
1147
1179
  }
1148
1180
 
1181
+ /*
1182
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px ring on slotted nav
1183
+ * controls (links, buttons, hx-link, hx-button). Slotted bare anchors
1184
+ * otherwise fall back to the 1px browser default.
1185
+ */
1186
+ ::slotted(a:focus-visible),
1187
+ ::slotted(button:focus-visible) {
1188
+ outline: var(--hx-focus-ring-width, 2px) solid
1189
+ var(--hx-top-nav-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
1190
+ outline-offset: var(--hx-focus-ring-offset, 2px);
1191
+ }
1192
+
1149
1193
  .mobile-toggle__icon {
1150
1194
  width: var(--hx-space-6, 1.5rem);
1151
1195
  height: var(--hx-space-6, 1.5rem);
@@ -530,6 +530,19 @@
530
530
  display: inline-block;
531
531
  }
532
532
 
533
+ /*
534
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
535
+ * trigger (typically <hx-button>, <button>, or <hx-icon-button>). The host
536
+ * is a popover-container; the interactive surface is the slotted trigger.
537
+ */
538
+ ::slotted([slot='trigger']:focus-visible),
539
+ ::slotted(button:focus-visible),
540
+ ::slotted(a:focus-visible) {
541
+ outline: var(--hx-focus-ring-width, 2px) solid
542
+ var(--hx-dropdown-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
543
+ outline-offset: var(--hx-focus-ring-offset, 2px);
544
+ }
545
+
533
546
  [part='panel'] {
534
547
  position: fixed;
535
548
  z-index: var(--hx-dropdown-panel-z-index, 1000);
@@ -581,6 +594,19 @@
581
594
  display: inline-block;
582
595
  }
583
596
 
597
+ /*
598
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
599
+ * trigger so consumers who slot bare HTML controls inherit the same ring
600
+ * width as <hx-button>. Token-driven: --hx-focus-ring-width (default 2px).
601
+ */
602
+ ::slotted([slot='trigger']:focus-visible),
603
+ ::slotted(button:focus-visible),
604
+ ::slotted(a:focus-visible) {
605
+ outline: var(--hx-focus-ring-width, 2px) solid
606
+ var(--hx-popover-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
607
+ outline-offset: var(--hx-focus-ring-offset, 2px);
608
+ }
609
+
584
610
  [part='body'] {
585
611
  position: fixed;
586
612
  z-index: var(--hx-popover-z-index, 9999);
@@ -649,6 +675,20 @@
649
675
  display: inline-block;
650
676
  }
651
677
 
678
+ /*
679
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on slotted
680
+ * trigger / anchor controls. hx-popup is a positioning primitive: it
681
+ * paints no surface itself, but slotted natives (<button>, <a>) must
682
+ * still meet the AAA ring threshold. Token-driven.
683
+ */
684
+ ::slotted([slot='anchor']:focus-visible),
685
+ ::slotted(button:focus-visible),
686
+ ::slotted(a:focus-visible) {
687
+ outline: var(--hx-focus-ring-width, 2px) solid
688
+ var(--hx-popup-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
689
+ outline-offset: var(--hx-focus-ring-offset, 2px);
690
+ }
691
+
652
692
  [part='popup'] {
653
693
  position: fixed;
654
694
  z-index: var(--hx-popup-z-index, 9000);
@@ -696,6 +736,19 @@
696
736
  display: inline-block;
697
737
  }
698
738
 
739
+ /*
740
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
741
+ * trigger. APG forbids the tooltip body from holding focus, so the
742
+ * trigger is the only AAA-relevant focus surface. Token-driven.
743
+ */
744
+ ::slotted([slot='trigger']:focus-visible),
745
+ ::slotted(button:focus-visible),
746
+ ::slotted(a:focus-visible) {
747
+ outline: var(--hx-focus-ring-width, 2px) solid
748
+ var(--hx-tooltip-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
749
+ outline-offset: var(--hx-focus-ring-offset, 2px);
750
+ }
751
+
699
752
  [part='tooltip'] {
700
753
  position: fixed;
701
754
  z-index: var(--hx-tooltip-z-index, var(--hx-z-index-tooltip, 1600));