@helixui/library 2.1.2-next.51 → 2.1.2-next.53

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 (477) hide show
  1. package/custom-elements.json +522 -466
  2. package/dist/base/helix-element.d.ts.map +1 -1
  3. package/dist/components/hx-accordion/hx-accordion-item.d.ts +0 -2
  4. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  5. package/dist/components/hx-accordion/hx-accordion-item.styles.d.ts.map +1 -1
  6. package/dist/components/hx-accordion/hx-accordion.styles.d.ts.map +1 -1
  7. package/dist/components/hx-accordion/index.js +1 -1
  8. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  9. package/dist/components/hx-alert/index.js +1 -1
  10. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  11. package/dist/components/hx-badge/index.js +1 -1
  12. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  13. package/dist/components/hx-banner/index.js +1 -1
  14. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  15. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
  16. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +0 -7
  17. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  18. package/dist/components/hx-breadcrumb/index.js +1 -1
  19. package/dist/components/hx-button/hx-button.d.ts +9 -9
  20. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  21. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  22. package/dist/components/hx-button/index.js +1 -1
  23. package/dist/components/hx-button-group/hx-button-group.d.ts +1 -4
  24. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  25. package/dist/components/hx-button-group/index.js +1 -1
  26. package/dist/components/hx-card/hx-card.d.ts +16 -0
  27. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  28. package/dist/components/hx-card/hx-card.styles.d.ts.map +1 -1
  29. package/dist/components/hx-card/index.js +1 -1
  30. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  31. package/dist/components/hx-carousel/hx-carousel.styles.d.ts.map +1 -1
  32. package/dist/components/hx-carousel/index.js +1 -1
  33. package/dist/components/hx-checkbox/hx-checkbox.d.ts +8 -0
  34. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  35. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  36. package/dist/components/hx-checkbox/index.js +1 -1
  37. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +6 -8
  38. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  39. package/dist/components/hx-checkbox-group/hx-checkbox-group.styles.d.ts.map +1 -1
  40. package/dist/components/hx-checkbox-group/index.js +1 -1
  41. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -1
  42. package/dist/components/hx-clinical-status/index.js +1 -1
  43. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  44. package/dist/components/hx-code-snippet/index.js +1 -1
  45. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  46. package/dist/components/hx-color-picker/index.js +1 -1
  47. package/dist/components/hx-combobox/hx-combobox.d.ts +20 -14
  48. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  49. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  50. package/dist/components/hx-combobox/index.js +1 -1
  51. package/dist/components/hx-copy-button/hx-copy-button.styles.d.ts.map +1 -1
  52. package/dist/components/hx-copy-button/index.js +1 -1
  53. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
  54. package/dist/components/hx-counter/index.js +1 -1
  55. package/dist/components/hx-data-table/hx-data-table.d.ts +20 -0
  56. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  57. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  58. package/dist/components/hx-data-table/index.js +1 -1
  59. package/dist/components/hx-date-picker/hx-date-picker.d.ts +6 -17
  60. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  61. package/dist/components/hx-date-picker/index.js +1 -1
  62. package/dist/components/hx-dialog/hx-dialog.d.ts +7 -0
  63. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  64. package/dist/components/hx-dialog/hx-dialog.styles.d.ts.map +1 -1
  65. package/dist/components/hx-dialog/index.js +1 -1
  66. package/dist/components/hx-divider/hx-divider.styles.d.ts.map +1 -1
  67. package/dist/components/hx-divider/index.js +1 -1
  68. package/dist/components/hx-drawer/hx-drawer.d.ts +7 -0
  69. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  70. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  71. package/dist/components/hx-drawer/index.js +1 -1
  72. package/dist/components/hx-dropdown/hx-dropdown.d.ts +8 -5
  73. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  74. package/dist/components/hx-dropdown/hx-dropdown.styles.d.ts.map +1 -1
  75. package/dist/components/hx-dropdown/index.js +1 -1
  76. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  77. package/dist/components/hx-field/hx-field.styles.d.ts.map +1 -1
  78. package/dist/components/hx-field/index.js +1 -1
  79. package/dist/components/hx-field-label/hx-field-label.styles.d.ts.map +1 -1
  80. package/dist/components/hx-field-label/index.js +1 -1
  81. package/dist/components/hx-file-upload/hx-file-upload.d.ts +6 -14
  82. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  83. package/dist/components/hx-file-upload/index.js +1 -1
  84. package/dist/components/hx-help-text/hx-help-text.styles.d.ts.map +1 -1
  85. package/dist/components/hx-help-text/index.js +1 -1
  86. package/dist/components/hx-icon/hx-icon.styles.d.ts.map +1 -1
  87. package/dist/components/hx-icon/index.js +1 -1
  88. package/dist/components/hx-icon-button/hx-icon-button.d.ts +10 -14
  89. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  90. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  91. package/dist/components/hx-icon-button/index.js +1 -1
  92. package/dist/components/hx-image/hx-image.styles.d.ts.map +1 -1
  93. package/dist/components/hx-image/index.js +1 -1
  94. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  95. package/dist/components/hx-link/index.js +1 -1
  96. package/dist/components/hx-list/index.js +1 -1
  97. package/dist/components/hx-menu/hx-menu-divider.styles.d.ts.map +1 -1
  98. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  99. package/dist/components/hx-menu/hx-menu.styles.d.ts.map +1 -1
  100. package/dist/components/hx-menu/index.js +1 -1
  101. package/dist/components/hx-meter/hx-meter.d.ts +0 -2
  102. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  103. package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
  104. package/dist/components/hx-meter/index.js +1 -1
  105. package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
  106. package/dist/components/hx-nav/index.js +1 -1
  107. package/dist/components/hx-number-input/hx-number-input.d.ts +6 -8
  108. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  109. package/dist/components/hx-number-input/hx-number-input.styles.d.ts.map +1 -1
  110. package/dist/components/hx-number-input/index.js +1 -1
  111. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  112. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  113. package/dist/components/hx-overflow-menu/index.js +1 -1
  114. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -1
  115. package/dist/components/hx-patient-banner/index.js +1 -1
  116. package/dist/components/hx-phi-field/index.js +1 -1
  117. package/dist/components/hx-popover/hx-popover.d.ts +1 -0
  118. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  119. package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
  120. package/dist/components/hx-popover/index.js +1 -1
  121. package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
  122. package/dist/components/hx-popup/index.js +1 -1
  123. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +0 -2
  124. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  125. package/dist/components/hx-progress-bar/index.js +1 -1
  126. package/dist/components/hx-radio-group/hx-radio-group.d.ts +6 -11
  127. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  128. package/dist/components/hx-radio-group/hx-radio-group.styles.d.ts.map +1 -1
  129. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  130. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  131. package/dist/components/hx-radio-group/index.js +1 -1
  132. package/dist/components/hx-rating/hx-rating.d.ts +6 -11
  133. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  134. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  135. package/dist/components/hx-rating/index.js +1 -1
  136. package/dist/components/hx-select/hx-select.d.ts +8 -0
  137. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  138. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  139. package/dist/components/hx-select/index.js +1 -1
  140. package/dist/components/hx-side-nav/hx-nav-item.d.ts +0 -3
  141. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  142. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  143. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  144. package/dist/components/hx-side-nav/index.js +1 -1
  145. package/dist/components/hx-skeleton/hx-skeleton.styles.d.ts.map +1 -1
  146. package/dist/components/hx-skeleton/index.js +1 -1
  147. package/dist/components/hx-slider/hx-slider.d.ts +9 -9
  148. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  149. package/dist/components/hx-slider/index.js +1 -1
  150. package/dist/components/hx-spinner/hx-spinner.styles.d.ts.map +1 -1
  151. package/dist/components/hx-spinner/index.js +1 -1
  152. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  153. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  154. package/dist/components/hx-split-button/index.js +1 -1
  155. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  156. package/dist/components/hx-split-panel/index.js +1 -1
  157. package/dist/components/hx-stat/hx-stat.d.ts +2 -2
  158. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  159. package/dist/components/hx-status-indicator/hx-status-indicator.styles.d.ts.map +1 -1
  160. package/dist/components/hx-status-indicator/index.js +1 -1
  161. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  162. package/dist/components/hx-steps/index.js +1 -1
  163. package/dist/components/hx-structured-list/hx-structured-list.styles.d.ts.map +1 -1
  164. package/dist/components/hx-structured-list/index.js +1 -1
  165. package/dist/components/hx-switch/hx-switch.d.ts +14 -17
  166. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  167. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  168. package/dist/components/hx-switch/index.js +1 -1
  169. package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -1
  170. package/dist/components/hx-table/index.js +1 -1
  171. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  172. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  173. package/dist/components/hx-tabs/hx-tabs.d.ts +6 -0
  174. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  175. package/dist/components/hx-tabs/hx-tabs.styles.d.ts.map +1 -1
  176. package/dist/components/hx-tabs/index.js +1 -1
  177. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  178. package/dist/components/hx-tag/index.js +1 -1
  179. package/dist/components/hx-text-input/hx-text-input.d.ts +11 -0
  180. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  181. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  182. package/dist/components/hx-text-input/index.js +1 -1
  183. package/dist/components/hx-textarea/hx-textarea.d.ts +17 -9
  184. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  185. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  186. package/dist/components/hx-textarea/index.js +1 -1
  187. package/dist/components/hx-time-picker/hx-time-picker.d.ts +6 -17
  188. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  189. package/dist/components/hx-time-picker/index.js +1 -1
  190. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  191. package/dist/components/hx-toast/index.js +1 -1
  192. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +6 -13
  193. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  194. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  195. package/dist/components/hx-toggle-button/index.js +1 -1
  196. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  197. package/dist/components/hx-tooltip/hx-tooltip.styles.d.ts.map +1 -1
  198. package/dist/components/hx-tooltip/index.js +1 -1
  199. package/dist/components/hx-top-nav/hx-top-nav.styles.d.ts.map +1 -1
  200. package/dist/components/hx-top-nav/index.js +1 -1
  201. package/dist/components/hx-tree-view/hx-tree-item.styles.d.ts.map +1 -1
  202. package/dist/components/hx-tree-view/index.js +1 -1
  203. package/dist/css/helix-all.css +1269 -11
  204. package/dist/css/helix-core.css +137 -1
  205. package/dist/css/helix-data.css +69 -0
  206. package/dist/css/helix-feedback.css +77 -0
  207. package/dist/css/helix-forms.css +627 -3
  208. package/dist/css/helix-layout.css +22 -0
  209. package/dist/css/helix-media.css +24 -0
  210. package/dist/css/helix-navigation.css +110 -0
  211. package/dist/css/helix-overlay.css +87 -0
  212. package/dist/css/helix-utility.css +66 -0
  213. package/dist/css/hx-accordion.css +8 -0
  214. package/dist/css/hx-alert.css +21 -0
  215. package/dist/css/hx-badge.css +16 -0
  216. package/dist/css/hx-banner.css +17 -0
  217. package/dist/css/hx-button.css +4 -1
  218. package/dist/css/hx-card.css +12 -0
  219. package/dist/css/hx-carousel.css +24 -0
  220. package/dist/css/hx-checkbox-group.css +32 -0
  221. package/dist/css/hx-checkbox.css +66 -0
  222. package/dist/css/hx-clinical-status.css +23 -0
  223. package/dist/css/hx-code-snippet.css +22 -0
  224. package/dist/css/hx-color-picker.css +1 -1
  225. package/dist/css/hx-combobox.css +1 -1
  226. package/dist/css/hx-copy-button.css +28 -0
  227. package/dist/css/hx-counter.css +3 -0
  228. package/dist/css/hx-data-table.css +23 -0
  229. package/dist/css/hx-dialog.css +21 -0
  230. package/dist/css/hx-divider.css +8 -0
  231. package/dist/css/hx-drawer.css +21 -0
  232. package/dist/css/hx-dropdown.css +9 -0
  233. package/dist/css/hx-field-label.css +16 -0
  234. package/dist/css/hx-field.css +36 -0
  235. package/dist/css/hx-help-text.css +20 -0
  236. package/dist/css/hx-icon-button.css +27 -0
  237. package/dist/css/hx-icon.css +8 -0
  238. package/dist/css/hx-image.css +8 -0
  239. package/dist/css/hx-link.css +18 -0
  240. package/dist/css/hx-menu.css +9 -0
  241. package/dist/css/hx-meter.css +13 -0
  242. package/dist/css/hx-nav.css +16 -0
  243. package/dist/css/hx-number-input.css +78 -0
  244. package/dist/css/hx-overflow-menu.css +31 -0
  245. package/dist/css/hx-patient-banner.css +20 -0
  246. package/dist/css/hx-phi-field.css +1 -1
  247. package/dist/css/hx-popover.css +12 -0
  248. package/dist/css/hx-popup.css +12 -0
  249. package/dist/css/hx-radio-group.css +32 -0
  250. package/dist/css/hx-rating.css +39 -0
  251. package/dist/css/hx-select.css +82 -0
  252. package/dist/css/hx-side-nav.css +21 -0
  253. package/dist/css/hx-skeleton.css +12 -0
  254. package/dist/css/hx-spinner.css +12 -0
  255. package/dist/css/hx-split-button.css +35 -0
  256. package/dist/css/hx-split-panel.css +14 -0
  257. package/dist/css/hx-status-indicator.css +13 -0
  258. package/dist/css/hx-structured-list.css +16 -0
  259. package/dist/css/hx-switch.css +62 -0
  260. package/dist/css/hx-table.css +8 -0
  261. package/dist/css/hx-tabs.css +12 -0
  262. package/dist/css/hx-tag.css +12 -0
  263. package/dist/css/hx-text-input.css +62 -0
  264. package/dist/css/hx-textarea.css +62 -0
  265. package/dist/css/hx-toast.css +13 -0
  266. package/dist/css/hx-toggle-button.css +38 -1
  267. package/dist/css/hx-tooltip.css +12 -0
  268. package/dist/css/hx-top-nav.css +21 -0
  269. package/dist/css/index.css +1 -1
  270. package/dist/css/manifest.json +5 -3
  271. package/dist/index.js +67 -67
  272. package/dist/mixins/aria-delegation.d.ts +3 -1
  273. package/dist/mixins/aria-delegation.d.ts.map +1 -1
  274. package/dist/mixins/index.d.ts +1 -1
  275. package/dist/mixins/index.d.ts.map +1 -1
  276. package/dist/shared/{aria-delegation-CBP9eQ0M.js → aria-delegation-Doq6RRUy.js} +6 -6
  277. package/dist/shared/aria-delegation-Doq6RRUy.js.map +1 -0
  278. package/dist/shared/{helix-element-CZvaIEQP.js → helix-element-BJh1Ffvi.js} +18 -21
  279. package/dist/shared/{helix-element-CZvaIEQP.js.map → helix-element-BJh1Ffvi.js.map} +1 -1
  280. package/dist/shared/{hx-accordion-CpfO0YQo.js → hx-accordion-SlwR2C6S.js} +109 -62
  281. package/dist/shared/hx-accordion-SlwR2C6S.js.map +1 -0
  282. package/dist/shared/{hx-alert-CHOjTBds.js → hx-alert-DdlSyJGk.js} +22 -1
  283. package/dist/shared/hx-alert-DdlSyJGk.js.map +1 -0
  284. package/dist/shared/{hx-badge-RPzd-t5l.js → hx-badge-B_PzGlUo.js} +17 -1
  285. package/dist/shared/hx-badge-B_PzGlUo.js.map +1 -0
  286. package/dist/shared/{hx-banner-B-WEDiq7.js → hx-banner-D8AxkCfc.js} +30 -13
  287. package/dist/shared/hx-banner-D8AxkCfc.js.map +1 -0
  288. package/dist/shared/{hx-breadcrumb-item-jLAKK038.js → hx-breadcrumb-item-BCUIvpYX.js} +32 -15
  289. package/dist/shared/hx-breadcrumb-item-BCUIvpYX.js.map +1 -0
  290. package/dist/shared/{hx-button-DoN8jjQT.js → hx-button-BzqsDHmZ.js} +15 -16
  291. package/dist/shared/hx-button-BzqsDHmZ.js.map +1 -0
  292. package/dist/shared/{hx-button-group-BXlMQTt_.js → hx-button-group-a5Pb_9fU.js} +8 -9
  293. package/dist/shared/{hx-button-group-BXlMQTt_.js.map → hx-button-group-a5Pb_9fU.js.map} +1 -1
  294. package/dist/shared/{hx-card-BgXZXDuc.js → hx-card-DYlaxQy0.js} +59 -33
  295. package/dist/shared/hx-card-DYlaxQy0.js.map +1 -0
  296. package/dist/shared/{hx-carousel-item-Dwt9Pphz.js → hx-carousel-item-KQfCekKF.js} +45 -19
  297. package/dist/shared/hx-carousel-item-KQfCekKF.js.map +1 -0
  298. package/dist/shared/{hx-checkbox-C82GjRXe.js → hx-checkbox-DyDbR1B9.js} +97 -31
  299. package/dist/shared/hx-checkbox-DyDbR1B9.js.map +1 -0
  300. package/dist/shared/{hx-checkbox-group-DThZeN5d.js → hx-checkbox-group-C8TaFqy0.js} +75 -40
  301. package/dist/shared/hx-checkbox-group-C8TaFqy0.js.map +1 -0
  302. package/dist/shared/{hx-clinical-status-BjtT5c0M.js → hx-clinical-status-dDyk5oj1.js} +53 -30
  303. package/dist/shared/hx-clinical-status-dDyk5oj1.js.map +1 -0
  304. package/dist/shared/{hx-code-snippet-DcVENSuC.js → hx-code-snippet-DasrRF9k.js} +27 -5
  305. package/dist/shared/hx-code-snippet-DasrRF9k.js.map +1 -0
  306. package/dist/shared/{hx-color-picker-C6EIuS9t.js → hx-color-picker-zv6wtok4.js} +81 -81
  307. package/dist/shared/hx-color-picker-zv6wtok4.js.map +1 -0
  308. package/dist/shared/{hx-combobox-BJ4lQocO.js → hx-combobox-C-DVLFpu.js} +36 -45
  309. package/dist/shared/hx-combobox-C-DVLFpu.js.map +1 -0
  310. package/dist/shared/{hx-copy-button-BoM0WsMd.js → hx-copy-button-DikpbhWY.js} +54 -26
  311. package/dist/shared/hx-copy-button-DikpbhWY.js.map +1 -0
  312. package/dist/shared/{hx-counter-B5NgKlw4.js → hx-counter-_m4cq45V.js} +21 -18
  313. package/dist/shared/hx-counter-_m4cq45V.js.map +1 -0
  314. package/dist/shared/{hx-data-table-D5Ne-goy.js → hx-data-table-609C-e9w.js} +215 -150
  315. package/dist/shared/hx-data-table-609C-e9w.js.map +1 -0
  316. package/dist/shared/{hx-date-picker-Cd3I3WkX.js → hx-date-picker-Bh8410Sf.js} +26 -35
  317. package/dist/shared/hx-date-picker-Bh8410Sf.js.map +1 -0
  318. package/dist/shared/{hx-dialog-D4ubstxx.js → hx-dialog-D_DeqcNS.js} +46 -25
  319. package/dist/shared/hx-dialog-D_DeqcNS.js.map +1 -0
  320. package/dist/shared/{hx-divider-BBtOLHRP.js → hx-divider-lfOMElo2.js} +18 -10
  321. package/dist/shared/hx-divider-lfOMElo2.js.map +1 -0
  322. package/dist/shared/{hx-drawer--WDLuWtS.js → hx-drawer-NleCbKuN.js} +95 -60
  323. package/dist/shared/hx-drawer-NleCbKuN.js.map +1 -0
  324. package/dist/shared/{hx-dropdown-n5-XSmiV.js → hx-dropdown-CA9WYdhm.js} +37 -27
  325. package/dist/shared/hx-dropdown-CA9WYdhm.js.map +1 -0
  326. package/dist/shared/{hx-field-CwT9tki1.js → hx-field-Duiib9Bj.js} +48 -12
  327. package/dist/shared/hx-field-Duiib9Bj.js.map +1 -0
  328. package/dist/shared/{hx-field-label-CcOK9VU3.js → hx-field-label-Dud-psvE.js} +37 -21
  329. package/dist/shared/hx-field-label-Dud-psvE.js.map +1 -0
  330. package/dist/shared/{hx-file-upload-Di_vpQaG.js → hx-file-upload-CmCCAvej.js} +24 -33
  331. package/dist/shared/hx-file-upload-CmCCAvej.js.map +1 -0
  332. package/dist/shared/{hx-help-text-Bmb80bP4.js → hx-help-text-DARi-Pfp.js} +37 -17
  333. package/dist/shared/hx-help-text-DARi-Pfp.js.map +1 -0
  334. package/dist/shared/{hx-icon-button-CJuy9xbw.js → hx-icon-button-BcZtVVtH.js} +58 -41
  335. package/dist/shared/hx-icon-button-BcZtVVtH.js.map +1 -0
  336. package/dist/shared/{hx-icon-BKHs3OLu.js → hx-icon-jWcGmn66.js} +9 -1
  337. package/dist/shared/hx-icon-jWcGmn66.js.map +1 -0
  338. package/dist/shared/{hx-image-ztiXumZB.js → hx-image-DOjPp-K5.js} +28 -20
  339. package/dist/shared/hx-image-DOjPp-K5.js.map +1 -0
  340. package/dist/shared/{hx-link-CN7AvGOW.js → hx-link-DCBct0f4.js} +44 -26
  341. package/dist/shared/hx-link-DCBct0f4.js.map +1 -0
  342. package/dist/shared/{hx-list-CnDK30Yk.js → hx-list-Dnei26t4.js} +16 -16
  343. package/dist/shared/{hx-list-CnDK30Yk.js.map → hx-list-Dnei26t4.js.map} +1 -1
  344. package/dist/shared/{hx-menu-divider-DRT8yHRZ.js → hx-menu-divider-DVWER7iT.js} +93 -50
  345. package/dist/shared/hx-menu-divider-DVWER7iT.js.map +1 -0
  346. package/dist/shared/{hx-meter-BcVC9yrt.js → hx-meter-ChZdWNF2.js} +42 -28
  347. package/dist/shared/hx-meter-ChZdWNF2.js.map +1 -0
  348. package/dist/shared/{hx-nav-l0Rp7WPW.js → hx-nav-CHX1JOWB.js} +28 -12
  349. package/dist/shared/hx-nav-CHX1JOWB.js.map +1 -0
  350. package/dist/shared/{hx-nav-item-CJN4VDrf.js → hx-nav-item-CRAESq9s.js} +56 -22
  351. package/dist/shared/hx-nav-item-CRAESq9s.js.map +1 -0
  352. package/dist/shared/{hx-number-input-0Waw7Z7u.js → hx-number-input-Cm682AVP.js} +154 -72
  353. package/dist/shared/hx-number-input-Cm682AVP.js.map +1 -0
  354. package/dist/shared/{hx-overflow-menu-DElwFSCd.js → hx-overflow-menu-BDl6QfUD.js} +52 -19
  355. package/dist/shared/hx-overflow-menu-BDl6QfUD.js.map +1 -0
  356. package/dist/shared/{hx-patient-banner-BKiN7nIE.js → hx-patient-banner-B4IjHeTx.js} +54 -34
  357. package/dist/shared/hx-patient-banner-B4IjHeTx.js.map +1 -0
  358. package/dist/shared/{hx-phi-field-Df06K0J3.js → hx-phi-field-DD1qcBSO.js} +2 -2
  359. package/dist/shared/hx-phi-field-DD1qcBSO.js.map +1 -0
  360. package/dist/shared/{hx-popover-CydNuVkT.js → hx-popover-ZGRFgBbx.js} +29 -15
  361. package/dist/shared/hx-popover-ZGRFgBbx.js.map +1 -0
  362. package/dist/shared/{hx-popup-DbzezTOd.js → hx-popup-Cc4qz89i.js} +24 -12
  363. package/dist/shared/hx-popup-Cc4qz89i.js.map +1 -0
  364. package/dist/shared/{hx-progress-bar-Cm0VihTN.js → hx-progress-bar-BY1uE6bN.js} +17 -16
  365. package/dist/shared/hx-progress-bar-BY1uE6bN.js.map +1 -0
  366. package/dist/shared/{hx-radio-f8c5ggHG.js → hx-radio-YEEsbUPN.js} +139 -54
  367. package/dist/shared/hx-radio-YEEsbUPN.js.map +1 -0
  368. package/dist/shared/{hx-rating-qRJZXskm.js → hx-rating-DjUJTT0M.js} +54 -17
  369. package/dist/shared/hx-rating-DjUJTT0M.js.map +1 -0
  370. package/dist/shared/{hx-select-CgcgsHU5.js → hx-select-DZ7wfcJx.js} +119 -37
  371. package/dist/shared/hx-select-DZ7wfcJx.js.map +1 -0
  372. package/dist/shared/{hx-skeleton-tiYvKO-t.js → hx-skeleton-aqa-gr1S.js} +28 -16
  373. package/dist/shared/hx-skeleton-aqa-gr1S.js.map +1 -0
  374. package/dist/shared/{hx-slider-BvXtvxmN.js → hx-slider-DAilFrR_.js} +28 -25
  375. package/dist/shared/hx-slider-DAilFrR_.js.map +1 -0
  376. package/dist/shared/{hx-spinner-D6nzuGmj.js → hx-spinner-Dw3cRY-9.js} +26 -14
  377. package/dist/shared/hx-spinner-Dw3cRY-9.js.map +1 -0
  378. package/dist/shared/{hx-split-button-CPndTJlC.js → hx-split-button-Dk-zMDDo.js} +51 -14
  379. package/dist/shared/hx-split-button-Dk-zMDDo.js.map +1 -0
  380. package/dist/shared/{hx-split-panel-Dx72NaET.js → hx-split-panel-Kdp4BiLz.js} +15 -1
  381. package/dist/shared/hx-split-panel-Kdp4BiLz.js.map +1 -0
  382. package/dist/shared/hx-stat-DKlyBL_K.js.map +1 -1
  383. package/dist/shared/{hx-status-indicator-ClWpK6zz.js → hx-status-indicator-DWSM0Ctm.js} +30 -17
  384. package/dist/shared/hx-status-indicator-DWSM0Ctm.js.map +1 -0
  385. package/dist/shared/{hx-step-C2Jk4mHa.js → hx-step-CuoOvcI8.js} +52 -18
  386. package/dist/shared/{hx-step-C2Jk4mHa.js.map → hx-step-CuoOvcI8.js.map} +1 -1
  387. package/dist/shared/{hx-structured-list-DKlrv7kS.js → hx-structured-list-CQCD7bCT.js} +21 -5
  388. package/dist/shared/hx-structured-list-CQCD7bCT.js.map +1 -0
  389. package/dist/shared/{hx-switch-BzMN37PV.js → hx-switch-BdxKN9WM.js} +89 -32
  390. package/dist/shared/hx-switch-BdxKN9WM.js.map +1 -0
  391. package/dist/shared/{hx-tab-panel-J58zOSjq.js → hx-tab-panel-CwClQoWP.js} +141 -88
  392. package/dist/shared/hx-tab-panel-CwClQoWP.js.map +1 -0
  393. package/dist/shared/{hx-tag-F0ZcYj9b.js → hx-tag-BL5qJJCN.js} +20 -8
  394. package/dist/shared/hx-tag-BL5qJJCN.js.map +1 -0
  395. package/dist/shared/{hx-td-CNCvzBwY.js → hx-td-CzSvVKdp.js} +21 -13
  396. package/dist/shared/hx-td-CzSvVKdp.js.map +1 -0
  397. package/dist/shared/{hx-text-input-Zuodg9s_.js → hx-text-input-BfMrvN9N.js} +110 -48
  398. package/dist/shared/hx-text-input-BfMrvN9N.js.map +1 -0
  399. package/dist/shared/{hx-textarea-BfSJJtA1.js → hx-textarea-C-i_Vam6.js} +108 -47
  400. package/dist/shared/hx-textarea-C-i_Vam6.js.map +1 -0
  401. package/dist/shared/{hx-time-picker-CZvmihHD.js → hx-time-picker-MZyLQPW9.js} +50 -61
  402. package/dist/shared/hx-time-picker-MZyLQPW9.js.map +1 -0
  403. package/dist/shared/{hx-toggle-button-BZUQUULm.js → hx-toggle-button-ClyNYNVI.js} +68 -37
  404. package/dist/shared/hx-toggle-button-ClyNYNVI.js.map +1 -0
  405. package/dist/shared/{hx-tooltip-Ny4i1Idj.js → hx-tooltip-ByWT987R.js} +33 -19
  406. package/dist/shared/hx-tooltip-ByWT987R.js.map +1 -0
  407. package/dist/shared/{hx-top-nav-CC4FW2Hp.js → hx-top-nav-k7hY78kt.js} +35 -14
  408. package/dist/shared/hx-top-nav-k7hY78kt.js.map +1 -0
  409. package/dist/shared/{hx-tree-item-CPQ9dJiK.js → hx-tree-item-D0ZphA45.js} +9 -1
  410. package/dist/shared/hx-tree-item-D0ZphA45.js.map +1 -0
  411. package/dist/shared/{toast-factory-CEMNOt1T.js → toast-factory-Cwd0PihS.js} +49 -36
  412. package/dist/shared/toast-factory-Cwd0PihS.js.map +1 -0
  413. package/package.json +2 -2
  414. package/dist/shared/aria-delegation-CBP9eQ0M.js.map +0 -1
  415. package/dist/shared/hx-accordion-CpfO0YQo.js.map +0 -1
  416. package/dist/shared/hx-alert-CHOjTBds.js.map +0 -1
  417. package/dist/shared/hx-badge-RPzd-t5l.js.map +0 -1
  418. package/dist/shared/hx-banner-B-WEDiq7.js.map +0 -1
  419. package/dist/shared/hx-breadcrumb-item-jLAKK038.js.map +0 -1
  420. package/dist/shared/hx-button-DoN8jjQT.js.map +0 -1
  421. package/dist/shared/hx-card-BgXZXDuc.js.map +0 -1
  422. package/dist/shared/hx-carousel-item-Dwt9Pphz.js.map +0 -1
  423. package/dist/shared/hx-checkbox-C82GjRXe.js.map +0 -1
  424. package/dist/shared/hx-checkbox-group-DThZeN5d.js.map +0 -1
  425. package/dist/shared/hx-clinical-status-BjtT5c0M.js.map +0 -1
  426. package/dist/shared/hx-code-snippet-DcVENSuC.js.map +0 -1
  427. package/dist/shared/hx-color-picker-C6EIuS9t.js.map +0 -1
  428. package/dist/shared/hx-combobox-BJ4lQocO.js.map +0 -1
  429. package/dist/shared/hx-copy-button-BoM0WsMd.js.map +0 -1
  430. package/dist/shared/hx-counter-B5NgKlw4.js.map +0 -1
  431. package/dist/shared/hx-data-table-D5Ne-goy.js.map +0 -1
  432. package/dist/shared/hx-date-picker-Cd3I3WkX.js.map +0 -1
  433. package/dist/shared/hx-dialog-D4ubstxx.js.map +0 -1
  434. package/dist/shared/hx-divider-BBtOLHRP.js.map +0 -1
  435. package/dist/shared/hx-drawer--WDLuWtS.js.map +0 -1
  436. package/dist/shared/hx-dropdown-n5-XSmiV.js.map +0 -1
  437. package/dist/shared/hx-field-CwT9tki1.js.map +0 -1
  438. package/dist/shared/hx-field-label-CcOK9VU3.js.map +0 -1
  439. package/dist/shared/hx-file-upload-Di_vpQaG.js.map +0 -1
  440. package/dist/shared/hx-help-text-Bmb80bP4.js.map +0 -1
  441. package/dist/shared/hx-icon-BKHs3OLu.js.map +0 -1
  442. package/dist/shared/hx-icon-button-CJuy9xbw.js.map +0 -1
  443. package/dist/shared/hx-image-ztiXumZB.js.map +0 -1
  444. package/dist/shared/hx-link-CN7AvGOW.js.map +0 -1
  445. package/dist/shared/hx-menu-divider-DRT8yHRZ.js.map +0 -1
  446. package/dist/shared/hx-meter-BcVC9yrt.js.map +0 -1
  447. package/dist/shared/hx-nav-item-CJN4VDrf.js.map +0 -1
  448. package/dist/shared/hx-nav-l0Rp7WPW.js.map +0 -1
  449. package/dist/shared/hx-number-input-0Waw7Z7u.js.map +0 -1
  450. package/dist/shared/hx-overflow-menu-DElwFSCd.js.map +0 -1
  451. package/dist/shared/hx-patient-banner-BKiN7nIE.js.map +0 -1
  452. package/dist/shared/hx-phi-field-Df06K0J3.js.map +0 -1
  453. package/dist/shared/hx-popover-CydNuVkT.js.map +0 -1
  454. package/dist/shared/hx-popup-DbzezTOd.js.map +0 -1
  455. package/dist/shared/hx-progress-bar-Cm0VihTN.js.map +0 -1
  456. package/dist/shared/hx-radio-f8c5ggHG.js.map +0 -1
  457. package/dist/shared/hx-rating-qRJZXskm.js.map +0 -1
  458. package/dist/shared/hx-select-CgcgsHU5.js.map +0 -1
  459. package/dist/shared/hx-skeleton-tiYvKO-t.js.map +0 -1
  460. package/dist/shared/hx-slider-BvXtvxmN.js.map +0 -1
  461. package/dist/shared/hx-spinner-D6nzuGmj.js.map +0 -1
  462. package/dist/shared/hx-split-button-CPndTJlC.js.map +0 -1
  463. package/dist/shared/hx-split-panel-Dx72NaET.js.map +0 -1
  464. package/dist/shared/hx-status-indicator-ClWpK6zz.js.map +0 -1
  465. package/dist/shared/hx-structured-list-DKlrv7kS.js.map +0 -1
  466. package/dist/shared/hx-switch-BzMN37PV.js.map +0 -1
  467. package/dist/shared/hx-tab-panel-J58zOSjq.js.map +0 -1
  468. package/dist/shared/hx-tag-F0ZcYj9b.js.map +0 -1
  469. package/dist/shared/hx-td-CNCvzBwY.js.map +0 -1
  470. package/dist/shared/hx-text-input-Zuodg9s_.js.map +0 -1
  471. package/dist/shared/hx-textarea-BfSJJtA1.js.map +0 -1
  472. package/dist/shared/hx-time-picker-CZvmihHD.js.map +0 -1
  473. package/dist/shared/hx-toggle-button-BZUQUULm.js.map +0 -1
  474. package/dist/shared/hx-tooltip-Ny4i1Idj.js.map +0 -1
  475. package/dist/shared/hx-top-nav-CC4FW2Hp.js.map +0 -1
  476. package/dist/shared/hx-tree-item-CPQ9dJiK.js.map +0 -1
  477. package/dist/shared/toast-factory-CEMNOt1T.js.map +0 -1
