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
package/dist/styles.css CHANGED
@@ -36,8 +36,35 @@ html.u-baseline-grid::after {
36
36
  }
37
37
 
38
38
  :where(.bf-theme) {
39
- --bf-baseline: 0.5rem;
39
+ /* Resolved Canonical DTCG spacing; these names always retain the pinned final matrix. */
40
+ --spacing-baseline: 0.5rem;
41
+ --spacing-gap-field-block: 0.5rem;
42
+ --spacing-gap-mark-inline: 0.5rem;
43
+ --spacing-gap-group-block: 1.5rem;
44
+ --spacing-gap-pattern-block: 4rem;
45
+ --spacing-gap-region-block: 8rem;
46
+ --spacing-inset-field-inline: 0.5rem;
47
+ --spacing-inset-action-inline: 1rem;
48
+ --spacing-inset-continuation-inline: 2rem;
49
+ --spacing-inset-surface-inline: 1rem;
50
+ --spacing-inset-surface-block: 1rem;
51
+ --spacing-inset-strip-block: 4rem;
52
+ /* Temporary BF compatibility properties alias Canonical directly during
53
+ the bounded public-name deprecation window. */
54
+ --bf-baseline: var(--spacing-baseline);
55
+ --bf-field-gap: var(--spacing-gap-field-block);
56
+ --bf-leading-mark-gap: var(--spacing-gap-mark-inline);
57
+ --bf-section-space-shallow: var(--spacing-gap-group-block);
58
+ --bf-section-space: var(--spacing-gap-pattern-block);
59
+ --bf-section-space-deep: var(--spacing-gap-region-block);
60
+ --bf-component-inline-inset-field: var(--spacing-inset-field-inline);
61
+ --bf-component-inline-inset-action: var(--spacing-inset-action-inline);
62
+ --bf-component-inline-inset-continuation: var(--spacing-inset-continuation-inline);
63
+ --bf-panel-padding-inline: var(--spacing-inset-surface-inline);
64
+ --bf-panel-padding-block: var(--spacing-inset-surface-block);
65
+ --bf-strip-space: var(--spacing-inset-strip-block);
40
66
  --bf-space-0: 0rem;
67
+ --bf-inline-unit: 0.25rem;
41
68
  --bf-space-half: calc(var(--bf-baseline) / 2);
42
69
  --bf-space-1: var(--bf-baseline);
43
70
  --bf-space-2: calc(var(--bf-baseline) * 2);
@@ -50,10 +77,6 @@ html.u-baseline-grid::after {
50
77
  --bf-content-max-width: 90rem;
51
78
  --bf-content-padding-inline: 1rem;
52
79
  --bf-measure: 40rem;
53
- --bf-section-space: 4rem;
54
- --bf-section-space-shallow: 1.5rem;
55
- --bf-section-space-deep: 8rem;
56
- --bf-strip-space: 4rem;
57
80
  --bf-grid-gap-inline: 1rem;
58
81
  --bf-grid-gap-block: 1rem;
59
82
  --bf-page-margin: 1rem;
@@ -152,8 +175,35 @@ html.u-baseline-grid::after {
152
175
  }
153
176
 
154
177
  :where(.bf-theme.bf-tier-editorial) {
155
- --bf-baseline: 0.5rem;
178
+ /* Resolved Canonical DTCG spacing; these names always retain the pinned final matrix. */
179
+ --spacing-baseline: 0.5rem;
180
+ --spacing-gap-field-block: 0.5rem;
181
+ --spacing-gap-mark-inline: 0.5rem;
182
+ --spacing-gap-group-block: 1.5rem;
183
+ --spacing-gap-pattern-block: 4rem;
184
+ --spacing-gap-region-block: 8rem;
185
+ --spacing-inset-field-inline: 0.5rem;
186
+ --spacing-inset-action-inline: 1rem;
187
+ --spacing-inset-continuation-inline: 2rem;
188
+ --spacing-inset-surface-inline: 1rem;
189
+ --spacing-inset-surface-block: 1rem;
190
+ --spacing-inset-strip-block: 4rem;
191
+ /* Temporary BF compatibility properties alias Canonical directly during
192
+ the bounded public-name deprecation window. */
193
+ --bf-baseline: var(--spacing-baseline);
194
+ --bf-field-gap: var(--spacing-gap-field-block);
195
+ --bf-leading-mark-gap: var(--spacing-gap-mark-inline);
196
+ --bf-section-space-shallow: var(--spacing-gap-group-block);
197
+ --bf-section-space: var(--spacing-gap-pattern-block);
198
+ --bf-section-space-deep: var(--spacing-gap-region-block);
199
+ --bf-component-inline-inset-field: var(--spacing-inset-field-inline);
200
+ --bf-component-inline-inset-action: var(--spacing-inset-action-inline);
201
+ --bf-component-inline-inset-continuation: var(--spacing-inset-continuation-inline);
202
+ --bf-panel-padding-inline: var(--spacing-inset-surface-inline);
203
+ --bf-panel-padding-block: var(--spacing-inset-surface-block);
204
+ --bf-strip-space: var(--spacing-inset-strip-block);
156
205
  --bf-space-0: 0rem;
206
+ --bf-inline-unit: 0.25rem;
157
207
  --bf-space-half: calc(var(--bf-baseline) / 2);
158
208
  --bf-space-1: var(--bf-baseline);
159
209
  --bf-space-2: calc(var(--bf-baseline) * 2);
@@ -166,10 +216,6 @@ html.u-baseline-grid::after {
166
216
  --bf-content-max-width: 90rem;
167
217
  --bf-content-padding-inline: 1rem;
168
218
  --bf-measure: 40rem;
169
- --bf-section-space: 4rem;
170
- --bf-section-space-shallow: 1.5rem;
171
- --bf-section-space-deep: 8rem;
172
- --bf-strip-space: 4rem;
173
219
  --bf-grid-gap-inline: 1rem;
174
220
  --bf-grid-gap-block: 1rem;
175
221
  --bf-page-margin: 1rem;
@@ -268,8 +314,35 @@ html.u-baseline-grid::after {
268
314
  }
269
315
 
270
316
  :where(.bf-theme.bf-tier-documentation) {
271
- --bf-baseline: 0.25rem;
317
+ /* Resolved Canonical DTCG spacing; these names always retain the pinned final matrix. */
318
+ --spacing-baseline: 0.25rem;
319
+ --spacing-gap-field-block: 0.5rem;
320
+ --spacing-gap-mark-inline: 0.5rem;
321
+ --spacing-gap-group-block: 1.5rem;
322
+ --spacing-gap-pattern-block: 3rem;
323
+ --spacing-gap-region-block: 6rem;
324
+ --spacing-inset-field-inline: 0.5rem;
325
+ --spacing-inset-action-inline: 0.75rem;
326
+ --spacing-inset-continuation-inline: 1.5rem;
327
+ --spacing-inset-surface-inline: 1rem;
328
+ --spacing-inset-surface-block: 1rem;
329
+ --spacing-inset-strip-block: 3rem;
330
+ /* Temporary BF compatibility properties alias Canonical directly during
331
+ the bounded public-name deprecation window. */
332
+ --bf-baseline: var(--spacing-baseline);
333
+ --bf-field-gap: var(--spacing-gap-field-block);
334
+ --bf-leading-mark-gap: var(--spacing-gap-mark-inline);
335
+ --bf-section-space-shallow: var(--spacing-gap-group-block);
336
+ --bf-section-space: var(--spacing-gap-pattern-block);
337
+ --bf-section-space-deep: var(--spacing-gap-region-block);
338
+ --bf-component-inline-inset-field: var(--spacing-inset-field-inline);
339
+ --bf-component-inline-inset-action: var(--spacing-inset-action-inline);
340
+ --bf-component-inline-inset-continuation: var(--spacing-inset-continuation-inline);
341
+ --bf-panel-padding-inline: var(--spacing-inset-surface-inline);
342
+ --bf-panel-padding-block: var(--spacing-inset-surface-block);
343
+ --bf-strip-space: var(--spacing-inset-strip-block);
272
344
  --bf-space-0: 0rem;
345
+ --bf-inline-unit: 0.25rem;
273
346
  --bf-space-half: calc(var(--bf-baseline) / 2);
274
347
  --bf-space-1: var(--bf-baseline);
275
348
  --bf-space-2: calc(var(--bf-baseline) * 2);
@@ -282,10 +355,6 @@ html.u-baseline-grid::after {
282
355
  --bf-content-max-width: 80rem;
283
356
  --bf-content-padding-inline: 1.5rem;
284
357
  --bf-measure: 38rem;
285
- --bf-section-space: 3rem;
286
- --bf-section-space-shallow: 1.5rem;
287
- --bf-section-space-deep: 6rem;
288
- --bf-strip-space: 3rem;
289
358
  --bf-grid-gap-inline: 1.5rem;
290
359
  --bf-grid-gap-block: 1.5rem;
291
360
  --bf-page-margin: 1.5rem;
@@ -384,8 +453,35 @@ html.u-baseline-grid::after {
384
453
  }
385
454
 
386
455
  :where(.bf-theme.bf-tier-app) {
387
- --bf-baseline: 0.25rem;
456
+ /* Resolved Canonical DTCG spacing; these names always retain the pinned final matrix. */
457
+ --spacing-baseline: 0.25rem;
458
+ --spacing-gap-field-block: 0.5rem;
459
+ --spacing-gap-mark-inline: 0.25rem;
460
+ --spacing-gap-group-block: 0.5rem;
461
+ --spacing-gap-pattern-block: 1rem;
462
+ --spacing-gap-region-block: 2rem;
463
+ --spacing-inset-field-inline: 0.25rem;
464
+ --spacing-inset-action-inline: 0.75rem;
465
+ --spacing-inset-continuation-inline: 1.5rem;
466
+ --spacing-inset-surface-inline: 0.75rem;
467
+ --spacing-inset-surface-block: 0.75rem;
468
+ --spacing-inset-strip-block: 3rem;
469
+ /* Temporary BF compatibility properties alias Canonical directly during
470
+ the bounded public-name deprecation window. */
471
+ --bf-baseline: var(--spacing-baseline);
472
+ --bf-field-gap: var(--spacing-gap-field-block);
473
+ --bf-leading-mark-gap: var(--spacing-gap-mark-inline);
474
+ --bf-section-space-shallow: var(--spacing-gap-group-block);
475
+ --bf-section-space: var(--spacing-gap-pattern-block);
476
+ --bf-section-space-deep: var(--spacing-gap-region-block);
477
+ --bf-component-inline-inset-field: var(--spacing-inset-field-inline);
478
+ --bf-component-inline-inset-action: var(--spacing-inset-action-inline);
479
+ --bf-component-inline-inset-continuation: var(--spacing-inset-continuation-inline);
480
+ --bf-panel-padding-inline: var(--spacing-inset-surface-inline);
481
+ --bf-panel-padding-block: var(--spacing-inset-surface-block);
482
+ --bf-strip-space: var(--spacing-inset-strip-block);
388
483
  --bf-space-0: 0rem;
484
+ --bf-inline-unit: 0.25rem;
389
485
  --bf-space-half: calc(var(--bf-baseline) / 2);
390
486
  --bf-space-1: var(--bf-baseline);
391
487
  --bf-space-2: calc(var(--bf-baseline) * 2);
@@ -398,10 +494,6 @@ html.u-baseline-grid::after {
398
494
  --bf-content-max-width: 60rem;
399
495
  --bf-content-padding-inline: 1rem;
400
496
  --bf-measure: 40rem;
401
- --bf-section-space: 1rem;
402
- --bf-section-space-shallow: 0.5rem;
403
- --bf-section-space-deep: 2rem;
404
- --bf-strip-space: 3rem;
405
497
  --bf-grid-gap-inline: 1.5rem;
406
498
  --bf-grid-gap-block: 1.5rem;
407
499
  --bf-page-margin: 2rem;
@@ -500,8 +592,35 @@ html.u-baseline-grid::after {
500
592
  }
501
593
 
502
594
  :where(.bf-theme.bf-tier-os) {
503
- --bf-baseline: 0.25rem;
595
+ /* Resolved Canonical DTCG spacing; these names always retain the pinned final matrix. */
596
+ --spacing-baseline: 0.25rem;
597
+ --spacing-gap-field-block: 0.25rem;
598
+ --spacing-gap-mark-inline: 0.25rem;
599
+ --spacing-gap-group-block: 1.5rem;
600
+ --spacing-gap-pattern-block: 3rem;
601
+ --spacing-gap-region-block: 6rem;
602
+ --spacing-inset-field-inline: 0.25rem;
603
+ --spacing-inset-action-inline: 0.5rem;
604
+ --spacing-inset-continuation-inline: 1.25rem;
605
+ --spacing-inset-surface-inline: 0.5rem;
606
+ --spacing-inset-surface-block: 0.5rem;
607
+ --spacing-inset-strip-block: 2rem;
608
+ /* Temporary BF compatibility properties alias Canonical directly during
609
+ the bounded public-name deprecation window. */
610
+ --bf-baseline: var(--spacing-baseline);
611
+ --bf-field-gap: var(--spacing-gap-field-block);
612
+ --bf-leading-mark-gap: var(--spacing-gap-mark-inline);
613
+ --bf-section-space-shallow: var(--spacing-gap-group-block);
614
+ --bf-section-space: var(--spacing-gap-pattern-block);
615
+ --bf-section-space-deep: var(--spacing-gap-region-block);
616
+ --bf-component-inline-inset-field: var(--spacing-inset-field-inline);
617
+ --bf-component-inline-inset-action: var(--spacing-inset-action-inline);
618
+ --bf-component-inline-inset-continuation: var(--spacing-inset-continuation-inline);
619
+ --bf-panel-padding-inline: var(--spacing-inset-surface-inline);
620
+ --bf-panel-padding-block: var(--spacing-inset-surface-block);
621
+ --bf-strip-space: var(--spacing-inset-strip-block);
504
622
  --bf-space-0: 0rem;
623
+ --bf-inline-unit: 0.25rem;
505
624
  --bf-space-half: calc(var(--bf-baseline) / 2);
506
625
  --bf-space-1: var(--bf-baseline);
507
626
  --bf-space-2: calc(var(--bf-baseline) * 2);
@@ -514,10 +633,6 @@ html.u-baseline-grid::after {
514
633
  --bf-content-max-width: 60rem;
515
634
  --bf-content-padding-inline: 0.75rem;
516
635
  --bf-measure: 30rem;
517
- --bf-section-space: 3rem;
518
- --bf-section-space-shallow: 1.5rem;
519
- --bf-section-space-deep: 6rem;
520
- --bf-strip-space: 2rem;
521
636
  --bf-grid-gap-inline: 1rem;
522
637
  --bf-grid-gap-block: 1rem;
523
638
  --bf-page-margin: 1rem;
@@ -1223,63 +1338,109 @@ html.u-baseline-grid::after {
1223
1338
  --bf-border-width: 0.0625rem;
1224
1339
  --bf-bar-thickness: 0.1875rem;
1225
1340
  --bf-radius: 0rem;
1226
- --bf-control-block-padding: 0.5rem;
1227
- --bf-control-block-padding-compact: 0.25rem;
1228
- --bf-control-box-size: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding) * 2));
1229
- --bf-control-box-size-compact: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding-compact) * 2));
1230
- --bf-control-inline-padding: 1rem;
1231
- --bf-control-inline-padding-action: 1rem;
1232
- --bf-control-inline-padding-field: 0.5rem;
1341
+ --bf-component-inline-inset-action-bordered: max(0rem, calc(var(--bf-component-inline-inset-action) - var(--bf-border-width)));
1233
1342
  --bf-control-visual-size: 1rem;
1234
- --bf-field-gap: 0.5rem;
1235
- --bf-panel-padding-inline: 1rem;
1236
- --bf-panel-padding-block: 1rem;
1237
- --bf-accordion-indent: 1.5rem;
1238
- /* Action surfaces keep comfortable command targets; field surfaces can tighten independently. */
1239
- --bf-disclosure-gap: 1rem;
1240
- --bf-disclosure-icon-inline-size: 1rem;
1241
- --bf-icon-label-inline-offset: calc(var(--bf-disclosure-icon-inline-size) + var(--bf-disclosure-gap));
1242
- --bf-disclosure-label-inline-offset: var(--bf-icon-label-inline-offset);
1243
- /* Every component-owned inline start resolves to one of these three rails.
1244
- Field and action values remain tier inputs; continuation is the shared
1245
- icon/mark-to-copy line. Structural page, grid and navigation-depth offsets
1246
- are deliberately outside this component inset contract. */
1247
- --bf-component-inline-inset-field: var(--bf-control-inline-padding-field);
1248
- --bf-component-inline-inset-action: var(--bf-control-inline-padding-action);
1249
- --bf-component-inline-inset-continuation: var(--bf-disclosure-label-inline-offset);
1250
- --bf-input-block-padding: var(--bf-body-nudge-start, 0.41rem);
1251
- --bf-button-block-padding: var(--bf-body-nudge-start, 0.41rem);
1252
- /* One border-aware occupied-block contract for body-sized, single-line UI.
1253
- Components may paint their block borders differently, but their text line,
1254
- padding and trailing baseline compensation must resolve through this pair. */
1255
- --bf-single-line-row-padding-block: max(0rem, calc(var(--bf-button-block-padding) - var(--bf-border-width)));
1256
- --bf-single-line-row-margin-block-end: calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.5rem) + (var(--bf-button-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
1257
- --bf-single-line-row-block-size: calc(var(--bf-body-line-height, 1.5rem) + (var(--bf-single-line-row-padding-block) * 2) + (var(--bf-border-width) * 2) + var(--bf-single-line-row-margin-block-end));
1258
- --bf-single-line-row-in-box-padding-block-start: var(--bf-body-nudge-start, 0.41rem);
1259
- --bf-single-line-row-in-box-padding-block-end: max(0rem, calc(var(--bf-single-line-row-block-size) - var(--bf-body-line-height, 1.5rem) - var(--bf-single-line-row-in-box-padding-block-start)));
1260
- --bf-single-line-row-visual-offset: calc(var(--bf-body-nudge-start, 0.41rem) + ((var(--bf-body-line-height, 1.5rem) - var(--bf-control-visual-size)) / 2));
1261
- /* Auxiliary surfaces may opt into a host-owned nested composition. The
1262
- shorter line and capped symmetric padding fit their complete paint inside
1263
- the host body line without introducing a second row rhythm. */
1264
- --bf-nested-auxiliary-line-height: max(1em, calc(var(--bf-body-line-height) - var(--bf-baseline)));
1265
- --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)));
1266
- --bf-slider-track-size: calc(var(--bf-baseline) * 0.25);
1267
- --bf-slider-row-block-size: var(--bf-single-line-row-block-size);
1268
- --bf-slider-track-offset: calc(var(--bf-body-nudge-start, 0.41rem) + ((var(--bf-body-line-height, 1.5rem) - var(--bf-slider-track-size)) / 2));
1269
- --bf-table-row-border-size: var(--bf-border-width);
1270
- --bf-table-row-padding-block-start: var(--bf-single-line-row-in-box-padding-block-start);
1271
- --bf-table-row-block-size: var(--bf-single-line-row-block-size);
1272
- --bf-table-row-padding-block-end: max(0rem, calc(var(--bf-table-row-block-size) - var(--bf-body-line-height, 1.5rem) - var(--bf-table-row-padding-block-start) - var(--bf-table-row-border-size)));
1273
- --bf-table-row-line-height: var(--bf-body-line-height, 1.5rem);
1274
- --bf-switch-track-offset: var(--bf-single-line-row-visual-offset);
1275
- --bf-tick-box-offset: var(--bf-single-line-row-visual-offset);
1343
+ /* Three authoritative component content insets. Page margins, grid
1344
+ gutters, surface placement and navigation depth remain structural. */
1345
+
1346
+ /* Regular single-line interface rows use one metric-derived occupied block.
1347
+ Visible and transparent block borders both consume the frame slots. */
1348
+ --bf-interface-row-line-height: var(--bf-body-line-height, 1.5rem);
1349
+ --bf-interface-row-padding-block: max(0rem, calc(var(--bf-body-nudge-start, 0.41rem) - var(--bf-border-width)));
1350
+ --bf-interface-row-painted-block-size: calc(var(--bf-interface-row-line-height) + (var(--bf-interface-row-padding-block) * 2) + (var(--bf-border-width) * 2));
1351
+ --bf-interface-row-compensation-block-end: mod(calc(var(--bf-baseline) - mod(var(--bf-interface-row-painted-block-size), var(--bf-baseline))), var(--bf-baseline));
1352
+ --bf-interface-row-occupied-block-size: calc(var(--bf-interface-row-painted-block-size) + var(--bf-interface-row-compensation-block-end));
1353
+ --bf-interface-row-content-offset-block-start: calc(var(--bf-border-width) + var(--bf-interface-row-padding-block));
1354
+ --bf-interface-row-visual-offset: calc(var(--bf-interface-row-content-offset-block-start) + ((var(--bf-interface-row-line-height) - var(--bf-control-visual-size)) / 2));
1355
+
1356
+ /* Host-owned rows keep the same occupied target but absorb compensation
1357
+ inside the box. A ruled host subtracts its separator in its own module. */
1358
+ --bf-in-box-row-padding-block-start: var(--bf-interface-row-content-offset-block-start);
1359
+ --bf-in-box-row-padding-block-end: max(0rem, calc(var(--bf-interface-row-occupied-block-size) - var(--bf-interface-row-line-height) - var(--bf-in-box-row-padding-block-start)));
1360
+
1361
+ /* Nested children fit inside the host body line and contribute no external
1362
+ compensation. Zero-footprint surfaces and real two-border controls use
1363
+ the body line minus one baseline; build validation proves that this line
1364
+ can contain the font, visual and framed ledgers for every tier. */
1365
+ --bf-nested-row-line-height: calc(var(--bf-interface-row-line-height) - var(--bf-baseline));
1366
+ --bf-nested-row-padding-block: max(0rem, calc((var(--bf-interface-row-line-height) - var(--bf-nested-row-line-height)) / 2));
1367
+ --bf-nested-row-painted-block-size: calc(var(--bf-nested-row-line-height) + (var(--bf-nested-row-padding-block) * 2));
1368
+ --bf-nested-framed-row-padding-block: max(0rem, calc((var(--bf-interface-row-line-height) - var(--bf-nested-row-line-height) - (var(--bf-border-width) * 2)) / 2));
1369
+ --bf-nested-framed-row-painted-block-size: calc(var(--bf-nested-row-line-height) + (var(--bf-nested-framed-row-padding-block) * 2) + (var(--bf-border-width) * 2));
1370
+ --bf-nested-framed-row-visual-offset: calc(var(--bf-border-width) + var(--bf-nested-framed-row-padding-block) + ((var(--bf-nested-row-line-height) - var(--bf-control-visual-size)) / 2));
1371
+
1372
+ /* Block-derived members consume one inline-minimum name. The default is
1373
+ the regular framed paint; selectors below re-point the name to what each
1374
+ member actually paints, rather than to the row ledger it occupies. */
1375
+ --bf-square-block-size: var(--bf-interface-row-painted-block-size);
1376
+
1377
+ /* Leading marks are positioned backwards from the continuation copy inset;
1378
+ a mark never creates a fourth content inset. */
1276
1379
  --bf-leading-mark-size: var(--bf-control-visual-size);
1277
- --bf-leading-mark-gap: var(--bf-component-inline-inset-field);
1278
1380
  --bf-leading-mark-offset: calc(var(--bf-leading-mark-size) + var(--bf-leading-mark-gap));
1279
1381
  --bf-leading-mark-group-inset: calc(var(--bf-component-inline-inset-continuation) - var(--bf-leading-mark-offset));
1280
1382
  --bf-tick-label-offset: var(--bf-leading-mark-offset);
1383
+ }
1384
+
1385
+ :where(.bf-theme) :where(.bf-badge) {
1386
+ --bf-square-block-size: var(--bf-interface-row-line-height);
1387
+ }
1388
+
1389
+ :where(.bf-theme) :where(.bf-badge.is-nested) {
1390
+ --bf-square-block-size: var(--bf-nested-row-line-height);
1391
+ }
1392
+
1393
+ :where(.bf-theme) :where(.bf-button.is-link.is-icon:not(.is-nested):not(:has(.bf-button-label))) {
1394
+ --bf-square-block-size: var(--bf-body-line-height);
1395
+ }
1396
+
1397
+ :where(.bf-theme) :where(.bf-notification-close) {
1398
+ --bf-square-block-size: var(--bf-notification-close-painted-block-size);
1399
+ }
1400
+
1401
+ :where(.bf-theme.bf-tier-editorial) {
1402
+ --bf-border-width: 0.0625rem;
1403
+ --bf-bar-thickness: 0.1875rem;
1404
+ --bf-radius: 0rem;
1405
+ --bf-component-inline-inset-action-bordered: max(0rem, calc(var(--bf-component-inline-inset-action) - var(--bf-border-width)));
1406
+ --bf-control-visual-size: 1rem;
1407
+ }
1408
+
1409
+ :where(.bf-theme.bf-tier-documentation) {
1410
+ --bf-border-width: 0.0625rem;
1411
+ --bf-bar-thickness: 0.1875rem;
1412
+ --bf-radius: 0rem;
1413
+ --bf-component-inline-inset-action-bordered: max(0rem, calc(var(--bf-component-inline-inset-action) - var(--bf-border-width)));
1414
+ --bf-control-visual-size: 0.875rem;
1415
+ }
1416
+
1417
+ :where(.bf-theme.bf-tier-app) {
1418
+ --bf-border-width: 0.0625rem;
1419
+ --bf-bar-thickness: 0.1875rem;
1420
+ --bf-radius: 0rem;
1421
+ --bf-component-inline-inset-action-bordered: max(0rem, calc(var(--bf-component-inline-inset-action) - var(--bf-border-width)));
1422
+ --bf-control-visual-size: 1rem;
1423
+ }
1424
+
1425
+ :where(.bf-theme.bf-tier-os) {
1426
+ --bf-border-width: 0.0625rem;
1427
+ --bf-bar-thickness: 0.1875rem;
1428
+ --bf-radius: 0rem;
1429
+ --bf-component-inline-inset-action-bordered: max(0rem, calc(var(--bf-component-inline-inset-action) - var(--bf-border-width)));
1430
+ --bf-control-visual-size: 0.75rem;
1431
+ }
1432
+
1433
+ :where(.bf-theme) {
1434
+ --bf-slider-track-size: calc(var(--bf-baseline) * 0.25);
1435
+ --bf-slider-row-block-size: var(--bf-interface-row-occupied-block-size);
1436
+ --bf-slider-track-offset: calc(var(--bf-body-nudge-start, 0.41rem) + ((var(--bf-body-line-height, 1.5rem) - var(--bf-slider-track-size)) / 2));
1437
+ --bf-switch-track-offset: var(--bf-interface-row-visual-offset);
1438
+ --bf-tick-box-offset: var(--bf-interface-row-visual-offset);
1281
1439
  --bf-radio-dot-size: calc((var(--bf-control-visual-size) * 0.375) + var(--bf-border-width));
1282
1440
  --bf-list-marker-dot-size: calc(var(--bf-border-width) * 4);
1441
+ }
1442
+
1443
+ :where(.bf-theme) {
1283
1444
  --bf-app-drawer-width-icon: 2rem;
1284
1445
  --bf-app-drawer-width-small: 15rem;
1285
1446
  --bf-app-drawer-width-small-max: 20rem;
@@ -1291,22 +1452,28 @@ html.u-baseline-grid::after {
1291
1452
  --bf-app-aside-width-max: var(--bf-app-drawer-width-medium-max);
1292
1453
  --bf-app-navigation-width: 15rem;
1293
1454
  --bf-app-navigation-width-collapsed: 3rem;
1455
+ --bf-application-drawer-width-icon: var(--bf-app-drawer-width-icon);
1456
+ --bf-application-drawer-width-small: var(--bf-app-drawer-width-small);
1457
+ --bf-application-drawer-width-small-max: var(--bf-app-drawer-width-small-max);
1458
+ --bf-application-drawer-width-medium: var(--bf-app-drawer-width-medium);
1459
+ --bf-application-drawer-width-medium-max: var(--bf-app-drawer-width-medium-max);
1460
+ --bf-application-drawer-width-large: var(--bf-app-drawer-width-large);
1461
+ --bf-application-aside-width: var(--bf-app-aside-width);
1462
+ --bf-application-aside-width-min: var(--bf-app-aside-width-min);
1463
+ --bf-application-aside-width-max: var(--bf-app-aside-width-max);
1464
+ --bf-application-navigation-width: var(--bf-app-navigation-width);
1465
+ --bf-application-navigation-width-collapsed: var(--bf-app-navigation-width-collapsed);
1466
+ }
1467
+
1468
+ :where(.bf-theme) {
1469
+ --bf-disclosure-gap: var(--bf-leading-mark-gap);
1470
+ --bf-disclosure-icon-inline-size: 1rem;
1471
+ --bf-disclosure-group-inset: max(0rem, calc(var(--bf-component-inline-inset-continuation) - var(--bf-disclosure-icon-inline-size) - var(--bf-disclosure-gap)));
1294
1472
  --bf-icon-label-optical-offset-block: 0.1875rem;
1295
- --bf-disclosure-icon-optical-offset-block: var(--bf-icon-label-optical-offset-block);
1473
+ --bf-disclosure-icon-optical-offset-block: 0rem;
1296
1474
  --bf-side-navigation-icon-optical-offset-block: var(--bf-icon-label-optical-offset-block);
1297
- --bf-side-navigation-icon-gap: 0.625rem;
1475
+ --bf-side-navigation-icon-gap: var(--bf-leading-mark-gap);
1298
1476
  --bf-navigation-bar-min-block-size: calc(var(--bf-baseline) * 6);
1299
- --bf-authoring-accent: #f6b73c;
1300
- --bf-authoring-accent-hover: #e0a030;
1301
- --bf-authoring-accent-line: rgba(246, 183, 60, 0.9);
1302
- --bf-authoring-accent-strong: rgba(246, 183, 60, 0.95);
1303
- --bf-authoring-accent-outline: rgba(246, 183, 60, 0.4);
1304
- --bf-authoring-accent-outline-strong: rgba(246, 183, 60, 0.8);
1305
- --bf-authoring-accent-shadow: rgba(246, 183, 60, 0.22);
1306
- --bf-authoring-accent-focus-ring: rgba(246, 183, 60, 0.55);
1307
- --bf-application-resize-handle-active: var(--bf-authoring-accent-strong);
1308
- --bf-application-resize-handle-focus-ring: var(--bf-authoring-accent-focus-ring);
1309
- --bf-control-inline-padding-action-bordered: max(0rem, calc(var(--bf-component-inline-inset-action) - var(--bf-border-width)));
1310
1477
  --bf-top-navigation-link-padding-inline: var(--bf-component-inline-inset-action);
1311
1478
  --bf-top-navigation-end-slot-inline-size: calc(1rem + var(--bf-component-inline-inset-field));
1312
1479
  --bf-top-navigation-search-toggle-inline-size: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
@@ -1320,30 +1487,9 @@ html.u-baseline-grid::after {
1320
1487
  --bf-top-navigation-logo-icon-optical-offset-inline: -0.0125rem;
1321
1488
  --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));
1322
1489
  --bf-navigation-brand-block-size: calc(var(--bf-navigation-brand-line-center-block) * 2);
1323
- --bf-icon-size-default: 1rem;
1324
- --bf-icon-size-medium: 2.5rem;
1325
- --bf-icon-size-large: 4rem;
1326
- --bf-icon-size-x-large: 4.5rem;
1327
- --bf-icon-size-xx-large: 6rem;
1328
- --bf-leading-icon-size: var(--bf-leading-mark-size);
1329
- --bf-leading-icon-gap: var(--bf-leading-mark-gap);
1330
- --bf-leading-icon-offset: var(--bf-single-line-row-visual-offset);
1331
- --bf-ui-chip-padding-inline: var(--bf-component-inline-inset-field);
1332
- --bf-ui-chip-radius: 999rem;
1333
- --bf-ui-badge-padding-inline: calc(var(--bf-body-line-height, 1.5rem) * 0.25);
1334
- --bf-ui-badge-overhang: calc(var(--bf-ui-badge-padding-inline) * -0.75);
1335
- --bf-grid-max-inline-size: var(--bf-content-max-width);
1336
- --bf-application-drawer-width-icon: var(--bf-app-drawer-width-icon);
1337
- --bf-application-drawer-width-small: var(--bf-app-drawer-width-small);
1338
- --bf-application-drawer-width-small-max: var(--bf-app-drawer-width-small-max);
1339
- --bf-application-drawer-width-medium: var(--bf-app-drawer-width-medium);
1340
- --bf-application-drawer-width-medium-max: var(--bf-app-drawer-width-medium-max);
1341
- --bf-application-drawer-width-large: var(--bf-app-drawer-width-large);
1342
- --bf-application-aside-width: var(--bf-app-aside-width);
1343
- --bf-application-aside-width-min: var(--bf-app-aside-width-min);
1344
- --bf-application-aside-width-max: var(--bf-app-aside-width-max);
1345
- --bf-application-navigation-width: var(--bf-app-navigation-width);
1346
- --bf-application-navigation-width-collapsed: var(--bf-app-navigation-width-collapsed);
1490
+ }
1491
+
1492
+ :where(.bf-theme) {
1347
1493
  --bf-color-text-default: var(--vf-color-text-default, var(--bf-color-text, #000000));
1348
1494
  --bf-color-text-muted: var(--vf-color-text-muted, var(--bf-color-muted, rgba(0, 0, 0, 0.6)));
1349
1495
  --bf-color-text-inactive: var(--vf-color-text-inactive, rgba(0, 0, 0, 0.75));
@@ -1390,9 +1536,10 @@ html.u-baseline-grid::after {
1390
1536
  --bf-color-accent: var(--vf-color-accent, #0f95a1);
1391
1537
  --bf-color-brand: var(--vf-color-brand, #e95420);
1392
1538
  --bf-color-focus: var(--vf-color-focus, #2e96ff);
1539
+ --bf-application-resize-handle-active: rgba(246, 183, 60, 0.95);
1540
+ --bf-application-resize-handle-focus-ring: rgba(246, 183, 60, 0.55);
1393
1541
 
1394
1542
  --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");
1395
- --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");
1396
1543
  --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");
1397
1544
  --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");
1398
1545
  --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");
@@ -1413,94 +1560,9 @@ html.u-baseline-grid::after {
1413
1560
  }
1414
1561
 
1415
1562
  :where(.bf-theme.bf-engine-cap) :where(.bf-input, input[type='text'], input[type='number'], input[type='search'], input[type='password'], input[type='email'], input[type='url'], textarea, select) {
1416
- margin-bottom: calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.5rem) + (var(--bf-input-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
1417
- }
1418
-
1419
- :where(.bf-theme.bf-tier-editorial) {
1420
- --bf-input-block-padding: 0.41rem;
1421
- --bf-button-block-padding: 0.41rem;
1422
- --bf-border-width: 0.0625rem;
1423
- --bf-bar-thickness: 0.1875rem;
1424
- --bf-radius: 0rem;
1425
- --bf-control-block-padding: 0.5rem;
1426
- --bf-control-block-padding-compact: 0.25rem;
1427
- --bf-control-box-size: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding) * 2));
1428
- --bf-control-box-size-compact: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding-compact) * 2));
1429
- --bf-control-inline-padding: 1rem;
1430
- --bf-control-inline-padding-action: 1rem;
1431
- --bf-control-inline-padding-field: 0.5rem;
1432
- --bf-control-visual-size: 1rem;
1433
- --bf-field-gap: 0.5rem;
1434
- --bf-panel-padding-inline: 1rem;
1435
- --bf-panel-padding-block: 1rem;
1436
- --bf-accordion-indent: 1.5rem;
1437
-
1438
- }
1439
-
1440
- :where(.bf-theme.bf-tier-documentation) {
1441
- --bf-input-block-padding: 0.0775rem;
1442
- --bf-button-block-padding: 0.0775rem;
1443
- --bf-border-width: 0.0625rem;
1444
- --bf-bar-thickness: 0.1875rem;
1445
- --bf-radius: 0rem;
1446
- --bf-control-block-padding: 0.5rem;
1447
- --bf-control-block-padding-compact: 0.375rem;
1448
- --bf-control-box-size: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding) * 2));
1449
- --bf-control-box-size-compact: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding-compact) * 2));
1450
- --bf-control-inline-padding: 1rem;
1451
- --bf-control-inline-padding-action: 1rem;
1452
- --bf-control-inline-padding-field: 0.5rem;
1453
- --bf-control-visual-size: 0.875rem;
1454
- --bf-field-gap: 0.5rem;
1455
- --bf-panel-padding-inline: 1rem;
1456
- --bf-panel-padding-block: 1rem;
1457
- --bf-accordion-indent: 1.5rem;
1458
-
1459
- }
1460
-
1461
- :where(.bf-theme.bf-tier-app) {
1462
- --bf-input-block-padding: 0.0775rem;
1463
- --bf-button-block-padding: 0.0775rem;
1464
- --bf-border-width: 0.0625rem;
1465
- --bf-bar-thickness: 0.1875rem;
1466
- --bf-radius: 0.125rem;
1467
- --bf-control-block-padding: 0.5rem;
1468
- --bf-control-block-padding-compact: 0.375rem;
1469
- --bf-control-box-size: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding) * 2));
1470
- --bf-control-box-size-compact: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding-compact) * 2));
1471
- --bf-control-inline-padding: 1rem;
1472
- --bf-control-inline-padding-action: 1rem;
1473
- --bf-control-inline-padding-field: 0.25rem;
1474
- --bf-control-visual-size: 1rem;
1475
- --bf-field-gap: 0.5rem;
1476
- --bf-panel-padding-inline: 0.75rem;
1477
- --bf-panel-padding-block: 0.75rem;
1478
- --bf-accordion-indent: 1.5rem;
1479
-
1480
- }
1481
-
1482
- :where(.bf-theme.bf-tier-os) {
1483
- --bf-input-block-padding: 0.245rem;
1484
- --bf-button-block-padding: 0.245rem;
1485
- --bf-border-width: 0.0625rem;
1486
- --bf-bar-thickness: 0.1875rem;
1487
- --bf-radius: 0rem;
1488
- --bf-control-block-padding: 0.375rem;
1489
- --bf-control-block-padding-compact: 0.25rem;
1490
- --bf-control-box-size: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding) * 2));
1491
- --bf-control-box-size-compact: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding-compact) * 2));
1492
- --bf-control-inline-padding: 1rem;
1493
- --bf-control-inline-padding-action: 1rem;
1494
- --bf-control-inline-padding-field: 0.25rem;
1495
- --bf-control-visual-size: 0.75rem;
1496
- --bf-field-gap: 0.25rem;
1497
- --bf-panel-padding-inline: 0.5rem;
1498
- --bf-panel-padding-block: 0.5rem;
1499
- --bf-accordion-indent: 0.75rem;
1500
-
1563
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
1501
1564
  }
