@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
@@ -95,7 +95,7 @@
95
95
  --hx-color-text-placeholder: var(--hx-color-neutral-500);
96
96
  --hx-color-text-disabled: var(--hx-color-neutral-400);
97
97
  --hx-color-text-inverse: var(--hx-color-neutral-0);
98
- --hx-color-text-on-primary: var(--hx-color-neutral-900);
98
+ --hx-color-text-on-primary: var(--hx-color-neutral-0);
99
99
  --hx-color-text-on-secondary: var(--hx-color-neutral-900);
100
100
  --hx-color-text-on-error: var(--hx-color-neutral-900);
101
101
  --hx-color-text-on-success: var(--hx-color-neutral-900);
@@ -104,11 +104,11 @@
104
104
  --hx-color-text-on-primary-strong: var(--hx-color-neutral-0);
105
105
  --hx-color-text-on-success-strong: var(--hx-color-neutral-0);
106
106
  --hx-color-text-on-error-strong: var(--hx-color-neutral-0);
107
- --hx-color-text-link: var(--hx-color-primary-600);
108
- --hx-color-text-link-hover: var(--hx-color-primary-700);
109
- --hx-color-text-link-visited: var(--hx-color-secondary-600);
110
- --hx-color-text-link-active: var(--hx-color-primary-800);
111
- --hx-color-error-text: var(--hx-color-error-600);
107
+ --hx-color-text-link: var(--hx-color-primary-700);
108
+ --hx-color-text-link-hover: var(--hx-color-primary-800);
109
+ --hx-color-text-link-visited: var(--hx-color-secondary-700);
110
+ --hx-color-text-link-active: var(--hx-color-primary-900);
111
+ --hx-color-error-text: var(--hx-color-error-700);
112
112
  --hx-color-success-text: var(--hx-color-success-700);
113
113
  --hx-color-surface-default: var(--hx-color-neutral-0);
114
114
  --hx-color-surface-raised: var(--hx-color-neutral-50);
@@ -129,15 +129,15 @@
129
129
  --hx-color-focus-ring: var(--hx-color-primary-600);
130
130
  --hx-color-selection-bg: var(--hx-color-primary-200);
131
131
  --hx-color-selection-color: var(--hx-color-neutral-900);
132
- --hx-color-action-primary-bg: var(--hx-color-primary-500);
132
+ --hx-color-action-primary-bg: var(--hx-color-primary-700);
133
133
  --hx-color-action-primary-bg-inverted-rest: var(--hx-color-primary-500);
134
- --hx-color-action-primary-bg-hover: var(--hx-color-primary-600);
135
- --hx-color-action-primary-bg-active: var(--hx-color-primary-700);
134
+ --hx-color-action-primary-bg-hover: var(--hx-color-primary-800);
135
+ --hx-color-action-primary-bg-active: var(--hx-color-primary-900);
136
136
  --hx-color-action-primary-bg-inverted-hover: var(--hx-color-primary-400);
137
- --hx-color-action-secondary-fg: var(--hx-color-primary-600);
138
- --hx-color-action-secondary-border: var(--hx-color-primary-600);
137
+ --hx-color-action-secondary-fg: var(--hx-color-primary-700);
138
+ --hx-color-action-secondary-border: var(--hx-color-primary-700);
139
139
  --hx-color-action-secondary-bg-hover: var(--hx-color-primary-50);
140
- --hx-color-action-ghost-fg: var(--hx-color-primary-600);
140
+ --hx-color-action-ghost-fg: var(--hx-color-primary-700);
141
141
  --hx-color-action-ghost-bg-hover: var(--hx-color-primary-50);
142
142
  --hx-color-action-danger-bg: var(--hx-color-error-500);
143
143
  --hx-color-action-danger-bg-hover: var(--hx-color-error-600);
@@ -268,7 +268,7 @@
268
268
  --hx-container-content: 72rem;
269
269
  --hx-container-narrow: 48rem;
270
270
  --hx-input-height-sm: var(--hx-size-8);
271
- --hx-input-height-md: var(--hx-size-10);
271
+ --hx-input-height-md: var(--hx-size-11);
272
272
  --hx-input-height-lg: var(--hx-size-12);