@@ -10,6 +10,14 @@
10
10
  border-radius: var(--hx-accordion-border-radius, var(--hx-border-radius-md, 0.375rem));
11
11
  overflow: hidden;
12
12
  }
13
+
14
+ /* ─── High Contrast Mode (forced-colors) ─── */
15
+
16
+ @media (forced-colors: active) {
17
+ .accordion {
18
+ border: 2px solid CanvasText;
19
+ }
20
+ }
13
21
  /* ── hx-action-bar ── */
14
22
  :host {
15
23
  display: block;
@@ -340,6 +348,27 @@
340
348
  --hx-alert-color: var(--hx-color-error-800, #991b1b);
341
349
  --hx-alert-icon-color: var(--hx-color-error-500, #ef4444);
342
350
  }
351
+
352
+ /* ─── Forced Colors (Windows High Contrast) ─── */
353
+
354
+ @media (forced-colors: active) {
355
+ .alert {
356
+ border-color: CanvasText;
357
+ }
358
+
359
+ .alert--accent {
360
+ border-inline-start-color: CanvasText;
361
+ }
362
+
363
+ .alert__icon svg {
364
+ fill: CanvasText;
365
+ }
366
+
367
+ .alert__close-button {
368
+ color: ButtonText;
369
+ border: 1px solid ButtonText;
370
+ }
371
+ }
343
372
  /* ── hx-avatar ── */
344
373
  :host {
345
374
  display: inline-block;
@@ -671,6 +700,22 @@
671
700
  outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, currentColor);
672
701
  outline-offset: var(--hx-focus-ring-offset, 1px);
673
702
  }
703
+
704
+ /* ─── Forced Colors (Windows High Contrast) ─── */
705
+
706
+ @media (forced-colors: active) {
707
+ .badge {
708
+ border: 1px solid CanvasText;
709
+ }
710
+
711
+ .badge--pulse {
712
+ animation: none;
713
+ }
714
+
715
+ .badge__remove-button {
716
+ color: ButtonText;
717
+ }
718
+ }
674
719
  /* ── hx-banner ── */
675
720
  :host {
676
721
  display: block;
@@ -874,6 +919,23 @@
874
919
  transition: none;
875
920
  }
876
921
  }