1502
1565
 
1503
-
1504
1566
  :where(.bf-theme.is-dark) {
1505
1567
  --bf-color-text-default: var(--vf-color-text-default, var(--bf-color-text, #ffffff));
1506
1568
  --bf-color-text-muted: var(--vf-color-text-muted, var(--bf-color-muted, rgba(255, 255, 255, 0.6)));
@@ -1548,9 +1610,10 @@ html.u-baseline-grid::after {
1548
1610
  --bf-color-accent: var(--vf-color-accent, #70bbc2);
1549
1611
  --bf-color-brand: var(--vf-color-brand, #e95420);
1550
1612
  --bf-color-focus: var(--vf-color-focus, #99ccff);
1613
+ --bf-application-resize-handle-active: rgba(246, 183, 60, 0.95);
1614
+ --bf-application-resize-handle-focus-ring: rgba(246, 183, 60, 0.55);
1551
1615
 
1552
1616
  --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");
1553
- --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");
1554
1617
  --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");
1555
1618
  --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");
1556
1619
  --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");
@@ -1566,7 +1629,7 @@ html.u-baseline-grid::after {
1566
1629
  margin: 0;
1567
1630
  }
1568
1631
 
1569
- .bf-theme button {
1632
+ :where(.bf-theme) :where(button) {
1570
1633
  font: inherit;
1571
1634
  }
1572
1635
 
@@ -1621,7 +1684,7 @@ html.u-baseline-grid::after {
1621
1684
 
1622
1685
  :where(.bf-theme) :where(.bf-field.is-range) {
1623
1686
  align-items: start;
1624
- column-gap: calc(var(--bf-baseline) * 2);
1687
+ column-gap: var(--bf-component-inline-inset-field);
1625
1688
  display: grid;
1626
1689
  grid-template-columns: max-content minmax(0, 1fr);
1627
1690
  row-gap: var(--bf-field-gap);
@@ -1665,13 +1728,13 @@ html.u-baseline-grid::after {
1665
1728
  margin: 0;
1666
1729
  min-inline-size: 0;
1667
1730
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
1668
- padding-inline: var(--bf-component-inline-inset-continuation);
1731
+ padding-inline: var(--bf-panel-padding-inline);
1669
1732
  padding-block-start: var(--bf-panel-padding-block);
1670
1733
  }
1671
1734
 
1672
1735
  :where(.bf-theme) :where(fieldset, .bf-fieldset) > :where(legend, .bf-legend) {
1673
1736
  margin-bottom: 0;
1674
- padding-inline: calc(var(--bf-baseline) * 0.5);
1737
+ padding-inline: var(--bf-inline-unit);
1675
1738
  }
1676
1739
 
1677
1740
  :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) {
@@ -1690,8 +1753,8 @@ html.u-baseline-grid::after {
1690
1753
  inline-size: 100%;
1691
1754
  max-inline-size: 100%;
1692
1755
  min-inline-size: 0;
1693
- margin-bottom: calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.5rem) + (var(--bf-input-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
1694
- padding-block: max(0rem, calc(var(--bf-input-block-padding) - var(--bf-border-width)));
1756
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
1757
+ padding-block: var(--bf-interface-row-padding-block);
1695
1758
  padding-inline: var(--bf-component-inline-inset-field);
1696
1759
  }
1697
1760
 
@@ -1709,8 +1772,8 @@ html.u-baseline-grid::after {
1709
1772
  content: "\00a0";
1710
1773
  grid-area: color-control;
1711
1774
  line-height: var(--bf-body-line-height);
1712
- margin-bottom: var(--bf-single-line-row-margin-block-end);
1713
- padding-block: var(--bf-single-line-row-padding-block);
1775
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
1776
+ padding-block: var(--bf-interface-row-padding-block);
1714
1777
  visibility: hidden;
1715
1778
  }
1716
1779
 
@@ -1719,7 +1782,7 @@ html.u-baseline-grid::after {
1719
1782
  block-size: auto;
1720
1783
  grid-area: color-control;
1721
1784
  inline-size: 100%;
1722
- margin-bottom: var(--bf-single-line-row-margin-block-end);
1785
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
1723
1786
  min-block-size: 0;
1724
1787
  padding: var(--bf-border-width);
1725
1788
  }
@@ -1750,7 +1813,7 @@ html.u-baseline-grid::after {
1750
1813
 
1751
1814
  :where(.bf-theme) :where(textarea) {
1752
1815
  block-size: auto;
1753
- min-block-size: calc(var(--bf-control-box-size) * 2);
1816
+ min-block-size: calc((var(--bf-interface-row-occupied-block-size) * 2) - var(--bf-interface-row-compensation-block-end));
1754
1817
  resize: vertical;
1755
1818
  }
1756
1819
 
@@ -1764,7 +1827,7 @@ html.u-baseline-grid::after {
1764
1827
  border: 0 solid transparent;
1765
1828
  box-shadow: inset 0 calc(var(--bf-border-width) * -1) 0 var(--bf-color-border-default);
1766
1829
  color: var(--bf-color-text-default);
1767
- margin-bottom: calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.5rem) + (var(--bf-input-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
1830
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
1768
1831
  max-inline-size: 100%;
1769
1832
  min-inline-size: 0;
1770
1833
  padding-block: 0;
@@ -1786,8 +1849,8 @@ html.u-baseline-grid::after {
1786
1849
  cursor: pointer;
1787
1850
  margin-inline-end: var(--bf-field-gap);
1788
1851
  min-block-size: 0;
1789
- padding-block: var(--bf-single-line-row-padding-block);
1790
- padding-inline: var(--bf-control-inline-padding-action-bordered);
1852
+ padding-block: var(--bf-interface-row-padding-block);
1853
+ padding-inline: var(--bf-component-inline-inset-action-bordered);
1791
1854
  }
1792
1855
 
1793
1856
  :where(.bf-theme) :where(input[type='file'])::file-selector-button:hover {
@@ -1800,7 +1863,7 @@ html.u-baseline-grid::after {
1800
1863
  background-repeat: no-repeat;
1801
1864
  background-size: 1rem 1rem;
1802
1865
  overflow: hidden;
1803
- padding-inline-end: calc(var(--bf-component-inline-inset-field) * 2.5);
1866
+ padding-inline-end: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
1804
1867
  text-overflow: ellipsis;
1805
1868
  white-space: nowrap;
1806
1869
  }
@@ -1809,16 +1872,14 @@ html.u-baseline-grid::after {
1809
1872
  font-variant-numeric: tabular-nums;
1810
1873
  }
1811
1874
 
1812
- /* Number fields retain their native input semantics and keyboard stepping,
1813
- while one field-owned background paints the compact pair. Sharing select's
1814
- 1rem canvas and end position avoids a second browser-reserved spin slot. */
1875
+ /* Keep the browser-owned number stepper. A painted replacement cannot expose
1876
+ the native pointer targets, min/max handling, or platform accessibility. */
1815
1877
  :where(.bf-theme) :where(input[type='number']) {
1816
- appearance: textfield;
1817
- background-image: var(--bf-ui-icon-number-stepper);
1818
- background-position: right var(--bf-component-inline-inset-field) center;
1819
- background-repeat: no-repeat;
1820
- background-size: 1rem 1rem;
1821
- padding-inline-end: calc(var(--bf-component-inline-inset-field) * 2.5);
1878
+ appearance: auto;
1879
+ }
1880
+
1881
+ :where(.bf-theme) :where(select:dir(rtl)) {
1882
+ background-position: left var(--bf-component-inline-inset-field) center;
1822
1883
  }
1823
1884
 
1824
1885
  :where(.bf-theme) :where(.bf-slider-input) {
@@ -1830,12 +1891,6 @@ html.u-baseline-grid::after {
1830
1891
  text-align: right;
1831
1892
  }
1832
1893
 
1833
- :where(.bf-theme) :where(input[type='number'])::-webkit-inner-spin-button,
1834
- :where(.bf-theme) :where(input[type='number'])::-webkit-outer-spin-button {
1835
- appearance: none;
1836
- margin: 0;
1837
- }
1838
-
1839
1894
  :where(.bf-theme) :where(.bf-checkbox, .bf-radio) {
1840
1895
  display: grid;
1841
1896
  margin: 0;
@@ -1863,8 +1918,8 @@ html.u-baseline-grid::after {
1863
1918
  border-block: var(--bf-border-width) solid transparent;
1864
1919
  cursor: pointer;
1865
1920
  display: block;
1866
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
1867
- padding-block: var(--bf-single-line-row-padding-block);
1921
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
1922
+ padding-block: var(--bf-interface-row-padding-block);
1868
1923
  padding-inline-start: var(--bf-tick-label-offset);
1869
1924
  position: relative;
1870
1925
  }
@@ -2012,8 +2067,8 @@ html.u-baseline-grid::after {
2012
2067
  border-block: var(--bf-border-width) solid transparent;
2013
2068
  cursor: pointer;
2014
2069
  display: inline-block;
2015
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
2016
- padding-block: var(--bf-single-line-row-padding-block);
2070
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
2071
+ padding-block: var(--bf-interface-row-padding-block);
2017
2072
  }
2018
2073
 
2019
2074
  :where(.bf-theme) :where(.bf-validation-message) {
@@ -2024,9 +2079,9 @@ html.u-baseline-grid::after {
2024
2079
  line-height: var(--bf-body-line-height, 1.5rem);
2025
2080
  border-block: var(--bf-border-width) solid transparent;
2026
2081
  color: var(--bf-color-text-muted);
2027
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
2082
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
2028
2083
  margin-inline-start: var(--bf-leading-mark-group-inset);
2029
- padding-block: var(--bf-single-line-row-padding-block);
2084
+ padding-block: var(--bf-interface-row-padding-block);
2030
2085
  padding-inline-start: var(--bf-leading-mark-offset);
2031
2086
  position: relative;
2032
2087
  }
@@ -2209,6 +2264,23 @@ html.u-baseline-grid::after {
2209
2264
  outline: calc(var(--bf-baseline) * 0.25) solid var(--bf-color-focus);
2210
2265
  }
2211
2266
 
2267
+ :where(.bf-theme) {
2268
+ --bf-icon-size-default: 1rem;
2269
+ --bf-icon-size-medium: 2.5rem;
2270
+ --bf-icon-size-large: 4rem;
2271
+ --bf-icon-size-x-large: 4.5rem;
2272
+ --bf-icon-size-xx-large: 6rem;
2273
+ /* Vanilla's inline-icon metric aligns icon paint to the cap-height centre.
2274
+ Half the scalable border supplies the optical lift. */
2275
+ --bf-inline-icon-baseline-shift: calc((var(--bf-border-width) * 0.5) + ((1cap - var(--bf-icon-size-default)) / 2));
2276
+ /* The default icon can meet the compact body line at a raster edge. Trim its
2277
+ layout margin by one scalable border without moving its cap-centred paint. */
2278
+ --bf-inline-icon-line-box-trim: calc(var(--bf-border-width) * -1);
2279
+ --bf-leading-icon-size: var(--bf-leading-mark-size);
2280
+ --bf-leading-icon-gap: var(--bf-leading-mark-gap);
2281
+ --bf-leading-icon-offset: var(--bf-interface-row-visual-offset);
2282
+ }
2283
+
2212
2284
  :where(.bf-theme) :where(.bf-icon) {
2213
2285
  --bf-icon-image: none;
2214
2286
  --bf-icon-size: var(--bf-icon-size-default);
@@ -2222,29 +2294,34 @@ html.u-baseline-grid::after {
2222
2294
  flex: 0 0 auto;
2223
2295
  inline-size: var(--bf-icon-size);
2224
2296
  margin: 0;
2297
+ margin-block-start: var(--bf-inline-icon-line-box-trim);
2225
2298
  overflow: hidden;
2226
2299
  padding: 0;
2227
2300
  text-indent: 110vw;
2228
2301
  transform: var(--bf-icon-transform);
2229
2302
  transform-origin: center;
2230
- vertical-align: bottom;
2303
+ vertical-align: calc(var(--bf-inline-icon-baseline-shift) + ((var(--bf-icon-size-default) - var(--bf-icon-size)) / 2));
2231
2304
  white-space: nowrap;
2232
2305
  }
2233
2306
 
2234
2307
  :where(.bf-theme) :where(.bf-icon.is-medium) {
2235
2308
  --bf-icon-size: var(--bf-icon-size-medium);
2309
+ --bf-inline-icon-line-box-trim: 0rem;
2236
2310
  }
2237
2311
 
2238
2312
  :where(.bf-theme) :where(.bf-icon.is-large) {
2239
2313
  --bf-icon-size: var(--bf-icon-size-large);
2314
+ --bf-inline-icon-line-box-trim: 0rem;
2240
2315
  }
2241
2316
 
2242
2317
  :where(.bf-theme) :where(.bf-icon.is-x-large) {
2243
2318
  --bf-icon-size: var(--bf-icon-size-x-large);
2319
+ --bf-inline-icon-line-box-trim: 0rem;
2244
2320
  }
2245
2321
 
2246
2322
  :where(.bf-theme) :where(.bf-icon.is-xx-large) {
2247
2323
  --bf-icon-size: var(--bf-icon-size-xx-large);
2324
+ --bf-inline-icon-line-box-trim: 0rem;
2248
2325
  }
2249
2326
 
2250
2327
  :where(.bf-theme) :where(.bf-icon.is-search) {
@@ -2296,9 +2373,9 @@ html.u-baseline-grid::after {
2296
2373
  color: var(--bf-color-text-default);
2297
2374
  cursor: pointer;
2298
2375
  display: inline-block;
2299
- margin-bottom: var(--bf-single-line-row-margin-block-end);
2300
- padding-block: var(--bf-single-line-row-padding-block);
2301
- padding-inline: var(--bf-control-inline-padding-action-bordered);
2376
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
2377
+ padding-block: var(--bf-interface-row-padding-block);
2378
+ padding-inline: var(--bf-component-inline-inset-action-bordered);
2302
2379
  text-align: center;
2303
2380
  text-decoration: none;
2304
2381
  }
@@ -2427,7 +2504,7 @@ html.u-baseline-grid::after {
2427
2504
 
2428
2505
  :where(.bf-theme) :where(.bf-button.is-icon) {
2429
2506
  align-items: center;
2430
- column-gap: var(--bf-space-1);
2507
+ column-gap: var(--bf-leading-mark-gap);
2431
2508
  display: inline-flex;
2432
2509
  justify-content: center;
2433
2510
  }
@@ -2435,21 +2512,44 @@ html.u-baseline-grid::after {
2435
2512
  /* An icon-only flex button has no text line box to preserve the occupied
2436
2513
  * control rhythm. A zero-width metric strut restores the active body line
2437
2514
  * without imposing a target block size or changing icon/label spacing. */
2438
- :where(.bf-theme) :where(.bf-button.is-icon:not(:has(.bf-button-label))) {
2515
+ :where(.bf-theme) :where(.bf-button.is-icon:not(.is-nested):not(:has(.bf-button-label))) {
2516
+ --bf-action-target-overflow: max(0rem, calc((24px - var(--bf-square-block-size)) / 2));
2517
+
2439
2518
  column-gap: 0;
2519
+ justify-self: start;
2520
+ margin-inline: var(--bf-action-target-overflow);
2521
+ min-inline-size: var(--bf-square-block-size);
2522
+ padding-inline: 0;
2523
+ position: relative;
2440
2524
  }
2441
2525
 
2442
- :where(.bf-theme) :where(.bf-button.is-icon:not(:has(.bf-button-label)))::before {
2526
+ :where(.bf-theme) :where(.bf-button.is-icon:not(.is-nested):not(:has(.bf-button-label)))::before {
2443
2527
  block-size: var(--bf-body-line-height);
2444
2528
  content: "";
2445
2529
  inline-size: 0;
2446
2530
  }
2447
2531
 
2532
+ /* WCAG 2.2 SC 2.5.8 defines its minimum in CSS pixels. This transparent,
2533
+ * out-of-flow box extends only the pointer target; it does not change the
2534
+ * control's paint or occupied block geometry. */
2535
+ :where(.bf-theme) :where(.bf-button.is-icon:not(.is-nested):not(:has(.bf-button-label)))::after {
2536
+ block-size: max(100%, 24px);
2537
+ content: "";
2538
+ inline-size: max(100%, 24px);
2539
+ left: 50%;
2540
+ pointer-events: auto;
2541
+ position: absolute;
2542
+ top: 50%;
2543
+ translate: -50% -50%;
2544
+ }
2545
+
2448
2546
  :where(.bf-theme) :where(.bf-button-label) {
2449
2547
  min-inline-size: 0;
2450
2548
  }
2451
2549
 
2452
2550
  :where(.bf-theme) :where(.bf-actions) {
2551
+ --bf-action-target-row-gap-floor: var(--bf-baseline);
2552
+
2453
2553
  align-items: center;
2454
2554
  display: flex;
2455
2555
  flex-wrap: wrap;
@@ -2457,6 +2557,19 @@ html.u-baseline-grid::after {
2457
2557
  min-inline-size: 0;
2458
2558
  }
2459
2559
 
2560
+ /* Row-gap has no single-line cost and cannot move a flex item's paint. BF's
2561
+ * wrapping primitives therefore own a positive block-axis target separation
2562
+ * without inspecting their descendants through :has(). */
2563
+ :where(.bf-theme) :where(.bf-actions:not(.is-nowrap)) {
2564
+ row-gap: max(var(--bf-field-gap), var(--bf-action-target-row-gap-floor));
2565
+ }
2566
+
2567
+ :where(.bf-theme) :where(.bf-cluster:not(.is-nowrap)) {
2568
+ --bf-action-target-row-gap-floor: var(--bf-baseline);
2569
+
2570
+ row-gap: max(var(--bf-cluster-space), var(--bf-action-target-row-gap-floor));
2571
+ }
2572
+
2460
2573
  :where(.bf-theme) :where(.bf-actions.is-end) {
2461
2574
  justify-content: flex-end;
2462
2575
  }
@@ -2467,11 +2580,64 @@ html.u-baseline-grid::after {
2467
2580
  scrollbar-width: thin;
2468
2581
  }
2469
2582
 
2583
+ /* A nowrap row becomes a clipping scrollport. Only direct icon-only targets
2584
+ * reserve their own block overflow, so text-only strips keep their original
2585
+ * block size and leading keyline. Existing target-owned inline margins supply
2586
+ * the corresponding logical-edge scroll extent. */
2587
+ :where(.bf-theme) :where(.bf-actions.is-nowrap) > :where(.bf-button.is-icon:not(.is-nested):not(:has(.bf-button-label))) {
2588
+ --bf-action-target-block-clearance: var(--bf-baseline);
2589
+
2590
+ margin-block-end: calc(var(--bf-action-target-block-clearance) + var(--bf-interface-row-compensation-block-end));
2591
+ margin-block-start: var(--bf-action-target-block-clearance);
2592
+ }
2593
+
2594
+ :where(.bf-theme) :where(.bf-actions.is-nowrap) > :where(.bf-button.is-link.is-icon:not(.is-nested):not(:has(.bf-button-label))) {
2595
+ margin-block-end: var(--bf-action-target-block-clearance);
2596
+ }
2597
+
2598
+ /* Modern CSS rounds the exact inter-row and per-edge scrollport shortfalls up
2599
+ * to the active baseline. The one-baseline fallback is safe for built-in tiers
2600
+ * and remains on phase in older engines. */
2601
+ @supports (row-gap: round(up, 0.0625rem, 0.0625rem)) {
2602
+ :where(.bf-theme) :where(.bf-actions:not(.is-nowrap), .bf-cluster:not(.is-nowrap)) {
2603
+ --bf-action-target-row-gap-floor: round(up, max(0rem, calc(24px - var(--bf-body-line-height) + var(--bf-border-width))), var(--bf-baseline));
2604
+ }
2605
+
2606
+ :where(.bf-theme) :where(.bf-actions.is-nowrap) > :where(.bf-button.is-icon:not(.is-nested):not(:has(.bf-button-label))) {
2607
+ --bf-action-target-block-clearance: round(up, max(0rem, calc((24px - var(--bf-body-line-height)) / 2)), var(--bf-baseline));
2608
+ }
2609
+ }
2610
+
2470
2611
  :where(.bf-theme) :where(.bf-actions.is-nowrap) > * {
2471
2612
  flex: 0 0 auto;
2472
2613
  }
2473
2614
 
2474
2615
 
2616
+ :where(.bf-theme) :where(input.bf-input.is-nested:not([type]), input.bf-input.is-nested[type='text'], input.bf-input.is-nested[type='number'], input.bf-input.is-nested[type='search'], input.bf-input.is-nested[type='password'], input.bf-input.is-nested[type='email'], input.bf-input.is-nested[type='url'], input.bf-input.is-nested[type='tel'], select.bf-input.is-nested, .bf-button.is-nested:not(.is-link)) {
2617
+ line-height: var(--bf-nested-row-line-height);
2618
+ margin-block: 0;
2619
+ padding-block: var(--bf-nested-framed-row-padding-block);
2620
+ }
2621
+
2622
+ /* Replaced textual controls retain a browser-owned intrinsic block floor even
2623
+ after their line and padding adopt the nested contract. This derived size is the exact
2624
+ sum of that same line, padding and real borders; it is not a density target
2625
+ independent of the active tier. */
2626
+ :where(.bf-theme) :where(input.bf-input.is-nested:not([type]), input.bf-input.is-nested[type='text'], input.bf-input.is-nested[type='number'], input.bf-input.is-nested[type='search'], input.bf-input.is-nested[type='password'], input.bf-input.is-nested[type='email'], input.bf-input.is-nested[type='url'], input.bf-input.is-nested[type='tel'], select.bf-input.is-nested) {
2627
+ block-size: var(--bf-nested-framed-row-painted-block-size);
2628
+ }
2629
+
2630
+ :where(.bf-theme) :where(.bf-checkbox.is-nested, .bf-radio.is-nested) {
2631
+ --bf-tick-box-offset: var(--bf-nested-framed-row-visual-offset);
2632
+ }
2633
+
2634
+ :where(.bf-theme) :where(.bf-checkbox.is-nested > .bf-checkbox-label, .bf-radio.is-nested > .bf-radio-label) {
2635
+ line-height: var(--bf-nested-row-line-height);
2636
+ margin-block: 0;
2637
+ padding-block: var(--bf-nested-framed-row-padding-block);
2638
+ }
2639
+
2640
+
2475
2641
  /* ------------------------------------------------------------------ */
2476
2642
  /* CTA block (Vanilla parity). */
2477
2643
  /* Inline-row of call-to-action items (typically a heading and one or */
@@ -2484,7 +2650,7 @@ html.u-baseline-grid::after {
2484
2650
 
2485
2651
  :where(.bf-theme) :where(.bf-cta-block) {
2486
2652
  align-items: baseline;
2487
- column-gap: var(--bf-space-2);
2653
+ column-gap: var(--bf-component-inline-inset-action);
2488
2654
  display: flex;
2489
2655
  flex-wrap: wrap;
2490
2656
  margin-block-end: 0;
@@ -2521,7 +2687,7 @@ html.u-baseline-grid::after {
2521
2687
  :where(.bf-theme) :where(.bf-figure.is-light-inset) > :where(img, picture, video, canvas, svg, .bf-aspect) {
2522
2688
  background: #fff;
2523
2689
  box-sizing: border-box;
2524
- padding: var(--bf-space-2);
2690
+ padding: var(--bf-space-2) var(--bf-panel-padding-inline);
2525
2691
  }
2526
2692
 
2527
2693
  :where(.bf-theme) :where(.bf-figure-caption) {
@@ -2608,7 +2774,7 @@ html.u-baseline-grid::after {
2608
2774
  margin: 0;
2609
2775
  max-inline-size: 100%;
2610
2776
  padding-block: var(--bf-space-2);
2611
- padding-inline: var(--bf-space-2);
2777
+ padding-inline: var(--bf-panel-padding-inline);
2612
2778
  }
2613
2779
 
2614
2780
  :where(.bf-theme) :where(.bf-notice.is-information) {
@@ -2865,7 +3031,7 @@ html.u-baseline-grid::after {
2865
3031
  :where(.bf-theme) :where(.bf-credential-header) {
2866
3032
  align-items: flex-start;
2867
3033
  display: flex;
2868
- gap: var(--bf-space-2);
3034
+ gap: var(--bf-component-inline-inset-action);
2869
3035
  justify-content: space-between;
2870
3036
  min-inline-size: 0;
2871
3037
  }
@@ -2927,9 +3093,10 @@ html.u-baseline-grid::after {
2927
3093
 
2928
3094
  :where(.bf-theme) :where(.bf-notification, .bf-notification.is-information, .bf-notification.is-positive, .bf-notification.is-caution, .bf-notification.is-negative) {
2929
3095
  --bf-notification-accent: var(--bf-color-border-information);
3096
+ --bf-notification-close-painted-block-size: calc((var(--bf-space-1) * 2) + var(--bf-icon-size-default));
3097
+ --bf-notification-rail-shortfall: max(0rem, calc(var(--bf-bar-thickness) + var(--bf-leading-mark-size) + var(--bf-leading-mark-gap) - var(--bf-component-inline-inset-continuation)));
2930
3098
  background: var(--bf-color-background-default);
2931
3099
  border: var(--bf-border-width) solid var(--bf-color-border-default);
2932
- border-inline-start: var(--bf-bar-thickness) solid var(--bf-notification-accent);
2933
3100
  color: var(--bf-color-text-default);
2934
3101
  margin-block: 0;
2935
3102
  max-inline-size: 100%;
@@ -2937,10 +3104,20 @@ html.u-baseline-grid::after {
2937
3104
  overflow-wrap: anywhere;
2938
3105
  padding-block-end: max(0rem, calc(var(--bf-space-half) - var(--bf-border-width)));
2939
3106
  padding-block-start: 0;
2940
- padding-inline: calc(var(--bf-icon-label-inline-offset) - var(--bf-bar-thickness)) var(--bf-space-1);
3107
+ padding-inline: calc(var(--bf-component-inline-inset-continuation) - var(--bf-border-width)) var(--bf-component-inline-inset-action);
2941
3108
  position: relative;
2942
3109
  }
2943
3110
 
3111
+ :where(.bf-theme) :where(.bf-notification:not(.is-borderless))::before {
3112
+ background: var(--bf-notification-accent);
3113
+ content: "";
3114
+ inline-size: var(--bf-bar-thickness);
3115
+ inset-block: calc(var(--bf-border-width) * -1);
3116
+ inset-inline-start: calc((var(--bf-border-width) + var(--bf-notification-rail-shortfall)) * -1);
3117
+ pointer-events: none;
3118
+ position: absolute;
3119
+ }
3120
+
2944
3121
  :where(.bf-theme) :where(.bf-notification.is-positive) {
2945
3122
  --bf-notification-accent: var(--bf-color-border-positive);
2946
3123
  }
@@ -2960,14 +3137,16 @@ html.u-baseline-grid::after {
2960
3137
  :where(.bf-theme) :where(.bf-notification.is-borderless) {
2961
3138
  border: 0;
2962
3139
  padding-block: 0;
2963
- padding-inline: calc(var(--bf-icon-size-default) + var(--bf-space-1)) 0;
3140
+ padding-inline: calc(var(--bf-leading-mark-size) + var(--bf-leading-mark-gap)) 0;
2964
3141
  }
2965
3142
 
2966
3143
  :where(.bf-theme) :where(.bf-notification-icon) {
3144
+ --bf-icon-size: var(--bf-leading-mark-size);
2967
3145
  background-color: var(--bf-notification-accent);
2968
3146
  background-image: none;
2969
- inset-block-start: calc(((var(--bf-h6-line-height) - var(--bf-icon-size-default)) / 2) + var(--bf-h6-nudge-start) - var(--bf-border-width));
2970
- inset-inline-start: calc(var(--bf-icon-label-inline-offset) - var(--bf-bar-thickness) - var(--bf-icon-size-default) - var(--bf-space-1));
3147
+ inset-block-start: calc(((var(--bf-h6-line-height) - var(--bf-leading-mark-size)) / 2) + var(--bf-h6-nudge-start) - var(--bf-border-width));
3148
+ inset-inline-start: calc(var(--bf-component-inline-inset-continuation) - var(--bf-border-width) - var(--bf-leading-mark-size) - var(--bf-leading-mark-gap));
3149
+ margin-block-start: 0;
2971
3150
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zm0 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-.75 5.25h1.5v5h-1.5v-5zM8 3.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2z'/%3E%3C/svg%3E");
2972
3151
  mask-position: center;
2973
3152
  mask-repeat: no-repeat;
@@ -2988,12 +3167,12 @@ html.u-baseline-grid::after {
2988
3167
  }
2989
3168
 
2990
3169
  :where(.bf-theme) :where(.bf-notification.is-borderless > .bf-notification-icon) {
2991
- inset-block-start: calc(((var(--bf-h6-line-height) - var(--bf-icon-size-default)) / 2) + var(--bf-h6-nudge-start));
3170
+ inset-block-start: calc(((var(--bf-h6-line-height) - var(--bf-leading-mark-size)) / 2) + var(--bf-h6-nudge-start));
2992
3171
  inset-inline-start: 0;
2993
3172
  }
2994
3173
 
2995
3174
  :where(.bf-theme) :where(.bf-notification.is-inline > .bf-notification-icon) {
2996
- inset-block-start: calc(((var(--bf-body-line-height) - var(--bf-icon-size-default)) / 2) + var(--bf-body-nudge-start) - var(--bf-border-width));
3175
+ inset-block-start: calc(((var(--bf-body-line-height) - var(--bf-leading-mark-size)) / 2) + var(--bf-body-nudge-start) - var(--bf-border-width));
2997
3176
  }
2998
3177
 
2999
3178
  :where(.bf-theme) :where(.bf-notification-content, .bf-notification-meta) {
@@ -3005,7 +3184,7 @@ html.u-baseline-grid::after {
3005
3184
  /* Neutralise the shell's top border so the first metric role starts on-grid. */
3006
3185
  margin-block: calc(var(--bf-border-width) * -1) 0;
3007
3186
  padding-block-start: 0;
3008
- padding-inline-end: calc(var(--bf-icon-size-default) + var(--bf-space-1));
3187
+ padding-inline-end: var(--bf-notification-close-painted-block-size);
3009
3188
  }
3010
3189
 
3011
3190
  :where(.bf-theme) :where(.bf-notification.is-borderless .bf-notification-content) {
@@ -3049,9 +3228,9 @@ html.u-baseline-grid::after {
3049
3228
  }
3050
3229
 
3051
3230
  :where(.bf-theme) :where(.bf-notification-close) {
3052
- block-size: calc((var(--bf-space-1) * 2) + var(--bf-icon-size-default));
3231
+ block-size: var(--bf-square-block-size);
3053
3232
  border: 0;
3054
- inline-size: var(--bf-icon-size-default);
3233
+ inline-size: var(--bf-square-block-size);
3055
3234
  margin-block-end: 0;
3056
3235
  padding: 0;
3057
3236
  position: absolute;
@@ -3069,11 +3248,11 @@ html.u-baseline-grid::after {
3069
3248
  border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
3070
3249
  display: flex;
3071
3250
  flex-wrap: wrap;
3072
- gap: var(--bf-space-1) var(--bf-space-2);
3251
+ gap: var(--bf-space-1) var(--bf-component-inline-inset-action);
3073
3252
  justify-content: space-between;
3074
3253
  margin-block-end: 0;
3075
3254
  padding-block-start: calc(var(--bf-space-1) - var(--bf-border-width));
3076
- padding-inline-end: var(--bf-space-2);
3255
+ padding-inline-end: var(--bf-component-inline-inset-action);
3077
3256
  }
3078
3257
 
3079
3258
  :where(.bf-theme) :where(.bf-notification.is-inline .bf-notification-meta) {
@@ -3092,7 +3271,7 @@ html.u-baseline-grid::after {
3092
3271
  align-items: flex-start;
3093
3272
  display: flex;
3094
3273
  flex-wrap: wrap;
3095
- gap: var(--bf-space-1) var(--bf-space-2);
3274
+ gap: var(--bf-space-1) var(--bf-component-inline-inset-action);
3096
3275
  margin-inline-start: auto;
3097
3276
  min-inline-size: 0;
3098
3277
  }
@@ -3119,10 +3298,12 @@ html.u-baseline-grid::after {
3119
3298
  cursor: inherit;
3120
3299
  display: inline-block;
3121
3300
  font: inherit;
3122
- margin: -0.125rem calc(var(--bf-space-half) * -1);
3301
+ margin-block: -0.125rem;
3302
+ margin-inline: calc((var(--bf-component-inline-inset-field) / 2) * -1);
3123
3303
  max-inline-size: 100%;
3124
3304
  overflow: hidden;
3125
- padding: 0.125rem var(--bf-space-half);
3305
+ padding-block: 0.125rem;
3306
+ padding-inline: calc(var(--bf-component-inline-inset-field) / 2);
3126
3307
  text-align: inherit;
3127
3308
  text-decoration: inherit;
3128
3309
  text-overflow: inherit;
@@ -3155,9 +3336,10 @@ html.u-baseline-grid::after {
3155
3336
  content: "";
3156
3337
  display: inline-block;
3157
3338
  inline-size: var(--bf-icon-size-default);
3158
- margin-inline-start: var(--bf-space-half);
3339
+ margin-block-start: var(--bf-inline-icon-line-box-trim);
3340
+ margin-inline-start: calc(var(--bf-leading-mark-gap) / 2);
3159
3341
  opacity: 0;
3160
- vertical-align: calc((1cap - var(--bf-icon-size-default)) / 2);
3342
+ vertical-align: var(--bf-inline-icon-baseline-shift);
3161
3343
  }
3162
3344
 
3163
3345
  :where(.bf-theme) :where(.bf-table.is-sortable th[aria-sort='ascending'], .bf-table.is-sortable th[aria-sort='descending'])::after {
@@ -3210,7 +3392,7 @@ html.u-baseline-grid::after {
3210
3392
 
3211
3393
  :where(.bf-theme) :where(.bf-table-mobile-card-frame > .bf-table.is-mobile-card > tbody) {
3212
3394
  display: grid;
3213
- gap: 0 var(--bf-space-3);
3395
+ gap: 0 var(--bf-component-inline-inset-continuation);
3214
3396
  grid-template-columns: repeat(auto-fit, minmax(min(12rem, 100%), 1fr));
3215
3397
  inline-size: 100%;
3216
3398
  }
@@ -3220,7 +3402,7 @@ html.u-baseline-grid::after {
3220
3402
  display: block;
3221
3403
  margin-block-end: calc(var(--bf-space-3) - (var(--bf-border-width) * 2));
3222
3404
  min-inline-size: 0;
3223
- padding-inline: var(--bf-space-2);
3405
+ padding-inline: var(--bf-panel-padding-inline);
3224
3406
  }
3225
3407
 
3226
3408
  :where(.bf-theme) :where(.bf-table-mobile-card-frame > .bf-table.is-mobile-card > tbody > tr > :where(th, td)) {
@@ -3281,7 +3463,7 @@ html.u-baseline-grid::after {
3281
3463
  align-items: center;
3282
3464
  display: flex;
3283
3465
  flex-wrap: wrap;
3284
- column-gap: var(--bf-space-4);
3466
+ column-gap: var(--bf-component-inline-inset-continuation);
3285
3467
  min-inline-size: 0;
3286
3468
  padding-block: var(--bf-space-1);
3287
3469
  }
@@ -3454,7 +3636,7 @@ html.u-baseline-grid::after {
3454
3636
 
3455
3637
  :where(.bf-theme) :where(.bf-media-object-meta) {
3456
3638
  align-items: start;
3457
- column-gap: var(--bf-space-1);
3639
+ column-gap: var(--bf-leading-mark-gap);
3458
3640
  display: grid;
3459
3641
  grid-template-columns: var(--bf-icon-size-default) minmax(0, 1fr);
3460
3642
  min-inline-size: 0;
@@ -3721,10 +3903,10 @@ html.u-baseline-grid::after {
3721
3903
  text-underline-offset: 0.12em;
3722
3904
  }
3723
3905
 
3724
- /* A balanced section switches at the shared readable 50/50 threshold. The
3906
+ /* A balanced section switches at the standard medium container threshold. The
3725
3907
  layout descendant reacts to the root container; the query never tries to
3726
3908
  restyle the container that established it. */
3727
- @container bf-basic-section (width >= 45rem) {
3909
+ @container bf-basic-section (width >= 38.75rem) {
3728
3910
  :where(.bf-theme) :where(.bf-basic-section-layout) {
3729
3911
  column-gap: var(--bf-grid-gap-inline);
3730
3912
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -3874,7 +4056,7 @@ html.u-baseline-grid::after {
3874
4056
 
3875
4057
  /* Current Vanilla scopes a one-spacing-unit icon/value gap to the hero. */
3876
4058
  :where(.bf-theme) :where(.bf-hero-chip.bf-chip) {
3877
- column-gap: var(--bf-space-1);
4059
+ column-gap: var(--bf-leading-mark-gap);
3878
4060
  }
3879
4061
 
3880
4062
  :where(.bf-theme) :where(.bf-hero-media > :where(img, picture, video, canvas, svg), .bf-hero-signpost > :where(img, picture, video, canvas, svg)) {
@@ -3923,6 +4105,13 @@ html.u-baseline-grid::after {
3923
4105
  }
3924
4106
  }
3925
4107
 
4108
+ /* A hero can keep its entry rule while placing its content directly against
4109
+ that boundary. Scope this exception to the hero instead of publishing a
4110
+ global padding utility. */
4111
+ :where(.bf-theme) :where(.bf-hero.is-top-flush) {
4112
+ padding-block-start: 0;
4113
+ }
4114
+
3926
4115
  @container bf-hero (width >= 45rem) {
3927
4116
  :where(.bf-theme) :where(.bf-hero-layout) {
3928
4117
  column-gap: var(--bf-grid-gap-inline);
@@ -4460,9 +4649,8 @@ html.u-baseline-grid::after {
4460
4649
  overscroll-behavior: contain;
4461
4650
  }
4462
4651
 
4463
- /* Panel chrome and content consume the live page-grid gutter through a local
4464
- * derived property, so their internal text rails follow the same
4465
- * viewport brackets as surrounding page content. */
4652
+ /* Panel chrome and content share the continuation component inset through a
4653
+ * local property. Structural surface padding remains a separate contract. */
4466
4654
  :where(.bf-theme) :where(.bf-panel-header) {
4467
4655
  align-items: start;
4468
4656
  display: flex;
@@ -4471,7 +4659,7 @@ html.u-baseline-grid::after {
4471
4659
  justify-content: space-between;
4472
4660
  padding-block-end: var(--bf-panel-padding-block);
4473
4661
  padding-block-start: var(--bf-panel-padding-block);
4474
- padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
4662
+ padding-inline: var(--bf-panel-content-padding-inline);
4475
4663
  }
4476
4664
 
4477
4665
  /* A navigation brand keeps the Canonical tag attached to the panel's top edge
@@ -4481,7 +4669,7 @@ html.u-baseline-grid::after {
4481
4669
  gap: 0;
4482
4670
  padding-block: 0;
4483
4671
  padding-inline-end: 0;
4484
- padding-inline-start: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
4672
+ padding-inline-start: var(--bf-panel-content-padding-inline);
4485
4673
  }
4486
4674
 
4487
4675
  :where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) > :where(.bf-top-navigation-logo.is-canonical-tagged) {
@@ -4508,10 +4696,10 @@ html.u-baseline-grid::after {
4508
4696
  flex-wrap: wrap;
4509
4697
  gap: var(--bf-field-gap);
4510
4698
  justify-content: space-between;
4511
- min-block-size: calc(var(--bf-control-box-size-compact) + var(--bf-panel-padding-block));
4699
+ min-block-size: calc(var(--bf-interface-row-occupied-block-size) + var(--bf-panel-padding-block));
4512
4700
  padding-block-end: var(--bf-panel-padding-block);
4513
4701
  padding-block-start: 0;
4514
- padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
4702
+ padding-inline: var(--bf-panel-content-padding-inline);
4515
4703
  }
4516
4704
 
4517
4705
  :where(.bf-theme) :where(.bf-panel-footer.is-sticky) {
@@ -4550,16 +4738,16 @@ html.u-baseline-grid::after {
4550
4738
  align-items: center;
4551
4739
  appearance: none;
4552
4740
  background: transparent;
4553
- border: 0;
4741
+ border: 0 solid transparent;
4742
+ border-block-width: var(--bf-border-width);
4554
4743
  color: var(--bf-color-text-default);
4555
4744
  cursor: pointer;
4556
4745
  display: inline-flex;
4557
- gap: calc(var(--bf-baseline) * 0.5);
4746
+ gap: var(--bf-leading-mark-gap);
4558
4747
  justify-content: flex-start;
4559
- margin: 0;
4560
- min-block-size: var(--bf-control-box-size-compact);
4748
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
4561
4749
  min-inline-size: 0;
4562
- padding-block: var(--bf-control-block-padding-compact);
4750
+ padding-block: var(--bf-interface-row-padding-block);
4563
4751
  padding-inline: 0;
4564
4752
  text-align: left;
4565
4753
  }
@@ -4582,7 +4770,7 @@ html.u-baseline-grid::after {
4582
4770
  min-block-size: 0;
4583
4771
  padding-block-end: var(--bf-panel-padding-block);
4584
4772
  padding-block-start: var(--bf-panel-padding-block);
4585
- padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
4773
+ padding-inline: var(--bf-panel-content-padding-inline);
4586
4774
  }
4587
4775
 
4588
4776
  :where(.bf-theme) :where(.bf-panel-content.is-flush) {
@@ -4707,7 +4895,7 @@ html.u-baseline-grid::after {
4707
4895
 
4708
4896
  :where(.bf-theme) :where(.bf-option-grid) {
4709
4897
  display: grid;
4710
- gap: calc(var(--bf-baseline) * 2.5);
4898
+ gap: var(--bf-component-inline-inset-action);
4711
4899
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr));
4712
4900
  }
4713
4901
 
@@ -4720,7 +4908,7 @@ html.u-baseline-grid::after {
4720
4908
  display: grid;
4721
4909
  gap: var(--bf-field-gap);
4722
4910
  margin: 0;
4723
- min-block-size: calc((var(--bf-control-box-size) * 2) + var(--bf-baseline));
4911
+ min-block-size: calc((var(--bf-interface-row-occupied-block-size) * 2) + var(--bf-baseline));
4724
4912
  min-inline-size: 0;
4725
4913
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
4726
4914
  padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
@@ -4917,7 +5105,7 @@ html.u-baseline-grid::after {
4917
5105
  grid-template-rows: minmax(0, 1fr);
4918
5106
  min-inline-size: 0;
4919
5107
  overflow: hidden;
4920
- padding-inline: var(--bf-space-2);
5108
+ padding-inline: var(--bf-panel-padding-inline);
4921
5109
  }
4922
5110
 
4923
5111
  :where(.bf-theme) :where(.bf-content-card-primary, .bf-content-card-description-panel) {
@@ -5022,7 +5210,7 @@ html.u-baseline-grid::after {
5022
5210
  color: var(--bf-color-text-muted);
5023
5211
  display: flex;
5024
5212
  flex-wrap: wrap;
5025
- gap: 0 var(--bf-space-half);
5213
+ gap: 0 var(--bf-leading-mark-gap);
5026
5214
  min-inline-size: 0;
5027
5215
  padding-block-end: var(--bf-space-1);
5028
5216
  }
@@ -5074,7 +5262,7 @@ html.u-baseline-grid::after {
5074
5262
  :where(.bf-theme) :where(.bf-content-card-footer-inner) {
5075
5263
  align-items: center;
5076
5264
  display: flex;
5077
- gap: var(--bf-space-1);
5265
+ gap: var(--bf-leading-mark-gap);
5078
5266
  inline-size: 100%;
5079
5267
  mask-image: linear-gradient(to right, #000 85%, transparent 100%);
5080
5268
  min-block-size: var(--bf-space-4);
@@ -5082,7 +5270,7 @@ html.u-baseline-grid::after {
5082
5270
  overflow-x: auto;
5083
5271
  padding-block-end: var(--bf-space-1);
5084
5272
  padding-block-start: calc(0.5rem - var(--bf-border-width));
5085
- padding-inline: var(--bf-space-2);
5273
+ padding-inline: var(--bf-panel-padding-inline);
5086
5274
  position: relative;
5087
5275
  scrollbar-width: none;
5088
5276
  z-index: 2;
@@ -5105,7 +5293,7 @@ html.u-baseline-grid::after {
5105
5293
  :where(.bf-theme) :where(.bf-content-card-resource) {
5106
5294
  align-items: center;
5107
5295
  display: inline-flex;
5108
- gap: var(--bf-space-half);
5296
+ gap: var(--bf-leading-mark-gap);
5109
5297
  }
5110
5298
 
5111
5299
  :where(.bf-theme) :where(.bf-content-card-resource > *) {
@@ -5114,7 +5302,7 @@ html.u-baseline-grid::after {
5114
5302
 
5115
5303
  :where(.bf-theme) :where(.bf-content-card-footer .bf-chip) {
5116
5304
  margin: 0;
5117
- margin-inline-end: var(--bf-space-3);
5305
+ margin-inline-end: var(--bf-component-inline-inset-continuation);
5118
5306
  }
5119
5307
 
5120
5308
  /* Internal geometry responds to the card's allocated width. The card root is
@@ -5133,10 +5321,10 @@ html.u-baseline-grid::after {
5133
5321
 
5134
5322
  @container bf-content-card (width >= 28.75rem) {
5135
5323
  :where(.bf-theme) :where(.bf-content-card:is(.is-cols-4, .is-cols-6)) :where(.bf-content-card-frame) {
5136
- column-gap: var(--bf-space-2);
5324
+ column-gap: var(--bf-panel-padding-inline);
5137
5325
  flex-direction: row;
5138
5326
  min-block-size: calc((var(--bf-space-12) * 2) - (var(--bf-border-width) * 2));
5139
- padding: var(--bf-space-2) var(--bf-space-2) 0;
5327
+ padding: var(--bf-space-2) var(--bf-panel-padding-inline) 0;
5140
5328
  }
5141
5329
 
5142
5330
  :where(.bf-theme) :where(.bf-content-card:is(.is-cols-4, .is-cols-6):not(.is-image)) :where(.bf-content-card-frame) {
@@ -5182,7 +5370,7 @@ html.u-baseline-grid::after {
5182
5370
  }
5183
5371
 
5184
5372
  :where(.bf-theme) :where(.bf-content-card.is-image-top:is(.is-cols-4, .is-cols-6)) :where(.bf-content-card-body, .bf-content-card-footer-inner) {
5185
- padding-inline: var(--bf-space-2);
5373
+ padding-inline: var(--bf-panel-padding-inline);
5186
5374
  }
5187
5375
  }
5188
5376
 
@@ -5207,7 +5395,8 @@ html.u-baseline-grid::after {
5207
5395
  block-size: 100%;
5208
5396
  grid-column: 2;
5209
5397
  grid-row: 1;
5210
- padding: var(--bf-space-1) var(--bf-space-1) 0;
5398
+ padding-block: var(--bf-space-1) 0;
5399
+ padding-inline: var(--bf-component-inline-inset-field);
5211
5400
  }
5212
5401
 
5213
5402
  :where(.bf-theme) :where(.bf-content-card.is-cols-8) :where(.bf-content-card-image) {
@@ -5310,11 +5499,11 @@ html.u-baseline-grid::after {
5310
5499
  color: var(--bf-color-text-muted);
5311
5500
  cursor: pointer;
5312
5501
  display: flex;
5313
- gap: calc(var(--bf-baseline) * 0.5);
5502
+ gap: var(--bf-leading-mark-gap);
5314
5503
  justify-content: center;
5315
5504
  margin-bottom: 0;
5316
- padding-block-end: calc(var(--bf-single-line-row-padding-block) + var(--bf-single-line-row-margin-block-end));
5317
- padding-block-start: var(--bf-single-line-row-padding-block);
5505
+ padding-block-end: calc(var(--bf-interface-row-padding-block) + var(--bf-interface-row-compensation-block-end));
5506
+ padding-block-start: var(--bf-interface-row-padding-block);
5318
5507
  padding-inline: var(--bf-component-inline-inset-action);
5319
5508
  text-decoration: none;
5320
5509
  }
@@ -5357,7 +5546,7 @@ html.u-baseline-grid::after {
5357
5546
 
5358
5547
  :where(.bf-theme) :where(.bf-tabs.is-equal) :where(.bf-tabs-list) {
5359
5548
  display: grid;
5360
- gap: calc(var(--bf-baseline) * 2);
5549
+ gap: var(--bf-component-inline-inset-action);
5361
5550
  grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--bf-ui-tabs-equal-min)), 1fr));
5362
5551
  overflow: visible;
5363
5552
  white-space: normal;
@@ -5387,11 +5576,11 @@ html.u-baseline-grid::after {
5387
5576
  color: var(--bf-color-text-default);
5388
5577
  cursor: pointer;
5389
5578
  display: grid;
5390
- gap: calc(var(--bf-baseline) * 0.75);
5579
+ gap: var(--bf-leading-mark-gap);
5391
5580
  grid-template-columns: auto minmax(0, 1fr) auto;
5392
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
5581
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
5393
5582
  min-inline-size: 0;
5394
- padding-block: var(--bf-single-line-row-padding-block);
5583
+ padding-block: var(--bf-interface-row-padding-block);
5395
5584
  padding-inline: var(--bf-component-inline-inset-field);
5396
5585
  }
5397
5586
 
@@ -5469,7 +5658,7 @@ html.u-baseline-grid::after {
5469
5658
  :where(.bf-theme) :where(.bf-inline-options-options) {
5470
5659
  display: flex;
5471
5660
  flex-wrap: wrap;
5472
- gap: calc(var(--bf-baseline) * 3);
5661
+ gap: var(--bf-component-inline-inset-continuation);
5473
5662
  }
5474
5663
 
5475
5664
  :where(.bf-theme) :where(.bf-inline-options-option) {
@@ -5522,11 +5711,11 @@ html.u-baseline-grid::after {
5522
5711
  cursor: pointer;
5523
5712
  display: inline-flex;
5524
5713
  justify-content: center;
5525
- margin-bottom: var(--bf-single-line-row-margin-block-end);
5714
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
5526
5715
  max-inline-size: 100%;
5527
5716
  overflow: hidden;
5528
- padding-block: var(--bf-single-line-row-padding-block);
5529
- padding-inline: var(--bf-control-inline-padding-action-bordered);
5717
+ padding-block: var(--bf-interface-row-padding-block);
5718
+ padding-inline: var(--bf-component-inline-inset-action-bordered);
5530
5719
  text-align: center;
5531
5720
  text-decoration: none;
5532
5721
  text-overflow: ellipsis;
@@ -5573,7 +5762,7 @@ html.u-baseline-grid::after {
5573
5762
  align-items: center;
5574
5763
  display: flex;
5575
5764
  flex-wrap: wrap;
5576
- gap: calc(var(--bf-baseline) * 0.5) calc(var(--bf-baseline) * 1.25);
5765
+ gap: calc(var(--bf-baseline) * 0.5) var(--bf-leading-mark-gap);
5577
5766
  list-style: none;
5578
5767
  margin: 0;
5579
5768
  min-inline-size: 0;
@@ -5596,7 +5785,7 @@ html.u-baseline-grid::after {
5596
5785
  :where(.bf-theme) :where(.bf-breadcrumbs-item) + :where(.bf-breadcrumbs-item)::before {
5597
5786
  color: var(--bf-color-text-muted);
5598
5787
  content: "/";
5599
- margin-inline-end: calc(var(--bf-baseline) * 0.75);
5788
+ margin-inline-end: var(--bf-leading-mark-gap);
5600
5789
  }
5601
5790
 
5602
5791
  :where(.bf-theme) :where(.bf-breadcrumbs-item) a {
@@ -5721,9 +5910,9 @@ html.u-baseline-grid::after {
5721
5910
  box-sizing: border-box;
5722
5911
  color: var(--bf-color-text-default);
5723
5912
  display: grid;
5724
- column-gap: var(--bf-space-2);
5913
+ column-gap: var(--bf-leading-mark-gap);
5725
5914
  grid-template-rows: auto auto;
5726
- inline-size: calc((100cqi - var(--bf-space-2)) / 2);
5915
+ inline-size: calc((100cqi - var(--bf-leading-mark-gap)) / 2);
5727
5916
  min-inline-size: 0;
5728
5917
  padding-block: calc(var(--bf-space-2) + (var(--bf-baseline) / 4) - var(--bf-border-width));
5729
5918
  position: relative;
@@ -5748,7 +5937,7 @@ html.u-baseline-grid::after {
5748
5937
  :where(.bf-theme) :where(.bf-article-pagination-link.is-previous) {
5749
5938
  grid-column: 1;
5750
5939
  grid-template-columns: var(--bf-icon-size-default) minmax(0, 1fr);
5751
- padding-inline: var(--bf-space-1) var(--bf-space-2);
5940
+ padding-inline: var(--bf-leading-mark-gap) var(--bf-component-inline-inset-action);
5752
5941
  text-align: start;
5753
5942
  }
5754
5943
 
@@ -5756,7 +5945,7 @@ html.u-baseline-grid::after {
5756
5945
  grid-column: 2;
5757
5946
  grid-template-columns: minmax(0, 1fr) var(--bf-icon-size-default);
5758
5947
  justify-self: end;
5759
- padding-inline: var(--bf-space-2) var(--bf-space-1);
5948
+ padding-inline: var(--bf-component-inline-inset-action) var(--bf-leading-mark-gap);
5760
5949
  text-align: end;
5761
5950
  }
5762
5951
 
@@ -5798,6 +5987,7 @@ html.u-baseline-grid::after {
5798
5987
 
5799
5988
  :where(.bf-theme) :where(.bf-article-pagination-direction > .bf-icon) {
5800
5989
  --bf-icon-size: var(--bf-icon-size-default);
5990
+ margin-block-start: 0;
5801
5991
  }
5802
5992
 
5803
5993
  :where(.bf-theme) .bf-article-pagination:dir(rtl) .bf-article-pagination-link.is-previous .bf-icon {
@@ -5835,7 +6025,7 @@ html.u-baseline-grid::after {
5835
6025
  :where(.bf-theme) :where(.bf-article-pagination-link.is-previous:not(:only-child)) {
5836
6026
  grid-template-columns: var(--bf-icon-size-default);
5837
6027
  inline-size: calc(var(--bf-space-6) + var(--bf-space-1));
5838
- padding-inline: var(--bf-space-1);
6028
+ padding-inline: var(--bf-leading-mark-gap);
5839
6029
  }
5840
6030
 
5841
6031
  :where(.bf-theme) :where(.bf-article-pagination-link.is-next:not(:only-child)) {
@@ -5888,8 +6078,8 @@ html.u-baseline-grid::after {
5888
6078
  :where(.bf-theme) :where(.bf-list.is-divided) > :where(.bf-list-item) {
5889
6079
  border-block: var(--bf-border-width) solid transparent;
5890
6080
  box-shadow: inset 0 0.0625rem 0 var(--bf-color-border-low-contrast);
5891
- margin-block-end: var(--bf-single-line-row-margin-block-end);
5892
- padding-block: var(--bf-single-line-row-padding-block);
6081
+ margin-block-end: var(--bf-interface-row-compensation-block-end);
6082
+ padding-block: var(--bf-interface-row-padding-block);
5893
6083
  }
5894
6084
 
5895
6085
  :where(.bf-theme) :where(.bf-list.is-divided) > :where(.bf-list-item:first-child) {
@@ -5929,7 +6119,7 @@ html.u-baseline-grid::after {
5929
6119
  :where(.bf-theme) :where(ol.bf-list.is-divided) > :where(.bf-list-item) {
5930
6120
  counter-increment: bf-list-counter;
5931
6121
  list-style: none;
5932
- padding-inline-start: calc(var(--bf-baseline) * 4);
6122
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
5933
6123
  position: relative;
5934
6124
  }
5935
6125
 
@@ -5949,7 +6139,7 @@ html.u-baseline-grid::after {
5949
6139
  }
5950
6140
 
5951
6141
  :where(.bf-theme) :where(.bf-list-item) > :where(.bf-list) {
5952
- margin-inline-start: calc(var(--bf-baseline) * 3);
6142
+ margin-inline-start: var(--bf-component-inline-inset-action);
5953
6143
  padding-block-start: var(--bf-body-nudge-end);
5954
6144
  }
5955
6145
 
@@ -5958,6 +6148,8 @@ html.u-baseline-grid::after {
5958
6148
  }
5959
6149
 
5960
6150
  :where(.bf-theme) :where(.bf-inline-list) {
6151
+ --bf-inline-list-space: 0.5rem;
6152
+
5961
6153
  margin: 0;
5962
6154
  padding: 0;
5963
6155
  }
@@ -5970,7 +6162,7 @@ html.u-baseline-grid::after {
5970
6162
  line-height: var(--bf-body-line-height, 1.5rem);
5971
6163
  display: inline-block;
5972
6164
  list-style: none;
5973
- margin-inline-end: calc(var(--bf-baseline) * 1.5);
6165
+ margin-inline-end: var(--bf-inline-list-space);
5974
6166
  padding-block-end: var(--bf-body-nudge-end);
5975
6167
  padding-block-start: var(--bf-body-nudge-start);
5976
6168
  }
@@ -5980,18 +6172,21 @@ html.u-baseline-grid::after {
5980
6172
  }
5981
6173
 
5982
6174
  :where(.bf-theme) :where(.bf-inline-list.is-middot) :where(.bf-inline-list-item) {
5983
- margin-inline-end: calc(var(--bf-baseline) * 1);
6175
+ margin-inline-end: 0;
5984
6176
  position: relative;
5985
6177
  }
5986
6178
 
5987
- :where(.bf-theme) :where(.bf-inline-list.is-middot) :where(.bf-inline-list-item)::after {
5988
- content: "\2022";
5989
- display: inline;
5990
- margin-inline-start: calc(var(--bf-baseline) * 0.25);
6179
+ :where(.bf-theme) :where(.bf-inline-list.is-middot) {
6180
+ align-items: baseline;
6181
+ column-gap: var(--bf-inline-list-space);
6182
+ display: flex;
6183
+ flex-wrap: wrap;
5991
6184
  }
5992
6185
 
5993
- :where(.bf-theme) :where(.bf-inline-list.is-middot) :where(.bf-inline-list-item:last-of-type)::after {
5994
- content: "";
6186
+ :where(.bf-theme) :where(.bf-inline-list.is-middot) :where(.bf-inline-list-item:not(:last-of-type))::after {
6187
+ content: "\2022";
6188
+ display: inline;
6189
+ margin-inline-start: var(--bf-inline-list-space);
5995
6190
  }
5996
6191
 
5997
6192
  :where(.bf-theme) :where(.bf-skip-link) {
@@ -6003,8 +6198,8 @@ html.u-baseline-grid::after {
6003
6198
  background: var(--bf-color-background-alt);
6004
6199
  color: var(--bf-color-link-default);
6005
6200
  display: block;
6006
- left: -62.4375rem;
6007
- max-inline-size: calc(100vw - var(--bf-baseline));
6201
+ inset-inline-start: -62.4375rem;
6202
+ max-inline-size: calc(100vw - (var(--bf-inline-unit) * 2));
6008
6203
  position: absolute;
6009
6204
  text-decoration: none;
6010
6205
  top: -62.4375rem;
@@ -6015,16 +6210,24 @@ html.u-baseline-grid::after {
6015
6210
  }
6016
6211
 
6017
6212
  :where(.bf-theme) :where(.bf-skip-link:focus, .bf-skip-link:focus-visible) {
6018
- left: calc(var(--bf-baseline) * 0.5);
6213
+ inset-inline-start: var(--bf-inline-unit);
6019
6214
  outline: 0.125rem solid var(--bf-color-focus);
6020
6215
  outline-offset: 0;
6021
6216
  padding-block: calc(var(--bf-baseline) * 1.5);
6022
- padding-inline: calc(var(--bf-baseline) * 1.5);
6217
+ padding-inline: var(--bf-component-inline-inset-action);
6023
6218
  position: fixed;
6024
6219
  top: calc(var(--bf-baseline) * 0.5);
6025
6220
  z-index: 999999;
6026
6221
  }
6027
6222
 
6223
+ :where(.bf-theme) {
6224
+ --bf-table-row-border-size: var(--bf-border-width);
6225
+ --bf-table-row-padding-block-start: var(--bf-in-box-row-padding-block-start);
6226
+ --bf-table-row-block-size: var(--bf-interface-row-occupied-block-size);
6227
+ --bf-table-row-padding-block-end: max(0rem, calc(var(--bf-table-row-block-size) - var(--bf-body-line-height, 1.5rem) - var(--bf-table-row-padding-block-start) - var(--bf-table-row-border-size)));
6228
+ --bf-table-row-line-height: var(--bf-body-line-height, 1.5rem);
6229
+ }
6230
+
6028
6231
  :where(.bf-theme) :where(.bf-table-scroll) {
6029
6232
  max-inline-size: 100%;
6030
6233
  min-inline-size: 0;
@@ -6109,6 +6312,13 @@ html.u-baseline-grid::after {
6109
6312
  }
6110
6313
 
6111
6314
 
6315
+ :where(.bf-theme) {
6316
+ --bf-ui-chip-padding-inline: var(--bf-component-inline-inset-action);
6317
+ --bf-ui-chip-radius: 999rem;
6318
+ --bf-ui-badge-padding-inline: var(--bf-border-width);
6319
+ --bf-ui-badge-overhang: calc(var(--bf-ui-badge-padding-inline) * -0.75);
6320
+ }
6321
+
6112
6322
  :where(.bf-theme) :where(.bf-chip, .bf-chip.is-positive, .bf-chip.is-caution, .bf-chip.is-negative, .bf-chip.is-information) {
6113
6323
  --bf-ui-chip-border: var(--bf-color-border-neutral);
6114
6324
  --bf-ui-chip-border-hover: var(--bf-color-border-neutral);
@@ -6129,10 +6339,14 @@ html.u-baseline-grid::after {
6129
6339
  display: inline-flex;
6130
6340
  gap: 0;
6131
6341
  inline-size: fit-content;
6342
+ justify-content: center;
6132
6343
  justify-self: start;
6133
- margin: 0 var(--bf-ui-chip-padding-inline) var(--bf-single-line-row-margin-block-end) 0;
6344
+ margin: 0 var(--bf-component-inline-inset-field) var(--bf-interface-row-compensation-block-end) 0;
6134
6345
  max-inline-size: 100%;
6135
- padding-block: var(--bf-single-line-row-padding-block);
6346
+ min-inline-size: min(100%, calc(var(--bf-interface-row-painted-block-size) + (var(--bf-border-width) * 2)));
6347
+ padding-block: var(--bf-interface-row-padding-block);
6348
+ /* Chips use the Action text keyline. The paint-derived floor only governs
6349
+ very short dense labels, keeping them stadium-shaped rather than circular. */
6136
6350
  padding-inline: max(0rem, calc(var(--bf-ui-chip-padding-inline) - var(--bf-border-width)));
6137
6351
  position: relative;
6138
6352
  text-decoration: none;
@@ -6245,17 +6459,17 @@ html.u-baseline-grid::after {
6245
6459
  align-items: center;
6246
6460
  background-color: var(--bf-color-text-default);
6247
6461
  border-radius: 1rem;
6248
- box-sizing: content-box;
6249
6462
  color: var(--bf-color-background-default);
6250
6463
  display: inline-block;
6464
+ inline-size: fit-content;
6465
+ justify-self: start;
6251
6466
  margin: 0;
6252
- max-inline-size: 4ch;
6253
- min-width: calc(var(--bf-body-line-height, 1.5rem) - (var(--bf-ui-badge-padding-inline) * 2));
6254
- overflow: hidden;
6467
+ min-inline-size: var(--bf-square-block-size);
6255
6468
  padding-block: 0;
6256
6469
  padding-inline: var(--bf-ui-badge-padding-inline);
6257
6470
  text-align: center;
6258
6471
  text-indent: 0;
6472
+ white-space: nowrap;
6259
6473
  }
6260
6474
 
6261
6475
  :where(.bf-theme) :where(.bf-badge.is-negative) {
@@ -6266,7 +6480,7 @@ html.u-baseline-grid::after {
6266
6480
  :where(.bf-theme) :where(.bf-chip, .bf-chip.is-positive, .bf-chip.is-caution, .bf-chip.is-negative, .bf-chip.is-information) :where(.bf-badge, .bf-badge.is-negative) {
6267
6481
  align-self: center;
6268
6482
  margin-inline-end: var(--bf-ui-badge-overhang);
6269
- margin-inline-start: var(--bf-ui-chip-padding-inline);
6483
+ margin-inline-start: var(--bf-component-inline-inset-field);
6270
6484
  }
6271
6485
 
6272
6486
  :where(.bf-theme) :where(.bf-status-label, .bf-status-label.is-positive, .bf-status-label.is-caution, .bf-status-label.is-information, .bf-status-label.is-negative) {
@@ -6283,11 +6497,11 @@ html.u-baseline-grid::after {
6283
6497
  font-style: var(--bf-body-font-style, normal);
6284
6498
  font-weight: var(--bf-body-font-weight, 400);
6285
6499
  line-height: var(--bf-body-line-height, 1.5rem);
6286
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
6500
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
6287
6501
  /* Status paint is physically symmetric and shares the same occupied block
6288
6502
  as a button; typography still comes from the body role. */
6289
- padding-block: var(--bf-single-line-row-padding-block);
6290
- padding-inline: var(--bf-ui-chip-padding-inline);
6503
+ padding-block: var(--bf-interface-row-padding-block);
6504
+ padding-inline: var(--bf-component-inline-inset-field);
6291
6505
  text-align: center;
6292
6506
  text-decoration: none;
6293
6507
  white-space: nowrap;
@@ -6317,14 +6531,25 @@ html.u-baseline-grid::after {
6317
6531
  carrying a second standalone occupied-row contract. This modifier is
6318
6532
  explicit so component density never changes merely because of ancestry. */
6319
6533
  :where(.bf-theme) :where(.bf-chip.is-nested, .bf-status-label.is-nested) {
6320
- line-height: var(--bf-nested-auxiliary-line-height);
6534
+ line-height: var(--bf-nested-row-line-height);
6321
6535
  margin-block: 0;
6322
- padding-block: var(--bf-nested-auxiliary-padding-block);
6536
+ padding-block: var(--bf-nested-row-padding-block);
6323
6537
  }
6324
6538
 
6325
6539
  :where(.bf-theme) :where(.bf-chip.is-nested) {
6326
6540
  border: 0;
6327
6541
  box-shadow: inset 0 0 0 var(--bf-border-width) var(--bf-ui-chip-border);
6542
+ min-inline-size: min(100%, calc(var(--bf-nested-row-painted-block-size) + (var(--bf-border-width) * 2)));
6543
+ /* The nested border is inset paint rather than box geometry, so the glyph
6544
+ needs the complete Action inset instead of subtracting a real border. */
6545
+ padding-inline: var(--bf-ui-chip-padding-inline);
6546
+ }
6547
+
6548
+ /* Chip parts normally carry the standalone body line explicitly. A nested
6549
+ chip must pass its reduced line through to those parts so a nested badge
6550
+ can fit without making the host row taller. */
6551
+ :where(.bf-theme) :where(.bf-chip.is-nested) :where(.bf-chip-lead, .bf-chip-value) {
6552
+ line-height: inherit;
6328
6553
  }
6329
6554
 
6330
6555
  :where(.bf-theme) :where(.bf-chip.is-nested:hover) {
@@ -6341,7 +6566,7 @@ html.u-baseline-grid::after {
6341
6566
 
6342
6567
  :where(.bf-theme) :where(.bf-badge.is-nested) {
6343
6568
  align-self: center;
6344
- line-height: var(--bf-nested-auxiliary-line-height);
6569
+ line-height: var(--bf-nested-row-line-height);
6345
6570
  vertical-align: middle;
6346
6571
  }
6347
6572
 
@@ -6390,7 +6615,7 @@ html.u-baseline-grid::after {
6390
6615
  --bf-search-box-trailing-inline-size: calc((var(--bf-search-box-action-inline-size) * 2) + var(--bf-border-width));
6391
6616
  display: flex;
6392
6617
  inline-size: 100%;
6393
- margin: 0 0 calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.5rem) + (var(--bf-input-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
6618
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
6394
6619
  max-inline-size: 100%;
6395
6620
  min-inline-size: 0;
6396
6621
  position: relative;
@@ -6472,7 +6697,7 @@ html.u-baseline-grid::after {
6472
6697
  display: flex;
6473
6698
  flex-wrap: wrap;
6474
6699
  gap: var(--bf-field-gap);
6475
- margin: 0 0 calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.5rem) + (var(--bf-input-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
6700
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
6476
6701
  min-block-size: 0;
6477
6702
  overflow: visible;
6478
6703
  padding: 0;
@@ -6480,7 +6705,7 @@ html.u-baseline-grid::after {
6480
6705
  }
6481
6706
 
6482
6707
  :where(.bf-theme) :where(.bf-search-and-filter-search-container[aria-expanded='false']) {
6483
- min-block-size: var(--bf-control-box-size);
6708
+ min-block-size: var(--bf-interface-row-painted-block-size);
6484
6709
  }
6485
6710
 
6486
6711
  :where(.bf-theme) :where(.bf-search-and-filter-box) {
@@ -6564,7 +6789,7 @@ html.u-baseline-grid::after {
6564
6789
  cursor: pointer;
6565
6790
  display: inline-flex;
6566
6791
  margin: 0;
6567
- padding-block: var(--bf-button-block-padding);
6792
+ padding-block: var(--bf-body-nudge-start, 0.41rem);
6568
6793
  padding-inline: 0;
6569
6794
  position: static;
6570
6795
  }
@@ -6703,8 +6928,8 @@ html.u-baseline-grid::after {
6703
6928
  border-block: var(--bf-border-width) solid transparent;
6704
6929
  cursor: pointer;
6705
6930
  display: block;
6706
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
6707
- padding-block: var(--bf-single-line-row-padding-block);
6931
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
6932
+ padding-block: var(--bf-interface-row-padding-block);
6708
6933
  padding-inline: var(--bf-component-inline-inset-continuation) var(--bf-component-inline-inset-action);
6709
6934
  text-decoration: none;
6710
6935
  }
@@ -6741,9 +6966,9 @@ html.u-baseline-grid::after {
6741
6966
  cursor: pointer;
6742
6967
  display: flex;
6743
6968
  gap: var(--bf-disclosure-gap);
6744
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
6745
- padding-block: var(--bf-single-line-row-padding-block);
6746
- padding-inline: 0 calc(var(--bf-baseline) * 0.5);
6969
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
6970
+ padding-block: var(--bf-interface-row-padding-block);
6971
+ padding-inline: var(--bf-disclosure-group-inset) var(--bf-inline-unit);
6747
6972
  text-align: left;
6748
6973
  width: 100%;
6749
6974
  }
@@ -6779,20 +7004,21 @@ html.u-baseline-grid::after {
6779
7004
 
6780
7005
 
6781
7006
  :where(.bf-theme) :where(.bf-side-navigation, .bf-side-navigation.is-icons, .bf-side-navigation.is-accordion, .bf-side-navigation.is-raw-html) {
6782
- /* Plain navigation commands use the action rail. Icon-led rows move only their mark canvas,
6783
- so their copy reaches the shared continuation rail without a fourth
7007
+ /* Plain navigation commands use the action inset. Icon-led rows move only their mark canvas,
7008
+ so their copy reaches the shared continuation inset without a fourth
6784
7009
  component inset. Navigation depth is added separately below. */
6785
- /* Navigation copy uses one continuation rail whether a row has a leading
7010
+ /* Navigation copy uses one continuation inset whether a row has a leading
6786
7011
  disclosure/icon slot or not. The mark canvas is derived backwards from
6787
- that rail, so iconless rows never introduce a fourth text start. */
7012
+ that inset, so iconless rows never introduce a fourth text start. */
6788
7013
  --bf-side-navigation-content-inset: var(--bf-component-inline-inset-continuation);
6789
- --bf-side-navigation-disclosure-inset: max(0rem, calc(var(--bf-component-inline-inset-continuation) - var(--bf-disclosure-icon-inline-size) - var(--bf-disclosure-gap)));
6790
- --bf-side-navigation-depth-step: var(--bf-space-2);
7014
+ --bf-side-navigation-disclosure-inset: var(--bf-disclosure-group-inset);
7015
+ --bf-side-navigation-depth-step: var(--bf-component-inline-inset-action);
6791
7016
  --bf-side-navigation-group-gap: 1.5rem;
6792
7017
  --bf-side-navigation-heading-list-gap: 0.5rem;
6793
7018
  color: var(--bf-color-text-inactive);
6794
7019
  display: block;
6795
7020
  inline-size: 100%;
7021
+ min-inline-size: 0;
6796
7022
  }
6797
7023
 
6798
7024
  :where(.bf-theme) :where(.bf-side-navigation-groups) {
@@ -6873,7 +7099,7 @@ html.u-baseline-grid::after {
6873
7099
  border-bottom: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
6874
7100
  margin-bottom: calc(var(--bf-baseline) * 2);
6875
7101
  padding-bottom: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
6876
- padding-inline: var(--bf-component-inline-inset-continuation);
7102
+ padding-inline: var(--bf-panel-padding-inline);
6877
7103
  padding-top: var(--bf-panel-padding-block);
6878
7104
  position: sticky;
6879
7105
  top: 0;
@@ -6894,11 +7120,11 @@ html.u-baseline-grid::after {
6894
7120
  color: var(--bf-color-text-default);
6895
7121
  cursor: pointer;
6896
7122
  display: inline-flex;
6897
- gap: calc(var(--bf-baseline) * 0.5);
7123
+ gap: var(--bf-leading-mark-gap);
6898
7124
  justify-content: center;
6899
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
6900
- padding-block: var(--bf-single-line-row-padding-block);
6901
- padding-inline: var(--bf-control-inline-padding-action-bordered);
7125
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
7126
+ padding-block: var(--bf-interface-row-padding-block);
7127
+ padding-inline: var(--bf-component-inline-inset-action-bordered);
6902
7128
  text-decoration: none;
6903
7129
  }
6904
7130
 
@@ -6955,15 +7181,17 @@ html.u-baseline-grid::after {
6955
7181
 
6956
7182
  :where(.bf-theme) :where(.bf-side-navigation-list) {
6957
7183
  display: grid;
6958
- grid-auto-rows: var(--bf-single-line-row-block-size);
7184
+ grid-auto-rows: minmax(var(--bf-interface-row-occupied-block-size), auto);
6959
7185
  list-style: none;
6960
7186
  margin: 0;
7187
+ min-inline-size: 0;
6961
7188
  padding: 0;
6962
7189
  }
6963
7190
 
6964
7191
  :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title) {
6965
7192
  display: grid;
6966
7193
  margin: 0;
7194
+ min-inline-size: 0;
6967
7195
  position: relative;
6968
7196
  }
6969
7197
 
@@ -6980,11 +7208,15 @@ html.u-baseline-grid::after {
6980
7208
  border-block: var(--bf-border-width) solid transparent;
6981
7209
  color: var(--bf-color-text-inactive);
6982
7210
  display: flex;
6983
- gap: calc(var(--bf-baseline) * 0.5);
7211
+ gap: var(--bf-leading-mark-gap);
6984
7212
  inline-size: 100%;
6985
7213
  justify-content: flex-start;
6986
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
6987
- padding-block: var(--bf-single-line-row-padding-block);
7214
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
7215
+ min-inline-size: 0;
7216
+ /* A navigation row is the focus owner. Put nested interactive controls in a
7217
+ following panel/list item rather than inside the clipped row itself. */
7218
+ overflow: hidden;
7219
+ padding-block: var(--bf-interface-row-padding-block);
6988
7220
  padding-inline: var(--bf-side-navigation-content-inset);
6989
7221
  --bf-side-navigation-row-inset: var(--bf-side-navigation-content-inset);
6990
7222
  position: relative;
@@ -7104,7 +7336,7 @@ html.u-baseline-grid::after {
7104
7336
  line-height: var(--bf-body-line-height, 1.5rem);
7105
7337
  align-items: center;
7106
7338
  color: var(--bf-color-text-default);
7107
- column-gap: calc(var(--bf-baseline) * 1.5);
7339
+ column-gap: var(--bf-leading-mark-gap);
7108
7340
  display: inline-flex;
7109
7341
  inline-size: auto;
7110
7342
  justify-content: flex-start;
@@ -7196,7 +7428,7 @@ html.u-baseline-grid::after {
7196
7428
  color: var(--bf-color-text-default);
7197
7429
  cursor: pointer;
7198
7430
  display: inline-flex;
7199
- gap: calc(var(--bf-baseline) * 1);
7431
+ gap: var(--bf-leading-mark-gap);
7200
7432
  inline-size: 100%;
7201
7433
  justify-content: flex-start;
7202
7434
  margin: 0;
@@ -7293,12 +7525,12 @@ html.u-baseline-grid::after {
7293
7525
  align-items: center;
7294
7526
  color: var(--bf-color-text-default);
7295
7527
  display: flex;
7296
- gap: calc(var(--bf-baseline) * 2);
7528
+ gap: var(--bf-component-inline-inset-action);
7297
7529
  inline-size: 100%;
7298
7530
  justify-content: space-between;
7299
7531
  min-inline-size: 0;
7300
7532
  padding-block: var(--bf-top-navigation-link-padding-block);
7301
- padding-inline: calc(var(--bf-top-navigation-link-padding-inline) + (var(--bf-baseline) * 2)) var(--bf-top-navigation-link-padding-inline);
7533
+ padding-inline: calc(var(--bf-top-navigation-link-padding-inline) + var(--bf-component-inline-inset-action)) var(--bf-top-navigation-link-padding-inline);
7302
7534
  text-align: left;
7303
7535
  text-decoration: none;
7304
7536
  white-space: nowrap;
@@ -7403,7 +7635,7 @@ html.u-baseline-grid::after {
7403
7635
  :where(.bf-theme) :where(.bf-top-navigation-row) {
7404
7636
  align-items: stretch;
7405
7637
  flex-direction: row;
7406
- gap: calc(var(--bf-baseline) * 2);
7638
+ gap: var(--bf-component-inline-inset-action);
7407
7639
  }
7408
7640
 
7409
7641
  :where(.bf-theme) :where(.bf-top-navigation-banner) {
@@ -7540,8 +7772,8 @@ html.u-baseline-grid::after {
7540
7772
  cursor: pointer;
7541
7773
  inset-block-start: 0;
7542
7774
  margin: 0;
7543
- min-block-size: var(--bf-control-box-size-compact);
7544
- padding-inline: calc(var(--bf-baseline) * 0.5);
7775
+ min-block-size: var(--bf-interface-row-occupied-block-size);
7776
+ padding-inline: var(--bf-inline-unit);
7545
7777
  position: absolute;
7546
7778
  right: 0;
7547
7779
  }
@@ -7579,8 +7811,8 @@ html.u-baseline-grid::after {
7579
7811
  :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-icon) {
7580
7812
  align-items: center;
7581
7813
  display: inline-flex;
7582
- flex: 0 0 1rem;
7583
- inline-size: 1rem;
7814
+ flex: 0 0 var(--bf-disclosure-icon-inline-size);
7815
+ inline-size: var(--bf-disclosure-icon-inline-size);
7584
7816
  justify-content: center;
7585
7817
  transform: translateY(var(--bf-side-navigation-icon-optical-offset-block));
7586
7818
  }
@@ -7590,7 +7822,7 @@ html.u-baseline-grid::after {
7590
7822
  }
7591
7823
 
7592
7824
  :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
7593
- --bf-side-navigation-row-inset: max(0rem, calc(var(--bf-component-inline-inset-continuation) - 1rem - var(--bf-side-navigation-icon-gap)));
7825
+ --bf-side-navigation-row-inset: max(0rem, calc(var(--bf-component-inline-inset-continuation) - var(--bf-disclosure-icon-inline-size) - var(--bf-side-navigation-icon-gap)));
7594
7826
  align-items: baseline;
7595
7827
  column-gap: var(--bf-side-navigation-icon-gap);
7596
7828
  }
@@ -7599,8 +7831,8 @@ html.u-baseline-grid::after {
7599
7831
  icon without collapsing the shared icon track and pulling their copy left. */
7600
7832
  :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-link, .bf-side-navigation-text):not(:has(> .bf-side-navigation-icon))::before {
7601
7833
  content: "";
7602
- flex: 0 0 1rem;
7603
- inline-size: 1rem;
7834
+ flex: 0 0 var(--bf-disclosure-icon-inline-size);
7835
+ inline-size: var(--bf-disclosure-icon-inline-size);
7604
7836
  }
7605
7837
 
7606
7838
  /* A collapsed icon rail cannot communicate an iconless destination. Remove
@@ -7712,8 +7944,8 @@ html.u-baseline-grid::after {
7712
7944
  display: block;
7713
7945
  margin: 0;
7714
7946
  overflow: hidden;
7715
- padding-block-end: var(--bf-single-line-row-in-box-padding-block-end);
7716
- padding-block-start: var(--bf-single-line-row-in-box-padding-block-start);
7947
+ padding-block-end: var(--bf-in-box-row-padding-block-end);
7948
+ padding-block-start: var(--bf-in-box-row-padding-block-start);
7717
7949
  padding-inline: var(--bf-component-inline-inset-action);
7718
7950
  text-align: left;
7719
7951
  text-decoration: none;
@@ -7751,6 +7983,8 @@ html.u-baseline-grid::after {
7751
7983
  }
7752
7984
 
7753
7985
  :where(.bf-theme) :where(.bf-tooltip) {
7986
+ --bf-tooltip-arrow-size: calc(var(--bf-baseline) * 0.5);
7987
+ --bf-tooltip-arrow-offset-inline: calc(var(--bf-tooltip-arrow-size) * 1.5);
7754
7988
  display: inline-flex;
7755
7989
  position: relative;
7756
7990
  text-decoration: inherit;
@@ -7772,7 +8006,7 @@ html.u-baseline-grid::after {
7772
8006
  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);
7773
8007
  color: var(--bf-color-text-default);
7774
8008
  inline-size: max-content;
7775
- left: 0;
8009
+ inset-inline-start: 0;
7776
8010
  margin: 0;
7777
8011
  max-inline-size: min(20rem, calc(100vw - (var(--bf-baseline) * 4)));
7778
8012
  opacity: 0;
@@ -7796,17 +8030,17 @@ html.u-baseline-grid::after {
7796
8030
 
7797
8031
  :where(.bf-theme) :where(.bf-tooltip-message)::before {
7798
8032
  block-size: 0;
7799
- border-bottom: calc(var(--bf-baseline) * 0.5) solid var(--bf-color-background-alt);
7800
- border-inline: calc(var(--bf-baseline) * 0.5) solid transparent;
8033
+ border-bottom: var(--bf-tooltip-arrow-size) solid var(--bf-color-background-alt);
8034
+ border-inline: var(--bf-tooltip-arrow-size) solid transparent;
7801
8035
  bottom: 100%;
7802
8036
  content: "";
7803
8037
  inline-size: 0;
7804
- left: calc(var(--bf-baseline) * 0.75);
8038
+ inset-inline-start: var(--bf-tooltip-arrow-offset-inline);
7805
8039
  position: absolute;
7806
8040
  }
7807
8041
 
7808
8042
  :where(.bf-theme) :where(.bf-tooltip.is-detached) > :where(.bf-tooltip-message) {
7809
- left: auto;
8043
+ inset-inline-start: auto;
7810
8044
  pointer-events: auto;
7811
8045
  position: static;
7812
8046
  top: auto;
@@ -7818,23 +8052,23 @@ html.u-baseline-grid::after {
7818
8052
  }
7819
8053
 
7820
8054
  :where(.bf-theme) :where(.bf-tooltip.is-btm-center) > :where(.bf-tooltip-message) {
7821
- left: 50%;
8055
+ inset-inline-start: 50%;
7822
8056
  transform: translate(-50%, calc(var(--bf-baseline) - var(--bf-border-width)));
7823
8057
  }
7824
8058
 
7825
8059
  :where(.bf-theme) :where(.bf-tooltip.is-btm-center) > :where(.bf-tooltip-message)::before {
7826
- left: 50%;
8060
+ inset-inline-start: 50%;
7827
8061
  transform: translateX(-50%);
7828
8062
  }
7829
8063
 
7830
8064
  :where(.bf-theme) :where(.bf-tooltip.is-btm-right) > :where(.bf-tooltip-message) {
7831
- left: auto;
7832
- right: 0;
8065
+ inset-inline-end: 0;
8066
+ inset-inline-start: auto;
7833
8067
  }
7834
8068
 
7835
8069
  :where(.bf-theme) :where(.bf-tooltip.is-btm-right) > :where(.bf-tooltip-message)::before {
7836
- left: auto;
7837
- right: calc(var(--bf-baseline) * 0.75);
8070
+ inset-inline-end: var(--bf-tooltip-arrow-offset-inline);
8071
+ inset-inline-start: auto;
7838
8072
  }
7839
8073
 
7840
8074
  :where(.bf-theme) :where(.bf-tooltip.is-top-left, .bf-tooltip.is-top-center, .bf-tooltip.is-top-right) > :where(.bf-tooltip-message) {
@@ -7845,30 +8079,30 @@ html.u-baseline-grid::after {
7845
8079
 
7846
8080
  :where(.bf-theme) :where(.bf-tooltip.is-top-left, .bf-tooltip.is-top-center, .bf-tooltip.is-top-right) > :where(.bf-tooltip-message)::before {
7847
8081
  border-bottom: 0;
7848
- border-inline: calc(var(--bf-baseline) * 0.5) solid transparent;
7849
- border-top: calc(var(--bf-baseline) * 0.5) solid var(--bf-color-background-alt);
8082
+ border-inline: var(--bf-tooltip-arrow-size) solid transparent;
8083
+ border-top: var(--bf-tooltip-arrow-size) solid var(--bf-color-background-alt);
7850
8084
  bottom: auto;
7851
8085
  top: 100%;
7852
8086
  }
7853
8087
 
7854
8088
  :where(.bf-theme) :where(.bf-tooltip.is-top-center) > :where(.bf-tooltip-message) {
7855
- left: 50%;
8089
+ inset-inline-start: 50%;
7856
8090
  transform: translate(-50%, calc(var(--bf-baseline) * -1));
7857
8091
  }
7858
8092
 
7859
8093
  :where(.bf-theme) :where(.bf-tooltip.is-top-center) > :where(.bf-tooltip-message)::before {
7860
- left: 50%;
8094
+ inset-inline-start: 50%;
7861
8095
  transform: translateX(-50%);
7862
8096
  }
7863
8097
 
7864
8098
  :where(.bf-theme) :where(.bf-tooltip.is-top-right) > :where(.bf-tooltip-message) {
7865
- left: auto;
7866
- right: 0;
8099
+ inset-inline-end: 0;
8100
+ inset-inline-start: auto;
7867
8101
  }
7868
8102
 
7869
8103
  :where(.bf-theme) :where(.bf-tooltip.is-top-right) > :where(.bf-tooltip-message)::before {
7870
- left: auto;
7871
- right: calc(var(--bf-baseline) * 0.75);
8104
+ inset-inline-end: var(--bf-tooltip-arrow-offset-inline);
8105
+ inset-inline-start: auto;
7872
8106
  }
7873
8107
 
7874
8108
  :where(.bf-theme) :where(nav.bf-pagination) {
@@ -7902,9 +8136,10 @@ html.u-baseline-grid::after {
7902
8136
  font-weight: var(--bf-body-font-weight, 400);
7903
8137
  line-height: var(--bf-body-line-height, 1.5rem);
7904
8138
  color: var(--bf-color-text-muted);
7905
- min-block-size: var(--bf-control-box-size);
7906
- padding-block: var(--bf-control-block-padding);
7907
- padding-inline: calc(var(--bf-baseline) * 0.5);
8139
+ border-block: var(--bf-border-width) solid transparent;
8140
+ margin-block-end: var(--bf-interface-row-compensation-block-end);
8141
+ padding-block: var(--bf-interface-row-padding-block);
8142
+ padding-inline: var(--bf-inline-unit);
7908
8143
  }
7909
8144
 
7910
8145
  :where(.bf-theme) :where(.bf-pagination-link, .bf-pagination-link.is-previous, .bf-pagination-link.is-next) {
@@ -7920,16 +8155,20 @@ html.u-baseline-grid::after {
7920
8155
  color: var(--bf-color-text-default);
7921
8156
  cursor: pointer;
7922
8157
  display: inline-flex;
7923
- gap: calc(var(--bf-baseline) * 0.5);
8158
+ gap: var(--bf-leading-mark-gap);
7924
8159
  justify-content: center;
7925
- margin-bottom: var(--bf-single-line-row-margin-block-end);
7926
- min-inline-size: var(--bf-control-box-size);
7927
- padding-block: max(0rem, calc(var(--bf-button-block-padding) - var(--bf-border-width)));
7928
- padding-inline: var(--bf-control-inline-padding-action-bordered);
8160
+ margin-bottom: var(--bf-interface-row-compensation-block-end);
8161
+ padding-block: var(--bf-interface-row-padding-block);
8162
+ padding-inline: var(--bf-component-inline-inset-action-bordered);
7929
8163
  text-align: center;
7930
8164
  text-decoration: none;
7931
8165
  }
7932
8166
 
8167
+ :where(.bf-theme) :where(.bf-pagination-link:not(.is-previous):not(.is-next)) {
8168
+ min-inline-size: var(--bf-square-block-size);
8169
+ padding-inline: 0;
8170
+ }
8171
+
7933
8172
  :where(.bf-theme) :where(.bf-pagination-link:hover, .bf-pagination-link.is-previous:hover, .bf-pagination-link.is-next:hover) {
7934
8173
  background-color: var(--bf-color-background-hover);
7935
8174
  }
@@ -8026,9 +8265,9 @@ html.u-baseline-grid::after {
8026
8265
  gap: var(--bf-disclosure-gap);
8027
8266
  inline-size: 100%;
8028
8267
  justify-content: flex-start;
8029
- margin-block-end: var(--bf-single-line-row-margin-block-end);
8030
- padding-block: var(--bf-single-line-row-padding-block);
8031
- padding-inline: 0;
8268
+ margin-block-end: var(--bf-interface-row-compensation-block-end);
8269
+ padding-block: var(--bf-interface-row-padding-block);
8270
+ padding-inline: var(--bf-disclosure-group-inset) 0;
8032
8271
  text-align: left;
8033
8272
  }
8034
8273
 
@@ -8089,7 +8328,7 @@ html.u-baseline-grid::after {
8089
8328
  }
8090
8329
 
8091
8330
  :where(.bf-theme) :where(.bf-modal.is-workflow) {
8092
- --bf-modal-workflow-viewport-gap: calc(var(--bf-baseline) * 4);
8331
+ --bf-modal-workflow-viewport-gap: var(--bf-component-inline-inset-continuation);
8093
8332
  --bf-modal-workflow-max-inline-size: 42rem;
8094
8333
  --bf-modal-workflow-min-inline-size: 32rem;
8095
8334
  --bf-modal-workflow-max-block-size: 40rem;
@@ -8129,7 +8368,7 @@ html.u-baseline-grid::after {
8129
8368
  :where(.bf-theme) :where(.bf-modal-header, .bf-modal-body, .bf-modal-footer) {
8130
8369
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
8131
8370
  padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
8132
- padding-inline: var(--bf-component-inline-inset-continuation);
8371
+ padding-inline: var(--bf-panel-padding-inline);
8133
8372
  }
8134
8373
 
8135
8374
  :where(.bf-theme) :where(.bf-modal-header) {
@@ -8304,7 +8543,7 @@ html.u-baseline-grid::after {
8304
8543
 
8305
8544
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon) {
8306
8545
  cursor: copy;
8307
- padding-inline-start: calc(var(--bf-component-inline-inset-continuation) + (var(--bf-baseline) * 3));
8546
+ padding-inline-start: calc(var(--bf-component-inline-inset-continuation) + var(--bf-leading-mark-gap));
8308
8547
  position: relative;
8309
8548
  }
8310
8549
 
@@ -8408,8 +8647,8 @@ html.u-baseline-grid::after {
8408
8647
  * visible and exposed at a time. */
8409
8648
  :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) :where(.bf-panel-header.is-navigation-brand) {
8410
8649
  align-items: start;
8411
- column-gap: calc(var(--bf-baseline) * 2);
8412
- padding-inline-end: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
8650
+ column-gap: var(--bf-leading-mark-gap);
8651
+ padding-inline-end: var(--bf-panel-content-padding-inline);
8413
8652
  }
8414
8653
 
8415
8654
  :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) {
@@ -8502,7 +8741,7 @@ html.u-baseline-grid::after {
8502
8741
  :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-link, .bf-side-navigation-text) {
8503
8742
  align-items: center;
8504
8743
  justify-content: center;
8505
- padding-inline: calc(var(--bf-baseline) * 1.25);
8744
+ padding-inline: var(--bf-component-inline-inset-action);
8506
8745
  }
8507
8746
 
8508
8747
  :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-list)::after {
@@ -8510,7 +8749,7 @@ html.u-baseline-grid::after {
8510
8749
  }
8511
8750
 
8512
8751
  :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) {
8513
- padding-inline: calc(var(--bf-baseline) * 1.25);
8752
+ padding-inline: var(--bf-component-inline-inset-action);
8514
8753
  }
8515
8754
 
8516
8755
  :where(.bf-theme) :where(.bf-application:has(> .bf-aside.is-pinned:not(.is-collapsed))) {
@@ -8637,7 +8876,7 @@ html.u-baseline-grid::after {
8637
8876
  cursor: ew-resize;
8638
8877
  display: none;
8639
8878
  inset-block: 0;
8640
- inset-inline-start: calc(var(--bf-baseline) * -3);
8879
+ inset-inline-start: calc(var(--bf-inline-unit) * -3);
8641
8880
  outline: none;
8642
8881
  position: absolute;
8643
8882
  touch-action: none;
@@ -8654,7 +8893,7 @@ html.u-baseline-grid::after {
8654
8893
  }
8655
8894
 
8656
8895
  :where(.bf-theme) :where(.bf-application-aside-resize-handle)::after {
8657
- background: var(--bf-color-border-default);
8896
+ background: transparent;
8658
8897
  border-radius: 62.4375rem;
8659
8898
  content: "";
8660
8899
  inset-block: var(--bf-panel-padding-block);
@@ -8676,7 +8915,9 @@ html.u-baseline-grid::after {
8676
8915
  outline-offset: -0.125rem;
8677
8916
  }
8678
8917
 
8679
- @media (min-width: 64.75rem) {
8918
+ /* Application navigation becomes persistent at 48rem. Standalone top and
8919
+ * document navigation keep their own large-screen contracts. */
8920
+ @media (min-width: 48rem) {
8680
8921
  :where(.bf-theme) :where(.bf-application:has(> .bf-navigation)) {
8681
8922
  grid-template-areas:
8682
8923
  "navigation-bar navigation-bar"
@@ -8719,6 +8960,10 @@ html.u-baseline-grid::after {
8719
8960
  display: none;
8720
8961
  }
8721
8962
 
8963
+ :where(.bf-theme) :where(.bf-application) :where(.bf-side-navigation-toggle) {
8964
+ display: none;
8965
+ }
8966
+
8722
8967
  :where(.bf-theme) :where(.bf-navigation-drawer),
8723
8968
  :where(.bf-theme) :where(.bf-navigation:not(.is-collapsed)) > :where(.bf-navigation-drawer) {
8724
8969
  block-size: 100%;
@@ -8952,7 +9197,7 @@ html.u-baseline-grid::after {
8952
9197
  overflow: hidden;
8953
9198
  overflow-wrap: anywhere;
8954
9199
  padding-block: var(--bf-body-nudge-start) var(--bf-body-nudge-end);
8955
- padding-inline: var(--bf-space-2) 0;
9200
+ padding-inline: var(--bf-component-inline-inset-action) 0;
8956
9201
  position: relative;
8957
9202
  text-decoration: none;
8958
9203
  text-overflow: ellipsis;
@@ -8995,7 +9240,7 @@ html.u-baseline-grid::after {
8995
9240
  }
8996
9241
 
8997
9242
  :where(.bf-theme) :where(.bf-in-page-navigation-list .bf-in-page-navigation-list .bf-in-page-navigation-link) {
8998
- padding-inline-start: var(--bf-space-4);
9243
+ padding-inline-start: calc(var(--bf-component-inline-inset-action) * 2);
8999
9244
  }
9000
9245
 
9001
9246
  :where(.bf-theme) :where(.bf-in-page-navigation-toggle) {
@@ -9006,15 +9251,16 @@ html.u-baseline-grid::after {
9006
9251
  line-height: var(--bf-body-line-height, 1.5rem);
9007
9252
  align-items: center;
9008
9253
  background: var(--bf-color-background-default);
9009
- border: 0;
9254
+ border: 0 solid transparent;
9255
+ border-block-width: var(--bf-border-width);
9010
9256
  color: var(--bf-color-text-default);
9011
9257
  cursor: pointer;
9012
9258
  display: none;
9013
9259
  justify-content: center;
9014
9260
  margin: 0;
9015
- min-block-size: var(--bf-control-box-size-compact);
9016
- padding-block: var(--bf-control-block-padding-compact);
9017
- padding-inline: var(--bf-space-1);
9261
+ padding-block-end: calc(var(--bf-interface-row-padding-block) + var(--bf-interface-row-compensation-block-end));
9262
+ padding-block-start: var(--bf-interface-row-padding-block);
9263
+ padding-inline: var(--bf-leading-mark-gap);
9018
9264
  }
9019
9265
 
9020
9266
  :where(.bf-theme) :where(.bf-in-page-navigation-toggle:hover) {
@@ -9032,6 +9278,7 @@ html.u-baseline-grid::after {
9032
9278
 
9033
9279
  :where(.bf-theme) :where(.bf-in-page-navigation-toggle > .bf-icon) {
9034
9280
  --bf-icon-size: var(--bf-icon-size-default);
9281
+ margin-block-start: 0;
9035
9282
  }
9036
9283
 
9037
9284
  @container bf-in-page-navigation (width < 40rem) {
@@ -9075,10 +9322,12 @@ html.u-baseline-grid::after {
9075
9322
  }
9076
9323
 
9077
9324
  :where(.bf-theme) :where(.bf-in-page-navigation-link) {
9325
+ border-block: var(--bf-border-width) solid transparent;
9078
9326
  display: block;
9079
9327
  overflow: hidden;
9080
- padding-block: calc(var(--bf-control-block-padding-compact) - var(--bf-border-width));
9081
- padding-inline: var(--bf-space-1);
9328
+ padding-block-end: calc(var(--bf-interface-row-padding-block) + var(--bf-interface-row-compensation-block-end));
9329
+ padding-block-start: var(--bf-interface-row-padding-block);
9330
+ padding-inline: var(--bf-leading-mark-gap);
9082
9331
  text-overflow: ellipsis;
9083
9332
  white-space: nowrap;
9084
9333
  }
@@ -9113,7 +9362,7 @@ html.u-baseline-grid::after {
9113
9362
  grid-row: 1;
9114
9363
  margin: 0;
9115
9364
  padding-block: calc(var(--bf-h6-nudge-start) + var(--bf-space-1)) calc(var(--bf-h6-nudge-end) + var(--bf-space-1));
9116
- padding-inline: var(--bf-space-2);
9365
+ padding-inline: var(--bf-component-inline-inset-action);
9117
9366
  }
9118
9367
 
9119
9368
  :where(.bf-theme) :where(.bf-in-page-navigation.is-expanded > .bf-in-page-navigation-nav > .bf-in-page-navigation-list, .bf-in-page-navigation:has(.bf-in-page-navigation-toggle[aria-expanded='true']) > .bf-in-page-navigation-nav > .bf-in-page-navigation-list) {
@@ -9139,7 +9388,7 @@ html.u-baseline-grid::after {
9139
9388
  display: -webkit-box;
9140
9389
  overflow-wrap: anywhere;
9141
9390
  padding-block: var(--bf-body-nudge-start) var(--bf-body-nudge-end);
9142
- padding-inline: var(--bf-space-2) 0;
9391
+ padding-inline: var(--bf-component-inline-inset-action) 0;
9143
9392
  white-space: normal;
9144
9393
  }
9145
9394
 
@@ -9164,7 +9413,7 @@ html.u-baseline-grid::after {
9164
9413
  * controller contracts while matching Vanilla's reduced chrome. */
9165
9414
  :where(.bf-theme) :where(.bf-top-navigation.is-reduced) {
9166
9415
  background: var(--bf-color-background-alt);
9167
- --bf-top-navigation-link-padding-block: var(--bf-control-block-padding-compact);
9416
+ --bf-top-navigation-reduced-row-block-size: var(--bf-interface-row-occupied-block-size);
9168
9417
  }
9169
9418
 
9170
9419
  :where(.bf-theme) :where(.bf-top-navigation.is-reduced) :where(.bf-top-navigation-logo-tag) {
@@ -9177,10 +9426,13 @@ html.u-baseline-grid::after {
9177
9426
 
9178
9427
  :where(.bf-theme) :where(.bf-top-navigation.is-reduced) :where(.bf-top-navigation-logo) > :where(.bf-top-navigation-link),
9179
9428
  :where(.bf-theme) :where(.bf-top-navigation.is-reduced) :where(.bf-top-navigation-link, .bf-top-navigation-menu-toggle, .bf-top-navigation-search-toggle) {
9429
+ border: 0 solid transparent;
9430
+ border-block-width: var(--bf-border-width);
9180
9431
  color: var(--bf-color-text-muted);
9181
9432
  font-size: var(--bf-body-font-size);
9182
9433
  line-height: var(--bf-body-line-height);
9183
- padding-block: var(--bf-top-navigation-link-padding-block);
9434
+ padding-block-end: calc(var(--bf-interface-row-padding-block) + var(--bf-interface-row-compensation-block-end));
9435
+ padding-block-start: var(--bf-interface-row-padding-block);
9184
9436
  }
9185
9437
 
9186
9438
  :where(.bf-theme) :where(.bf-top-navigation.is-reduced) :where(.bf-top-navigation-logo.is-canonical-tagged) > :where(.bf-top-navigation-link) {
@@ -9205,7 +9457,7 @@ html.u-baseline-grid::after {
9205
9457
 
9206
9458
  @media (min-width: 64.75rem) {
9207
9459
  :where(.bf-theme) :where(.bf-top-navigation.is-reduced) :where(.bf-top-navigation-dropdown) {
9208
- top: calc((var(--bf-top-navigation-link-padding-block) * 2) + var(--bf-body-line-height));
9460
+ top: var(--bf-top-navigation-reduced-row-block-size);
9209
9461
  }
9210
9462
 
9211
9463
  :where(.bf-theme) :where(.bf-top-navigation.is-reduced) :where(.bf-top-navigation-search) {
@@ -9214,7 +9466,7 @@ html.u-baseline-grid::after {
9214
9466
  box-shadow: 0 calc(var(--bf-baseline) * 0.5) calc(var(--bf-baseline) * 2) rgba(0, 0, 0, 0.16);
9215
9467
  inset-block-start: 100%;
9216
9468
  inset-inline-end: 0;
9217
- padding: var(--bf-control-block-padding-compact) var(--bf-top-navigation-link-padding-inline);
9469
+ padding: var(--bf-panel-padding-block) var(--bf-top-navigation-link-padding-inline);
9218
9470
  position: absolute;
9219
9471
  }
9220
9472
 
@@ -9262,6 +9514,7 @@ html.u-baseline-grid::after {
9262
9514
  color: var(--bf-color-text-default);
9263
9515
  margin: 0;
9264
9516
  padding-block-end: 0;
9517
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
9265
9518
  }
9266
9519
 
9267
9520
  :where(.bf-theme) :where(.bf-table-of-contents-list) {
@@ -9293,9 +9546,11 @@ html.u-baseline-grid::after {
9293
9546
  border-block: var(--bf-border-width) solid transparent;
9294
9547
  color: var(--bf-color-link-default);
9295
9548
  display: block;
9296
- margin: 0 0 var(--bf-single-line-row-margin-block-end);
9549
+ margin: 0 0 var(--bf-interface-row-compensation-block-end);
9297
9550
  overflow-wrap: anywhere;
9298
- padding-block: var(--bf-single-line-row-padding-block);
9551
+ padding-block: var(--bf-interface-row-padding-block);
9552
+ padding-inline-end: var(--bf-component-inline-inset-action);
9553
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
9299
9554
  text-decoration: none;
9300
9555
  }
9301
9556
 
@@ -9319,12 +9574,12 @@ html.u-baseline-grid::after {
9319
9574
  }
9320
9575
 
9321
9576
  :where(.bf-theme) :where(.bf-table-of-contents-list .bf-table-of-contents-list) {
9322
- margin-inline-start: var(--bf-space-2);
9577
+ margin-inline-start: var(--bf-component-inline-inset-action);
9323
9578
  }
9324
9579
 
9325
9580
  @container bf-table-of-contents (width < 20rem) {
9326
9581
  :where(.bf-theme) :where(.bf-table-of-contents-list .bf-table-of-contents-list) {
9327
- margin-inline-start: var(--bf-space-1);
9582
+ margin-inline-start: var(--bf-leading-mark-gap);
9328
9583
  }
9329
9584
  }
9330
9585
 
@@ -9423,9 +9678,9 @@ html.u-baseline-grid::after {
9423
9678
  }
9424
9679
 
9425
9680
  /* ------------------------------------------------------------------ */
9426
- /* Header split (≥ 45rem): the shared readable 50/50 title/content split. */
9681
+ /* Header split (≥ 38.75rem): the standard medium 50/50 title/content split. */
9427
9682
  /* ------------------------------------------------------------------ */
9428
- @container (width >= 45rem) {
9683
+ @container (width >= 38.75rem) {
9429
9684
  :where(.bf-theme) :where(.bf-tiered-list:not(.is-description-full-width)) :where(.bf-tiered-list-header) {
9430
9685
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
9431
9686
  }
@@ -9804,35 +10059,13 @@ html.u-baseline-grid::after {
9804
10059
  grid-column: 1 / -1;
9805
10060
  }
9806
10061
 
9807
- /* Canonical app-tier preset: light application chrome, Ubuntu Sans, and app-surface control overrides. */
10062
+ /* Canonical app-tier preset: application chrome only. Component
10063
+ typography and spacing resolve from the tier inputs in their source modules. */
9808
10064
  :where(.bf-theme.bf-tier-app) {
9809
10065
  --bf-app-demo-page-bg: var(--vf-color-background-alt, #f7f7f7);
9810
- --bf-radius: 0;
9811
10066
  color-scheme: light;
9812
10067
  }
9813
10068
 
9814
- :where(.bf-theme.bf-tier-app) :where(.bf-form-label, .bf-form-help, .bf-button, .bf-button.is-base, .bf-status-label, .bf-chip, .bf-checkbox-label, .bf-radio-label, .bf-tabs-link, .bf-accordion-tab, .bf-validation-message) {
9815
- font-family: inherit;
9816
- font-size: var(--bf-body-font-size);
9817
- font-style: normal;
9818
- font-weight: 400;
9819
- line-height: var(--bf-body-line-height);
9820
- }
9821
-
9822
- /* Preserve the public nested fit after the preset's general typography pass.
9823
- The modifier remains explicit and zero-specificity in every app scope. */
9824
- :where(.bf-theme.bf-tier-app) :where(.bf-status-label.is-nested, .bf-chip.is-nested) {
9825
- line-height: var(--bf-nested-auxiliary-line-height);
9826
- }
9827
-
9828
- :where(.bf-theme.bf-tier-app) :where(.bf-input, .bf-button, .bf-button.is-base) {
9829
- font-family: inherit;
9830
- font-size: var(--bf-body-font-size);
9831
- font-style: normal;
9832
- font-weight: 400;
9833
- line-height: var(--bf-body-line-height);
9834
- }
9835
-
9836
10069
  :where(.bf-theme.bf-tier-app) :where(.bf-application) {
9837
10070
  background: var(--bf-app-demo-page-bg);
9838
10071
  }
@@ -9843,13 +10076,6 @@ html.u-baseline-grid::after {
9843
10076
  box-shadow: 0 0.625rem 1.25rem rgba(0, 0, 0, 0.12), 0 0 0.1875rem rgba(0, 0, 0, 0.12);
9844
10077
  }
9845
10078
 
9846
- :where(.bf-theme.bf-tier-app) :where(.bf-panel-header) {
9847
- align-items: start;
9848
- gap: calc(var(--bf-baseline) * 1.5);
9849
- padding-block-end: var(--bf-panel-padding-block);
9850
- padding-block-start: var(--bf-panel-padding-block);
9851
- }
9852
-
9853
10079
  :where(.bf-theme.bf-tier-app) :where(.bf-panel-header.is-navigation-brand) {
9854
10080
  gap: 0;
9855
10081
  padding-block: 0;
@@ -9860,22 +10086,10 @@ html.u-baseline-grid::after {
9860
10086
  }
9861
10087
 
9862
10088
  :where(.bf-theme.bf-tier-app) :where(.bf-navigation-bar.is-responsive) :where(.bf-panel-header.is-navigation-brand) {
9863
- gap: calc(var(--bf-baseline) * 2);
10089
+ gap: var(--bf-leading-mark-gap);
9864
10090
  padding-block: 0;
9865
10091
  }
9866
10092
 
9867
- :where(.bf-theme.bf-tier-app) :where(.bf-panel-controls) {
9868
- gap: calc(var(--bf-baseline) * 1.5);
9869
- }
9870
-
9871
- :where(.bf-theme.bf-tier-app) :where(.bf-navigation-bar, .bf-navigation-drawer, .bf-aside) :where(.bf-panel-title) {
9872
- font-family: inherit;
9873
- font-size: 1rem;
9874
- font-style: normal;
9875
- font-weight: 400;
9876
- line-height: 1.5rem;
9877
- }
9878
-
9879
10093
  :where(.bf-theme.bf-tier-app) :where(.bf-side-navigation-link.is-active, .bf-side-navigation-link[aria-current='page'], .bf-side-navigation-link[aria-current='true']) {
9880
10094
  background: transparent;
9881
10095
  box-shadow: inset var(--bf-bar-thickness) 0 0 var(--vf-color-link-default, #0066cc);
@@ -9883,8 +10097,7 @@ html.u-baseline-grid::after {
9883
10097
 
9884
10098
  :where(.bf-theme.bf-tier-app) :where(.bf-navigation-bar),
9885
10099
  :where(.bf-theme.bf-tier-app) :where(.bf-navigation-drawer),
9886
- :where(.bf-theme.bf-tier-app) :where(.bf-aside),
9887
- :where(.bf-theme.bf-tier-app) :where(.bf-panel) {
10100
+ :where(.bf-theme.bf-tier-app) :where(.bf-aside) {
9888
10101
  background: var(--vf-color-background-default, #ffffff);
9889
10102
  }
9890
10103