baseline-foundry 0.1.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +22 -7
  2. package/config/canonical-spacing.resolved.json +71 -0
  3. package/config/experiments/ibm-plex-engine-smoke.json +7 -6
  4. package/config/experiments/ubuntu-engine-smoke.json +7 -6
  5. package/config/foundation-theme.json +7 -6
  6. package/config/tiers/app.json +8 -9
  7. package/config/tiers/documentation.json +7 -8
  8. package/config/tiers/editorial.json +7 -8
  9. package/config/tiers/os.json +7 -8
  10. package/dist/application-layout.js +1 -1
  11. package/dist/build.d.ts +1 -0
  12. package/dist/build.js +98 -36
  13. package/dist/css-app-tier.js +4 -46
  14. package/dist/css-component-contracts.d.ts +7 -0
  15. package/dist/css-component-contracts.js +82 -0
  16. package/dist/css-components/application-geometry.d.ts +5 -0
  17. package/dist/css-components/application-geometry.js +31 -0
  18. package/dist/css-components/article-pagination.js +6 -5
  19. package/dist/css-components/button-actions.js +68 -4
  20. package/dist/css-components/cards-options.js +2 -2
  21. package/dist/css-components/chip-badge-status.d.ts +0 -1
  22. package/dist/css-components/chip-badge-status.js +37 -15
  23. package/dist/css-components/content-card.js +11 -10
  24. package/dist/css-components/control-geometry.d.ts +12 -0
  25. package/dist/css-components/control-geometry.js +22 -0
  26. package/dist/css-components/cta-figure-aspect.js +2 -2
  27. package/dist/css-components/document-navigation.js +28 -18
  28. package/dist/css-components/editorial-content.js +1 -1
  29. package/dist/css-components/icon.js +24 -2
  30. package/dist/css-components/interactive-feedback.js +27 -14
  31. package/dist/css-components/interactive-tables.js +9 -6
  32. package/dist/css-components/legacy-navigation.js +32 -25
  33. package/dist/css-components/list-tree.js +5 -5
  34. package/dist/css-components/list.js +17 -12
  35. package/dist/css-components/logo-media.js +2 -2
  36. package/dist/css-components/navigation-geometry.d.ts +5 -0
  37. package/dist/css-components/navigation-geometry.js +30 -0
  38. package/dist/css-components/nested-controls.d.ts +8 -0
  39. package/dist/css-components/nested-controls.js +37 -0
  40. package/dist/css-components/panel.js +12 -13
  41. package/dist/css-components/search-box-and-filter.d.ts +0 -1
  42. package/dist/css-components/search-box-and-filter.js +3 -3
  43. package/dist/css-components/sites-editorial-ports.js +8 -1
  44. package/dist/css-components/sites-foundation.js +2 -2
  45. package/dist/css-components/table.js +9 -1
  46. package/dist/css-components/tabs-choice-breadcrumbs.js +9 -9
  47. package/dist/css-components/tiered-list-equal-height-row.js +2 -2
  48. package/dist/css-components.js +99 -229
  49. package/dist/css.js +44 -1
  50. package/dist/dtcg-spacing.d.ts +40 -0
  51. package/dist/dtcg-spacing.js +163 -0
  52. package/dist/experiments/ibm-plex-engine-smoke/styles.css +557 -360
  53. package/dist/experiments/ibm-plex-engine-smoke/surfaces.json +182 -14
  54. package/dist/experiments/ibm-plex-engine-smoke/tokens.json +91 -7
  55. package/dist/index.d.ts +1 -0
  56. package/dist/presets/app-tier/styles.css +700 -494
  57. package/dist/presets/app-tier/surfaces.json +709 -29
  58. package/dist/presets/app-tier/tokens.json +178 -8
  59. package/dist/presets/prose/styles.css +699 -486
  60. package/dist/presets/prose/surfaces.json +709 -29
  61. package/dist/presets/prose/tokens.json +177 -7
  62. package/dist/styles.css +699 -486
  63. package/dist/surfaces.json +709 -29
  64. package/dist/tiers/app/styles.css +700 -494
  65. package/dist/tiers/app/surfaces.json +709 -29
  66. package/dist/tiers/app/tokens.json +178 -8
  67. package/dist/tiers/documentation/styles.css +699 -486
  68. package/dist/tiers/documentation/surfaces.json +709 -29
  69. package/dist/tiers/documentation/tokens.json +177 -7
  70. package/dist/tiers/editorial/styles.css +699 -486
  71. package/dist/tiers/editorial/surfaces.json +709 -29
  72. package/dist/tiers/editorial/tokens.json +177 -7
  73. package/dist/tiers/os/styles.css +699 -486
  74. package/dist/tiers/os/surfaces.json +709 -29
  75. package/dist/tiers/os/tokens.json +177 -7
  76. package/dist/tokens.json +177 -7
  77. package/dist/types.d.ts +13 -13
  78. package/dist/vanilla-theme-colors.js +5 -1
  79. package/docs/publishing.md +7 -1
  80. package/package.json +1 -1
@@ -1,10 +1,12 @@
1
1
  import { buttonActionsCss } from "./css-components/button-actions.js";
2
2
  import { articlePaginationCss } from "./css-components/article-pagination.js";
3
+ import { applicationGeometryCss } from "./css-components/application-geometry.js";
3
4
  import { cardsOptionsCss } from "./css-components/cards-options.js";