922
+
923
+ /* ─── Forced Colors (Windows High Contrast) ─── */
924
+
925
+ @media (forced-colors: active) {
926
+ .banner {
927
+ border-bottom-color: CanvasText;
928
+ }
929
+
930
+ .banner__icon svg {
931
+ fill: CanvasText;
932
+ }
933
+
934
+ .banner__close-button {
935
+ color: ButtonText;
936
+ border: 1px solid ButtonText;
937
+ }
938
+ }
877
939
  /* ── hx-breadcrumb ── */
878
940
  :host {
879
941
  display: block;
@@ -972,10 +1034,13 @@
972
1034
 
973
1035
  /* ─── Size Variants ─── */
974
1036
 
1037
+ /* WCAG 2.5.5 (healthcare mandate): minimum 44px touch target for sm variant.
1038
+ min-height uses --hx-touch-target-min to guarantee the interactive area
1039
+ meets the threshold even though the visual size token is smaller. */
975
1040
  .button--sm {
976
1041
  padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
977
1042
  font-size: var(--hx-font-size-sm, 0.875rem);
978
- min-height: var(--hx-size-8, 2rem);
1043
+ min-height: var(--hx-touch-target-min, 2.75rem);
979
1044
  }
980
1045
 
981
1046
  .button--md {
@@ -1458,6 +1523,18 @@
1458
1523
  var(--hx-card-border-color, var(--hx-color-neutral-200, #dee2e6));
1459
1524
  margin-top: auto;
1460
1525
  }
1526
+
1527
+ /* ─── Forced Colors (Windows High Contrast) ─── */
1528
+
1529
+ @media (forced-colors: active) {
1530
+ .card {
1531
+ border-color: CanvasText;
1532
+ }
1533
+
1534
+ .card__actions {
1535
+ border-top-color: CanvasText;
1536
+ }
1537
+ }
1461
1538
  /* ── hx-carousel ── */
1462
1539
  :host {
1463
1540
  display: block;
@@ -1669,6 +1746,30 @@
1669
1746
  transition: none;
1670
1747
  }
1671
1748
  }
1749
+
1750
+ /* ─── Forced Colors (Windows High Contrast) ─── */
1751
+
1752
+ @media (forced-colors: active) {
1753
+ .nav-btn {
1754
+ border-color: ButtonText;
1755
+ color: ButtonText;
1756
+ }
1757
+
1758
+ .play-pause-btn {
1759
+ border-color: ButtonText;
1760
+ color: ButtonText;
1761
+ }
1762
+
1763
+ .pagination-dot {
1764
+ border: 1px solid CanvasText;
1765
+ }
1766
+
1767
+ .pagination-item[aria-current='true'] .pagination-dot,
1768
+ .pagination-item.is-active .pagination-dot {
1769
+ background: Highlight;
1770
+ border-color: Highlight;
1771
+ }
1772
+ }
1672
1773
  /* ── hx-checkbox ── */
1673
1774
  :host {
1674
1775
  display: block;
@@ -1888,6 +1989,72 @@
1888
1989
  transition: none;
1889
1990
  }
1890
1991
  }
1992
+
1993
+ /* ─── High Contrast Mode (forced-colors) ─── */
1994
+
1995
+ @media (forced-colors: active) {
1996
+ .checkbox__box {
1997
+ forced-color-adjust: none;
1998
+ background-color: ButtonFace;
1999
+ border: 2px solid ButtonText;
2000
+ }
2001
+
2002
+ .checkbox__input:focus-visible ~ .checkbox__box {
2003
+ outline: 3px solid Highlight;
2004
+ outline-offset: 2px;
2005
+ }
2006
+
2007
+ .checkbox--checked .checkbox__box,
2008
+ .checkbox--indeterminate .checkbox__box {
2009
+ background-color: Highlight;
2010
+ border-color: Highlight;
2011
+ }
2012
+
2013
+ .checkbox__icon {
2014
+ stroke: HighlightText;
2015
+ }
2016
+
2017
+ .checkbox--error .checkbox__box {
2018
+ border-color: LinkText;
2019
+ }
2020
+
2021
+ .checkbox--error.checkbox--checked .checkbox__box,
2022
+ .checkbox--error.checkbox--indeterminate .checkbox__box {
2023
+ background-color: LinkText;
2024
+ border-color: LinkText;
2025
+ }
2026
+
2027
+ :host([disabled]) {
2028
+ opacity: 1;
2029
+ }
2030
+
2031
+ :host([disabled]) .checkbox__box {
2032
+ border-color: GrayText;
2033
+ background-color: ButtonFace;
2034
+ }
2035
+
2036
+ :host([disabled]) .checkbox--checked .checkbox__box,
2037
+ :host([disabled]) .checkbox--indeterminate .checkbox__box {
2038
+ background-color: GrayText;
2039
+ border-color: GrayText;
2040
+ }
2041
+
2042
+ :host([disabled]) .checkbox__label {
2043
+ color: GrayText;
2044
+ }
2045
+
2046
+ .checkbox__label {
2047
+ color: CanvasText;
2048
+ }
2049
+
2050
+ .checkbox__help-text {
2051
+ color: GrayText;
2052
+ }
2053
+
2054
+ .checkbox__error {
2055
+ color: LinkText;
2056
+ }
2057
+ }
1891
2058
  /* ── hx-checkbox-group ── */
1892
2059
  :host {
1893
2060
  display: block;
@@ -1965,6 +2132,38 @@
1965
2132
  color: var(--hx-checkbox-group-error-color, var(--hx-color-error-500, #dc3545));
1966
2133
  line-height: var(--hx-line-height-normal);
1967
2134
  }
2135
+
2136
+ /* ─── High Contrast Mode (forced-colors) ─── */
2137
+
2138
+ @media (forced-colors: active) {
2139
+ .fieldset {
2140
+ border: none;
2141
+ }
2142
+
2143
+ .fieldset__legend {
2144
+ color: CanvasText;
2145
+ }
2146
+
2147
+ .fieldset--error .fieldset__legend {
2148
+ color: LinkText;
2149
+ }
2150
+
2151
+ :host([disabled]) {
2152
+ opacity: 1;
2153
+ }
2154
+
2155
+ :host([disabled]) .fieldset__legend {
2156
+ color: GrayText;
2157
+ }
2158
+
2159
+ .fieldset__help-text {
2160
+ color: GrayText;
2161
+ }
2162
+
2163
+ .fieldset__error {
2164
+ color: LinkText;
2165
+ }
2166
+ }
1968
2167
  /* ── hx-clinical-status ── */
1969
2168
  :host {
1970
2169
  display: block;
@@ -2213,6 +2412,29 @@
2213
2412
  transition: none;
2214
2413
  }
2215
2414
  }
2415
+
2416
+ /* ─── Forced Colors (Windows High Contrast) ─── */
2417
+
2418
+ @media (forced-colors: active) {
2419
+ .clinical-status {
2420
+ border-color: CanvasText;
2421
+ border-inline-start-color: CanvasText;
2422
+ }
2423
+
2424
+ .clinical-status__icon svg {
2425
+ fill: CanvasText;
2426
+ }
2427
+
2428
+ .clinical-status__dismiss-button {
2429
+ color: ButtonText;
2430
+ border: 1px solid ButtonText;
2431
+ }
2432
+
2433
+ .clinical-status__acknowledge-button {
2434
+ border-color: ButtonText;
2435
+ color: ButtonText;
2436
+ }
2437
+ }
2216
2438
  /* ── hx-code-snippet ── */
2217
2439
  :host {
2218
2440
  display: block;
@@ -2379,6 +2601,28 @@
2379
2601
  }
2380
2602
  }
2381
2603
 
2604
+ /* ─── Forced Colors (Windows High Contrast) ─── */
2605
+
2606
+ @media (forced-colors: active) {
2607
+ .code-snippet {
2608
+ border: 1px solid CanvasText;
2609
+ }
2610
+
2611
+ .code-snippet--inline {
2612
+ border: 1px solid CanvasText;
2613
+ }
2614
+
2615
+ .code-snippet__copy-button {
2616
+ border-color: ButtonText;
2617
+ color: ButtonText;
2618
+ }
2619
+
2620
+ .code-snippet__expand-button {
2621
+ border-top-color: CanvasText;
2622
+ color: ButtonText;
2623
+ }
2624
+ }
2625
+
2382
2626
  /* ─── Screen-reader only ─── */
2383
2627
 
2384
2628
  .sr-only {
@@ -2393,9 +2637,9 @@
2393
2637
  border: 0;
2394
2638
  }
2395
2639
  /* ── hx-color-picker ── */
2396
- :host{display:inline-block;position:relative;font-family:var(--hx-font-family-sans, sans-serif);font-size:var(--hx-font-size-sm, .875rem)}:host([disabled]){pointer-events:none;opacity:var(--hx-opacity-disabled, .4)}.trigger{display:inline-flex;align-items:center;gap:var(--hx-space-2, .5rem);padding:var(--hx-space-1, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-md, .375rem);background:var(--hx-color-neutral-0, #fff);cursor:pointer;transition:border-color var(--hx-transition-fast, .15s ease)}.trigger:hover:not([disabled]){border-color:var(--hx-color-primary-500, #3b82f6)}:is(.trigger,.gradient-grid,.slider-track,.swatch-btn,.format-btn):focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, var(--hx-color-primary-500));outline-offset:var(--hx-focus-ring-offset, 2px)}.trigger-swatch{width:1.5rem;height:1.5rem;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));background:var(--_preview-color, #000);display:block;flex-shrink:0}.trigger-label{font-size:var(--hx-font-size-sm, .875rem);color:var(--hx-color-neutral-700, #374151);font-family:var(--hx-font-family-mono, monospace);white-space:nowrap}.panel{position:absolute;z-index:var(--hx-color-picker-z-index, 1000);top:calc(100% + 4px);left:0;background:var(--hx-color-neutral-0, #fff);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);border-radius:var(--hx-border-radius-lg, .5rem);box-shadow:0 8px 24px var(--hx-color-picker-panel-shadow, var(--hx-overlay-black-15, rgba(0, 0, 0, .15)));padding:var(--hx-space-4, 1rem);width:var(--hx-color-picker-width, 260px);display:flex;flex-direction:column;gap:var(--hx-space-3, .75rem);outline:none}:host([inline]) .panel{position:static;box-shadow:none;border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);border-radius:var(--hx-border-radius-lg, .5rem)}.gradient-grid{position:relative;width:100%;height:var(--hx-color-picker-grid-height, 160px);border-radius:var(--hx-border-radius-sm, .25rem);cursor:crosshair;overflow:hidden;touch-action:none;flex-shrink:0}.gradient-grid-bg{position:absolute;inset:0;background:linear-gradient(to bottom,transparent,#000),linear-gradient(to right,#fff,var(--_hue-color, hsl(0, 100%, 50%)));pointer-events:none}.gradient-thumb{position:absolute;width:12px;height:12px;border-radius:50%;border:none;box-shadow:0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)));transform:translate(-50%,-50%);pointer-events:none;top:var(--_thumb-y, 0%);left:var(--_thumb-x, 100%)}.slider-track{position:relative;width:100%;height:12px;border-radius:6px;cursor:pointer;touch-action:none;flex-shrink:0}.hue-track{background:linear-gradient(to right,red,#ff8000,#ff0,#80ff00,#0f0,#00ff80,#0ff,#0080ff,#00f,#7f00ff,#f0f,#ff0080,red)}.opacity-track{background-image:linear-gradient(to right,transparent,var(--_hue-color, hsl(0, 100%, 50%))),repeating-conic-gradient(#ccc 0% 25%,#fff 0% 50%) 0 0 / 12px 12px}.slider-thumb{position:absolute;top:50%;width:16px;height:16px;border-radius:50%;border:none;box-shadow:0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)));transform:translate(-50%,-50%);pointer-events:none;left:var(--_slider-pct, 0%);background:var(--_thumb-color, hsl(0, 100%, 50%))}.swatches{display:flex;flex-wrap:wrap;gap:var(--hx-space-1, .25rem)}.swatch-btn{width:20px;height:20px;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));cursor:pointer;padding:0;flex-shrink:0;transition:transform var(--hx-transition-fast, .15s ease)}.swatch-btn:hover{transform:scale(1.15);border-color:var( --hx-color-picker-swatch-border-hover, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)) )}.input-area{display:flex;align-items:center;gap:var(--hx-space-2, .5rem)}.format-btn{flex-shrink:0;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);background:var(--hx-color-neutral-100, #f3f4f6);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-sm, .25rem);cursor:pointer;font-size:var(--hx-font-size-xs, .75rem);color:var(--hx-color-neutral-600, #4b5563);text-transform:uppercase;font-weight:var(--hx-font-weight-semibold, 600);letter-spacing:.05em}.color-input{flex:1;min-width:0;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-sm, .25rem);font-family:var(--hx-font-family-mono, monospace);font-size:var(--hx-font-size-sm, .875rem);color:var(--hx-color-neutral-900, #111827);background:var(--hx-color-neutral-0, #fff);outline:none}.color-input:focus-visible{border-color:var(--hx-focus-ring-color, var(--hx-color-primary-500));box-shadow:0 0 0 2px color-mix(in srgb,var(--hx-focus-ring-color, var(--hx-color-primary-500)) 20%,transparent)}.input-preview{width:24px;height:24px;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));background:var(--_preview-color, #000);flex-shrink:0}@media(prefers-reduced-motion:reduce){.trigger,.swatch-btn{transition:none}}
2640
+ :host{display:inline-block;position:relative;font-family:var(--hx-font-family-sans, sans-serif);font-size:var(--hx-font-size-sm, .875rem)}:host([disabled]){pointer-events:none;opacity:var(--hx-opacity-disabled, .4)}.trigger{display:inline-flex;align-items:center;gap:var(--hx-space-2, .5rem);padding:var(--hx-space-1, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-md, .375rem);background:var(--hx-color-neutral-0, #fff);cursor:pointer;transition:border-color var(--hx-transition-fast, .15s ease)}.trigger:hover:not([disabled]){border-color:var(--hx-color-primary-500, #3b82f6)}:is(.trigger,.gradient-grid,.slider-track,.swatch-btn,.format-btn):focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, var(--hx-color-primary-500));outline-offset:var(--hx-focus-ring-offset, 2px)}.trigger-swatch{width:1.5rem;height:1.5rem;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));background:var(--_preview-color, #000);display:block;flex-shrink:0}.trigger-label{font-size:var(--hx-font-size-sm, .875rem);color:var(--hx-color-neutral-700, #374151);font-family:var(--hx-font-family-mono, monospace);white-space:nowrap}.panel{position:absolute;z-index:var(--hx-color-picker-z-index, 1000);top:calc(100% + 4px);left:0;background:var(--hx-color-neutral-0, #fff);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);border-radius:var(--hx-border-radius-lg, .5rem);box-shadow:0 8px 24px var(--hx-color-picker-panel-shadow, var(--hx-overlay-black-15, rgba(0, 0, 0, .15)));padding:var(--hx-space-4, 1rem);width:var(--hx-color-picker-width, 260px);display:flex;flex-direction:column;gap:var(--hx-space-3, .75rem);outline:none}:host([inline]) .panel{position:static;box-shadow:none;border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);border-radius:var(--hx-border-radius-lg, .5rem)}.gradient-grid{position:relative;width:100%;height:var(--hx-color-picker-grid-height, 160px);border-radius:var(--hx-border-radius-sm, .25rem);cursor:crosshair;overflow:hidden;touch-action:none;flex-shrink:0}.gradient-grid-bg{position:absolute;inset:0;background:linear-gradient(to bottom,transparent,#000),linear-gradient(to right,#fff,var(--_hue-color, hsl(0, 100%, 50%)));pointer-events:none}.gradient-thumb{position:absolute;width:12px;height:12px;border-radius:50%;border:none;box-shadow:0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)));transform:translate(-50%,-50%);pointer-events:none;top:var(--_thumb-y, 0%);left:var(--_thumb-x, 100%)}.slider-track{position:relative;width:100%;height:12px;border-radius:6px;cursor:pointer;touch-action:none;flex-shrink:0}.hue-track{background:linear-gradient(to right,red,#ff8000,#ff0,#80ff00,#0f0,#00ff80,#0ff,#0080ff,#00f,#7f00ff,#f0f,#ff0080,red)}.opacity-track{background-image:linear-gradient(to right,transparent,var(--_hue-color, hsl(0, 100%, 50%))),repeating-conic-gradient(#ccc 0% 25%,#fff 0% 50%) 0 0 / 12px 12px}.slider-thumb{position:absolute;top:50%;width:16px;height:16px;border-radius:50%;border:none;box-shadow:0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)));transform:translate(-50%,-50%);pointer-events:none;left:var(--_slider-pct, 0%);background:var(--_thumb-color, hsl(0, 100%, 50%))}.swatches{display:flex;flex-wrap:wrap;gap:var(--hx-space-1, .25rem)}.swatch-btn{width:20px;height:20px;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));cursor:pointer;padding:0;flex-shrink:0;transition:transform var(--hx-transition-fast, .15s ease)}.swatch-btn:hover{transform:scale(1.15);border-color:var( --hx-color-picker-swatch-border-hover, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)) )}.input-area{display:flex;align-items:center;gap:var(--hx-space-2, .5rem)}.format-btn{flex-shrink:0;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);background:var(--hx-color-neutral-100, #f3f4f6);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-sm, .25rem);cursor:pointer;font-size:var(--hx-font-size-xs, .75rem);color:var(--hx-color-neutral-600, #4b5563);text-transform:uppercase;font-weight:var(--hx-font-weight-semibold, 600);letter-spacing:.05em}.color-input{flex:1;min-width:0;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-sm, .25rem);font-family:var(--hx-font-family-mono, monospace);font-size:var(--hx-font-size-sm, .875rem);color:var(--hx-color-neutral-900, #111827);background:var(--hx-color-neutral-0, #fff);outline:none}.color-input:focus-visible{border-color:var(--hx-focus-ring-color, var(--hx-color-primary-500));box-shadow:0 0 0 2px color-mix(in srgb,var(--hx-focus-ring-color, var(--hx-color-primary-500)) 20%,transparent)}.input-preview{width:24px;height:24px;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));background:var(--_preview-color, #000);flex-shrink:0}@media(prefers-reduced-motion:reduce){.trigger,.swatch-btn{transition:none}}@media(forced-colors:active){.trigger{forced-color-adjust:none;background-color:Field;color:FieldText;border:2px solid ButtonText}.trigger:hover:not([disabled]){border-color:Highlight}:is(.trigger,.gradient-grid,.slider-track,.swatch-btn,.format-btn):focus-visible{outline-color:Highlight}.panel{forced-color-adjust:none;background-color:Canvas;border:2px solid CanvasText;box-shadow:none}.gradient-thumb,.slider-thumb{box-shadow:0 0 0 2px CanvasText}.swatch-btn{border:2px solid ButtonText}.swatch-btn:hover{border-color:Highlight}.color-input{forced-color-adjust:none;background-color:Field;color:FieldText;border:2px solid ButtonText}.color-input:focus-visible{border-color:Highlight;box-shadow:none}.format-btn{forced-color-adjust:none;background-color:ButtonFace;color:ButtonText;border:2px solid ButtonText}.trigger-label{color:FieldText}:host([disabled]){opacity:1}:host([disabled]) .trigger{border-color:GrayText;color:GrayText}}
2397
2641
  /* ── hx-combobox ── */
2398
- :host{display:block}:host([disabled]){opacity:var(--hx-opacity-disabled, .5);pointer-events:none}*{box-sizing:border-box}.field{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-combobox-font-family, var(--hx-font-family-sans, sans-serif));position:relative}.field__label{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-combobox-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5)}.field__required-marker{color:var(--hx-combobox-error-color, var(--hx-color-error-text, #b91c1c));font-weight:var(--hx-font-weight-bold, 700)}.field__input-wrapper{position:relative;display:flex;align-items:center;border:var(--hx-border-width-thin, 1px) solid var(--hx-combobox-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-combobox-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-combobox-bg, var(--hx-color-neutral-0, #ffffff));transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease)}.field__input-wrapper:focus-within{border-color:var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field--error .field__input-wrapper{border-color:var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545))}.field--error .field__input-wrapper:focus-within{border-color:var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field__prefix,.field__suffix{display:flex;align-items:center;padding:0 var(--hx-space-2, .5rem);color:var(--hx-color-neutral-500, #6c757d);flex-shrink:0}.field__input{flex:1;min-width:0;min-height:var(--hx-input-height-md, var(--hx-size-10, 2.5rem));border:none;background:transparent;outline:none;font-family:inherit;font-size:var(--hx-font-size-md, 1rem);line-height:var(--hx-line-height-normal, 1.5);color:var(--hx-combobox-color, var(--hx-color-neutral-800, #212529));padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem)}.field__input::placeholder{color:var(--hx-color-neutral-400, #adb5bd)}.field__input--sm{min-height:var(--hx-input-height-sm, var(--hx-size-8, 2rem));font-size:var(--hx-font-size-sm, .875rem);padding:var(--hx-space-1, .25rem) var(--hx-space-3, .75rem)}.field__input--lg{min-height:var(--hx-input-height-lg, var(--hx-size-12, 3rem));font-size:var(--hx-font-size-lg, 1.125rem);padding:var(--hx-space-3, .75rem) var(--hx-space-4, 1rem)}.field__clear-button,.field__loading-indicator{display:flex;align-items:center;justify-content:center;margin-inline-end:var(--hx-space-2, .5rem);flex-shrink:0;color:var(--hx-color-neutral-400, #adb5bd)}.field__clear-button{width:1.25rem;height:1.25rem;border:none;background:transparent;cursor:pointer;padding:0;border-radius:var(--hx-border-radius-full, 9999px);transition:color var(--hx-transition-fast, .15s ease)}.field__clear-button:hover{color:var(--hx-color-neutral-700, #343a40)}.field__clear-button:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-focus-ring-offset, 2px)}.field__loading-indicator{width:1rem;height:1rem}.field__loading-spinner{width:1rem;height:1rem;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:hx-spin .7s linear infinite}@keyframes hx-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.field__loading-spinner{animation:none}}.field__listbox{position:absolute;top:calc(100% + var(--hx-space-1, .25rem));left:0;right:0;z-index:var(--hx-z-index-dropdown, 100);background-color:var(--hx-combobox-listbox-bg, var(--hx-color-neutral-0, #ffffff));border:var(--hx-border-width-thin, 1px) solid var(--hx-combobox-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-combobox-border-radius, var(--hx-border-radius-md, .375rem));box-shadow:var( --hx-combobox-listbox-shadow, 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900, #0d1117) 12%, transparent) );max-height:var(--hx-combobox-listbox-max-height, 16rem);overflow:hidden;display:flex;flex-direction:column}.field__listbox[hidden]{display:none}.field__options{overflow-y:auto;flex:1;padding:var(--hx-space-1, .25rem) 0}.field__option{display:flex;align-items:center;gap:var(--hx-space-2, .5rem);padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-size:var(--hx-font-size-md, 1rem);color:var(--hx-combobox-color, var(--hx-color-neutral-800, #212529));cursor:pointer;user-select:none;-webkit-user-select:none;transition:background-color var(--hx-transition-fast, .15s ease)}.field__option:hover{background-color:var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #eff6ff))}.field__option--selected{background-color:var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbeafe));font-weight:var(--hx-font-weight-medium, 500)}.field__option--focused{background-color:var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #eff6ff));outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-combobox-option-focus-ring-offset, -2px)}.field__option--focused.field__option--selected{background-color:var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbeafe))}.field__option--disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}.field__option-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.field__no-options{padding:var(--hx-space-3, .75rem);text-align:center;color:var(--hx-color-neutral-400, #adb5bd);font-size:var(--hx-font-size-sm, .875rem)}.field__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.field__help-text,.field__error{font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}.field__help-text{color:var(--hx-color-neutral-500, #6c757d)}.field__error{color:var(--hx-combobox-error-color, var(--hx-color-error-text, #b91c1c))}@media(prefers-reduced-motion:reduce){.field__input-wrapper,.field__option,.field__clear-button,.field__chip-remove{transition:none}}:host([multiple]) .field__input-wrapper{flex-wrap:wrap;padding:var(--hx-space-1, .25rem);gap:var(--hx-space-1, .25rem);align-items:center}:host([multiple]) .field__input{min-width:8rem;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);flex-shrink:1}.field__chip{display:inline-flex;align-items:center;gap:var(--hx-space-1, .25rem);padding:0 var(--hx-space-1, .25rem) 0 var(--hx-space-2, .5rem);height:1.5rem;background-color:var(--hx-combobox-chip-bg, var(--hx-color-primary-100, #dbeafe));color:var(--hx-combobox-chip-color, var(--hx-color-primary-800, #1e40af));border-radius:var(--hx-border-radius-full, 9999px);font-size:var(--hx-font-size-sm, .875rem);white-space:nowrap;max-width:12rem;flex-shrink:0}.field__chip-label{overflow:hidden;text-overflow:ellipsis;max-width:8rem}.field__chip-remove{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1rem;height:1rem;border:none;background:none;cursor:pointer;padding:0;color:inherit;opacity:.7;border-radius:50%;line-height:1;transition:opacity var(--hx-transition-fast, .15s ease)}.field__chip-remove:hover{opacity:1;background-color:var(--hx-combobox-chip-remove-hover-bg, var(--hx-color-primary-200, #bfdbfe))}.field__chip-remove:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-focus-ring-offset, 2px);opacity:1}
2642
+ :host{display:block}:host([disabled]){opacity:var(--hx-opacity-disabled, .5);pointer-events:none}*{box-sizing:border-box}.field{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-combobox-font-family, var(--hx-font-family-sans, sans-serif));position:relative}.field__label{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-combobox-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5)}.field__required-marker{color:var(--hx-combobox-error-color, var(--hx-color-error-text, #b91c1c));font-weight:var(--hx-font-weight-bold, 700)}.field__input-wrapper{position:relative;display:flex;align-items:center;border:var(--hx-border-width-thin, 1px) solid var(--hx-combobox-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-combobox-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-combobox-bg, var(--hx-color-neutral-0, #ffffff));transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease)}.field__input-wrapper:focus-within{border-color:var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field--error .field__input-wrapper{border-color:var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545))}.field--error .field__input-wrapper:focus-within{border-color:var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field__prefix,.field__suffix{display:flex;align-items:center;padding:0 var(--hx-space-2, .5rem);color:var(--hx-color-neutral-500, #6c757d);flex-shrink:0}.field__input{flex:1;min-width:0;min-height:var(--hx-input-height-md, var(--hx-size-10, 2.5rem));border:none;background:transparent;outline:none;font-family:inherit;font-size:var(--hx-font-size-md, 1rem);line-height:var(--hx-line-height-normal, 1.5);color:var(--hx-combobox-color, var(--hx-color-neutral-800, #212529));padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem)}.field__input::placeholder{color:var(--hx-color-neutral-400, #adb5bd)}.field__input--sm{min-height:var(--hx-input-height-sm, var(--hx-size-8, 2rem));font-size:var(--hx-font-size-sm, .875rem);padding:var(--hx-space-1, .25rem) var(--hx-space-3, .75rem)}.field__input--lg{min-height:var(--hx-input-height-lg, var(--hx-size-12, 3rem));font-size:var(--hx-font-size-lg, 1.125rem);padding:var(--hx-space-3, .75rem) var(--hx-space-4, 1rem)}.field__clear-button,.field__loading-indicator{display:flex;align-items:center;justify-content:center;margin-inline-end:var(--hx-space-2, .5rem);flex-shrink:0;color:var(--hx-color-neutral-400, #adb5bd)}.field__clear-button{width:1.25rem;height:1.25rem;border:none;background:transparent;cursor:pointer;padding:0;border-radius:var(--hx-border-radius-full, 9999px);transition:color var(--hx-transition-fast, .15s ease)}.field__clear-button:hover{color:var(--hx-color-neutral-700, #343a40)}.field__clear-button:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-focus-ring-offset, 2px)}.field__loading-indicator{width:1rem;height:1rem}.field__loading-spinner{width:1rem;height:1rem;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:hx-spin .7s linear infinite}@keyframes hx-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.field__loading-spinner{animation:none}}.field__listbox{position:absolute;top:calc(100% + var(--hx-space-1, .25rem));left:0;right:0;z-index:var(--hx-z-index-dropdown, 100);background-color:var(--hx-combobox-listbox-bg, var(--hx-color-neutral-0, #ffffff));border:var(--hx-border-width-thin, 1px) solid var(--hx-combobox-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-combobox-border-radius, var(--hx-border-radius-md, .375rem));box-shadow:var( --hx-combobox-listbox-shadow, 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900, #0d1117) 12%, transparent) );max-height:var(--hx-combobox-listbox-max-height, 16rem);overflow:hidden;display:flex;flex-direction:column}.field__listbox[hidden]{display:none}.field__options{overflow-y:auto;flex:1;padding:var(--hx-space-1, .25rem) 0}.field__option{display:flex;align-items:center;gap:var(--hx-space-2, .5rem);padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-size:var(--hx-font-size-md, 1rem);color:var(--hx-combobox-color, var(--hx-color-neutral-800, #212529));cursor:pointer;user-select:none;-webkit-user-select:none;transition:background-color var(--hx-transition-fast, .15s ease)}.field__option:hover{background-color:var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #eff6ff))}.field__option--selected{background-color:var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbeafe));font-weight:var(--hx-font-weight-medium, 500)}.field__option--focused{background-color:var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #eff6ff));outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-combobox-option-focus-ring-offset, -2px)}.field__option--focused.field__option--selected{background-color:var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbeafe))}.field__option--disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}.field__option-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.field__no-options{padding:var(--hx-space-3, .75rem);text-align:center;color:var(--hx-color-neutral-400, #adb5bd);font-size:var(--hx-font-size-sm, .875rem)}.field__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.field__help-text,.field__error{font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}.field__help-text{color:var(--hx-color-neutral-500, #6c757d)}.field__error{color:var(--hx-combobox-error-color, var(--hx-color-error-text, #b91c1c))}@media(prefers-reduced-motion:reduce){.field__input-wrapper,.field__option,.field__clear-button,.field__chip-remove{transition:none}}@media(forced-colors:active){.field__input-wrapper{forced-color-adjust:none;background-color:Field;color:FieldText;border:2px solid ButtonText}.field__input{color:FieldText}.field__input::placeholder{color:GrayText}.field__input-wrapper:focus-within{border-color:Highlight;box-shadow:none}.field__listbox{forced-color-adjust:none;background-color:Canvas;border:2px solid CanvasText;box-shadow:none}.field__option{color:CanvasText}.field__option:hover{background-color:Highlight;color:HighlightText}.field__option--selected{background-color:Highlight;color:HighlightText}.field__option--focused{outline-color:Highlight;background-color:Highlight;color:HighlightText}.field__option--disabled{color:GrayText;opacity:1}.field__chip{forced-color-adjust:none;background-color:Highlight;color:HighlightText;border:1px solid HighlightText}.field__chip-remove:focus-visible{outline-color:Highlight}.field__clear-button:focus-visible{outline-color:Highlight}.field--error .field__input-wrapper{border-color:LinkText}:host([disabled]){opacity:1}:host([disabled]) .field__input-wrapper{border-color:GrayText;color:GrayText}:host([disabled]) .field__input{color:GrayText}.field__label{color:CanvasText}.field__help-text{color:GrayText}.field__error{color:LinkText}}:host([multiple]) .field__input-wrapper{flex-wrap:wrap;padding:var(--hx-space-1, .25rem);gap:var(--hx-space-1, .25rem);align-items:center}:host([multiple]) .field__input{min-width:8rem;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);flex-shrink:1}.field__chip{display:inline-flex;align-items:center;gap:var(--hx-space-1, .25rem);padding:0 var(--hx-space-1, .25rem) 0 var(--hx-space-2, .5rem);height:1.5rem;background-color:var(--hx-combobox-chip-bg, var(--hx-color-primary-100, #dbeafe));color:var(--hx-combobox-chip-color, var(--hx-color-primary-800, #1e40af));border-radius:var(--hx-border-radius-full, 9999px);font-size:var(--hx-font-size-sm, .875rem);white-space:nowrap;max-width:12rem;flex-shrink:0}.field__chip-label{overflow:hidden;text-overflow:ellipsis;max-width:8rem}.field__chip-remove{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1rem;height:1rem;border:none;background:none;cursor:pointer;padding:0;color:inherit;opacity:.7;border-radius:50%;line-height:1;transition:opacity var(--hx-transition-fast, .15s ease)}.field__chip-remove:hover{opacity:1;background-color:var(--hx-combobox-chip-remove-hover-bg, var(--hx-color-primary-200, #bfdbfe))}.field__chip-remove:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-focus-ring-offset, 2px);opacity:1}
2399
2643
  /* ── hx-container ── */
2400
2644
  :host {
2401
2645
  display: block;
@@ -2593,6 +2837,34 @@
2593
2837
  transition: none;
2594
2838
  }
2595
2839
  }
2840
+
2841
+ /* ─── High Contrast Mode (forced-colors) ─── */
2842
+
2843
+ @media (forced-colors: active) {
2844
+ .button {
2845
+ forced-color-adjust: none;
2846
+ background-color: ButtonFace;
2847
+ color: ButtonText;
2848
+ border: 2px solid ButtonText;
2849
+ }
2850
+
2851
+ .button:focus-visible {
2852
+ outline: 3px solid Highlight;
2853
+ outline-offset: 2px;
2854
+ }
2855
+
2856
+ .button[disabled] {
2857
+ background-color: ButtonFace;
2858
+ color: GrayText;
2859
+ border-color: GrayText;
2860
+ opacity: 1;
2861
+ }
2862
+
2863
+ .button--copied {
2864
+ border-color: Highlight;
2865
+ color: Highlight;
2866
+ }
2867
+ }
2596
2868
  /* ── hx-counter ── */
2597
2869
  :host {
2598
2870
  display: inline-block;
@@ -2644,6 +2916,9 @@
2644
2916
  will see the final value immediately via the component logic */
2645
2917
  }
2646
2918
  }
2919
+
2920
+ /* ─── Forced Colors (Windows High Contrast) ─── */
2921
+ /* Counter is text-only — forced-color-adjust: auto (default) is sufficient. */
2647
2922
  /* ── hx-data-table ── */
2648
2923
  :host {
2649
2924
  display: block;
@@ -2851,6 +3126,29 @@
2851
3126
  color: var(--hx-data-table-empty-color, var(--hx-color-neutral-600, #475569));
2852
3127
  padding: var(--hx-space-8, 2rem) var(--hx-space-4, 1rem);
2853
3128
  }
3129
+
3130
+ /* ─── Forced Colors (Windows High Contrast) ─── */
3131
+
3132
+ @media (forced-colors: active) {
3133
+ table {
3134
+ border: 1px solid CanvasText;
3135
+ }
3136
+
3137
+ th,
3138
+ td {
3139
+ border-bottom-color: CanvasText;
3140
+ }
3141
+
3142
+ tbody tr[aria-selected='true'] {
3143
+ outline: 2px solid Highlight;
3144
+ }
3145
+
3146
+ .skeleton-cell {
3147
+ animation: none;
3148
+ border: 1px solid GrayText;
3149
+ background: none;
3150
+ }
3151
+ }
2854
3152
  /* ── hx-date-picker ── */
2855
3153
  :host{display:block;position:relative}:host([disabled]){opacity:var(--hx-opacity-disabled, .5);pointer-events:none}*{box-sizing:border-box}.field{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-date-picker-font-family, var(--hx-font-family-sans, sans-serif));position:relative}.field__label-wrapper{display:contents}.field__label{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-date-picker-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5)}.field__required-marker{color:var(--hx-date-picker-error-color, var(--hx-color-error-text, #b91c1c));font-weight:var(--hx-font-weight-bold, 700)}.field__input-wrapper{display:flex;align-items:stretch;border:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-date-picker-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-date-picker-bg, var(--hx-color-neutral-0, #ffffff));transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease);overflow:hidden}.field__input-wrapper:focus-within{border-color:var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field--error .field__input-wrapper{border-color:var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545))}.field--error .field__input-wrapper:focus-within{border-color:var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field__input{flex:1;border:none;outline:none;background:transparent;padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-family:inherit;font-size:var(--hx-font-size-md, 1rem);color:var(--hx-date-picker-color, var(--hx-color-neutral-800, #212529));line-height:var(--hx-line-height-normal, 1.5);min-height:var(--hx-size-10, 2.5rem);width:100%;cursor:default}.field__input::placeholder{color:var(--hx-color-neutral-400, #adb5bd)}.field__input:disabled{cursor:not-allowed}.field__trigger{display:flex;align-items:center;justify-content:center;padding:0 var(--hx-space-3, .75rem);border:none;border-left:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-border-color, var(--hx-color-neutral-300, #ced4da));background:transparent;color:var(--hx-date-picker-trigger-color, var(--hx-color-neutral-500, #6c757d));cursor:pointer;flex-shrink:0;transition:color var(--hx-transition-fast, .15s ease);outline:none}.field__trigger:focus-visible{color:var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));background-color:color-mix(in srgb,var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) 8%,transparent)}.field__trigger:hover:not(:disabled){color:var(--hx-date-picker-trigger-hover-color, var(--hx-color-neutral-700, #343a40));background-color:color-mix(in srgb,var(--hx-color-neutral-900, #212529) 4%,transparent)}.field__trigger:disabled{cursor:not-allowed}.calendar{position:absolute;top:calc(100% + var(--hx-space-1, .25rem));left:0;z-index:var(--hx-z-index-dropdown, 1000);min-width:var(--hx-date-picker-calendar-min-width, 18rem);background-color:var(--hx-date-picker-calendar-bg, var(--hx-color-neutral-0, #ffffff));border:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-calendar-border-color, var(--hx-color-neutral-200, #e9ecef));border-radius:var(--hx-date-picker-calendar-border-radius, var(--hx-border-radius-lg, .5rem));box-shadow:var( --hx-date-picker-calendar-shadow, 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1) );padding:var(--hx-space-3, .75rem);outline:none}@media(prefers-reduced-motion:no-preference){.calendar{animation:calendar-appear var(--hx-transition-fast, .15s ease) forwards}}@keyframes calendar-appear{0%{opacity:0;transform:translateY(-.25rem)}to{opacity:1;transform:translateY(0)}}.calendar__nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hx-space-3, .75rem)}:is(.calendar__nav-btn,.calendar__day,.calendar__day-cell,.calendar__weekday){display:flex;align-items:center;justify-content:center}:is(.calendar__nav-btn,.calendar__day){width:var(--hx-touch-target-min, 2.75rem);height:var(--hx-touch-target-min, 2.75rem);border:none;border-radius:var(--hx-border-radius-sm, .25rem);background:transparent;cursor:pointer;outline:none;transition:background-color var(--hx-transition-fast, .15s ease),color var(--hx-transition-fast, .15s ease)}.calendar__nav-btn{color:var(--hx-color-neutral-600, #495057);font-size:var(--hx-font-size-lg, 1.125rem);line-height:1}.calendar__nav-btn:hover{background-color:var(--hx-color-neutral-100, #f8f9fa);color:var(--hx-color-neutral-900, #212529)}:is(.calendar__nav-btn,.calendar__day):focus-visible{box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));z-index:1}.calendar__nav-btn:disabled{opacity:var(--hx-opacity-disabled, .4);cursor:not-allowed;pointer-events:none}.calendar__month-label{font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-semibold, 600);color:var(--hx-color-neutral-800, #212529);flex:1;text-align:center}.calendar__grid{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem)}.calendar__row{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--hx-space-1, .25rem)}.calendar__weekday{height:var(--hx-size-8, 2rem);font-size:var(--hx-font-size-xs, .75rem);font-weight:var(--hx-font-weight-semibold, 600);color:var(--hx-color-neutral-500, #6c757d);text-transform:uppercase;letter-spacing:.05em}.calendar__day{color:var(--hx-color-neutral-800, #212529);font-size:var(--hx-font-size-sm, .875rem);font-family:inherit;position:relative}.calendar__day:hover:not(.calendar__day--disabled):not(.calendar__day--selected){background-color:var(--hx-color-neutral-100, #f8f9fa);color:var(--hx-color-neutral-900, #212529)}.calendar__day--selected{background-color:var(--hx-date-picker-selected-bg, var(--hx-color-primary-500, #2563eb));color:var(--hx-date-picker-selected-color, var(--hx-color-neutral-0, #ffffff));font-weight:var(--hx-font-weight-semibold, 600)}.calendar__day--selected:hover{background-color:var(--hx-date-picker-selected-hover-bg, var(--hx-color-primary-600, #1d4ed8))}.calendar__day--today:not(.calendar__day--selected){font-weight:var(--hx-font-weight-bold, 700);color:var(--hx-date-picker-today-color, var(--hx-color-primary-600, #1d4ed8))}.calendar__day--today:not(.calendar__day--selected):after{content:"";position:absolute;bottom:.2rem;left:50%;transform:translate(-50%);width:.25rem;height:.25rem;border-radius:50%;background-color:currentColor}.calendar__day--disabled{opacity:var(--hx-opacity-disabled, .4);cursor:not-allowed;pointer-events:none}.calendar__live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.field__help-text,.field__error{font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}.field__help-text{color:var(--hx-color-neutral-500, #6c757d)}.field__error{color:var(--hx-date-picker-error-color, var(--hx-color-error-text, #b91c1c))}@media(prefers-reduced-motion:reduce){.field__input-wrapper,.field__trigger,.calendar__nav-btn,.calendar__day{transition:none}}@media(forced-colors:active){.field__input-wrapper{border:1px solid ButtonText}.field__input-wrapper:focus-within{outline:2px solid Highlight;outline-offset:1px;box-shadow:none}:is(.calendar__day:focus-visible,.calendar__nav-btn:focus-visible){outline:2px solid Highlight;box-shadow:none}.calendar__day--selected{background-color:Highlight;color:HighlightText;border:1px solid Highlight}.calendar__day--today:not(.calendar__day--selected){border:2px solid LinkText}.calendar__day--today:not(.calendar__day--selected):after{display:none}.calendar__day--disabled{color:GrayText}.field--error .field__input-wrapper{border-color:LinkText}}
2856
3154
  /* ── hx-dialog ── */
@@ -3043,6 +3341,27 @@
3043
3341
  white-space: nowrap;
3044
3342
  border: 0;
3045
3343
  }
3344
+
3345
+ /* ─── Forced Colors (Windows High Contrast) ─── */
3346
+
3347
+ @media (forced-colors: active) {
3348
+ .dialog {
3349
+ border: 1px solid CanvasText;
3350
+ }
3351
+
3352
+ .dialog__header {
3353
+ border-bottom-color: CanvasText;
3354
+ }
3355
+
3356
+ .dialog__footer {
3357
+ border-top-color: CanvasText;
3358
+ }
3359
+
3360
+ .dialog__close-btn {
3361
+ color: ButtonText;
3362
+ border: 1px solid ButtonText;
3363
+ }
3364
+ }
3046
3365
  /* ── hx-divider ── */
3047
3366
  :host {
3048
3367
  display: block;
@@ -3130,6 +3449,14 @@
3130
3449
  line-height: var(--hx-line-height-tight, 1.25);
3131
3450
  white-space: nowrap;
3132
3451
  }
3452
+
3453
+ /* ─── Forced Colors (Windows High Contrast) ─── */
3454
+
3455
+ @media (forced-colors: active) {
3456
+ .divider__line {
3457
+ background-color: CanvasText;
3458
+ }
3459
+ }
3133
3460
  /* ── hx-drawer ── */
3134
3461
  /* P2-03: Explicit [hidden] rule to survive CSS resets that may override the UA stylesheet. */
3135
3462
  [hidden] {
@@ -3392,6 +3719,27 @@
3392
3719
  var(--hx-drawer-footer-border-color, var(--hx-color-neutral-200));
3393
3720
  flex-shrink: 0;
3394
3721
  }
3722
+
3723
+ /* ─── Forced Colors (Windows High Contrast) ─── */
3724
+
3725
+ @media (forced-colors: active) {
3726
+ .drawer-panel {
3727
+ border: 1px solid CanvasText;
3728
+ }
3729
+
3730
+ .drawer-header {
3731
+ border-bottom-color: CanvasText;
3732
+ }
3733
+
3734
+ .drawer-footer {
3735
+ border-top-color: CanvasText;
3736
+ }
3737
+
3738
+ .drawer-close-button {
3739
+ color: ButtonText;
3740
+ border: 1px solid ButtonText;
3741
+ }
3742
+ }
3395
3743
  /* ── hx-dropdown ── */
3396
3744
  :host {
3397
3745
  display: inline-block;
@@ -3438,13 +3786,22 @@
3438
3786
  transition: none;
3439
3787
  }
3440
3788
  }
3441
- /* ── hx-field ── */
3442
- :host {
3443
- display: block;
3444
- }
3445
3789
 
3446
- :host([disabled]) {
3447
- opacity: var(--hx-opacity-disabled, 0.5);
3790
+ /* ─── High Contrast Mode (forced-colors) ─── */
3791
+
3792
+ @media (forced-colors: active) {
3793
+ [part='panel'] {
3794
+ background-color: Canvas;
3795
+ border: 2px solid CanvasText;
3796
+ }
3797
+ }
3798
+ /* ── hx-field ── */
3799
+ :host {
3800
+ display: block;
3801
+ }
3802
+
3803
+ :host([disabled]) {
3804
+ opacity: var(--hx-opacity-disabled, 0.5);
3448
3805
  pointer-events: none;
3449
3806
  }
3450
3807
 
@@ -3557,6 +3914,42 @@
3557
3914
  outline-offset: var(--hx-focus-ring-offset, 2px);
3558
3915
  border-radius: var(--hx-border-radius-sm, 0.25rem);
3559
3916
  }
3917
+
3918
+ /* ─── High Contrast Mode (forced-colors) ─── */
3919
+
3920
+ @media (forced-colors: active) {
3921
+ .field__label {
3922
+ color: CanvasText;
3923
+ }
3924
+
3925
+ .field__required-marker {
3926
+ color: LinkText;
3927
+ }
3928
+
3929
+ .field--error .field__label {
3930
+ color: LinkText;
3931
+ }
3932
+
3933
+ .field--error .field__control {
3934
+ outline-color: LinkText;
3935
+ }
3936
+
3937
+ :host([disabled]) {
3938
+ opacity: 1;
3939
+ }
3940
+
3941
+ :host([disabled]) .field__label {
3942
+ color: GrayText;
3943
+ }
3944
+
3945
+ .field__help-text {
3946
+ color: GrayText;
3947
+ }
3948
+
3949
+ .field__error {
3950
+ color: LinkText;
3951
+ }
3952
+ }
3560
3953
  /* ── hx-field-label ── */
3561
3954
  :host {
3562
3955
  display: block;
@@ -3584,6 +3977,22 @@
3584
3977
  color: var(--hx-color-neutral-500, #6b7280);
3585
3978
  }
3586
3979
 
3980
+ /* ─── High Contrast Mode (forced-colors) ─── */
3981
+
3982
+ @media (forced-colors: active) {
3983
+ .label {
3984
+ color: CanvasText;
3985
+ }
3986
+
3987
+ .required-indicator {
3988
+ color: LinkText;
3989
+ }
3990
+
3991
+ .optional-indicator {
3992
+ color: GrayText;
3993
+ }
3994
+ }
3995
+
3587
3996
  .visually-hidden {
3588
3997
  position: absolute;
3589
3998
  width: 1px;
@@ -3958,6 +4367,26 @@ export const helixGridItemStyles = css`
3958
4367
  .help-text--success {
3959
4368
  --hx-help-text-color: var(--hx-color-success-700, #15803d);
3960
4369
  }
4370
+
4371
+ /* ─── High Contrast Mode (forced-colors) ─── */
4372
+
4373
+ @media (forced-colors: active) {
4374
+ .help-text {
4375
+ color: GrayText;
4376
+ }
4377
+
4378
+ .help-text--error {
4379
+ color: LinkText;
4380
+ }
4381
+
4382
+ .help-text--warning {
4383
+ color: CanvasText;
4384
+ }
4385
+
4386
+ .help-text--success {
4387
+ color: CanvasText;
4388
+ }
4389
+ }
3961
4390
  /* ── hx-icon ── */
3962
4391
  :host {
3963
4392
  display: inline-flex;
@@ -4031,6 +4460,14 @@ export const helixGridItemStyles = css`
4031
4460
  fill: currentColor;
4032
4461
  display: block;
4033
4462
  }
4463
+
4464
+ /* ─── Forced Colors (Windows High Contrast) ─── */
4465
+
4466
+ @media (forced-colors: active) {
4467
+ :host {
4468
+ color: CanvasText;
4469
+ }
4470
+ }
4034
4471
  /* ── hx-icon-button ── */
4035
4472
  :host {
4036
4473
  display: inline-block;
@@ -4183,6 +4620,33 @@ export const helixGridItemStyles = css`
4183
4620
  transition: none;
4184
4621
  }
4185
4622
  }
4623
+
4624
+ /* ─── High Contrast Mode (forced-colors) ─── */
4625
+
4626
+ @media (forced-colors: active) {
4627
+ .button {
4628
+ forced-color-adjust: none;
4629
+ background-color: ButtonFace;
4630
+ color: ButtonText;
4631
+ border: 2px solid ButtonText;
4632
+ }
4633
+
4634
+ .button:focus-visible {
4635
+ outline: 3px solid Highlight;
4636
+ outline-offset: 2px;
4637
+ }
4638
+
4639
+ .button[disabled] {
4640
+ background-color: ButtonFace;
4641
+ color: GrayText;
4642
+ border-color: GrayText;
4643
+ opacity: 1;
4644
+ }
4645
+
4646
+ :host([disabled]) {
4647
+ opacity: 1;
4648
+ }
4649
+ }
4186
4650
  /* ── hx-image ── */
4187
4651
  :host {
4188
4652
  display: block;
@@ -4224,6 +4688,14 @@ export const helixGridItemStyles = css`
4224
4688
  .image__caption--visible {
4225
4689
  display: block;
4226
4690
  }
4691
+
4692
+ /* ─── Forced Colors (Windows High Contrast) ─── */
4693
+
4694
+ @media (forced-colors: active) {
4695
+ .image__container--error {
4696
+ border: 1px solid GrayText;
4697
+ }
4698
+ }
4227
4699
  /* ── hx-link ── */
4228
4700
  :host {
4229
4701
  display: inline;
@@ -4316,6 +4788,24 @@ export const helixGridItemStyles = css`
4316
4788
  }
4317
4789
  }
4318
4790
 
4791
+ /* ─── High Contrast Mode (forced-colors) ─── */
4792
+
4793
+ @media (forced-colors: active) {
4794
+ .link {
4795
+ forced-color-adjust: none;
4796
+ color: LinkText;
4797
+ }
4798
+
4799
+ .link:focus-visible {
4800
+ outline: 3px solid Highlight;
4801
+ outline-offset: 2px;
4802
+ }
4803
+
4804
+ .link--disabled {
4805
+ color: GrayText;
4806
+ }
4807
+ }
4808
+
4319
4809
  /* --- Visually hidden (sr-only) --- */
4320
4810
 
4321
4811
  .sr-only {
@@ -4400,6 +4890,15 @@ export const helixGridItemStyles = css`
4400
4890
  overflow-y: auto;
4401
4891
  outline: none;
4402
4892
  }
4893
+
4894
+ /* ─── High Contrast Mode (forced-colors) ─── */
4895
+
4896
+ @media (forced-colors: active) {
4897
+ .menu {
4898
+ background-color: Canvas;
4899
+ border: 2px solid CanvasText;
4900
+ }
4901
+ }
4403
4902
  /* ── hx-meter ── */
4404
4903
  :host {
4405
4904
  display: block;
@@ -4514,6 +5013,19 @@ export const helixGridItemStyles = css`
4514
5013
  white-space: nowrap;
4515
5014
  border: 0;
4516
5015
  }
5016
+
5017
+ /* ─── Forced Colors (Windows High Contrast) ─── */
5018
+
5019
+ @media (forced-colors: active) {
5020
+ .meter__track {
5021
+ border: 1px solid CanvasText;
5022
+ }
5023
+
5024
+ .meter__indicator {
5025
+ forced-color-adjust: none;
5026
+ background-color: Highlight;
5027
+ }
5028
+ }
4517
5029
  /* ── hx-nav ── */
4518
5030
  :host {
4519
5031
  display: block;
@@ -4756,6 +5268,22 @@ export const helixGridItemStyles = css`
4756
5268
  animation: none;
4757
5269
  }
4758
5270
  }
5271
+
5272
+ /* ─── Forced Colors (Windows High Contrast) ─── */
5273
+
5274
+ @media (forced-colors: active) {
5275
+ [part='nav'] {
5276
+ border: 1px solid CanvasText;
5277
+ }
5278
+
5279
+ .nav__link--active {
5280
+ border: 1px solid Highlight;
5281
+ }
5282
+
5283
+ .nav__submenu {
5284
+ border: 1px solid CanvasText;
5285
+ }
5286
+ }
4759
5287
  /* ── hx-number-input ── */
4760
5288
  :host {
4761
5289
  display: block;
@@ -5002,6 +5530,84 @@ export const helixGridItemStyles = css`
5002
5530
  transition: none;
5003
5531
  }
5004
5532
  }
5533
+
5534
+ /* ─── High Contrast Mode (forced-colors) ─── */
5535
+
5536
+ @media (forced-colors: active) {
5537
+ .field__input-wrapper {
5538
+ forced-color-adjust: none;
5539
+ background-color: Field;
5540
+ color: FieldText;
5541
+ border: 2px solid ButtonText;
5542
+ }
5543
+
5544
+ .field__input {
5545
+ color: FieldText;
5546
+ }
5547
+
5548
+ .field__input::placeholder {
5549
+ color: GrayText;
5550
+ }
5551
+
5552
+ .field__input-wrapper:focus-within {
5553
+ border-color: Highlight;
5554
+ box-shadow: none;
5555
+ }
5556
+
5557
+ .field__stepper {
5558
+ border-color: ButtonText;
5559
+ }
5560
+
5561
+ .field__stepper-btn {
5562
+ forced-color-adjust: none;
5563
+ background-color: ButtonFace;
5564
+ color: ButtonText;
5565
+ border-color: ButtonText;
5566
+ }
5567
+
5568
+ .field__stepper-btn:hover:not(:disabled) {
5569
+ background-color: Highlight;
5570
+ color: HighlightText;
5571
+ }
5572
+
5573
+ .field__stepper-btn:focus-visible {
5574
+ outline-color: Highlight;
5575
+ }
5576
+
5577
+ .field__stepper-btn:disabled {
5578
+ color: GrayText;
5579
+ opacity: 1;
5580
+ }
5581
+
5582
+ :host([disabled]) {
5583
+ opacity: 1;
5584
+ }
5585
+
5586
+ :host([disabled]) .field__input-wrapper {
5587
+ border-color: GrayText;
5588
+ color: GrayText;
5589
+ }
5590
+
5591
+ :host([disabled]) .field__input {
5592
+ color: GrayText;
5593
+ }
5594
+
5595
+ .field--error .field__input-wrapper {
5596
+ border-color: LinkText;
5597
+ }
5598
+
5599
+ .field__label {
5600
+ color: CanvasText;
5601
+ }
5602
+
5603
+ .field__help-text {
5604
+ color: GrayText;
5605
+ }
5606
+
5607
+ .field__error {
5608
+ color: LinkText;
5609
+ }
5610
+ }
5005
5611
  /* ── hx-overflow-menu ── */
5006
5612
  :host {
5007
5613
  display: inline-block;
@@ -5135,6 +5741,37 @@ export const helixGridItemStyles = css`
5135
5741
  transition: none;
5136
5742
  }
5137
5743
  }
5744
+
5745
+ /* ─── High Contrast Mode (forced-colors) ─── */
5746
+
5747
+ @media (forced-colors: active) {
5748
+ .trigger {
5749
+ forced-color-adjust: none;
5750
+ background-color: ButtonFace;
5751
+ color: ButtonText;
5752
+ border: 2px solid ButtonText;
5753
+ }
5754
+
5755
+ .trigger:focus-visible {
5756
+ outline: 3px solid Highlight;
5757
+ outline-offset: 2px;
5758
+ }
5759
+
5760
+ .trigger[disabled] {
5761
+ color: GrayText;
5762
+ border-color: GrayText;
5763
+ opacity: 1;
5764
+ }
5765
+
5766
+ :host([disabled]) {
5767
+ opacity: 1;
5768
+ }
5769
+
5770
+ .panel {
5771
+ background-color: Canvas;
5772
+ border: 2px solid CanvasText;
5773
+ }
5774
+ }
5138
5775
  /* ── hx-pagination ── */
5139
5776
  :host {
5140
5777
  display: block;
@@ -5467,6 +6104,26 @@ export const helixGridItemStyles = css`
5467
6104
  animation: none !important;
5468
6105
  }
5469
6106
  }
6107
+
6108
+ /* ─── Forced Colors (Windows High Contrast) ─── */
6109
+
6110
+ @media (forced-colors: active) {
6111
+ .banner {
6112
+ border-bottom-color: CanvasText;
6113
+ }
6114
+
6115
+ :host([aria-invalid='true']) .banner {
6116
+ border-bottom-color: LinkText;
6117
+ }
6118
+
6119
+ :host([aria-invalid='true']) .banner::before {
6120
+ background-color: LinkText;
6121
+ }
6122
+
6123
+ .banner__photo-area {
6124
+ border: 1px solid CanvasText;
6125
+ }
6126
+ }
5470
6127
  /* ── hx-phi-field ── */
5471
6128
  :host {
5472
6129
  display: inline-flex;
@@ -5487,7 +6144,7 @@ export const helixGridItemStyles = css`
5487
6144
  user-select: none;
5488
6145
  -webkit-user-select: none;
5489
6146
  color: var(--hx-phi-field-masked-color, var(--hx-color-neutral-500, #6b7280));
5490
- letter-spacing: 0.1em;
6147
+ letter-spacing: var(--hx-phi-field-letter-spacing, 0.1em);
5491
6148
  }
5492
6149
 
5493
6150
  .phi-field__value--revealed {
@@ -5639,6 +6296,18 @@ export const helixGridItemStyles = css`
5639
6296
  transition: none;
5640
6297
  }
5641
6298
  }
6299
+
6300
+ /* ─── Forced Colors (Windows High Contrast) ─── */
6301
+
6302
+ @media (forced-colors: active) {
6303
+ [part='body'] {
6304
+ border-color: CanvasText;
6305
+ }
6306
+
6307
+ [part='arrow'] {
6308
+ border-color: CanvasText;
6309
+ }
6310
+ }
5642
6311
  /* ── hx-popup ── */
5643
6312
  :host {
5644
6313
  display: inline-block;
@@ -5670,6 +6339,18 @@ export const helixGridItemStyles = css`
5670
6339
  transition: none;
5671
6340
  }
5672
6341
  }
6342
+
6343
+ /* ─── Forced Colors (Windows High Contrast) ─── */
6344
+
6345
+ @media (forced-colors: active) {
6346
+ [part='popup'] {
6347
+ border: 1px solid CanvasText;
6348
+ }
6349
+
6350
+ [part='arrow'] {
6351
+ border: 1px solid CanvasText;
6352
+ }
6353
+ }
5673
6354
  /* ── hx-progress-bar ── */
5674
6355
  :host {
5675
6356
  display: block;
@@ -6022,6 +6703,38 @@ export const helixGridItemStyles = css`
6022
6703
  color: var(--hx-radio-group-error-color, var(--hx-color-error-text, #b91c1c));
6023
6704
  line-height: var(--hx-line-height-normal, 1.5);
6024
6705
  }
6706
+
6707
+ /* ─── High Contrast Mode (forced-colors) ─── */
6708
+
6709
+ @media (forced-colors: active) {
6710
+ .fieldset {
6711
+ border: none;
6712
+ }
6713
+
6714
+ .fieldset__legend {
6715
+ color: CanvasText;
6716
+ }
6717
+
6718
+ .fieldset--error .fieldset__legend {
6719
+ color: LinkText;
6720
+ }
6721
+
6722
+ :host([disabled]) {
6723
+ opacity: 1;
6724
+ }
6725
+
6726
+ :host([disabled]) .fieldset__legend {
6727
+ color: GrayText;
6728
+ }
6729
+
6730
+ .fieldset__help-text {
6731
+ color: GrayText;
6732
+ }
6733
+
6734
+ .fieldset__error {
6735
+ color: LinkText;
6736
+ }
6737
+ }
6025
6738
  /* ── hx-rating ── */
6026
6739
  :host {
6027
6740
  display: inline-block;
@@ -6118,6 +6831,45 @@ export const helixGridItemStyles = css`
6118
6831
  transition: none;
6119
6832
  }
6120
6833
  }
6834
+
6835
+ /* ─── High Contrast Mode (forced-colors) ─── */
6836
+
6837
+ @media (forced-colors: active) {
6838
+ .symbol {
6839
+ forced-color-adjust: none;
6840
+ color: ButtonText;
6841
+ }
6842
+
6843
+ .symbol:focus-visible {
6844
+ outline: 3px solid Highlight;
6845
+ outline-offset: 2px;
6846
+ }
6847
+
6848
+ .symbol--full,
6849
+ .symbol--half {
6850
+ color: Highlight;
6851
+ }
6852
+
6853
+ .star-half__empty {
6854
+ color: ButtonText;
6855
+ }
6856
+
6857
+ .base:not(.base--readonly) .symbol:hover {
6858
+ color: Highlight;
6859
+ }
6860
+
6861
+ .symbol--disabled {
6862
+ color: GrayText;
6863
+ }
6864
+
6865
+ :host([disabled]) {
6866
+ opacity: 1;
6867
+ }
6868
+
6869
+ :host([disabled]) .symbol {
6870
+ color: GrayText;
6871
+ }
6872
+ }
6121
6873
  /* ── hx-select ── */
6122
6874
  /* ─── 3-tier token cascade: component → semantic → hardcoded fallback ─── */
6123
6875
  :host {
@@ -6411,6 +7163,88 @@ export const helixGridItemStyles = css`
6411
7163
  transition: none;
6412
7164
  }
6413
7165
  }
7166
+
7167
+ /* ─── High Contrast Mode (forced-colors) ─── */
7168
+
7169
+ @media (forced-colors: active) {
7170
+ .field__trigger {
7171
+ forced-color-adjust: none;
7172
+ background-color: Field;
7173
+ color: FieldText;
7174
+ border: 2px solid ButtonText;
7175
+ }
7176
+
7177
+ .field__trigger:focus-visible {
7178
+ outline: 3px solid Highlight;
7179
+ outline-offset: 2px;
7180
+ box-shadow: none;
7181
+ }
7182
+
7183
+ .field__trigger[aria-disabled='true'] {
7184
+ color: GrayText;
7185
+ border-color: GrayText;
7186
+ }
7187
+
7188
+ .field__trigger--placeholder .field__trigger-value {
7189
+ color: GrayText;
7190
+ }
7191
+
7192
+ .field__chevron::after {
7193
+ border-color: FieldText;
7194
+ }
7195
+
7196
+ .field__listbox {
7197
+ forced-color-adjust: none;
7198
+ background-color: Canvas;
7199
+ border: 2px solid CanvasText;
7200
+ box-shadow: none;
7201
+ }
7202
+
7203
+ .field__option {
7204
+ color: CanvasText;
7205
+ }
7206
+
7207
+ .field__option:hover {
7208
+ background-color: Highlight;
7209
+ color: HighlightText;
7210
+ }
7211
+
7212
+ .field__option--selected {
7213
+ background-color: Highlight;
7214
+ color: HighlightText;
7215
+ }
7216
+
7217
+ .field__option--focused {
7218
+ outline-color: Highlight;
7219
+ background-color: Highlight;
7220
+ color: HighlightText;
7221
+ }
7222
+
7223
+ .field__option--disabled {
7224
+ color: GrayText;
7225
+ opacity: 1;
7226
+ }
7227
+
7228
+ .field--error .field__trigger {
7229
+ border-color: LinkText;
7230
+ }
7231
+
7232
+ :host([disabled]) {
7233
+ opacity: 1;
7234
+ }
7235
+
7236
+ .field__label {
7237
+ color: CanvasText;
7238
+ }
7239
+
7240
+ .field__help-text {
7241
+ color: GrayText;
7242
+ }
7243
+
7244
+ .field__error {
7245
+ color: LinkText;
7246
+ }
7247
+ }
6414
7248
  /* ── hx-side-nav ── */
6415
7249
  :host {
6416
7250
  display: block;
@@ -6560,6 +7394,27 @@ export const helixGridItemStyles = css`
6560
7394
  transition: none;
6561
7395
  }
6562
7396
  }
7397
+
7398
+ /* ─── Forced Colors (Windows High Contrast) ─── */
7399
+
7400
+ @media (forced-colors: active) {
7401
+ .side-nav {
7402
+ border-inline-end-color: CanvasText;
7403
+ }
7404
+
7405
+ .side-nav__header {
7406
+ border-bottom-color: CanvasText;
7407
+ }
7408
+
7409
+ .side-nav__footer {
7410
+ border-top-color: CanvasText;
7411
+ }
7412
+
7413
+ .side-nav__toggle {
7414
+ color: ButtonText;
7415
+ border: 1px solid ButtonText;
7416
+ }
7417
+ }
6563
7418
  /* ── hx-skeleton ── */
6564
7419
  :host {
6565
7420
  display: block;
@@ -6642,6 +7497,18 @@ export const helixGridItemStyles = css`
6642
7497
  display: none;
6643
7498
  }
6644
7499
  }
7500
+
7501
+ /* ─── Forced Colors (Windows High Contrast) ─── */
7502
+
7503
+ @media (forced-colors: active) {
7504
+ .skeleton {
7505
+ border: 1px solid GrayText;
7506
+ }
7507
+
7508
+ .skeleton--animated::after {
7509
+ display: none;
7510
+ }
7511
+ }
6645
7512
  /* ── hx-slider ── */
6646
7513
  :host {
6647
7514
  display: block;
@@ -7045,6 +7912,18 @@ export const helixGridItemStyles = css`
7045
7912
  );
7046
7913
  }
7047
7914
  }
7915
+
7916
+ /* ─── Forced Colors (Windows High Contrast) ─── */
7917
+
7918
+ @media (forced-colors: active) {
7919
+ .spinner__track {
7920
+ stroke: GrayText;
7921
+ }
7922
+
7923
+ .spinner__arc {
7924
+ stroke: CanvasText;
7925
+ }
7926
+ }
7048
7927
  /* ── hx-split-button ── */
7049
7928
  :host {
7050
7929
  display: inline-block;
@@ -7354,6 +8233,41 @@ export const helixGridItemStyles = css`
7354
8233
  animation: none;
7355
8234
  }
7356
8235
  }
8236
+
8237
+ /* ─── High Contrast Mode (forced-colors) ─── */
8238
+
8239
+ @media (forced-colors: active) {
8240
+ .split-button__primary,
8241
+ .split-button__trigger {
8242
+ forced-color-adjust: none;
8243
+ background-color: ButtonFace;
8244
+ color: ButtonText;
8245
+ border: 2px solid ButtonText;
8246
+ }
8247
+
8248
+ .split-button__primary:focus-visible,
8249
+ .split-button__trigger:focus-visible {
8250
+ outline: 3px solid Highlight;
8251
+ outline-offset: 2px;
8252
+ }
8253
+
8254
+ .split-button__primary[disabled],
8255
+ .split-button__trigger[disabled] {
8256
+ background-color: ButtonFace;
8257
+ color: GrayText;
8258
+ border-color: GrayText;
8259
+ opacity: 1;
8260
+ }
8261
+
8262
+ :host([disabled]) {
8263
+ opacity: 1;
8264
+ }
8265
+
8266
+ .split-button__menu {
8267
+ background-color: Canvas;
8268
+ border: 2px solid CanvasText;
8269
+ }
8270
+ }
7357
8271
  /* ── hx-split-panel ── */
7358
8272
  :host {
7359
8273
  display: flex;
@@ -7522,6 +8436,20 @@ export const helixGridItemStyles = css`
7522
8436
  transition: none;
7523
8437
  }
7524
8438
  }
8439
+
8440
+ /* ─── Forced Colors (Windows High Contrast) ─── */
8441
+
8442
+ @media (forced-colors: active) {
8443
+ .divider {
8444
+ background-color: CanvasText;
8445
+ }
8446
+
8447
+ .collapse-btn {
8448
+ border-color: ButtonText;
8449
+ color: ButtonText;
8450
+ background: Canvas;
8451
+ }
8452
+ }
7525
8453
  /* ── hx-stack ── */
7526
8454
  :host {
7527
8455
  display: block;
@@ -7905,6 +8833,19 @@ export const helixGridItemStyles = css`
7905
8833
  :host([status='unknown']) {
7906
8834
  --_dot-color: var(--hx-status-indicator-color-unknown, var(--hx-color-neutral-300));
7907
8835
  }
8836
+
8837
+ /* ─── Forced Colors (Windows High Contrast) ─── */
8838
+
8839
+ @media (forced-colors: active) {
8840
+ .indicator__dot {
8841
+ forced-color-adjust: none;
8842
+ border: 2px solid CanvasText;
8843
+ }
8844
+
8845
+ .indicator__pulse-ring {
8846
+ display: none;
8847
+ }
8848
+ }
7908
8849
  /* ── hx-steps ── */
7909
8850
  :host {
7910
8851
  display: block;
@@ -7991,6 +8932,14 @@ export const helixGridItemStyles = css`
7991
8932
  :host([striped]) ::slotted(hx-structured-list-row:nth-of-type(even)) {
7992
8933
  background: var(--_bg-stripe);
7993
8934
  }
8935
+
8936
+ /* ─── Forced Colors (Windows High Contrast) ─── */
8937
+
8938
+ @media (forced-colors: active) {
8939
+ :host([bordered]) .list {
8940
+ border-color: CanvasText;
8941
+ }
8942
+ }
7994
8943
  `;
7995
8944
 
7996
8945
  export const helixStructuredListRowStyles = css`
@@ -8032,6 +8981,14 @@ export const helixStructuredListRowStyles = css`
8032
8981
  .row__actions:empty {
8033
8982
  display: none;
8034
8983
  }
8984
+
8985
+ /* ─── Forced Colors (Windows High Contrast) ─── */
8986
+
8987
+ @media (forced-colors: active) {
8988
+ :host(:not(:last-of-type)) .row {
8989
+ border-bottom-color: CanvasText;
8990
+ }
8991
+ }
8035
8992
  /* ── hx-style-scope ── */
8036
8993
  :host {
8037
8994
  display: contents;
@@ -8059,10 +9016,14 @@ export const helixStructuredListRowStyles = css`
8059
9016
  font-family: var(--hx-font-family-sans, sans-serif);
8060
9017
  }
8061
9018
 
9019
+ /* WCAG 2.5.5 (healthcare mandate): minimum 44px touch target height.
9020
+ The track itself is smaller visually, but the row must meet the
9021
+ interactive touch target threshold for all size variants. */
8062
9022
  .switch__control-row {
8063
9023
  display: flex;
8064
9024
  align-items: center;
8065
9025
  gap: var(--hx-space-2, 0.5rem);
9026
+ min-height: var(--hx-touch-target-min, 2.75rem);
8066
9027
  }
8067
9028
 
8068
9029
  /* --- Track --- */
@@ -8205,6 +9166,64 @@ export const helixStructuredListRowStyles = css`
8205
9166
  transition: none;
8206
9167
  }
8207
9168
  }
9169
+
9170
+ /* ─── High Contrast Mode (forced-colors) ─── */
9171
+
9172
+ @media (forced-colors: active) {
9173
+ .switch__track {
9174
+ forced-color-adjust: none;
9175
+ background-color: ButtonFace;
9176
+ border: 2px solid ButtonText;
9177
+ }
9178
+
9179
+ .switch__track:focus-visible {
9180
+ outline: 3px solid Highlight;
9181
+ outline-offset: 2px;
9182
+ }
9183
+
9184
+ .switch__thumb {
9185
+ background-color: ButtonText;
9186
+ box-shadow: none;
9187
+ }
9188
+
9189
+ .switch--checked .switch__track {
9190
+ background-color: Highlight;
9191
+ border-color: Highlight;
9192
+ }
9193
+
9194
+ .switch--checked .switch__thumb {
9195
+ background-color: HighlightText;
9196
+ }
9197
+
9198
+ :host([disabled]) {
9199
+ opacity: 1;
9200
+ }
9201
+
9202
+ :host([disabled]) .switch__track {
9203
+ border-color: GrayText;
9204
+ background-color: ButtonFace;
9205
+ }
9206
+
9207
+ :host([disabled]) .switch__thumb {
9208
+ background-color: GrayText;
9209
+ }
9210
+
9211
+ :host([disabled]) .switch__label {
9212
+ color: GrayText;
9213
+ }
9214
+
9215
+ .switch__label {
9216
+ color: CanvasText;
9217
+ }
9218
+
9219
+ .switch__help-text {
9220
+ color: GrayText;
9221
+ }
9222
+
9223
+ .switch__error {
9224
+ color: LinkText;
9225
+ }
9226
+ }
8208
9227
  /* ── hx-table ── */
8209
9228
  :host {
8210
9229
  display: block;
@@ -8311,6 +9330,14 @@ export const helixStructuredListRowStyles = css`
8311
9330
  transition: none !important;
8312
9331
  }
8313
9332
  }
