baseline-foundry 0.1.4 → 0.1.6

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 (82) hide show
  1. package/README.md +17 -9
  2. package/config/experiments/ibm-plex-engine-smoke.json +1 -1
  3. package/config/experiments/ubuntu-engine-smoke.json +1 -1
  4. package/config/foundation-theme.json +1 -1
  5. package/config/tiers/app.json +6 -6
  6. package/config/tiers/documentation.json +2 -2
  7. package/config/tiers/editorial.json +1 -1
  8. package/config/tiers/os.json +6 -6
  9. package/dist/baseline-grid-overlay.js +2 -2
  10. package/dist/build.js +4 -4
  11. package/dist/code-snippet.js +1 -1
  12. package/dist/css-app-tier.js +16 -5
  13. package/dist/css-components/article-pagination.js +9 -8
  14. package/dist/css-components/button-actions.js +24 -4
  15. package/dist/css-components/cards-options.js +8 -8
  16. package/dist/css-components/chip-badge-status.d.ts +0 -3
  17. package/dist/css-components/chip-badge-status.js +57 -10
  18. package/dist/css-components/content-card.d.ts +7 -7
  19. package/dist/css-components/content-card.js +17 -16
  20. package/dist/css-components/control-row.d.ts +1 -1
  21. package/dist/css-components/control-row.js +1 -1
  22. package/dist/css-components/document-navigation.js +66 -29
  23. package/dist/css-components/editorial-content.js +1 -1
  24. package/dist/css-components/interactive-feedback.js +50 -28
  25. package/dist/css-components/interactive-tables.js +13 -8
  26. package/dist/css-components/legacy-navigation.d.ts +0 -1
  27. package/dist/css-components/legacy-navigation.js +108 -32
  28. package/dist/css-components/linked-logo-site-layout.d.ts +3 -3
  29. package/dist/css-components/linked-logo-site-layout.js +17 -20
  30. package/dist/css-components/list-tree.js +21 -19
  31. package/dist/css-components/list.js +9 -7
  32. package/dist/css-components/logo-media.d.ts +6 -6
  33. package/dist/css-components/logo-media.js +38 -27
  34. package/dist/css-components/navigation-layout.js +6 -8
  35. package/dist/css-components/panel.js +12 -12
  36. package/dist/css-components/search-box-and-filter.d.ts +0 -1
  37. package/dist/css-components/search-box-and-filter.js +18 -19
  38. package/dist/css-components/sites-editorial-ports.d.ts +3 -4
  39. package/dist/css-components/sites-editorial-ports.js +61 -29
  40. package/dist/css-components/sites-foundation.js +15 -19
  41. package/dist/css-components/sites-rich-lists.d.ts +5 -5
  42. package/dist/css-components/sites-rich-lists.js +26 -36
  43. package/dist/css-components/static-content-ports.d.ts +3 -3
  44. package/dist/css-components/static-content-ports.js +51 -37
  45. package/dist/css-components/tab-section.d.ts +3 -3
  46. package/dist/css-components/tab-section.js +34 -26
  47. package/dist/css-components/table.js +4 -7
  48. package/dist/css-components/tabs-choice-breadcrumbs.js +25 -21
  49. package/dist/css-components/tiered-list-equal-height-row.js +10 -10
  50. package/dist/css-components.js +243 -124
  51. package/dist/css-grid.d.ts +1 -1
  52. package/dist/css-grid.js +18 -8
  53. package/dist/css.js +94 -18
  54. package/dist/experiments/ibm-plex-engine-smoke/styles.css +1005 -563
  55. package/dist/experiments/ibm-plex-engine-smoke/surfaces.json +2 -2
  56. package/dist/experiments/ibm-plex-engine-smoke/tokens.json +1 -1
  57. package/dist/in-page-navigation.js +1 -1
  58. package/dist/presets/app-tier/styles.css +1046 -593
  59. package/dist/presets/app-tier/surfaces.json +17 -17
  60. package/dist/presets/app-tier/tokens.json +7 -7
  61. package/dist/presets/prose/styles.css +1036 -587
  62. package/dist/presets/prose/surfaces.json +17 -17
  63. package/dist/presets/prose/tokens.json +1 -1
  64. package/dist/resizable-aside.js +12 -4
  65. package/dist/styles.css +1036 -587
  66. package/dist/surfaces.json +17 -17
  67. package/dist/tiers/app/styles.css +1046 -593
  68. package/dist/tiers/app/surfaces.json +17 -17
  69. package/dist/tiers/app/tokens.json +7 -7
  70. package/dist/tiers/documentation/styles.css +1037 -588
  71. package/dist/tiers/documentation/surfaces.json +17 -17
  72. package/dist/tiers/documentation/tokens.json +2 -2
  73. package/dist/tiers/editorial/styles.css +1036 -587
  74. package/dist/tiers/editorial/surfaces.json +17 -17
  75. package/dist/tiers/editorial/tokens.json +1 -1
  76. package/dist/tiers/os/styles.css +1042 -593
  77. package/dist/tiers/os/surfaces.json +17 -17
  78. package/dist/tiers/os/tokens.json +7 -7
  79. package/dist/tokens.json +1 -1
  80. package/dist/types.d.ts +1 -1
  81. package/docs/publishing.md +1 -1
  82. package/package.json +2 -2