4
5
  import { chipBadgeStatusCss } from "./css-components/chip-badge-status.js";
5
6
  import { ctaFigureAspectCss } from "./css-components/cta-figure-aspect.js";
6
7
  import { controlRowCss } from "./css-components/control-row.js";
7
8
  import { contentCardCss } from "./css-components/content-card.js";
9
+ import { alignedVisualStart, controlGeometryCss } from "./css-components/control-geometry.js";
8
10
  import { documentNavigationCss } from "./css-components/document-navigation.js";
9
11
  import { editorialContentCss } from "./css-components/editorial-content.js";
10
12
  import { iconCss } from "./css-components/icon.js";
@@ -16,6 +18,8 @@ import { legacyNavigationCss } from "./css-components/legacy-navigation.js";
16
18
  import { linkedLogoSiteLayoutCss } from "./css-components/linked-logo-site-layout.js";
17
19
  import { logoMediaCss } from "./css-components/logo-media.js";
18
20
  import { navigationLayoutCss } from "./css-components/navigation-layout.js";
21
+ import { navigationGeometryCss } from "./css-components/navigation-geometry.js";
22
+ import { nestedControlsCss } from "./css-components/nested-controls.js";
19
23
  import { panelCss } from "./css-components/panel.js";
20
24
  import { searchBoxAndFilterCss } from "./css-components/search-box-and-filter.js";
21
25
  import { sitesFoundationCss } from "./css-components/sites-foundation.js";
@@ -26,10 +30,8 @@ import { tableCss } from "./css-components/table.js";
26
30
  import { tabSectionCss } from "./css-components/tab-section.js";
27
31
  import { tabsChoiceBreadcrumbsCss } from "./css-components/tabs-choice-breadcrumbs.js";
28
32
  import { tieredListEqualHeightRowCss } from "./css-components/tiered-list-equal-height-row.js";
33
+ import { componentContractsCss } from "./css-component-contracts.js";
29
34
  import { foundryComponentColorVars } from "./vanilla-theme-colors.js";
30
- function parseRemValue(rem) {
31
- return Number.parseFloat(rem.replace("rem", ""));
32
- }
33
35
  function roleFontFamilyVar(roleName, fallback) {
34
36
  return fallback ? `var(--bf-${roleName}-font-family, ${fallback})` : `var(--bf-${roleName}-font-family)`;
35
37
  }