9333
+
9334
+ /* ─── Forced Colors (Windows High Contrast) ─── */
9335
+
9336
+ @media (forced-colors: active) {
9337
+ table {
9338
+ border: 1px solid CanvasText;
9339
+ }
9340
+ }
8314
9341
  `;
8315
9342
 
8316
9343
  /**
@@ -8409,6 +9436,18 @@ export const helixTableSectionBaseStyles = css`
8409
9436
  scroll-behavior: auto;
8410
9437
  }
8411
9438
  }
9439
+
9440
+ /* ─── High Contrast Mode (forced-colors) ─── */
9441
+
9442
+ @media (forced-colors: active) {
9443
+ .tablist {
9444
+ border-bottom-color: CanvasText;
9445
+ }
9446
+
9447
+ :host([orientation='vertical']) .tablist {
9448
+ border-inline-end-color: CanvasText;
9449
+ }
9450
+ }
8412
9451
  /* ── hx-tag ── */
8413
9452
  :host {
8414
9453
  display: inline-block;
@@ -8555,6 +9594,18 @@ export const helixTableSectionBaseStyles = css`
8555
9594
  outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, currentColor);
8556
9595
  outline-offset: var(--hx-focus-ring-offset, 1px);
8557
9596
  }
9597
+
9598
+ /* ─── Forced Colors (Windows High Contrast) ─── */
9599
+
9600
+ @media (forced-colors: active) {
9601
+ .tag {
9602
+ border-color: CanvasText;
9603
+ }
9604
+
9605
+ .tag__remove-button {
9606
+ color: ButtonText;
9607
+ }
9608
+ }
8558
9609
  /* ── hx-text ── */
8559
9610
  :host {
8560
9611
  display: inline;
@@ -8875,6 +9926,10 @@ export const helixTableSectionBaseStyles = css`
8875
9926
  color: var(--hx-color-neutral-400, #adb5bd);
8876
9927
  }
8877
9928
 
9929
+ .field__input:focus-visible {
9930
+ outline: none; /* wrapper ring handles keyboard focus indication */
9931
+ }
9932
+
8878
9933
  .field__input:disabled {
8879
9934
  cursor: not-allowed;
8880
9935
  }
@@ -8918,6 +9973,64 @@ export const helixTableSectionBaseStyles = css`
8918
9973
  transition: none;
8919
9974
  }
8920
9975
  }
9976
+
9977
+ /* ─── High Contrast Mode (forced-colors) ─── */
9978
+
9979
+ @media (forced-colors: active) {
9980
+ .field__input-wrapper {
9981
+ forced-color-adjust: none;
9982
+ background-color: Field;
9983
+ color: FieldText;
9984
+ border: 2px solid ButtonText;
9985
+ }
9986
+
9987
+ .field__input {
9988
+ color: FieldText;
9989
+ }
9990
+
9991
+ .field__input::placeholder {
9992
+ color: GrayText;
9993
+ }
9994
+
9995
+ .field__input-wrapper:focus-within {
9996
+ border-color: Highlight;
9997
+ box-shadow: none;
9998
+ }
9999
+
10000
+ .field__input:focus-visible {
10001
+ outline: 3px solid Highlight;
10002
+ outline-offset: -3px;
10003
+ }
10004
+
10005
+ :host([disabled]) {
10006
+ opacity: 1;
10007
+ }
10008
+
10009
+ :host([disabled]) .field__input-wrapper {
10010
+ border-color: GrayText;
10011
+ color: GrayText;
10012
+ }
10013
+
10014
+ :host([disabled]) .field__input {
10015
+ color: GrayText;
10016
+ }
10017
+
10018
+ .field--error .field__input-wrapper {
10019
+ border-color: LinkText;
10020
+ }
10021
+
10022
+ .field__label {
10023
+ color: CanvasText;
10024
+ }
10025
+
10026
+ .field__help-text {
10027
+ color: GrayText;
10028
+ }
10029
+
10030
+ .field__error {
10031
+ color: LinkText;
10032
+ }
10033
+ }
8921
10034
  /* ── hx-textarea ── */
8922
10035
  :host {
8923
10036
  display: block;
@@ -9035,6 +10148,10 @@ export const helixTableSectionBaseStyles = css`
9035
10148
  color: var(--hx-color-neutral-400, #adb5bd);
9036
10149
  }
9037
10150
 
10151
+ .field__textarea:focus-visible {
10152
+ outline: none; /* wrapper ring handles keyboard focus indication */
10153
+ }
10154
+
9038
10155
  .field__textarea:disabled {
9039
10156
  cursor: not-allowed;
9040
10157
  }
@@ -9098,6 +10215,64 @@ export const helixTableSectionBaseStyles = css`
9098
10215
  color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
9099
10216
  line-height: var(--hx-line-height-normal, 1.5);
9100
10217
  }
10218
+
10219
+ /* ─── High Contrast Mode (forced-colors) ─── */
10220
+
10221
+ @media (forced-colors: active) {
10222
+ .field__textarea-wrapper {
10223
+ forced-color-adjust: none;
10224
+ background-color: Field;
10225
+ color: FieldText;
10226
+ border: 2px solid ButtonText;
10227
+ }
10228
+
10229
+ .field__textarea {
10230
+ color: FieldText;
10231
+ }
10232
+
10233
+ .field__textarea::placeholder {
10234
+ color: GrayText;
10235
+ }
10236
+
10237
+ .field__textarea-wrapper:focus-within {
10238
+ border-color: Highlight;
10239
+ box-shadow: none;
10240
+ }
10241
+
10242
+ .field__textarea:focus-visible {
10243
+ outline: 3px solid Highlight;
10244
+ outline-offset: -3px;
10245
+ }
10246
+
10247
+ :host([disabled]) {
10248
+ opacity: 1;
10249
+ }
10250
+
10251
+ :host([disabled]) .field__textarea-wrapper {
10252
+ border-color: GrayText;
10253
+ color: GrayText;
10254
+ }
10255
+
10256
+ :host([disabled]) .field__textarea {
10257
+ color: GrayText;
10258
+ }
10259
+
10260
+ .field--error .field__textarea-wrapper {
10261
+ border-color: LinkText;
10262
+ }
10263
+
10264
+ .field__label {
10265
+ color: CanvasText;
10266
+ }
10267
+
10268
+ .field__help-text {
10269
+ color: GrayText;
10270
+ }
10271
+
10272
+ .field__error {
10273
+ color: LinkText;
10274
+ }
10275
+ }
9101
10276
  /* ── hx-theme ── */
9102
10277
  :host {
9103
10278
  display: contents;
@@ -9278,6 +10453,19 @@ export const helixTableSectionBaseStyles = css`
9278
10453
  transition: none;
9279
10454
  }
