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

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 (753) hide show
  1. package/custom-elements.json +847 -1038
  2. package/dist/base/helix-element.d.ts +20 -8
  3. package/dist/base/helix-element.d.ts.map +1 -1
  4. package/dist/components/hx-accordion/hx-accordion-item.d.ts +7 -2
  5. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  6. package/dist/components/hx-accordion/hx-accordion.d.ts +3 -2
  7. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  8. package/dist/components/hx-accordion/index.d.ts +1 -0
  9. package/dist/components/hx-accordion/index.d.ts.map +1 -1
  10. package/dist/components/hx-accordion/index.js +1 -1
  11. package/dist/components/hx-action-bar/hx-action-bar.d.ts +2 -11
  12. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  13. package/dist/components/hx-action-bar/hx-action-bar.styles.d.ts.map +1 -1
  14. package/dist/components/hx-action-bar/index.js +1 -1
  15. package/dist/components/hx-alert/hx-alert.d.ts +7 -2
  16. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  17. package/dist/components/hx-alert/index.d.ts +1 -0
  18. package/dist/components/hx-alert/index.d.ts.map +1 -1
  19. package/dist/components/hx-alert/index.js +1 -1
  20. package/dist/components/hx-avatar/hx-avatar.d.ts +3 -2
  21. package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
  22. package/dist/components/hx-avatar/index.js +1 -1
  23. package/dist/components/hx-badge/hx-badge.d.ts +2 -9
  24. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  25. package/dist/components/hx-badge/index.d.ts +1 -1
  26. package/dist/components/hx-badge/index.d.ts.map +1 -1
  27. package/dist/components/hx-badge/index.js +1 -1
  28. package/dist/components/hx-banner/hx-banner.d.ts +3 -2
  29. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  30. package/dist/components/hx-banner/index.js +1 -1
  31. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts +2 -2
  32. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  33. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +9 -12
  34. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  35. package/dist/components/hx-breadcrumb/hx-breadcrumb.styles.d.ts.map +1 -1
  36. package/dist/components/hx-breadcrumb/index.js +1 -1
  37. package/dist/components/hx-button/hx-button.d.ts +22 -0
  38. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  39. package/dist/components/hx-button/index.d.ts +1 -0
  40. package/dist/components/hx-button/index.d.ts.map +1 -1
  41. package/dist/components/hx-button/index.js +1 -1
  42. package/dist/components/hx-button-group/hx-button-group.d.ts +3 -2
  43. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  44. package/dist/components/hx-button-group/hx-button-group.styles.d.ts.map +1 -1
  45. package/dist/components/hx-button-group/index.js +1 -1
  46. package/dist/components/hx-card/hx-card.d.ts +3 -2
  47. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  48. package/dist/components/hx-card/index.js +1 -1
  49. package/dist/components/hx-carousel/hx-carousel-item.d.ts +2 -2
  50. package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
  51. package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts.map +1 -1
  52. package/dist/components/hx-carousel/hx-carousel.d.ts +2 -2
  53. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  54. package/dist/components/hx-carousel/index.js +1 -1
  55. package/dist/components/hx-checkbox/hx-checkbox.d.ts +44 -5
  56. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  57. package/dist/components/hx-checkbox/index.d.ts +1 -0
  58. package/dist/components/hx-checkbox/index.d.ts.map +1 -1
  59. package/dist/components/hx-checkbox/index.js +1 -1
  60. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +9 -13
  61. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  62. package/dist/components/hx-checkbox-group/index.d.ts +1 -0
  63. package/dist/components/hx-checkbox-group/index.d.ts.map +1 -1
  64. package/dist/components/hx-checkbox-group/index.js +1 -1
  65. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +0 -7
  66. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
  67. package/dist/components/hx-clinical-status/index.js +1 -1
  68. package/dist/components/hx-code-snippet/index.js +1 -1
  69. package/dist/components/hx-color-picker/hx-color-picker.d.ts +8 -11
  70. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  71. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  72. package/dist/components/hx-color-picker/index.d.ts +1 -0
  73. package/dist/components/hx-color-picker/index.d.ts.map +1 -1
  74. package/dist/components/hx-color-picker/index.js +1 -1
  75. package/dist/components/hx-combobox/hx-combobox.d.ts +32 -15
  76. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  77. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  78. package/dist/components/hx-combobox/index.d.ts +1 -0
  79. package/dist/components/hx-combobox/index.d.ts.map +1 -1
  80. package/dist/components/hx-combobox/index.js +1 -1
  81. package/dist/components/hx-container/hx-container.d.ts +2 -4
  82. package/dist/components/hx-container/hx-container.d.ts.map +1 -1
  83. package/dist/components/hx-container/hx-container.styles.d.ts.map +1 -1
  84. package/dist/components/hx-container/index.d.ts +0 -1
  85. package/dist/components/hx-container/index.d.ts.map +1 -1
  86. package/dist/components/hx-container/index.js +1 -1
  87. package/dist/components/hx-copy-button/hx-copy-button.d.ts +2 -2
  88. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  89. package/dist/components/hx-copy-button/index.js +1 -1
  90. package/dist/components/hx-counter/hx-counter.d.ts +3 -2
  91. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  92. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
  93. package/dist/components/hx-counter/index.js +1 -1
  94. package/dist/components/hx-data-table/hx-data-table.d.ts +26 -2
  95. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  96. package/dist/components/hx-data-table/index.d.ts +1 -0
  97. package/dist/components/hx-data-table/index.d.ts.map +1 -1
  98. package/dist/components/hx-data-table/index.js +1 -1
  99. package/dist/components/hx-date-picker/hx-date-picker.d.ts +30 -19
  100. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  101. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  102. package/dist/components/hx-date-picker/index.d.ts +1 -0
  103. package/dist/components/hx-date-picker/index.d.ts.map +1 -1
  104. package/dist/components/hx-date-picker/index.js +1 -1
  105. package/dist/components/hx-dialog/hx-dialog.d.ts +37 -5
  106. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  107. package/dist/components/hx-dialog/index.js +1 -1
  108. package/dist/components/hx-divider/hx-divider.d.ts +3 -4
  109. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  110. package/dist/components/hx-divider/index.d.ts +0 -1
  111. package/dist/components/hx-divider/index.d.ts.map +1 -1
  112. package/dist/components/hx-divider/index.js +1 -1
  113. package/dist/components/hx-drawer/hx-drawer.d.ts +32 -2
  114. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  115. package/dist/components/hx-drawer/index.js +1 -1
  116. package/dist/components/hx-dropdown/hx-dropdown.d.ts +3 -2
  117. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  118. package/dist/components/hx-dropdown/index.js +1 -1
  119. package/dist/components/hx-field/hx-field.d.ts +4 -3
  120. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  121. package/dist/components/hx-field/index.js +1 -1
  122. package/dist/components/hx-field-label/hx-field-label.d.ts +2 -2
  123. package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
  124. package/dist/components/hx-field-label/index.js +1 -1
  125. package/dist/components/hx-file-upload/hx-file-upload.d.ts +31 -5
  126. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  127. package/dist/components/hx-file-upload/index.d.ts +1 -0
  128. package/dist/components/hx-file-upload/index.d.ts.map +1 -1
  129. package/dist/components/hx-file-upload/index.js +1 -1
  130. package/dist/components/hx-form/hx-form.d.ts +2 -2
  131. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  132. package/dist/components/hx-form/hx-form.styles.d.ts +8 -0
  133. package/dist/components/hx-form/hx-form.styles.d.ts.map +1 -1
  134. package/dist/components/hx-form/index.js +1 -1
  135. package/dist/components/hx-format-date/hx-format-date.d.ts +2 -2
  136. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  137. package/dist/components/hx-format-date/hx-format-date.styles.d.ts.map +1 -1
  138. package/dist/components/hx-format-date/index.js +1 -1
  139. package/dist/components/hx-grid/hx-grid.d.ts +4 -3
  140. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  141. package/dist/components/hx-grid/hx-grid.styles.d.ts.map +1 -1
  142. package/dist/components/hx-grid/index.js +1 -1
  143. package/dist/components/hx-help-text/hx-help-text.d.ts +2 -4
  144. package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
  145. package/dist/components/hx-help-text/index.js +1 -1
  146. package/dist/components/hx-icon/hx-icon.d.ts +17 -2
  147. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  148. package/dist/components/hx-icon/index.js +1 -1
  149. package/dist/components/hx-icon-button/index.js +1 -1
  150. package/dist/components/hx-image/hx-image.d.ts +2 -2
  151. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  152. package/dist/components/hx-image/index.js +1 -1
  153. package/dist/components/hx-link/hx-link.d.ts +2 -2
  154. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  155. package/dist/components/hx-link/index.js +1 -1
  156. package/dist/components/hx-list/hx-list-item.d.ts +3 -2
  157. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  158. package/dist/components/hx-list/hx-list.d.ts +3 -2
  159. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  160. package/dist/components/hx-list/hx-list.styles.d.ts.map +1 -1
  161. package/dist/components/hx-list/index.js +1 -1
  162. package/dist/components/hx-menu/hx-menu-divider.d.ts +2 -2
  163. package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
  164. package/dist/components/hx-menu/hx-menu-item.d.ts +2 -2
  165. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  166. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  167. package/dist/components/hx-menu/hx-menu.d.ts +2 -2
  168. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  169. package/dist/components/hx-menu/hx-menu.styles.d.ts.map +1 -1
  170. package/dist/components/hx-menu/index.js +1 -1
  171. package/dist/components/hx-meter/hx-meter.d.ts +3 -2
  172. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  173. package/dist/components/hx-meter/index.js +1 -1
  174. package/dist/components/hx-nav/hx-nav.d.ts +2 -4
  175. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  176. package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
  177. package/dist/components/hx-nav/index.d.ts +1 -1
  178. package/dist/components/hx-nav/index.d.ts.map +1 -1
  179. package/dist/components/hx-nav/index.js +1 -1
  180. package/dist/components/hx-number-input/hx-number-input.d.ts +9 -13
  181. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  182. package/dist/components/hx-number-input/index.d.ts +1 -0
  183. package/dist/components/hx-number-input/index.d.ts.map +1 -1
  184. package/dist/components/hx-number-input/index.js +1 -1
  185. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +2 -2
  186. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  187. package/dist/components/hx-overflow-menu/index.js +1 -1
  188. package/dist/components/hx-pagination/hx-pagination.d.ts +10 -2
  189. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  190. package/dist/components/hx-pagination/index.d.ts +1 -0
  191. package/dist/components/hx-pagination/index.d.ts.map +1 -1
  192. package/dist/components/hx-pagination/index.js +1 -1
  193. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +47 -5
  194. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -1
  195. package/dist/components/hx-patient-banner/index.js +1 -1
  196. package/dist/components/hx-phi-field/hx-phi-field.d.ts +85 -5
  197. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
  198. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -1
  199. package/dist/components/hx-phi-field/index.js +1 -1
  200. package/dist/components/hx-popover/hx-popover.d.ts +3 -2
  201. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  202. package/dist/components/hx-popover/index.js +1 -1
  203. package/dist/components/hx-popup/hx-popup.d.ts +7 -2
  204. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  205. package/dist/components/hx-popup/index.js +1 -1
  206. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +3 -2
  207. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  208. package/dist/components/hx-progress-bar/index.js +1 -1
  209. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts +3 -2
  210. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  211. package/dist/components/hx-progress-ring/hx-progress-ring.styles.d.ts.map +1 -1
  212. package/dist/components/hx-progress-ring/index.js +1 -1
  213. package/dist/components/hx-prose/hx-prose.d.ts +3 -2
  214. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  215. package/dist/components/hx-prose/hx-prose.styles.d.ts +8 -0
  216. package/dist/components/hx-prose/hx-prose.styles.d.ts.map +1 -1
  217. package/dist/components/hx-prose/index.js +1 -1
  218. package/dist/components/hx-radio-group/hx-radio-group.d.ts +9 -29
  219. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  220. package/dist/components/hx-radio-group/hx-radio.d.ts +19 -4
  221. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  222. package/dist/components/hx-radio-group/index.d.ts +1 -0
  223. package/dist/components/hx-radio-group/index.d.ts.map +1 -1
  224. package/dist/components/hx-radio-group/index.js +1 -1
  225. package/dist/components/hx-rating/hx-rating.d.ts +4 -10
  226. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  227. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  228. package/dist/components/hx-rating/index.d.ts +1 -0
  229. package/dist/components/hx-rating/index.d.ts.map +1 -1
  230. package/dist/components/hx-rating/index.js +1 -1
  231. package/dist/components/hx-select/hx-select.d.ts +26 -25
  232. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  233. package/dist/components/hx-select/index.d.ts +1 -0
  234. package/dist/components/hx-select/index.d.ts.map +1 -1
  235. package/dist/components/hx-select/index.js +1 -1
  236. package/dist/components/hx-side-nav/hx-nav-item.d.ts +2 -2
  237. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  238. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  239. package/dist/components/hx-side-nav/hx-side-nav.d.ts +3 -2
  240. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  241. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  242. package/dist/components/hx-side-nav/index.js +1 -1
  243. package/dist/components/hx-skeleton/hx-skeleton.d.ts +3 -2
  244. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  245. package/dist/components/hx-skeleton/index.js +1 -1
  246. package/dist/components/hx-slider/hx-slider.d.ts +7 -11
  247. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  248. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  249. package/dist/components/hx-slider/index.d.ts +1 -0
  250. package/dist/components/hx-slider/index.d.ts.map +1 -1
  251. package/dist/components/hx-slider/index.js +1 -1
  252. package/dist/components/hx-spinner/hx-spinner.d.ts +2 -2
  253. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  254. package/dist/components/hx-spinner/index.js +1 -1
  255. package/dist/components/hx-split-button/hx-split-button.d.ts +10 -4
  256. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  257. package/dist/components/hx-split-button/index.js +1 -1
  258. package/dist/components/hx-split-panel/hx-split-panel.d.ts +12 -2
  259. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  260. package/dist/components/hx-split-panel/index.js +1 -1
  261. package/dist/components/hx-stack/hx-stack.d.ts +2 -2
  262. package/dist/components/hx-stack/hx-stack.d.ts.map +1 -1
  263. package/dist/components/hx-stack/hx-stack.styles.d.ts.map +1 -1
  264. package/dist/components/hx-stack/index.js +1 -1
  265. package/dist/components/hx-stat/hx-stat.d.ts +3 -2
  266. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  267. package/dist/components/hx-stat/index.js +1 -1
  268. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +3 -2
  269. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  270. package/dist/components/hx-status-indicator/index.js +1 -1
  271. package/dist/components/hx-steps/hx-step.d.ts +3 -2
  272. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  273. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  274. package/dist/components/hx-steps/hx-steps.d.ts +11 -4
  275. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  276. package/dist/components/hx-steps/hx-steps.styles.d.ts.map +1 -1
  277. package/dist/components/hx-steps/index.js +1 -1
  278. package/dist/components/hx-structured-list/hx-structured-list.d.ts +3 -3
  279. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  280. package/dist/components/hx-structured-list/index.js +1 -1
  281. package/dist/components/hx-style-scope/hx-style-scope.d.ts +3 -2
  282. package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -1
  283. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts.map +1 -1
  284. package/dist/components/hx-style-scope/index.js +1 -1
  285. package/dist/components/hx-switch/hx-switch.d.ts +20 -21
  286. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  287. package/dist/components/hx-switch/index.d.ts +2 -1
  288. package/dist/components/hx-switch/index.d.ts.map +1 -1
  289. package/dist/components/hx-switch/index.js +1 -1
  290. package/dist/components/hx-table/hx-table.d.ts +3 -2
  291. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  292. package/dist/components/hx-table/hx-tbody.d.ts +2 -2
  293. package/dist/components/hx-table/hx-tbody.d.ts.map +1 -1
  294. package/dist/components/hx-table/hx-td.d.ts +2 -2
  295. package/dist/components/hx-table/hx-td.d.ts.map +1 -1
  296. package/dist/components/hx-table/hx-tfoot.d.ts +2 -2
  297. package/dist/components/hx-table/hx-tfoot.d.ts.map +1 -1
  298. package/dist/components/hx-table/hx-th.d.ts +2 -2
  299. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  300. package/dist/components/hx-table/hx-thead.d.ts +2 -2
  301. package/dist/components/hx-table/hx-thead.d.ts.map +1 -1
  302. package/dist/components/hx-table/hx-tr.d.ts +2 -2
  303. package/dist/components/hx-table/hx-tr.d.ts.map +1 -1
  304. package/dist/components/hx-table/index.js +1 -1
  305. package/dist/components/hx-tabs/hx-tab-panel.d.ts +2 -2
  306. package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
  307. package/dist/components/hx-tabs/hx-tab.d.ts +2 -2
  308. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  309. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  310. package/dist/components/hx-tabs/hx-tabs.d.ts +8 -2
  311. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  312. package/dist/components/hx-tabs/index.d.ts +1 -0
  313. package/dist/components/hx-tabs/index.d.ts.map +1 -1
  314. package/dist/components/hx-tabs/index.js +1 -1
  315. package/dist/components/hx-tag/hx-tag.d.ts +2 -4
  316. package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
  317. package/dist/components/hx-tag/index.d.ts +0 -2
  318. package/dist/components/hx-tag/index.d.ts.map +1 -1
  319. package/dist/components/hx-tag/index.js +1 -1
  320. package/dist/components/hx-text/hx-text.d.ts +2 -2
  321. package/dist/components/hx-text/hx-text.d.ts.map +1 -1
  322. package/dist/components/hx-text/hx-text.styles.d.ts.map +1 -1
  323. package/dist/components/hx-text/index.js +1 -1
  324. package/dist/components/hx-text-input/hx-text-input.d.ts +29 -13
  325. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  326. package/dist/components/hx-text-input/index.d.ts +1 -0
  327. package/dist/components/hx-text-input/index.d.ts.map +1 -1
  328. package/dist/components/hx-text-input/index.js +1 -1
  329. package/dist/components/hx-textarea/hx-textarea.d.ts +32 -24
  330. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  331. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  332. package/dist/components/hx-textarea/index.d.ts +1 -0
  333. package/dist/components/hx-textarea/index.d.ts.map +1 -1
  334. package/dist/components/hx-textarea/index.js +1 -1
  335. package/dist/components/hx-theme/hx-theme.d.ts +3 -11
  336. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  337. package/dist/components/hx-theme/hx-theme.styles.d.ts.map +1 -1
  338. package/dist/components/hx-theme/index.d.ts +0 -2
  339. package/dist/components/hx-theme/index.d.ts.map +1 -1
  340. package/dist/components/hx-theme/index.js +1 -1
  341. package/dist/components/hx-time-picker/hx-time-picker.d.ts +8 -15
  342. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  343. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  344. package/dist/components/hx-time-picker/index.d.ts +1 -0
  345. package/dist/components/hx-time-picker/index.d.ts.map +1 -1
  346. package/dist/components/hx-time-picker/index.js +1 -1
  347. package/dist/components/hx-toast/hx-toast-stack.d.ts +2 -2
  348. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  349. package/dist/components/hx-toast/hx-toast.d.ts +3 -2
  350. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  351. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  352. package/dist/components/hx-toast/index.js +1 -1
  353. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +4 -0
  354. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  355. package/dist/components/hx-toggle-button/index.d.ts +1 -0
  356. package/dist/components/hx-toggle-button/index.d.ts.map +1 -1
  357. package/dist/components/hx-toggle-button/index.js +1 -1
  358. package/dist/components/hx-tooltip/hx-tooltip.d.ts +2 -2
  359. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  360. package/dist/components/hx-tooltip/index.js +1 -1
  361. package/dist/components/hx-top-nav/hx-top-nav.d.ts +2 -2
  362. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  363. package/dist/components/hx-top-nav/index.js +1 -1
  364. package/dist/components/hx-tree-view/hx-tree-item.d.ts +2 -4
  365. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  366. package/dist/components/hx-tree-view/hx-tree-item.styles.d.ts.map +1 -1
  367. package/dist/components/hx-tree-view/hx-tree-view.d.ts +2 -4
  368. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  369. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  370. package/dist/components/hx-tree-view/index.d.ts +0 -4
  371. package/dist/components/hx-tree-view/index.d.ts.map +1 -1
  372. package/dist/components/hx-tree-view/index.js +1 -1
  373. package/dist/components/hx-visually-hidden/hx-visually-hidden.d.ts +2 -2
  374. package/dist/components/hx-visually-hidden/hx-visually-hidden.d.ts.map +1 -1
  375. package/dist/components/hx-visually-hidden/hx-visually-hidden.styles.d.ts.map +1 -1
  376. package/dist/components/hx-visually-hidden/index.js +1 -1
  377. package/dist/css/helix-all.css +2232 -680
  378. package/dist/css/helix-core.css +107 -49
  379. package/dist/css/helix-data.css +17 -7
  380. package/dist/css/helix-feedback.css +82 -61
  381. package/dist/css/helix-forms.css +1456 -131
  382. package/dist/css/helix-layout.css +31 -1
  383. package/dist/css/helix-media.css +16 -16
  384. package/dist/css/helix-navigation.css +99 -48
  385. package/dist/css/helix-overlay.css +12 -12
  386. package/dist/css/helix-tokens.css +30 -11
  387. package/dist/css/helix-utility.css +53 -10
  388. package/dist/css/hx-accordion.css +1 -1
  389. package/dist/css/hx-action-bar.css +17 -3
  390. package/dist/css/hx-alert.css +18 -18
  391. package/dist/css/hx-avatar.css +1 -1
  392. package/dist/css/hx-badge.css +15 -15
  393. package/dist/css/hx-banner.css +18 -18
  394. package/dist/css/hx-breadcrumb.css +27 -0
  395. package/dist/css/hx-button-group.css +13 -0
  396. package/dist/css/hx-button.css +2 -2
  397. package/dist/css/hx-card.css +6 -6
  398. package/dist/css/hx-carousel.css +16 -16
  399. package/dist/css/hx-checkbox-group.css +4 -4
  400. package/dist/css/hx-checkbox.css +8 -8
  401. package/dist/css/hx-clinical-status.css +23 -23
  402. package/dist/css/hx-code-snippet.css +3 -3
  403. package/dist/css/hx-color-picker.css +276 -1
  404. package/dist/css/hx-combobox.css +391 -1
  405. package/dist/css/hx-container.css +10 -0
  406. package/dist/css/hx-copy-button.css +3 -3
  407. package/dist/css/hx-counter.css +9 -2
  408. package/dist/css/hx-data-table.css +1 -1
  409. package/dist/css/hx-date-picker.css +437 -1
  410. package/dist/css/hx-dialog.css +2 -2
  411. package/dist/css/hx-drawer.css +1 -1
  412. package/dist/css/hx-dropdown.css +1 -1
  413. package/dist/css/hx-field-label.css +2 -2
  414. package/dist/css/hx-field.css +3 -3
  415. package/dist/css/hx-file-upload.css +12 -12
  416. package/dist/css/hx-format-date.css +11 -0
  417. package/dist/css/hx-grid.css +10 -0
  418. package/dist/css/hx-help-text.css +5 -5
  419. package/dist/css/hx-image.css +3 -3
  420. package/dist/css/hx-link.css +5 -5
  421. package/dist/css/hx-list.css +10 -0
  422. package/dist/css/hx-menu.css +1 -2
  423. package/dist/css/hx-meter.css +9 -9
  424. package/dist/css/hx-nav.css +11 -12
  425. package/dist/css/hx-overflow-menu.css +10 -10
  426. package/dist/css/hx-pagination.css +13 -13
  427. package/dist/css/hx-patient-banner.css +10 -10
  428. package/dist/css/hx-phi-field.css +5 -2
  429. package/dist/css/hx-popover.css +4 -4
  430. package/dist/css/hx-progress-bar.css +1 -1
  431. package/dist/css/hx-progress-ring.css +23 -1
  432. package/dist/css/hx-radio-group.css +3 -3
  433. package/dist/css/hx-rating.css +6 -4
  434. package/dist/css/hx-select.css +7 -7
  435. package/dist/css/hx-side-nav.css +5 -0
  436. package/dist/css/hx-slider.css +16 -11
  437. package/dist/css/hx-split-button.css +2 -2
  438. package/dist/css/hx-stack.css +10 -0
  439. package/dist/css/hx-stat.css +5 -5
  440. package/dist/css/hx-status-indicator.css +2 -2
  441. package/dist/css/hx-steps.css +12 -0
  442. package/dist/css/hx-structured-list.css +2 -2
  443. package/dist/css/hx-style-scope.css +11 -0
  444. package/dist/css/hx-switch.css +4 -4
  445. package/dist/css/hx-table.css +1 -1
  446. package/dist/css/hx-tabs.css +3 -3
  447. package/dist/css/hx-tag.css +12 -12
  448. package/dist/css/hx-text-input.css +9 -9
  449. package/dist/css/hx-text.css +38 -5
  450. package/dist/css/hx-textarea.css +9 -15
  451. package/dist/css/hx-theme.css +11 -0
  452. package/dist/css/hx-time-picker.css +224 -1
  453. package/dist/css/hx-toast.css +6 -7
  454. package/dist/css/hx-toggle-button.css +3 -3
  455. package/dist/css/hx-tooltip.css +4 -4
  456. package/dist/css/hx-top-nav.css +8 -8
  457. package/dist/css/hx-tree-view.css +9 -0
  458. package/dist/css/hx-visually-hidden.css +12 -0
  459. package/dist/css/index.css +1 -1
  460. package/dist/css/manifest.json +39 -7
  461. package/dist/form-test-utils.d.ts +45 -0
  462. package/dist/form-test-utils.d.ts.map +1 -0
  463. package/dist/index.d.ts +28 -14
  464. package/dist/index.d.ts.map +1 -1
  465. package/dist/index.js +189 -177
  466. package/dist/index.js.map +1 -1
  467. package/dist/mixins/FormMixin.d.ts +24 -5
  468. package/dist/mixins/FormMixin.d.ts.map +1 -1
  469. package/dist/mixins/aria-delegation.d.ts +0 -2
  470. package/dist/mixins/aria-delegation.d.ts.map +1 -1
  471. package/dist/mixins/index.d.ts +3 -1
  472. package/dist/mixins/index.d.ts.map +1 -1
  473. package/dist/shared/{FormMixin-Bjvw20G5.js → FormMixin-B8PXk5RQ.js} +31 -14
  474. package/dist/shared/FormMixin-B8PXk5RQ.js.map +1 -0
  475. package/dist/shared/aria-delegation-Doq6RRUy.js.map +1 -1
  476. package/dist/shared/{helix-element-BJh1Ffvi.js → helix-element-BNEYeiys.js} +30 -24
  477. package/dist/shared/helix-element-BNEYeiys.js.map +1 -0
  478. package/dist/shared/{hx-accordion-SlwR2C6S.js → hx-accordion-Wt52OOZD.js} +49 -49
  479. package/dist/shared/hx-accordion-Wt52OOZD.js.map +1 -0
  480. package/dist/shared/{hx-action-bar-CNLYufVd.js → hx-action-bar-BKMADbHj.js} +89 -85
  481. package/dist/shared/hx-action-bar-BKMADbHj.js.map +1 -0
  482. package/dist/shared/{hx-alert-DdlSyJGk.js → hx-alert-D7n94HwI.js} +26 -26
  483. package/dist/shared/hx-alert-D7n94HwI.js.map +1 -0
  484. package/dist/shared/{hx-avatar-an-WsuLl.js → hx-avatar-iLYzu8MJ.js} +10 -10
  485. package/dist/shared/hx-avatar-iLYzu8MJ.js.map +1 -0
  486. package/dist/shared/{hx-badge-B_PzGlUo.js → hx-badge-CVCmMPyW.js} +27 -27
  487. package/dist/shared/hx-badge-CVCmMPyW.js.map +1 -0
  488. package/dist/shared/{hx-banner-D8AxkCfc.js → hx-banner-C_He7Tr4.js} +51 -51
  489. package/dist/shared/hx-banner-C_He7Tr4.js.map +1 -0
  490. package/dist/shared/{hx-breadcrumb-item-BCUIvpYX.js → hx-breadcrumb-item-CldCwD1d.js} +105 -82
  491. package/dist/shared/hx-breadcrumb-item-CldCwD1d.js.map +1 -0
  492. package/dist/shared/{hx-button-BzqsDHmZ.js → hx-button-Ddl-T6T-.js} +110 -84
  493. package/dist/shared/hx-button-Ddl-T6T-.js.map +1 -0
  494. package/dist/shared/{hx-button-group-a5Pb_9fU.js → hx-button-group-BJOGWoMa.js} +30 -17
  495. package/dist/shared/hx-button-group-BJOGWoMa.js.map +1 -0
  496. package/dist/shared/{hx-card-DYlaxQy0.js → hx-card-ycveujjL.js} +13 -13
  497. package/dist/shared/hx-card-ycveujjL.js.map +1 -0
  498. package/dist/shared/{hx-carousel-item-KQfCekKF.js → hx-carousel-item-D_dCv61-.js} +37 -28
  499. package/dist/shared/hx-carousel-item-D_dCv61-.js.map +1 -0
  500. package/dist/shared/{hx-checkbox-DyDbR1B9.js → hx-checkbox-DkkoWoye.js} +77 -60
  501. package/dist/shared/hx-checkbox-DkkoWoye.js.map +1 -0
  502. package/dist/shared/{hx-checkbox-group-C8TaFqy0.js → hx-checkbox-group-C3poJ-Zw.js} +55 -64
  503. package/dist/shared/hx-checkbox-group-C3poJ-Zw.js.map +1 -0
  504. package/dist/shared/{hx-clinical-status-dDyk5oj1.js → hx-clinical-status-BS5lcddT.js} +52 -53
  505. package/dist/shared/hx-clinical-status-BS5lcddT.js.map +1 -0
  506. package/dist/shared/{hx-code-snippet-DasrRF9k.js → hx-code-snippet-B7wUKzyb.js} +12 -13
  507. package/dist/shared/hx-code-snippet-B7wUKzyb.js.map +1 -0
  508. package/dist/shared/{hx-color-picker-zv6wtok4.js → hx-color-picker-DBaKTVLr.js} +318 -57
  509. package/dist/shared/hx-color-picker-DBaKTVLr.js.map +1 -0
  510. package/dist/shared/hx-combobox-BmgYT7Ar.js +929 -0
  511. package/dist/shared/hx-combobox-BmgYT7Ar.js.map +1 -0
  512. package/dist/shared/{hx-container-BwWbMPTH.js → hx-container-DVI7sxfX.js} +25 -15
  513. package/dist/shared/hx-container-DVI7sxfX.js.map +1 -0
  514. package/dist/shared/{hx-copy-button-DikpbhWY.js → hx-copy-button-8deNUdwP.js} +20 -20
  515. package/dist/shared/hx-copy-button-8deNUdwP.js.map +1 -0
  516. package/dist/shared/{hx-counter-_m4cq45V.js → hx-counter-CKfl_g8K.js} +36 -29
  517. package/dist/shared/hx-counter-CKfl_g8K.js.map +1 -0
  518. package/dist/shared/{hx-data-table-609C-e9w.js → hx-data-table-B6h0RPn0.js} +107 -101
  519. package/dist/shared/hx-data-table-B6h0RPn0.js.map +1 -0
  520. package/dist/shared/hx-date-picker-Dq2Nb68_.js +1077 -0
  521. package/dist/shared/hx-date-picker-Dq2Nb68_.js.map +1 -0
  522. package/dist/shared/{hx-dialog-D_DeqcNS.js → hx-dialog-CvIlY0Tc.js} +66 -54
  523. package/dist/shared/hx-dialog-CvIlY0Tc.js.map +1 -0
  524. package/dist/shared/{hx-divider-lfOMElo2.js → hx-divider-DwpOrzMW.js} +7 -7
  525. package/dist/shared/hx-divider-DwpOrzMW.js.map +1 -0
  526. package/dist/shared/{hx-drawer-NleCbKuN.js → hx-drawer-Cx2ZJhBe.js} +14 -14
  527. package/dist/shared/hx-drawer-Cx2ZJhBe.js.map +1 -0
  528. package/dist/shared/{hx-dropdown-CA9WYdhm.js → hx-dropdown-BjDrPUq5.js} +30 -31
  529. package/dist/shared/hx-dropdown-BjDrPUq5.js.map +1 -0
  530. package/dist/shared/{hx-field-Duiib9Bj.js → hx-field-Dp3qQMut.js} +15 -15
  531. package/dist/shared/hx-field-Dp3qQMut.js.map +1 -0
  532. package/dist/shared/{hx-field-label-Dud-psvE.js → hx-field-label-BC8QViXv.js} +8 -8
  533. package/dist/shared/hx-field-label-BC8QViXv.js.map +1 -0
  534. package/dist/shared/{hx-file-upload-CmCCAvej.js → hx-file-upload-B6Yl1u0i.js} +101 -84
  535. package/dist/shared/hx-file-upload-B6Yl1u0i.js.map +1 -0
  536. package/dist/shared/{hx-form-BM6PHsw3.js → hx-form-ButQFt9A.js} +12 -11
  537. package/dist/shared/hx-form-ButQFt9A.js.map +1 -0
  538. package/dist/shared/{hx-format-date-B7L9odbA.js → hx-format-date-CKnlQOmV.js} +20 -9
  539. package/dist/shared/hx-format-date-CKnlQOmV.js.map +1 -0
  540. package/dist/shared/{hx-grid-BIAR5h9m.js → hx-grid-CXZf3jeK.js} +28 -18
  541. package/dist/shared/hx-grid-CXZf3jeK.js.map +1 -0
  542. package/dist/shared/{hx-help-text-DARi-Pfp.js → hx-help-text-D7eytSim.js} +12 -12
  543. package/dist/shared/hx-help-text-D7eytSim.js.map +1 -0
  544. package/dist/shared/{hx-icon-jWcGmn66.js → hx-icon-CcyDPDYY.js} +96 -62
  545. package/dist/shared/hx-icon-CcyDPDYY.js.map +1 -0
  546. package/dist/shared/{hx-icon-button-BcZtVVtH.js → hx-icon-button-BHneqPCU.js} +2 -3
  547. package/dist/shared/{hx-icon-button-BcZtVVtH.js.map → hx-icon-button-BHneqPCU.js.map} +1 -1
  548. package/dist/shared/{hx-image-DOjPp-K5.js → hx-image-2gt14zZd.js} +9 -9
  549. package/dist/shared/hx-image-2gt14zZd.js.map +1 -0
  550. package/dist/shared/{hx-link-DCBct0f4.js → hx-link-BESrWK8M.js} +17 -17
  551. package/dist/shared/hx-link-BESrWK8M.js.map +1 -0
  552. package/dist/shared/{hx-list-Dnei26t4.js → hx-list-_9qVv02L.js} +32 -22
  553. package/dist/shared/hx-list-_9qVv02L.js.map +1 -0
  554. package/dist/shared/{hx-menu-divider-DVWER7iT.js → hx-menu-divider-Ck-9Os1t.js} +19 -19
  555. package/dist/shared/hx-menu-divider-Ck-9Os1t.js.map +1 -0
  556. package/dist/shared/{hx-meter-ChZdWNF2.js → hx-meter-TbROk-dw.js} +18 -18
  557. package/dist/shared/hx-meter-TbROk-dw.js.map +1 -0
  558. package/dist/shared/{hx-nav-CHX1JOWB.js → hx-nav-BcYDmjf7.js} +59 -60
  559. package/dist/shared/hx-nav-BcYDmjf7.js.map +1 -0
  560. package/dist/shared/{hx-nav-item-CRAESq9s.js → hx-nav-item-pqPasRUm.js} +33 -23
  561. package/dist/shared/hx-nav-item-pqPasRUm.js.map +1 -0
  562. package/dist/shared/{hx-number-input-Cm682AVP.js → hx-number-input-mOIZ3-46.js} +57 -66
  563. package/dist/shared/hx-number-input-mOIZ3-46.js.map +1 -0
  564. package/dist/shared/{hx-overflow-menu-BDl6QfUD.js → hx-overflow-menu-Dprb9lnT.js} +46 -47
  565. package/dist/shared/hx-overflow-menu-Dprb9lnT.js.map +1 -0
  566. package/dist/shared/{hx-pagination-BNtx-LG6.js → hx-pagination-AguTQjYC.js} +35 -35
  567. package/dist/shared/hx-pagination-AguTQjYC.js.map +1 -0
  568. package/dist/shared/{hx-patient-banner-B4IjHeTx.js → hx-patient-banner-uE6gqLpT.js} +16 -16
  569. package/dist/shared/hx-patient-banner-uE6gqLpT.js.map +1 -0
  570. package/dist/shared/{hx-phi-field-DD1qcBSO.js → hx-phi-field-BC_XowhC.js} +138 -56
  571. package/dist/shared/hx-phi-field-BC_XowhC.js.map +1 -0
  572. package/dist/shared/{hx-popover-ZGRFgBbx.js → hx-popover-B2_203ct.js} +25 -25
  573. package/dist/shared/hx-popover-B2_203ct.js.map +1 -0
  574. package/dist/shared/{hx-popup-Cc4qz89i.js → hx-popup-DZXpsJ1R.js} +77 -64
  575. package/dist/shared/hx-popup-DZXpsJ1R.js.map +1 -0
  576. package/dist/shared/{hx-progress-bar-BY1uE6bN.js → hx-progress-bar-KjEkEJLy.js} +19 -19
  577. package/dist/shared/hx-progress-bar-KjEkEJLy.js.map +1 -0
  578. package/dist/shared/{hx-progress-ring-Cs0WgWDJ.js → hx-progress-ring-3zMwvrwD.js} +53 -31
  579. package/dist/shared/hx-progress-ring-3zMwvrwD.js.map +1 -0
  580. package/dist/shared/{hx-prose-Ml_L2zje.js → hx-prose-BCtK7YL6.js} +48 -15
  581. package/dist/shared/{hx-prose-Ml_L2zje.js.map → hx-prose-BCtK7YL6.js.map} +1 -1
  582. package/dist/shared/{hx-radio-YEEsbUPN.js → hx-radio-BBC5qZgE.js} +99 -105
  583. package/dist/shared/hx-radio-BBC5qZgE.js.map +1 -0
  584. package/dist/shared/{hx-rating-DjUJTT0M.js → hx-rating-C3E3ENJb.js} +42 -56
  585. package/dist/shared/hx-rating-C3E3ENJb.js.map +1 -0
  586. package/dist/shared/{hx-select-DZ7wfcJx.js → hx-select-CixTo7jp.js} +105 -116
  587. package/dist/shared/hx-select-CixTo7jp.js.map +1 -0
  588. package/dist/shared/{hx-skeleton-aqa-gr1S.js → hx-skeleton-LxkI0pxr.js} +15 -15
  589. package/dist/shared/hx-skeleton-LxkI0pxr.js.map +1 -0
  590. package/dist/shared/{hx-slider-DAilFrR_.js → hx-slider-DFHuzF3N.js} +74 -89
  591. package/dist/shared/hx-slider-DFHuzF3N.js.map +1 -0
  592. package/dist/shared/{hx-spinner-Dw3cRY-9.js → hx-spinner-BKjuCdZB.js} +9 -9
  593. package/dist/shared/hx-spinner-BKjuCdZB.js.map +1 -0
  594. package/dist/shared/{hx-split-button-Dk-zMDDo.js → hx-split-button-CGcJMmCG.js} +14 -14
  595. package/dist/shared/hx-split-button-CGcJMmCG.js.map +1 -0
  596. package/dist/shared/{hx-split-panel-Kdp4BiLz.js → hx-split-panel-C-1R10Mc.js} +57 -47
  597. package/dist/shared/hx-split-panel-C-1R10Mc.js.map +1 -0
  598. package/dist/shared/{hx-stack-B76_1O6g.js → hx-stack-DGfcOfWJ.js} +21 -11
  599. package/dist/shared/hx-stack-DGfcOfWJ.js.map +1 -0
  600. package/dist/shared/{hx-stat-DKlyBL_K.js → hx-stat-BTpykQAt.js} +14 -14
  601. package/dist/shared/hx-stat-BTpykQAt.js.map +1 -0
  602. package/dist/shared/{hx-status-indicator-DWSM0Ctm.js → hx-status-indicator-X2QEWNFt.js} +13 -13
  603. package/dist/shared/hx-status-indicator-X2QEWNFt.js.map +1 -0
  604. package/dist/shared/{hx-step-CuoOvcI8.js → hx-step-CRNQlmSo.js} +47 -30
  605. package/dist/shared/hx-step-CRNQlmSo.js.map +1 -0
  606. package/dist/shared/{hx-structured-list-CQCD7bCT.js → hx-structured-list-CqNbaEXg.js} +12 -12
  607. package/dist/shared/hx-structured-list-CqNbaEXg.js.map +1 -0
  608. package/dist/shared/hx-style-scope-TDnR8H4O.js +251 -0
  609. package/dist/shared/hx-style-scope-TDnR8H4O.js.map +1 -0
  610. package/dist/shared/{hx-switch-BdxKN9WM.js → hx-switch-DqOD9JR7.js} +56 -72
  611. package/dist/shared/hx-switch-DqOD9JR7.js.map +1 -0
  612. package/dist/shared/{hx-tab-panel-CwClQoWP.js → hx-tab-panel-BIzKfW5i.js} +29 -28
  613. package/dist/shared/hx-tab-panel-BIzKfW5i.js.map +1 -0
  614. package/dist/shared/{hx-tag-BL5qJJCN.js → hx-tag-CgnrNnte.js} +23 -23
  615. package/dist/shared/hx-tag-CgnrNnte.js.map +1 -0
  616. package/dist/shared/{hx-td-CzSvVKdp.js → hx-td-Bra35cH4.js} +37 -37
  617. package/dist/shared/hx-td-Bra35cH4.js.map +1 -0
  618. package/dist/shared/{hx-text-DcWBqZwx.js → hx-text-DMC2CPlL.js} +74 -41
  619. package/dist/shared/hx-text-DMC2CPlL.js.map +1 -0
  620. package/dist/shared/{hx-text-input-BfMrvN9N.js → hx-text-input--q0GH78x.js} +19 -20
  621. package/dist/shared/hx-text-input--q0GH78x.js.map +1 -0
  622. package/dist/shared/{hx-textarea-C-i_Vam6.js → hx-textarea-CK621vSL.js} +28 -54
  623. package/dist/shared/hx-textarea-CK621vSL.js.map +1 -0
  624. package/dist/shared/{hx-theme-pc1V7dyL.js → hx-theme-DfEy-SJA.js} +72 -64
  625. package/dist/shared/hx-theme-DfEy-SJA.js.map +1 -0
  626. package/dist/shared/{hx-time-picker-MZyLQPW9.js → hx-time-picker-tPUfgElQ.js} +264 -35
  627. package/dist/shared/hx-time-picker-tPUfgElQ.js.map +1 -0
  628. package/dist/shared/{hx-toggle-button-ClyNYNVI.js → hx-toggle-button-L-uBJr-a.js} +9 -10
  629. package/dist/shared/hx-toggle-button-L-uBJr-a.js.map +1 -0
  630. package/dist/shared/{hx-tooltip-ByWT987R.js → hx-tooltip-B_zfKvwc.js} +22 -23
  631. package/dist/shared/hx-tooltip-B_zfKvwc.js.map +1 -0
  632. package/dist/shared/{hx-top-nav-k7hY78kt.js → hx-top-nav-CATbRvIv.js} +24 -22
  633. package/dist/shared/hx-top-nav-CATbRvIv.js.map +1 -0
  634. package/dist/shared/{hx-tree-item-D0ZphA45.js → hx-tree-item-A45WCiBu.js} +29 -9
  635. package/dist/shared/hx-tree-item-A45WCiBu.js.map +1 -0
  636. package/dist/shared/hx-visually-hidden-0bZKOWgT.js +66 -0
  637. package/dist/shared/hx-visually-hidden-0bZKOWgT.js.map +1 -0
  638. package/dist/shared/id-counter-DuX8vsui.js +11 -0
  639. package/dist/shared/{id-counter-PTgF-zcG.js.map → id-counter-DuX8vsui.js.map} +1 -1
  640. package/dist/shared/{toast-factory-Cwd0PihS.js → toast-factory-BPPnG3mM.js} +23 -24
  641. package/dist/shared/toast-factory-BPPnG3mM.js.map +1 -0
  642. package/dist/utilities/injectLightStyles.d.ts.map +1 -1
  643. package/dist/utilities/sanitizeCss.d.ts +43 -0
  644. package/dist/utilities/sanitizeCss.d.ts.map +1 -0
  645. package/package.json +29 -13
  646. package/dist/shared/FormMixin-Bjvw20G5.js.map +0 -1
  647. package/dist/shared/document-token-adoption-DuYNKd4k.js +0 -21
  648. package/dist/shared/document-token-adoption-DuYNKd4k.js.map +0 -1
  649. package/dist/shared/helix-element-BJh1Ffvi.js.map +0 -1
  650. package/dist/shared/hx-accordion-SlwR2C6S.js.map +0 -1
  651. package/dist/shared/hx-action-bar-CNLYufVd.js.map +0 -1
  652. package/dist/shared/hx-alert-DdlSyJGk.js.map +0 -1
  653. package/dist/shared/hx-avatar-an-WsuLl.js.map +0 -1
  654. package/dist/shared/hx-badge-B_PzGlUo.js.map +0 -1
  655. package/dist/shared/hx-banner-D8AxkCfc.js.map +0 -1
  656. package/dist/shared/hx-breadcrumb-item-BCUIvpYX.js.map +0 -1
  657. package/dist/shared/hx-button-BzqsDHmZ.js.map +0 -1
  658. package/dist/shared/hx-button-group-a5Pb_9fU.js.map +0 -1
  659. package/dist/shared/hx-card-DYlaxQy0.js.map +0 -1
  660. package/dist/shared/hx-carousel-item-KQfCekKF.js.map +0 -1
  661. package/dist/shared/hx-checkbox-DyDbR1B9.js.map +0 -1
  662. package/dist/shared/hx-checkbox-group-C8TaFqy0.js.map +0 -1
  663. package/dist/shared/hx-clinical-status-dDyk5oj1.js.map +0 -1
  664. package/dist/shared/hx-code-snippet-DasrRF9k.js.map +0 -1
  665. package/dist/shared/hx-color-picker-zv6wtok4.js.map +0 -1
  666. package/dist/shared/hx-combobox-C-DVLFpu.js +0 -535
  667. package/dist/shared/hx-combobox-C-DVLFpu.js.map +0 -1
  668. package/dist/shared/hx-container-BwWbMPTH.js.map +0 -1
  669. package/dist/shared/hx-copy-button-DikpbhWY.js.map +0 -1
  670. package/dist/shared/hx-counter-_m4cq45V.js.map +0 -1
  671. package/dist/shared/hx-data-table-609C-e9w.js.map +0 -1
  672. package/dist/shared/hx-date-picker-Bh8410Sf.js +0 -618
  673. package/dist/shared/hx-date-picker-Bh8410Sf.js.map +0 -1
  674. package/dist/shared/hx-dialog-D_DeqcNS.js.map +0 -1
  675. package/dist/shared/hx-divider-lfOMElo2.js.map +0 -1
  676. package/dist/shared/hx-drawer-NleCbKuN.js.map +0 -1
  677. package/dist/shared/hx-dropdown-CA9WYdhm.js.map +0 -1
  678. package/dist/shared/hx-field-Duiib9Bj.js.map +0 -1
  679. package/dist/shared/hx-field-label-Dud-psvE.js.map +0 -1
  680. package/dist/shared/hx-file-upload-CmCCAvej.js.map +0 -1
  681. package/dist/shared/hx-form-BM6PHsw3.js.map +0 -1
  682. package/dist/shared/hx-format-date-B7L9odbA.js.map +0 -1
  683. package/dist/shared/hx-grid-BIAR5h9m.js.map +0 -1
  684. package/dist/shared/hx-help-text-DARi-Pfp.js.map +0 -1
  685. package/dist/shared/hx-icon-jWcGmn66.js.map +0 -1
  686. package/dist/shared/hx-image-DOjPp-K5.js.map +0 -1
  687. package/dist/shared/hx-link-DCBct0f4.js.map +0 -1
  688. package/dist/shared/hx-list-Dnei26t4.js.map +0 -1
  689. package/dist/shared/hx-menu-divider-DVWER7iT.js.map +0 -1
  690. package/dist/shared/hx-meter-ChZdWNF2.js.map +0 -1
  691. package/dist/shared/hx-nav-CHX1JOWB.js.map +0 -1
  692. package/dist/shared/hx-nav-item-CRAESq9s.js.map +0 -1
  693. package/dist/shared/hx-number-input-Cm682AVP.js.map +0 -1
  694. package/dist/shared/hx-overflow-menu-BDl6QfUD.js.map +0 -1
  695. package/dist/shared/hx-pagination-BNtx-LG6.js.map +0 -1
  696. package/dist/shared/hx-patient-banner-B4IjHeTx.js.map +0 -1
  697. package/dist/shared/hx-phi-field-DD1qcBSO.js.map +0 -1
  698. package/dist/shared/hx-popover-ZGRFgBbx.js.map +0 -1
  699. package/dist/shared/hx-popup-Cc4qz89i.js.map +0 -1
  700. package/dist/shared/hx-progress-bar-BY1uE6bN.js.map +0 -1
  701. package/dist/shared/hx-progress-ring-Cs0WgWDJ.js.map +0 -1
  702. package/dist/shared/hx-radio-YEEsbUPN.js.map +0 -1
  703. package/dist/shared/hx-rating-DjUJTT0M.js.map +0 -1
  704. package/dist/shared/hx-select-DZ7wfcJx.js.map +0 -1
  705. package/dist/shared/hx-skeleton-aqa-gr1S.js.map +0 -1
  706. package/dist/shared/hx-slider-DAilFrR_.js.map +0 -1
  707. package/dist/shared/hx-spinner-Dw3cRY-9.js.map +0 -1
  708. package/dist/shared/hx-split-button-Dk-zMDDo.js.map +0 -1
  709. package/dist/shared/hx-split-panel-Kdp4BiLz.js.map +0 -1
  710. package/dist/shared/hx-stack-B76_1O6g.js.map +0 -1
  711. package/dist/shared/hx-stat-DKlyBL_K.js.map +0 -1
  712. package/dist/shared/hx-status-indicator-DWSM0Ctm.js.map +0 -1
  713. package/dist/shared/hx-step-CuoOvcI8.js.map +0 -1
  714. package/dist/shared/hx-structured-list-CQCD7bCT.js.map +0 -1
  715. package/dist/shared/hx-style-scope-CsQ2Phf_.js +0 -126
  716. package/dist/shared/hx-style-scope-CsQ2Phf_.js.map +0 -1
  717. package/dist/shared/hx-switch-BdxKN9WM.js.map +0 -1
  718. package/dist/shared/hx-tab-panel-CwClQoWP.js.map +0 -1
  719. package/dist/shared/hx-tag-BL5qJJCN.js.map +0 -1
  720. package/dist/shared/hx-td-CzSvVKdp.js.map +0 -1
  721. package/dist/shared/hx-text-DcWBqZwx.js.map +0 -1
  722. package/dist/shared/hx-text-input-BfMrvN9N.js.map +0 -1
  723. package/dist/shared/hx-textarea-C-i_Vam6.js.map +0 -1
  724. package/dist/shared/hx-theme-pc1V7dyL.js.map +0 -1
  725. package/dist/shared/hx-time-picker-MZyLQPW9.js.map +0 -1
  726. package/dist/shared/hx-toggle-button-ClyNYNVI.js.map +0 -1
  727. package/dist/shared/hx-tooltip-ByWT987R.js.map +0 -1
  728. package/dist/shared/hx-top-nav-k7hY78kt.js.map +0 -1
  729. package/dist/shared/hx-tree-item-D0ZphA45.js.map +0 -1
  730. package/dist/shared/hx-visually-hidden-vKX8QjeX.js +0 -54
  731. package/dist/shared/hx-visually-hidden-vKX8QjeX.js.map +0 -1
  732. package/dist/shared/id-counter-PTgF-zcG.js +0 -15
  733. package/dist/shared/toast-factory-Cwd0PihS.js.map +0 -1
  734. package/dist/tools/cem-a11y-analyzer/analyzers/aria-analyzer.d.ts +0 -12
  735. package/dist/tools/cem-a11y-analyzer/analyzers/aria-analyzer.d.ts.map +0 -1
  736. package/dist/tools/cem-a11y-analyzer/analyzers/focus-analyzer.d.ts +0 -13
  737. package/dist/tools/cem-a11y-analyzer/analyzers/focus-analyzer.d.ts.map +0 -1
  738. package/dist/tools/cem-a11y-analyzer/analyzers/form-analyzer.d.ts +0 -13
  739. package/dist/tools/cem-a11y-analyzer/analyzers/form-analyzer.d.ts.map +0 -1
  740. package/dist/tools/cem-a11y-analyzer/analyzers/keyboard-analyzer.d.ts +0 -12
  741. package/dist/tools/cem-a11y-analyzer/analyzers/keyboard-analyzer.d.ts.map +0 -1
  742. package/dist/tools/cem-a11y-analyzer/analyzers/label-analyzer.d.ts +0 -13
  743. package/dist/tools/cem-a11y-analyzer/analyzers/label-analyzer.d.ts.map +0 -1
  744. package/dist/tools/cem-a11y-analyzer/analyzers/motion-analyzer.d.ts +0 -12
  745. package/dist/tools/cem-a11y-analyzer/analyzers/motion-analyzer.d.ts.map +0 -1
  746. package/dist/tools/cem-a11y-analyzer/index.d.ts +0 -14
  747. package/dist/tools/cem-a11y-analyzer/index.d.ts.map +0 -1
  748. package/dist/tools/cem-a11y-analyzer/reporter.d.ts +0 -6
  749. package/dist/tools/cem-a11y-analyzer/reporter.d.ts.map +0 -1
  750. package/dist/tools/cem-a11y-analyzer/scorer.d.ts +0 -22
  751. package/dist/tools/cem-a11y-analyzer/scorer.d.ts.map +0 -1
  752. package/dist/tools/cem-a11y-analyzer/types.d.ts +0 -171
  753. package/dist/tools/cem-a11y-analyzer/types.d.ts.map +0 -1