@@ -67,34 +69,15 @@ function roleSelectedStartNudgeVar(roleName, fallback) {
67
69
  function roleSelectedEndNudgeVar(roleName, fallback) {
68
70
  return fallback ? `var(--bf-${roleName}-nudge-end, ${fallback})` : `var(--bf-${roleName}-nudge-end)`;
69
71
  }
70
- function controlPadding(blockPaddingVar, borderWidthVar = "var(--bf-border-width)") {
71
- return ` padding-block: max(0rem, calc(${blockPaddingVar} - ${borderWidthVar}));\n`;
72
- }
73
- function controlMarginBottomExpression(lineHeightVar, blockPaddingVar, spaceAfter) {
74
- return `calc(${spaceAfter} + mod(calc(var(--bf-baseline) - mod(calc(${lineHeightVar} + (${blockPaddingVar} * 2)), var(--bf-baseline))), var(--bf-baseline)))`;
75
- }
76
- function componentAlignmentVars(components) {
77
- return ` --bf-border-width: ${components.borderWidth};\n --bf-bar-thickness: ${components.barThickness};\n --bf-radius: ${components.radius};\n --bf-control-block-padding: ${components.controlBlockPadding};\n --bf-control-block-padding-compact: ${components.controlCompactBlockPadding};\n --bf-control-box-size: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding) * 2));\n --bf-control-box-size-compact: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding-compact) * 2));\n --bf-control-inline-padding: ${components.controlInlinePadding};\n --bf-control-inline-padding-action: ${components.controlInlinePaddingAction};\n --bf-control-inline-padding-field: ${components.controlInlinePaddingField};\n --bf-control-visual-size: ${components.controlVisualSize};\n --bf-field-gap: ${components.fieldGap};\n --bf-panel-padding-inline: ${components.panelPaddingInline};\n --bf-panel-padding-block: ${components.panelPaddingBlock};\n --bf-accordion-indent: ${components.accordionIndent};\n`;
78
- }
79
- function alignedVisualStart(lineHeightVar, visualSize, startVar, offset = "0rem") {
80
- if (offset === "0rem") {
81
- return `calc(${startVar} + ((${lineHeightVar} - ${visualSize}) / 2))`;
82
- }
83
- return `calc(${startVar} + ((${lineHeightVar} - ${visualSize}) / 2) + ${offset})`;
84
- }
85
72
  export function componentsCss(tokens, themeSurfaces) {
86
73
  const body = tokens.roles.body;
87
74
  const h4 = tokens.roles.h4 ?? body;
88
75
  const h5 = tokens.roles.h5 ?? body;
89
76
  const h6 = tokens.roles.h6 ?? body;
90
77
  const baselineUnit = tokens.baselineUnit;
91
- const components = tokens.components;
92
- const inputBlockPaddingVar = "var(--bf-input-block-padding)";
93
- const buttonBlockPaddingVar = "var(--bf-button-block-padding)";
94
78
  const bodyLineHeight = roleLineHeightVar("body", body.lineHeight);
95
- const inputMarginBottom = controlMarginBottomExpression(bodyLineHeight, inputBlockPaddingVar, "0rem");
96
- const singleLineRowMarginBottom = controlMarginBottomExpression(bodyLineHeight, buttonBlockPaddingVar, "0rem");
97
- const buttonMarginBottom = "var(--bf-single-line-row-margin-block-end)";
79
+ const inputMarginBottom = "var(--bf-interface-row-compensation-block-end)";
80
+ const buttonMarginBottom = "var(--bf-interface-row-compensation-block-end)";
98
81
  const bodySelectedStartNudge = roleSelectedStartNudgeVar("body", body.nudgeTop);
99
82
  const bodySelectedEndNudge = roleSelectedEndNudgeVar("body");
100
83
  const h4LineHeight = roleLineHeightVar("h4", h4.lineHeight);
@@ -102,120 +85,14 @@ export function componentsCss(tokens, themeSurfaces) {
102
85
  const h6LineHeight = roleLineHeightVar("h6", h6.lineHeight);
103
86
  const bodyTypeStyles = typeStyles(body, { includeCase: false });
104
87
  const h6TypeStyles = typeStyles(h6, { includeCase: false });
105
- const buttonPadding = " padding-block: var(--bf-single-line-row-padding-block);\n";
106
- return `:where(.bf-theme) {
107
- ${componentAlignmentVars(components)} /* Action surfaces keep comfortable command targets; field surfaces can tighten independently. */
108
- --bf-disclosure-gap: 1rem;
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);
119
- --bf-input-block-padding: ${bodySelectedStartNudge};
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)));
135
- --bf-slider-track-size: calc(var(--bf-baseline) * 0.25);
136
- --bf-slider-row-block-size: var(--bf-single-line-row-block-size);
137
- --bf-slider-track-offset: ${alignedVisualStart(bodyLineHeight, "var(--bf-slider-track-size)", bodySelectedStartNudge)};
138
- --bf-table-row-border-size: var(--bf-border-width);
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);
152
- --bf-app-drawer-width-icon: 2rem;
153
- --bf-app-drawer-width-small: 15rem;
154
- --bf-app-drawer-width-small-max: 20rem;
155
- --bf-app-drawer-width-medium: 29.0625rem;
156
- --bf-app-drawer-width-medium-max: 40rem;
157
- --bf-app-drawer-width-large: min(100vw, max(40rem, 50vw));
158
- --bf-app-aside-width: var(--bf-app-drawer-width-medium);
159
- --bf-app-aside-width-min: var(--bf-app-drawer-width-small);
160
- --bf-app-aside-width-max: var(--bf-app-drawer-width-medium-max);
161
- --bf-app-navigation-width: 15rem;
162
- --bf-app-navigation-width-collapsed: 3rem;
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);
166
- --bf-side-navigation-icon-gap: 0.625rem;
167
- --bf-navigation-bar-min-block-size: calc(var(--bf-baseline) * 6);
168
- --bf-authoring-accent: #f6b73c;
169
- --bf-authoring-accent-hover: #e0a030;
170
- --bf-authoring-accent-line: rgba(246, 183, 60, 0.9);
171
- --bf-authoring-accent-strong: rgba(246, 183, 60, 0.95);
172
- --bf-authoring-accent-outline: rgba(246, 183, 60, 0.4);
173
- --bf-authoring-accent-outline-strong: rgba(246, 183, 60, 0.8);
174
- --bf-authoring-accent-shadow: rgba(246, 183, 60, 0.22);
175
- --bf-authoring-accent-focus-ring: rgba(246, 183, 60, 0.55);
176
- --bf-application-resize-handle-active: var(--bf-authoring-accent-strong);
177
- --bf-application-resize-handle-focus-ring: var(--bf-authoring-accent-focus-ring);
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));
182
- --bf-top-navigation-link-padding-block: max(var(--bf-body-nudge-start), calc(var(--bf-baseline) * 1.5));
183
- --bf-top-navigation-search-max-inline-size: 20rem;
184
- --bf-top-navigation-logo-tag-inline-size: 1.375rem;
185
- --bf-top-navigation-logo-tag-block-size: 2.375rem;
186
- --bf-top-navigation-logo-icon-size: 1rem;
187
- --bf-top-navigation-logo-tag-gap: 0.25rem;
188
- --bf-top-navigation-logo-icon-bottom-offset: 0.375rem;
189
- --bf-top-navigation-logo-icon-optical-offset-inline: -0.0125rem;
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);
192
- --bf-icon-size-default: 1rem;
193
- --bf-icon-size-medium: 2.5rem;
194
- --bf-icon-size-large: 4rem;
195
- --bf-icon-size-x-large: 4.5rem;
196
- --bf-icon-size-xx-large: 6rem;
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;
202
- --bf-ui-badge-padding-inline: calc(${bodyLineHeight} * 0.25);
203
- --bf-ui-badge-overhang: calc(var(--bf-ui-badge-padding-inline) * -0.75);
204
- --bf-grid-max-inline-size: var(--bf-content-max-width);
205
- --bf-application-drawer-width-icon: var(--bf-app-drawer-width-icon);
206
- --bf-application-drawer-width-small: var(--bf-app-drawer-width-small);
207
- --bf-application-drawer-width-small-max: var(--bf-app-drawer-width-small-max);
208
- --bf-application-drawer-width-medium: var(--bf-app-drawer-width-medium);
209
- --bf-application-drawer-width-medium-max: var(--bf-app-drawer-width-medium-max);
210
- --bf-application-drawer-width-large: var(--bf-app-drawer-width-large);
211
- --bf-application-aside-width: var(--bf-app-aside-width);
212
- --bf-application-aside-width-min: var(--bf-app-aside-width-min);
213
- --bf-application-aside-width-max: var(--bf-app-aside-width-max);
214
- --bf-application-navigation-width: var(--bf-app-navigation-width);
215
- --bf-application-navigation-width-collapsed: var(--bf-app-navigation-width-collapsed);
88
+ const buttonPadding = " padding-block: var(--bf-interface-row-padding-block);\n";
89
+ return `${componentContractsCss(tokens, themeSurfaces)}
90
+ ${controlGeometryCss({ bodyLineHeight, bodySelectedStartNudge })}
91
+ ${applicationGeometryCss()}
92
+ ${navigationGeometryCss()}
93
+ :where(.bf-theme) {
216
94
  ${foundryComponentColorVars("light")}
217
95
  --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");
219
96
  --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");
220
97
  --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");
221
98
  --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");
@@ -239,23 +116,9 @@ ${foundryComponentColorVars("light")}
239
116
  margin-bottom: ${inputMarginBottom};
240
117
  }
241
118
 
242
- ${(themeSurfaces ?? []).map(surface => {
243
- if (!surface.className) {
244
- return "";
245
- }
246
- const surfaceTokens = surface.tokens;
247
- const bodySurface = surfaceTokens.roles.body;
248
- const surfaceComponents = surfaceTokens.components;
249
- const inputBlockPadding = bodySurface && parseRemValue(bodySurface.nudgeTop) > 0
250
- ? bodySurface.nudgeTop
251
- : surfaceComponents.controlBlockPadding;
252
- return `:where(.bf-theme.${surface.className}) {\n --bf-input-block-padding: ${inputBlockPadding};\n --bf-button-block-padding: ${inputBlockPadding};\n${componentAlignmentVars(surfaceComponents)}\n}\n`;
253
- }).join("\n")}
254
-
255
119
  :where(.bf-theme.is-dark) {
256
120
  ${foundryComponentColorVars("dark")}
257
121
  --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");
259
122
  --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");
260
123
  --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");
261
124
  --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");
@@ -271,7 +134,7 @@ ${foundryComponentColorVars("dark")}
271
134
  margin: 0;
272
135
  }
273
136
 
274
- .bf-theme button {
137
+ :where(.bf-theme) :where(button) {
275
138
  font: inherit;
276
139
  }
277
140
 
@@ -316,7 +179,7 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
316
179
 
317
180
  :where(.bf-theme) :where(.bf-field.is-range) {
318
181
  align-items: start;
319
- column-gap: calc(var(--bf-baseline) * 2);
182
+ column-gap: var(--bf-component-inline-inset-field);
320
183
  display: grid;
321
184
  grid-template-columns: max-content minmax(0, 1fr);
322
185
  row-gap: var(--bf-field-gap);
@@ -360,13 +223,13 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
360
223
  margin: 0;
361
224
  min-inline-size: 0;
362
225
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
363
- padding-inline: var(--bf-component-inline-inset-continuation);
226
+ padding-inline: var(--bf-panel-padding-inline);
364
227
  padding-block-start: var(--bf-panel-padding-block);
365
228
  }
366
229
 
367
230
  :where(.bf-theme) :where(fieldset, .bf-fieldset) > :where(legend, .bf-legend) {
368
231
  margin-bottom: 0;
369
- padding-inline: calc(var(--bf-baseline) * 0.5);
232
+ padding-inline: var(--bf-inline-unit);
370
233
  }
371
234
 
372
235
  :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) {
@@ -381,7 +244,8 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
381
244
  max-inline-size: 100%;
382
245
  min-inline-size: 0;
383
246
  margin-bottom: ${inputMarginBottom};
384
- ${controlPadding(inputBlockPaddingVar)} padding-inline: var(--bf-component-inline-inset-field);
247
+ padding-block: var(--bf-interface-row-padding-block);
248
+ padding-inline: var(--bf-component-inline-inset-field);
385
249
  }
386
250
 
387
251
  :where(.bf-theme) :where(.bf-color-control) {
@@ -398,8 +262,8 @@ ${controlPadding(inputBlockPaddingVar)} padding-inline: var(--bf-component-inli
398
262
  content: "\\00a0";
399
263
  grid-area: color-control;
400
264
  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);
265
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
266
+ padding-block: var(--bf-interface-row-padding-block);
403
267
  visibility: hidden;
404
268
  }
405
269
 
@@ -408,7 +272,7 @@ ${controlPadding(inputBlockPaddingVar)} padding-inline: var(--bf-component-inli
408
272
  block-size: auto;
409
273
  grid-area: color-control;
410
274
  inline-size: 100%;
411
- margin-bottom: var(--bf-single-line-row-margin-block-end);
275
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
412
276
  min-block-size: 0;
413
277
  padding: var(--bf-border-width);
414
278
  }
@@ -439,7 +303,7 @@ ${controlPadding(inputBlockPaddingVar)} padding-inline: var(--bf-component-inli
439
303
 
440
304
  :where(.bf-theme) :where(textarea) {
441
305
  block-size: auto;
442
- min-block-size: calc(var(--bf-control-box-size) * 2);
306
+ min-block-size: calc((var(--bf-interface-row-occupied-block-size) * 2) - var(--bf-interface-row-compensation-block-end));
443
307
  resize: vertical;
444
308
  }
445
309
 
@@ -465,8 +329,8 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
465
329
  cursor: pointer;
466
330
  margin-inline-end: var(--bf-field-gap);
467
331
  min-block-size: 0;
468
- padding-block: var(--bf-single-line-row-padding-block);
469
- padding-inline: var(--bf-control-inline-padding-action-bordered);
332
+ padding-block: var(--bf-interface-row-padding-block);
333
+ padding-inline: var(--bf-component-inline-inset-action-bordered);
470
334
  }
471
335
 
472
336
  :where(.bf-theme) :where(input[type='file'])::file-selector-button:hover {
@@ -479,7 +343,7 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
479
343
  background-repeat: no-repeat;
480
344
  background-size: 1rem 1rem;
481
345
  overflow: hidden;
482
- padding-inline-end: calc(var(--bf-component-inline-inset-field) * 2.5);
346
+ padding-inline-end: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
483
347
  text-overflow: ellipsis;
484
348
  white-space: nowrap;
485
349
  }
@@ -488,16 +352,14 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
488
352
  font-variant-numeric: tabular-nums;
489
353
  }
490
354
 
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. */
355
+ /* Keep the browser-owned number stepper. A painted replacement cannot expose
356
+ the native pointer targets, min/max handling, or platform accessibility. */
494
357
  :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);
358
+ appearance: auto;
359
+ }
360
+
361
+ :where(.bf-theme) :where(select:dir(rtl)) {
362
+ background-position: left var(--bf-component-inline-inset-field) center;
501
363
  }