9280
10455
  }
10456
+
10457
+ /* ─── Forced Colors (Windows High Contrast) ─── */
10458
+
10459
+ @media (forced-colors: active) {
10460
+ .toast {
10461
+ border: 1px solid CanvasText;
10462
+ }
10463
+
10464
+ .toast__close {
10465
+ color: ButtonText;
10466
+ border: 1px solid ButtonText;
10467
+ }
10468
+ }
9281
10469
  `;
9282
10470
 
9283
10471
  export const helixToastStackStyles = css`
@@ -9408,10 +10596,13 @@ export const helixToastStackStyles = css`
9408
10596
 
9409
10597
  /* ─── Size Variants ─── */
9410
10598
 
10599
+ /* WCAG 2.5.5 (healthcare mandate): minimum 44px touch target for sm variant.
10600
+ min-height uses --hx-touch-target-min to guarantee the interactive area
10601
+ meets the threshold even though the visual size token is smaller. */
9411
10602
  .button--sm {
9412
10603
  padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
9413
10604
  font-size: var(--hx-font-size-sm, 0.875rem);
9414
- min-height: var(--hx-size-8, 2rem);
10605
+ min-height: var(--hx-touch-target-min, 2.75rem);
9415
10606
  }
9416
10607
 
9417
10608
  .button--md {
@@ -9560,6 +10751,40 @@ export const helixToastStackStyles = css`
9560
10751
  transition: none;
