@helixui/library 3.2.0-next.100 → 3.2.0-next.102

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 (137) hide show
  1. package/custom-elements.json +10 -10
  2. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  3. package/dist/components/hx-alert/index.js +1 -1
  4. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  5. package/dist/components/hx-banner/index.js +1 -1
  6. package/dist/components/hx-button/hx-button.d.ts +5 -5
  7. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  8. package/dist/components/hx-button/index.js +1 -1
  9. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  10. package/dist/components/hx-checkbox/index.js +1 -1
  11. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  12. package/dist/components/hx-code-snippet/index.js +1 -1
  13. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  14. package/dist/components/hx-combobox/index.js +1 -1
  15. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  16. package/dist/components/hx-date-picker/index.js +1 -1
  17. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  18. package/dist/components/hx-link/index.js +1 -1
  19. package/dist/components/hx-list/hx-list-item.styles.d.ts.map +1 -1
  20. package/dist/components/hx-list/index.js +1 -1
  21. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  22. package/dist/components/hx-radio-group/index.js +1 -1
  23. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  24. package/dist/components/hx-rating/index.js +1 -1
  25. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  26. package/dist/components/hx-select/index.js +1 -1
  27. package/dist/components/hx-side-nav/hx-side-nav.d.ts +1 -1
  28. package/dist/components/hx-side-nav/index.js +1 -1
  29. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  30. package/dist/components/hx-slider/index.js +1 -1
  31. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  32. package/dist/components/hx-split-button/index.js +1 -1
  33. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  34. package/dist/components/hx-switch/index.js +1 -1
  35. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  36. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  37. package/dist/components/hx-tabs/index.js +1 -1
  38. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  39. package/dist/components/hx-text-input/index.js +1 -1
  40. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  41. package/dist/components/hx-textarea/index.js +1 -1
  42. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  43. package/dist/components/hx-toggle-button/index.js +1 -1
  44. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  45. package/dist/components/hx-tree-view/index.js +1 -1
  46. package/dist/css/helix-all.css +48 -111
  47. package/dist/css/helix-core.css +23 -21
  48. package/dist/css/helix-data.css +2 -4
  49. package/dist/css/helix-feedback.css +3 -12
  50. package/dist/css/helix-forms.css +16 -63
  51. package/dist/css/helix-navigation.css +2 -3
  52. package/dist/css/helix-tokens.css +8 -8
  53. package/dist/css/helix-utility.css +2 -8
  54. package/dist/css/hx-alert.css +1 -4
  55. package/dist/css/hx-banner.css +2 -8
  56. package/dist/css/hx-button.css +22 -17
  57. package/dist/css/hx-checkbox.css +1 -4
  58. package/dist/css/hx-code-snippet.css +2 -4
  59. package/dist/css/hx-combobox.css +2 -8
  60. package/dist/css/hx-date-picker.css +5 -21
  61. package/dist/css/hx-link.css +1 -4
  62. package/dist/css/hx-rating.css +1 -2
  63. package/dist/css/hx-select.css +1 -4
  64. package/dist/css/hx-side-nav.css +1 -1
  65. package/dist/css/hx-slider.css +1 -4
  66. package/dist/css/hx-split-button.css +2 -8
  67. package/dist/css/hx-switch.css +1 -4
  68. package/dist/css/hx-text-input.css +2 -8
  69. package/dist/css/hx-textarea.css +1 -4
  70. package/dist/css/hx-toggle-button.css +1 -4
  71. package/dist/css/hx-tree-view.css +1 -2
  72. package/dist/css/index.css +1 -1
  73. package/dist/css/manifest.json +16 -14
  74. package/dist/index.js +21 -21
  75. package/dist/shared/{hx-alert-C597yHpD.js → hx-alert-CLn7CstP.js} +2 -5
  76. package/dist/shared/hx-alert-CLn7CstP.js.map +1 -0
  77. package/dist/shared/{hx-banner-Cxd7eFUP.js → hx-banner-D3DzpfcP.js} +7 -13
  78. package/dist/shared/hx-banner-D3DzpfcP.js.map +1 -0
  79. package/dist/shared/{hx-button-9OUjJnk7.js → hx-button-CHlkRQTe.js} +31 -26
  80. package/dist/shared/hx-button-CHlkRQTe.js.map +1 -0
  81. package/dist/shared/{hx-checkbox-DBD-gMoz.js → hx-checkbox-D7xma9YH.js} +6 -9
  82. package/dist/shared/hx-checkbox-D7xma9YH.js.map +1 -0
  83. package/dist/shared/{hx-code-snippet-B26RM1_C.js → hx-code-snippet-Bi-arDKH.js} +3 -5
  84. package/dist/shared/hx-code-snippet-Bi-arDKH.js.map +1 -0
  85. package/dist/shared/{hx-combobox-ClhNRAS5.js → hx-combobox-DDzqNKEW.js} +6 -12
  86. package/dist/shared/hx-combobox-DDzqNKEW.js.map +1 -0
  87. package/dist/shared/{hx-date-picker-BJm7Yrda.js → hx-date-picker-2iRG1p74.js} +12 -28
  88. package/dist/shared/hx-date-picker-2iRG1p74.js.map +1 -0
  89. package/dist/shared/{hx-link-9Ig2DW6L.js → hx-link-C-O6vq0Q.js} +2 -5
  90. package/dist/shared/hx-link-C-O6vq0Q.js.map +1 -0
  91. package/dist/shared/{hx-list-CkphGi9T.js → hx-list-MyEhh8c7.js} +3 -5
  92. package/dist/shared/hx-list-MyEhh8c7.js.map +1 -0
  93. package/dist/shared/{hx-nav-item-CqbO5-T5.js → hx-nav-item-Dap3DYgB.js} +2 -2
  94. package/dist/shared/hx-nav-item-Dap3DYgB.js.map +1 -0
  95. package/dist/shared/{hx-radio-dFjUAost.js → hx-radio-CJvNU2yP.js} +2 -5
  96. package/dist/shared/{hx-radio-dFjUAost.js.map → hx-radio-CJvNU2yP.js.map} +1 -1
  97. package/dist/shared/{hx-rating-CGtsejNf.js → hx-rating-C3QP53k9.js} +2 -3
  98. package/dist/shared/hx-rating-C3QP53k9.js.map +1 -0
  99. package/dist/shared/{hx-select-Bf4usFts.js → hx-select-C8fEHQhC.js} +2 -5
  100. package/dist/shared/hx-select-C8fEHQhC.js.map +1 -0
  101. package/dist/shared/{hx-slider-m0aEClH1.js → hx-slider-Blmv_rwS.js} +23 -26
  102. package/dist/shared/hx-slider-Blmv_rwS.js.map +1 -0
  103. package/dist/shared/{hx-split-button-BxDFfx4D.js → hx-split-button-Djnc5Aeg.js} +3 -9
  104. package/dist/shared/hx-split-button-Djnc5Aeg.js.map +1 -0
  105. package/dist/shared/{hx-switch-DvAW4YY-.js → hx-switch-BrZFaRue.js} +6 -9
  106. package/dist/shared/hx-switch-BrZFaRue.js.map +1 -0
  107. package/dist/shared/{hx-tab-panel-SWOEHuJc.js → hx-tab-panel-DspCrKqo.js} +3 -9
  108. package/dist/shared/{hx-tab-panel-SWOEHuJc.js.map → hx-tab-panel-DspCrKqo.js.map} +1 -1
  109. package/dist/shared/{hx-text-input-Bn7Gn8CI.js → hx-text-input-D6FlOZM-.js} +3 -9
  110. package/dist/shared/hx-text-input-D6FlOZM-.js.map +1 -0
  111. package/dist/shared/{hx-textarea-Jx1xnhgv.js → hx-textarea-CNG590KY.js} +6 -9
  112. package/dist/shared/hx-textarea-CNG590KY.js.map +1 -0
  113. package/dist/shared/{hx-toggle-button-DPAIh_Xo.js → hx-toggle-button-iLiYrMbD.js} +2 -5
  114. package/dist/shared/hx-toggle-button-iLiYrMbD.js.map +1 -0
  115. package/dist/shared/{hx-tree-item-Dt0Ozqyr.js → hx-tree-item-C2CiWuDE.js} +2 -3
  116. package/dist/shared/hx-tree-item-C2CiWuDE.js.map +1 -0
  117. package/figma-inventory.json +12 -12
  118. package/package.json +2 -2
  119. package/dist/shared/hx-alert-C597yHpD.js.map +0 -1
  120. package/dist/shared/hx-banner-Cxd7eFUP.js.map +0 -1
  121. package/dist/shared/hx-button-9OUjJnk7.js.map +0 -1
  122. package/dist/shared/hx-checkbox-DBD-gMoz.js.map +0 -1
  123. package/dist/shared/hx-code-snippet-B26RM1_C.js.map +0 -1
  124. package/dist/shared/hx-combobox-ClhNRAS5.js.map +0 -1
  125. package/dist/shared/hx-date-picker-BJm7Yrda.js.map +0 -1
  126. package/dist/shared/hx-link-9Ig2DW6L.js.map +0 -1
  127. package/dist/shared/hx-list-CkphGi9T.js.map +0 -1
  128. package/dist/shared/hx-nav-item-CqbO5-T5.js.map +0 -1
  129. package/dist/shared/hx-rating-CGtsejNf.js.map +0 -1
  130. package/dist/shared/hx-select-Bf4usFts.js.map +0 -1
  131. package/dist/shared/hx-slider-m0aEClH1.js.map +0 -1
  132. package/dist/shared/hx-split-button-BxDFfx4D.js.map +0 -1
  133. package/dist/shared/hx-switch-DvAW4YY-.js.map +0 -1
  134. package/dist/shared/hx-text-input-Bn7Gn8CI.js.map +0 -1
  135. package/dist/shared/hx-textarea-Jx1xnhgv.js.map +0 -1
  136. package/dist/shared/hx-toggle-button-DPAIh_Xo.js.map +0 -1
  137. package/dist/shared/hx-tree-item-Dt0Ozqyr.js.map +0 -1