273
273
  --hx-divider-color: var(--hx-color-border-default);
274
274
  --hx-divider-width: var(--hx-border-width-thin);
@@ -496,6 +496,8 @@
496
496
  --hx-color-focus-ring: #FFFF00;
497
497
  --hx-color-selection-bg: #1AEBFF;
498
498
  --hx-color-selection-color: #000000;
499
+ --hx-color-action-primary-bg-hover: var(--hx-color-primary-600);
500
+ --hx-color-action-primary-bg-active: var(--hx-color-primary-700);
499
501
  --hx-color-action-danger-bg-active: var(--hx-color-error-500);
500
502
  --hx-body-bg: #000000;
501
503
  --hx-body-color: #FFFFFF;
@@ -118,6 +118,18 @@
118
118
  flex-shrink: 0;
119
119
  }
120
120
 
121
+ /*
122
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on slotted
123
+ * natives (e.g. bare <button>, <a>) so consumers who slot non-HELiX
124
+ * controls inherit the same indicator as the HELiX components do.
125
+ * Token-driven: --hx-focus-ring-width resolves to 2px (default).
126
+ */
127
+ ::slotted(:focus-visible) {
128
+ outline: var(--hx-focus-ring-width, 2px) solid
129
+ var(--hx-action-bar-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
130
+ outline-offset: var(--hx-focus-ring-offset, 2px);
131
+ }
132
+
121
133
  /* ─── High Contrast Mode (forced-colors) ─── */
122
134
 
123
135
  @media (forced-colors: active) {
@@ -188,10 +200,13 @@
188
200
  font-size: var(--hx-font-size-sm);
189
201
  }
190
202
 
203
+ /* md — WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
204
+ Bound to --hx-touch-target-min so the default md variant clears the
205
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
191
206
  .button--md {
192
207
  padding: var(--hx-space-2);
193
- min-width: var(--hx-size-10);
194
- height: var(--hx-size-10);
208
+ min-width: var(--hx-touch-target-min, 2.75rem);
209
+ min-height: var(--hx-touch-target-min, 2.75rem);
195
210
  font-size: var(--hx-font-size-md);
196
211
  }
197
212
 
@@ -502,16 +517,22 @@
502
517
  min-height: var(--hx-size-8, 2rem);
503
518
  }
504
519
 
505
- /* md */
520
+ /* md — WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
521
+ Bound to --hx-touch-target-min so the default md variant clears the
522
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
506
523
  .split-button--md .split-button__primary {
507
524
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
508
525
  font-size: var(--hx-font-size-md, 1rem);
509
- min-height: var(--hx-size-10, 2.5rem);
526
+ min-height: var(--hx-touch-target-min, 2.75rem);
510
527
  }
511
528
 
512
529
  .split-button--md .split-button__trigger {
513
530
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
514
- min-height: var(--hx-size-10, 2.5rem);
531
+ /* WCAG 2.5.5 (Enhanced) AAA — chevron trigger must clear 44×44 in
532
+ BOTH dimensions. Without min-width, the trigger collapses to its
533
+ icon width (~38 px) and fails the brand-theme matrix audit. */
534
+ min-width: var(--hx-touch-target-min, 2.75rem);
535
+ min-height: var(--hx-touch-target-min, 2.75rem);
515
536
  }
516
537
 
517
538
  /* lg */
@@ -528,21 +549,27 @@
528
549
 
529
550
  /* ─── Variant: primary ─── */
530
551
 
552
+ /* Primary resting — bind through action.primary.bg (resolves to primary-600
553
+ across all 6 brands) coordinated with text.on-primary. Inline fallback
554
+ #0d1825 matches text.on-primary's resolved primitive (neutral-900) so a
555
+ cold-start without semantic tokens paints AA-tuned dark-on-teal (5.20:1)
556
+ rather than white-on-teal (3.43:1 fail). Mirrors hx-button precedent
557
+ (hx-button.styles.ts ~line 88) and Phase C structural fix. */
531
558
  .split-button--primary .split-button__primary,