9561
10752
  }
9562
10753
  }
10754
+
10755
+ /* ─── High Contrast Mode (forced-colors) ─── */
10756
+
10757
+ @media (forced-colors: active) {
10758
+ .button {
10759
+ forced-color-adjust: none;
10760
+ background-color: ButtonFace;
10761
+ color: ButtonText;
10762
+ border: 2px solid ButtonText;
10763
+ }
10764
+
10765
+ .button:focus-visible {
10766
+ outline: 3px solid Highlight;
10767
+ outline-offset: 2px;
10768
+ }
10769
+
10770
+ .button--pressed {
10771
+ background-color: Highlight;
10772
+ color: HighlightText;
10773
+ border-color: Highlight;
10774
+ box-shadow: none;
10775
+ }
10776
+
10777
+ .button[disabled] {
10778
+ background-color: ButtonFace;
10779
+ color: GrayText;
10780
+ border-color: GrayText;
10781
+ opacity: 1;
10782
+ }
10783
+
10784
+ :host([disabled]) {
10785
+ opacity: 1;
10786
+ }
10787
+ }
9563
10788
  /* ── hx-tooltip ── */
9564
10789
  :host {
9565
10790
  display: inline-block;
@@ -9611,6 +10836,18 @@ export const helixToastStackStyles = css`
9611
10836
  transition: none;
9612
10837
  }
9613
10838
  }
10839
+
10840
+ /* ─── Forced Colors (Windows High Contrast) ─── */
10841
+
10842
+ @media (forced-colors: active) {
10843
+ [part='tooltip'] {
10844
+ border: 1px solid CanvasText;
10845
+ }
10846
+
10847
+ [part='arrow'] {
10848
+ border: 1px solid CanvasText;
10849
+ }
10850
+ }
9614
10851
  /* ── hx-top-nav ── */
9615
10852
  /* ─── Host ─── */
9616
10853
 
@@ -9814,6 +11051,27 @@ export const helixToastStackStyles = css`
9814
11051
  animation: none;
9815
11052
  }
9816
11053
  }
11054
+
11055
+ /* ─── Forced Colors (Windows High Contrast) ─── */
11056
+
11057
+ @media (forced-colors: active) {
11058
+ .nav {
11059
+ border-bottom-color: CanvasText;
11060
+ }
11061
+
11062
+ .mobile-toggle {
11063
+ color: ButtonText;
11064
+ border: 1px solid ButtonText;
11065
+ }
11066
+
11067
+ .nav__collapsible {
11068
+ border-top-color: CanvasText;
11069
+ }
11070
+
11071
+ .nav__actions {
11072
+ border-top-color: CanvasText;
11073
+ }
11074
+ }
9817
11075
  /* ── hx-tree-view ── */
9818
11076
  :host {
9819
11077
  display: block;