@@ -309,10 +309,7 @@
309
309
 
310
310
  .alert__close-button:focus-visible {
311
311
  outline: var(--hx-focus-ring-width, 2px) solid
312
- var(
313
- --hx-alert-close-btn-focus-ring-color,
314
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
315
- );
312
+ var(--hx-alert-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
316
313
  outline-offset: var(--hx-focus-ring-offset, 2px);
317
314
  opacity: 1;
318
315
  }
@@ -832,10 +829,7 @@
832
829
 
833
830
  .banner__action:focus-visible {
834
831
  outline: var(--hx-focus-ring-width, 2px) solid
835
- var(
836
- --hx-banner-action-focus-ring-color,
837
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
838
- );
832
+ var(--hx-banner-action-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
839
833
  outline-offset: var(--hx-focus-ring-offset, 2px);
840
834
  border-radius: var(--hx-border-radius-sm, 0.25rem);
841
835
  }
@@ -876,10 +870,7 @@
876
870
 
877
871
  .banner__close-button:focus-visible {
878
872
  outline: var(--hx-focus-ring-width, 2px) solid
879
- var(
880
- --hx-banner-close-btn-focus-ring-color,
881
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
882
- );
873
+ var(--hx-banner-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
883
874
  outline-offset: var(--hx-focus-ring-offset, 2px);
884
875
  opacity: 1;
885
876
  }
@@ -1255,15 +1246,16 @@
1255
1246
 
1256
1247
  /* ─── Inverted Mode ─── */
1257
1248
 
1258
- /* Inline-fallback contract for --hx-color-border-on-dark-* in this section:
1249
+ /* Inline-fallback contract for the on-dark-* tokens in this section:
1259
1250
  the literal rgba(255, 255, 255, 0.X) arms are a LIGHT-MODE-only last
1260
1251
  resort (cold-start, CSS-not-loaded). At runtime, hx-theme injects
1261
- dark.color.border.on-dark-* as overlay-black-* so dark-mode inverted
1262
- buttons stay visible on the now-light surface.inverse (#EBEEE9). The
1263
- inline white overlays would render invisible (≈1.1:1) on a light surface,
1264
- but they never paint when the theme is mounted. If a future change moves
1265
- these into a context where hx-theme is not guaranteed, replace with
1266
- mode-aware tokens. */
1252
+ the dark.* override (overlay-black-* for the strong border and the
1253
+ surface.on-dark-overlay-* fills) so dark-mode inverted buttons stay
1254
+ visible on the now-light surface.inverse (#EBEEE9). The inline white
1255
+ overlays would render invisible (≈1.1:1) on a light surface, but
1256
+ they never paint when the theme is mounted. If a future change
1257
+ moves these into a context where hx-theme is not guaranteed,
1258
+ replace with mode-aware tokens. */
1267
1259
 
1268
1260
  /* Override text color and filter-based hover/active for all variants */
1269
1261
  :host([inverted]) .button {
@@ -1281,8 +1273,12 @@
1281
1273
 
1282
1274
  :host([inverted]) .button:focus-visible {
1283
1275
  /* WCAG 1.4.11: focus indicator needs ≥3:1 against adjacent colors.
1284
- border-on-dark-default (overlay-white-30) ≈ 2.7:1 on neutral-900 — fails.
1285
- border-on-dark-strong (overlay-white-70) 5:1 passes. */
1276
+ border-on-dark-strong (overlay-white-70) ≈ 5:1 on neutral-900 — passes.
1277
+ The lower-alpha siblings used to live in border.* but were sub-3:1
1278
+ against any plausible surface and could not honour a border contract;
1279
+ they're now surface.on-dark-overlay-{default,subtle} (translucent
1280
+ fills, not borders) and used elsewhere in this file. See
1281
+ tokens.json color.surface.on-dark-overlay-* for canonical ratios. */
1286
1282
  outline-color: var(
1287
1283
  --hx-button-inverted-focus-ring-color,
1288
1284
  var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
@@ -1347,19 +1343,19 @@
1347
1343
  }
1348
1344
 
1349
1345
  :host([inverted]) .button--secondary:hover {
1350
- --hx-button-bg: var(--hx-color-border-on-dark-default, rgba(255, 255, 255, 0.3));
1346
+ --hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
1351
1347
  }
1352
1348
 
1353
- /* Tertiary inverted — resting at subtle (10%) lifts to default (30%) on hover
1354
- so the runtime hover delta is visually distinct, not collapsed onto a
1355
- single token. */
1349
+ /* Tertiary inverted — resting at the subtle overlay (10%) lifts to the default
1350
+ overlay (30%) on hover so the runtime hover delta is visually distinct, not
1351
+ collapsed onto a single token. */
1356
1352
  :host([inverted]) .button--tertiary {
1357
- --hx-button-bg: var(--hx-color-border-on-dark-subtle, rgba(255, 255, 255, 0.1));
1353
+ --hx-button-bg: var(--hx-color-surface-on-dark-overlay-subtle, rgba(255, 255, 255, 0.1));
1358
1354
  --hx-button-border-color: transparent;
1359
1355
  }
1360
1356
 
1361
1357
  :host([inverted]) .button--tertiary:hover {
1362
- --hx-button-bg: var(--hx-color-border-on-dark-default, rgba(255, 255, 255, 0.3));
1358
+ --hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
1363
1359
  }
1364
1360
 
1365
1361
  /* Ghost inverted — transparent base, translucent hover bg */
@@ -1371,7 +1367,7 @@
1371
1367
  :host([inverted]) .button--ghost:hover {
1372
1368
  --hx-button-bg: var(
1373
1369
  --hx-button-inverted-ghost-hover-bg,
1374
- var(--hx-color-border-on-dark-default, rgba(255, 255, 255, 0.3))
1370
+ var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
1375
1371
  );
1376
1372
  }
1377
1373
 
@@ -1381,7 +1377,7 @@
1381
1377
  }
1382
1378
 
1383
1379
  :host([inverted]) .button--outline:hover {
1384
- --hx-button-bg: var(--hx-color-border-on-dark-default, rgba(255, 255, 255, 0.3));
1380
+ --hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
1385
1381
  }
1386
1382
 
1387
1383
  /* ─── Prefix / Suffix / Label ─── */
@@ -2058,10 +2054,7 @@
2058
2054
 
2059
2055
  .checkbox__input:focus-visible ~ .checkbox__box {
2060
2056
  outline: var(--hx-checkbox-focus-ring-width, var(--hx-focus-ring-width, 2px)) solid
2061
- var(
2062
- --hx-checkbox-focus-ring-color,
2063
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
2064
- );
2057
+ var(--hx-checkbox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
2065
2058
  outline-offset: var(--hx-checkbox-focus-ring-offset, var(--hx-focus-ring-offset, 2px));
2066
2059
  }
2067
2060
 
@@ -2753,8 +2746,7 @@
2753
2746
  }
2754
2747
 
2755
2748
  .code-snippet__copy-button:focus-visible {
2756
- outline: var(--hx-focus-ring-width, 2px) solid
2757
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
2749
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
2758
2750
  outline-offset: var(--hx-focus-ring-offset, 2px);
2759
2751
  }
2760
2752
 
@@ -2795,8 +2787,7 @@
2795
2787
  }
2796
2788
 
2797
2789
  .code-snippet__expand-button:focus-visible {
2798
- outline: var(--hx-focus-ring-width, 2px) solid
2799
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
2790
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
2800
2791
  outline-offset: var(--hx-focus-ring-offset, 2px);
2801
2792
  }
2802
2793
 
@@ -3184,17 +3175,11 @@
3184
3175
  box-shadow var(--hx-transition-fast, 150ms ease);
3185
3176
  }
3186
3177
  .field__input-wrapper:focus-within {
3187
- border-color: var(
3188
- --hx-combobox-focus-ring-color,
3189
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
3190
- );
3178
+ border-color: var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
3191
3179
  box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
3192
3180
  color-mix(
3193
3181
  in srgb,
3194
- var(
3195
- --hx-combobox-focus-ring-color,
3196
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
3197
- )
3182
+ var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
3198
3183
  calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
3199
3184
  transparent
3200
3185
  );
@@ -4130,17 +4115,11 @@
4130
4115
  }
4131
4116
 
4132
4117
  .field__input-wrapper:focus-within {
4133
- border-color: var(
4134
- --hx-date-picker-focus-ring-color,
4135
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
4136
- );
4118
+ border-color: var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
4137
4119
  box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
4138
4120
  color-mix(
4139
4121
  in srgb,
4140
- var(
4141
- --hx-date-picker-focus-ring-color,
4142
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
4143
- )
4122
+ var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
4144
4123
  calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
4145
4124
  transparent
4146
4125
  );
@@ -4209,17 +4188,10 @@
4209
4188
  }
4210
4189
 
4211
4190
  .field__trigger:focus-visible {
4212
- color: var(
4213
- --hx-date-picker-focus-ring-color,
4214
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
4215
- );
4191
+ color: var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
4216
4192
  background-color: color-mix(
4217
4193
  in srgb,
4218
- var(
4219
- --hx-date-picker-focus-ring-color,
4220
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
4221
- )
4222
- 8%,
4194
+ var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078)) 8%,
4223
4195
  transparent
4224
4196
  );
4225
4197
  }