502
364
 
503
365
  :where(.bf-theme) :where(.bf-slider-input) {
@@ -509,12 +371,6 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
509
371
  text-align: right;
510
372
  }
511
373
 
512
- :where(.bf-theme) :where(input[type='number'])::-webkit-inner-spin-button,
513
- :where(.bf-theme) :where(input[type='number'])::-webkit-outer-spin-button {
514
- appearance: none;
515
- margin: 0;
516
- }
517
-
518
374
  :where(.bf-theme) :where(.bf-checkbox, .bf-radio) {
519
375
  display: grid;
520
376
  margin: 0;
@@ -537,8 +393,8 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-default)
537
393
  border-block: var(--bf-border-width) solid transparent;
538
394
  cursor: pointer;
539
395
  display: block;
540
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
541
- padding-block: var(--bf-single-line-row-padding-block);
396
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
397
+ padding-block: var(--bf-interface-row-padding-block);
542
398
  padding-inline-start: var(--bf-tick-label-offset);
543
399
  position: relative;
544
400
  }
@@ -681,16 +537,16 @@ ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-default)
681
537
  border-block: var(--bf-border-width) solid transparent;
682
538
  cursor: pointer;
683
539
  display: inline-block;
684
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
685
- padding-block: var(--bf-single-line-row-padding-block);
540
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
541
+ padding-block: var(--bf-interface-row-padding-block);
686
542
  }