532
559
  .split-button--primary .split-button__trigger {
533
- --hx-split-button-bg: var(--hx-color-primary-500, #429797);
534
- --hx-split-button-color: var(--hx-color-text-on-primary, #ffffff);
560
+ --hx-split-button-bg: var(--hx-color-action-primary-bg, #429797);
561
+ --hx-split-button-color: var(--hx-color-text-on-primary, #0d1825);
535
562
  --hx-split-button-border-color: transparent;
536
563
  --hx-split-button-divider-color: var(--hx-color-primary-900, #0b3232);
537
564
  }
538
565
 
539
- /* primary:hover — replace the universal brightness(0.9) filter (which would
540
- drop primary-500 + on-primary contrast to ~4.4:1) with an explicit swap
541
- to primary-600 and a neutral-0 foreground. Mirrors hx-button precedent. */
566
+ /* primary:hover — lift to action.primary.bg-hover (primary-700) with
567
+ text.on-primary-strong (neutral-0). Replaces the universal brightness(0.9)
568
+ filter which would degrade contrast on the resting pair. */
542
569
  .split-button--primary .split-button__primary:hover,
543
570
  .split-button--primary .split-button__trigger:hover {
544
- --hx-split-button-bg: var(--hx-color-primary-600, #0f7078);
545
- --hx-split-button-color: var(--hx-color-neutral-0, #ffffff);
571
+ --hx-split-button-bg: var(--hx-color-action-primary-bg-hover, #0f7078);
572
+ --hx-split-button-color: var(--hx-color-text-on-primary-strong, #ffffff);
546
573
  filter: none;
547
574
  }
548
575
 
@@ -116,6 +116,18 @@
116
116
  flex-shrink: 0;
117
117
  }
118
118
 
119
+ /*
120
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on slotted
121
+ * natives (e.g. bare <button>, <a>) so consumers who slot non-HELiX
122
+ * controls inherit the same indicator as the HELiX components do.
123
+ * Token-driven: --hx-focus-ring-width resolves to 2px (default).
124
+ */
125
+ ::slotted(:focus-visible) {
126
+ outline: var(--hx-focus-ring-width, 2px) solid
127
+ var(--hx-action-bar-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
128
+ outline-offset: var(--hx-focus-ring-offset, 2px);
129
+ }
130
+
119
131
  /* ─── High Contrast Mode (forced-colors) ─── */
120
132
 
121
133
  @media (forced-colors: active) {
@@ -9,8 +9,8 @@
9
9
  justify-content: center;
10
10
  gap: var(--hx-space-1, 0.25rem);
11
11
  border-radius: var(--hx-badge-border-radius, var(--hx-border-radius-md, 0.375rem));
12
- background-color: var(--hx-badge-bg, var(--hx-color-primary-500, #429797));
13
- color: var(--hx-badge-color, var(--hx-color-text-on-primary, #0d1825));
12
+ background-color: var(--hx-badge-bg, var(--hx-color-action-primary-bg, #0f7078));
13
+ color: var(--hx-badge-color, var(--hx-color-text-on-primary, #ffffff));
14
14
  font-family: var(--hx-badge-font-family, var(--hx-font-family-sans, sans-serif));
15
15
  font-weight: var(--hx-badge-font-weight, var(--hx-font-weight-semibold, 600));
16
16
  line-height: var(--hx-line-height-tight, 1.25);
@@ -42,11 +42,11 @@
42
42
  /* ─── Style Variants ─── */
43
43
 
44
44
  .badge--primary {
45
- --hx-badge-bg: var(--hx-badge-primary-bg, var(--hx-color-primary-500, #429797));
46
- --hx-badge-color: var(--hx-badge-primary-color, var(--hx-color-text-on-primary, #0d1825));
45
+ --hx-badge-bg: var(--hx-badge-primary-bg, var(--hx-color-action-primary-bg, #0f7078));
46
+ --hx-badge-color: var(--hx-badge-primary-color, var(--hx-color-text-on-primary, #ffffff));
47
47
  --hx-badge-pulse-color-internal: var(
48
48
  --hx-badge-pulse-color,
49
- var(--hx-badge-primary-bg, var(--hx-color-primary-500, #429797))
49
+ var(--hx-badge-primary-bg, var(--hx-color-action-primary-bg, #0f7078))
50
50
  );
51
51
  }
52
52
 
@@ -72,7 +72,10 @@
72
72
  .button--md {
73
73
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
74
74
  font-size: var(--hx-font-size-md, 1rem);
75
- min-height: var(--hx-size-10, 2.5rem);
75
+ /* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
76
+ Bound to --hx-touch-target-min so the default md variant clears the
77
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
78
+ min-height: var(--hx-touch-target-min, 2.75rem);
76
79
  }
77
80
 
78
81
  .button--lg {
@@ -290,9 +293,16 @@
290
293
  (primary-400, light teal). The base :host([inverted]) .button rule binds
291
294
  color to text.inverse, which flips by mode (neutral-0 in light, neutral-900
292
295
  in dark). On a permanent light-teal fill, white text drops to 2.4:1 in
293
- light mode (AA fail). Pin color to text.on-primary (neutral-900, no
294
- dark-mode flip) for both hover and active so the foreground is dark in
295
- both modes neutral-900 on primary-400 = 7.27:1 (AA pass).
296
+ light mode (AA fail). Pin color to neutral-900 directly (the primitive,
297
+ not text.primary which flips to neutral-100 in dark mode and would regress
298
+ the pair to ~2.10:1) so the foreground is dark in both modes —
299
+ neutral-900 on primary-400 = 7.27:1 AAA in Apex; AAA across all 6 brands.
300
+ Decoupled from text.on-primary in 3.3.x because text.on-primary now
301
+ resolves to neutral-0 (white) for the AAA-large coordinated pair on
302
+ primary-600; using it here would regress this pair to ~2.45:1 (Apex)
303
+ since primary-400 is light teal. neutral-900 is the correct anchor — it
304
+ is the primitive that both light/dark text.primary used to resolve to,
305
+ never flipped by mode/brand.
296
306
  Pressed === hover visually in inverted mode is acceptable UX (the
297
307
  transient absence of pointer over the button signals release).
298
308
  The fallback chain wraps --hx-button-active-bg (highest precedence) and
@@ -307,7 +317,7 @@
307
317
  );
308
318
  color: var(
309
319
  --hx-button-inverted-primary-interactive-color,
310
- var(--hx-color-text-on-primary, #0d1825)
320
+ var(--hx-color-neutral-900, #0d1825)
311
321
  );
312
322
  }
313
323
 
@@ -8,6 +8,17 @@
8
8
  cursor: not-allowed;
9
9
  }
10
10
 
11
+ /*
12
+ * AAA 2.4.13 Focus Appearance — host-level focus ring (group is focusable
13
+ * via roving tabindex in Tier-2). Token-driven: --hx-focus-ring-width
14
+ * resolves to ≥2px.
15
+ */
16
+ :host(:focus-visible) {
17
+ outline: var(--hx-focus-ring-width, 2px) solid
18
+ var(--hx-checkbox-group-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
19
+ outline-offset: var(--hx-focus-ring-offset, 2px);
20
+ }
21
+
11
22
  * {
12
23
  box-sizing: border-box;
13
24
  }
@@ -70,6 +70,16 @@
70
70
 
71
71
  /* ─── Focus Ring ─── */
72
72
 
73
+ /*
74
+ * Suppress the browser default ~1px host outline. Without this, the formal
75
+ * AAA audit harness (which measures computed outline-width on the focused
76
+ * host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
77
+ * The visual focus indicator is rendered on the inner .checkbox__box below.
78
+ */
79
+ :host {
80
+ outline: none;
81
+ }
82
+
73
83
  /*
74
84
  * Host-focus path: on the modern (IDL element-references) render branch the
75
85
  * host is the tabbable surface (tabindex=0) and the inner input is demoted
@@ -96,15 +106,21 @@
96
106
  /* ─── Checked State ─── */
97
107
 
98
108
  .checkbox--checked .checkbox__box {
99
- background-color: var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #429797));
100
- border-color: var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #429797));
109
+ background-color: var(--hx-checkbox-checked-bg, var(--hx-color-action-primary-bg, #0f7078));
110
+ border-color: var(
111
+ --hx-checkbox-checked-border-color,
112
+ var(--hx-color-action-primary-bg, #0f7078)
113
+ );
101
114
  }
102
115
 
103
116
  /* ─── Indeterminate State ─── */
104
117
 
105
118
  .checkbox--indeterminate .checkbox__box {
106
- background-color: var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #429797));
107
- border-color: var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #429797));
119
+ background-color: var(--hx-checkbox-checked-bg, var(--hx-color-action-primary-bg, #0f7078));
120
+ border-color: var(
121
+ --hx-checkbox-checked-border-color,
122
+ var(--hx-color-action-primary-bg, #0f7078)
123
+ );
108
124
  }
109
125
 
110
126
  /* ─── Error State ─── */
@@ -44,6 +44,10 @@
44
44
  background: var(--hx-color-neutral-0, #ffffff);
45
45
  cursor: pointer;
46
46
  transition: border-color var(--hx-transition-fast, 150ms ease);
47
+ /* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
48
+ Bound to --hx-touch-target-min so the trigger clears the AAA-strict
49
+ floor at default sizing. */
50
+ min-height: var(--hx-touch-target-min, 2.75rem);
47
51
  }
48
52
  .trigger:hover:not([disabled]) {
49
53
  border-color: var(
@@ -204,13 +208,20 @@
204
208
  }
205
209
  .format-btn {
206
210
  flex-shrink: 0;
211
+ /* WCAG 2.5.5 (Enhanced) AAA — interactive panel controls must clear
212
+ 44×44. Without min-width/min-height the format toggle collapses to
213
+ its label box (~44×24 in default rendering, sub-44 on the y-axis). */
214
+ min-width: var(--hx-touch-target-min, 2.75rem);
215
+ min-height: var(--hx-touch-target-min, 2.75rem);
207
216
  padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
208
217
  background: var(--hx-color-neutral-100, #ebeee9);
209
218
  border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #b6bfb9);
210
219
  border-radius: var(--hx-border-radius-sm, 0.25rem);
211
220
  cursor: pointer;
212
221
  font-size: var(--hx-font-size-xs, 0.75rem);
213
- color: var(--hx-color-neutral-600, #4a5362);
222
+ /* AAA 1.4.6: 12px label vs neutral-100 must be ≥7:1; neutral-700 = 9.34:1
223
+ (neutral-600 was 6.63:1, a tight AAA miss). */
224
+ color: var(--hx-color-neutral-700, #313e4b);
214
225
  text-transform: uppercase;
215
226
  font-weight: var(--hx-font-weight-semibold, 600);
216
227
  letter-spacing: 0.05em;
@@ -218,6 +229,8 @@
218
229
  .color-input {
219
230
  flex: 1;
220
231
  min-width: 0;
232
+ /* WCAG 2.5.5 (Enhanced) AAA — text input must clear 44×44. */
233
+ min-height: var(--hx-touch-target-min, 2.75rem);
221
234
  padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
222
235
  border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #b6bfb9);
223
236
  border-radius: var(--hx-border-radius-sm, 0.25rem);
@@ -55,10 +55,13 @@
55
55
  font-size: var(--hx-font-size-sm);
56
56
  }
57
57
 
58
+ /* md — WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
59
+ Bound to --hx-touch-target-min so the default md variant clears the
60
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
58
61
  .button--md {
59
62
  padding: var(--hx-space-2);
60
- min-width: var(--hx-size-10);
61
- height: var(--hx-size-10);
63
+ min-width: var(--hx-touch-target-min, 2.75rem);
64
+ min-height: var(--hx-touch-target-min, 2.75rem);
62
65
  font-size: var(--hx-font-size-md);
63
66
  }
64
67
 
@@ -105,7 +105,8 @@
105
105
  font-size: var(--hx-font-size-md, 1rem);
106
106
  color: var(--hx-date-picker-color, var(--hx-color-text-strong, #202b39));
107
107
  line-height: var(--hx-line-height-normal, 1.5);
108
- min-height: var(--hx-size-10, 2.5rem);
108
+ /* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44. */
109
+ min-height: var(--hx-touch-target-min, 2.75rem);
109
110
  width: 100%;
110
111
  cursor: default;
111
112
  }
@@ -126,6 +127,10 @@
126
127
  display: flex;
127
128
  align-items: center;
128
129
  justify-content: center;
130
+ /* WCAG 2.5.5 (Enhanced) AAA — calendar trigger must clear 44×44.
131
+ Without min-width the icon button collapses to ~41 px wide. */
132
+ min-width: var(--hx-touch-target-min, 2.75rem);
133
+ min-height: var(--hx-touch-target-min, 2.75rem);
129
134
  padding: 0 var(--hx-space-3, 0.75rem);
130
135
  border: none;
131
136
  border-left: var(--hx-border-width-thin, 1px) solid
@@ -299,13 +304,16 @@
299
304
  }
300
305
 
301
306
  .calendar__day--selected {
302
- background-color: var(--hx-date-picker-selected-bg, var(--hx-color-primary-500, #429797));
307
+ background-color: var(--hx-date-picker-selected-bg, var(--hx-color-action-primary-bg, #0f7078));
303
308
  color: var(--hx-date-picker-selected-color, var(--hx-color-text-on-primary, #ffffff));
304
309
  font-weight: var(--hx-font-weight-semibold, 600);
305
310
  }
306
311
 
307
312
  .calendar__day--selected:hover {
308
- background-color: var(--hx-date-picker-selected-hover-bg, var(--hx-color-primary-600, #0f7078));
313
+ background-color: var(
314
+ --hx-date-picker-selected-hover-bg,
315
+ var(--hx-color-action-primary-bg-hover, #0f6363)
316
+ );
309
317
  }
310
318
 
311
319
  .calendar__day--today:not(.calendar__day--selected) {
@@ -13,6 +13,19 @@
13
13
  display: inline-block;
14
14
  }
15
15
 
16
+ /*
17
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
18
+ * trigger (typically <hx-button>, <button>, or <hx-icon-button>). The host
19
+ * is a popover-container; the interactive surface is the slotted trigger.
20
+ */
21
+ ::slotted([slot='trigger']:focus-visible),
22
+ ::slotted(button:focus-visible),
23
+ ::slotted(a:focus-visible) {
24
+ outline: var(--hx-focus-ring-width, 2px) solid
25
+ var(--hx-dropdown-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
26
+ outline-offset: var(--hx-focus-ring-offset, 2px);
27
+ }
28
+
16
29
  [part='panel'] {
17
30
  position: fixed;
18
31
  z-index: var(--hx-dropdown-panel-z-index, 1000);
@@ -74,16 +74,15 @@
74
74
  /* ─── Style Variants ─── */
75
75
 
76
76
  .button--primary {
77
- --hx-icon-button-bg: var(--hx-color-primary-500, #429797);
77
+ --hx-icon-button-bg: var(--hx-color-action-primary-bg, #0f7078);
78
78
  --hx-icon-button-color: var(--hx-color-text-on-primary, #ffffff);
79
79
  --hx-icon-button-border-color: transparent;
80
80
  }
81
81
 
82
- /* on-primary tokens are tuned for primary-500. primary-600 + on-primary
83
- drops icon contrast to 3.07:1 — fails the 4.5:1 floor for meaningful
84
- icons. Pin fg at neutral-0 (5.82:1 on primary-600). Mirrors hx-button. */
82
+ /* Hover deepens to action.primary.bg-hover (primary-700) + neutral-0 = 7.03:1 AA.
83
+ Mirrors hx-button. */
85
84
  .button--primary:hover {
86
- --hx-icon-button-bg: var(--hx-color-primary-600, #0f7078);
85
+ --hx-icon-button-bg: var(--hx-color-action-primary-bg-hover, #0f6363);
87
86
  --hx-icon-button-color: var(--hx-color-neutral-0, #ffffff);
88
87
  }
89
88
 
@@ -70,6 +70,16 @@
70
70
  align-items: center;
71
71
  gap: var(--hx-space-1, 0.25rem);
72
72
  padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));
73
+ /*
74
+ * WCAG 2.5.5 (Enhanced) AAA — nav links rendered with default padding
75
+ * land at ~37 px tall (8 px + 1.5 line-height + 8 px). The link
76
+ * content is first-party (rendered via consumer-supplied props on
77
+ * <hx-nav-item>), so the slotted-content carve-out does not apply —
78
+ * this is a real component obligation. Bind --hx-nav-link-min-height
79
+ * to --hx-touch-target-min (2.75rem / 44 px) to grow the interactive
80
+ * area without enlarging the visible label.
81
+ */
82
+ min-height: var(--hx-nav-link-min-height, var(--hx-touch-target-min, 2.75rem));
73
83
  color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #ebeee9));
74
84
  text-decoration: none;
75
85
  border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));
@@ -98,8 +108,20 @@
98
108
  }
99
109
 
100
110
  .nav__link--active {
101
- background-color: var(--hx-nav-link-active-bg, var(--hx-color-primary-600, #0f7078));
102
- color: var(--hx-nav-link-active-color, var(--hx-color-neutral-0, #ffffff));
111
+ background-color: var(--hx-nav-link-active-bg, var(--hx-color-action-primary-bg, #0f6363));
112
+ /* Use --hx-color-text-on-primary so the active-link text inherits the
113
+ * action-surface AAA-strict pairing (white on primary-700 in default
114
+ * themes; black on lighter primary-700 in the high-contrast theme).
115
+ * Pre-3.4.0 this consumed --hx-color-primary-600 directly which
116
+ * resolved to Apex #0F7078 + white = 5.82:1 — AAA-large only, AAA
117
+ * normal fail under WCAG 1.4.6 for body-text-sized link labels. The
118
+ * Phase 4 Tier 3 chain shift moved action.primary.bg to primary-700
119
+ * (Apex 7.03:1 with white) and consuming the action semantic here
120
+ * picks up the AAA-strict pairing across the full 6-brand matrix.
121
+ * Hardcoding white previously failed AAA-large in high-contrast
122
+ * (ratio 2.54 vs. 4.5 floor); the on-primary token resolves correctly
123
+ * in HC mode. */
124
+ color: var(--hx-nav-link-active-color, var(--hx-color-text-on-primary, #ffffff));
103
125
  }
104
126
 
105
127
  /* ─── Chevron Icon ─── */
@@ -58,13 +58,13 @@
58
58
  .field__input-wrapper:focus-within {
59
59
  border-color: var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
60
60
  /* Fallback for Safari < 16.2 (no color-mix support) */
61
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
61
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
62
62
  var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
63
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
63
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
64
64
  color-mix(
65
65
  in srgb,
66
66
  var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color))
67
- calc(var(--hx-focus-ring-opacity) * 100%),
67
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
68
68
  transparent
69
69
  );
70
70
  }
@@ -78,13 +78,13 @@
78
78
  .field--error .field__input-wrapper:focus-within {
79
79
  border-color: var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e));
80
80
  /* Fallback for Safari < 16.2 (no color-mix support) */
81
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
81
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
82
82
  var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e));
83
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
83
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
84
84
  color-mix(
85
85
  in srgb,
86
86
  var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e))
87
- calc(var(--hx-focus-ring-opacity) * 100%),
87
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
88
88
  transparent
89
89
  );
90
90
  }
@@ -111,10 +111,10 @@
111
111
  color: var(--hx-number-input-color, var(--hx-color-text-strong));
112
112
  line-height: var(--hx-line-height-normal);
113
113
  width: 100%;
114
- /* Size: md (default) */
114
+ /* Size: md (default) — WCAG 2.5.5 (Enhanced) AAA touch target. */
115
115
  padding: var(--hx-space-2) var(--hx-space-3);
116
116
  font-size: var(--hx-font-size-md);
117
- min-height: var(--hx-size-10);
117
+ min-height: var(--hx-touch-target-min, 2.75rem);
118
118
  }
119
119
 
120
120
  .field__input::placeholder {
@@ -55,7 +55,10 @@
55
55
 
56
56
  .button:hover:not(:disabled) {
57
57
  background: var(--hx-pagination-hover-bg, var(--hx-color-surface-sunken, #ebeee9));
58
- border-color: var(--hx-pagination-hover-border-color, var(--hx-color-primary-500, #429797));
58
+ border-color: var(
59
+ --hx-pagination-hover-border-color,
60
+ var(--hx-color-action-primary-bg, #0f7078)
61
+ );
59
62
  }
60
63
 
61
64
  .button:focus-visible {
@@ -65,10 +68,10 @@
65
68
  }
66
69
 
67
70
  .button[aria-current='page'] {
68
- background: var(--hx-pagination-active-bg, var(--hx-color-primary-500, #429797));
71
+ background: var(--hx-pagination-active-bg, var(--hx-color-action-primary-bg, #0f7078));
69
72
  border-color: var(
70
73
  --hx-pagination-active-border-color,
71
- var(--hx-pagination-active-bg, var(--hx-color-primary-500, #429797))
74
+ var(--hx-pagination-active-bg, var(--hx-color-action-primary-bg, #0f7078))
72
75
  );
73
76
  color: var(--hx-pagination-active-color, var(--hx-color-text-on-primary, #ffffff));
74
77
  font-weight: var(--hx-font-weight-semibold, 600);
@@ -9,6 +9,19 @@
9
9
  display: inline-block;
10
10
  }
11
11
 
12
+ /*
13
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
14
+ * trigger so consumers who slot bare HTML controls inherit the same ring
15
+ * width as <hx-button>. Token-driven: --hx-focus-ring-width (default 2px).
16
+ */
17
+ ::slotted([slot='trigger']:focus-visible),
18
+ ::slotted(button:focus-visible),
19
+ ::slotted(a:focus-visible) {
20
+ outline: var(--hx-focus-ring-width, 2px) solid
21
+ var(--hx-popover-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
22
+ outline-offset: var(--hx-focus-ring-offset, 2px);
23
+ }
24
+
12
25
  [part='body'] {
13
26
  position: fixed;
14
27
  z-index: var(--hx-popover-z-index, 9999);
@@ -3,6 +3,20 @@
3
3
  display: inline-block;
4
4
  }
5
5
 
6
+ /*
7
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on slotted
8
+ * trigger / anchor controls. hx-popup is a positioning primitive: it
9
+ * paints no surface itself, but slotted natives (<button>, <a>) must
10
+ * still meet the AAA ring threshold. Token-driven.
11
+ */
12
+ ::slotted([slot='anchor']:focus-visible),
13
+ ::slotted(button:focus-visible),
14
+ ::slotted(a:focus-visible) {
15
+ outline: var(--hx-focus-ring-width, 2px) solid
16
+ var(--hx-popup-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
17
+ outline-offset: var(--hx-focus-ring-offset, 2px);
18
+ }
19
+
6
20
  [part='popup'] {
7
21
  position: fixed;
8
22
  z-index: var(--hx-popup-z-index, 9000);
@@ -8,6 +8,16 @@
8
8
  pointer-events: none;
9
9
  }
10
10
 
11
+ /*
12
+ * AAA 2.4.13 Focus Appearance — host-level focus ring for the group host
13
+ * when it carries focus via roving tabindex. Token-driven: ≥2px width.
14
+ */
15
+ :host(:focus-visible) {
16
+ outline: var(--hx-focus-ring-width, 2px) solid
17
+ var(--hx-radio-group-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
18
+ outline-offset: var(--hx-focus-ring-offset, 2px);
19
+ }
20
+
11
21
  * {
12
22
  box-sizing: border-box;
13
23
  }
@@ -96,8 +96,15 @@
96
96
  display: flex;
97
97
  align-items: center;
98
98
  justify-content: center;
99
+ /* Visual icon area stays 2rem (32px) — preserves the side-nav header
100
+ silhouette while the wrapping touch target grows to 44×44 to meet
101
+ WCAG 2.5.5 (Enhanced) AAA. min-width/min-height own the hit area;
102
+ width/height drive the visual painted area, but the button's
103
+ intrinsic size always matches the hit-area floor. */
99
104
  width: var(--hx-space-8, 2rem);
100
105
  height: var(--hx-space-8, 2rem);
106
+ min-width: var(--hx-touch-target-min, 2.75rem);
107
+ min-height: var(--hx-touch-target-min, 2.75rem);
101
108
  margin-inline-start: auto;
102
109
  flex-shrink: 0;
103
110
  padding: 0;