@@ -3,7 +3,7 @@
3
3
  /* ── hx-accordion ── */
4
4
  :host {
5
5
  display: block;
6
- font-family: var(--hx-font-family-sans, sans-serif);
6
+ font-family: var(--hx-accordion-font-family, var(--hx-font-family-sans, sans-serif));
7
7
  }
8
8
 
9
9
  .accordion {
@@ -70,10 +70,10 @@
70
70
  /* ─── Variant: outlined ─── */
71
71
 
72
72
  .base--outlined {
73
- background: var(--hx-action-bar-bg, var(--hx-color-neutral-0, #fff));
73
+ background: var(--hx-action-bar-bg, var(--hx-color-neutral-0, #ffffff));
74
74
  border: var(
75
75
  --hx-action-bar-border,
76
- var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb)
76
+ var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e2e8f0)
77
77
  );
78
78
  border-radius: var(--hx-border-radius-md, 0.375rem);
79
79
  }
@@ -81,7 +81,7 @@
81
81
  /* ─── Variant: filled ─── */
82
82
 
83
83
  .base--filled {
84
- background: var(--hx-action-bar-bg, var(--hx-color-neutral-50, #f9fafb));
84
+ background: var(--hx-action-bar-bg, var(--hx-color-neutral-50, #f8fafc));
85
85
  border-radius: var(--hx-border-radius-md, 0.375rem);
86
86
  }
87
87
 
@@ -135,6 +135,20 @@
135
135
  ::slotted(*) {
136
136
  flex-shrink: 0;
137
137
  }
138
+
139
+ /* ─── High Contrast Mode (forced-colors) ─── */
140
+
141
+ @media (forced-colors: active) {
142
+ /* Outlined variant: border is already present and will be honored by the browser */
143
+ .base--outlined {
144
+ border: 1px solid CanvasText;
145
+ }
146
+
147
+ /* Filled variant: background is suppressed — add border to maintain visual separation */
148
+ .base--filled {
149
+ border: 1px solid CanvasText;
150
+ }
151
+ }
138
152
  /* ── hx-alert ── */
139
153
  :host {
140
154
  display: block;
@@ -173,10 +187,10 @@
173
187
  gap: var(--hx-alert-gap, var(--hx-space-3, 0.75rem));
174
188
  padding: var(--hx-alert-padding, var(--hx-space-4, 1rem));
175
189
  border: var(--hx-alert-border-width, var(--hx-border-width-thin, 1px)) solid
176
- var(--hx-alert-border-color, var(--hx-color-info-200, #b3d9ef));
190
+ var(--hx-alert-border-color, var(--hx-color-info-200, #bae6fd));
177
191
  border-radius: var(--hx-alert-border-radius, var(--hx-border-radius-md, 0.375rem));
178
- background-color: var(--hx-alert-bg, var(--hx-color-info-50, #e8f4fd));
179
- color: var(--hx-alert-color, var(--hx-color-info-800, #1a3a4a));
192
+ background-color: var(--hx-alert-bg, var(--hx-color-info-50, #f0f9ff));
193
+ color: var(--hx-alert-color, var(--hx-color-info-800, #0c4a6e));
180
194
  font-family: var(--hx-alert-font-family, var(--hx-font-family-sans, sans-serif));
181
195
  font-size: var(--hx-font-size-sm, 0.875rem);
182
196
  line-height: var(--hx-line-height-normal, 1.5);
@@ -189,7 +203,7 @@
189
203
  .alert--accent {
190
204
  border-width: 0;
191
205
  border-inline-start: var(--hx-alert-accent-width, 4px) solid
192
- var(--hx-alert-border-color, var(--hx-color-info-200, #b3d9ef));
206
+ var(--hx-alert-border-color, var(--hx-color-info-200, #bae6fd));
193
207
  border-radius: 0;
194
208
  }
195
209
 
@@ -216,7 +230,7 @@
216
230
  display: flex;
217
231
  align-items: center;
218
232
  flex-shrink: 0;
219
- color: var(--hx-alert-icon-color, var(--hx-color-info-500, #3b82f6));
233
+ color: var(--hx-alert-icon-color, var(--hx-color-info-500, #0284c7));
220
234
  }
221
235
 
222
236
  .alert__icon svg {
@@ -276,7 +290,7 @@
276
290
  border: none;
277
291
  border-radius: var(--hx-border-radius-sm, 0.25rem);
278
292
  background: transparent;
279
- color: var(--hx-alert-color, var(--hx-color-info-800, #1a3a4a));
293
+ color: var(--hx-alert-color, var(--hx-color-info-800, #0c4a6e));
280
294
  cursor: pointer;
281
295
  font-size: var(--hx-font-size-md, 1rem);
282
296
  line-height: 1;
@@ -316,19 +330,19 @@
316
330
 
317
331
  :host([variant='info']) .alert,
318
332
  :host(:not([variant])) .alert {
319
- --hx-alert-bg: var(--hx-color-info-50, #e8f4fd);
320
- --hx-alert-border-color: var(--hx-color-info-200, #b3d9ef);
321
- --hx-alert-color: var(--hx-color-info-800, #1a3a4a);
322
- --hx-alert-icon-color: var(--hx-color-info-500, #3b82f6);
333
+ --hx-alert-bg: var(--hx-color-info-50, #f0f9ff);
334
+ --hx-alert-border-color: var(--hx-color-info-200, #bae6fd);
335
+ --hx-alert-color: var(--hx-color-info-800, #0c4a6e);
336
+ --hx-alert-icon-color: var(--hx-color-info-500, #0284c7);
323
337
  }
324
338
 
325
339
  /* ─── Variant: success ─── */
326
340
 
327
341
  :host([variant='success']) .alert {
328
- --hx-alert-bg: var(--hx-color-success-50, #ecfdf5);
329
- --hx-alert-border-color: var(--hx-color-success-200, #a7f3d0);
330
- --hx-alert-color: var(--hx-color-success-800, #065f46);
331
- --hx-alert-icon-color: var(--hx-color-success-500, #10b981);
342
+ --hx-alert-bg: var(--hx-color-success-50, #f0fdf4);
343
+ --hx-alert-border-color: var(--hx-color-success-200, #bbf7d0);
344
+ --hx-alert-color: var(--hx-color-success-800, #14532d);
345
+ --hx-alert-icon-color: var(--hx-color-success-500, #16a34a);
332
346
  }
333
347
 
334
348
  /* ─── Variant: warning ─── */
@@ -336,8 +350,8 @@
336
350
  :host([variant='warning']) .alert {
337
351
  --hx-alert-bg: var(--hx-color-warning-50, #fffbeb);
338
352
  --hx-alert-border-color: var(--hx-color-warning-200, #fde68a);
339
- --hx-alert-color: var(--hx-color-warning-800, #92400e);
340
- --hx-alert-icon-color: var(--hx-color-warning-500, #f59e0b);
353
+ --hx-alert-color: var(--hx-color-warning-800, #78350f);
354
+ --hx-alert-icon-color: var(--hx-color-warning-500, #d97706);
341
355
  }
342
356
 
343
357
  /* ─── Variant: error ─── */
@@ -345,8 +359,8 @@
345
359
  :host([variant='error']) .alert {
346
360
  --hx-alert-bg: var(--hx-color-error-50, #fef2f2);
347
361
  --hx-alert-border-color: var(--hx-color-error-200, #fecaca);
348
- --hx-alert-color: var(--hx-color-error-800, #991b1b);
349
- --hx-alert-icon-color: var(--hx-color-error-500, #ef4444);
362
+ --hx-alert-color: var(--hx-color-error-800, #7f1d1d);
363
+ --hx-alert-icon-color: var(--hx-color-error-500, #dc2626);
350
364
  }
351
365
 
352
366
  /* ─── Forced Colors (Windows High Contrast) ─── */
@@ -447,7 +461,7 @@
447
461
  /* ─── Initials ─── */
448
462
 
449
463
  .avatar__initials {
450
- font-family: var(--hx-font-family-sans, sans-serif);
464
+ font-family: var(--hx-avatar-font-family, var(--hx-font-family-sans, sans-serif));
451
465
  font-size: var(--hx-avatar-font-size);
452
466
  font-weight: var(--hx-font-weight-semibold, 600);
453
467
  line-height: 1;
@@ -556,29 +570,29 @@
556
570
  }
557
571
 
558
572
  .badge--secondary {
559
- --hx-badge-bg: var(--hx-badge-secondary-bg, var(--hx-color-neutral-100, #f3f4f6));
560
- --hx-badge-color: var(--hx-badge-secondary-color, var(--hx-color-neutral-700, #374151));
573
+ --hx-badge-bg: var(--hx-badge-secondary-bg, var(--hx-color-neutral-100, #f1f5f9));
574
+ --hx-badge-color: var(--hx-badge-secondary-color, var(--hx-color-neutral-700, #334155));
561
575
  --hx-badge-pulse-color-internal: var(
562
576
  --hx-badge-pulse-color,
563
- var(--hx-badge-secondary-bg, var(--hx-color-neutral-100, #f3f4f6))
577
+ var(--hx-badge-secondary-bg, var(--hx-color-neutral-100, #f1f5f9))
564
578
  );
565
579
  }
566
580
 
567
581
  .badge--success {
568
- --hx-badge-bg: var(--hx-color-success-700, #15803d);
582
+ --hx-badge-bg: var(--hx-color-success-700, #166534);
569
583
  --hx-badge-color: var(--hx-color-neutral-0, #ffffff);
570
584
  --hx-badge-pulse-color-internal: var(
571
585
  --hx-badge-pulse-color,
572
- var(--hx-color-success-700, #15803d)
586
+ var(--hx-color-success-700, #166534)
573
587
  );
574
588
  }
575
589
 
576
590
  .badge--warning {
577
- --hx-badge-bg: var(--hx-color-warning-500, #eab308);
578
- --hx-badge-color: var(--hx-color-neutral-900, #1a1a1a);
591
+ --hx-badge-bg: var(--hx-color-warning-500, #d97706);
592
+ --hx-badge-color: var(--hx-color-neutral-900, #0f172a);
579
593
  --hx-badge-pulse-color-internal: var(
580
594
  --hx-badge-pulse-color,
581
- var(--hx-color-warning-500, #eab308)
595
+ var(--hx-color-warning-500, #d97706)
582
596
  );
583
597
  }
584
598
 
@@ -592,20 +606,20 @@
592
606
  }
593
607
 
594
608
  .badge--neutral {
595
- --hx-badge-bg: var(--hx-color-neutral-200, #e5e7eb);
596
- --hx-badge-color: var(--hx-color-neutral-700, #374151);
609
+ --hx-badge-bg: var(--hx-color-neutral-200, #e2e8f0);
610
+ --hx-badge-color: var(--hx-color-neutral-700, #334155);
597
611
  --hx-badge-pulse-color-internal: var(
598
612
  --hx-badge-pulse-color,
599
- var(--hx-color-neutral-200, #e5e7eb)
613
+ var(--hx-color-neutral-200, #e2e8f0)
600
614
  );
601
615
  }
602
616
 
603
617
  .badge--info {
604
- --hx-badge-bg: var(--hx-badge-info-bg, var(--hx-color-info-700, #0369a1));
618
+ --hx-badge-bg: var(--hx-badge-info-bg, var(--hx-color-info-700, #075985));
605
619
  --hx-badge-color: var(--hx-badge-info-color, var(--hx-color-neutral-0, #ffffff));
606
620
  --hx-badge-pulse-color-internal: var(
607
621
  --hx-badge-pulse-color,
608
- var(--hx-badge-info-bg, var(--hx-color-info-700, #0369a1))
622
+ var(--hx-badge-info-bg, var(--hx-color-info-700, #075985))
609
623
  );
610
624
  }
611
625
 
@@ -685,7 +699,7 @@
685
699
  cursor: pointer;
686
700
  color: inherit;
687
701
  opacity: var(--hx-opacity-75, 0.75);
688
- border-radius: var(--hx-border-radius-sm, 0.125rem);
702
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
689
703
  line-height: 0;
690
704
  /* WCAG 2.5.5: minimum 44×44px touch target */
691
705
  min-width: var(--hx-touch-target-min, 2.75rem);
@@ -698,7 +712,7 @@
698
712
 
699
713
  .badge__remove-button:focus-visible {
700
714
  outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, currentColor);
701
- outline-offset: var(--hx-focus-ring-offset, 1px);
715
+ outline-offset: var(--hx-focus-ring-offset, 2px);
702
716
  }
703
717
 
704
718
  /* ─── Forced Colors (Windows High Contrast) ─── */
@@ -758,10 +772,10 @@
758
772
  align-items: center;
759
773
  gap: var(--hx-banner-gap, var(--hx-space-3, 0.75rem));
760
774
  padding: var(--hx-banner-padding, var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem));
761
- background-color: var(--hx-banner-bg, var(--hx-color-info-50, #e8f4fd));
762
- color: var(--hx-banner-color, var(--hx-color-info-800, #1a3a4a));
775
+ background-color: var(--hx-banner-bg, var(--hx-color-info-50, #f0f9ff));
776
+ color: var(--hx-banner-color, var(--hx-color-info-800, #0c4a6e));
763
777
  border-bottom: var(--hx-banner-border-width, var(--hx-border-width-thin, 1px)) solid
764
- var(--hx-banner-border-color, var(--hx-color-info-200, #b3d9ef));
778
+ var(--hx-banner-border-color, var(--hx-color-info-200, #bae6fd));
765
779
  font-family: var(--hx-banner-font-family, var(--hx-font-family-sans, sans-serif));
766
780
  font-size: var(--hx-font-size-sm, 0.875rem);
767
781
  line-height: var(--hx-line-height-normal, 1.5);
@@ -774,7 +788,7 @@
774
788
  display: flex;
775
789
  align-items: center;
776
790
  flex-shrink: 0;
777
- color: var(--hx-banner-icon-color, var(--hx-color-info-500, #3b82f6));
791
+ color: var(--hx-banner-icon-color, var(--hx-color-info-500, #0284c7));
778
792
  }
779
793
 
780
794
  .banner__icon svg {
@@ -796,7 +810,7 @@
796
810
  display: inline-flex;
797
811
  align-items: center;
798
812
  flex-shrink: 0;
799
- color: var(--hx-banner-action-color, var(--hx-banner-color, var(--hx-color-info-800, #1a3a4a)));
813
+ color: var(--hx-banner-action-color, var(--hx-banner-color, var(--hx-color-info-800, #0c4a6e)));
800
814
  font-weight: var(--hx-font-weight-semibold, 600);
801
815
  text-decoration: underline;
802
816
  text-underline-offset: 2px;
@@ -836,7 +850,7 @@
836
850
  border: none;
837
851
  border-radius: var(--hx-border-radius-sm, 0.25rem);
838
852
  background: transparent;
839
- color: var(--hx-banner-color, var(--hx-color-info-800, #1a3a4a));
853
+ color: var(--hx-banner-color, var(--hx-color-info-800, #0c4a6e));
840
854
  cursor: pointer;
841
855
  font-size: var(--hx-font-size-md, 1rem);
842
856
  line-height: 1;
@@ -870,19 +884,19 @@
870
884
 
871
885
  :host([variant='info']) .banner,
872
886
  :host(:not([variant])) .banner {
873
- --hx-banner-bg: var(--hx-color-info-50, #e8f4fd);
874
- --hx-banner-border-color: var(--hx-color-info-200, #b3d9ef);
875
- --hx-banner-color: var(--hx-color-info-800, #1a3a4a);
876
- --hx-banner-icon-color: var(--hx-color-info-500, #3b82f6);
887
+ --hx-banner-bg: var(--hx-color-info-50, #f0f9ff);
888
+ --hx-banner-border-color: var(--hx-color-info-200, #bae6fd);
889
+ --hx-banner-color: var(--hx-color-info-800, #0c4a6e);
890
+ --hx-banner-icon-color: var(--hx-color-info-500, #0284c7);
877
891
  }
878
892
 
879
893
  /* ─── Variant: success ─── */
880
894
 
881
895
  :host([variant='success']) .banner {
882
- --hx-banner-bg: var(--hx-color-success-50, #ecfdf5);
883
- --hx-banner-border-color: var(--hx-color-success-200, #a7f3d0);
884
- --hx-banner-color: var(--hx-color-success-800, #065f46);
885
- --hx-banner-icon-color: var(--hx-color-success-500, #10b981);
896
+ --hx-banner-bg: var(--hx-color-success-50, #f0fdf4);
897
+ --hx-banner-border-color: var(--hx-color-success-200, #bbf7d0);
898
+ --hx-banner-color: var(--hx-color-success-800, #14532d);
899
+ --hx-banner-icon-color: var(--hx-color-success-500, #16a34a);
886
900
  }
887
901
 
888
902
  /* ─── Variant: warning ─── */
@@ -890,8 +904,8 @@
890
904
  :host([variant='warning']) .banner {
891
905
  --hx-banner-bg: var(--hx-color-warning-50, #fffbeb);
892
906
  --hx-banner-border-color: var(--hx-color-warning-200, #fde68a);
893
- --hx-banner-color: var(--hx-color-warning-800, #92400e);
894
- --hx-banner-icon-color: var(--hx-color-warning-500, #f59e0b);
907
+ --hx-banner-color: var(--hx-color-warning-800, #78350f);
908
+ --hx-banner-icon-color: var(--hx-color-warning-500, #d97706);
895
909
  }
896
910
 
897
911
  /* ─── Variant: error ─── */
@@ -899,8 +913,8 @@
899
913
  :host([variant='error']) .banner {
900
914
  --hx-banner-bg: var(--hx-color-error-50, #fef2f2);
901
915
  --hx-banner-border-color: var(--hx-color-error-200, #fecaca);
902
- --hx-banner-color: var(--hx-color-error-800, #991b1b);
903
- --hx-banner-icon-color: var(--hx-color-error-500, #ef4444);
916
+ --hx-banner-color: var(--hx-color-error-800, #7f1d1d);
917
+ --hx-banner-icon-color: var(--hx-color-error-500, #dc2626);
904
918
  }
905
919
 
906
920
  /* ─── Position: fixed ─── */
@@ -965,6 +979,20 @@
965
979
  display: none;
966
980
  }
967
981
 
982
+ /*
983
+ * Ellipsis ordering when collapsed (FS-014 fix):
984
+ * The ellipsis <hx-breadcrumb-item> lives in shadow DOM to avoid mutating
985
+ * the consumer's light DOM. CSS order places it between the first item
986
+ * (order: 0, default) and the last item (order: 2) in the flex <ol>.
987
+ */
988
+ .hx-bc-ellipsis {
989
+ order: 1;
990
+ }
991
+
992
+ ::slotted([data-bc-last]) {
993
+ order: 2;
994
+ }
995
+
968
996
  /* Visually hide the separator slot — used only to read text content.
969
997
  * display:none is intentional: the slot contains no interactive or focusable
970
998
  * content. If a future change adds focusable elements to this slot, switch to
@@ -972,6 +1000,19 @@
972
1000
  .separator-slot {
973
1001
  display: none;
974
1002
  }
1003
+
1004
+ /* ─── High Contrast Mode (forced-colors) ─── */
1005
+
1006
+ /*
1007
+ * hx-breadcrumb is a nav container. Link colors and separators are handled
1008
+ * by hx-breadcrumb-item's own forced-colors block. No additional overrides needed
1009
+ * at the container level.
1010
+ */
1011
+ @media (forced-colors: active) {
1012
+ :host {
1013
+ forced-color-adjust: auto;
1014
+ }
1015
+ }
975
1016
  /* ── hx-button ── */
976
1017
  :host {
977
1018
  display: inline-block;
@@ -1114,7 +1155,7 @@
1114
1155
  }
1115
1156
 
1116
1157
  .button--primary:hover {
1117
- --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-primary-500));
1158
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-primary-600));
1118
1159
  }
1119
1160
 
1120
1161
  /* ─── Disabled ─── */
@@ -1181,7 +1222,7 @@
1181
1222
 
1182
1223
  /* Primary inverted — slight transparent white overlay on hover */
1183
1224
  :host([inverted]) .button--primary:hover {
1184
- --hx-button-bg: var(--hx-color-primary-400, #3b82f6);
1225
+ --hx-button-bg: var(--hx-color-primary-400, #60a5fa);
1185
1226
  }
1186
1227
 
1187
1228
  /* Secondary inverted — white border and text */
@@ -1362,6 +1403,19 @@
1362
1403
  z-index: 1;
1363
1404
  position: relative;
1364
1405
  }
1406
+
1407
+ /* ─── High Contrast Mode (forced-colors) ─── */
1408
+
1409
+ @media (forced-colors: active) {
1410
+ /*
1411
+ * In forced-colors mode, negative margins that collapse borders between grouped
1412
+ * buttons can obscure focus rings. Raise focused children so the Highlight
1413
+ * outline from hx-button's own forced-colors block is fully visible.
1414
+ */
1415
+ .group ::slotted(:focus-within) {
1416
+ z-index: 2;
1417
+ }
1418
+ }
1365
1419
  /* ── hx-card ── */
1366
1420
  :host {
1367
1421
  display: block;
@@ -1374,12 +1428,12 @@
1374
1428
  flex-direction: column;
1375
1429
  gap: var(--hx-card-gap, var(--hx-space-4, 1rem));
1376
1430
  background-color: var(--hx-card-bg, var(--hx-color-neutral-0, #ffffff));
1377
- color: var(--hx-card-color, var(--hx-color-neutral-800, #212529));
1431
+ color: var(--hx-card-color, var(--hx-color-neutral-800, #1e293b));
1378
1432
  border: var(--hx-border-width-thin, 1px) solid
1379
- var(--hx-card-border-color, var(--hx-color-neutral-200, #dee2e6));
1433
+ var(--hx-card-border-color, var(--hx-color-neutral-200, #e2e8f0));
1380
1434
  border-radius: var(--hx-card-border-radius, var(--hx-border-radius-lg, 0.5rem));
1381
1435
  overflow: hidden;
1382
- font-family: var(--hx-font-family-sans, sans-serif);
1436
+ font-family: var(--hx-card-font-family, var(--hx-font-family-sans, sans-serif));
1383
1437
  transition:
1384
1438
  box-shadow var(--hx-transition-normal, 250ms ease),
1385
1439
  transform var(--hx-transition-normal, 250ms ease);
@@ -1440,7 +1494,7 @@
1440
1494
 
1441
1495
  .card--interactive:hover {
1442
1496
  box-shadow: var(--hx-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
1443
- transform: translateY(var(--hx-lift-md, -2px));
1497
+ transform: translateY(var(--hx-transform-lift-md, -2px));
1444
1498
  }
1445
1499
 
1446
1500
  .card--interactive:focus-visible {
@@ -1502,7 +1556,7 @@
1502
1556
  flex: 1;
1503
1557
  font-size: var(--hx-font-size-md, 1rem);
1504
1558
  line-height: var(--hx-line-height-normal, 1.5);
1505
- color: var(--hx-card-color, var(--hx-color-neutral-600, #495057));
1559
+ color: var(--hx-card-color, var(--hx-color-neutral-600, #475569));
1506
1560
  }
1507
1561
 
1508
1562
  .card__footer {
@@ -1520,7 +1574,7 @@
1520
1574
  padding-bottom: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
1521
1575
  padding-inline-start: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
1522
1576
  border-top: var(--hx-border-width-thin, 1px) solid
1523
- var(--hx-card-border-color, var(--hx-color-neutral-200, #dee2e6));
1577
+ var(--hx-card-border-color, var(--hx-color-neutral-200, #e2e8f0));
1524
1578
  margin-top: auto;
1525
1579
  }
1526
1580
 
@@ -1575,22 +1629,22 @@
1575
1629
  /* WCAG 2.5.5 (healthcare mandate): minimum 44x44px touch target */
1576
1630
  min-width: var(--hx-touch-target-min, 2.75rem);
1577
1631
  min-height: var(--hx-touch-target-min, 2.75rem);
1578
- border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);
1632
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e2e8f0);
1579
1633
  border-radius: var(--hx-border-radius-full, 9999px);
1580
- background: var(--hx-color-neutral-0, #fff);
1581
- color: var(--hx-color-neutral-700, #374151);
1634
+ background: var(--hx-color-neutral-0, #ffffff);
1635
+ color: var(--hx-color-neutral-700, #334155);
1582
1636
  cursor: pointer;
1583
1637
  padding: 0;
1584
1638
  transition:
1585
- background-color var(--hx-transition-fast, 0.15s ease),
1586
- color var(--hx-transition-fast, 0.15s ease),
1587
- border-color var(--hx-transition-fast, 0.15s ease);
1639
+ background-color var(--hx-transition-fast, 150ms ease),
1640
+ color var(--hx-transition-fast, 150ms ease),
1641
+ border-color var(--hx-transition-fast, 150ms ease);
1588
1642
  flex-shrink: 0;
1589
1643
  }
1590
1644
 
1591
1645
  .nav-btn:hover:not([disabled]) {
1592
- background: var(--hx-color-neutral-50, #f9fafb);
1593
- border-color: var(--hx-color-neutral-400, #9ca3af);
1646
+ background: var(--hx-color-neutral-50, #f8fafc);
1647
+ border-color: var(--hx-color-neutral-400, #94a3b8);
1594
1648
  }
1595
1649
 
1596
1650
  .nav-btn:focus-visible {
@@ -1600,7 +1654,7 @@
1600
1654
  }
1601
1655
 
1602
1656
  .nav-btn[disabled] {
1603
- opacity: var(--hx-opacity-disabled, 0.4);
1657
+ opacity: var(--hx-opacity-disabled, 0.5);
1604
1658
  cursor: not-allowed;
1605
1659
  }
1606
1660
 
@@ -1623,16 +1677,16 @@
1623
1677
  border: var(--hx-border-width-thin, 1px) solid transparent;
1624
1678
  border-radius: var(--hx-border-radius-md, 0.375rem);
1625
1679
  background: transparent;
1626
- color: var(--hx-color-neutral-500, #6b7280);
1680
+ color: var(--hx-color-neutral-500, #64748b);
1627
1681
  cursor: pointer;
1628
1682
  padding: 0;
1629
1683
  font-size: var(--hx-font-size-sm, 0.875rem);
1630
- transition: background-color var(--hx-transition-fast, 0.15s ease);
1684
+ transition: background-color var(--hx-transition-fast, 150ms ease);
1631
1685
  flex-shrink: 0;
1632
1686
  }
1633
1687
 
1634
1688
  .play-pause-btn:hover {
1635
- background: var(--hx-color-neutral-100, #f3f4f6);
1689
+ background: var(--hx-color-neutral-100, #f1f5f9);
1636
1690
  }
1637
1691
 
1638
1692
  .play-pause-btn:focus-visible {
@@ -1695,15 +1749,15 @@
1695
1749
  width: var(--hx-carousel-pagination-dot-size, 0.5rem);
1696
1750
  height: var(--hx-carousel-pagination-dot-size, 0.5rem);
1697
1751
  border-radius: var(--hx-border-radius-full, 9999px);
1698
- background: var(--hx-color-neutral-300, #d1d5db);
1752
+ background: var(--hx-color-neutral-300, #cbd5e1);
1699
1753
  transition:
1700
- background-color var(--hx-transition-fast, 0.15s ease),
1701
- transform var(--hx-transition-fast, 0.15s ease);
1754
+ background-color var(--hx-transition-fast, 150ms ease),
1755
+ transform var(--hx-transition-fast, 150ms ease);
1702
1756
  }
1703
1757
 
1704
1758
  .pagination-item[aria-current='true'] .pagination-dot,
1705
1759
  .pagination-item.is-active .pagination-dot {
1706
- background: var(--hx-color-primary-600, #2563eb);
1760
+ background: var(--hx-color-primary-600, #1d4ed8);
1707
1761
  transform: scale(1.25);
1708
1762
  }
1709
1763
 
@@ -1788,7 +1842,7 @@
1788
1842
  display: flex;
1789
1843
  flex-direction: column;
1790
1844
  gap: var(--hx-space-1, 0.25rem);
1791
- font-family: var(--hx-font-family-sans, sans-serif);
1845
+ font-family: var(--hx-checkbox-font-family, var(--hx-font-family-sans, sans-serif));
1792
1846
  }
1793
1847
 
1794
1848
  /* ─── Control (checkbox + label row) ─── */
@@ -1830,7 +1884,7 @@
1830
1884
  width: var(--hx-checkbox-size, var(--hx-size-5, 1.25rem));
1831
1885
  height: var(--hx-checkbox-size, var(--hx-size-5, 1.25rem));
1832
1886
  border: var(--hx-border-width-medium, 2px) solid
1833
- var(--hx-checkbox-border-color, var(--hx-color-neutral-300, #ced4da));
1887
+ var(--hx-checkbox-border-color, var(--hx-color-neutral-300, #cbd5e1));
1834
1888
  border-radius: var(--hx-checkbox-border-radius, var(--hx-border-radius-sm, 0.25rem));
1835
1889
  background-color: var(--hx-checkbox-bg, var(--hx-color-neutral-0, #ffffff));
1836
1890
  transition:
@@ -1868,13 +1922,13 @@
1868
1922
  /* ─── Error State ─── */
1869
1923
 
1870
1924
  .checkbox--error .checkbox__box {
1871
- border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));
1925
+ border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc2626));
1872
1926
  }
1873
1927
 
1874
1928
  .checkbox--error.checkbox--checked .checkbox__box,
1875
1929
  .checkbox--error.checkbox--indeterminate .checkbox__box {
1876
- background-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));
1877
- border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));
1930
+ background-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc2626));
1931
+ border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc2626));
1878
1932
  }
1879
1933
 
1880
1934
  /* ─── Hover ─── */
@@ -1892,7 +1946,7 @@
1892
1946
  }
1893
1947
 
1894
1948
  .checkbox--error .checkbox__control:hover .checkbox__box {
1895
- border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));
1949
+ border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc2626));
1896
1950
  }
1897
1951
 
1898
1952
  /* ─── Checkmark Icon ─── */
@@ -1921,7 +1975,7 @@
1921
1975
  .checkbox__label {
1922
1976
  font-size: var(--hx-font-size-sm, 0.875rem);
1923
1977
  font-weight: var(--hx-font-weight-medium, 500);
1924
- color: var(--hx-checkbox-label-color, var(--hx-color-neutral-700, #343a40));
1978
+ color: var(--hx-checkbox-label-color, var(--hx-color-neutral-700, #334155));
1925
1979
  line-height: var(--hx-line-height-normal, 1.5);
1926
1980
  user-select: none;
1927
1981
  -webkit-user-select: none;
@@ -1936,7 +1990,7 @@
1936
1990
 
1937
1991
  .checkbox__help-text {
1938
1992
  font-size: var(--hx-font-size-xs, 0.75rem);
1939
- color: var(--hx-checkbox-help-text-color, var(--hx-color-neutral-500, #6c757d));
1993
+ color: var(--hx-checkbox-help-text-color, var(--hx-color-neutral-500, #64748b));
1940
1994
  line-height: var(--hx-line-height-normal, 1.5);
1941
1995
  padding-inline-start: calc(
1942
1996
  var(--hx-checkbox-size, var(--hx-size-5, 1.25rem)) + var(--hx-space-2, 0.5rem)
@@ -2078,7 +2132,7 @@
2078
2132
  display: flex;
2079
2133
  flex-direction: column;
2080
2134
  gap: var(--hx-space-2);
2081
- font-family: var(--hx-font-family-sans);
2135
+ font-family: var(--hx-checkbox-group-font-family, var(--hx-font-family-sans));
2082
2136
  }
2083
2137
 
2084
2138
  /* ─── Legend ─── */
@@ -2096,7 +2150,7 @@
2096
2150
  }
2097
2151
 
2098
2152
  .fieldset__required-marker {
2099
- color: var(--hx-checkbox-group-error-color, var(--hx-color-error-500, #dc3545));
2153
+ color: var(--hx-checkbox-group-error-color, var(--hx-color-error-text, #b91c1c));
2100
2154
  font-weight: var(--hx-font-weight-bold);
2101
2155
  }
2102
2156
 
@@ -2116,7 +2170,7 @@
2116
2170
  /* ─── Error State ─── */
2117
2171
 
2118
2172
  .fieldset--error .fieldset__legend {
2119
- color: var(--hx-checkbox-group-error-color, var(--hx-color-error-500, #dc3545));
2173
+ color: var(--hx-checkbox-group-error-color, var(--hx-color-error-text, #b91c1c));
2120
2174
  }
2121
2175
 
2122
2176
  /* ─── Help Text & Error Messages ─── */
@@ -2129,7 +2183,7 @@
2129
2183
 
2130
2184
  .fieldset__error {
2131
2185
  font-size: var(--hx-font-size-xs);
2132
- color: var(--hx-checkbox-group-error-color, var(--hx-color-error-500, #dc3545));
2186
+ color: var(--hx-checkbox-group-error-color, var(--hx-color-error-text, #b91c1c));
2133
2187
  line-height: var(--hx-line-height-normal);
2134
2188
  }
2135
2189
 
@@ -2200,12 +2254,12 @@
2200
2254
  gap: var(--hx-clinical-status-gap, var(--hx-space-3, 0.75rem));
2201
2255
  padding: var(--hx-clinical-status-padding, var(--hx-space-4, 1rem));
2202
2256
  border: var(--hx-clinical-status-border-width, var(--hx-border-width-thin, 1px)) solid
2203
- var(--hx-clinical-status-border-color, var(--hx-color-info-200, #b3d9ef));
2257
+ var(--hx-clinical-status-border-color, var(--hx-color-info-200, #bae6fd));
2204
2258
  border-inline-start: var(--hx-clinical-status-accent-width, 4px) solid
2205
- var(--hx-clinical-status-accent-color, var(--hx-color-info-500, #3b82f6));
2259
+ var(--hx-clinical-status-accent-color, var(--hx-color-info-500, #0284c7));
2206
2260
  border-radius: var(--hx-clinical-status-border-radius, var(--hx-border-radius-md, 0.375rem));
2207
- background-color: var(--hx-clinical-status-bg, var(--hx-color-info-50, #e8f4fd));
2208
- color: var(--hx-clinical-status-color, var(--hx-color-info-800, #1a3a4a));
2261
+ background-color: var(--hx-clinical-status-bg, var(--hx-color-info-50, #f0f9ff));
2262
+ color: var(--hx-clinical-status-color, var(--hx-color-info-800, #0c4a6e));
2209
2263
  font-family: var(--hx-clinical-status-font-family, var(--hx-font-family-sans, sans-serif));
2210
2264
  font-size: var(--hx-font-size-sm, 0.875rem);
2211
2265
  line-height: var(--hx-line-height-normal, 1.5);
@@ -2226,11 +2280,11 @@
2226
2280
 
2227
2281
  :host([severity='info']) .clinical-status,
2228
2282
  :host(:not([severity])) .clinical-status {
2229
- --hx-clinical-status-bg: var(--hx-color-info-50, #e8f4fd);
2230
- --hx-clinical-status-border-color: var(--hx-color-info-200, #b3d9ef);
2231
- --hx-clinical-status-accent-color: var(--hx-color-info-500, #3b82f6);
2232
- --hx-clinical-status-color: var(--hx-color-info-800, #1a3a4a);
2233
- --hx-clinical-status-icon-color: var(--hx-color-info-500, #3b82f6);
2283
+ --hx-clinical-status-bg: var(--hx-color-info-50, #f0f9ff);
2284
+ --hx-clinical-status-border-color: var(--hx-color-info-200, #bae6fd);
2285
+ --hx-clinical-status-accent-color: var(--hx-color-info-500, #0284c7);
2286
+ --hx-clinical-status-color: var(--hx-color-info-800, #0c4a6e);
2287
+ --hx-clinical-status-icon-color: var(--hx-color-info-500, #0284c7);
2234
2288
  }
2235
2289
 
2236
2290
  /* ─── Severity: warning ─── */
@@ -2238,9 +2292,9 @@
2238
2292
  :host([severity='warning']) .clinical-status {
2239
2293
  --hx-clinical-status-bg: var(--hx-color-warning-50, #fffbeb);
2240
2294
  --hx-clinical-status-border-color: var(--hx-color-warning-200, #fde68a);
2241
- --hx-clinical-status-accent-color: var(--hx-color-warning-500, #f59e0b);
2242
- --hx-clinical-status-color: var(--hx-color-warning-800, #92400e);
2243
- --hx-clinical-status-icon-color: var(--hx-color-warning-500, #f59e0b);
2295
+ --hx-clinical-status-accent-color: var(--hx-color-warning-500, #d97706);
2296
+ --hx-clinical-status-color: var(--hx-color-warning-800, #78350f);
2297
+ --hx-clinical-status-icon-color: var(--hx-color-warning-500, #d97706);
2244
2298
  }
2245
2299
 
2246
2300
  /* ─── Severity: critical ─── */
@@ -2248,9 +2302,9 @@
2248
2302
  :host([severity='critical']) .clinical-status {
2249
2303
  --hx-clinical-status-bg: var(--hx-color-error-50, #fef2f2);
2250
2304
  --hx-clinical-status-border-color: var(--hx-color-error-200, #fecaca);
2251
- --hx-clinical-status-accent-color: var(--hx-color-error-500, #ef4444);
2252
- --hx-clinical-status-color: var(--hx-color-error-800, #991b1b);
2253
- --hx-clinical-status-icon-color: var(--hx-color-error-500, #ef4444);
2305
+ --hx-clinical-status-accent-color: var(--hx-color-error-500, #dc2626);
2306
+ --hx-clinical-status-color: var(--hx-color-error-800, #7f1d1d);
2307
+ --hx-clinical-status-icon-color: var(--hx-color-error-500, #dc2626);
2254
2308
  }
2255
2309
 
2256
2310
  /* ─── Severity: emergent ─── */
@@ -2258,9 +2312,9 @@
2258
2312
  :host([severity='emergent']) .clinical-status {
2259
2313
  --hx-clinical-status-bg: var(--hx-color-error-50, #fef2f2);
2260
2314
  --hx-clinical-status-border-color: var(--hx-color-error-300, #fca5a5);
2261
- --hx-clinical-status-accent-color: var(--hx-color-error-700, #b91c1c);
2262
- --hx-clinical-status-color: var(--hx-color-error-900, #7f1d1d);
2263
- --hx-clinical-status-icon-color: var(--hx-color-error-700, #b91c1c);
2315
+ --hx-clinical-status-accent-color: var(--hx-color-error-700, #991b1b);
2316
+ --hx-clinical-status-color: var(--hx-color-error-900, #651a1a);
2317
+ --hx-clinical-status-icon-color: var(--hx-color-error-700, #991b1b);
2264
2318
  border-inline-start-width: var(--hx-clinical-status-emergent-accent-width, 6px);
2265
2319
  font-weight: var(--hx-font-weight-semibold, 600);
2266
2320
  }
@@ -2271,7 +2325,7 @@
2271
2325
  display: flex;
2272
2326
  align-items: center;
2273
2327
  flex-shrink: 0;
2274
- color: var(--hx-clinical-status-icon-color, var(--hx-color-info-500, #3b82f6));
2328
+ color: var(--hx-clinical-status-icon-color, var(--hx-color-info-500, #0284c7));
2275
2329
  }
2276
2330
 
2277
2331
  .clinical-status__icon svg {
@@ -2334,7 +2388,7 @@
2334
2388
  border: none;
2335
2389
  border-radius: var(--hx-border-radius-sm, 0.25rem);
2336
2390
  background: transparent;
2337
- color: var(--hx-clinical-status-color, var(--hx-color-info-800, #1a3a4a));
2391
+ color: var(--hx-clinical-status-color, var(--hx-color-info-800, #0c4a6e));
2338
2392
  cursor: pointer;
2339
2393
  font-size: var(--hx-font-size-md, 1rem);
2340
2394
  line-height: 1;
@@ -2351,7 +2405,7 @@
2351
2405
 
2352
2406
  .clinical-status__dismiss-button:focus-visible {
2353
2407
  outline: var(--hx-focus-ring-width, 2px) solid
2354
- var(--hx-focus-ring-color, var(--hx-color-focus, #2563eb));
2408
+ var(--hx-focus-ring-color, var(--hx-color-focus, #60a5fa));
2355
2409
  outline-offset: var(--hx-focus-ring-offset, 2px);
2356
2410
  opacity: 1;
2357
2411
  }
@@ -2382,7 +2436,7 @@
2382
2436
  font-size: var(--hx-font-size-xs, 0.75rem);
2383
2437
  font-weight: var(--hx-font-weight-semibold, 600);
2384
2438
  text-transform: uppercase;
2385
- letter-spacing: var(--hx-letter-spacing-wide, 0.05em);
2439
+ letter-spacing: var(--hx-letter-spacing-wide, 0.025em);
2386
2440
  cursor: pointer;
2387
2441
  line-height: var(--hx-line-height-normal, 1.5);
2388
2442
  min-height: var(--hx-touch-target-size, 44px);
@@ -2397,7 +2451,7 @@
2397
2451
 
2398
2452
  .clinical-status__acknowledge-button:focus-visible {
2399
2453
  outline: var(--hx-focus-ring-width, 2px) solid
2400
- var(--hx-focus-ring-color, var(--hx-color-focus, #2563eb));
2454
+ var(--hx-focus-ring-color, var(--hx-color-focus, #60a5fa));
2401
2455
  outline-offset: var(--hx-focus-ring-offset, 2px);
2402
2456
  }
2403
2457
 
@@ -2500,7 +2554,7 @@
2500
2554
  display: block;
2501
2555
  font-family: var(--hx-code-snippet-font-family, var(--hx-font-family-mono, monospace));
2502
2556
  font-size: var(--hx-code-snippet-font-size, var(--hx-font-size-sm, 0.875rem));
2503
- line-height: var(--hx-line-height-relaxed, 1.625);
2557
+ line-height: var(--hx-line-height-relaxed, 1.75);
2504
2558
  color: var(--hx-code-snippet-color, var(--hx-color-neutral-100, #f1f5f9));
2505
2559
  tab-size: var(--hx-code-snippet-tab-size, 2);
2506
2560
  }
@@ -2519,7 +2573,7 @@
2519
2573
  border-radius: var(--hx-border-radius-sm, 0.25rem);
2520
2574
  background-color: var(--hx-color-neutral-800, #1e293b);
2521
2575
  color: var(--hx-color-neutral-200, #e2e8f0);
2522
- font-family: var(--hx-font-family-sans, sans-serif);
2576
+ font-family: var(--hx-code-snippet-font-family, var(--hx-font-family-sans, sans-serif));
2523
2577
  font-size: var(--hx-font-size-xs, 0.75rem);
2524
2578
  font-weight: var(--hx-font-weight-medium, 500);
2525
2579
  line-height: 1; /* intentional literal: icon/action button needs line-height 1; no token maps to exactly 1 */
@@ -2561,7 +2615,7 @@
2561
2615
  border-top: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-700, #334155);
2562
2616
  background-color: var(--hx-color-neutral-800, #1e293b);
2563
2617
  color: var(--hx-color-neutral-300, #cbd5e1);
2564
- font-family: var(--hx-font-family-sans, sans-serif);
2618
+ font-family: var(--hx-code-snippet-font-family, var(--hx-font-family-sans, sans-serif));
2565
2619
  font-size: var(--hx-font-size-sm, 0.875rem);
2566
2620
  font-weight: var(--hx-font-weight-medium, 500);
2567
2621
  text-align: center;
@@ -2637,186 +2691,939 @@
2637
2691
  border: 0;
2638
2692
  }
2639
2693
  /* ── hx-color-picker ── */
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}}
2641
- /* ── hx-combobox ── */
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}
2643
- /* ── hx-container ── */
2644
2694
  :host {
2645
- display: block;
2646
- contain: layout style;
2647
- width: 100%;
2648
- background-color: var(--hx-container-bg, transparent);
2649
- box-sizing: border-box;
2695
+ display: inline-block;
2696
+ position: relative;
2697
+ font-family: var(--hx-font-family-sans, sans-serif);
2698
+ font-size: var(--hx-font-size-sm, 0.875rem);
2650
2699
  }
2651
-
2652
- /* ─── Vertical Padding Variants ─── */
2653
-
2654
- :host([padding='sm']) {
2655
- padding-top: var(--hx-space-6, 1.5rem);
2656
- padding-bottom: var(--hx-space-6, 1.5rem);
2700
+ :host([disabled]) {
2701
+ pointer-events: none;
2702
+ opacity: var(--hx-opacity-disabled, 0.5);
2657
2703
  }
2658
-
2659
- :host([padding='md']) {
2660
- padding-top: var(--hx-space-12, 3rem);
2661
- padding-bottom: var(--hx-space-12, 3rem);
2704
+ .trigger {
2705
+ display: inline-flex;
2706
+ align-items: center;
2707
+ gap: var(--hx-space-2, 0.5rem);
2708
+ padding: var(--hx-space-1, 0.25rem);
2709
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #cbd5e1);
2710
+ border-radius: var(--hx-border-radius-md, 0.375rem);
2711
+ background: var(--hx-color-neutral-0, #ffffff);
2712
+ cursor: pointer;
2713
+ transition: border-color var(--hx-transition-fast, 150ms ease);
2662
2714
  }
2663
-
2664
- :host([padding='lg']) {
2665
- padding-top: var(--hx-space-16, 4rem);
2666
- padding-bottom: var(--hx-space-16, 4rem);
2715
+ .trigger:hover:not([disabled]) {
2716
+ border-color: var(--hx-color-primary-500, #2563eb);
2667
2717
  }
2668
-
2669
- :host([padding='xl']) {
2670
- padding-top: var(--hx-space-24, 6rem);
2671
- padding-bottom: var(--hx-space-24, 6rem);
2718
+ :is(.trigger, .gradient-grid, .slider-track, .swatch-btn, .format-btn):focus-visible {
2719
+ outline: var(--hx-focus-ring-width, 2px) solid
2720
+ var(--hx-focus-ring-color, var(--hx-color-primary-500));
2721
+ outline-offset: var(--hx-focus-ring-offset, 2px);
2672
2722
  }
2673
-
2674
- :host([padding='2xl']) {
2675
- padding-top: var(--hx-space-32, 8rem);
2676
- padding-bottom: var(--hx-space-32, 8rem);
2723
+ .trigger-swatch {
2724
+ width: 1.5rem;
2725
+ height: 1.5rem;
2726
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
2727
+ border: var(--hx-border-width-thin, 1px) solid
2728
+ var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1)));
2729
+ background: var(--_preview-color, #000);
2730
+ display: block;
2731
+ flex-shrink: 0;
2677
2732
  }
2678
-
2679
- /* ─── Inner Container ─── */
2680
-
2681
- .container__inner {
2682
- margin-inline-start: auto;
2683
- margin-inline-end: auto;
2684
- padding-inline-start: var(--hx-container-gutter, var(--hx-space-6, 1.5rem));
2685
- padding-inline-end: var(--hx-container-gutter, var(--hx-space-6, 1.5rem));
2686
- box-sizing: border-box;
2687
- width: 100%;
2733
+ .trigger-label {
2734
+ font-size: var(--hx-font-size-sm, 0.875rem);
2735
+ color: var(--hx-color-neutral-700, #334155);
2736
+ font-family: var(--hx-font-family-mono, monospace);
2737
+ white-space: nowrap;
2688
2738
  }
2689
-
2690
- /* ─── Width Variants ─── */
2691
-
2692
- .container__inner--full {
2693
- max-width: none;
2739
+ .panel {
2740
+ position: absolute;
2741
+ z-index: var(--hx-color-picker-z-index, 1000);
2742
+ top: calc(100% + 4px);
2743
+ left: 0;
2744
+ background: var(--hx-color-neutral-0, #ffffff);
2745
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e2e8f0);
2746
+ border-radius: var(--hx-border-radius-lg, 0.5rem);
2747
+ box-shadow: 0 8px 24px
2748
+ var(--hx-color-picker-panel-shadow, var(--hx-overlay-black-15, rgba(0, 0, 0, 0.15)));
2749
+ padding: var(--hx-space-4, 1rem);
2750
+ width: var(--hx-color-picker-width, 260px);
2751
+ display: flex;
2752
+ flex-direction: column;
2753
+ gap: var(--hx-space-3, 0.75rem);
2754
+ outline: none;
2694
2755
  }
2695
-
2696
- .container__inner--content {
2697
- max-width: var(--hx-container-max-width, var(--hx-container-content, 1152px));
2756
+ :host([inline]) .panel {
2757
+ position: static;
2758
+ box-shadow: none;
2759
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e2e8f0);
2760
+ border-radius: var(--hx-border-radius-lg, 0.5rem);
2698
2761
  }
2699
-
2700
- .container__inner--narrow {
2701
- max-width: var(--hx-container-max-width, var(--hx-container-narrow, 768px));
2762
+ .gradient-grid {
2763
+ position: relative;
2764
+ width: 100%;
2765
+ height: var(--hx-color-picker-grid-height, 160px);
2766
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
2767
+ cursor: crosshair;
2768
+ overflow: hidden;
2769
+ touch-action: none;
2770
+ flex-shrink: 0;
2702
2771
  }
2703
-
2704
- .container__inner--sm {
2705
- max-width: var(--hx-container-max-width, var(--hx-container-sm, 640px));
2772
+ .gradient-grid-bg {
2773
+ position: absolute;
2774
+ inset: 0;
2775
+ background:
2776
+ linear-gradient(to bottom, transparent, #000),
2777
+ linear-gradient(to right, #fff, var(--_hue-color, hsl(0, 100%, 50%)));
2778
+ pointer-events: none;
2706
2779
  }
2707
-
2708
- .container__inner--md {
2709
- max-width: var(--hx-container-max-width, var(--hx-container-md, 768px));
2780
+ .gradient-thumb {
2781
+ position: absolute;
2782
+ width: 12px;
2783
+ height: 12px;
2784
+ border-radius: 50%;
2785
+ border: none;
2786
+ box-shadow:
2787
+ 0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #ffffff)),
2788
+ 0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3)));
2789
+ transform: translate(-50%, -50%);
2790
+ pointer-events: none;
2791
+ top: var(--_thumb-y, 0%);
2792
+ left: var(--_thumb-x, 100%);
2710
2793
  }
2711
-
2712
- .container__inner--lg {
2713
- max-width: var(--hx-container-max-width, var(--hx-container-lg, 1024px));
2794
+ .slider-track {
2795
+ position: relative;
2796
+ width: 100%;
2797
+ height: 12px;
2798
+ border-radius: 6px;
2799
+ cursor: pointer;
2800
+ touch-action: none;
2801
+ flex-shrink: 0;
2714
2802
  }
2715
-
2716
- .container__inner--xl {
2717
- max-width: var(--hx-container-max-width, var(--hx-container-xl, 1280px));
2803
+ .hue-track {
2804
+ background: linear-gradient(
2805
+ to right,
2806
+ red,
2807
+ #ff8000,
2808
+ #ff0,
2809
+ #80ff00,
2810
+ #0f0,
2811
+ #00ff80,
2812
+ #0ff,
2813
+ #0080ff,
2814
+ #00f,
2815
+ #7f00ff,
2816
+ #f0f,
2817
+ #ff0080,
2818
+ red
2819
+ );
2718
2820
  }
2719
- /* ── hx-copy-button ── */
2720
- :host {
2721
- display: inline-block;
2821
+ .opacity-track {
2822
+ background-image:
2823
+ linear-gradient(to right, transparent, var(--_hue-color, hsl(0, 100%, 50%))),
2824
+ repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 0 0 / 12px 12px;
2722
2825
  }
2723
-
2724
- :host([disabled]) {
2826
+ .slider-thumb {
2827
+ position: absolute;
2828
+ top: 50%;
2829
+ width: 16px;
2830
+ height: 16px;
2831
+ border-radius: 50%;
2832
+ border: none;
2833
+ box-shadow:
2834
+ 0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #ffffff)),
2835
+ 0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3)));
2836
+ transform: translate(-50%, -50%);
2725
2837
  pointer-events: none;
2838
+ left: var(--_slider-pct, 0%);
2839
+ background: var(--_thumb-color, hsl(0, 100%, 50%));
2726
2840
  }
2727
-
2728
- .button {
2729
- position: relative;
2730
- display: inline-flex;
2731
- align-items: center;
2732
- justify-content: center;
2733
- gap: var(--hx-space-2);
2734
- border: var(--hx-border-width-thin) solid var(--hx-copy-button-border-color, transparent);
2735
- border-radius: var(--hx-copy-button-border-radius, var(--hx-border-radius-md));
2736
- background-color: var(--hx-copy-button-bg, transparent);
2737
- color: var(--hx-copy-button-color, var(--hx-color-primary-500));
2841
+ .swatches {
2842
+ display: flex;
2843
+ flex-wrap: wrap;
2844
+ gap: var(--hx-space-1, 0.25rem);
2845
+ }
2846
+ .swatch-btn {
2847
+ width: 20px;
2848
+ height: 20px;
2849
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
2850
+ border: var(--hx-border-width-thin, 1px) solid
2851
+ var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1)));
2738
2852
  cursor: pointer;
2739
- transition:
2740
- background-color var(--hx-transition-fast),
2741
- color var(--hx-transition-fast),
2742
- border-color var(--hx-transition-fast),
2743
- box-shadow var(--hx-transition-fast);
2744
- text-decoration: none;
2745
- user-select: none;
2746
- -webkit-user-select: none;
2853
+ padding: 0;
2747
2854
  flex-shrink: 0;
2748
- font-family: var(--hx-font-family-sans);
2749
- font-weight: var(--hx-font-weight-medium);
2750
- white-space: nowrap;
2855
+ transition: transform var(--hx-transition-fast, 150ms ease);
2751
2856
  }
2752
-
2753
- .button:focus-visible {
2754
- outline: var(--hx-focus-ring-width) solid
2755
- var(--hx-copy-button-focus-ring-color, var(--hx-focus-ring-color));
2756
- outline-offset: var(--hx-focus-ring-offset);
2857
+ .swatch-btn:hover {
2858
+ transform: scale(1.15);
2859
+ border-color: var(
2860
+ --hx-color-picker-swatch-border-hover,
2861
+ var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3))
2862
+ );
2757
2863
  }
2758
-
2759
- .button:hover {
2760
- filter: brightness(var(--hx-filter-brightness-hover, 0.9));
2864
+ .input-area {
2865
+ display: flex;
2866
+ align-items: center;
2867
+ gap: var(--hx-space-2, 0.5rem);
2761
2868
  }
2762
-
2763
- .button:active {
2764
- filter: brightness(var(--hx-filter-brightness-active, 0.8));
2869
+ .format-btn {
2870
+ flex-shrink: 0;
2871
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
2872
+ background: var(--hx-color-neutral-100, #f1f5f9);
2873
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #cbd5e1);
2874
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
2875
+ cursor: pointer;
2876
+ font-size: var(--hx-font-size-xs, 0.75rem);
2877
+ color: var(--hx-color-neutral-600, #475569);
2878
+ text-transform: uppercase;
2879
+ font-weight: var(--hx-font-weight-semibold, 600);
2880
+ letter-spacing: 0.05em;
2765
2881
  }
2766
-
2767
- /* ─── Size Variants ─── */
2768
-
2769
- .button--sm {
2770
- padding: var(--hx-space-1);
2771
- min-width: var(--hx-size-8);
2772
- height: var(--hx-size-8);
2773
- font-size: var(--hx-font-size-sm);
2882
+ .color-input {
2883
+ flex: 1;
2884
+ min-width: 0;
2885
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
2886
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #cbd5e1);
2887
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
2888
+ font-family: var(--hx-font-family-mono, monospace);
2889
+ font-size: var(--hx-font-size-sm, 0.875rem);
2890
+ color: var(--hx-color-neutral-900, #0f172a);
2891
+ background: var(--hx-color-neutral-0, #ffffff);
2892
+ outline: none;
2774
2893
  }
2775
-
2776
- .button--md {
2777
- padding: var(--hx-space-2);
2778
- min-width: var(--hx-size-10);
2779
- height: var(--hx-size-10);
2780
- font-size: var(--hx-font-size-md);
2894
+ .color-input:focus-visible {
2895
+ border-color: var(--hx-focus-ring-color, var(--hx-color-primary-500));
2896
+ box-shadow: 0 0 0 2px
2897
+ color-mix(in srgb, var(--hx-focus-ring-color, var(--hx-color-primary-500)) 20%, transparent);
2781
2898
  }
2782
-
2783
- .button--lg {
2784
- padding: var(--hx-space-3);
2899
+ .input-preview {
2900
+ width: 24px;
2901
+ height: 24px;
2902
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
2903
+ border: var(--hx-border-width-thin, 1px) solid
2904
+ var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1)));
2905
+ background: var(--_preview-color, #000);
2906
+ flex-shrink: 0;
2907
+ }
2908
+ @media (prefers-reduced-motion: reduce) {
2909
+ .trigger,
2910
+ .swatch-btn {
2911
+ transition: none;
2912
+ }
2913
+ }
2914
+ @media (forced-colors: active) {
2915
+ .trigger {
2916
+ forced-color-adjust: none;
2917
+ background-color: Field;
2918
+ color: FieldText;
2919
+ border: 2px solid ButtonText;
2920
+ }
2921
+ .trigger:hover:not([disabled]) {
2922
+ border-color: Highlight;
2923
+ }
2924
+ :is(.trigger, .gradient-grid, .slider-track, .swatch-btn, .format-btn):focus-visible {
2925
+ outline-color: Highlight;
2926
+ }
2927
+ .panel {
2928
+ forced-color-adjust: none;
2929
+ background-color: Canvas;
2930
+ border: 2px solid CanvasText;
2931
+ box-shadow: none;
2932
+ }
2933
+ .gradient-thumb,
2934
+ .slider-thumb {
2935
+ box-shadow: 0 0 0 2px CanvasText;
2936
+ }
2937
+ .swatch-btn {
2938
+ border: 2px solid ButtonText;
2939
+ }
2940
+ .swatch-btn:hover {
2941
+ border-color: Highlight;
2942
+ }
2943
+ .color-input {
2944
+ forced-color-adjust: none;
2945
+ background-color: Field;
2946
+ color: FieldText;
2947
+ border: 2px solid ButtonText;
2948
+ }
2949
+ .color-input:focus-visible {
2950
+ border-color: Highlight;
2951
+ box-shadow: none;
2952
+ }
2953
+ .format-btn {
2954
+ forced-color-adjust: none;
2955
+ background-color: ButtonFace;
2956
+ color: ButtonText;
2957
+ border: 2px solid ButtonText;
2958
+ }
2959
+ .trigger-label {
2960
+ color: FieldText;
2961
+ }
2962
+ :host([disabled]) {
2963
+ opacity: 1;
2964
+ }
2965
+ :host([disabled]) .trigger {
2966
+ border-color: GrayText;
2967
+ color: GrayText;
2968
+ }
2969
+ }
2970
+ /* ── hx-combobox ── */
2971
+ :host {
2972
+ display: block;
2973
+ }
2974
+ :host([disabled]) {
2975
+ opacity: var(--hx-opacity-disabled, 0.5);
2976
+ pointer-events: none;
2977
+ }
2978
+ * {
2979
+ box-sizing: border-box;
2980
+ }
2981
+ .field {
2982
+ display: flex;
2983
+ flex-direction: column;
2984
+ gap: var(--hx-space-1, 0.25rem);
2985
+ font-family: var(--hx-combobox-font-family, var(--hx-font-family-sans, sans-serif));
2986
+ position: relative;
2987
+ }
2988
+ .field__label {
2989
+ display: flex;
2990
+ align-items: baseline;
2991
+ gap: var(--hx-space-1, 0.25rem);
2992
+ font-size: var(--hx-font-size-sm, 0.875rem);
2993
+ font-weight: var(--hx-font-weight-medium, 500);
2994
+ color: var(--hx-combobox-label-color, var(--hx-color-neutral-700, #334155));
2995
+ line-height: var(--hx-line-height-normal, 1.5);
2996
+ }
2997
+ .field__required-marker {
2998
+ color: var(--hx-combobox-error-color, var(--hx-color-error-text, #b91c1c));
2999
+ font-weight: var(--hx-font-weight-bold, 700);
3000
+ }
3001
+ .field__input-wrapper {
3002
+ position: relative;
3003
+ display: flex;
3004
+ align-items: center;
3005
+ border: var(--hx-border-width-thin, 1px) solid
3006
+ var(--hx-combobox-border-color, var(--hx-color-neutral-300, #cbd5e1));
3007
+ border-radius: var(--hx-combobox-border-radius, var(--hx-border-radius-md, 0.375rem));
3008
+ background-color: var(--hx-combobox-bg, var(--hx-color-neutral-0, #ffffff));
3009
+ transition:
3010
+ border-color var(--hx-transition-fast, 150ms ease),
3011
+ box-shadow var(--hx-transition-fast, 150ms ease);
3012
+ }
3013
+ .field__input-wrapper:focus-within {
3014
+ border-color: var(
3015
+ --hx-combobox-focus-ring-color,
3016
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
3017
+ );
3018
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
3019
+ color-mix(
3020
+ in srgb,
3021
+ var(
3022
+ --hx-combobox-focus-ring-color,
3023
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
3024
+ )
3025
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
3026
+ transparent
3027
+ );
3028
+ }
3029
+ .field--error .field__input-wrapper {
3030
+ border-color: var(--hx-combobox-error-color, var(--hx-color-error-500, #dc2626));
3031
+ }
3032
+ .field--error .field__input-wrapper:focus-within {
3033
+ border-color: var(--hx-combobox-error-color, var(--hx-color-error-500, #dc2626));
3034
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
3035
+ color-mix(
3036
+ in srgb,
3037
+ var(--hx-combobox-error-color, var(--hx-color-error-500, #dc2626))
3038
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
3039
+ transparent
3040
+ );
3041
+ }
3042
+ .field__prefix,
3043
+ .field__suffix {
3044
+ display: flex;
3045
+ align-items: center;
3046
+ padding: 0 var(--hx-space-2, 0.5rem);
3047
+ color: var(--hx-color-neutral-500, #64748b);
3048
+ flex-shrink: 0;
3049
+ }
3050
+ .field__input {
3051
+ flex: 1;
3052
+ min-width: 0;
3053
+ min-height: var(--hx-input-height-md, var(--hx-size-10, 2.5rem));
3054
+ border: none;
3055
+ background: transparent;
3056
+ outline: none;
3057
+ font-family: inherit;
3058
+ font-size: var(--hx-font-size-md, 1rem);
3059
+ line-height: var(--hx-line-height-normal, 1.5);
3060
+ color: var(--hx-combobox-color, var(--hx-color-neutral-800, #1e293b));
3061
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
3062
+ }
3063
+ .field__input::placeholder {
3064
+ color: var(--hx-color-neutral-400, #94a3b8);
3065
+ }
3066
+ .field__input--sm {
3067
+ min-height: var(--hx-input-height-sm, var(--hx-size-8, 2rem));
3068
+ font-size: var(--hx-font-size-sm, 0.875rem);
3069
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
3070
+ }
3071
+ .field__input--lg {
3072
+ min-height: var(--hx-input-height-lg, var(--hx-size-12, 3rem));
3073
+ font-size: var(--hx-font-size-lg, 1.125rem);
3074
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
3075
+ }
3076
+ .field__clear-button,
3077
+ .field__loading-indicator {
3078
+ display: flex;
3079
+ align-items: center;
3080
+ justify-content: center;
3081
+ margin-inline-end: var(--hx-space-2, 0.5rem);
3082
+ flex-shrink: 0;
3083
+ color: var(--hx-color-neutral-400, #94a3b8);
3084
+ }
3085
+ .field__clear-button {
3086
+ width: 1.25rem;
3087
+ height: 1.25rem;
3088
+ border: none;
3089
+ background: transparent;
3090
+ cursor: pointer;
3091
+ padding: 0;
3092
+ border-radius: var(--hx-border-radius-full, 9999px);
3093
+ transition: color var(--hx-transition-fast, 150ms ease);
3094
+ }
3095
+ .field__clear-button:hover {
3096
+ color: var(--hx-color-neutral-700, #334155);
3097
+ }
3098
+ .field__clear-button:focus-visible {
3099
+ outline: var(--hx-focus-ring-width, 2px) solid
3100
+ var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));
3101
+ outline-offset: var(--hx-focus-ring-offset, 2px);
3102
+ }
3103
+ .field__loading-indicator {
3104
+ width: 1rem;
3105
+ height: 1rem;
3106
+ }
3107
+ .field__loading-spinner {
3108
+ width: 1rem;
3109
+ height: 1rem;
3110
+ border: 2px solid currentColor;
3111
+ border-top-color: transparent;
3112
+ border-radius: 50%;
3113
+ animation: hx-spin 0.7s linear infinite;
3114
+ }
3115
+ @keyframes hx-spin {
3116
+ to {
3117
+ transform: rotate(360deg);
3118
+ }
3119
+ }
3120
+ @media (prefers-reduced-motion: reduce) {
3121
+ .field__loading-spinner {
3122
+ animation: none;
3123
+ }
3124
+ }
3125
+ .field__listbox {
3126
+ position: absolute;
3127
+ top: calc(100% + var(--hx-space-1, 0.25rem));
3128
+ left: 0;
3129
+ right: 0;
3130
+ z-index: var(--hx-z-index-dropdown, 1000);
3131
+ background-color: var(--hx-combobox-listbox-bg, var(--hx-color-neutral-0, #ffffff));
3132
+ border: var(--hx-border-width-thin, 1px) solid
3133
+ var(--hx-combobox-border-color, var(--hx-color-neutral-300, #cbd5e1));
3134
+ border-radius: var(--hx-combobox-border-radius, var(--hx-border-radius-md, 0.375rem));
3135
+ box-shadow: var(
3136
+ --hx-combobox-listbox-shadow,
3137
+ 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900, #0f172a) 12%, transparent)
3138
+ );
3139
+ max-height: var(--hx-combobox-listbox-max-height, 16rem);
3140
+ overflow: hidden;
3141
+ display: flex;
3142
+ flex-direction: column;
3143
+ }
3144
+ .field__listbox[hidden] {
3145
+ display: none;
3146
+ }
3147
+ .field__options {
3148
+ overflow-y: auto;
3149
+ flex: 1;
3150
+ padding: var(--hx-space-1, 0.25rem) 0;
3151
+ }
3152
+ .field__option {
3153
+ display: flex;
3154
+ align-items: center;
3155
+ gap: var(--hx-space-2, 0.5rem);
3156
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
3157
+ font-size: var(--hx-font-size-md, 1rem);
3158
+ color: var(--hx-combobox-color, var(--hx-color-neutral-800, #1e293b));
3159
+ cursor: pointer;
3160
+ user-select: none;
3161
+ -webkit-user-select: none;
3162
+ transition: background-color var(--hx-transition-fast, 150ms ease);
3163
+ }
3164
+ .field__option:hover {
3165
+ background-color: var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #eff6ff));
3166
+ }
3167
+ .field__option--selected {
3168
+ background-color: var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbeafe));
3169
+ font-weight: var(--hx-font-weight-medium, 500);
3170
+ }
3171
+ .field__option--focused {
3172
+ background-color: var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #eff6ff));
3173
+ outline: var(--hx-focus-ring-width, 2px) solid
3174
+ var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));
3175
+ outline-offset: var(--hx-combobox-option-focus-ring-offset, -2px);
3176
+ }
3177
+ .field__option--focused.field__option--selected {
3178
+ background-color: var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbeafe));
3179
+ }
3180
+ .field__option--disabled {
3181
+ opacity: var(--hx-opacity-disabled, 0.5);
3182
+ cursor: not-allowed;
3183
+ pointer-events: none;
3184
+ }
3185
+ .field__option-label {
3186
+ flex: 1;
3187
+ white-space: nowrap;
3188
+ overflow: hidden;
3189
+ text-overflow: ellipsis;
3190
+ }
3191
+ .field__no-options {
3192
+ padding: var(--hx-space-3, 0.75rem);
3193
+ text-align: center;
3194
+ color: var(--hx-color-neutral-400, #94a3b8);
3195
+ font-size: var(--hx-font-size-sm, 0.875rem);
3196
+ }
3197
+ .field__sr-only {
3198
+ position: absolute;
3199
+ width: 1px;
3200
+ height: 1px;
3201
+ padding: 0;
3202
+ margin: -1px;
3203
+ overflow: hidden;
3204
+ clip: rect(0, 0, 0, 0);
3205
+ white-space: nowrap;
3206
+ border: 0;
3207
+ }
3208
+ .field__help-text,
3209
+ .field__error {
3210
+ font-size: var(--hx-font-size-xs, 0.75rem);
3211
+ line-height: var(--hx-line-height-normal, 1.5);
3212
+ }
3213
+ .field__help-text {
3214
+ color: var(--hx-color-neutral-500, #64748b);
3215
+ }
3216
+ .field__error {
3217
+ color: var(--hx-combobox-error-color, var(--hx-color-error-text, #b91c1c));
3218
+ }
3219
+ @media (prefers-reduced-motion: reduce) {
3220
+ .field__input-wrapper,
3221
+ .field__option,
3222
+ .field__clear-button,
3223
+ .field__chip-remove {
3224
+ transition: none;
3225
+ }
3226
+ }
3227
+ @media (forced-colors: active) {
3228
+ .field__input-wrapper {
3229
+ forced-color-adjust: none;
3230
+ background-color: Field;
3231
+ color: FieldText;
3232
+ border: 2px solid ButtonText;
3233
+ }
3234
+ .field__input {
3235
+ color: FieldText;
3236
+ }
3237
+ .field__input::placeholder {
3238
+ color: GrayText;
3239
+ }
3240
+ .field__input-wrapper:focus-within {
3241
+ border-color: Highlight;
3242
+ box-shadow: none;
3243
+ }
3244
+ .field__listbox {
3245
+ forced-color-adjust: none;
3246
+ background-color: Canvas;
3247
+ border: 2px solid CanvasText;
3248
+ box-shadow: none;
3249
+ }
3250
+ .field__option {
3251
+ color: CanvasText;
3252
+ }
3253
+ .field__option:hover {
3254
+ background-color: Highlight;
3255
+ color: HighlightText;
3256
+ }
3257
+ .field__option--selected {
3258
+ background-color: Highlight;
3259
+ color: HighlightText;
3260
+ }
3261
+ .field__option--focused {
3262
+ outline-color: Highlight;
3263
+ background-color: Highlight;
3264
+ color: HighlightText;
3265
+ }
3266
+ .field__option--disabled {
3267
+ color: GrayText;
3268
+ opacity: 1;
3269
+ }
3270
+ .field__chip {
3271
+ forced-color-adjust: none;
3272
+ background-color: Highlight;
3273
+ color: HighlightText;
3274
+ border: 1px solid HighlightText;
3275
+ }
3276
+ .field__chip-remove:focus-visible {
3277
+ outline-color: Highlight;
3278
+ }
3279
+ .field__clear-button:focus-visible {
3280
+ outline-color: Highlight;
3281
+ }
3282
+ .field--error .field__input-wrapper {
3283
+ border-color: LinkText;
3284
+ }
3285
+ :host([disabled]) {
3286
+ opacity: 1;
3287
+ }
3288
+ :host([disabled]) .field__input-wrapper {
3289
+ border-color: GrayText;
3290
+ color: GrayText;
3291
+ }
3292
+ :host([disabled]) .field__input {
3293
+ color: GrayText;
3294
+ }
3295
+ .field__label {
3296
+ color: CanvasText;
3297
+ }
3298
+ .field__help-text {
3299
+ color: GrayText;
3300
+ }
3301
+ .field__error {
3302
+ color: LinkText;
3303
+ }
3304
+ }
3305
+ :host([multiple]) .field__input-wrapper {
3306
+ flex-wrap: wrap;
3307
+ padding: var(--hx-space-1, 0.25rem);
3308
+ gap: var(--hx-space-1, 0.25rem);
3309
+ align-items: center;
3310
+ }
3311
+ :host([multiple]) .field__input {
3312
+ min-width: 8rem;
3313
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
3314
+ flex-shrink: 1;
3315
+ }
3316
+ .field__chip {
3317
+ display: inline-flex;
3318
+ align-items: center;
3319
+ gap: var(--hx-space-1, 0.25rem);
3320
+ padding: 0 var(--hx-space-1, 0.25rem) 0 var(--hx-space-2, 0.5rem);
3321
+ height: 1.5rem;
3322
+ background-color: var(--hx-combobox-chip-bg, var(--hx-color-primary-100, #dbeafe));
3323
+ color: var(--hx-combobox-chip-color, var(--hx-color-primary-800, #1e3a8a));
3324
+ border-radius: var(--hx-border-radius-full, 9999px);
3325
+ font-size: var(--hx-font-size-sm, 0.875rem);
3326
+ white-space: nowrap;
3327
+ max-width: 12rem;
3328
+ flex-shrink: 0;
3329
+ }
3330
+ .field__chip-label {
3331
+ overflow: hidden;
3332
+ text-overflow: ellipsis;
3333
+ max-width: 8rem;
3334
+ }
3335
+ .field__chip-remove {
3336
+ display: inline-flex;
3337
+ align-items: center;
3338
+ justify-content: center;
3339
+ flex-shrink: 0;
3340
+ width: 1rem;
3341
+ height: 1rem;
3342
+ border: none;
3343
+ background: none;
3344
+ cursor: pointer;
3345
+ padding: 0;
3346
+ color: inherit;
3347
+ opacity: 0.7;
3348
+ border-radius: 50%;
3349
+ line-height: 1;
3350
+ transition: opacity var(--hx-transition-fast, 150ms ease);
3351
+ }
3352
+ .field__chip-remove:hover {
3353
+ opacity: 1;
3354
+ background-color: var(--hx-combobox-chip-remove-hover-bg, var(--hx-color-primary-200, #bfdbfe));
3355
+ }
3356
+ .field__chip-remove:focus-visible {
3357
+ outline: var(--hx-focus-ring-width, 2px) solid
3358
+ var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));
3359
+ outline-offset: var(--hx-focus-ring-offset, 2px);
3360
+ opacity: 1;
3361
+ }
3362
+ /* ── hx-container ── */
3363
+ :host {
3364
+ display: block;
3365
+ contain: layout style;
3366
+ width: 100%;
3367
+ background-color: var(--hx-container-bg, transparent);
3368
+ box-sizing: border-box;
3369
+ }
3370
+
3371
+ /* ─── Vertical Padding Variants ─── */
3372
+
3373
+ :host([padding='sm']) {
3374
+ padding-top: var(--hx-space-6, 1.5rem);
3375
+ padding-bottom: var(--hx-space-6, 1.5rem);
3376
+ }
3377
+
3378
+ :host([padding='md']) {
3379
+ padding-top: var(--hx-space-12, 3rem);
3380
+ padding-bottom: var(--hx-space-12, 3rem);
3381
+ }
3382
+
3383
+ :host([padding='lg']) {
3384
+ padding-top: var(--hx-space-16, 4rem);
3385
+ padding-bottom: var(--hx-space-16, 4rem);
3386
+ }
3387
+
3388
+ :host([padding='xl']) {
3389
+ padding-top: var(--hx-space-24, 6rem);
3390
+ padding-bottom: var(--hx-space-24, 6rem);
3391
+ }
3392
+
3393
+ :host([padding='2xl']) {
3394
+ padding-top: var(--hx-space-32, 8rem);
3395
+ padding-bottom: var(--hx-space-32, 8rem);
3396
+ }
3397
+
3398
+ /* ─── Inner Container ─── */
3399
+
3400
+ .container__inner {
3401
+ margin-inline-start: auto;
3402
+ margin-inline-end: auto;
3403
+ padding-inline-start: var(--hx-container-gutter, var(--hx-space-6, 1.5rem));
3404
+ padding-inline-end: var(--hx-container-gutter, var(--hx-space-6, 1.5rem));
3405
+ box-sizing: border-box;
3406
+ width: 100%;
3407
+ }
3408
+
3409
+ /* ─── Width Variants ─── */
3410
+
3411
+ .container__inner--full {
3412
+ max-width: none;
3413
+ }
3414
+
3415
+ .container__inner--content {
3416
+ max-width: var(--hx-container-max-width, var(--hx-container-content, 1152px));
3417
+ }
3418
+
3419
+ .container__inner--narrow {
3420
+ max-width: var(--hx-container-max-width, var(--hx-container-narrow, 768px));
3421
+ }
3422
+
3423
+ .container__inner--sm {
3424
+ max-width: var(--hx-container-max-width, var(--hx-container-sm, 640px));
3425
+ }
3426
+
3427
+ .container__inner--md {
3428
+ max-width: var(--hx-container-max-width, var(--hx-container-md, 768px));
3429
+ }
3430
+
3431
+ .container__inner--lg {
3432
+ max-width: var(--hx-container-max-width, var(--hx-container-lg, 1024px));
3433
+ }
3434
+
3435
+ .container__inner--xl {
3436
+ max-width: var(--hx-container-max-width, var(--hx-container-xl, 1280px));
3437
+ }
3438
+
3439
+ /* ─── High Contrast Mode (forced-colors) ─── */
3440
+
3441
+ /* hx-container is a layout wrapper with no state communicated via color.
3442
+ forced-color-adjust: auto (default) is sufficient. */
3443
+ @media (forced-colors: active) {
3444
+ :host {
3445
+ forced-color-adjust: auto;
3446
+ }
3447
+ }
3448
+ /* ── hx-copy-button ── */
3449
+ :host {
3450
+ display: inline-block;
3451
+ }
3452
+
3453
+ :host([disabled]) {
3454
+ pointer-events: none;
3455
+ }
3456
+
3457
+ .button {
3458
+ position: relative;
3459
+ display: inline-flex;
3460
+ align-items: center;
3461
+ justify-content: center;
3462
+ gap: var(--hx-space-2);
3463
+ border: var(--hx-border-width-thin) solid var(--hx-copy-button-border-color, transparent);
3464
+ border-radius: var(--hx-copy-button-border-radius, var(--hx-border-radius-md));
3465
+ background-color: var(--hx-copy-button-bg, transparent);
3466
+ color: var(--hx-copy-button-color, var(--hx-color-primary-500));
3467
+ cursor: pointer;
3468
+ transition:
3469
+ background-color var(--hx-transition-fast),
3470
+ color var(--hx-transition-fast),
3471
+ border-color var(--hx-transition-fast),
3472
+ box-shadow var(--hx-transition-fast);
3473
+ text-decoration: none;
3474
+ user-select: none;
3475
+ -webkit-user-select: none;
3476
+ flex-shrink: 0;
3477
+ font-family: var(--hx-copy-button-font-family, var(--hx-font-family-sans));
3478
+ font-weight: var(--hx-font-weight-medium);
3479
+ white-space: nowrap;
3480
+ }
3481
+
3482
+ .button:focus-visible {
3483
+ outline: var(--hx-focus-ring-width) solid
3484
+ var(--hx-copy-button-focus-ring-color, var(--hx-focus-ring-color));
3485
+ outline-offset: var(--hx-focus-ring-offset);
3486
+ }
3487
+
3488
+ .button:hover {
3489
+ filter: brightness(var(--hx-filter-brightness-hover, 0.9));
3490
+ }
3491
+
3492
+ .button:active {
3493
+ filter: brightness(var(--hx-filter-brightness-active, 0.8));
3494
+ }
3495
+
3496
+ /* ─── Size Variants ─── */
3497
+
3498
+ .button--sm {
3499
+ padding: var(--hx-space-1);
3500
+ min-width: var(--hx-touch-target-min, 2.75rem);
3501
+ min-height: var(--hx-touch-target-min, 2.75rem);
3502
+ font-size: var(--hx-font-size-sm);
3503
+ }
3504
+
3505
+ .button--md {
3506
+ padding: var(--hx-space-2);
3507
+ min-width: var(--hx-size-10);
3508
+ height: var(--hx-size-10);
3509
+ font-size: var(--hx-font-size-md);
3510
+ }
3511
+
3512
+ .button--lg {
3513
+ padding: var(--hx-space-3);
2785
3514
  min-width: var(--hx-size-12);
2786
3515
  height: var(--hx-size-12);
2787
3516
  font-size: var(--hx-font-size-lg);
2788
3517
  }
2789
3518
 
2790
- /* ─── Copied / Success State ─── */
3519
+ /* ─── Copied / Success State ─── */
3520
+
3521
+ .button--copied {
3522
+ color: var(--hx-color-success-text, var(--hx-color-primary-500));
3523
+ /* Secondary non-color indicator required per WCAG 1.4.1 (use of color).
3524
+ A border provides visual differentiation for users with color blindness. */
3525
+ border-color: var(--hx-color-success-500, var(--hx-color-primary-500));
3526
+ }
3527
+
3528
+ /* ─── Icon Container ─── */
3529
+
3530
+ .icon {
3531
+ display: inline-flex;
3532
+ align-items: center;
3533
+ justify-content: center;
3534
+ width: 1em;
3535
+ height: 1em;
3536
+ line-height: 1;
3537
+ pointer-events: none;
3538
+ flex-shrink: 0;
3539
+ }
3540
+
3541
+ /* ─── Disabled ─── */
3542
+
3543
+ .button[disabled] {
3544
+ cursor: not-allowed;
3545
+ opacity: var(--hx-opacity-disabled);
3546
+ }
3547
+
3548
+ /* ─── Screen Reader Only ─── */
3549
+
3550
+ .sr-only {
3551
+ position: absolute;
3552
+ width: 1px;
3553
+ height: 1px;
3554
+ padding: 0;
3555
+ margin: -1px;
3556
+ overflow: hidden;
3557
+ clip: rect(0, 0, 0, 0);
3558
+ white-space: nowrap;
3559
+ border-width: 0;
3560
+ }
3561
+
3562
+ /* ─── Reduced Motion ─── */
3563
+
3564
+ @media (prefers-reduced-motion: reduce) {
3565
+ .button {
3566
+ transition: none;
3567
+ }
3568
+ }
3569
+
3570
+ /* ─── High Contrast Mode (forced-colors) ─── */
3571
+
3572
+ @media (forced-colors: active) {
3573
+ .button {
3574
+ forced-color-adjust: none;
3575
+ background-color: ButtonFace;
3576
+ color: ButtonText;
3577
+ border: 2px solid ButtonText;
3578
+ }
3579
+
3580
+ .button:focus-visible {
3581
+ outline: 3px solid Highlight;
3582
+ outline-offset: 2px;
3583
+ }
3584
+
3585
+ .button[disabled] {
3586
+ background-color: ButtonFace;
3587
+ color: GrayText;
3588
+ border-color: GrayText;
3589
+ opacity: 1;
3590
+ }
3591
+
3592
+ .button--copied {
3593
+ border-color: Highlight;
3594
+ color: Highlight;
3595
+ }
3596
+ }
3597
+ /* ── hx-counter ── */
3598
+ :host {
3599
+ display: inline-block;
3600
+ }
2791
3601
 
2792
- .button--copied {
2793
- color: var(--hx-color-success-text, var(--hx-color-primary-500));
2794
- /* Secondary non-color indicator required per WCAG 1.4.1 (use of color).
2795
- A border provides visual differentiation for users with color blindness. */
2796
- border-color: var(--hx-color-success-500, var(--hx-color-primary-500));
3602
+ .counter {
3603
+ display: inline-flex;
3604
+ align-items: baseline;
3605
+ font-family: var(--hx-counter-font-family, var(--hx-font-family-sans, sans-serif));
3606
+ font-weight: var(--hx-counter-font-weight, var(--hx-font-weight-bold, 700));
3607
+ color: var(--hx-counter-color, var(--hx-color-neutral-900, #0f172a));
3608
+ line-height: var(--hx-line-height-tight, 1.25);
3609
+ font-variant-numeric: tabular-nums;
2797
3610
  }
2798
3611
 
2799
- /* ─── Icon Container ─── */
3612
+ /* ─── Size Variants ─── */
2800
3613
 
2801
- .icon {
2802
- display: inline-flex;
2803
- align-items: center;
2804
- justify-content: center;
2805
- width: 1em;
2806
- height: 1em;
2807
- line-height: 1;
2808
- pointer-events: none;
2809
- flex-shrink: 0;
3614
+ .counter--sm {
3615
+ font-size: var(--hx-counter-font-size-sm, var(--hx-font-size-xl, 1.25rem));
2810
3616
  }
2811
3617
 
2812
- /* ─── Disabled ─── */
3618
+ .counter--md {
3619
+ font-size: var(--hx-counter-font-size-md, var(--hx-font-size-3xl, 1.875rem));
3620
+ }
2813
3621
 
2814
- .button[disabled] {
2815
- cursor: not-allowed;
2816
- opacity: var(--hx-opacity-disabled);
3622
+ .counter--lg {
3623
+ font-size: var(--hx-counter-font-size-lg, var(--hx-font-size-5xl, 3rem));
2817
3624
  }
2818
3625
 
2819
- /* ─── Screen Reader Only ─── */
3626
+ /* ─── Screen-reader only (visually hidden live region) ─── */
2820
3627
 
2821
3628
  .sr-only {
2822
3629
  position: absolute;
@@ -2827,330 +3634,695 @@
2827
3634
  overflow: hidden;
2828
3635
  clip: rect(0, 0, 0, 0);
2829
3636
  white-space: nowrap;
2830
- border-width: 0;
3637
+ border: 0;
3638
+ }
3639
+
3640
+ /* ─── Reduced Motion ─── */
3641
+
3642
+ @media (prefers-reduced-motion: reduce) {
3643
+ .counter {
3644
+ /* Animation is handled in JS — reduced-motion consumers
3645
+ will see the final value immediately via the component logic */
3646
+ }
3647
+ }
3648
+
3649
+ /* ─── Forced Colors (Windows High Contrast) ─── */
3650
+
3651
+ @media (forced-colors: active) {
3652
+ /* Counter is text-only — forced-color-adjust: auto (default) is sufficient.
3653
+ The browser maps the custom color properties to CanvasText automatically. */
3654
+ .counter {
3655
+ forced-color-adjust: auto;
3656
+ }
3657
+ }
3658
+ /* ── hx-data-table ── */
3659
+ :host {
3660
+ display: block;
3661
+ overflow-x: auto;
3662
+ font-family: var(--hx-data-table-font-family, var(--hx-font-family-sans, sans-serif));
3663
+ font-size: var(--hx-font-size-sm, 0.875rem);
3664
+ }
3665
+
3666
+ /* ─── Scroll Wrapper ─── */
3667
+
3668
+ .table-wrapper {
3669
+ min-width: 0;
3670
+ width: 100%;
3671
+ }
3672
+
3673
+ /* ─── Table ─── */
3674
+
3675
+ table {
3676
+ width: 100%;
3677
+ border-collapse: collapse;
3678
+ border-spacing: 0;
3679
+ min-width: var(--hx-data-table-min-width, 600px);
3680
+ }
3681
+
3682
+ /* ─── Head ─── */
3683
+
3684
+ thead {
3685
+ background-color: var(--hx-data-table-header-bg, var(--hx-color-neutral-50, #f8fafc));
3686
+ }
3687
+
3688
+ :host([sticky-header]) thead th {
3689
+ position: sticky;
3690
+ top: 0;
3691
+ z-index: 1;
3692
+ background-color: var(--hx-data-table-header-bg, var(--hx-color-neutral-50, #f8fafc));
3693
+ }
3694
+
3695
+ /* ─── Cells ─── */
3696
+
3697
+ th,
3698
+ td {
3699
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
3700
+ text-align: start;
3701
+ border-bottom: var(--hx-border-width-thin, 1px) solid
3702
+ var(--hx-data-table-border-color, var(--hx-color-neutral-200, #e2e8f0));
3703
+ vertical-align: middle;
3704
+ }
3705
+
3706
+ th {
3707
+ font-weight: var(--hx-font-weight-semibold, 600);
3708
+ color: var(--hx-data-table-header-color, var(--hx-color-neutral-700, #334155));
3709
+ white-space: nowrap;
3710
+ }
3711
+
3712
+ td {
3713
+ color: var(--hx-data-table-cell-color, var(--hx-color-neutral-900, #0f172a));
3714
+ }
3715
+
3716
+ /* ─── Checkbox Column ─── */
3717
+
3718
+ th.col-checkbox,
3719
+ td.col-checkbox {
3720
+ /* WCAG 2.5.5 (healthcare mandate): minimum 44x44px touch target */
3721
+ width: var(--hx-touch-target-min, 2.75rem);
3722
+ min-width: var(--hx-touch-target-min, 2.75rem);
3723
+ padding-inline-end: var(--hx-space-2, 0.5rem);
3724
+ }
3725
+
3726
+ th.col-checkbox {
3727
+ text-align: center;
3728
+ }
3729
+
3730
+ td.col-checkbox {
3731
+ text-align: center;
3732
+ }
3733
+
3734
+ /* ─── Sort Button ─── */
3735
+
3736
+ .sort-btn {
3737
+ display: inline-flex;
3738
+ align-items: center;
3739
+ gap: var(--hx-space-1, 0.25rem);
3740
+ background: none;
3741
+ border: none;
3742
+ padding: 0;
3743
+ font: inherit;
3744
+ font-weight: inherit;
3745
+ color: inherit;
3746
+ cursor: pointer;
3747
+ white-space: nowrap;
3748
+ }
3749
+
3750
+ .sort-btn:focus-visible {
3751
+ outline: var(--hx-focus-ring-width, 2px) solid
3752
+ var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb));
3753
+ outline-offset: var(--hx-focus-ring-offset, 2px);
3754
+ border-radius: var(--hx-border-radius-sm, 2px);
3755
+ }
3756
+
3757
+ /* ─── Sort Icon ─── */
3758
+
3759
+ .sort-icon {
3760
+ display: inline-flex;
3761
+ align-items: center;
3762
+ flex-shrink: 0;
3763
+ width: 1em;
3764
+ height: 1em;
3765
+ opacity: var(--hx-opacity-25, 0.25); /* sort icon inactive — intentionally subtle */
3766
+ transition:
3767
+ opacity var(--hx-transition-fast, 150ms ease),
3768
+ transform var(--hx-transition-fast, 150ms ease);
3769
+ }
3770
+
3771
+ .sort-icon--active {
3772
+ opacity: var(--hx-opacity-100, 1);
3773
+ color: var(--hx-color-primary-500, #2563eb);
3774
+ }
3775
+
3776
+ .sort-icon--desc {
3777
+ transform: rotate(180deg);
3778
+ }
3779
+
3780
+ /* ─── Row States ─── */
3781
+
3782
+ tbody tr {
3783
+ transition: background-color var(--hx-transition-fast, 150ms ease);
3784
+ }
3785
+
3786
+ tbody tr:hover {
3787
+ background-color: var(--hx-data-table-row-hover-bg, var(--hx-color-neutral-50, #f8fafc));
3788
+ }
3789
+
3790
+ tbody tr[aria-selected='true'] {
3791
+ background-color: var(--hx-data-table-row-selected-bg, var(--hx-color-primary-50, #eff6ff));
3792
+ }
3793
+
3794
+ /* ─── Checkbox Input ─── */
3795
+
3796
+ input[type='checkbox'] {
3797
+ width: var(--hx-size-4, 1rem);
3798
+ height: var(--hx-size-4, 1rem);
3799
+ cursor: pointer;
3800
+ accent-color: var(--hx-color-primary-500, #2563eb);
3801
+ }
3802
+
3803
+ /* ─── Loading Skeleton ─── */
3804
+
3805
+ .skeleton-cell {
3806
+ display: block;
3807
+ height: 1em;
3808
+ border-radius: var(--hx-border-radius-sm, 2px);
3809
+ background: linear-gradient(
3810
+ 90deg,
3811
+ var(--hx-color-neutral-200, #e2e8f0) 25%,
3812
+ var(--hx-color-neutral-100, #f1f5f9) 50%,
3813
+ var(--hx-color-neutral-200, #e2e8f0) 75%
3814
+ );
3815
+ background-size: 200% 100%;
3816
+ animation: hx-shimmer var(--hx-data-table-shimmer-duration, 1.5s) infinite;
3817
+ }
3818
+
3819
+ @keyframes hx-shimmer {
3820
+ 0% {
3821
+ background-position: 200% 0;
3822
+ }
3823
+ 100% {
3824
+ background-position: -200% 0;
3825
+ }
3826
+ }
3827
+
3828
+ @media (prefers-reduced-motion: reduce) {
3829
+ .skeleton-cell {
3830
+ animation: none;
3831
+ opacity: var(
3832
+ --hx-opacity-50,
3833
+ 0.5
3834
+ ); /* reduced from animation; approximate to available token */
3835
+ }
3836
+
3837
+ .sort-icon {
3838
+ transition: none;
3839
+ }
3840
+
3841
+ tbody tr {
3842
+ transition: none;
3843
+ }
3844
+ }
3845
+
3846
+ /* ─── Cell Focus ─── */
3847
+
3848
+ td:focus-visible,
3849
+ th:focus-visible,
3850
+ [part~='td']:focus-visible,
3851
+ [part~='th']:focus-visible {
3852
+ outline: var(--hx-focus-ring-width, 2px) solid
3853
+ var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb));
3854
+ outline-offset: var(--hx-focus-ring-offset, -2px);
3855
+ border-radius: var(--hx-border-radius-sm, 2px);
2831
3856
  }
2832
3857
 
2833
- /* ─── Reduced Motion ─── */
3858
+ /* ─── Empty State ─── */
2834
3859
 
2835
- @media (prefers-reduced-motion: reduce) {
2836
- .button {
2837
- transition: none;
2838
- }
3860
+ .empty-cell {
3861
+ text-align: center;
3862
+ color: var(--hx-data-table-empty-color, var(--hx-color-neutral-600, #475569));
3863
+ padding: var(--hx-space-8, 2rem) var(--hx-space-4, 1rem);
2839
3864
  }
2840
3865
 
2841
- /* ─── High Contrast Mode (forced-colors) ─── */
3866
+ /* ─── Forced Colors (Windows High Contrast) ─── */
2842
3867
 
2843
3868
  @media (forced-colors: active) {
2844
- .button {
2845
- forced-color-adjust: none;
2846
- background-color: ButtonFace;
2847
- color: ButtonText;
2848
- border: 2px solid ButtonText;
3869
+ table {
3870
+ border: 1px solid CanvasText;
2849
3871
  }
2850
3872
 
2851
- .button:focus-visible {
2852
- outline: 3px solid Highlight;
2853
- outline-offset: 2px;
3873
+ th,
3874
+ td {
3875
+ border-bottom-color: CanvasText;
2854
3876
  }
2855
3877
 
2856
- .button[disabled] {
2857
- background-color: ButtonFace;
2858
- color: GrayText;
2859
- border-color: GrayText;
2860
- opacity: 1;
3878
+ tbody tr[aria-selected='true'] {
3879
+ outline: 2px solid Highlight;
2861
3880
  }
2862
3881
 
2863
- .button--copied {
2864
- border-color: Highlight;
2865
- color: Highlight;
3882
+ .skeleton-cell {
3883
+ animation: none;
3884
+ border: 1px solid GrayText;
3885
+ background: none;
2866
3886
  }
2867
3887
  }
2868
- /* ── hx-counter ── */
2869
- :host {
2870
- display: inline-block;
3888
+ /* ── hx-date-picker ── */
3889
+ /* ============================================================
3890
+ Host
3891
+ ============================================================ */
3892
+
3893
+ :host {
3894
+ display: block;
3895
+ position: relative;
2871
3896
  }
2872
3897
 
2873
- .counter {
2874
- display: inline-flex;
2875
- align-items: baseline;
2876
- font-family: var(--hx-counter-font-family, var(--hx-font-family-sans, sans-serif));
2877
- font-weight: var(--hx-counter-font-weight, var(--hx-font-weight-bold, 700));
2878
- color: var(--hx-counter-color, var(--hx-color-neutral-900, #111827));
2879
- line-height: var(--hx-line-height-tight, 1.25);
2880
- font-variant-numeric: tabular-nums;
3898
+ :host([disabled]) {
3899
+ opacity: var(--hx-opacity-disabled, 0.5);
3900
+ pointer-events: none;
2881
3901
  }
2882
3902
 
2883
- /* ─── Size Variants ─── */
3903
+ * {
3904
+ box-sizing: border-box;
3905
+ }
2884
3906
 
2885
- .counter--sm {
2886
- font-size: var(--hx-counter-font-size-sm, var(--hx-font-size-xl, 1.25rem));
3907
+ /* ============================================================
3908
+ Field layout
3909
+ ============================================================ */
3910
+
3911
+ .field {
3912
+ display: flex;
3913
+ flex-direction: column;
3914
+ gap: var(--hx-space-1, 0.25rem);
3915
+ font-family: var(--hx-date-picker-font-family, var(--hx-font-family-sans, sans-serif));
3916
+ position: relative;
2887
3917
  }
2888
3918
 
2889
- .counter--md {
2890
- font-size: var(--hx-counter-font-size-md, var(--hx-font-size-3xl, 1.875rem));
3919
+ .field__label-wrapper {
3920
+ display: contents;
2891
3921
  }
2892
3922
 
2893
- .counter--lg {
2894
- font-size: var(--hx-counter-font-size-lg, var(--hx-font-size-5xl, 3rem));
3923
+ .field__label {
3924
+ display: flex;
3925
+ align-items: baseline;
3926
+ gap: var(--hx-space-1, 0.25rem);
3927
+ font-size: var(--hx-font-size-sm, 0.875rem);
3928
+ font-weight: var(--hx-font-weight-medium, 500);
3929
+ color: var(--hx-date-picker-label-color, var(--hx-color-neutral-700, #334155));
3930
+ line-height: var(--hx-line-height-normal, 1.5);
2895
3931
  }
2896
3932
 
2897
- /* ─── Screen-reader only (visually hidden live region) ─── */
3933
+ .field__required-marker {
3934
+ color: var(--hx-date-picker-error-color, var(--hx-color-error-text, #b91c1c));
3935
+ font-weight: var(--hx-font-weight-bold, 700);
3936
+ }
2898
3937
 
2899
- .sr-only {
2900
- position: absolute;
2901
- width: 1px;
2902
- height: 1px;
2903
- padding: 0;
2904
- margin: -1px;
3938
+ /* ============================================================
3939
+ Input wrapper
3940
+ ============================================================ */
3941
+
3942
+ .field__input-wrapper {
3943
+ display: flex;
3944
+ align-items: stretch;
3945
+ border: var(--hx-border-width-thin, 1px) solid
3946
+ var(--hx-date-picker-border-color, var(--hx-color-neutral-300, #cbd5e1));
3947
+ border-radius: var(--hx-date-picker-border-radius, var(--hx-border-radius-md, 0.375rem));
3948
+ background-color: var(--hx-date-picker-bg, var(--hx-color-neutral-0, #ffffff));
3949
+ transition:
3950
+ border-color var(--hx-transition-fast, 150ms ease),
3951
+ box-shadow var(--hx-transition-fast, 150ms ease);
2905
3952
  overflow: hidden;
2906
- clip: rect(0, 0, 0, 0);
2907
- white-space: nowrap;
2908
- border: 0;
2909
3953
  }
2910
3954
 
2911
- /* ─── Reduced Motion ─── */
3955
+ .field__input-wrapper:focus-within {
3956
+ border-color: var(
3957
+ --hx-date-picker-focus-ring-color,
3958
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
3959
+ );
3960
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
3961
+ color-mix(
3962
+ in srgb,
3963
+ var(
3964
+ --hx-date-picker-focus-ring-color,
3965
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
3966
+ )
3967
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
3968
+ transparent
3969
+ );
3970
+ }
2912
3971
 
2913
- @media (prefers-reduced-motion: reduce) {
2914
- .counter {
2915
- /* Animation is handled in JS — reduced-motion consumers
2916
- will see the final value immediately via the component logic */
2917
- }
3972
+ .field--error .field__input-wrapper {
3973
+ border-color: var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc2626));
2918
3974
  }
2919
3975
 
2920
- /* ─── Forced Colors (Windows High Contrast) ─── */
2921
- /* Counter is text-only — forced-color-adjust: auto (default) is sufficient. */
2922
- /* ── hx-data-table ── */
2923
- :host {
2924
- display: block;
2925
- overflow-x: auto;
2926
- font-family: var(--hx-font-family-sans, sans-serif);
2927
- font-size: var(--hx-font-size-sm, 0.875rem);
3976
+ .field--error .field__input-wrapper:focus-within {
3977
+ border-color: var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc2626));
3978
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
3979
+ color-mix(
3980
+ in srgb,
3981
+ var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc2626))
3982
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
3983
+ transparent
3984
+ );
2928
3985
  }
2929
3986
 
2930
- /* ─── Scroll Wrapper ─── */
3987
+ /* ============================================================
3988
+ Input element
3989
+ ============================================================ */
2931
3990
 
2932
- .table-wrapper {
2933
- min-width: 0;
3991
+ .field__input {
3992
+ flex: 1;
3993
+ border: none;
3994
+ outline: none;
3995
+ background: transparent;
3996
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
3997
+ font-family: inherit;
3998
+ font-size: var(--hx-font-size-md, 1rem);
3999
+ color: var(--hx-date-picker-color, var(--hx-color-neutral-800, #1e293b));
4000
+ line-height: var(--hx-line-height-normal, 1.5);
4001
+ min-height: var(--hx-size-10, 2.5rem);
2934
4002
  width: 100%;
4003
+ cursor: default;
2935
4004
  }
2936
4005
 
2937
- /* ─── Table ─── */
4006
+ .field__input::placeholder {
4007
+ color: var(--hx-color-neutral-400, #94a3b8);
4008
+ }
2938
4009
 
2939
- table {
2940
- width: 100%;
2941
- border-collapse: collapse;
2942
- border-spacing: 0;
2943
- min-width: var(--hx-data-table-min-width, 600px);
4010
+ .field__input:disabled {
4011
+ cursor: not-allowed;
2944
4012
  }
2945
4013
 
2946
- /* ─── Head ─── */
4014
+ /* ============================================================
4015
+ Calendar trigger button
4016
+ ============================================================ */
2947
4017
 
2948
- thead {
2949
- background-color: var(--hx-data-table-header-bg, var(--hx-color-neutral-50, #f8fafc));
4018
+ .field__trigger {
4019
+ display: flex;
4020
+ align-items: center;
4021
+ justify-content: center;
4022
+ padding: 0 var(--hx-space-3, 0.75rem);
4023
+ border: none;
4024
+ border-left: var(--hx-border-width-thin, 1px) solid
4025
+ var(--hx-date-picker-border-color, var(--hx-color-neutral-300, #cbd5e1));
4026
+ background: transparent;
4027
+ color: var(--hx-date-picker-trigger-color, var(--hx-color-neutral-500, #64748b));
4028
+ cursor: pointer;
4029
+ flex-shrink: 0;
4030
+ transition: color var(--hx-transition-fast, 150ms ease);
4031
+ outline: none;
2950
4032
  }
2951
4033
 
2952
- :host([sticky-header]) thead th {
2953
- position: sticky;
2954
- top: 0;
2955
- z-index: 1;
2956
- background-color: var(--hx-data-table-header-bg, var(--hx-color-neutral-50, #f8fafc));
4034
+ .field__trigger:focus-visible {
4035
+ color: var(
4036
+ --hx-date-picker-focus-ring-color,
4037
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
4038
+ );
4039
+ background-color: color-mix(
4040
+ in srgb,
4041
+ var(
4042
+ --hx-date-picker-focus-ring-color,
4043
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
4044
+ )
4045
+ 8%,
4046
+ transparent
4047
+ );
2957
4048
  }
2958
4049
 
2959
- /* ─── Cells ─── */
4050
+ .field__trigger:hover:not(:disabled) {
4051
+ color: var(--hx-date-picker-trigger-hover-color, var(--hx-color-neutral-700, #334155));
4052
+ background-color: color-mix(in srgb, var(--hx-color-neutral-900, #0f172a) 4%, transparent);
4053
+ }
2960
4054
 
2961
- th,
2962
- td {
2963
- padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
2964
- text-align: start;
2965
- border-bottom: var(--hx-border-width-thin, 1px) solid
2966
- var(--hx-data-table-border-color, var(--hx-color-neutral-200, #e2e8f0));
2967
- vertical-align: middle;
4055
+ .field__trigger:disabled {
4056
+ cursor: not-allowed;
2968
4057
  }
2969
4058
 
2970
- th {
2971
- font-weight: var(--hx-font-weight-semibold, 600);
2972
- color: var(--hx-data-table-header-color, var(--hx-color-neutral-700, #334155));
2973
- white-space: nowrap;
4059
+ /* ============================================================
4060
+ Calendar popover
4061
+ ============================================================ */
4062
+
4063
+ .calendar {
4064
+ position: absolute;
4065
+ top: calc(100% + var(--hx-space-1, 0.25rem));
4066
+ left: 0;
4067
+ z-index: var(--hx-z-index-dropdown, 1000);
4068
+ min-width: var(--hx-date-picker-calendar-min-width, 18rem);
4069
+ background-color: var(--hx-date-picker-calendar-bg, var(--hx-color-neutral-0, #ffffff));
4070
+ border: var(--hx-border-width-thin, 1px) solid
4071
+ var(--hx-date-picker-calendar-border-color, var(--hx-color-neutral-200, #e2e8f0));
4072
+ border-radius: var(--hx-date-picker-calendar-border-radius, var(--hx-border-radius-lg, 0.5rem));
4073
+ box-shadow: var(
4074
+ --hx-date-picker-calendar-shadow,
4075
+ var(--hx-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1))
4076
+ );
4077
+ padding: var(--hx-space-3, 0.75rem);
4078
+ outline: none;
4079
+ }
4080
+
4081
+ @media (prefers-reduced-motion: no-preference) {
4082
+ .calendar {
4083
+ animation: calendar-appear var(--hx-transition-fast, 150ms ease) forwards;
4084
+ }
4085
+ }
4086
+
4087
+ @keyframes calendar-appear {
4088
+ 0% {
4089
+ opacity: 0;
4090
+ transform: translateY(-0.25rem);
4091
+ }
4092
+
4093
+ to {
4094
+ opacity: 1;
4095
+ transform: translateY(0);
4096
+ }
4097
+ }
4098
+
4099
+ /* ============================================================
4100
+ Calendar navigation
4101
+ ============================================================ */
4102
+
4103
+ .calendar__nav {
4104
+ display: flex;
4105
+ align-items: center;
4106
+ justify-content: space-between;
4107
+ margin-bottom: var(--hx-space-3, 0.75rem);
4108
+ }
4109
+
4110
+ :is(.calendar__nav-btn, .calendar__day, .calendar__day-cell, .calendar__weekday) {
4111
+ display: flex;
4112
+ align-items: center;
4113
+ justify-content: center;
4114
+ }
4115
+
4116
+ :is(.calendar__nav-btn, .calendar__day) {
4117
+ width: var(--hx-touch-target-min, 2.75rem);
4118
+ height: var(--hx-touch-target-min, 2.75rem);
4119
+ border: none;
4120
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
4121
+ background: transparent;
4122
+ cursor: pointer;
4123
+ outline: none;
4124
+ transition:
4125
+ background-color var(--hx-transition-fast, 150ms ease),
4126
+ color var(--hx-transition-fast, 150ms ease);
4127
+ }
4128
+
4129
+ .calendar__nav-btn {
4130
+ color: var(--hx-color-neutral-600, #475569);
4131
+ font-size: var(--hx-font-size-lg, 1.125rem);
4132
+ line-height: 1;
2974
4133
  }
2975
4134
 
2976
- td {
2977
- color: var(--hx-data-table-cell-color, var(--hx-color-neutral-900, #0f172a));
4135
+ .calendar__nav-btn:hover {
4136
+ background-color: var(--hx-color-neutral-100, #f1f5f9);
4137
+ color: var(--hx-color-neutral-900, #0f172a);
2978
4138
  }
2979
4139
 
2980
- /* ─── Checkbox Column ─── */
2981
-
2982
- th.col-checkbox,
2983
- td.col-checkbox {
2984
- /* WCAG 2.5.5 (healthcare mandate): minimum 44x44px touch target */
2985
- width: var(--hx-touch-target-min, 2.75rem);
2986
- min-width: var(--hx-touch-target-min, 2.75rem);
2987
- padding-inline-end: var(--hx-space-2, 0.5rem);
4140
+ :is(.calendar__nav-btn, .calendar__day):focus-visible {
4141
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
4142
+ var(
4143
+ --hx-date-picker-focus-ring-color,
4144
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
4145
+ );
4146
+ z-index: 1;
2988
4147
  }
2989
4148
 
2990
- th.col-checkbox {
2991
- text-align: center;
4149
+ .calendar__nav-btn:disabled {
4150
+ opacity: var(--hx-opacity-disabled, 0.5);
4151
+ cursor: not-allowed;
4152
+ pointer-events: none;
2992
4153
  }
2993
4154
 
2994
- td.col-checkbox {
4155
+ .calendar__month-label {
4156
+ font-size: var(--hx-font-size-sm, 0.875rem);
4157
+ font-weight: var(--hx-font-weight-semibold, 600);
4158
+ color: var(--hx-color-neutral-800, #1e293b);
4159
+ flex: 1;
2995
4160
  text-align: center;
2996
4161
  }
2997
4162
 
2998
- /* ─── Sort Button ─── */
4163
+ /* ============================================================
4164
+ Calendar grid
4165
+ ============================================================ */
2999
4166
 
3000
- .sort-btn {
3001
- display: inline-flex;
3002
- align-items: center;
4167
+ .calendar__grid {
4168
+ display: flex;
4169
+ flex-direction: column;
3003
4170
  gap: var(--hx-space-1, 0.25rem);
3004
- background: none;
3005
- border: none;
3006
- padding: 0;
3007
- font: inherit;
3008
- font-weight: inherit;
3009
- color: inherit;
3010
- cursor: pointer;
3011
- white-space: nowrap;
3012
4171
  }
3013
4172
 
3014
- .sort-btn:focus-visible {
3015
- outline: var(--hx-focus-ring-width, 2px) solid
3016
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb));
3017
- outline-offset: var(--hx-focus-ring-offset, 2px);
3018
- border-radius: var(--hx-border-radius-sm, 2px);
4173
+ .calendar__row {
4174
+ display: grid;
4175
+ grid-template-columns: repeat(7, 1fr);
4176
+ gap: var(--hx-space-1, 0.25rem);
3019
4177
  }
3020
4178
 
3021
- /* ─── Sort Icon ─── */
4179
+ .calendar__weekday {
4180
+ height: var(--hx-size-8, 2rem);
4181
+ font-size: var(--hx-font-size-xs, 0.75rem);
4182
+ font-weight: var(--hx-font-weight-semibold, 600);
4183
+ color: var(--hx-color-neutral-500, #64748b);
4184
+ text-transform: uppercase;
4185
+ letter-spacing: 0.05em;
4186
+ }
3022
4187
 
3023
- .sort-icon {
3024
- display: inline-flex;
3025
- align-items: center;
3026
- flex-shrink: 0;
3027
- width: 1em;
3028
- height: 1em;
3029
- opacity: var(--hx-opacity-25, 0.25); /* sort icon inactive — intentionally subtle */
3030
- transition:
3031
- opacity var(--hx-transition-fast, 150ms ease),
3032
- transform var(--hx-transition-fast, 150ms ease);
4188
+ /* ============================================================
4189
+ Calendar day cells
4190
+ ============================================================ */
4191
+
4192
+ .calendar__day {
4193
+ color: var(--hx-color-neutral-800, #1e293b);
4194
+ font-size: var(--hx-font-size-sm, 0.875rem);
4195
+ font-family: inherit;
4196
+ position: relative;
3033
4197
  }
3034
4198
 
3035
- .sort-icon--active {
3036
- opacity: var(--hx-opacity-100, 1);
3037
- color: var(--hx-color-primary-500, #2563eb);
4199
+ .calendar__day:hover:not(.calendar__day--disabled):not(.calendar__day--selected) {
4200
+ background-color: var(--hx-color-neutral-100, #f1f5f9);
4201
+ color: var(--hx-color-neutral-900, #0f172a);
3038
4202
  }
3039
4203
 
3040
- .sort-icon--desc {
3041
- transform: rotate(180deg);
4204
+ .calendar__day--selected {
4205
+ background-color: var(--hx-date-picker-selected-bg, var(--hx-color-primary-500, #2563eb));
4206
+ color: var(--hx-date-picker-selected-color, var(--hx-color-neutral-0, #ffffff));
4207
+ font-weight: var(--hx-font-weight-semibold, 600);
3042
4208
  }
3043
4209
 
3044
- /* ─── Row States ─── */
4210
+ .calendar__day--selected:hover {
4211
+ background-color: var(--hx-date-picker-selected-hover-bg, var(--hx-color-primary-600, #1d4ed8));
4212
+ }
3045
4213
 
3046
- tbody tr {
3047
- transition: background-color var(--hx-transition-fast, 150ms ease);
4214
+ .calendar__day--today:not(.calendar__day--selected) {
4215
+ font-weight: var(--hx-font-weight-bold, 700);
4216
+ color: var(--hx-date-picker-today-color, var(--hx-color-primary-600, #1d4ed8));
3048
4217
  }
3049
4218
 
3050
- tbody tr:hover {
3051
- background-color: var(--hx-data-table-row-hover-bg, var(--hx-color-neutral-50, #f8fafc));
4219
+ .calendar__day--today:not(.calendar__day--selected)::after {
4220
+ content: '';
4221
+ position: absolute;
4222
+ bottom: 0.2rem;
4223
+ left: 50%;
4224
+ transform: translate(-50%);
4225
+ width: 0.25rem;
4226
+ height: 0.25rem;
4227
+ border-radius: 50%;
4228
+ background-color: currentColor;
3052
4229
  }
3053
4230
 
3054
- tbody tr[aria-selected='true'] {
3055
- background-color: var(--hx-data-table-row-selected-bg, var(--hx-color-primary-50, #eff6ff));
4231
+ .calendar__day--disabled {
4232
+ opacity: var(--hx-opacity-disabled, 0.5);
4233
+ cursor: not-allowed;
4234
+ pointer-events: none;
3056
4235
  }
3057
4236
 
3058
- /* ─── Checkbox Input ─── */
4237
+ /* ============================================================
4238
+ Live region (screen reader announcements)
4239
+ ============================================================ */
3059
4240
 
3060
- input[type='checkbox'] {
3061
- width: var(--hx-size-4, 1rem);
3062
- height: var(--hx-size-4, 1rem);
3063
- cursor: pointer;
3064
- accent-color: var(--hx-color-primary-500, #2563eb);
4241
+ .calendar__live-region {
4242
+ position: absolute;
4243
+ width: 1px;
4244
+ height: 1px;
4245
+ padding: 0;
4246
+ margin: -1px;
4247
+ overflow: hidden;
4248
+ clip: rect(0, 0, 0, 0);
4249
+ white-space: nowrap;
4250
+ border: 0;
3065
4251
  }
3066
4252
 
3067
- /* ─── Loading Skeleton ─── */
4253
+ /* ============================================================
4254
+ Help text and error message
4255
+ ============================================================ */
3068
4256
 
3069
- .skeleton-cell {
3070
- display: block;
3071
- height: 1em;
3072
- border-radius: var(--hx-border-radius-sm, 2px);
3073
- background: linear-gradient(
3074
- 90deg,
3075
- var(--hx-color-neutral-200, #e2e8f0) 25%,
3076
- var(--hx-color-neutral-100, #f1f5f9) 50%,
3077
- var(--hx-color-neutral-200, #e2e8f0) 75%
3078
- );
3079
- background-size: 200% 100%;
3080
- animation: hx-shimmer var(--hx-data-table-shimmer-duration, 1.5s) infinite;
4257
+ .field__help-text,
4258
+ .field__error {
4259
+ font-size: var(--hx-font-size-xs, 0.75rem);
4260
+ line-height: var(--hx-line-height-normal, 1.5);
3081
4261
  }
3082
4262
 
3083
- @keyframes hx-shimmer {
3084
- 0% {
3085
- background-position: 200% 0;
3086
- }
3087
- 100% {
3088
- background-position: -200% 0;
3089
- }
4263
+ .field__help-text {
4264
+ color: var(--hx-color-neutral-500, #64748b);
3090
4265
  }
3091
4266
 
3092
- @media (prefers-reduced-motion: reduce) {
3093
- .skeleton-cell {
3094
- animation: none;
3095
- opacity: var(
3096
- --hx-opacity-50,
3097
- 0.5
3098
- ); /* reduced from animation; approximate to available token */
3099
- }
4267
+ .field__error {
4268
+ color: var(--hx-date-picker-error-color, var(--hx-color-error-text, #b91c1c));
4269
+ }
3100
4270
 
3101
- .sort-icon {
3102
- transition: none;
3103
- }
4271
+ /* ============================================================
4272
+ Reduced motion
4273
+ ============================================================ */
3104
4274
 
3105
- tbody tr {
4275
+ @media (prefers-reduced-motion: reduce) {
4276
+ .field__input-wrapper,
4277
+ .field__trigger,
4278
+ .calendar__nav-btn,
4279
+ .calendar__day {
3106
4280
  transition: none;
3107
4281
  }
3108
4282
  }
3109
4283
 
3110
- /* ─── Cell Focus ─── */
4284
+ /* ============================================================
4285
+ Forced colors (Windows High Contrast)
4286
+ ============================================================ */
3111
4287
 
3112
- td:focus-visible,
3113
- th:focus-visible,
3114
- [part~='td']:focus-visible,
3115
- [part~='th']:focus-visible {
3116
- outline: var(--hx-focus-ring-width, 2px) solid
3117
- var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb));
3118
- outline-offset: var(--hx-focus-ring-offset, -2px);
3119
- border-radius: var(--hx-border-radius-sm, 2px);
3120
- }
4288
+ @media (forced-colors: active) {
4289
+ .field__input-wrapper {
4290
+ border: 1px solid ButtonText;
4291
+ }
3121
4292
 
3122
- /* ─── Empty State ─── */
4293
+ .field__input-wrapper:focus-within {
4294
+ outline: 2px solid Highlight;
4295
+ outline-offset: 1px;
4296
+ box-shadow: none;
4297
+ }
3123
4298
 
3124
- .empty-cell {
3125
- text-align: center;
3126
- color: var(--hx-data-table-empty-color, var(--hx-color-neutral-600, #475569));
3127
- padding: var(--hx-space-8, 2rem) var(--hx-space-4, 1rem);
3128
- }
4299
+ :is(.calendar__day:focus-visible, .calendar__nav-btn:focus-visible) {
4300
+ outline: 2px solid Highlight;
4301
+ box-shadow: none;
4302
+ }
3129
4303
 
3130
- /* ─── Forced Colors (Windows High Contrast) ─── */
4304
+ .calendar__day--selected {
4305
+ background-color: Highlight;
4306
+ color: HighlightText;
4307
+ border: 1px solid Highlight;
4308
+ }
3131
4309
 
3132
- @media (forced-colors: active) {
3133
- table {
3134
- border: 1px solid CanvasText;
4310
+ .calendar__day--today:not(.calendar__day--selected) {
4311
+ border: 2px solid LinkText;
3135
4312
  }
3136
4313
 
3137
- th,
3138
- td {
3139
- border-bottom-color: CanvasText;
4314
+ .calendar__day--today:not(.calendar__day--selected)::after {
4315
+ display: none;
3140
4316
  }
3141
4317
 
3142
- tbody tr[aria-selected='true'] {
3143
- outline: 2px solid Highlight;
4318
+ .calendar__day--disabled {
4319
+ color: GrayText;
3144
4320
  }
3145
4321
 
3146
- .skeleton-cell {
3147
- animation: none;
3148
- border: 1px solid GrayText;
3149
- background: none;
4322
+ .field--error .field__input-wrapper {
4323
+ border-color: LinkText;
3150
4324
  }
3151
4325
  }
3152
- /* ── hx-date-picker ── */
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}}
3154
4326
  /* ── hx-dialog ── */
3155
4327
  :host {
3156
4328
  display: contents;
@@ -3254,7 +4426,7 @@
3254
4426
 
3255
4427
  .dialog__heading {
3256
4428
  margin: 0;
3257
- font-family: var(--hx-font-family-sans);
4429
+ font-family: var(--hx-dialog-font-family, var(--hx-font-family-sans));
3258
4430
  font-size: var(--hx-font-size-lg);
3259
4431
  font-weight: var(--hx-font-weight-semibold);
3260
4432
  line-height: var(--hx-line-height-tight);
@@ -3280,7 +4452,7 @@
3280
4452
  border: none;
3281
4453
  border-radius: var(--hx-border-radius-sm, 0.25rem);
3282
4454
  cursor: pointer;
3283
- color: var(--hx-color-neutral-500, #6b7280);
4455
+ color: var(--hx-color-neutral-500, #64748b);
3284
4456
  font-size: var(--hx-font-size-xl, 1.25rem);
3285
4457
  line-height: 1; /* intentional literal: icon button needs line-height 1; no token maps to exactly 1 */
3286
4458
  transition:
@@ -3625,7 +4797,7 @@
3625
4797
  .drawer-title {
3626
4798
  margin: 0;
3627
4799
  flex: 1 1 auto;
3628
- font-family: var(--hx-font-family-sans);
4800
+ font-family: var(--hx-drawer-font-family, var(--hx-font-family-sans));
3629
4801
  font-size: var(--hx-font-size-lg);
3630
4802
  font-weight: var(--hx-font-weight-semibold);
3631
4803
  line-height: var(--hx-line-height-tight);
@@ -3760,7 +4932,7 @@
3760
4932
  z-index: var(--hx-dropdown-panel-z-index, 1000);
3761
4933
  min-width: var(--hx-dropdown-panel-min-width, 160px);
3762
4934
  background: var(--hx-dropdown-panel-bg, var(--hx-color-neutral-0, #ffffff));
3763
- border: 1px solid var(--hx-dropdown-panel-border-color, var(--hx-color-neutral-200, #e5e7eb));
4935
+ border: 1px solid var(--hx-dropdown-panel-border-color, var(--hx-color-neutral-200, #e2e8f0));
3764
4936
  border-radius: var(--hx-dropdown-panel-border-radius, var(--hx-border-radius-md, 0.375rem));
3765
4937
  box-shadow: var(
3766
4938
  --hx-dropdown-panel-shadow,
@@ -3843,7 +5015,7 @@
3843
5015
  gap: var(--hx-space-1, 0.25rem);
3844
5016
  font-size: var(--hx-font-size-sm, 0.875rem);
3845
5017
  font-weight: var(--hx-font-weight-medium, 500);
3846
- color: var(--hx-field-label-color, var(--hx-color-neutral-700, #374151));
5018
+ color: var(--hx-field-label-color, var(--hx-color-neutral-700, #334155));
3847
5019
  line-height: var(--hx-line-height-normal, 1.5);
3848
5020
  cursor: pointer;
3849
5021
  }
@@ -3893,7 +5065,7 @@
3893
5065
 
3894
5066
  .field__help-text {
3895
5067
  font-size: var(--hx-font-size-xs, 0.75rem);
3896
- color: var(--hx-field-help-text-color, var(--hx-color-neutral-500, #6b7280));
5068
+ color: var(--hx-field-help-text-color, var(--hx-color-neutral-500, #64748b));
3897
5069
  line-height: var(--hx-line-height-normal, 1.5);
3898
5070
  }
3899
5071
 
@@ -3910,7 +5082,7 @@
3910
5082
  }
3911
5083
 
3912
5084
  .field--error .field__control {
3913
- outline: 2px solid var(--hx-field-error-color, var(--hx-color-error-500, #ef4444));
5085
+ outline: 2px solid var(--hx-field-error-color, var(--hx-color-error-500, #dc2626));
3914
5086
  outline-offset: var(--hx-focus-ring-offset, 2px);
3915
5087
  border-radius: var(--hx-border-radius-sm, 0.25rem);
3916
5088
  }
@@ -3961,7 +5133,7 @@
3961
5133
  gap: var(--hx-space-1, 0.25rem);
3962
5134
  font-size: var(--hx-font-label-size, var(--hx-font-size-sm, 0.875rem));
3963
5135
  font-weight: var(--hx-font-label-weight, var(--hx-font-weight-medium, 500));
3964
- color: var(--hx-field-label-color, var(--hx-color-neutral-700, #374151));
5136
+ color: var(--hx-field-label-color, var(--hx-color-neutral-700, #334155));
3965
5137
  line-height: var(--hx-font-label-line-height, var(--hx-line-height-normal, 1.5));
3966
5138
  font-family: var(--hx-font-label-family, var(--hx-font-family-sans, sans-serif));
3967
5139
  }
@@ -3974,7 +5146,7 @@
3974
5146
  .optional-indicator {
3975
5147
  font-size: var(--hx-font-size-xs, 0.75rem);
3976
5148
  font-weight: var(--hx-font-weight-normal, 400);
3977
- color: var(--hx-color-neutral-500, #6b7280);
5149
+ color: var(--hx-color-neutral-500, #64748b);
3978
5150
  }
3979
5151
 
3980
5152
  /* ─── High Contrast Mode (forced-colors) ─── */
@@ -4022,7 +5194,7 @@
4022
5194
  display: flex;
4023
5195
  flex-direction: column;
4024
5196
  gap: var(--hx-space-2, 0.5rem);
4025
- font-family: var(--hx-font-family-sans, sans-serif);
5197
+ font-family: var(--hx-file-upload-font-family, var(--hx-font-family-sans, sans-serif));
4026
5198
  }
4027
5199
 
4028
5200
  /* ─── Label ─── */
@@ -4033,7 +5205,7 @@
4033
5205
  gap: var(--hx-space-1, 0.25rem);
4034
5206
  font-size: var(--hx-font-size-sm, 0.875rem);
4035
5207
  font-weight: var(--hx-font-weight-medium, 500);
4036
- color: var(--hx-color-neutral-700, #343a40);
5208
+ color: var(--hx-color-neutral-700, #334155);
4037
5209
  line-height: var(--hx-line-height-normal, 1.5);
4038
5210
  }
4039
5211
 
@@ -4048,9 +5220,9 @@
4048
5220
  min-height: var(--hx-space-32, 8rem);
4049
5221
  padding: var(--hx-space-6, 1.5rem) var(--hx-space-4, 1rem);
4050
5222
  border: var(--hx-border-width-thin, 1px) dashed
4051
- var(--hx-file-upload-dropzone-border-color, var(--hx-color-neutral-300, #ced4da));
5223
+ var(--hx-file-upload-dropzone-border-color, var(--hx-color-neutral-300, #cbd5e1));
4052
5224
  border-radius: var(--hx-file-upload-dropzone-border-radius, var(--hx-border-radius-lg, 0.5rem));
4053
- background-color: var(--hx-file-upload-dropzone-bg, var(--hx-color-neutral-50, #f8f9fa));
5225
+ background-color: var(--hx-file-upload-dropzone-bg, var(--hx-color-neutral-50, #f8fafc));
4054
5226
  cursor: pointer;
4055
5227
  text-align: center;
4056
5228
  transition:
@@ -4058,7 +5230,7 @@
4058
5230
  background-color var(--hx-transition-fast, 150ms ease),
4059
5231
  box-shadow var(--hx-transition-fast, 150ms ease);
4060
5232
  user-select: none;
4061
- color: var(--hx-color-neutral-600, #495057);
5233
+ color: var(--hx-color-neutral-600, #475569);
4062
5234
  font-size: var(--hx-font-size-sm, 0.875rem);
4063
5235
  }
4064
5236
 
@@ -4089,7 +5261,7 @@
4089
5261
  }
4090
5262
 
4091
5263
  .dropzone--error {
4092
- border-color: var(--hx-file-upload-error-color, var(--hx-color-error-500, #dc3545));
5264
+ border-color: var(--hx-file-upload-error-color, var(--hx-color-error-500, #dc2626));
4093
5265
  }
4094
5266
 
4095
5267
  @media (prefers-reduced-motion: reduce) {
@@ -4134,7 +5306,7 @@
4134
5306
  flex-direction: column;
4135
5307
  gap: var(--hx-space-1, 0.25rem);
4136
5308
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
4137
- border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e9ecef);
5309
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e2e8f0);
4138
5310
  border-radius: var(--hx-border-radius-md, 0.375rem);
4139
5311
  background-color: var(--hx-color-neutral-0, #ffffff);
4140
5312
  }
@@ -4149,7 +5321,7 @@
4149
5321
  flex: 1;
4150
5322
  font-size: var(--hx-font-size-sm, 0.875rem);
4151
5323
  font-weight: var(--hx-font-weight-medium, 500);
4152
- color: var(--hx-color-neutral-800, #212529);
5324
+ color: var(--hx-color-neutral-800, #1e293b);
4153
5325
  overflow: hidden;
4154
5326
  text-overflow: ellipsis;
4155
5327
  white-space: nowrap;
@@ -4158,7 +5330,7 @@
4158
5330
  .file-item__size {
4159
5331
  flex-shrink: 0;
4160
5332
  font-size: var(--hx-font-size-xs, 0.75rem);
4161
- color: var(--hx-color-neutral-500, #6c757d);
5333
+ color: var(--hx-color-neutral-500, #64748b);
4162
5334
  }
4163
5335
 
4164
5336
  .file-item__remove {
@@ -4172,7 +5344,7 @@
4172
5344
  border: none;
4173
5345
  border-radius: var(--hx-border-radius-sm, 0.25rem);
4174
5346
  background: transparent;
4175
- color: var(--hx-color-neutral-500, #6c757d);
5347
+ color: var(--hx-color-neutral-500, #64748b);
4176
5348
  cursor: pointer;
4177
5349
  line-height: 1;
4178
5350
  transition:
@@ -4182,7 +5354,7 @@
4182
5354
 
4183
5355
  .file-item__remove:hover {
4184
5356
  color: var(--hx-file-upload-error-color, var(--hx-color-error-text, #b91c1c));
4185
- background-color: color-mix(in srgb, var(--hx-color-error-500, #dc3545) 8%, transparent);
5357
+ background-color: color-mix(in srgb, var(--hx-color-error-500, #dc2626) 8%, transparent);
4186
5358
  }
4187
5359
 
4188
5360
  .file-item__remove:focus-visible {
@@ -4205,7 +5377,7 @@
4205
5377
  .progress-track {
4206
5378
  width: 100%;
4207
5379
  height: var(--hx-file-upload-progress-height, var(--hx-space-1, 0.25rem));
4208
- background-color: var(--hx-color-neutral-200, #e9ecef);
5380
+ background-color: var(--hx-color-neutral-200, #e2e8f0);
4209
5381
  border-radius: var(--hx-border-radius-full, 9999px);
4210
5382
  overflow: hidden;
4211
5383
  }
@@ -4303,6 +5475,17 @@
4303
5475
  font: inherit;
4304
5476
  color: inherit;
4305
5477
  }
5478
+
5479
+ /* ─── High Contrast Mode (forced-colors) ─── */
5480
+
5481
+ /* hx-format-date renders text-only content using color: inherit from its parent.
5482
+ forced-color-adjust: auto (default) is sufficient — the browser maps
5483
+ inherited text color to CanvasText automatically in forced-colors mode. */
5484
+ @media (forced-colors: active) {
5485
+ :host {
5486
+ forced-color-adjust: auto;
5487
+ }
5488
+ }
4306
5489
  /* ── hx-grid ── */
4307
5490
  :host {
4308
5491
  display: block;
@@ -4317,6 +5500,16 @@ export const helixGridItemStyles = css`
4317
5500
  min-width: 0;
4318
5501
  min-height: 0;
4319
5502
  }
5503
+
5504
+ /* ─── High Contrast Mode (forced-colors) ─── */
5505
+
5506
+ /* hx-grid and hx-grid-item are layout wrappers with no state communicated
5507
+ via color. forced-color-adjust: auto (default) is sufficient. */
5508
+ @media (forced-colors: active) {
5509
+ :host {
5510
+ forced-color-adjust: auto;
5511
+ }
5512
+ }
4320
5513
  /* ── hx-help-text ── */
4321
5514
  :host {
4322
5515
  display: block;
@@ -4330,7 +5523,7 @@ export const helixGridItemStyles = css`
4330
5523
  font-size: var(--hx-help-text-font-size, var(--hx-font-size-sm, 0.875rem));
4331
5524
  font-weight: var(--hx-help-text-font-weight, var(--hx-font-weight-normal, 400));
4332
5525
  line-height: var(--hx-help-text-line-height, var(--hx-line-height-normal, 1.5));
4333
- color: var(--hx-help-text-color, var(--hx-color-neutral-500, #6b7280));
5526
+ color: var(--hx-help-text-color, var(--hx-color-neutral-500, #64748b));
4334
5527
  margin: 0;
4335
5528
  }
4336
5529
 
@@ -4347,25 +5540,25 @@ export const helixGridItemStyles = css`
4347
5540
  /* ─── Variant: default ─── */
4348
5541
 
4349
5542
  .help-text--default {
4350
- --hx-help-text-color: var(--hx-color-neutral-500, #6b7280);
5543
+ --hx-help-text-color: var(--hx-color-neutral-500, #64748b);
4351
5544
  }
4352
5545
 
4353
5546
  /* ─── Variant: error ─── */
4354
5547
 
4355
5548
  .help-text--error {
4356
- --hx-help-text-color: var(--hx-color-error-600, #dc2626);
5549
+ --hx-help-text-color: var(--hx-color-error-600, #b91c1c);
4357
5550
  }
4358
5551
 
4359
5552
  /* ─── Variant: warning ─── */
4360
5553
 
4361
5554
  .help-text--warning {
4362
- --hx-help-text-color: var(--hx-color-warning-700, #b45309);
5555
+ --hx-help-text-color: var(--hx-color-warning-700, #92400e);
4363
5556
  }
4364
5557
 
4365
5558
  /* ─── Variant: success ─── */
4366
5559
 
4367
5560
  .help-text--success {
4368
- --hx-help-text-color: var(--hx-color-success-700, #15803d);
5561
+ --hx-help-text-color: var(--hx-color-success-700, #166534);
4369
5562
  }
4370
5563
 
4371
5564
  /* ─── High Contrast Mode (forced-colors) ─── */
@@ -4667,8 +5860,8 @@ export const helixGridItemStyles = css`
4667
5860
  align-items: center;
4668
5861
  justify-content: center;
4669
5862
  min-height: var(--hx-image-fallback-min-height, 3rem);
4670
- background-color: var(--hx-color-neutral-100, #f3f4f6);
4671
- color: var(--hx-color-neutral-500, #6b7280);
5863
+ background-color: var(--hx-color-neutral-100, #f1f5f9);
5864
+ color: var(--hx-color-neutral-500, #64748b);
4672
5865
  }
4673
5866
 
4674
5867
  .image__img {
@@ -4681,7 +5874,7 @@ export const helixGridItemStyles = css`
4681
5874
  .image__caption {
4682
5875
  display: none;
4683
5876
  padding: var(--hx-image-caption-padding, 0.5rem 0 0);
4684
- color: var(--hx-image-caption-color, var(--hx-color-neutral-600, #4b5563));
5877
+ color: var(--hx-image-caption-color, var(--hx-color-neutral-600, #475569));
4685
5878
  font-size: var(--hx-image-caption-font-size, 0.875rem);
4686
5879
  }
4687
5880
 
@@ -4725,12 +5918,12 @@ export const helixGridItemStyles = css`
4725
5918
  }
4726
5919
 
4727
5920
  .link:hover {
4728
- color: var(--hx-link-color-hover, var(--hx-color-primary-700, #1d4ed8));
5921
+ color: var(--hx-link-color-hover, var(--hx-color-primary-700, #1e40af));
4729
5922
  text-decoration: var(--hx-link-text-decoration-hover, underline);
4730
5923
  }
4731
5924
 
4732
5925
  .link:active {
4733
- color: var(--hx-link-color-active, var(--hx-color-primary-800, #1e40af));
5926
+ color: var(--hx-link-color-active, var(--hx-color-primary-800, #1e3a8a));
4734
5927
  }
4735
5928
 
4736
5929
  .link:focus-visible {
@@ -4740,7 +5933,7 @@ export const helixGridItemStyles = css`
4740
5933
  var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
4741
5934
  );
4742
5935
  outline-offset: var(--hx-focus-ring-offset, 2px);
4743
- border-radius: var(--hx-border-radius-sm, 0.125rem);
5936
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
4744
5937
  }
4745
5938
 
4746
5939
  /* --- Variant: subtle --- */
@@ -4751,7 +5944,7 @@ export const helixGridItemStyles = css`
4751
5944
  }
4752
5945
 
4753
5946
  .link--subtle:hover {
4754
- color: var(--hx-link-color-hover, var(--hx-color-primary-700, #1d4ed8));
5947
+ color: var(--hx-link-color-hover, var(--hx-color-primary-700, #1e40af));
4755
5948
  text-decoration: underline;
4756
5949
  }
4757
5950
 
@@ -4762,7 +5955,7 @@ export const helixGridItemStyles = css`
4762
5955
  }
4763
5956
 
4764
5957
  .link--danger:hover {
4765
- color: var(--hx-link-color-danger-hover, var(--hx-color-error-700, #b91c1c));
5958
+ color: var(--hx-link-color-danger-hover, var(--hx-color-error-700, #991b1b));
4766
5959
  }
4767
5960
 
4768
5961
  /* --- Disabled --- */
@@ -4867,6 +6060,16 @@ export const helixGridItemStyles = css`
4867
6060
  border-bottom: var(--hx-border-width-thin, 1px) solid
4868
6061
  var(--hx-list-divider-color, var(--hx-color-neutral-200, #e2e8f0));
4869
6062
  }
6063
+
6064
+ /* ─── High Contrast Mode (forced-colors) ─── */
6065
+
6066
+ @media (forced-colors: active) {
6067
+ /* Divider borders are already using a border property, which forced-colors respects.
6068
+ Ensure the system color is used for divider borders. */
6069
+ :host([divided]) .list > ::slotted(hx-list-item:not(:last-child)) {
6070
+ border-bottom-color: CanvasText;
6071
+ }
6072
+ }
4870
6073
  /* ── hx-menu ── */
4871
6074
  :host {
4872
6075
  display: block;
@@ -4882,8 +6085,7 @@ export const helixGridItemStyles = css`
4882
6085
  border-radius: var(--hx-menu-border-radius, var(--hx-border-radius-md, 0.375rem));
4883
6086
  box-shadow: var(
4884
6087
  --hx-menu-shadow,
4885
- 0 4px 6px -1px rgb(0 0 0 / 0.1),
4886
- 0 2px 4px -2px rgb(0 0 0 / 0.1)
6088
+ var(--hx-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1))
4887
6089
  );
4888
6090
  min-width: var(--hx-menu-min-width, 10rem);
4889
6091
  max-height: var(--hx-menu-max-height, 20rem);
@@ -4915,14 +6117,14 @@ export const helixGridItemStyles = css`
4915
6117
  }
4916
6118
 
4917
6119
  .meter:focus-visible {
4918
- outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);
6120
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #60a5fa);
4919
6121
  outline-offset: var(--hx-focus-ring-offset, 2px);
4920
6122
  }
4921
6123
 
4922
6124
  .meter__label {
4923
6125
  font-size: var(--hx-font-size-sm, 0.875rem);
4924
6126
  font-weight: var(--hx-font-weight-medium, 500);
4925
- color: var(--hx-meter-label-color, var(--hx-color-neutral-700, #374151));
6127
+ color: var(--hx-meter-label-color, var(--hx-color-neutral-700, #334155));
4926
6128
  line-height: var(--hx-line-height-normal, 1.5);
4927
6129
  }
4928
6130
 
@@ -4930,7 +6132,7 @@ export const helixGridItemStyles = css`
4930
6132
  position: relative;
4931
6133
  width: 100%;
4932
6134
  height: var(--hx-meter-track-height, var(--hx-space-2, 0.5rem));
4933
- background-color: var(--hx-meter-track-color, var(--hx-color-neutral-200, #e5e7eb));
6135
+ background-color: var(--hx-meter-track-color, var(--hx-color-neutral-200, #e2e8f0));
4934
6136
  border-radius: var(--hx-meter-track-radius, var(--hx-border-radius-full, 9999px));
4935
6137
  overflow: hidden;
4936
6138
  }
@@ -4959,17 +6161,17 @@ export const helixGridItemStyles = css`
4959
6161
  /* ─── Default (no thresholds configured) ─── */
4960
6162
 
4961
6163
  :host {
4962
- --_indicator-color: var(--hx-meter-indicator-color, var(--hx-color-primary-500, #3b82f6));
6164
+ --_indicator-color: var(--hx-meter-indicator-color, var(--hx-color-primary-500, #2563eb));
4963
6165
  }
4964
6166
 
4965
6167
  /* ─── Semantic state colors ─── */
4966
6168
 
4967
6169
  :host([data-state='optimum']) {
4968
- --_indicator-color: var(--hx-meter-color-optimum, var(--hx-color-success-500, #22c55e));
6170
+ --_indicator-color: var(--hx-meter-color-optimum, var(--hx-color-success-500, #16a34a));
4969
6171
  }
4970
6172
 
4971
6173
  :host([data-state='warning']) {
4972
- --_indicator-color: var(--hx-meter-color-warning, var(--hx-color-warning-500, #f59e0b));
6174
+ --_indicator-color: var(--hx-meter-color-warning, var(--hx-color-warning-500, #d97706));
4973
6175
  }
4974
6176
 
4975
6177
  :host([data-state='danger']) {
@@ -4985,15 +6187,15 @@ export const helixGridItemStyles = css`
4985
6187
  font-size: var(--hx-font-size-xs, 0.75rem);
4986
6188
  font-weight: var(--hx-font-weight-medium, 500);
4987
6189
  line-height: var(--hx-line-height-tight, 1.25);
4988
- font-family: var(--hx-font-family-sans, sans-serif);
6190
+ font-family: var(--hx-meter-font-family, var(--hx-font-family-sans, sans-serif));
4989
6191
  }
4990
6192
 
4991
6193
  .meter__state-label[data-state='optimum'] {
4992
- color: var(--hx-meter-color-optimum, var(--hx-color-success-700, #15803d));
6194
+ color: var(--hx-meter-color-optimum, var(--hx-color-success-700, #166534));
4993
6195
  }
4994
6196
 
4995
6197
  .meter__state-label[data-state='warning'] {
4996
- color: var(--hx-meter-color-warning, var(--hx-color-warning-700, #b45309));
6198
+ color: var(--hx-meter-color-warning, var(--hx-color-warning-700, #92400e));
4997
6199
  }
4998
6200
 
4999
6201
  .meter__state-label[data-state='danger'] {
@@ -5041,8 +6243,8 @@ export const helixGridItemStyles = css`
5041
6243
 
5042
6244
  [part='nav'] {
5043
6245
  position: relative;
5044
- background-color: var(--hx-nav-bg, var(--hx-color-neutral-900, #111827));
5045
- color: var(--hx-nav-color, var(--hx-color-neutral-100, #f3f4f6));
6246
+ background-color: var(--hx-nav-bg, var(--hx-color-neutral-900, #0f172a));
6247
+ color: var(--hx-nav-color, var(--hx-color-neutral-100, #f1f5f9));
5046
6248
  padding: var(--hx-nav-padding, var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem));
5047
6249
  }
5048
6250
 
@@ -5056,14 +6258,14 @@ export const helixGridItemStyles = css`
5056
6258
  background: transparent;
5057
6259
  border: none;
5058
6260
  border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));
5059
- color: var(--hx-nav-color, var(--hx-color-neutral-100, #f3f4f6));
6261
+ color: var(--hx-nav-color, var(--hx-color-neutral-100, #f1f5f9));
5060
6262
  cursor: pointer;
5061
6263
  transition: background-color var(--hx-transition-fast, 150ms) ease;
5062
6264
  line-height: 0;
5063
6265
  }
5064
6266
 
5065
6267
  [part='toggle']:hover {
5066
- background-color: var(--hx-nav-link-hover-bg, var(--hx-color-neutral-700, #374151));
6268
+ background-color: var(--hx-nav-link-hover-bg, var(--hx-color-neutral-700, #334155));
5067
6269
  }
5068
6270
 
5069
6271
  [part='toggle']:focus-visible {
@@ -5098,7 +6300,7 @@ export const helixGridItemStyles = css`
5098
6300
  align-items: center;
5099
6301
  gap: var(--hx-space-1, 0.25rem);
5100
6302
  padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));
5101
- color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #f3f4f6));
6303
+ color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #f1f5f9));
5102
6304
  text-decoration: none;
5103
6305
  border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));
5104
6306
  border: none;
@@ -5115,7 +6317,7 @@ export const helixGridItemStyles = css`
5115
6317
  }
5116
6318
 
5117
6319
  .nav__link:hover {
5118
- background-color: var(--hx-nav-link-hover-bg, var(--hx-color-neutral-700, #374151));
6320
+ background-color: var(--hx-nav-link-hover-bg, var(--hx-color-neutral-700, #334155));
5119
6321
  color: var(--hx-nav-link-hover-color, var(--hx-color-neutral-0, #ffffff));
5120
6322
  }
5121
6323
 
@@ -5126,7 +6328,7 @@ export const helixGridItemStyles = css`
5126
6328
  }
5127
6329
 
5128
6330
  .nav__link--active {
5129
- background-color: var(--hx-nav-link-active-bg, var(--hx-color-primary-600, #2563eb));
6331
+ background-color: var(--hx-nav-link-active-bg, var(--hx-color-primary-600, #1d4ed8));
5130
6332
  color: var(--hx-nav-link-active-color, var(--hx-color-neutral-0, #ffffff));
5131
6333
  }
5132
6334
 
@@ -5151,12 +6353,11 @@ export const helixGridItemStyles = css`
5151
6353
  list-style: none;
5152
6354
  margin: 0;
5153
6355
  padding: var(--hx-space-1, 0.25rem) 0;
5154
- background-color: var(--hx-nav-submenu-bg, var(--hx-color-neutral-800, #1f2937));
6356
+ background-color: var(--hx-nav-submenu-bg, var(--hx-color-neutral-800, #1e293b));
5155
6357
  border-radius: var(--hx-border-radius-md, 0.375rem);
5156
6358
  box-shadow: var(
5157
- --hx-shadow-md,
5158
- 0 4px 6px -1px rgb(0 0 0 / 0.1),
5159
- 0 2px 4px -2px rgb(0 0 0 / 0.1)
6359
+ --hx-nav-shadow,
6360
+ var(--hx-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1))
5160
6361
  );
5161
6362
  z-index: var(--hx-z-index-dropdown, 1000);
5162
6363
  }
@@ -5206,7 +6407,7 @@ export const helixGridItemStyles = css`
5206
6407
  :host([orientation='vertical']) .nav__submenu .nav__link {
5207
6408
  padding: var(--hx-space-1-5, 0.375rem) var(--hx-space-3, 0.75rem);
5208
6409
  font-size: var(--hx-font-size-xs, 0.75rem);
5209
- color: var(--hx-nav-link-color, var(--hx-color-neutral-300, #d1d5db));
6410
+ color: var(--hx-nav-link-color, var(--hx-color-neutral-300, #cbd5e1));
5210
6411
  }
5211
6412
 
5212
6413
  /* ─── Mobile Responsive ─── */
@@ -5616,7 +6817,7 @@ export const helixGridItemStyles = css`
5616
6817
 
5617
6818
  :host([disabled]) {
5618
6819
  pointer-events: none;
5619
- opacity: var(--hx-opacity-disabled, 0.4);
6820
+ opacity: var(--hx-opacity-disabled, 0.5);
5620
6821
  }
5621
6822
 
5622
6823
  /* ─── Trigger Button ─── */
@@ -5628,11 +6829,11 @@ export const helixGridItemStyles = css`
5628
6829
  border: var(--hx-border-width-thin, 1px) solid transparent;
5629
6830
  border-radius: var(--hx-border-radius-md, 0.375rem);
5630
6831
  background-color: transparent;
5631
- color: var(--hx-overflow-menu-button-color, var(--hx-color-neutral-600, #4b5563));
6832
+ color: var(--hx-overflow-menu-button-color, var(--hx-color-neutral-600, #475569));
5632
6833
  cursor: pointer;
5633
6834
  transition:
5634
- background-color var(--hx-transition-fast, 0.15s ease),
5635
- color var(--hx-transition-fast, 0.15s ease);
6835
+ background-color var(--hx-transition-fast, 150ms ease),
6836
+ color var(--hx-transition-fast, 150ms ease);
5636
6837
  flex-shrink: 0;
5637
6838
  padding: 0;
5638
6839
  line-height: 1;
@@ -5648,11 +6849,11 @@ export const helixGridItemStyles = css`
5648
6849
  }
5649
6850
 
5650
6851
  .trigger:hover:not([disabled]) {
5651
- background-color: var(--hx-color-neutral-100, #f3f4f6);
6852
+ background-color: var(--hx-color-neutral-100, #f1f5f9);
5652
6853
  }
5653
6854
 
5654
6855
  .trigger--open {
5655
- background-color: var(--hx-color-neutral-100, #f3f4f6);
6856
+ background-color: var(--hx-color-neutral-100, #f1f5f9);
5656
6857
  }
5657
6858
 
5658
6859
  /* ─── Size Variants ─── */
@@ -5685,8 +6886,8 @@ export const helixGridItemStyles = css`
5685
6886
  position: fixed;
5686
6887
  z-index: var(--hx-overflow-menu-panel-z-index, 1000);
5687
6888
  min-width: var(--hx-overflow-menu-panel-min-width, 160px);
5688
- background: var(--hx-overflow-menu-panel-bg, var(--hx-color-neutral-0, #fff));
5689
- border: var(--hx-overflow-menu-panel-border, 1px solid var(--hx-color-neutral-200, #e5e7eb));
6889
+ background: var(--hx-overflow-menu-panel-bg, var(--hx-color-neutral-0, #ffffff));
6890
+ border: var(--hx-overflow-menu-panel-border, 1px solid var(--hx-color-neutral-200, #e2e8f0));
5690
6891
  border-radius: var(
5691
6892
  --hx-overflow-menu-panel-border-radius,
5692
6893
  var(--hx-border-radius-md, 0.375rem)
@@ -5711,7 +6912,7 @@ export const helixGridItemStyles = css`
5711
6912
  border: none;
5712
6913
  text-align: start;
5713
6914
  font-size: var(--hx-font-size-sm, 0.875rem);
5714
- color: var(--hx-color-neutral-900, #111827);
6915
+ color: var(--hx-color-neutral-900, #0f172a);
5715
6916
  cursor: pointer;
5716
6917
  white-space: nowrap;
5717
6918
  box-sizing: border-box;
@@ -5720,7 +6921,7 @@ export const helixGridItemStyles = css`
5720
6921
  ::slotted([role='menuitem']:hover),
5721
6922
  ::slotted([role='menuitemcheckbox']:hover),
5722
6923
  ::slotted([role='menuitemradio']:hover) {
5723
- background-color: var(--hx-color-neutral-50, #f9fafb);
6924
+ background-color: var(--hx-color-neutral-50, #f8fafc);
5724
6925
  }
5725
6926
 
5726
6927
  ::slotted([role='menuitem']:focus-visible),
@@ -5775,7 +6976,7 @@ export const helixGridItemStyles = css`
5775
6976
  /* ── hx-pagination ── */
5776
6977
  :host {
5777
6978
  display: block;
5778
- font-family: var(--hx-font-family-sans, sans-serif);
6979
+ font-family: var(--hx-pagination-font-family, var(--hx-font-family-sans, sans-serif));
5779
6980
  }
5780
6981
 
5781
6982
  .pagination-root {
@@ -5808,14 +7009,14 @@ export const helixGridItemStyles = css`
5808
7009
  display: inline-flex;
5809
7010
  align-items: center;
5810
7011
  justify-content: center;
5811
- min-width: var(--hx-pagination-button-size, 2.25rem);
5812
- height: var(--hx-pagination-button-size, 2.25rem);
7012
+ min-width: var(--hx-pagination-button-size, var(--hx-touch-target-min, 2.75rem));
7013
+ min-height: var(--hx-pagination-button-size, var(--hx-touch-target-min, 2.75rem));
5813
7014
  padding: 0 var(--hx-space-2, 0.5rem);
5814
7015
  border: var(--hx-border-width-thin, 1px) solid
5815
- var(--hx-pagination-border-color, var(--hx-color-neutral-300, #d1d5db));
7016
+ var(--hx-pagination-border-color, var(--hx-color-neutral-300, #cbd5e1));
5816
7017
  border-radius: var(--hx-pagination-border-radius, var(--hx-border-radius-md, 0.375rem));
5817
7018
  background: var(--hx-pagination-bg, var(--hx-color-neutral-0, #ffffff));
5818
- color: var(--hx-pagination-color, var(--hx-color-neutral-900, #111827));
7019
+ color: var(--hx-pagination-color, var(--hx-color-neutral-900, #0f172a));
5819
7020
  font-size: var(--hx-font-size-sm, 0.875rem);
5820
7021
  font-family: inherit;
5821
7022
  cursor: pointer;
@@ -5828,7 +7029,7 @@ export const helixGridItemStyles = css`
5828
7029
  }
5829
7030
 
5830
7031
  .button:hover:not(:disabled) {
5831
- background: var(--hx-pagination-hover-bg, var(--hx-color-neutral-100, #f3f4f6));
7032
+ background: var(--hx-pagination-hover-bg, var(--hx-color-neutral-100, #f1f5f9));
5832
7033
  border-color: var(--hx-pagination-hover-border-color, var(--hx-color-primary-500, #2563eb));
5833
7034
  }
5834
7035
 
@@ -5859,9 +7060,9 @@ export const helixGridItemStyles = css`
5859
7060
  display: inline-flex;
5860
7061
  align-items: center;
5861
7062
  justify-content: center;
5862
- min-width: var(--hx-pagination-button-size, 2.25rem);
5863
- height: var(--hx-pagination-button-size, 2.25rem);
5864
- color: var(--hx-pagination-ellipsis-color, var(--hx-color-neutral-500, #6b7280));
7063
+ min-width: var(--hx-pagination-button-size, var(--hx-touch-target-min, 2.75rem));
7064
+ min-height: var(--hx-pagination-button-size, var(--hx-touch-target-min, 2.75rem));
7065
+ color: var(--hx-pagination-ellipsis-color, var(--hx-color-neutral-500, #64748b));
5865
7066
  font-size: var(--hx-font-size-sm, 0.875rem);
5866
7067
  user-select: none;
5867
7068
  }
@@ -5882,18 +7083,18 @@ export const helixGridItemStyles = css`
5882
7083
  align-items: center;
5883
7084
  gap: var(--hx-space-2, 0.5rem);
5884
7085
  font-size: var(--hx-font-size-sm, 0.875rem);
5885
- color: var(--hx-color-neutral-500, #6b7280);
7086
+ color: var(--hx-color-neutral-500, #64748b);
5886
7087
  white-space: nowrap;
5887
7088
  }
5888
7089
 
5889
7090
  .page-size-select {
5890
- height: var(--hx-pagination-button-size, 2.25rem);
7091
+ min-height: var(--hx-pagination-button-size, var(--hx-touch-target-min, 2.75rem));
5891
7092
  padding: 0 var(--hx-space-2, 0.5rem);
5892
7093
  border: var(--hx-border-width-thin, 1px) solid
5893
- var(--hx-pagination-border-color, var(--hx-color-neutral-300, #d1d5db));
7094
+ var(--hx-pagination-border-color, var(--hx-color-neutral-300, #cbd5e1));
5894
7095
  border-radius: var(--hx-pagination-border-radius, var(--hx-border-radius-md, 0.375rem));
5895
7096
  background: var(--hx-pagination-bg, var(--hx-color-neutral-0, #ffffff));
5896
- color: var(--hx-pagination-color, var(--hx-color-neutral-900, #111827));
7097
+ color: var(--hx-pagination-color, var(--hx-color-neutral-900, #0f172a));
5897
7098
  font-size: var(--hx-font-size-sm, 0.875rem);
5898
7099
  font-family: inherit;
5899
7100
  cursor: pointer;
@@ -5971,20 +7172,20 @@ export const helixGridItemStyles = css`
5971
7172
  width: 100%;
5972
7173
 
5973
7174
  /* ─── Private token vars (3-tier cascade) ─── */
5974
- --_bg: var(--hx-patient-banner-bg, var(--hx-color-neutral-50, #f9fafb));
5975
- --_border-color: var(--hx-patient-banner-border-color, var(--hx-color-neutral-200, #e5e7eb));
7175
+ --_bg: var(--hx-patient-banner-bg, var(--hx-color-neutral-50, #f8fafc));
7176
+ --_border-color: var(--hx-patient-banner-border-color, var(--hx-color-neutral-200, #e2e8f0));
5976
7177
  --_padding: var(
5977
7178
  --hx-patient-banner-padding,
5978
7179
  var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem)
5979
7180
  );
5980
7181
  --_gap: var(--hx-patient-banner-gap, var(--hx-space-4, 1rem));
5981
7182
  --_font-family: var(--hx-patient-banner-font-family, var(--hx-font-family-sans, sans-serif));
5982
- --_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-500, #6b7280));
7183
+ --_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-500, #64748b));
5983
7184
  --_label-font-size: var(--hx-patient-banner-label-font-size, var(--hx-font-size-xs, 0.75rem));
5984
- --_value-color: var(--hx-patient-banner-value-color, var(--hx-color-neutral-900, #111827));
7185
+ --_value-color: var(--hx-patient-banner-value-color, var(--hx-color-neutral-900, #0f172a));
5985
7186
  --_value-font-size: var(--hx-patient-banner-value-font-size, var(--hx-font-size-sm, 0.875rem));
5986
7187
  --_photo-size: var(--hx-patient-banner-photo-size, var(--hx-space-10, 2.5rem));
5987
- --_photo-bg: var(--hx-patient-banner-photo-bg, var(--hx-color-neutral-200, #e5e7eb));
7188
+ --_photo-bg: var(--hx-patient-banner-photo-bg, var(--hx-color-neutral-200, #e2e8f0));
5988
7189
  }
5989
7190
 
5990
7191
  * {
@@ -6011,9 +7212,9 @@ export const helixGridItemStyles = css`
6011
7212
  flex-shrink: 0;
6012
7213
  width: var(--_photo-size);
6013
7214
  height: var(--_photo-size);
6014
- /* Minimum 44x44px touch target for interactive photo content. */
6015
- min-width: 44px;
6016
- min-height: 44px;
7215
+ /* Minimum touch target for interactive photo content (WCAG 2.5.8). */
7216
+ min-width: var(--hx-touch-target-size, 44px);
7217
+ min-height: var(--hx-touch-target-size, 44px);
6017
7218
  border-radius: var(--hx-border-radius-full, 9999px);
6018
7219
  overflow: hidden;
6019
7220
  display: flex;
@@ -6066,7 +7267,7 @@ export const helixGridItemStyles = css`
6066
7267
  border-bottom-color: var(--hx-color-error-400, #f87171);
6067
7268
  background-color: var(--hx-color-error-50, #fef2f2);
6068
7269
  /* Darken label color to maintain 4.5:1 contrast on error-50 background. */
6069
- --_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-700, #374151));
7270
+ --_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-700, #334155));
6070
7271
  }
6071
7272
 
6072
7273
  :host([aria-invalid='true']) .banner::before {
@@ -6077,7 +7278,7 @@ export const helixGridItemStyles = css`
6077
7278
  top: 0;
6078
7279
  bottom: 0;
6079
7280
  width: var(--hx-border-width-thick, 4px);
6080
- background-color: var(--hx-color-error-500, #ef4444);
7281
+ background-color: var(--hx-color-error-500, #dc2626);
6081
7282
  border-radius: 0;
6082
7283
  }
6083
7284
 
@@ -6143,12 +7344,12 @@ export const helixGridItemStyles = css`
6143
7344
  .phi-field__value--masked {
6144
7345
  user-select: none;
6145
7346
  -webkit-user-select: none;
6146
- color: var(--hx-phi-field-masked-color, var(--hx-color-neutral-500, #6b7280));
7347
+ color: var(--hx-phi-field-masked-color, var(--hx-color-neutral-500, #64748b));
6147
7348
  letter-spacing: var(--hx-phi-field-letter-spacing, 0.1em);
6148
7349
  }
6149
7350
 
6150
7351
  .phi-field__value--revealed {
6151
- color: var(--hx-phi-field-value-color, var(--hx-color-neutral-900, #111827));
7352
+ color: var(--hx-phi-field-value-color, var(--hx-color-neutral-900, #0f172a));
6152
7353
  }
6153
7354
 
6154
7355
  /* ─── Screen Reader Status ─── */
@@ -6170,9 +7371,12 @@ export const helixGridItemStyles = css`
6170
7371
  .phi-field__toggle {
6171
7372
  display: inline-flex;
6172
7373
  align-items: center;
7374
+ justify-content: center;
6173
7375
  background: none;
6174
7376
  border: none;
6175
7377
  padding: var(--hx-space-1, 0.25rem);
7378
+ min-width: var(--hx-touch-target-min, 2.75rem);
7379
+ min-height: var(--hx-touch-target-min, 2.75rem);
6176
7380
  color: var(--hx-phi-field-toggle-color, var(--hx-color-primary-500, #2563eb));
6177
7381
  cursor: pointer;
6178
7382
  line-height: 1;
@@ -6252,11 +7456,11 @@ export const helixGridItemStyles = css`
6252
7456
  max-width: var(--hx-popover-max-width, 320px);
6253
7457
  padding: var(--hx-popover-padding, var(--hx-space-3, 0.75rem));
6254
7458
  background: var(--hx-popover-bg, var(--hx-color-neutral-0, #ffffff));
6255
- color: var(--hx-popover-color, var(--hx-color-neutral-900, #111827));
6256
- font-family: var(--hx-font-family-sans, sans-serif);
7459
+ color: var(--hx-popover-color, var(--hx-color-neutral-900, #0f172a));
7460
+ font-family: var(--hx-popover-font-family, var(--hx-font-family-sans, sans-serif));
6257
7461
  font-size: var(--hx-popover-font-size, var(--hx-font-size-sm, 0.875rem));
6258
7462
  line-height: var(--hx-line-height-normal, 1.5);
6259
- border: 1px solid var(--hx-popover-border-color, var(--hx-color-neutral-200, #e5e7eb));
7463
+ border: 1px solid var(--hx-popover-border-color, var(--hx-color-neutral-200, #e2e8f0));
6260
7464
  border-radius: var(--hx-popover-border-radius, var(--hx-border-radius-md, 0.375rem));
6261
7465
  box-shadow: var(
6262
7466
  --hx-popover-shadow,
@@ -6286,7 +7490,7 @@ export const helixGridItemStyles = css`
6286
7490
  width: var(--hx-popover-arrow-size, 10px);
6287
7491
  height: var(--hx-popover-arrow-size, 10px);
6288
7492
  background: var(--hx-popover-bg, var(--hx-color-neutral-0, #ffffff));
6289
- border: 1px solid var(--hx-popover-border-color, var(--hx-color-neutral-200, #e5e7eb));
7493
+ border: 1px solid var(--hx-popover-border-color, var(--hx-color-neutral-200, #e2e8f0));
6290
7494
  transform: rotate(45deg);
6291
7495
  pointer-events: none;
6292
7496
  }
@@ -6467,7 +7671,7 @@ export const helixGridItemStyles = css`
6467
7671
  .progress-bar--indeterminate .progress-bar__fill {
6468
7672
  animation: none;
6469
7673
  transform: scaleX(1);
6470
- opacity: var(--hx-opacity-disabled, 0.5); /* reduced from animation; no exact token for 0.4 */
7674
+ opacity: var(--hx-opacity-disabled, 0.5);
6471
7675
  }
6472
7676
  }
6473
7677
 
@@ -6621,11 +7825,33 @@ export const helixGridItemStyles = css`
6621
7825
  justify-content: center;
6622
7826
  inset: 0;
6623
7827
  font-size: var(--hx-font-size-xs, 0.75rem);
6624
- font-family: var(--hx-font-family-sans, sans-serif);
7828
+ font-family: var(--hx-progress-ring-font-family, var(--hx-font-family-sans, sans-serif));
6625
7829
  font-weight: var(--hx-font-weight-semibold, 600);
6626
7830
  color: var(--hx-progress-ring-label-color, var(--hx-color-neutral-900, #0f172a));
6627
7831
  pointer-events: none;
6628
7832
  }
7833
+
7834
+ /* ─── High Contrast Mode (forced-colors) ─── */
7835
+
7836
+ @media (forced-colors: active) {
7837
+ /*
7838
+ * SVG stroke colors are suppressed in forced-colors mode. Use system color
7839
+ * keywords so progress state remains distinguishable.
7840
+ */
7841
+ .progress-ring__track {
7842
+ stroke: GrayText;
7843
+ }
7844
+
7845
+ .progress-ring__indicator {
7846
+ stroke: Highlight;
7847
+ }
7848
+
7849
+ :host([variant='success']) .progress-ring__indicator,
7850
+ :host([variant='warning']) .progress-ring__indicator,
7851
+ :host([variant='danger']) .progress-ring__indicator {
7852
+ stroke: Highlight;
7853
+ }
7854
+ }
6629
7855
  /* ── hx-radio-group ── */
6630
7856
  :host {
6631
7857
  display: block;
@@ -6649,7 +7875,7 @@ export const helixGridItemStyles = css`
6649
7875
  display: flex;
6650
7876
  flex-direction: column;
6651
7877
  gap: var(--hx-space-2, 0.5rem);
6652
- font-family: var(--hx-font-family-sans, sans-serif);
7878
+ font-family: var(--hx-radio-group-font-family, var(--hx-font-family-sans, sans-serif));
6653
7879
  }
6654
7880
 
6655
7881
  /* ─── Legend ─── */
@@ -6660,7 +7886,7 @@ export const helixGridItemStyles = css`
6660
7886
  gap: var(--hx-space-1, 0.25rem);
6661
7887
  font-size: var(--hx-font-size-sm, 0.875rem);
6662
7888
  font-weight: var(--hx-font-weight-medium, 500);
6663
- color: var(--hx-radio-group-label-color, var(--hx-color-neutral-700, #343a40));
7889
+ color: var(--hx-radio-group-label-color, var(--hx-color-neutral-700, #334155));
6664
7890
  line-height: var(--hx-line-height-normal, 1.5);
6665
7891
  padding: 0;
6666
7892
  margin-bottom: var(--hx-space-1, 0.25rem);
@@ -6694,7 +7920,7 @@ export const helixGridItemStyles = css`
6694
7920
 
6695
7921
  .fieldset__help-text {
6696
7922
  font-size: var(--hx-font-size-xs, 0.75rem);
6697
- color: var(--hx-radio-group-help-text-color, var(--hx-color-neutral-500, #6c757d));
7923
+ color: var(--hx-radio-group-help-text-color, var(--hx-color-neutral-500, #64748b));
6698
7924
  line-height: var(--hx-line-height-normal, 1.5);
6699
7925
  }
6700
7926
 
@@ -6770,16 +7996,18 @@ export const helixGridItemStyles = css`
6770
7996
  justify-content: center;
6771
7997
  position: relative;
6772
7998
  cursor: pointer;
6773
- color: var(--hx-rating-empty-color, var(--hx-color-neutral-300, #d1d5db));
7999
+ color: var(--hx-rating-empty-color, var(--hx-color-neutral-300, #cbd5e1));
6774
8000
  line-height: 1;
6775
- transition: transform var(--hx-transition-fast, 0.15s ease);
8001
+ min-width: var(--hx-touch-target-min, 2.75rem);
8002
+ min-height: var(--hx-touch-target-min, 2.75rem);
8003
+ transition: transform var(--hx-transition-fast, 150ms ease);
6776
8004
  }
6777
8005
 
6778
8006
  .symbol:focus-visible {
6779
8007
  outline: var(--hx-focus-ring-width, 2px) solid
6780
8008
  var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa));
6781
8009
  outline-offset: var(--hx-focus-ring-offset, 2px);
6782
- border-radius: var(--hx-border-radius-sm, 0.125rem);
8010
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
6783
8011
  }
6784
8012
 
6785
8013
  .symbol--full,
@@ -6819,7 +8047,7 @@ export const helixGridItemStyles = css`
6819
8047
  position: absolute;
6820
8048
  left: 0;
6821
8049
  top: 0;
6822
- color: var(--hx-rating-empty-color, var(--hx-color-neutral-300, #d1d5db));
8050
+ color: var(--hx-rating-empty-color, var(--hx-color-neutral-300, #cbd5e1));
6823
8051
  /* Clip to right 50% for the empty half */
6824
8052
  clip-path: inset(0 0 0 50%);
6825
8053
  }
@@ -6877,14 +8105,14 @@ export const helixGridItemStyles = css`
6877
8105
 
6878
8106
  /* Background & foreground */
6879
8107
  --_bg: var(--hx-select-bg, var(--hx-color-neutral-0, #ffffff));
6880
- --_color: var(--hx-select-color, var(--hx-color-neutral-800, #212529));
6881
- --_placeholder-color: var(--hx-select-placeholder-color, var(--hx-color-neutral-400, #adb5bd));
8108
+ --_color: var(--hx-select-color, var(--hx-color-neutral-800, #1e293b));
8109
+ --_placeholder-color: var(--hx-select-placeholder-color, var(--hx-color-neutral-400, #94a3b8));
6882
8110
 
6883
8111
  /* Label */
6884
- --_label-color: var(--hx-select-label-color, var(--hx-color-neutral-700, #343a40));
8112
+ --_label-color: var(--hx-select-label-color, var(--hx-color-neutral-700, #334155));
6885
8113
 
6886
8114
  /* Border */
6887
- --_border-color: var(--hx-select-border-color, var(--hx-color-neutral-300, #ced4da));
8115
+ --_border-color: var(--hx-select-border-color, var(--hx-color-neutral-300, #cbd5e1));
6888
8116
  --_border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
6889
8117
 
6890
8118
  /* Focus ring */
@@ -6894,10 +8122,10 @@ export const helixGridItemStyles = css`
6894
8122
  );
6895
8123
 
6896
8124
  /* Error */
6897
- --_error-color: var(--hx-select-error-color, var(--hx-color-error-500, #dc3545));
8125
+ --_error-color: var(--hx-select-error-color, var(--hx-color-error-500, #dc2626));
6898
8126
 
6899
8127
  /* Chevron */
6900
- --_chevron-color: var(--hx-select-chevron-color, var(--hx-color-neutral-500, #6c757d));
8128
+ --_chevron-color: var(--hx-select-chevron-color, var(--hx-color-neutral-500, #64748b));
6901
8129
  --_chevron-size: var(--hx-select-chevron-size, 0.5rem);
6902
8130
 
6903
8131
  /* Listbox */
@@ -7149,7 +8377,7 @@ export const helixGridItemStyles = css`
7149
8377
  }
7150
8378
 
7151
8379
  .field__help-text {
7152
- color: var(--hx-color-neutral-500, #6c757d);
8380
+ color: var(--hx-color-neutral-500, #64748b);
7153
8381
  }
7154
8382
 
7155
8383
  .field__error {
@@ -7414,6 +8642,11 @@ export const helixGridItemStyles = css`
7414
8642
  color: ButtonText;
7415
8643
  border: 1px solid ButtonText;
7416
8644
  }
8645
+
8646
+ .side-nav__toggle:focus-visible {
8647
+ outline: 3px solid Highlight;
8648
+ outline-offset: 2px;
8649
+ }
7417
8650
  }
7418
8651
  /* ── hx-skeleton ── */
7419
8652
  :host {
@@ -7529,7 +8762,7 @@ export const helixGridItemStyles = css`
7529
8762
  display: flex;
7530
8763
  flex-direction: column;
7531
8764
  gap: var(--hx-space-1, 0.25rem);
7532
- font-family: var(--hx-font-family-sans, sans-serif);
8765
+ font-family: var(--hx-slider-font-family, var(--hx-font-family-sans, sans-serif));
7533
8766
  }
7534
8767
 
7535
8768
  /* ─── Label Row ─── */
@@ -7544,14 +8777,14 @@ export const helixGridItemStyles = css`
7544
8777
  .slider__label {
7545
8778
  font-size: var(--hx-font-size-sm, 0.875rem);
7546
8779
  font-weight: var(--hx-font-weight-medium, 500);
7547
- color: var(--hx-slider-label-color, var(--hx-color-neutral-700, #343a40));
8780
+ color: var(--hx-slider-label-color, var(--hx-color-neutral-700, #334155));
7548
8781
  line-height: var(--hx-line-height-normal, 1.5);
7549
8782
  }
7550
8783
 
7551
8784
  .slider__value-display {
7552
8785
  font-size: var(--hx-font-size-sm, 0.875rem);
7553
8786
  font-weight: var(--hx-font-weight-medium, 500);
7554
- color: var(--hx-slider-value-color, var(--hx-color-neutral-600, #6c757d));
8787
+ color: var(--hx-slider-value-color, var(--hx-color-neutral-600, #475569));
7555
8788
  line-height: var(--hx-line-height-normal, 1.5);
7556
8789
  font-variant-numeric: tabular-nums;
7557
8790
  min-width: var(--hx-size-8, 2rem);
@@ -7569,7 +8802,7 @@ export const helixGridItemStyles = css`
7569
8802
  position: relative;
7570
8803
  width: 100%;
7571
8804
  border-radius: var(--hx-border-radius-full, 9999px);
7572
- background-color: var(--hx-slider-track-bg, var(--hx-color-neutral-200, #e9ecef));
8805
+ background-color: var(--hx-slider-track-bg, var(--hx-color-neutral-200, #e2e8f0));
7573
8806
  overflow: visible;
7574
8807
  }
7575
8808
 
@@ -7647,8 +8880,13 @@ export const helixGridItemStyles = css`
7647
8880
  background: transparent;
7648
8881
  border: none;
7649
8882
  outline: none;
7650
- /* Expand the hit area so the thumb is easy to grab */
7651
- padding-block: var(--hx-slider-input-padding-block, 0.75rem);
8883
+ /* Expand the hit area so the thumb meets WCAG 2.5.8 touch target (44px).
8884
+ The input's total height = track height + 2 * padding-block. With 0.75rem
8885
+ (~12px) padding on each side and a track of ~6px, the total target area is
8886
+ ~30px. We increase to 1rem (~16px) per side for a ~38px minimum, supplemented
8887
+ by the visual thumb size. */
8888
+ padding-block: var(--hx-slider-input-padding-block, 1rem);
8889
+ min-height: var(--hx-touch-target-min, 2.75rem);
7652
8890
  }
7653
8891
 
7654
8892
  /* In forced-color mode, restore native outline so the input remains focusable */
@@ -7764,7 +9002,7 @@ export const helixGridItemStyles = css`
7764
9002
  top: 0;
7765
9003
  width: var(--hx-border-width-thin, 1px);
7766
9004
  height: 100%;
7767
- background-color: var(--hx-slider-tick-color, var(--hx-color-neutral-400, #adb5bd));
9005
+ background-color: var(--hx-slider-tick-color, var(--hx-color-neutral-400, #94a3b8));
7768
9006
  transform: translateX(-50%);
7769
9007
  }
7770
9008
 
@@ -7774,7 +9012,7 @@ export const helixGridItemStyles = css`
7774
9012
  display: flex;
7775
9013
  justify-content: space-between;
7776
9014
  font-size: var(--hx-font-size-xs, 0.75rem);
7777
- color: var(--hx-slider-range-label-color, var(--hx-color-neutral-500, #6c757d));
9015
+ color: var(--hx-slider-range-label-color, var(--hx-color-neutral-500, #64748b));
7778
9016
  line-height: var(--hx-line-height-normal, 1.5);
7779
9017
  margin-top: var(--hx-space-0-5, 0.125rem);
7780
9018
  }
@@ -7783,18 +9021,18 @@ export const helixGridItemStyles = css`
7783
9021
 
7784
9022
  .slider__help-text {
7785
9023
  font-size: var(--hx-font-size-xs, 0.75rem);
7786
- color: var(--hx-slider-help-text-color, var(--hx-color-neutral-500, #6c757d));
9024
+ color: var(--hx-slider-help-text-color, var(--hx-color-neutral-500, #64748b));
7787
9025
  line-height: var(--hx-line-height-normal, 1.5);
7788
9026
  }
7789
9027
 
7790
9028
  /* ─── Disabled state ─── */
7791
9029
 
7792
9030
  .slider--disabled .slider__fill {
7793
- background-color: var(--hx-color-neutral-400, #adb5bd);
9031
+ background-color: var(--hx-color-neutral-400, #94a3b8);
7794
9032
  }
7795
9033
 
7796
9034
  .slider--disabled .slider__thumb-visual {
7797
- border-color: var(--hx-color-neutral-400, #adb5bd);
9035
+ border-color: var(--hx-color-neutral-400, #94a3b8);
7798
9036
  }
7799
9037
  /* ── hx-spinner ── */
7800
9038
  :host {
@@ -8004,7 +9242,7 @@ export const helixGridItemStyles = css`
8004
9242
  flex-shrink: 0;
8005
9243
  border: var(--hx-border-width-thin, 1px) solid var(--hx-split-button-border-color, transparent);
8006
9244
  border-inline-start: var(--hx-border-width-thin, 1px) solid
8007
- var(--hx-split-button-divider-color, var(--hx-color-primary-400, #3b82f6));
9245
+ var(--hx-split-button-divider-color, var(--hx-color-primary-400, #60a5fa));
8008
9246
  border-radius: 0 var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem))
8009
9247
  var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem)) 0;
8010
9248
  background-color: var(--hx-split-button-bg, var(--hx-color-primary-500, #2563eb));
@@ -8098,7 +9336,7 @@ export const helixGridItemStyles = css`
8098
9336
  --hx-split-button-bg: var(--hx-color-primary-500, #2563eb);
8099
9337
  --hx-split-button-color: var(--hx-color-neutral-0, #ffffff);
8100
9338
  --hx-split-button-border-color: transparent;
8101
- --hx-split-button-divider-color: var(--hx-color-primary-400, #3b82f6);
9339
+ --hx-split-button-divider-color: var(--hx-color-primary-400, #60a5fa);
8102
9340
  }
8103
9341
 
8104
9342
  /* ─── Variant: secondary ─── */
@@ -8554,6 +9792,16 @@ export const helixGridItemStyles = css`
8554
9792
  :host([gap='xl']) [part='base'] {
8555
9793
  gap: var(--hx-space-8, 2rem);
8556
9794
  }
9795
+
9796
+ /* ─── High Contrast Mode (forced-colors) ─── */
9797
+
9798
+ /* hx-stack is a layout wrapper with no state communicated via color.
9799
+ forced-color-adjust: auto (default) is sufficient. */
9800
+ @media (forced-colors: active) {
9801
+ :host {
9802
+ forced-color-adjust: auto;
9803
+ }
9804
+ }
8557
9805
  /* ── hx-stat ── */
8558
9806
  :host {
8559
9807
  display: block;
@@ -8564,7 +9812,7 @@ export const helixGridItemStyles = css`
8564
9812
  flex-direction: column;
8565
9813
  gap: var(--hx-stat-gap, var(--hx-space-1, 0.25rem));
8566
9814
  font-family: var(--hx-stat-font-family, var(--hx-font-family-sans, sans-serif));
8567
- color: var(--hx-stat-color, var(--hx-color-neutral-800, #212529));
9815
+ color: var(--hx-stat-color, var(--hx-color-neutral-800, #1e293b));
8568
9816
  }
8569
9817
 
8570
9818
  /* ─── Size Variants ─── */
@@ -8608,13 +9856,13 @@ export const helixGridItemStyles = css`
8608
9856
  }
8609
9857
 
8610
9858
  .stat__value {
8611
- color: var(--hx-stat-value-color, var(--hx-color-neutral-900, #111827));
9859
+ color: var(--hx-stat-value-color, var(--hx-color-neutral-900, #0f172a));
8612
9860
  }
8613
9861
 
8614
9862
  /* ─── Label ─── */
8615
9863
 
8616
9864
  .stat__label {
8617
- color: var(--hx-stat-label-color, var(--hx-color-neutral-500, #6c757d));
9865
+ color: var(--hx-stat-label-color, var(--hx-color-neutral-500, #64748b));
8618
9866
  font-weight: var(--hx-font-weight-normal, 400);
8619
9867
  }
8620
9868
 
@@ -8640,12 +9888,12 @@ export const helixGridItemStyles = css`
8640
9888
  }
8641
9889
 
8642
9890
  .stat__trend--up {
8643
- color: var(--hx-stat-trend-up-color, var(--hx-color-success-700, #15803d));
9891
+ color: var(--hx-stat-trend-up-color, var(--hx-color-success-700, #166534));
8644
9892
  background-color: var(--hx-stat-trend-up-bg, var(--hx-color-success-50, #f0fdf4));
8645
9893
  }
8646
9894
 
8647
9895
  .stat__trend--down {
8648
- color: var(--hx-stat-trend-down-color, var(--hx-color-error-700, #b91c1c));
9896
+ color: var(--hx-stat-trend-down-color, var(--hx-color-error-700, #991b1b));
8649
9897
  background-color: var(--hx-stat-trend-down-bg, var(--hx-color-error-50, #fef2f2));
8650
9898
  }
8651
9899
 
@@ -8715,7 +9963,7 @@ export const helixGridItemStyles = css`
8715
9963
  gap: var(--hx-space-2, 0.5rem);
8716
9964
  position: relative;
8717
9965
  flex-shrink: 0;
8718
- --_dot-color: var(--hx-status-indicator-color-default, var(--hx-color-neutral-300, #ced4da));
9966
+ --_dot-color: var(--hx-status-indicator-color-default, var(--hx-color-neutral-300, #cbd5e1));
8719
9967
  /* Default size (md) — always defined so .indicator never collapses to 0x0 */
8720
9968
  --_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));
8721
9969
  }
@@ -8779,7 +10027,7 @@ export const helixGridItemStyles = css`
8779
10027
  --hx-status-indicator-label-font-size,
8780
10028
  var(--hx-font-size-sm, var(--hx-text-sm, 0.875rem))
8781
10029
  );
8782
- color: var(--hx-status-indicator-label-color, var(--hx-color-neutral-700, #374151));
10030
+ color: var(--hx-status-indicator-label-color, var(--hx-color-neutral-700, #334155));
8783
10031
  line-height: 1;
8784
10032
  white-space: nowrap;
8785
10033
  }
@@ -8898,6 +10146,18 @@ export const helixGridItemStyles = css`
8898
10146
  --hx-steps-label-font-size: var(--hx-font-size-md, 1rem);
8899
10147
  --hx-steps-description-font-size: var(--hx-font-size-sm, 0.875rem);
8900
10148
  }
10149
+
10150
+ /* ─── High Contrast Mode (forced-colors) ─── */
10151
+
10152
+ /*
10153
+ * hx-steps is a layout container — forced-colors state is handled
10154
+ * by each hx-step child element's own forced-colors block.
10155
+ */
10156
+ @media (forced-colors: active) {
10157
+ :host {
10158
+ forced-color-adjust: auto;
10159
+ }
10160
+ }
8901
10161
  /* ── hx-structured-list ── */
8902
10162
  :host {
8903
10163
  display: block;
@@ -8963,12 +10223,12 @@ export const helixStructuredListRowStyles = css`
8963
10223
 
8964
10224
  .row__label {
8965
10225
  font-weight: var(--hx-font-weight-medium, 500);
8966
- color: var(--hx-structured-list-label-color, var(--hx-color-neutral-700, #374151));
10226
+ color: var(--hx-structured-list-label-color, var(--hx-color-neutral-700, #334155));
8967
10227
  font-size: var(--hx-font-size-sm, 0.875rem);
8968
10228
  }
8969
10229
 
8970
10230
  .row__value {
8971
- color: var(--hx-structured-list-value-color, var(--hx-color-neutral-900, #111827));
10231
+ color: var(--hx-structured-list-value-color, var(--hx-color-neutral-900, #0f172a));
8972
10232
  font-size: var(--hx-font-size-sm, 0.875rem);
8973
10233
  }
8974
10234
 
@@ -8993,6 +10253,17 @@ export const helixStructuredListRowStyles = css`
8993
10253
  :host {
8994
10254
  display: contents;
8995
10255
  }
10256
+
10257
+ /* ─── High Contrast Mode (forced-colors) ─── */
10258
+
10259
+ /* hx-style-scope is a transparent layout wrapper (display: contents).
10260
+ It has no visual output of its own. forced-color-adjust: auto (default)
10261
+ is sufficient. */
10262
+ @media (forced-colors: active) {
10263
+ :host {
10264
+ forced-color-adjust: auto;
10265
+ }
10266
+ }
8996
10267
  /* ── hx-switch ── */
8997
10268
  :host {
8998
10269
  display: block;
@@ -9013,7 +10284,7 @@ export const helixStructuredListRowStyles = css`
9013
10284
  display: flex;
9014
10285
  flex-direction: column;
9015
10286
  gap: var(--hx-space-1, 0.25rem);
9016
- font-family: var(--hx-font-family-sans, sans-serif);
10287
+ font-family: var(--hx-switch-font-family, var(--hx-font-family-sans, sans-serif));
9017
10288
  }
9018
10289
 
9019
10290
  /* WCAG 2.5.5 (healthcare mandate): minimum 44px touch target height.
@@ -9036,7 +10307,7 @@ export const helixStructuredListRowStyles = css`
9036
10307
  border: none;
9037
10308
  padding: 0;
9038
10309
  border-radius: var(--hx-border-radius-full, 9999px);
9039
- background-color: var(--hx-switch-track-bg, var(--hx-color-neutral-300, #ced4da));
10310
+ background-color: var(--hx-switch-track-bg, var(--hx-color-neutral-300, #cbd5e1));
9040
10311
  cursor: pointer;
9041
10312
  transition: background-color var(--hx-transition-fast, 150ms ease);
9042
10313
  outline: none;
@@ -9132,7 +10403,7 @@ export const helixStructuredListRowStyles = css`
9132
10403
  .switch__label {
9133
10404
  font-size: var(--hx-font-size-sm, 0.875rem);
9134
10405
  font-weight: var(--hx-font-weight-medium, 500);
9135
- color: var(--hx-switch-label-color, var(--hx-color-neutral-700, #343a40));
10406
+ color: var(--hx-switch-label-color, var(--hx-color-neutral-700, #334155));
9136
10407
  line-height: var(--hx-line-height-normal, 1.5);
9137
10408
  cursor: pointer;
9138
10409
  user-select: none;
@@ -9148,7 +10419,7 @@ export const helixStructuredListRowStyles = css`
9148
10419
 
9149
10420
  .switch__help-text {
9150
10421
  font-size: var(--hx-font-size-xs, 0.75rem);
9151
- color: var(--hx-switch-help-text-color, var(--hx-color-neutral-500, #6c757d));
10422
+ color: var(--hx-switch-help-text-color, var(--hx-color-neutral-500, #64748b));
9152
10423
  line-height: var(--hx-line-height-normal, 1.5);
9153
10424
  }
9154
10425
 
@@ -9228,7 +10499,7 @@ export const helixStructuredListRowStyles = css`
9228
10499
  :host {
9229
10500
  display: block;
9230
10501
  overflow-x: auto;
9231
- font-family: var(--hx-font-family-sans, sans-serif);
10502
+ font-family: var(--hx-table-font-family, var(--hx-font-family-sans, sans-serif));
9232
10503
  font-size: var(--hx-font-size-sm, 0.875rem);
9233
10504
  }
9234
10505
 
@@ -9363,7 +10634,7 @@ export const helixTableSectionBaseStyles = css`
9363
10634
  /* ── hx-tabs ── */
9364
10635
  :host {
9365
10636
  display: block;
9366
- font-family: var(--hx-font-family-sans, sans-serif);
10637
+ font-family: var(--hx-tabs-font-family, var(--hx-font-family-sans, sans-serif));
9367
10638
  }
9368
10639
 
9369
10640
  * {
@@ -9390,7 +10661,7 @@ export const helixTableSectionBaseStyles = css`
9390
10661
  flex-wrap: nowrap;
9391
10662
  gap: 0;
9392
10663
  border-bottom: var(--hx-tabs-border-width, 1px) solid
9393
- var(--hx-tabs-border-color, var(--hx-color-neutral-200, #e9ecef));
10664
+ var(--hx-tabs-border-color, var(--hx-color-neutral-200, #e2e8f0));
9394
10665
  overflow-x: auto;
9395
10666
  scrollbar-width: none;
9396
10667
  }
@@ -9415,7 +10686,7 @@ export const helixTableSectionBaseStyles = css`
9415
10686
  flex-direction: column;
9416
10687
  border-bottom: none;
9417
10688
  border-inline-end: var(--hx-tabs-border-width, 1px) solid
9418
- var(--hx-tabs-border-color, var(--hx-color-neutral-200, #e9ecef));
10689
+ var(--hx-tabs-border-color, var(--hx-color-neutral-200, #e2e8f0));
9419
10690
  overflow-x: visible;
9420
10691
  overflow-y: auto;
9421
10692
  min-width: var(--hx-tabs-vertical-width, 12rem);
@@ -9464,15 +10735,15 @@ export const helixTableSectionBaseStyles = css`
9464
10735
  align-items: center;
9465
10736
  gap: var(--hx-space-1, 0.25rem);
9466
10737
  border-radius: var(--hx-tag-border-radius, var(--hx-border-radius-sm, 0.25rem));
9467
- background-color: var(--hx-tag-bg, var(--hx-color-neutral-100, #f3f4f6));
9468
- color: var(--hx-tag-color, var(--hx-color-neutral-700, #374151));
10738
+ background-color: var(--hx-tag-bg, var(--hx-color-neutral-100, #f1f5f9));
10739
+ color: var(--hx-tag-color, var(--hx-color-neutral-700, #334155));
9469
10740
  font-family: var(--hx-tag-font-family, var(--hx-font-family-sans, sans-serif));
9470
10741
  font-weight: var(--hx-tag-font-weight, var(--hx-font-weight-medium, 500));
9471
10742
  line-height: var(--hx-line-height-tight, 1.25);
9472
10743
  white-space: nowrap;
9473
10744
  vertical-align: middle;
9474
10745
  border: var(--hx-border-width-thin, 1px) solid
9475
- var(--hx-tag-border-color, var(--hx-color-neutral-200, #e5e7eb));
10746
+ var(--hx-tag-border-color, var(--hx-color-neutral-200, #e2e8f0));
9476
10747
  }
9477
10748
 
9478
10749
  /* ─── Size Variants ─── */
@@ -9498,32 +10769,32 @@ export const helixTableSectionBaseStyles = css`
9498
10769
  /* ─── Color Variants ─── */
9499
10770
 
9500
10771
  .tag--default {
9501
- --hx-tag-bg: var(--hx-color-neutral-100, #f3f4f6);
9502
- --hx-tag-color: var(--hx-color-neutral-700, #374151);
9503
- --hx-tag-border-color: var(--hx-color-neutral-200, #e5e7eb);
10772
+ --hx-tag-bg: var(--hx-color-neutral-100, #f1f5f9);
10773
+ --hx-tag-color: var(--hx-color-neutral-700, #334155);
10774
+ --hx-tag-border-color: var(--hx-color-neutral-200, #e2e8f0);
9504
10775
  }
9505
10776
 
9506
10777
  .tag--primary {
9507
10778
  --hx-tag-bg: var(--hx-color-primary-50, #eff6ff);
9508
- --hx-tag-color: var(--hx-color-primary-700, #1d4ed8);
10779
+ --hx-tag-color: var(--hx-color-primary-700, #1e40af);
9509
10780
  --hx-tag-border-color: var(--hx-color-primary-200, #bfdbfe);
9510
10781
  }
9511
10782
 
9512
10783
  .tag--success {
9513
10784
  --hx-tag-bg: var(--hx-color-success-50, #f0fdf4);
9514
- --hx-tag-color: var(--hx-color-success-700, #15803d);
10785
+ --hx-tag-color: var(--hx-color-success-700, #166534);
9515
10786
  --hx-tag-border-color: var(--hx-color-success-200, #bbf7d0);
9516
10787
  }
9517
10788
 
9518
10789
  .tag--warning {
9519
10790
  --hx-tag-bg: var(--hx-color-warning-50, #fffbeb);
9520
- --hx-tag-color: var(--hx-color-warning-700, #b45309);
10791
+ --hx-tag-color: var(--hx-color-warning-700, #92400e);
9521
10792
  --hx-tag-border-color: var(--hx-color-warning-200, #fde68a);
9522
10793
  }
9523
10794
 
9524
10795
  .tag--danger {
9525
10796
  --hx-tag-bg: var(--hx-color-error-50, #fef2f2);
9526
- --hx-tag-color: var(--hx-color-error-700, #b91c1c);
10797
+ --hx-tag-color: var(--hx-color-error-700, #991b1b);
9527
10798
  --hx-tag-border-color: var(--hx-color-error-200, #fecaca);
9528
10799
  }
9529
10800
 
@@ -9582,7 +10853,7 @@ export const helixTableSectionBaseStyles = css`
9582
10853
  cursor: pointer;
9583
10854
  color: inherit;
9584
10855
  opacity: var(--hx-opacity-75, 0.75);
9585
- border-radius: var(--hx-border-radius-sm, 0.125rem);
10856
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
9586
10857
  line-height: 0;
9587
10858
  }
9588
10859
 
@@ -9592,7 +10863,7 @@ export const helixTableSectionBaseStyles = css`
9592
10863
 
9593
10864
  .tag__remove-button:focus-visible {
9594
10865
  outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, currentColor);
9595
- outline-offset: var(--hx-focus-ring-offset, 1px);
10866
+ outline-offset: var(--hx-focus-ring-offset, 2px);
9596
10867
  }
9597
10868
 
9598
10869
  /* ─── Forced Colors (Windows High Contrast) ─── */
@@ -9615,7 +10886,7 @@ export const helixTableSectionBaseStyles = css`
9615
10886
 
9616
10887
  .text {
9617
10888
  display: inline;
9618
- font-family: var(--hx-font-family-sans, sans-serif);
10889
+ font-family: var(--hx-text-font-family, var(--hx-font-family-sans, sans-serif));
9619
10890
  font-size: var(--hx-text-font-size);
9620
10891
  font-weight: var(--hx-text-font-weight);
9621
10892
  line-height: var(--hx-text-line-height);
@@ -9681,7 +10952,7 @@ export const helixTableSectionBaseStyles = css`
9681
10952
  --hx-text-font-size: var(--hx-font-size-xs, 0.75rem);
9682
10953
  --hx-text-font-weight: var(--hx-font-weight-semibold, 600);
9683
10954
  --hx-text-line-height: var(--hx-line-height-tight, 1.25);
9684
- --hx-text-letter-spacing: var(--hx-letter-spacing-wide, 0.05em);
10955
+ --hx-text-letter-spacing: var(--hx-letter-spacing-wide, 0.025em);
9685
10956
  text-transform: uppercase;
9686
10957
  }
9687
10958
 
@@ -9704,15 +10975,15 @@ export const helixTableSectionBaseStyles = css`
9704
10975
  }
9705
10976
 
9706
10977
  .text--color-danger {
9707
- --hx-text-color: var(--hx-color-error-600, #dc2626);
10978
+ --hx-text-color: var(--hx-color-error-600, #b91c1c);
9708
10979
  }
9709
10980
 
9710
10981
  .text--color-success {
9711
- --hx-text-color: var(--hx-color-success-600, #16a34a);
10982
+ --hx-text-color: var(--hx-color-success-600, #15803d);
9712
10983
  }
9713
10984
 
9714
10985
  .text--color-warning {
9715
- --hx-text-color: var(--hx-color-warning-600, #d97706);
10986
+ --hx-text-color: var(--hx-color-warning-600, #b45309);
9716
10987
  }
9717
10988
 
9718
10989
  /* ─── Weight Overrides ─── */
@@ -9755,6 +11026,39 @@ export const helixTableSectionBaseStyles = css`
9755
11026
  :host([lines]:not([lines='0'])) {
9756
11027
  display: block;
9757
11028
  }
11029
+
11030
+ /* ─── High Contrast Mode (forced-colors) ─── */
11031
+
11032
+ @media (forced-colors: active) {
11033
+ /*
11034
+ * Semantic color variants (danger, success, warning) communicate state via color
11035
+ * alone. In forced-colors mode the browser overrides custom colors, so we must
11036
+ * use system color keywords to preserve the semantic distinction.
11037
+ */
11038
+ .text--color-danger {
11039
+ color: LinkText;
11040
+ }
11041
+
11042
+ .text--color-success {
11043
+ color: CanvasText;
11044
+ }
11045
+
11046
+ .text--color-warning {
11047
+ color: CanvasText;
11048
+ }
11049
+
11050
+ .text--color-disabled {
11051
+ color: GrayText;
11052
+ }
11053
+
11054
+ .text--color-inverse {
11055
+ color: CanvasText;
11056
+ }
11057
+
11058
+ .text--color-subtle {
11059
+ color: CanvasText;
11060
+ }
11061
+ }
9758
11062
  /* ── hx-text-input ── */
9759
11063
  :host {
9760
11064
  display: block;
@@ -9829,7 +11133,7 @@ export const helixTableSectionBaseStyles = css`
9829
11133
  gap: var(--hx-space-1, 0.25rem);
9830
11134
  font-size: var(--hx-font-size-sm, 0.875rem);
9831
11135
  font-weight: var(--hx-font-weight-medium, 500);
9832
- color: var(--hx-input-label-color, var(--hx-color-neutral-700, #343a40));
11136
+ color: var(--hx-input-label-color, var(--hx-color-neutral-700, #334155));
9833
11137
  line-height: var(--hx-line-height-normal, 1.5);
9834
11138
  }
9835
11139
 
@@ -9844,7 +11148,7 @@ export const helixTableSectionBaseStyles = css`
9844
11148
  display: flex;
9845
11149
  align-items: center;
9846
11150
  border: var(--hx-border-width-thin, 1px) solid
9847
- var(--hx-input-border-color, var(--hx-color-neutral-300, #ced4da));
11151
+ var(--hx-input-border-color, var(--hx-color-neutral-300, #cbd5e1));
9848
11152
  border-radius: var(--hx-input-border-radius, var(--hx-border-radius-md, 0.375rem));
9849
11153
  background-color: var(--hx-input-bg, var(--hx-color-neutral-0, #ffffff));
9850
11154
  transition:
@@ -9873,15 +11177,15 @@ export const helixTableSectionBaseStyles = css`
9873
11177
  /* ─── Error State ─── */
9874
11178
 
9875
11179
  .field--error .field__input-wrapper {
9876
- border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
11180
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc2626));
9877
11181
  }
9878
11182
 
9879
11183
  .field--error .field__input-wrapper:focus-within {
9880
- border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
11184
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc2626));
9881
11185
  box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
9882
11186
  color-mix(
9883
11187
  in srgb,
9884
- var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))
11188
+ var(--hx-input-error-color, var(--hx-color-error-500, #dc2626))
9885
11189
  calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
9886
11190
  transparent
9887
11191
  );
@@ -9893,7 +11197,7 @@ export const helixTableSectionBaseStyles = css`
9893
11197
  .field__suffix {
9894
11198
  display: flex;
9895
11199
  align-items: center;
9896
- color: var(--hx-color-neutral-500, #6c757d);
11200
+ color: var(--hx-color-neutral-500, #64748b);
9897
11201
  flex-shrink: 0;
9898
11202
  }
9899
11203
 
@@ -9916,14 +11220,14 @@ export const helixTableSectionBaseStyles = css`
9916
11220
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
9917
11221
  font-family: inherit;
9918
11222
  font-size: var(--hx-font-size-md, 1rem);
9919
- color: var(--hx-input-color, var(--hx-color-neutral-800, #212529));
11223
+ color: var(--hx-input-color, var(--hx-color-neutral-800, #1e293b));
9920
11224
  line-height: var(--hx-line-height-normal, 1.5);
9921
11225
  min-height: var(--hx-size-10, 2.5rem);
9922
11226
  width: 100%;
9923
11227
  }
9924
11228
 
9925
11229
  .field__input::placeholder {
9926
- color: var(--hx-color-neutral-400, #adb5bd);
11230
+ color: var(--hx-color-neutral-400, #94a3b8);
9927
11231
  }
9928
11232
 
9929
11233
  .field__input:focus-visible {
@@ -9956,7 +11260,7 @@ export const helixTableSectionBaseStyles = css`
9956
11260
 
9957
11261
  .field__help-text {
9958
11262
  font-size: var(--hx-font-size-xs, 0.75rem);
9959
- color: var(--hx-color-neutral-500, #6c757d);
11263
+ color: var(--hx-color-neutral-500, #64748b);
9960
11264
  line-height: var(--hx-line-height-normal, 1.5);
9961
11265
  }
9962
11266
 
@@ -10064,7 +11368,7 @@ export const helixTableSectionBaseStyles = css`
10064
11368
  gap: var(--hx-space-1, 0.25rem);
10065
11369
  font-size: var(--hx-font-size-sm, 0.875rem);
10066
11370
  font-weight: var(--hx-font-weight-medium, 500);
10067
- color: var(--hx-input-label-color, var(--hx-color-neutral-700, #343a40));
11371
+ color: var(--hx-input-label-color, var(--hx-color-neutral-700, #334155));
10068
11372
  line-height: var(--hx-line-height-normal, 1.5);
10069
11373
  }
10070
11374
 
@@ -10079,7 +11383,7 @@ export const helixTableSectionBaseStyles = css`
10079
11383
  display: flex;
10080
11384
  flex-direction: column;
10081
11385
  border: var(--hx-border-width-thin, 1px) solid
10082
- var(--hx-input-border-color, var(--hx-color-neutral-300, #ced4da));
11386
+ var(--hx-input-border-color, var(--hx-color-neutral-300, #cbd5e1));
10083
11387
  border-radius: var(--hx-input-border-radius, var(--hx-border-radius-md, 0.375rem));
10084
11388
  background-color: var(--hx-input-bg, var(--hx-color-neutral-0, #ffffff));
10085
11389
  transition:
@@ -10093,9 +11397,6 @@ export const helixTableSectionBaseStyles = css`
10093
11397
  --hx-input-focus-ring-color,
10094
11398
  var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
10095
11399
  );
10096
- /* Solid fallback for browsers without color-mix() (Chrome < 111, Safari < 16.2) — WCAG 1.4.11 */
10097
- box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
10098
- rgba(37, 99, 235, var(--hx-focus-ring-opacity, 0.25));
10099
11400
  box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
10100
11401
  color-mix(
10101
11402
  in srgb,
@@ -10111,18 +11412,15 @@ export const helixTableSectionBaseStyles = css`
10111
11412
  /* --- Error State --- */
10112
11413
 
10113
11414
  .field--error .field__textarea-wrapper {
10114
- border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
11415
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc2626));
10115
11416
  }
10116
11417
 
10117
11418
  .field--error .field__textarea-wrapper:focus-within {
10118
- border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
10119
- /* Solid fallback for browsers without color-mix() — WCAG 1.4.11 */
10120
- box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
10121
- rgba(220, 53, 69, var(--hx-focus-ring-opacity, 0.25));
11419
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc2626));
10122
11420
  box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
10123
11421
  color-mix(
10124
11422
  in srgb,
10125
- var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))
11423
+ var(--hx-input-error-color, var(--hx-color-error-500, #dc2626))
10126
11424
  calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
10127
11425
  transparent
10128
11426
  );
@@ -10137,7 +11435,7 @@ export const helixTableSectionBaseStyles = css`
10137
11435
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
10138
11436
  font-family: inherit;
10139
11437
  font-size: var(--hx-font-size-md, 1rem);
10140
- color: var(--hx-input-color, var(--hx-color-neutral-800, #212529));
11438
+ color: var(--hx-input-color, var(--hx-color-neutral-800, #1e293b));
10141
11439
  line-height: var(--hx-line-height-normal, 1.5);
10142
11440
  min-height: var(--hx-textarea-min-height, var(--hx-size-20, 5rem));
10143
11441
  width: 100%;
@@ -10145,7 +11443,7 @@ export const helixTableSectionBaseStyles = css`
10145
11443
  }
10146
11444
 
10147
11445
  .field__textarea::placeholder {
10148
- color: var(--hx-color-neutral-400, #adb5bd);
11446
+ color: var(--hx-color-neutral-400, #94a3b8);
10149
11447
  }
10150
11448
 
10151
11449
  .field__textarea:focus-visible {
@@ -10183,7 +11481,7 @@ export const helixTableSectionBaseStyles = css`
10183
11481
 
10184
11482
  .field__counter {
10185
11483
  font-size: var(--hx-font-size-xs, 0.75rem);
10186
- color: var(--hx-color-neutral-500, #6c757d);
11484
+ color: var(--hx-color-neutral-500, #64748b);
10187
11485
  line-height: var(--hx-line-height-normal, 1.5);
10188
11486
  text-align: end;
10189
11487
  }
@@ -10206,7 +11504,7 @@ export const helixTableSectionBaseStyles = css`
10206
11504
 
10207
11505
  .field__help-text {
10208
11506
  font-size: var(--hx-font-size-xs, 0.75rem);
10209
- color: var(--hx-color-neutral-500, #6c757d);
11507
+ color: var(--hx-color-neutral-500, #64748b);
10210
11508
  line-height: var(--hx-line-height-normal, 1.5);
10211
11509
  }
10212
11510
 
@@ -10296,8 +11594,242 @@ export const helixTableSectionBaseStyles = css`
10296
11594
  white-space: nowrap;
10297
11595
  border: 0;
10298
11596
  }
11597
+
11598
+ /* ─── High Contrast Mode (forced-colors) ─── */
11599
+
11600
+ /* hx-theme is a transparent wrapper that applies design tokens.
11601
+ It has no visual output of its own. forced-color-adjust: auto (default)
11602
+ is sufficient — theme tokens will resolve to system colors as needed. */
11603
+ @media (forced-colors: active) {
11604
+ :host {
11605
+ forced-color-adjust: auto;
11606
+ }
11607
+ }
10299
11608
  /* ── hx-time-picker ── */
10300
- :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-time-picker-font-family, var(--hx-font-family-sans, sans-serif))}.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-time-picker-label-color, var(--hx-color-neutral-700));line-height:var(--hx-line-height-normal, 1.5)}.field__required-marker{color:var(--hx-time-picker-error-color, var(--hx-color-error-text, #b91c1c));font-weight:var(--hx-font-weight-bold, 700)}.field__combobox{position:relative;display:flex;align-items:center;border:var(--hx-border-width-thin, 1px) solid var(--hx-time-picker-border-color, var(--hx-color-neutral-300));border-radius:var(--hx-time-picker-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-time-picker-bg, var(--hx-color-neutral-0));transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease);overflow:visible}.field__combobox:focus-within{border-color:var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field--error .field__combobox{border-color:var(--hx-time-picker-error-color, var(--hx-color-error-500))}.field--error .field__combobox:focus-within{border-color:var(--hx-time-picker-error-color, var(--hx-color-error-500));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-time-picker-error-color, var(--hx-color-error-500)) 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-time-picker-color, var(--hx-color-neutral-800));line-height:var(--hx-line-height-normal, 1.5);min-height:var(--hx-size-10, 2.5rem);width:100%;cursor:text}.field__input::placeholder{color:var(--hx-color-neutral-400)}.field__input:disabled{cursor:not-allowed}.field__toggle{display:flex;align-items:center;justify-content:center;border:none;background:transparent;padding:0 var(--hx-space-3, .75rem);color:var(--hx-time-picker-chevron-color, var(--hx-color-neutral-500));cursor:pointer;height:100%;min-height:var(--hx-size-10, 2.5rem);flex-shrink:0;border-inline-start:var(--hx-border-width-thin, 1px) solid var(--hx-time-picker-border-color, var(--hx-color-neutral-300))}.field__toggle:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));outline-offset:-2px;border-radius:0 var(--hx-time-picker-border-radius, var(--hx-border-radius-md, .375rem))}.field__listbox{position:absolute;top:calc(100% + var(--hx-space-1, .25rem));inset-inline-start:0;inset-inline-end:0;z-index:var(--hx-z-index-dropdown, 1000);background-color:var(--hx-time-picker-listbox-bg, var(--hx-color-neutral-0));border:var(--hx-border-width-thin, 1px) solid var(--hx-time-picker-border-color, var(--hx-color-neutral-300));border-radius:var(--hx-time-picker-border-radius, var(--hx-border-radius-md, .375rem));box-shadow:var( --hx-time-picker-listbox-shadow, 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900) 12%, transparent) );max-height:var(--hx-time-picker-listbox-max-height, 16rem);overflow-y:auto;padding:var(--hx-space-1, .25rem) 0;list-style:none;margin:0}@media(prefers-reduced-motion:no-preference){.field__listbox{animation:hx-listbox-enter var(--hx-transition-fast, .15s ease) forwards}}@keyframes hx-listbox-enter{0%{opacity:0;transform:translateY(-.25rem)}to{opacity:1;transform:translateY(0)}}.field__option{display:flex;align-items:center;padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-size:var(--hx-font-size-md, 1rem);font-family:inherit;color:var(--hx-time-picker-option-color, var(--hx-color-neutral-800));cursor:pointer;transition:background-color var(--hx-transition-fast, .15s ease);line-height:var(--hx-line-height-normal, 1.5)}.field__option:hover,.field__option--active{background-color:var(--hx-time-picker-option-hover-bg, var(--hx-color-primary-50));color:var(--hx-time-picker-option-hover-color, var(--hx-color-primary-700))}.field__option--selected{background-color:var(--hx-time-picker-option-selected-bg, var(--hx-color-primary-100));color:var(--hx-time-picker-option-selected-color, var(--hx-color-primary-800));font-weight:var(--hx-font-weight-medium, 500)}.field__option--selected.field__option--active{background-color:var(--hx-time-picker-option-selected-bg, var(--hx-color-primary-100))}@media(prefers-reduced-motion:reduce){.field__combobox,.field__option{transition:none}}.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)}.field__error{color:var(--hx-time-picker-error-color, var(--hx-color-error-text, #b91c1c))}
11609
+ :host {
11610
+ display: block;
11611
+ position: relative;
11612
+ }
11613
+ :host([disabled]) {
11614
+ opacity: var(--hx-opacity-disabled, 0.5);
11615
+ pointer-events: none;
11616
+ }
11617
+ * {
11618
+ box-sizing: border-box;
11619
+ }
11620
+ .field {
11621
+ display: flex;
11622
+ flex-direction: column;
11623
+ gap: var(--hx-space-1, 0.25rem);
11624
+ font-family: var(--hx-time-picker-font-family, var(--hx-font-family-sans, sans-serif));
11625
+ }
11626
+ .field__label {
11627
+ display: flex;
11628
+ align-items: baseline;
11629
+ gap: var(--hx-space-1, 0.25rem);
11630
+ font-size: var(--hx-font-size-sm, 0.875rem);
11631
+ font-weight: var(--hx-font-weight-medium, 500);
11632
+ color: var(--hx-time-picker-label-color, var(--hx-color-neutral-700));
11633
+ line-height: var(--hx-line-height-normal, 1.5);
11634
+ }
11635
+ .field__required-marker {
11636
+ color: var(--hx-time-picker-error-color, var(--hx-color-error-text, #b91c1c));
11637
+ font-weight: var(--hx-font-weight-bold, 700);
11638
+ }
11639
+ .field__combobox {
11640
+ position: relative;
11641
+ display: flex;
11642
+ align-items: center;
11643
+ border: var(--hx-border-width-thin, 1px) solid
11644
+ var(--hx-time-picker-border-color, var(--hx-color-neutral-300));
11645
+ border-radius: var(--hx-time-picker-border-radius, var(--hx-border-radius-md, 0.375rem));
11646
+ background-color: var(--hx-time-picker-bg, var(--hx-color-neutral-0));
11647
+ transition:
11648
+ border-color var(--hx-transition-fast, 150ms ease),
11649
+ box-shadow var(--hx-transition-fast, 150ms ease);
11650
+ overflow: visible;
11651
+ }
11652
+ .field__combobox:focus-within {
11653
+ border-color: var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));
11654
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
11655
+ color-mix(
11656
+ in srgb,
11657
+ var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color))
11658
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
11659
+ transparent
11660
+ );
11661
+ }
11662
+ .field--error .field__combobox {
11663
+ border-color: var(--hx-time-picker-error-color, var(--hx-color-error-500));
11664
+ }
11665
+ .field--error .field__combobox:focus-within {
11666
+ border-color: var(--hx-time-picker-error-color, var(--hx-color-error-500));
11667
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
11668
+ color-mix(
11669
+ in srgb,
11670
+ var(--hx-time-picker-error-color, var(--hx-color-error-500))
11671
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
11672
+ transparent
11673
+ );
11674
+ }
11675
+ .field__input {
11676
+ flex: 1;
11677
+ border: none;
11678
+ outline: none;
11679
+ background: transparent;
11680
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
11681
+ font-family: inherit;
11682
+ font-size: var(--hx-font-size-md, 1rem);
11683
+ color: var(--hx-time-picker-color, var(--hx-color-neutral-800));
11684
+ line-height: var(--hx-line-height-normal, 1.5);
11685
+ min-height: var(--hx-size-10, 2.5rem);
11686
+ width: 100%;
11687
+ cursor: text;
11688
+ }
11689
+ .field__input::placeholder {
11690
+ color: var(--hx-color-neutral-400);
11691
+ }
11692
+ .field__input:disabled {
11693
+ cursor: not-allowed;
11694
+ }
11695
+ .field__toggle {
11696
+ display: flex;
11697
+ align-items: center;
11698
+ justify-content: center;
11699
+ border: none;
11700
+ background: transparent;
11701
+ padding: 0 var(--hx-space-3, 0.75rem);
11702
+ color: var(--hx-time-picker-chevron-color, var(--hx-color-neutral-500));
11703
+ cursor: pointer;
11704
+ height: 100%;
11705
+ min-height: var(--hx-size-10, 2.5rem);
11706
+ flex-shrink: 0;
11707
+ border-inline-start: var(--hx-border-width-thin, 1px) solid
11708
+ var(--hx-time-picker-border-color, var(--hx-color-neutral-300));
11709
+ }
11710
+ .field__toggle:focus-visible {
11711
+ outline: var(--hx-focus-ring-width, 2px) solid
11712
+ var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));
11713
+ outline-offset: -2px;
11714
+ border-radius: 0 var(--hx-time-picker-border-radius, var(--hx-border-radius-md, 0.375rem));
11715
+ }
11716
+ .field__listbox {
11717
+ position: absolute;
11718
+ top: calc(100% + var(--hx-space-1, 0.25rem));
11719
+ inset-inline-start: 0;
11720
+ inset-inline-end: 0;
11721
+ z-index: var(--hx-z-index-dropdown, 1000);
11722
+ background-color: var(--hx-time-picker-listbox-bg, var(--hx-color-neutral-0));
11723
+ border: var(--hx-border-width-thin, 1px) solid
11724
+ var(--hx-time-picker-border-color, var(--hx-color-neutral-300));
11725
+ border-radius: var(--hx-time-picker-border-radius, var(--hx-border-radius-md, 0.375rem));
11726
+ box-shadow: var(
11727
+ --hx-time-picker-listbox-shadow,
11728
+ 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900) 12%, transparent)
11729
+ );
11730
+ max-height: var(--hx-time-picker-listbox-max-height, 16rem);
11731
+ overflow-y: auto;
11732
+ padding: var(--hx-space-1, 0.25rem) 0;
11733
+ list-style: none;
11734
+ margin: 0;
11735
+ }
11736
+ @media (prefers-reduced-motion: no-preference) {
11737
+ .field__listbox {
11738
+ animation: hx-listbox-enter var(--hx-transition-fast, 150ms ease) forwards;
11739
+ }
11740
+ }
11741
+ @keyframes hx-listbox-enter {
11742
+ 0% {
11743
+ opacity: 0;
11744
+ transform: translateY(-0.25rem);
11745
+ }
11746
+ to {
11747
+ opacity: 1;
11748
+ transform: translateY(0);
11749
+ }
11750
+ }
11751
+ .field__option {
11752
+ display: flex;
11753
+ align-items: center;
11754
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
11755
+ font-size: var(--hx-font-size-md, 1rem);
11756
+ font-family: inherit;
11757
+ color: var(--hx-time-picker-option-color, var(--hx-color-neutral-800));
11758
+ cursor: pointer;
11759
+ transition: background-color var(--hx-transition-fast, 150ms ease);
11760
+ line-height: var(--hx-line-height-normal, 1.5);
11761
+ }
11762
+ .field__option:hover,
11763
+ .field__option--active {
11764
+ background-color: var(--hx-time-picker-option-hover-bg, var(--hx-color-primary-50));
11765
+ color: var(--hx-time-picker-option-hover-color, var(--hx-color-primary-700));
11766
+ }
11767
+ .field__option--selected {
11768
+ background-color: var(--hx-time-picker-option-selected-bg, var(--hx-color-primary-100));
11769
+ color: var(--hx-time-picker-option-selected-color, var(--hx-color-primary-800));
11770
+ font-weight: var(--hx-font-weight-medium, 500);
11771
+ }
11772
+ .field__option--selected.field__option--active {
11773
+ background-color: var(--hx-time-picker-option-selected-bg, var(--hx-color-primary-100));
11774
+ }
11775
+ @media (prefers-reduced-motion: reduce) {
11776
+ .field__combobox,
11777
+ .field__option {
11778
+ transition: none;
11779
+ }
11780
+ }
11781
+ .field__help-text,
11782
+ .field__error {
11783
+ font-size: var(--hx-font-size-xs, 0.75rem);
11784
+ line-height: var(--hx-line-height-normal, 1.5);
11785
+ }
11786
+ .field__help-text {
11787
+ color: var(--hx-color-neutral-500);
11788
+ }
11789
+ .field__error {
11790
+ color: var(--hx-time-picker-error-color, var(--hx-color-error-text, #b91c1c));
11791
+ }
11792
+ @media (forced-colors: active) {
11793
+ .field__combobox {
11794
+ border-color: ButtonText;
11795
+ background-color: Canvas;
11796
+ }
11797
+ .field__combobox:focus-within {
11798
+ outline: 3px solid Highlight;
11799
+ outline-offset: 0;
11800
+ box-shadow: none;
11801
+ }
11802
+ .field--error .field__combobox {
11803
+ border-color: LinkText;
11804
+ }
11805
+ .field--error .field__combobox:focus-within {
11806
+ outline-color: Highlight;
11807
+ box-shadow: none;
11808
+ }
11809
+ .field__toggle:focus-visible {
11810
+ outline: 3px solid Highlight;
11811
+ outline-offset: 0;
11812
+ }
11813
+ .field__listbox {
11814
+ border-color: ButtonText;
11815
+ background-color: Canvas;
11816
+ box-shadow: none;
11817
+ }
11818
+ .field__option:hover,
11819
+ .field__option--active {
11820
+ background-color: Highlight;
11821
+ color: HighlightText;
11822
+ forced-color-adjust: none;
11823
+ }
11824
+ .field__option--selected {
11825
+ background-color: Highlight;
11826
+ color: HighlightText;
11827
+ forced-color-adjust: none;
11828
+ }
11829
+ .field__error {
11830
+ color: LinkText;
11831
+ }
11832
+ }
10301
11833
  /* ── hx-toast ── */
10302
11834
  /* ─── hx-toast host ─── */
10303
11835
 
@@ -10320,13 +11852,12 @@ export const helixTableSectionBaseStyles = css`
10320
11852
  border-radius: var(--hx-toast-border-radius, var(--hx-border-radius-md, 0.375rem));
10321
11853
  background-color: var(--hx-toast-bg, var(--hx-color-neutral-900, #0f172a));
10322
11854
  color: var(--hx-toast-color, var(--hx-color-neutral-0, #ffffff));
10323
- font-family: var(--hx-font-family-sans, sans-serif);
11855
+ font-family: var(--hx-toast-font-family, var(--hx-font-family-sans, sans-serif));
10324
11856
  font-size: var(--hx-font-size-sm, 0.875rem);
10325
11857
  line-height: var(--hx-line-height-normal, 1.5);
10326
11858
  box-shadow: var(
10327
11859
  --hx-toast-shadow,
10328
- 0 4px 6px -1px rgb(0 0 0 / 0.1),
10329
- 0 2px 4px -2px rgb(0 0 0 / 0.1)
11860
+ var(--hx-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1))
10330
11861
  );
10331
11862
  opacity: 0;
10332
11863
  transform: translateY(var(--hx-toast-enter-translate, var(--hx-space-2, 0.5rem)));
@@ -10346,22 +11877,22 @@ export const helixTableSectionBaseStyles = css`
10346
11877
  /* ─── Variant overrides ─── */
10347
11878
 
10348
11879
  .toast--success {
10349
- --hx-toast-bg: var(--hx-color-success-600, #16a34a);
11880
+ --hx-toast-bg: var(--hx-color-success-600, #15803d);
10350
11881
  --hx-toast-color: var(--hx-color-neutral-0, #ffffff);
10351
11882
  }
10352
11883
 
10353
11884
  .toast--warning {
10354
- --hx-toast-bg: var(--hx-color-warning-500, #f59e0b);
11885
+ --hx-toast-bg: var(--hx-color-warning-500, #d97706);
10355
11886
  --hx-toast-color: var(--hx-color-neutral-900, #0f172a);
10356
11887
  }
10357
11888
 
10358
11889
  .toast--danger {
10359
- --hx-toast-bg: var(--hx-color-error-600, #dc2626);
11890
+ --hx-toast-bg: var(--hx-color-error-600, #b91c1c);
10360
11891
  --hx-toast-color: var(--hx-color-neutral-0, #ffffff);
10361
11892
  }
10362
11893
 
10363
11894
  .toast--info {
10364
- --hx-toast-bg: var(--hx-color-primary-600, #2563eb);
11895
+ --hx-toast-bg: var(--hx-color-primary-600, #1d4ed8);
10365
11896
  --hx-toast-color: var(--hx-color-neutral-0, #ffffff);
10366
11897
  }
10367
11898
 
@@ -10672,7 +12203,7 @@ export const helixToastStackStyles = css`
10672
12203
  * to give clear visual feedback without introducing a new color.
10673
12204
  */
10674
12205
  .button--primary.button--pressed {
10675
- --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-700, #1d4ed8));
12206
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-700, #1e40af));
10676
12207
  --hx-toggle-button-color: var(
10677
12208
  --hx-toggle-button-pressed-color,
10678
12209
  var(--hx-color-neutral-0, #ffffff)
@@ -10698,7 +12229,7 @@ export const helixToastStackStyles = css`
10698
12229
  --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-100, #dbeafe));
10699
12230
  --hx-toggle-button-color: var(
10700
12231
  --hx-toggle-button-pressed-color,
10701
- var(--hx-color-primary-700, #1d4ed8)
12232
+ var(--hx-color-primary-700, #1e40af)
10702
12233
  );
10703
12234
  --hx-toggle-button-border-color: var(--hx-color-primary-400, #60a5fa);
10704
12235
  box-shadow: inset 0 0 0 1px var(--hx-color-primary-400, #60a5fa);
@@ -10709,7 +12240,7 @@ export const helixToastStackStyles = css`
10709
12240
  --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-100, #dbeafe));
10710
12241
  --hx-toggle-button-color: var(
10711
12242
  --hx-toggle-button-pressed-color,
10712
- var(--hx-color-primary-700, #1d4ed8)
12243
+ var(--hx-color-primary-700, #1e40af)
10713
12244
  );
10714
12245
  --hx-toggle-button-border-color: transparent;
10715
12246
  }
@@ -10799,9 +12330,9 @@ export const helixToastStackStyles = css`
10799
12330
  z-index: var(--hx-tooltip-z-index, var(--hx-z-index-tooltip, 1600));
10800
12331
  max-width: var(--hx-tooltip-max-width, 280px);
10801
12332
  padding: var(--hx-tooltip-padding, var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem));
10802
- background: var(--hx-tooltip-bg, var(--hx-color-neutral-900, #111827));
10803
- color: var(--hx-tooltip-color, var(--hx-color-neutral-50, #f9fafb));
10804
- font-family: var(--hx-font-family-sans, sans-serif);
12333
+ background: var(--hx-tooltip-bg, var(--hx-color-neutral-900, #0f172a));
12334
+ color: var(--hx-tooltip-color, var(--hx-color-neutral-50, #f8fafc));
12335
+ font-family: var(--hx-tooltip-font-family, var(--hx-font-family-sans, sans-serif));
10805
12336
  font-size: var(--hx-tooltip-font-size, var(--hx-font-size-xs, 0.75rem));
10806
12337
  line-height: var(--hx-line-height-normal, 1.5);
10807
12338
  border-radius: var(--hx-tooltip-border-radius, var(--hx-border-radius-sm, 0.25rem));
@@ -10826,7 +12357,7 @@ export const helixToastStackStyles = css`
10826
12357
  position: absolute;
10827
12358
  width: var(--hx-tooltip-arrow-size, 8px);
10828
12359
  height: var(--hx-tooltip-arrow-size, 8px);
10829
- background: var(--hx-tooltip-bg, var(--hx-color-neutral-900, #111827));
12360
+ background: var(--hx-tooltip-bg, var(--hx-color-neutral-900, #0f172a));
10830
12361
  transform: rotate(45deg);
10831
12362
  pointer-events: none;
10832
12363
  }
@@ -10876,10 +12407,10 @@ export const helixToastStackStyles = css`
10876
12407
 
10877
12408
  .nav {
10878
12409
  background-color: var(--hx-top-nav-bg, var(--hx-color-neutral-0, #ffffff));
10879
- color: var(--hx-top-nav-color, var(--hx-color-neutral-800, #212529));
12410
+ color: var(--hx-top-nav-color, var(--hx-color-neutral-800, #1e293b));
10880
12411
  border-bottom: var(--hx-border-width-thin, 1px) solid
10881
- var(--hx-top-nav-border-color, var(--hx-color-neutral-200, #dee2e6));
10882
- font-family: var(--hx-font-family-sans, sans-serif);
12412
+ var(--hx-top-nav-border-color, var(--hx-color-neutral-200, #e2e8f0));
12413
+ font-family: var(--hx-top-nav-font-family, var(--hx-font-family-sans, sans-serif));
10883
12414
  }
10884
12415
 
10885
12416
  /* ─── Bar row (always visible) ─── */
@@ -10912,13 +12443,13 @@ export const helixToastStackStyles = css`
10912
12443
  background: transparent;
10913
12444
  border: none;
10914
12445
  border-radius: var(--hx-border-radius-sm, 0.25rem);
10915
- color: var(--hx-top-nav-toggle-color, var(--hx-color-neutral-700, #343a40));
12446
+ color: var(--hx-top-nav-toggle-color, var(--hx-color-neutral-700, #334155));
10916
12447
  cursor: pointer;
10917
12448
  line-height: 0;
10918
12449
  }
10919
12450
 
10920
12451
  .mobile-toggle:hover {
10921
- background: var(--hx-color-neutral-100, #f1f3f5);
12452
+ background: var(--hx-color-neutral-100, #f1f5f9);
10922
12453
  }
10923
12454
 
10924
12455
  .mobile-toggle:focus-visible {
@@ -10940,12 +12471,12 @@ export const helixToastStackStyles = css`
10940
12471
  width: 100%;
10941
12472
  padding-block: var(--hx-space-3, 0.75rem);
10942
12473
  border-top: var(--hx-border-width-thin, 1px) solid
10943
- var(--hx-top-nav-border-color, var(--hx-color-neutral-200, #dee2e6));
12474
+ var(--hx-top-nav-border-color, var(--hx-color-neutral-200, #e2e8f0));
10944
12475
  }
10945
12476
 
10946
12477
  .nav__collapsible--open {
10947
12478
  display: flex;
10948
- animation: hx-mobile-nav-open var(--hx-duration-fast, 150ms) ease-out;
12479
+ animation: hx-mobile-nav-open var(--hx-duration-fast, 100ms) ease-out;
10949
12480
  }
10950
12481
 
10951
12482
  /* ─── Menu and actions in collapsible (mobile) ─── */
@@ -10962,7 +12493,7 @@ export const helixToastStackStyles = css`
10962
12493
  margin-top: var(--hx-space-3, 0.75rem);
10963
12494
  padding-top: var(--hx-space-3, 0.75rem);
10964
12495
  border-top: var(--hx-border-width-thin, 1px) solid
10965
- var(--hx-top-nav-border-color, var(--hx-color-neutral-200, #dee2e6));
12496
+ var(--hx-top-nav-border-color, var(--hx-color-neutral-200, #e2e8f0));
10966
12497
  }
10967
12498
 
10968
12499
  /* ─── Desktop breakpoint ─── */
@@ -11094,6 +12625,15 @@ export const helixToastStackStyles = css`
11094
12625
  outline-offset: var(--hx-focus-ring-offset, 2px);
11095
12626
  border-radius: var(--hx-border-radius-sm, 0.25rem);
11096
12627
  }
12628
+
12629
+ /* ─── High Contrast Mode (forced-colors) ─── */
12630
+
12631
+ @media (forced-colors: active) {
12632
+ .tree:focus-visible {
12633
+ outline: 3px solid Highlight;
12634
+ outline-offset: 2px;
12635
+ }
12636
+ }
11097
12637
  /* ── hx-visually-hidden ── */
11098
12638
  :host {
11099
12639
  position: absolute !important;
@@ -11119,4 +12659,16 @@ export const helixToastStackStyles = css`
11119
12659
  clip-path: none !important;
11120
12660
  white-space: normal !important;
11121
12661
  border: 0 !important;
12662
+ }
12663
+
12664
+ /* ─── High Contrast Mode (forced-colors) ─── */
12665
+
12666
+ /* hx-visually-hidden clips content off-screen for sighted users; in forced-colors
12667
+ mode this behavior is intentional. When the focusable variant becomes visible
12668
+ on focus, the browser's forced-colors mapping handles text/background colors
12669
+ correctly via the default forced-color-adjust: auto. */
12670
+ @media (forced-colors: active) {
12671
+ :host([focusable]:focus-within) {
12672
+ forced-color-adjust: auto;
12673
+ }
11122
12674
  }