@@ -4316,10 +4288,7 @@
4316
4288
 
4317
4289
  :is(.calendar__nav-btn, .calendar__day):focus-visible {
4318
4290
  box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
4319
- var(
4320
- --hx-date-picker-focus-ring-color,
4321
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
4322
- );
4291
+ var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
4323
4292
  z-index: 1;
4324
4293
  }
4325
4294
 
@@ -6108,10 +6077,7 @@ export const helixGridItemStyles = css`
6108
6077
 
6109
6078
  .link:focus-visible {
6110
6079
  outline: var(--hx-focus-ring-width, 2px) solid
6111
- var(
6112
- --hx-link-focus-ring-color,
6113
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
6114
- );
6080
+ var(--hx-link-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
6115
6081
  outline-offset: var(--hx-focus-ring-offset, 2px);
6116
6082
  border-radius: var(--hx-border-radius-sm, 0.25rem);
6117
6083
  }
@@ -8193,8 +8159,7 @@ export const helixGridItemStyles = css`
8193
8159
  }
8194
8160
 
8195
8161
  .symbol:focus-visible {
8196
- outline: var(--hx-focus-ring-width, 2px) solid
8197
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
8162
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
8198
8163
  outline-offset: var(--hx-focus-ring-offset, 2px);
8199
8164
  border-radius: var(--hx-border-radius-sm, 0.25rem);
8200
8165
  }