687
543
 
688
544
  :where(.bf-theme) :where(.bf-validation-message) {
689
545
  ${typeStyles(body, { includeCase: false })} border-block: var(--bf-border-width) solid transparent;
690
546
  color: var(--bf-color-text-muted);
691
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
547
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
692
548
  margin-inline-start: var(--bf-leading-mark-group-inset);
693
- padding-block: var(--bf-single-line-row-padding-block);
549
+ padding-block: var(--bf-interface-row-padding-block);
694
550
  padding-inline-start: var(--bf-leading-mark-offset);
695
551
  position: relative;
696
552
  }
@@ -877,6 +733,8 @@ ${iconCss()}
877
733
 
878
734
  ${buttonActionsCss({ bodyTypeStyles, buttonMarginBottom, buttonPadding })}
879
735
 
736
+ ${nestedControlsCss()}
737
+
880
738
  ${ctaFigureAspectCss()}
881
739
 
882
740
  ${editorialContentCss({ noticeTitleTypeStyles: typeStyles(h4, { includeCase: false }) })}
@@ -930,8 +788,8 @@ ${listCss({ bodyTypeStyles })}
930
788
  ${typeStyles(body, { includeCase: false })} background: var(--bf-color-background-alt);
931
789
  color: var(--bf-color-link-default);
932
790
  display: block;
933
- left: -62.4375rem;
934
- max-inline-size: calc(100vw - var(--bf-baseline));
791
+ inset-inline-start: -62.4375rem;
792
+ max-inline-size: calc(100vw - (var(--bf-inline-unit) * 2));
935
793
  position: absolute;
936
794
  text-decoration: none;
937
795
  top: -62.4375rem;
@@ -942,11 +800,11 @@ ${typeStyles(body, { includeCase: false })} background: var(--bf-color-backgrou
942
800
  }
943
801
 