@@ -89,43 +89,66 @@ export function componentsCss(tokens, themeSurfaces) {
89
89
  const h6 = tokens.roles.h6 ?? body;
90
90
  const baselineUnit = tokens.baselineUnit;
91
91
  const components = tokens.components;
92
- const controlBlockPaddingVar = "var(--bf-control-block-padding)";
93
- const controlCompactBlockPaddingVar = "var(--bf-control-block-padding-compact)";
94
92
  const inputBlockPaddingVar = "var(--bf-input-block-padding)";
95
93
  const buttonBlockPaddingVar = "var(--bf-button-block-padding)";
96
94
  const bodyLineHeight = roleLineHeightVar("body", body.lineHeight);
97
95
  const inputMarginBottom = controlMarginBottomExpression(bodyLineHeight, inputBlockPaddingVar, "0rem");
98
- const buttonMarginBottom = controlMarginBottomExpression(bodyLineHeight, buttonBlockPaddingVar, "0rem");
96
+ const singleLineRowMarginBottom = controlMarginBottomExpression(bodyLineHeight, buttonBlockPaddingVar, "0rem");
97
+ const buttonMarginBottom = "var(--bf-single-line-row-margin-block-end)";
99
98
  const bodySelectedStartNudge = roleSelectedStartNudgeVar("body", body.nudgeTop);
100
99
  const bodySelectedEndNudge = roleSelectedEndNudgeVar("body");
101
100
  const h4LineHeight = roleLineHeightVar("h4", h4.lineHeight);
102
101
  const h5LineHeight = roleLineHeightVar("h5", h5.lineHeight);
103
- const h5SelectedStartNudge = roleSelectedStartNudgeVar("h5", h5.nudgeTop);
104
- const h5SelectedEndNudge = roleSelectedEndNudgeVar("h5");
105
102
  const h6LineHeight = roleLineHeightVar("h6", h6.lineHeight);
106
103
  const bodyTypeStyles = typeStyles(body, { includeCase: false });
107
104
  const h6TypeStyles = typeStyles(h6, { includeCase: false });
108
- const buttonPadding = controlPadding(buttonBlockPaddingVar);
105
+ const buttonPadding = " padding-block: var(--bf-single-line-row-padding-block);\n";
109
106
  return `:where(.bf-theme) {
110
107
  ${componentAlignmentVars(components)} /* Action surfaces keep comfortable command targets; field surfaces can tighten independently. */
111
108
  --bf-disclosure-gap: 1rem;
112
109
  --bf-disclosure-icon-inline-size: 1rem;
110
+ --bf-icon-label-inline-offset: calc(var(--bf-disclosure-icon-inline-size) + var(--bf-disclosure-gap));
111
+ --bf-disclosure-label-inline-offset: var(--bf-icon-label-inline-offset);
112
+ /* Every component-owned inline start resolves to one of these three rails.
113
+ Field and action values remain tier inputs; continuation is the shared
114
+ icon/mark-to-copy line. Structural page, grid and navigation-depth offsets
115
+ are deliberately outside this component inset contract. */
116
+ --bf-component-inline-inset-field: var(--bf-control-inline-padding-field);
117
+ --bf-component-inline-inset-action: var(--bf-control-inline-padding-action);
118
+ --bf-component-inline-inset-continuation: var(--bf-disclosure-label-inline-offset);
113
119
  --bf-input-block-padding: ${bodySelectedStartNudge};
114
120
  --bf-button-block-padding: ${bodySelectedStartNudge};
121
+ /* One border-aware occupied-block contract for body-sized, single-line UI.
122
+ Components may paint their block borders differently, but their text line,
123
+ padding and trailing baseline compensation must resolve through this pair. */
124
+ --bf-single-line-row-padding-block: max(0rem, calc(var(--bf-button-block-padding) - var(--bf-border-width)));
125
+ --bf-single-line-row-margin-block-end: ${singleLineRowMarginBottom};
126
+ --bf-single-line-row-block-size: calc(${bodyLineHeight} + (var(--bf-single-line-row-padding-block) * 2) + (var(--bf-border-width) * 2) + var(--bf-single-line-row-margin-block-end));
127
+ --bf-single-line-row-in-box-padding-block-start: ${bodySelectedStartNudge};
128
+ --bf-single-line-row-in-box-padding-block-end: max(0rem, calc(var(--bf-single-line-row-block-size) - ${bodyLineHeight} - var(--bf-single-line-row-in-box-padding-block-start)));
129
+ --bf-single-line-row-visual-offset: ${alignedVisualStart(bodyLineHeight, "var(--bf-control-visual-size)", bodySelectedStartNudge)};
130
+ /* Auxiliary surfaces may opt into a host-owned nested composition. The
131
+ shorter line and capped symmetric padding fit their complete paint inside
132
+ the host body line without introducing a second row rhythm. */
133
+ --bf-nested-auxiliary-line-height: max(1em, calc(var(--bf-body-line-height) - var(--bf-baseline)));
134
+ --bf-nested-auxiliary-padding-block: min(var(--bf-single-line-row-padding-block), max(0rem, calc((var(--bf-body-line-height) - var(--bf-nested-auxiliary-line-height)) / 2)));
115
135
  --bf-slider-track-size: calc(var(--bf-baseline) * 0.25);
116
- --bf-slider-row-block-size: max(var(--bf-control-box-size-compact), calc(${bodySelectedStartNudge} + ${bodyLineHeight} + ${bodySelectedEndNudge}));
136
+ --bf-slider-row-block-size: var(--bf-single-line-row-block-size);
117
137
  --bf-slider-track-offset: ${alignedVisualStart(bodyLineHeight, "var(--bf-slider-track-size)", bodySelectedStartNudge)};
118
138
  --bf-table-row-border-size: var(--bf-border-width);
119
- --bf-table-row-padding: ${bodySelectedStartNudge};
120
- --bf-table-row-content-size: calc(${bodyLineHeight} + (var(--bf-table-row-padding) * 2) + var(--bf-table-row-border-size));
121
- --bf-table-row-block-size: calc(var(--bf-table-row-content-size) + mod(calc(var(--bf-baseline) - mod(var(--bf-table-row-content-size), var(--bf-baseline))), var(--bf-baseline)));
122
- --bf-table-row-line-height: calc(var(--bf-table-row-block-size) - (var(--bf-table-row-padding) * 2) - var(--bf-table-row-border-size));
123
- --bf-switch-row-block-size: calc(${bodySelectedStartNudge} + ${bodyLineHeight} + ${bodySelectedEndNudge});
124
- --bf-switch-track-offset: ${alignedVisualStart(bodyLineHeight, "var(--bf-control-visual-size)", bodySelectedStartNudge)};
125
- --bf-tick-row-block-size: max(var(--bf-control-box-size-compact), calc(${bodySelectedStartNudge} + ${bodyLineHeight} + ${bodySelectedEndNudge}));
126
- --bf-tick-box-offset: ${alignedVisualStart(bodyLineHeight, "var(--bf-control-visual-size)", bodySelectedStartNudge)};
127
- --bf-tick-label-offset: calc(var(--bf-control-visual-size) + var(--bf-control-inline-padding-field));
128
- --bf-radio-dot-size: calc(var(--bf-control-visual-size) * 0.375);
139
+ --bf-table-row-padding-block-start: var(--bf-single-line-row-in-box-padding-block-start);
140
+ --bf-table-row-block-size: var(--bf-single-line-row-block-size);
141
+ --bf-table-row-padding-block-end: max(0rem, calc(var(--bf-table-row-block-size) - ${bodyLineHeight} - var(--bf-table-row-padding-block-start) - var(--bf-table-row-border-size)));
142
+ --bf-table-row-line-height: ${bodyLineHeight};
143
+ --bf-switch-track-offset: var(--bf-single-line-row-visual-offset);
144
+ --bf-tick-box-offset: var(--bf-single-line-row-visual-offset);
145
+ --bf-leading-mark-size: var(--bf-control-visual-size);
146
+ --bf-leading-mark-gap: var(--bf-component-inline-inset-field);
147
+ --bf-leading-mark-offset: calc(var(--bf-leading-mark-size) + var(--bf-leading-mark-gap));
148
+ --bf-leading-mark-group-inset: calc(var(--bf-component-inline-inset-continuation) - var(--bf-leading-mark-offset));
149
+ --bf-tick-label-offset: var(--bf-leading-mark-offset);
150
+ --bf-radio-dot-size: calc((var(--bf-control-visual-size) * 0.375) + var(--bf-border-width));
151
+ --bf-list-marker-dot-size: calc(var(--bf-border-width) * 4);
129
152
  --bf-app-drawer-width-icon: 2rem;
130
153
  --bf-app-drawer-width-small: 15rem;
131
154
  --bf-app-drawer-width-small-max: 20rem;
@@ -137,7 +160,9 @@ ${componentAlignmentVars(components)} /* Action surfaces keep comfortable comma
137
160
  --bf-app-aside-width-max: var(--bf-app-drawer-width-medium-max);
138
161
  --bf-app-navigation-width: 15rem;
139
162
  --bf-app-navigation-width-collapsed: 3rem;
140
- --bf-side-navigation-icon-optical-offset-block: 0.1875rem;
163
+ --bf-icon-label-optical-offset-block: 0.1875rem;
164
+ --bf-disclosure-icon-optical-offset-block: var(--bf-icon-label-optical-offset-block);
165
+ --bf-side-navigation-icon-optical-offset-block: var(--bf-icon-label-optical-offset-block);
141
166
  --bf-side-navigation-icon-gap: 0.625rem;
142
167
  --bf-navigation-bar-min-block-size: calc(var(--bf-baseline) * 6);
143
168
  --bf-authoring-accent: #f6b73c;
@@ -150,9 +175,10 @@ ${componentAlignmentVars(components)} /* Action surfaces keep comfortable comma
150
175
  --bf-authoring-accent-focus-ring: rgba(246, 183, 60, 0.55);
151
176
  --bf-application-resize-handle-active: var(--bf-authoring-accent-strong);
152
177
  --bf-application-resize-handle-focus-ring: var(--bf-authoring-accent-focus-ring);
153
- --bf-top-navigation-link-padding-inline: var(--bf-control-inline-padding-action);
154
- --bf-top-navigation-end-slot-inline-size: calc(1rem + var(--bf-control-inline-padding-field));
155
- --bf-top-navigation-search-toggle-inline-size: calc(1rem + (var(--bf-control-inline-padding-field) * 2));
178
+ --bf-control-inline-padding-action-bordered: max(0rem, calc(var(--bf-component-inline-inset-action) - var(--bf-border-width)));
179
+ --bf-top-navigation-link-padding-inline: var(--bf-component-inline-inset-action);
180
+ --bf-top-navigation-end-slot-inline-size: calc(1rem + var(--bf-component-inline-inset-field));
181
+ --bf-top-navigation-search-toggle-inline-size: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
156
182
  --bf-top-navigation-link-padding-block: max(var(--bf-body-nudge-start), calc(var(--bf-baseline) * 1.5));
157
183
  --bf-top-navigation-search-max-inline-size: 20rem;
158
184
  --bf-top-navigation-logo-tag-inline-size: 1.375rem;
@@ -161,18 +187,18 @@ ${componentAlignmentVars(components)} /* Action surfaces keep comfortable comma
161
187
  --bf-top-navigation-logo-tag-gap: 0.25rem;
162
188
  --bf-top-navigation-logo-icon-bottom-offset: 0.375rem;
163
189
  --bf-top-navigation-logo-icon-optical-offset-inline: -0.0125rem;
164
- --bf-navigation-brand-title-optical-offset-block: 0rem;
190
+ --bf-navigation-brand-line-center-block: calc(var(--bf-top-navigation-logo-tag-block-size) - var(--bf-top-navigation-logo-icon-bottom-offset) - (var(--bf-top-navigation-logo-icon-size) / 2));
191
+ --bf-navigation-brand-block-size: calc(var(--bf-navigation-brand-line-center-block) * 2);
165
192
  --bf-icon-size-default: 1rem;
166
193
  --bf-icon-size-medium: 2.5rem;
167
194
  --bf-icon-size-large: 4rem;
168
195
  --bf-icon-size-x-large: 4.5rem;
169
196
  --bf-icon-size-xx-large: 6rem;
170
- --bf-leading-icon-size: calc(var(--bf-baseline) * 2);
171
- --bf-leading-icon-gap: calc(var(--bf-baseline) * 1);
172
- --bf-leading-icon-offset: ${alignedVisualStart(bodyLineHeight, "var(--bf-leading-icon-size)", bodySelectedStartNudge)};
173
- --bf-ui-chip-padding-inline: calc(${bodyLineHeight} * 0.4);
174
- --bf-ui-chip-padding-block: max(0rem, calc((var(--bf-control-inline-padding-action) * 0.25) - var(--bf-border-width)));
175
- --bf-ui-chip-block-size: calc(${bodyLineHeight} + (var(--bf-ui-chip-padding-block) * 2) + (var(--bf-border-width) * 2));
197
+ --bf-leading-icon-size: var(--bf-leading-mark-size);
198
+ --bf-leading-icon-gap: var(--bf-leading-mark-gap);
199
+ --bf-leading-icon-offset: var(--bf-single-line-row-visual-offset);
200
+ --bf-ui-chip-padding-inline: var(--bf-component-inline-inset-field);
201
+ --bf-ui-chip-radius: 999rem;
176
202
  --bf-ui-badge-padding-inline: calc(${bodyLineHeight} * 0.25);
177
203
  --bf-ui-badge-overhang: calc(var(--bf-ui-badge-padding-inline) * -0.75);
178
204
  --bf-grid-max-inline-size: var(--bf-content-max-width);
@@ -189,6 +215,7 @@ ${componentAlignmentVars(components)} /* Action surfaces keep comfortable comma
189
215
  --bf-application-navigation-width-collapsed: var(--bf-app-navigation-width-collapsed);
190
216
  ${foundryComponentColorVars("light")}
191
217
  --bf-ui-icon-chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.25 6.25 8 10l3.75-3.75'/%3E%3C/svg%3E");
218
+ --bf-ui-icon-number-stepper: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.25 5.75 8 2l3.75 3.75M4.25 10.25 8 14l3.75-3.75'/%3E%3C/svg%3E");
192
219
  --bf-ui-icon-close: url("data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.25 4.25 11.75 11.75M11.75 4.25 4.25 11.75' fill='none' stroke='%23111' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
193
220
  --bf-ui-icon-error-grey: url("data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 1.52588e-05C12.4183 1.52588e-05 16 3.58174 16 8.00002C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8.00002C0 3.58174 3.58172 1.52588e-05 8 1.52588e-05ZM10.2821 4.63808L11.3427 5.69874L9.05007 7.99008L11.3427 10.2821L10.2821 11.3427L7.99007 9.05008L5.69873 11.3427L4.63807 10.2821L6.92907 7.99008L4.63807 5.69874L5.69873 4.63808L7.99007 6.92908L10.2821 4.63808ZM1.5 8.00002C1.5 4.41016 4.41015 1.50002 8 1.50002C11.5899 1.50002 14.5 4.41016 14.5 8.00002C14.5 11.5899 11.5899 14.5 8 14.5C4.41015 14.5 1.5 11.5899 1.5 8.00002Z' fill='%23111' fill-rule='evenodd'/%3E%3C/svg%3E");
194
221
  --bf-ui-icon-search: url("data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.964 1a5.964 5.964 0 014.709 9.623l4.303 4.305-1.06 1.06-4.306-4.305A5.964 5.964 0 116.963 1zm0 1.5a4.464 4.464 0 100 8.927 4.464 4.464 0 000-8.927z' fill='%23111' fill-rule='nonzero'/%3E%3C/svg%3E");
@@ -222,16 +249,13 @@ ${(themeSurfaces ?? []).map(surface => {
222
249
  const inputBlockPadding = bodySurface && parseRemValue(bodySurface.nudgeTop) > 0
223
250
  ? bodySurface.nudgeTop
224
251
  : surfaceComponents.controlBlockPadding;
225
- const tableRowPadding = bodySurface && parseRemValue(bodySurface.nudgeTop) > 0
226
- ? bodySurface.nudgeTop
227
- : surfaceComponents.controlCompactBlockPadding;
228
- return `:where(.bf-theme.${surface.className}) {\n --bf-control-baseline-reserve: 0rem;\n --bf-input-block-padding: ${inputBlockPadding};\n --bf-button-block-padding: ${inputBlockPadding};\n --bf-table-row-padding: ${tableRowPadding};\n${componentAlignmentVars(surfaceComponents)}\n}\n`;
252
+ return `:where(.bf-theme.${surface.className}) {\n --bf-input-block-padding: ${inputBlockPadding};\n --bf-button-block-padding: ${inputBlockPadding};\n${componentAlignmentVars(surfaceComponents)}\n}\n`;
229
253
  }).join("\n")}
230
254
 
231
- :where(.bf-theme.is-dark),
232
255
  :where(.bf-theme.is-dark) {
233
256
  ${foundryComponentColorVars("dark")}
234
257
  --bf-ui-icon-chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.25 6.25 8 10l3.75-3.75'/%3E%3C/svg%3E");
258
+ --bf-ui-icon-number-stepper: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.25 5.75 8 2l3.75 3.75M4.25 10.25 8 14l3.75-3.75'/%3E%3C/svg%3E");
235
259
  --bf-ui-icon-close: url("data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.25 4.25 11.75 11.75M11.75 4.25 4.25 11.75' fill='none' stroke='%23fff' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
236
260
  --bf-ui-icon-error-grey: url("data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 1.52588e-05C12.4183 1.52588e-05 16 3.58174 16 8.00002C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8.00002C0 3.58174 3.58172 1.52588e-05 8 1.52588e-05ZM10.2821 4.63808L11.3427 5.69874L9.05007 7.99008L11.3427 10.2821L10.2821 11.3427L7.99007 9.05008L5.69873 11.3427L4.63807 10.2821L6.92907 7.99008L4.63807 5.69874L5.69873 4.63808L7.99007 6.92908L10.2821 4.63808ZM1.5 8.00002C1.5 4.41016 4.41015 1.50002 8 1.50002C11.5899 1.50002 14.5 4.41016 14.5 8.00002C14.5 11.5899 11.5899 14.5 8 14.5C4.41015 14.5 1.5 11.5899 1.5 8.00002Z' fill='%23fff' fill-rule='evenodd'/%3E%3C/svg%3E");
237
261
  --bf-ui-icon-search: url("data:image/svg+xml,%3Csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.964 1a5.964 5.964 0 014.709 9.623l4.303 4.305-1.06 1.06-4.306-4.305A5.964 5.964 0 116.963 1zm0 1.5a4.464 4.464 0 100 8.927 4.464 4.464 0 000-8.927z' fill='%23fff' fill-rule='nonzero'/%3E%3C/svg%3E");
@@ -315,6 +339,10 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
315
339
  grid-template-columns: minmax(0, 1fr);
316
340
  }
317
341
 
342
+ :where(.bf-theme) :where(.bf-field.is-range.is-stacked) > :where(.bf-control, .bf-form-help) {
343
+ grid-column: 1;
344
+ }
345
+
318
346
  :where(.bf-theme) :where(.bf-field.is-range.is-stacked) > :where(.bf-control) {
319
347
  min-inline-size: 0;
320
348
  }
@@ -332,7 +360,7 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
332
360
  margin: 0;
333
361
  min-inline-size: 0;
334
362
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
335
- padding-inline: var(--bf-panel-padding-inline);
363
+ padding-inline: var(--bf-component-inline-inset-continuation);
336
364
  padding-block-start: var(--bf-panel-padding-block);
337
365
  }
338
366
 
@@ -353,13 +381,36 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
353
381
  max-inline-size: 100%;
354
382
  min-inline-size: 0;
355
383
  margin-bottom: ${inputMarginBottom};
356
- ${controlPadding(inputBlockPaddingVar)} padding-inline: var(--bf-control-inline-padding-field);
384
+ ${controlPadding(inputBlockPaddingVar)} padding-inline: var(--bf-component-inline-inset-field);
357
385
  }
358
386
 
359
- :where(.bf-theme) :where(input[type='color'].bf-color-input) {
387
+ :where(.bf-theme) :where(.bf-color-control) {
388
+ display: grid;
389
+ grid-template-areas: "color-control";
360
390
  inline-size: 4rem;
361
- min-block-size: var(--bf-control-box-size);
362
- padding: calc(var(--bf-baseline) * 0.5);
391
+ }
392
+
393
+ /* Native color inputs do not expose a body-text line box. This invisible
394
+ metric strut gives their wrapper the same natural padding/border/margin
395
+ construction as every textual control, including under browser zoom. */
396
+ :where(.bf-theme) :where(.bf-color-control)::before {
397
+ border-block: var(--bf-border-width) solid transparent;
398
+ content: "\\00a0";
399
+ grid-area: color-control;
400
+ line-height: var(--bf-body-line-height);
401
+ margin-bottom: var(--bf-single-line-row-margin-block-end);
402
+ padding-block: var(--bf-single-line-row-padding-block);
403
+ visibility: hidden;
404
+ }
405
+
406
+ :where(.bf-theme) :where(.bf-color-control) > :where(input[type='color'].bf-color-input) {
407
+ align-self: stretch;
408
+ block-size: auto;
409
+ grid-area: color-control;
410
+ inline-size: 100%;
411
+ margin-bottom: var(--bf-single-line-row-margin-block-end);
412
+ min-block-size: 0;
413
+ padding: var(--bf-border-width);
363
414
  }
364
415
 
365
416
  :where(.bf-theme) :where(.bf-input, input[type='text'], input[type='number'], input[type='search'], input[type='password'], input[type='email'], input[type='url'], textarea, select):hover {
@@ -372,8 +423,8 @@ ${controlPadding(inputBlockPaddingVar)} padding-inline: var(--bf-control-inline
372
423
 
373
424
  :where(.bf-theme) :where(.bf-input, input[type='text'], input[type='number'], input[type='search'], input[type='password'], input[type='email'], input[type='url'], textarea, select):focus-visible {
374
425
  background-color: var(--bf-color-background-active);
375
- outline: 2px solid var(--bf-color-focus);
376
- outline-offset: 2px;
426
+ outline: 0.125rem solid var(--bf-color-focus);
427
+ outline-offset: 0.125rem;
377
428
  }
378
429
 
379
430
  :where(.bf-theme) :where(.bf-input, input[type='text'], input[type='number'], input[type='search'], input[type='password'], input[type='email'], input[type='url'], textarea, select):disabled {
@@ -395,13 +446,13 @@ ${controlPadding(inputBlockPaddingVar)} padding-inline: var(--bf-control-inline
395
446
  :where(.bf-theme) :where(input[type='file']) {
396
447
  ${typeStyles(body, { includeCase: false })} background: transparent;
397
448
  border: 0 solid transparent;
398
- border-bottom: var(--bf-border-width) solid var(--bf-color-border-default);
399
- border-top: var(--bf-border-width) solid transparent;
449
+ box-shadow: inset 0 calc(var(--bf-border-width) * -1) 0 var(--bf-color-border-default);
400
450
  color: var(--bf-color-text-default);
401
451
  margin-bottom: ${inputMarginBottom};
402
452
  max-inline-size: 100%;
403
453
  min-inline-size: 0;
404
- ${controlPadding(inputBlockPaddingVar)} padding-inline: 0;
454
+ padding-block: 0;
455
+ padding-inline: 0;
405
456
  width: 100%;
406
457
  }
407
458
 
@@ -413,8 +464,9 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
413
464
  color: var(--bf-color-text-default);
414
465
  cursor: pointer;
415
466
  margin-inline-end: var(--bf-field-gap);
416
- min-block-size: var(--bf-control-box-size-compact);
417
- ${controlPadding(controlCompactBlockPaddingVar)} padding-inline: var(--bf-control-inline-padding-action);
467
+ min-block-size: 0;
468
+ padding-block: var(--bf-single-line-row-padding-block);
469
+ padding-inline: var(--bf-control-inline-padding-action-bordered);
418
470
  }
419
471
 
420
472
  :where(.bf-theme) :where(input[type='file'])::file-selector-button:hover {
@@ -423,16 +475,31 @@ ${controlPadding(controlCompactBlockPaddingVar)} padding-inline: var(--bf-contr
423
475
 
424
476
  :where(.bf-theme) :where(select) {
425
477
  background-image: var(--bf-ui-icon-chevron-down);
426
- background-position: right var(--bf-control-inline-padding-field) center;
478
+ background-position: right var(--bf-component-inline-inset-field) center;
427
479
  background-repeat: no-repeat;
428
480
  background-size: 1rem 1rem;
429
- padding-inline-end: calc(var(--bf-control-inline-padding-field) * 2.5);
481
+ overflow: hidden;
482
+ padding-inline-end: calc(var(--bf-component-inline-inset-field) * 2.5);
483
+ text-overflow: ellipsis;
484
+ white-space: nowrap;
430
485
  }
431
486
 
432
487
  :where(.bf-theme) :where(input[type='number'], .bf-slider-input) {
433
488
  font-variant-numeric: tabular-nums;
434
489
  }
435
490
 
491
+ /* Number fields retain their native input semantics and keyboard stepping,
492
+ while one field-owned background paints the compact pair. Sharing select's
493
+ 1rem canvas and end position avoids a second browser-reserved spin slot. */
494
+ :where(.bf-theme) :where(input[type='number']) {
495
+ appearance: textfield;
496
+ background-image: var(--bf-ui-icon-number-stepper);
497
+ background-position: right var(--bf-component-inline-inset-field) center;
498
+ background-repeat: no-repeat;
499
+ background-size: 1rem 1rem;
500
+ padding-inline-end: calc(var(--bf-component-inline-inset-field) * 2.5);
501
+ }
502
+
436
503
  :where(.bf-theme) :where(.bf-slider-input) {
437
504
  flex: 0 1 5rem;
438
505
  inline-size: min(100%, 5rem);
@@ -444,12 +511,14 @@ ${controlPadding(controlCompactBlockPaddingVar)} padding-inline: var(--bf-contr
444
511
 
445
512
  :where(.bf-theme) :where(input[type='number'])::-webkit-inner-spin-button,
446
513
  :where(.bf-theme) :where(input[type='number'])::-webkit-outer-spin-button {
514
+ appearance: none;
447
515
  margin: 0;
448
516
  }
449
517
 
450
518
  :where(.bf-theme) :where(.bf-checkbox, .bf-radio) {
519
+ display: grid;
451
520
  margin: 0;
452
- min-block-size: var(--bf-tick-row-block-size);
521
+ padding-inline-start: var(--bf-leading-mark-group-inset);
453
522
  position: relative;
454
523
  }
455
524
 
@@ -465,12 +534,11 @@ ${controlPadding(controlCompactBlockPaddingVar)} padding-inline: var(--bf-contr
465
534
 
466
535
  :where(.bf-theme) :where(.bf-checkbox-label, .bf-radio-label) {
467
536
  ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-default);
537
+ border-block: var(--bf-border-width) solid transparent;
468
538
  cursor: pointer;
469
539
  display: block;
470
- margin-bottom: 0;
471
- min-block-size: var(--bf-tick-row-block-size);
472
- padding-block-end: ${bodySelectedEndNudge};
473
- padding-block-start: ${bodySelectedStartNudge};
540
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
541
+ padding-block: var(--bf-single-line-row-padding-block);
474
542
  padding-inline-start: var(--bf-tick-label-offset);
475
543
  position: relative;
476
544
  }
@@ -501,7 +569,7 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-default)
501
569
  border-left: calc(var(--bf-border-width) * 2) solid var(--bf-color-background-default);
502
570
  inline-size: calc(var(--bf-control-visual-size) * 0.6);
503
571
  inset-inline-start: calc(var(--bf-control-visual-size) * 0.2);
504
- inset-block-start: calc(var(--bf-tick-box-offset) + (var(--bf-control-visual-size) * 0.18));
572
+ inset-block-start: calc(var(--bf-tick-box-offset) + (var(--bf-control-visual-size) * 0.18) + (var(--bf-border-width) * 2));
505
573
  opacity: 0;
506
574
  transform: rotate(-45deg);
507
575
  }
@@ -539,20 +607,19 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-default)
539
607
  }
540
608
 
541
609
  :where(.bf-theme) :where(.bf-checkbox-input:focus-visible + .bf-checkbox-label)::before {
542
- outline: 2px solid var(--bf-color-focus);
543
- outline-offset: 2px;
610
+ outline: 0.125rem solid var(--bf-color-focus);
611
+ outline-offset: 0.125rem;
544
612
  }
545
613
 
546
614
  :where(.bf-theme) :where(.bf-radio-input:focus-visible + .bf-radio-label)::before {
547
- outline: 2px solid var(--bf-color-focus);
548
- outline-offset: 2px;
615
+ outline: 0.125rem solid var(--bf-color-focus);
616
+ outline-offset: 0.125rem;
549
617
  }
550
618
 
551
619
  :where(.bf-theme) :where(.bf-switch) {
552
620
  align-items: flex-start;
553
621
  display: inline-flex;
554
622
  gap: var(--bf-field-gap);
555
- min-block-size: var(--bf-switch-row-block-size);
556
623
  position: relative;
557
624
  }
558
625
 
@@ -601,8 +668,8 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-default)
601
668
  }
602
669
 
603
670
  :where(.bf-theme) :where(.bf-switch-input:focus-visible + .bf-switch-slider) {
604
- outline: 2px solid var(--bf-color-focus);
605
- outline-offset: 2px;
671
+ outline: 0.125rem solid var(--bf-color-focus);
672
+ outline-offset: 0.125rem;
606
673
  }
607
674
 
608
675
  :where(.bf-theme) :where(.bf-switch-input:disabled + .bf-switch-slider) {
@@ -611,19 +678,20 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-default)
611
678
 
612
679
  :where(.bf-theme) :where(.bf-switch-label) {
613
680
  ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-default);
681
+ border-block: var(--bf-border-width) solid transparent;
614
682
  cursor: pointer;
615
683
  display: inline-block;
616
- margin: 0 0 var(--bf-body-margin-bottom);
617
- padding-block-end: 0;
618
- padding-block-start: ${bodySelectedStartNudge};
684
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
685
+ padding-block: var(--bf-single-line-row-padding-block);
619
686
  }
620
687
 
621
688
  :where(.bf-theme) :where(.bf-validation-message) {
622
- ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
623
- margin: 0 0 var(--bf-body-margin-bottom);
624
- padding-block-end: 0;
625
- padding-block-start: ${bodySelectedStartNudge};
626
- padding-inline-start: calc(var(--bf-control-visual-size) + var(--bf-field-gap));
689
+ ${typeStyles(body, { includeCase: false })} border-block: var(--bf-border-width) solid transparent;
690
+ color: var(--bf-color-text-muted);
691
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
692
+ margin-inline-start: var(--bf-leading-mark-group-inset);
693
+ padding-block: var(--bf-single-line-row-padding-block);
694
+ padding-inline-start: var(--bf-leading-mark-offset);
627
695
  position: relative;
628
696
  }
629
697
 
@@ -742,6 +810,15 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
742
810
  padding: 0;
743
811
  }
744
812
 
813
+ /* A composite slider's numeric field owns the shared occupied row. Stretching
814
+ the track within that real sibling height avoids a second nominal-height
815
+ calculation that can diverge when rem borders are rasterised under zoom. */
816
+ :where(.bf-theme) :where(.bf-slider:not(.is-stacked)):not(:where(.bf-field.is-range.is-stacked) :where(.bf-slider)) > :where(input[type='range']) {
817
+ align-self: stretch;
818
+ block-size: auto;
819
+ margin-block: 0;
820
+ }
821
+
745
822
  :where(.bf-theme) :where(input[type='range']):focus:not(:focus-visible) {
746
823
  outline: none;
747
824
  }
@@ -758,7 +835,7 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
758
835
  border: var(--bf-border-width) solid var(--bf-color-border-high-contrast);
759
836
  block-size: var(--bf-control-visual-size);
760
837
  border-radius: 50%;
761
- box-shadow: 0 0 calc(var(--bf-control-visual-size) * 0.25) 1px rgba(0, 0, 0, 0.2);
838
+ box-shadow: 0 0 calc(var(--bf-control-visual-size) * 0.25) 0.0625rem rgba(0, 0, 0, 0.2);
762
839
  inline-size: var(--bf-control-visual-size);
763
840
  margin-top: calc((var(--bf-slider-track-size) - var(--bf-control-visual-size)) / 2);
764
841
  }
@@ -784,7 +861,7 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
784
861
  border: var(--bf-border-width) solid var(--bf-color-border-high-contrast);
785
862
  block-size: var(--bf-control-visual-size);
786
863
  border-radius: 50%;
787
- box-shadow: 0 0 calc(var(--bf-control-visual-size) * 0.25) 1px rgba(0, 0, 0, 0.2);
864
+ box-shadow: 0 0 calc(var(--bf-control-visual-size) * 0.25) 0.0625rem rgba(0, 0, 0, 0.2);
788
865
  inline-size: var(--bf-control-visual-size);
789
866
  }
790
867
 
@@ -853,11 +930,11 @@ ${listCss({ bodyTypeStyles })}
853
930
  ${typeStyles(body, { includeCase: false })} background: var(--bf-color-background-alt);
854
931
  color: var(--bf-color-link-default);
855
932
  display: block;
856
- left: -999px;
933
+ left: -62.4375rem;
857
934
  max-inline-size: calc(100vw - var(--bf-baseline));
858
935
  position: absolute;
859
936
  text-decoration: none;
860
- top: -999px;
937
+ top: -62.4375rem;
861
938
  }
862
939
 
863
940
  :where(.bf-theme) :where(.bf-skip-link:hover) {
@@ -866,7 +943,7 @@ ${typeStyles(body, { includeCase: false })} background: var(--bf-color-backgrou
866
943
 
867
944
  :where(.bf-theme) :where(.bf-skip-link:focus, .bf-skip-link:focus-visible) {
868
945
  left: calc(var(--bf-baseline) * 0.5);
869
- outline: 2px solid var(--bf-color-focus);
946
+ outline: 0.125rem solid var(--bf-color-focus);
870
947
  outline-offset: 0;
871
948
  padding-block: calc(var(--bf-baseline) * 1.5);
872
949
  padding-inline: calc(var(--bf-baseline) * 1.5);
@@ -884,9 +961,6 @@ ${tableCss({
884
961
  ${chipBadgeStatusCss({
885
962
  bodyCaseTypeStyles: typeStyles(body),
886
963
  bodyLineHeight,
887
- bodySelectedStartNudge,
888
- h5SelectedEndNudge,
889
- h5SelectedStartNudge,
890
964
  bodyTypeStyles,
891
965
  })}
892
966
 
@@ -900,7 +974,7 @@ ${chipBadgeStatusCss({
900
974
  margin: 0;
901
975
  padding: 0;
902
976
  position: relative;
903
- text-indent: -9999px;
977
+ text-indent: -624.9375rem;
904
978
  }
905
979
 
906
980
  :where(.bf-theme) :where(.bf-chip-dismiss) {
@@ -912,7 +986,7 @@ ${chipBadgeStatusCss({
912
986
  :where(.bf-theme) :where(.bf-chip-dismiss, .bf-search-box-reset, .bf-search-and-filter-clear)::before,
913
987
  :where(.bf-theme) :where(.bf-chip-dismiss, .bf-search-box-reset, .bf-search-and-filter-clear)::after {
914
988
  background: currentColor;
915
- block-size: 2px;
989
+ block-size: 0.125rem;
916
990
  content: "";
917
991
  inline-size: 0.75rem;
918
992
  left: 50%;
@@ -933,7 +1007,6 @@ ${searchBoxAndFilterCss({
933
1007
  bodySelectedStartNudge,
934
1008
  bodyTypeStyles,
935
1009
  buttonBlockPaddingVar,
936
- h6TypeStyles,
937
1010
  inputMarginBottom,
938
1011
  })}
939
1012
 
@@ -946,8 +1019,7 @@ ${legacyNavigationCss({
946
1019
  bodySemiboldTypeStyles: typeStyles(body, { fontWeight: 600, includeCase: false }),
947
1020
  bodyTypeStyles,
948
1021
  buttonMarginBottom,
949
- buttonPadding,
950
- compactButtonPadding: controlPadding(controlCompactBlockPaddingVar, "0rem")
1022
+ buttonPadding
951
1023
  })}
952
1024
 
953
1025
  :where(.bf-theme) :where(.bf-contextual-menu, .bf-contextual-menu.is-left, .bf-contextual-menu.is-center) {
@@ -960,7 +1032,7 @@ ${legacyNavigationCss({
960
1032
  :where(.bf-theme) :where(.bf-contextual-menu-dropdown) {
961
1033
  background: var(--bf-color-background-default);
962
1034
  border: var(--bf-border-width) solid var(--bf-color-border-default);
963
- box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28);
1035
+ box-shadow: 0 0.75rem 2rem rgba(0, 0, 0, 0.28);
964
1036
  display: none;
965
1037
  list-style: none;
966
1038
  margin: 0;
@@ -994,7 +1066,7 @@ ${legacyNavigationCss({
994
1066
  }
995
1067
 
996
1068
  :where(.bf-theme) :where(.bf-contextual-menu-group) + :where(.bf-contextual-menu-group) {
997
- box-shadow: inset 0 1px 0 var(--bf-color-border-default);
1069
+ box-shadow: inset 0 0.0625rem 0 var(--bf-color-border-default);
998
1070
  }
999
1071
 
1000
1072
  :where(.bf-theme) :where(.bf-contextual-menu-link) {
@@ -1006,8 +1078,9 @@ ${typeStyles(body, { includeCase: false })} background: transparent;
1006
1078
  display: block;
1007
1079
  margin: 0;
1008
1080
  overflow: hidden;
1009
- padding-block: var(--bf-control-block-padding-compact);
1010
- padding-inline: var(--bf-panel-padding-inline);
1081
+ padding-block-end: var(--bf-single-line-row-in-box-padding-block-end);
1082
+ padding-block-start: var(--bf-single-line-row-in-box-padding-block-start);
1083
+ padding-inline: var(--bf-component-inline-inset-action);
1011
1084
  text-align: left;
1012
1085
  text-decoration: none;
1013
1086
  text-overflow: ellipsis;
@@ -1033,8 +1106,8 @@ ${typeStyles(body, { includeCase: false })} background: transparent;
1033
1106
  }
1034
1107
 
1035
1108
  :where(.bf-theme) :where(.bf-contextual-menu-link):focus-visible {
1036
- outline: 2px solid var(--bf-color-focus);
1037
- outline-offset: -2px;
1109
+ outline: 0.125rem solid var(--bf-color-focus);
1110
+ outline-offset: -0.125rem;
1038
1111
  }
1039
1112
 
1040
1113
  :where(.bf-theme) :where(.bf-contextual-menu-link.is-disabled, .bf-contextual-menu-link[disabled]) {
@@ -1057,7 +1130,7 @@ ${typeStyles(body, { includeCase: false })} background: transparent;
1057
1130
 
1058
1131
  :where(.bf-theme) :where(.bf-tooltip-message) {
1059
1132
  ${typeStyles(body, { includeCase: false })} background-color: var(--bf-color-background-alt);
1060
- box-shadow: inset 0 0 0 var(--bf-border-width) var(--bf-color-border-default), 0 12px 32px rgba(0, 0, 0, 0.24);
1133
+ box-shadow: inset 0 0 0 var(--bf-border-width) var(--bf-color-border-default), 0 0.75rem 2rem rgba(0, 0, 0, 0.24);
1061
1134
  color: var(--bf-color-text-default);
1062
1135
  inline-size: max-content;
1063
1136
  left: 0;
@@ -1066,7 +1139,7 @@ ${typeStyles(body, { includeCase: false })} background-color: var(--bf-color-ba
1066
1139
  opacity: 0;
1067
1140
  padding-block-end: ${bodySelectedEndNudge};
1068
1141
  padding-block-start: ${bodySelectedStartNudge};
1069
- padding-inline: var(--bf-panel-padding-inline);
1142
+ padding-inline: var(--bf-component-inline-inset-continuation);
1070
1143
  pointer-events: none;
1071
1144
  position: absolute;
1072
1145
  top: 100%;
@@ -1202,7 +1275,7 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1202
1275
  justify-content: center;
1203
1276
  margin-bottom: ${buttonMarginBottom};
1204
1277
  min-inline-size: var(--bf-control-box-size);
1205
- ${controlPadding(buttonBlockPaddingVar)} padding-inline: var(--bf-control-inline-padding-action);
1278
+ ${controlPadding(buttonBlockPaddingVar)} padding-inline: var(--bf-control-inline-padding-action-bordered);
1206
1279
  text-align: center;
1207
1280
  text-decoration: none;
1208
1281
  }
@@ -1216,8 +1289,8 @@ ${controlPadding(buttonBlockPaddingVar)} padding-inline: var(--bf-control-inlin
1216
1289
  }
1217
1290
 
1218
1291
  :where(.bf-theme) :where(.bf-pagination-link:focus-visible, .bf-pagination-link.is-previous:focus-visible, .bf-pagination-link.is-next:focus-visible) {
1219
- outline: 2px solid var(--bf-color-focus);
1220
- outline-offset: 2px;
1292
+ outline: 0.125rem solid var(--bf-color-focus);
1293
+ outline-offset: 0.125rem;
1221
1294
  }
1222
1295
 
1223
1296
  :where(.bf-theme) :where(.bf-pagination-link.is-active, .bf-pagination-link[aria-current='page'], .bf-pagination-link[aria-current='true']) {
@@ -1291,14 +1364,15 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1291
1364
  appearance: none;
1292
1365
  background: transparent;
1293
1366
  border: 0;
1367
+ border-block: var(--bf-border-width) solid transparent;
1294
1368
  color: var(--bf-color-text-default);
1295
1369
  cursor: pointer;
1296
1370
  display: flex;
1297
1371
  gap: var(--bf-disclosure-gap);
1298
1372
  inline-size: 100%;
1299
1373
  justify-content: flex-start;
1300
- min-block-size: var(--bf-control-box-size);
1301
- padding-block: var(--bf-control-block-padding);
1374
+ margin-block-end: var(--bf-single-line-row-margin-block-end);
1375
+ padding-block: var(--bf-single-line-row-padding-block);
1302
1376
  padding-inline: 0;
1303
1377
  text-align: left;
1304
1378
  }
@@ -1308,8 +1382,8 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1308
1382
  }
1309
1383
 
1310
1384
  :where(.bf-theme) :where(.bf-accordion-tab):focus-visible {
1311
- outline: 2px solid var(--bf-color-focus);
1312
- outline-offset: 2px;
1385
+ outline: 0.125rem solid var(--bf-color-focus);
1386
+ outline-offset: 0.125rem;
1313
1387
  }
1314
1388
 
1315
1389
  :where(.bf-theme) :where(.bf-accordion-tab)::before {
@@ -1322,18 +1396,19 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1322
1396
  display: inline-block;
1323
1397
  flex: none;
1324
1398
  inline-size: var(--bf-disclosure-icon-inline-size);
1399
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block));
1325
1400
  transition: transform 120ms ease;
1326
1401
  }
1327
1402
 
1328
1403
  :where(.bf-theme) :where(.bf-accordion-tab[aria-expanded='false'])::before {
1329
- transform: rotate(-90deg);
1404
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block)) rotate(-90deg);
1330
1405
  }
1331
1406
 
1332
1407
  :where(.bf-theme) :where(.bf-accordion-panel) {
1333
1408
  margin: 0;
1334
1409
  overflow: hidden;
1335
1410
  padding-block-start: var(--bf-baseline);
1336
- padding-inline-start: calc(var(--bf-accordion-indent) + ${roleFontSizeVar("body", body.fontSize)} + var(--bf-baseline));
1411
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
1337
1412
  }
1338
1413
 
1339
1414
  :where(.bf-theme) :where(.bf-accordion-panel[aria-hidden='true']) {
@@ -1399,7 +1474,7 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1399
1474
  :where(.bf-theme) :where(.bf-modal-header, .bf-modal-body, .bf-modal-footer) {
1400
1475
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
1401
1476
  padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
1402
- padding-inline: var(--bf-panel-padding-inline);
1477
+ padding-inline: var(--bf-component-inline-inset-continuation);
1403
1478
  }
1404
1479
 
1405
1480
  :where(.bf-theme) :where(.bf-modal-header) {
@@ -1463,7 +1538,7 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
1463
1538
  :where(.bf-theme) :where(.bf-code-snippet-header) {
1464
1539
  align-items: start;
1465
1540
  background: var(--bf-color-background-active);
1466
- box-shadow: inset 0 -1px 0 var(--bf-color-border-default);
1541
+ box-shadow: inset 0 -0.0625rem 0 var(--bf-color-border-default);
1467
1542
  display: flex;
1468
1543
  flex-wrap: wrap;
1469
1544
  justify-content: space-between;
@@ -1480,7 +1555,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-default);
1480
1555
  margin: 0;
1481
1556
  overflow-wrap: anywhere;
1482
1557
  padding-block: var(--bf-panel-padding-block);
1483
- padding-inline: var(--bf-panel-padding-inline);
1558
+ padding-inline: var(--bf-component-inline-inset-continuation);
1484
1559
  }
1485
1560
 
1486
1561
  :where(.bf-theme) :where(.bf-code-snippet-dropdowns) {
@@ -1495,7 +1570,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-default);
1495
1570
  :where(.bf-theme) :where(.bf-code-snippet-header.is-stacked) :where(.bf-code-snippet-dropdowns) {
1496
1571
  justify-content: stretch;
1497
1572
  margin-inline-start: 0;
1498
- box-shadow: inset 0 1px 0 var(--bf-color-border-default);
1573
+ box-shadow: inset 0 0.0625rem 0 var(--bf-color-border-default);
1499
1574
  width: 100%;
1500
1575
  }
1501
1576
 
@@ -1509,12 +1584,12 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
1509
1584
  min-block-size: calc(${bodyLineHeight} + (var(--bf-panel-padding-block) * 2));
1510
1585
  min-inline-size: 0;
1511
1586
  padding-block: var(--bf-panel-padding-block);
1512
- padding-inline: var(--bf-panel-padding-inline);
1587
+ padding-inline: var(--bf-component-inline-inset-action);
1513
1588
  text-align: start;
1514
1589
  }
1515
1590
 
1516
1591
  :where(.bf-theme) :where(.bf-code-snippet-dropdown) + :where(.bf-code-snippet-dropdown) {
1517
- box-shadow: inset 1px 0 0 var(--bf-color-border-default);
1592
+ box-shadow: inset 0.0625rem 0 0 var(--bf-color-border-default);
1518
1593
  }
1519
1594
 
1520
1595
  :where(.bf-theme) :where(.bf-code-snippet-dropdown):focus:not(:focus-visible) {
@@ -1522,8 +1597,8 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
1522
1597
  }
1523
1598
 
1524
1599
  :where(.bf-theme) :where(.bf-code-snippet-dropdown):focus-visible {
1525
- outline: 2px solid var(--bf-color-focus);
1526
- outline-offset: -2px;
1600
+ outline: 0.125rem solid var(--bf-color-focus);
1601
+ outline-offset: -0.125rem;
1527
1602
  }
1528
1603
 
1529
1604
  :where(.bf-theme) :where(.bf-code-snippet-block, .bf-code-snippet-block.is-icon, .bf-code-snippet-block.is-numbered) {
@@ -1538,7 +1613,7 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
1538
1613
  min-inline-size: 0;
1539
1614
  overflow-x: auto;
1540
1615
  padding-block: var(--bf-panel-padding-block);
1541
- padding-inline: var(--bf-panel-padding-inline);
1616
+ padding-inline: var(--bf-component-inline-inset-continuation);
1542
1617
  tab-size: 2;
1543
1618
  white-space: pre;
1544
1619
  }
@@ -1554,14 +1629,14 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
1554
1629
 
1555
1630
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon) {
1556
1631
  cursor: copy;
1557
- padding-inline-start: calc(var(--bf-panel-padding-inline) + (var(--bf-baseline) * 3));
1632
+ padding-inline-start: calc(var(--bf-component-inline-inset-continuation) + (var(--bf-baseline) * 3));
1558
1633
  position: relative;
1559
1634
  }
1560
1635
 
1561
1636
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon)::before {
1562
1637
  ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1563
1638
  content: "$";
1564
- inset-inline-start: var(--bf-panel-padding-inline);
1639
+ inset-inline-start: var(--bf-component-inline-inset-continuation);
1565
1640
  inset-block-start: var(--bf-panel-padding-block);
1566
1641
  position: absolute;
1567
1642
  }
@@ -1576,7 +1651,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1576
1651
 
1577
1652
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon.is-copied) {
1578
1653
  background: color-mix(in srgb, var(--bf-color-background-alt) 78%, var(--bf-color-background-information-default));
1579
- box-shadow: inset 0 0 0 1px var(--bf-color-border-information);
1654
+ box-shadow: inset 0 0 0 0.0625rem var(--bf-color-border-information);
1580
1655
  }
1581
1656
 
1582
1657
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon):focus:not(:focus-visible) {
@@ -1584,8 +1659,8 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1584
1659
  }
1585
1660
 
1586
1661
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon):focus-visible {
1587
- outline: 2px solid var(--bf-color-focus);
1588
- outline-offset: -2px;
1662
+ outline: 0.125rem solid var(--bf-color-focus);
1663
+ outline-offset: -0.125rem;
1589
1664
  }
1590
1665
 
1591
1666
  :where(.bf-theme) :where(.bf-code-snippet-block.is-numbered) {
@@ -1647,6 +1722,32 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1647
1722
  z-index: 40;
1648
1723
  }
1649
1724
 
1725
+ /* A responsive application brand occupies the persistent bar only while the
1726
+ * full navigation brand is unavailable. The same public tagged-logo contract
1727
+ * is used in both locations; state CSS guarantees that only one copy is
1728
+ * visible and exposed at a time. */
1729
+ :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) :where(.bf-panel-header.is-navigation-brand) {
1730
+ align-items: start;
1731
+ column-gap: calc(var(--bf-baseline) * 2);
1732
+ padding-inline-end: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
1733
+ }
1734
+
1735
+ :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) {
1736
+ margin-block-end: calc(var(--bf-border-width) * -1);
1737
+ }
1738
+
1739
+ :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) :where(.bf-panel-header.is-navigation-brand) > :where(.bf-top-navigation-logo.is-canonical-tagged) {
1740
+ flex: 1 1 12rem;
1741
+ inline-size: auto;
1742
+ min-inline-size: 0;
1743
+ }
1744
+
1745
+ :where(.bf-theme) :where(.bf-application:has(> .bf-navigation:not(.is-collapsed)))
1746
+ > :where(.bf-navigation-bar.is-responsive)
1747
+ :where(.bf-top-navigation-logo) {
1748
+ visibility: hidden;
1749
+ }
1750
+
1650
1751
  :where(.bf-theme) :where(.bf-navigation) {
1651
1752
  grid-column: 1 / -1;
1652
1753
  grid-row: 1 / -1;
@@ -1693,7 +1794,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1693
1794
  }
1694
1795
 
1695
1796
  :where(.bf-theme) :where(.bf-navigation:not(.is-collapsed)) > :where(.bf-navigation-drawer) {
1696
- box-shadow: 0 24px 72px rgba(0, 0, 0, 0.38);
1797
+ box-shadow: 0 1.5rem 4.5rem rgba(0, 0, 0, 0.38);
1697
1798
  transform: translateX(0);
1698
1799
  visibility: visible;
1699
1800
  }
@@ -1703,10 +1804,10 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1703
1804
  }
1704
1805
 
1705
1806
  :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-label) {
1706
- block-size: 1px;
1807
+ block-size: 0.0625rem;
1707
1808
  clip-path: inset(50%);
1708
- inline-size: 1px;
1709
- max-inline-size: 1px;
1809
+ inline-size: 0.0625rem;
1810
+ max-inline-size: 0.0625rem;
1710
1811
  opacity: 0;
1711
1812
  overflow: hidden;
1712
1813
  pointer-events: none;
@@ -1724,8 +1825,8 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1724
1825
  padding-inline: calc(var(--bf-baseline) * 1.25);
1725
1826
  }
1726
1827
 
1727
- :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-list) {
1728
- border-bottom-color: transparent;
1828
+ :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-list)::after {
1829
+ content: none;
1729
1830
  }
1730
1831
 
1731
1832
  :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-item.is-title > .bf-side-navigation-link, .bf-side-navigation-item.is-title > .bf-side-navigation-text) {
@@ -1738,6 +1839,14 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1738
1839
  grid-template-rows: minmax(0, 1fr);
1739
1840
  }
1740
1841
 
1842
+ :where(.bf-theme) :where(.bf-application:has(> .bf-navigation)):has(> .bf-aside.is-pinned:not(.is-collapsed)) {
1843
+ grid-template-areas:
1844
+ "navigation-bar navigation-bar"
1845
+ "main aside";
1846
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--bf-application-aside-width));
1847
+ grid-template-rows: min-content minmax(0, 1fr);
1848
+ }
1849
+
1741
1850
  :where(.bf-theme) :where(.bf-main) {
1742
1851
  grid-area: main;
1743
1852
  min-block-size: 0;
@@ -1776,7 +1885,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1776
1885
  :where(.bf-theme) :where(.bf-aside.is-overlay, .bf-aside.is-drawer) {
1777
1886
  align-self: stretch;
1778
1887
  block-size: auto;
1779
- box-shadow: 0 24px 72px rgba(0, 0, 0, 0.38);
1888
+ box-shadow: 0 1.5rem 4.5rem rgba(0, 0, 0, 0.38);
1780
1889
  bottom: 0;
1781
1890
  grid-column: 1 / -1;
1782
1891
  grid-row: 1 / -1;
@@ -1866,14 +1975,14 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1866
1975
 
1867
1976
  :where(.bf-theme) :where(.bf-application-aside-resize-handle)::after {
1868
1977
  background: var(--bf-color-border-default);
1869
- border-radius: 999px;
1978
+ border-radius: 62.4375rem;
1870
1979
  content: "";
1871
1980
  inset-block: var(--bf-panel-padding-block);
1872
- inset-inline-start: calc(50% - 1px);
1981
+ inset-inline-start: calc(50% - 0.0625rem);
1873
1982
  opacity: 0.95;
1874
1983
  position: absolute;
1875
1984
  transition: background-color 120ms ease, opacity 120ms ease;
1876
- width: 2px;
1985
+ width: 0.125rem;
1877
1986
  }
1878
1987
 
1879
1988
  :where(.bf-theme) :where(.bf-application-aside-resize-handle):hover::after,
@@ -1883,8 +1992,8 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1883
1992
  }
1884
1993
 
1885
1994
  :where(.bf-theme) :where(.bf-application-aside-resize-handle):focus-visible {
1886
- outline: 2px solid var(--bf-application-resize-handle-focus-ring);
1887
- outline-offset: -2px;
1995
+ outline: 0.125rem solid var(--bf-application-resize-handle-focus-ring);
1996
+ outline-offset: -0.125rem;
1888
1997
  }
1889
1998
 
1890
1999
  @media (min-width: 64.75rem) {
@@ -1903,6 +2012,16 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1903
2012
  grid-template-columns: minmax(0, var(--bf-application-navigation-width)) minmax(0, 1fr) minmax(0, var(--bf-application-aside-width));
1904
2013
  }
1905
2014
 
2015
+ :where(.bf-theme) :where(.bf-application:has(> .bf-navigation:not(.is-collapsed))) > :where(.bf-navigation-bar.is-responsive) {
2016
+ block-size: 0;
2017
+ border: 0;
2018
+ min-block-size: 0;
2019
+ overflow: hidden;
2020
+ pointer-events: none;
2021
+ position: absolute;
2022
+ visibility: hidden;
2023
+ }
2024
+
1906
2025
  :where(.bf-theme) :where(.bf-application:has(> .bf-navigation.is-collapsed)) {
1907
2026
  --bf-application-navigation-width: var(--bf-application-navigation-width-collapsed);
1908
2027
  }