@@ -8308,10 +8273,7 @@ export const helixGridItemStyles = css`
8308
8273
  --_border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
8309
8274
 
8310
8275
  /* Focus ring */
8311
- --_focus-ring-color: var(
8312
- --hx-select-focus-ring-color,
8313
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
8314
- );
8276
+ --_focus-ring-color: var(--hx-select-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
8315
8277
 
8316
8278
  /* Error */
8317
8279
  --_error-color: var(--hx-select-error-color, var(--hx-color-error-500, #e5493e));
@@ -8779,7 +8741,7 @@ export const helixGridItemStyles = css`
8779
8741
 
8780
8742
  .side-nav__toggle:hover {
8781
8743
  background-color: var(
8782
- --hx-color-border-on-dark-subtle,
8744
+ --hx-color-surface-on-dark-overlay-subtle,
8783
8745
  rgba(255, 255, 255, 0.1)
8784
8746
  ); /* fallback for browsers without color-mix() */
8785
8747
  color: var(--hx-side-nav-toggle-hover-color, var(--hx-color-text-inverse, #ffffff));
@@ -9151,10 +9113,7 @@ export const helixGridItemStyles = css`
9151
9113
  .slider__input:focus-visible ~ .slider__thumb-visual {
9152
9114
  box-shadow:
9153
9115
  0 0 0 var(--hx-focus-ring-width, 2px)
9154
- var(
9155
- --hx-slider-focus-ring-color,
9156
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
9157
- ),
9116
+ var(--hx-slider-focus-ring-color, var(--hx-focus-ring-color, #0f7078)),
9158
9117
  var(--hx-slider-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
9159
9118
  }
9160
9119
 
@@ -9423,10 +9382,7 @@ export const helixGridItemStyles = css`
9423
9382
 
9424
9383
  .split-button__primary:focus-visible {
9425
9384
  outline: var(--hx-focus-ring-width, 2px) solid
9426
- var(
9427
- --hx-split-button-focus-ring-color,
9428
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
9429
- );
9385
+ var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
9430
9386
  outline-offset: var(--hx-focus-ring-offset, 2px);
9431
9387
  z-index: 1;
9432
9388
  position: relative;
@@ -9468,10 +9424,7 @@ export const helixGridItemStyles = css`
9468
9424
 
9469
9425
  .split-button__trigger:focus-visible {
9470
9426
  outline: var(--hx-focus-ring-width, 2px) solid
9471
- var(
9472
- --hx-split-button-focus-ring-color,
9473
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
9474
- );
9427
+ var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
9475
9428
  outline-offset: var(--hx-focus-ring-offset, 2px);
9476
9429
  z-index: 1;
9477
9430
  position: relative;
@@ -10539,10 +10492,7 @@ export const helixStructuredListRowStyles = css`
10539
10492
 
10540
10493
  .switch__track:focus-visible {
10541
10494
  outline: var(--hx-focus-ring-width, 2px) solid
10542
- var(
10543
- --hx-switch-focus-ring-color,
10544
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
10545
- );
10495
+ var(--hx-switch-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
10546
10496
  outline-offset: var(--hx-focus-ring-offset, 2px);
10547
10497
  }
10548
10498
 
@@ -11321,10 +11271,7 @@ export const helixTableSectionBaseStyles = css`
11321
11271
  );
11322
11272
  --_text-input-border-color-focus: var(
11323
11273
  --hx-text-input-border-color-focus,
11324
- var(
11325
- --hx-input-focus-ring-color,
11326
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
11327
- )
11274
+ var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
11328
11275
  );
11329
11276
  --_text-input-border-color-invalid: var(
11330
11277
  --hx-text-input-border-color-invalid,
@@ -11350,10 +11297,7 @@ export const helixTableSectionBaseStyles = css`
11350
11297
  /* Focus ring */
11351
11298
  --_text-input-focus-ring-color: var(
11352
11299
  --hx-text-input-focus-ring-color,
11353
- var(
11354
- --hx-input-focus-ring-color,
11355
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
11356
- )
11300
+ var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
11357
11301
  );
11358
11302
  --_text-input-focus-ring-width: var(
11359
11303
  --hx-text-input-focus-ring-width,
@@ -11663,10 +11607,7 @@ export const helixTableSectionBaseStyles = css`
11663
11607
  );
11664
11608
  --_textarea-border-color-focus: var(
11665
11609
  --hx-textarea-border-color-focus,
11666
- var(
11667
- --hx-input-focus-ring-color,
11668
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
11669
- )
11610
+ var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
11670
11611
  );
11671
11612
  --_textarea-border-color-invalid: var(
11672
11613
  --hx-textarea-border-color-invalid,
@@ -12490,10 +12431,7 @@ export const helixToastStackStyles = css`
12490
12431
 
12491
12432
  .button:focus-visible {
12492
12433
  outline: var(--hx-focus-ring-width, 2px) solid
12493
- var(
12494
- --hx-toggle-button-focus-ring-color,
12495
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
12496
- );
12434
+ var(--hx-toggle-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
12497
12435
  outline-offset: var(--hx-focus-ring-offset, 2px);
12498
12436
  }
12499
12437
 
@@ -13017,8 +12955,7 @@ export const helixToastStackStyles = css`
13017
12955
  }
13018
12956
 
13019
12957
  .tree:focus-visible {
13020
- outline: var(--hx-focus-ring-width, 2px) solid
13021
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
12958
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
13022
12959
  outline-offset: var(--hx-focus-ring-offset, 2px);
13023
12960
  border-radius: var(--hx-border-radius-sm, 0.25rem);
13024
12961
  }
@@ -578,15 +578,16 @@
578
578
 
579
579
  /* ─── Inverted Mode ─── */
580
580
 
581
- /* Inline-fallback contract for --hx-color-border-on-dark-* in this section:
581
+ /* Inline-fallback contract for the on-dark-* tokens in this section:
582
582
  the literal rgba(255, 255, 255, 0.X) arms are a LIGHT-MODE-only last
583
583
  resort (cold-start, CSS-not-loaded). At runtime, hx-theme injects
584
- dark.color.border.on-dark-* as overlay-black-* so dark-mode inverted
585
- buttons stay visible on the now-light surface.inverse (#EBEEE9). The
586
- inline white overlays would render invisible (≈1.1:1) on a light surface,
587
- but they never paint when the theme is mounted. If a future change moves
588
- these into a context where hx-theme is not guaranteed, replace with
589
- mode-aware tokens. */
584
+ the dark.* override (overlay-black-* for the strong border and the
585
+ surface.on-dark-overlay-* fills) so dark-mode inverted buttons stay
586
+ visible on the now-light surface.inverse (#EBEEE9). The inline white
587
+ overlays would render invisible (≈1.1:1) on a light surface, but
588
+ they never paint when the theme is mounted. If a future change
589
+ moves these into a context where hx-theme is not guaranteed,
590
+ replace with mode-aware tokens. */
590
591
 
591
592
  /* Override text color and filter-based hover/active for all variants */
592
593
  :host([inverted]) .button {
@@ -604,8 +605,12 @@
604
605
 
605
606
  :host([inverted]) .button:focus-visible {
606
607
  /* WCAG 1.4.11: focus indicator needs ≥3:1 against adjacent colors.
607
- border-on-dark-default (overlay-white-30) ≈ 2.7:1 on neutral-900 — fails.
608
- border-on-dark-strong (overlay-white-70) 5:1 passes. */
608
+ border-on-dark-strong (overlay-white-70) ≈ 5:1 on neutral-900 — passes.
609
+ The lower-alpha siblings used to live in border.* but were sub-3:1
610
+ against any plausible surface and could not honour a border contract;
611
+ they're now surface.on-dark-overlay-{default,subtle} (translucent
612
+ fills, not borders) and used elsewhere in this file. See
613
+ tokens.json color.surface.on-dark-overlay-* for canonical ratios. */
609
614
  outline-color: var(
610
615
  --hx-button-inverted-focus-ring-color,
611
616
  var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
@@ -670,19 +675,19 @@
670
675
  }
671
676
 
672
677
  :host([inverted]) .button--secondary:hover {
673
- --hx-button-bg: var(--hx-color-border-on-dark-default, rgba(255, 255, 255, 0.3));
678
+ --hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
674
679
  }
675
680
 
676
- /* Tertiary inverted — resting at subtle (10%) lifts to default (30%) on hover
677
- so the runtime hover delta is visually distinct, not collapsed onto a
678
- single token. */
681
+ /* Tertiary inverted — resting at the subtle overlay (10%) lifts to the default
682
+ overlay (30%) on hover so the runtime hover delta is visually distinct, not
683
+ collapsed onto a single token. */
679
684
  :host([inverted]) .button--tertiary {
680
- --hx-button-bg: var(--hx-color-border-on-dark-subtle, rgba(255, 255, 255, 0.1));
685
+ --hx-button-bg: var(--hx-color-surface-on-dark-overlay-subtle, rgba(255, 255, 255, 0.1));
681
686
  --hx-button-border-color: transparent;
682
687
  }
683
688
 
684
689
  :host([inverted]) .button--tertiary:hover {
685
- --hx-button-bg: var(--hx-color-border-on-dark-default, rgba(255, 255, 255, 0.3));
690
+ --hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
686
691
  }
687
692
 
688
693
  /* Ghost inverted — transparent base, translucent hover bg */
@@ -694,7 +699,7 @@
694
699
  :host([inverted]) .button--ghost:hover {
695
700
  --hx-button-bg: var(
696
701
  --hx-button-inverted-ghost-hover-bg,
697
- var(--hx-color-border-on-dark-default, rgba(255, 255, 255, 0.3))
702
+ var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
698
703
  );
699
704
  }
700
705
 
@@ -704,7 +709,7 @@
704
709
  }
705
710
 
706
711
  :host([inverted]) .button--outline:hover {
707
- --hx-button-bg: var(--hx-color-border-on-dark-default, rgba(255, 255, 255, 0.3));
712
+ --hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
708
713
  }
709
714
 
710
715
  /* ─── Prefix / Suffix / Label ─── */
@@ -1519,10 +1524,7 @@
1519
1524
 
1520
1525
  .link:focus-visible {
1521
1526
  outline: var(--hx-focus-ring-width, 2px) solid
1522
- var(
1523
- --hx-link-focus-ring-color,
1524
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
1525
- );
1527
+ var(--hx-link-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
1526
1528
  outline-offset: var(--hx-focus-ring-offset, 2px);
1527
1529
  border-radius: var(--hx-border-radius-sm, 0.25rem);
1528
1530
  }
@@ -106,8 +106,7 @@
106
106
  }
107
107
 
108
108
  .code-snippet__copy-button:focus-visible {
109
- outline: var(--hx-focus-ring-width, 2px) solid
110
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
109
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
111
110
  outline-offset: var(--hx-focus-ring-offset, 2px);
112
111
  }
113
112
 
@@ -148,8 +147,7 @@
148
147
  }
149
148
 
150
149
  .code-snippet__expand-button:focus-visible {
151
- outline: var(--hx-focus-ring-width, 2px) solid
152
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
150
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
153
151
  outline-offset: var(--hx-focus-ring-offset, 2px);
154
152
  }
155
153
 
@@ -160,10 +160,7 @@
160
160
 
161
161
  .alert__close-button:focus-visible {
162
162
  outline: var(--hx-focus-ring-width, 2px) solid
163
- var(
164
- --hx-alert-close-btn-focus-ring-color,
165
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
166
- );
163
+ var(--hx-alert-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
167
164
  outline-offset: var(--hx-focus-ring-offset, 2px);
168
165
  opacity: 1;
169
166
  }
@@ -336,10 +333,7 @@
336
333
 
337
334
  .banner__action:focus-visible {
338
335
  outline: var(--hx-focus-ring-width, 2px) solid
339
- var(
340
- --hx-banner-action-focus-ring-color,
341
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
342
- );
336
+ var(--hx-banner-action-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
343
337
  outline-offset: var(--hx-focus-ring-offset, 2px);
344
338
  border-radius: var(--hx-border-radius-sm, 0.25rem);
345
339
  }
@@ -380,10 +374,7 @@
380
374
 
381
375
  .banner__close-button:focus-visible {
382
376
  outline: var(--hx-focus-ring-width, 2px) solid
383
- var(
384
- --hx-banner-close-btn-focus-ring-color,
385
- var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
386
- );
377
+ var(--hx-banner-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
387
378
  outline-offset: var(--hx-focus-ring-offset, 2px);
388
379
  opacity: 1;
389
380
  }