944
802
  :where(.bf-theme) :where(.bf-skip-link:focus, .bf-skip-link:focus-visible) {
945
- left: calc(var(--bf-baseline) * 0.5);
803
+ inset-inline-start: var(--bf-inline-unit);
946
804
  outline: 0.125rem solid var(--bf-color-focus);
947
805
  outline-offset: 0;
948
806
  padding-block: calc(var(--bf-baseline) * 1.5);
949
- padding-inline: calc(var(--bf-baseline) * 1.5);
807
+ padding-inline: var(--bf-component-inline-inset-action);
950
808
  position: fixed;
951
809
  top: calc(var(--bf-baseline) * 0.5);
952
810
  z-index: 999999;
@@ -960,7 +818,6 @@ ${tableCss({
960
818
 
961
819
  ${chipBadgeStatusCss({
962
820
  bodyCaseTypeStyles: typeStyles(body),
963
- bodyLineHeight,
964
821
  bodyTypeStyles,
965
822
  })}
966
823
 
@@ -1006,7 +863,6 @@ ${chipBadgeStatusCss({
1006
863
  ${searchBoxAndFilterCss({
1007
864
  bodySelectedStartNudge,
1008
865
  bodyTypeStyles,
1009
- buttonBlockPaddingVar,
1010
866
  inputMarginBottom,
1011
867
  })}
1012
868
 
@@ -1078,8 +934,8 @@ ${typeStyles(body, { includeCase: false })} background: transparent;
1078
934
  display: block;
1079
935
  margin: 0;
1080
936
  overflow: hidden;
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);
937
+ padding-block-end: var(--bf-in-box-row-padding-block-end);
938
+ padding-block-start: var(--bf-in-box-row-padding-block-start);
1083
939
  padding-inline: var(--bf-component-inline-inset-action);
1084
940
  text-align: left;
1085
941
  text-decoration: none;
@@ -1117,6 +973,8 @@ ${typeStyles(body, { includeCase: false })} background: transparent;
1117
973
  }
1118
974
 
1119
975
  :where(.bf-theme) :where(.bf-tooltip) {
976
+ --bf-tooltip-arrow-size: calc(var(--bf-baseline) * 0.5);
977
+ --bf-tooltip-arrow-offset-inline: calc(var(--bf-tooltip-arrow-size) * 1.5);
1120
978
  display: inline-flex;
1121
979
  position: relative;
1122
980
  text-decoration: inherit;
@@ -1133,7 +991,7 @@ ${typeStyles(body, { includeCase: false })} background-color: var(--bf-color-ba
1133
991
  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);
1134
992
  color: var(--bf-color-text-default);
1135
993
  inline-size: max-content;
1136
- left: 0;
994
+ inset-inline-start: 0;
1137
995
  margin: 0;
1138
996
  max-inline-size: min(20rem, calc(100vw - (var(--bf-baseline) * 4)));
1139
997
  opacity: 0;
@@ -1157,17 +1015,17 @@ ${typeStyles(body, { includeCase: false })} background-color: var(--bf-color-ba
1157
1015
 
1158
1016
  :where(.bf-theme) :where(.bf-tooltip-message)::before {
1159
1017
  block-size: 0;
1160
- border-bottom: calc(var(--bf-baseline) * 0.5) solid var(--bf-color-background-alt);
1161
- border-inline: calc(var(--bf-baseline) * 0.5) solid transparent;
1018
+ border-bottom: var(--bf-tooltip-arrow-size) solid var(--bf-color-background-alt);
1019
+ border-inline: var(--bf-tooltip-arrow-size) solid transparent;
1162
1020
  bottom: 100%;
1163
1021
  content: "";
1164
1022
  inline-size: 0;
1165
- left: calc(var(--bf-baseline) * 0.75);
1023
+ inset-inline-start: var(--bf-tooltip-arrow-offset-inline);
1166
1024
  position: absolute;
1167
1025
  }
1168
1026
 
1169
1027
  :where(.bf-theme) :where(.bf-tooltip.is-detached) > :where(.bf-tooltip-message) {
1170
- left: auto;
1028
+ inset-inline-start: auto;
1171
1029
  pointer-events: auto;
1172
1030
  position: static;
1173
1031
  top: auto;
@@ -1179,23 +1037,23 @@ ${typeStyles(body, { includeCase: false })} background-color: var(--bf-color-ba
1179
1037
  }
1180
1038
 
1181
1039
  :where(.bf-theme) :where(.bf-tooltip.is-btm-center) > :where(.bf-tooltip-message) {
1182
- left: 50%;
1040
+ inset-inline-start: 50%;
1183
1041
  transform: translate(-50%, calc(var(--bf-baseline) - var(--bf-border-width)));
1184
1042
  }
1185
1043
 
1186
1044
  :where(.bf-theme) :where(.bf-tooltip.is-btm-center) > :where(.bf-tooltip-message)::before {
1187
- left: 50%;
1045
+ inset-inline-start: 50%;
1188
1046
  transform: translateX(-50%);
1189
1047
  }
1190
1048
 
1191
1049
  :where(.bf-theme) :where(.bf-tooltip.is-btm-right) > :where(.bf-tooltip-message) {
1192
- left: auto;
1193
- right: 0;
1050
+ inset-inline-end: 0;
1051
+ inset-inline-start: auto;
1194
1052
  }
1195
1053
 
1196
1054
  :where(.bf-theme) :where(.bf-tooltip.is-btm-right) > :where(.bf-tooltip-message)::before {
1197
- left: auto;
1198
- right: calc(var(--bf-baseline) * 0.75);
1055
+ inset-inline-end: var(--bf-tooltip-arrow-offset-inline);
1056
+ inset-inline-start: auto;
1199
1057
  }
1200
1058
 
1201
1059
  :where(.bf-theme) :where(.bf-tooltip.is-top-left, .bf-tooltip.is-top-center, .bf-tooltip.is-top-right) > :where(.bf-tooltip-message) {
@@ -1206,30 +1064,30 @@ ${typeStyles(body, { includeCase: false })} background-color: var(--bf-color-ba
1206
1064
 
1207
1065
  :where(.bf-theme) :where(.bf-tooltip.is-top-left, .bf-tooltip.is-top-center, .bf-tooltip.is-top-right) > :where(.bf-tooltip-message)::before {
1208
1066
  border-bottom: 0;
1209
- border-inline: calc(var(--bf-baseline) * 0.5) solid transparent;
1210
- border-top: calc(var(--bf-baseline) * 0.5) solid var(--bf-color-background-alt);
1067
+ border-inline: var(--bf-tooltip-arrow-size) solid transparent;
1068
+ border-top: var(--bf-tooltip-arrow-size) solid var(--bf-color-background-alt);
1211
1069
  bottom: auto;
1212
1070
  top: 100%;
1213
1071
  }
1214
1072
 
1215
1073
  :where(.bf-theme) :where(.bf-tooltip.is-top-center) > :where(.bf-tooltip-message) {
1216
- left: 50%;
1074
+ inset-inline-start: 50%;
1217
1075
  transform: translate(-50%, calc(var(--bf-baseline) * -1));
1218
1076
  }
1219
1077
 
1220
1078
  :where(.bf-theme) :where(.bf-tooltip.is-top-center) > :where(.bf-tooltip-message)::before {
1221
- left: 50%;
1079
+ inset-inline-start: 50%;
1222
1080
  transform: translateX(-50%);
1223
1081
  }
1224
1082
 
1225
1083
  :where(.bf-theme) :where(.bf-tooltip.is-top-right) > :where(.bf-tooltip-message) {
1226
- left: auto;
1227
- right: 0;
1084
+ inset-inline-end: 0;
1085
+ inset-inline-start: auto;
1228
1086
  }
1229
1087
 
1230
1088
  :where(.bf-theme) :where(.bf-tooltip.is-top-right) > :where(.bf-tooltip-message)::before {
1231
- left: auto;
1232
- right: calc(var(--bf-baseline) * 0.75);
1089
+ inset-inline-end: var(--bf-tooltip-arrow-offset-inline);
1090
+ inset-inline-start: auto;
1233
1091
  }
1234
1092
 
1235
1093
  :where(.bf-theme) :where(nav.bf-pagination) {
@@ -1258,9 +1116,10 @@ ${typeStyles(body, { includeCase: false })} background-color: var(--bf-color-ba
1258
1116
 
1259
1117
  :where(.bf-theme) :where(.bf-pagination-item.is-truncation) {
1260
1118
  ${typeStyles(body, { includeCase: false })} color: var(--bf-color-text-muted);
1261
- min-block-size: var(--bf-control-box-size);
1262
- padding-block: var(--bf-control-block-padding);
1263
- padding-inline: calc(var(--bf-baseline) * 0.5);
1119
+ border-block: var(--bf-border-width) solid transparent;
1120
+ margin-block-end: var(--bf-interface-row-compensation-block-end);
1121
+ padding-block: var(--bf-interface-row-padding-block);
1122
+ padding-inline: var(--bf-inline-unit);
1264
1123
  }
1265
1124
 
1266
1125
  :where(.bf-theme) :where(.bf-pagination-link, .bf-pagination-link.is-previous, .bf-pagination-link.is-next) {
@@ -1271,15 +1130,20 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1271
1130
  color: var(--bf-color-text-default);
1272
1131
  cursor: pointer;
1273
1132
  display: inline-flex;
1274
- gap: calc(var(--bf-baseline) * 0.5);
1133
+ gap: var(--bf-leading-mark-gap);
1275
1134
  justify-content: center;
1276
1135
  margin-bottom: ${buttonMarginBottom};
1277
- min-inline-size: var(--bf-control-box-size);
1278
- ${controlPadding(buttonBlockPaddingVar)} padding-inline: var(--bf-control-inline-padding-action-bordered);
1136
+ padding-block: var(--bf-interface-row-padding-block);
1137
+ padding-inline: var(--bf-component-inline-inset-action-bordered);
1279
1138
  text-align: center;
1280
1139
  text-decoration: none;
1281
1140
  }
1282
1141
 
1142
+ :where(.bf-theme) :where(.bf-pagination-link:not(.is-previous):not(.is-next)) {
1143
+ min-inline-size: var(--bf-square-block-size);
1144
+ padding-inline: 0;
1145
+ }
1146
+
1283
1147
  :where(.bf-theme) :where(.bf-pagination-link:hover, .bf-pagination-link.is-previous:hover, .bf-pagination-link.is-next:hover) {
1284
1148
  background-color: var(--bf-color-background-hover);
1285
1149
  }
@@ -1371,9 +1235,9 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1371
1235
  gap: var(--bf-disclosure-gap);
1372
1236
  inline-size: 100%;
1373
1237
  justify-content: flex-start;
1374
- margin-block-end: var(--bf-single-line-row-margin-block-end);
1375
- padding-block: var(--bf-single-line-row-padding-block);
1376
- padding-inline: 0;
1238
+ margin-block-end: var(--bf-interface-row-compensation-block-end);
1239
+ padding-block: var(--bf-interface-row-padding-block);
1240
+ padding-inline: var(--bf-disclosure-group-inset) 0;
1377
1241
  text-align: left;
1378
1242
  }
1379
1243
 
@@ -1434,7 +1298,7 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1434
1298
  }
1435
1299
 
1436
1300
  :where(.bf-theme) :where(.bf-modal.is-workflow) {
1437
- --bf-modal-workflow-viewport-gap: calc(var(--bf-baseline) * 4);
1301
+ --bf-modal-workflow-viewport-gap: var(--bf-component-inline-inset-continuation);
1438
1302
  --bf-modal-workflow-max-inline-size: 42rem;
1439
1303
  --bf-modal-workflow-min-inline-size: 32rem;
1440
1304
  --bf-modal-workflow-max-block-size: 40rem;
@@ -1474,7 +1338,7 @@ ${typeStyles(body, { includeCase: false })} align-items: center;
1474
1338
  :where(.bf-theme) :where(.bf-modal-header, .bf-modal-body, .bf-modal-footer) {
1475
1339
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
1476
1340
  padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
1477
- padding-inline: var(--bf-component-inline-inset-continuation);
1341
+ padding-inline: var(--bf-panel-padding-inline);
1478
1342
  }
1479
1343
 
1480
1344
  :where(.bf-theme) :where(.bf-modal-header) {
@@ -1629,7 +1493,7 @@ ${typeStyles(body, { includeCase: false })} appearance: none;
1629
1493
 
1630
1494
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon) {
1631
1495
  cursor: copy;
1632
- padding-inline-start: calc(var(--bf-component-inline-inset-continuation) + (var(--bf-baseline) * 3));
1496
+ padding-inline-start: calc(var(--bf-component-inline-inset-continuation) + var(--bf-leading-mark-gap));
1633
1497
  position: relative;
1634
1498
  }
1635
1499
 
@@ -1728,8 +1592,8 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1728
1592
  * visible and exposed at a time. */
1729
1593
  :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) :where(.bf-panel-header.is-navigation-brand) {
1730
1594
  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));
1595
+ column-gap: var(--bf-leading-mark-gap);
1596
+ padding-inline-end: var(--bf-panel-content-padding-inline);
1733
1597
  }
1734
1598
 
1735
1599
  :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) {
@@ -1822,7 +1686,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1822
1686
  :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-link, .bf-side-navigation-text) {
1823
1687
  align-items: center;
1824
1688
  justify-content: center;
1825
- padding-inline: calc(var(--bf-baseline) * 1.25);
1689
+ padding-inline: var(--bf-component-inline-inset-action);
1826
1690
  }
1827
1691
 
1828
1692
  :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-list)::after {
@@ -1830,7 +1694,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1830
1694
  }
1831
1695
 
1832
1696
  :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) {
1833
- padding-inline: calc(var(--bf-baseline) * 1.25);
1697
+ padding-inline: var(--bf-component-inline-inset-action);
1834
1698
  }
1835
1699
 
1836
1700
  :where(.bf-theme) :where(.bf-application:has(> .bf-aside.is-pinned:not(.is-collapsed))) {
@@ -1957,7 +1821,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1957
1821
  cursor: ew-resize;
1958
1822
  display: none;
1959
1823
  inset-block: 0;
1960
- inset-inline-start: calc(var(--bf-baseline) * -3);
1824
+ inset-inline-start: calc(var(--bf-inline-unit) * -3);
1961
1825
  outline: none;
1962
1826
  position: absolute;
1963
1827
  touch-action: none;
@@ -1974,7 +1838,7 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1974
1838
  }
1975
1839
 
1976
1840
  :where(.bf-theme) :where(.bf-application-aside-resize-handle)::after {
1977
- background: var(--bf-color-border-default);
1841
+ background: transparent;
1978
1842
  border-radius: 62.4375rem;
1979
1843
  content: "";
1980
1844
  inset-block: var(--bf-panel-padding-block);
@@ -1996,7 +1860,9 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
1996
1860
  outline-offset: -0.125rem;
1997
1861
  }
1998
1862
 
1999
- @media (min-width: 64.75rem) {
1863
+ /* Application navigation becomes persistent at 48rem. Standalone top and
1864
+ * document navigation keep their own large-screen contracts. */
1865
+ @media (min-width: 48rem) {
2000
1866
  :where(.bf-theme) :where(.bf-application:has(> .bf-navigation)) {
2001
1867
  grid-template-areas:
2002
1868
  "navigation-bar navigation-bar"
@@ -2039,6 +1905,10 @@ ${typeStyles(h6, { includeCase: false })} color: var(--bf-color-text-muted);
2039
1905
  display: none;
2040
1906
  }
2041
1907
 
1908
+ :where(.bf-theme) :where(.bf-application) :where(.bf-side-navigation-toggle) {
1909
+ display: none;
1910
+ }
1911
+
2042
1912
  :where(.bf-theme) :where(.bf-navigation-drawer),
2043
1913
  :where(.bf-theme) :where(.bf-navigation:not(.is-collapsed)) > :where(.bf-navigation-drawer) {
2044
1914
  block-size: 100%;