baseline-foundry 0.1.3 → 0.1.5

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 (84) hide show
  1. package/README.md +577 -553
  2. package/config/experiments/ibm-plex-engine-smoke.json +115 -115
  3. package/config/experiments/ubuntu-engine-smoke.json +115 -115
  4. package/config/foundation-theme.json +110 -110
  5. package/config/tiers/app.json +116 -116
  6. package/config/tiers/documentation.json +116 -116
  7. package/config/tiers/editorial.json +116 -116
  8. package/config/tiers/os.json +116 -116
  9. package/dist/baseline-grid-overlay.js +43 -43
  10. package/dist/build.js +4 -4
  11. package/dist/code-snippet.js +1 -1
  12. package/dist/css-app-tier.js +78 -73
  13. package/dist/css-components/article-pagination.js +141 -140
  14. package/dist/css-components/button-actions.js +181 -161
  15. package/dist/css-components/cards-options.js +176 -176
  16. package/dist/css-components/chip-badge-status.d.ts +0 -3
  17. package/dist/css-components/chip-badge-status.js +174 -159
  18. package/dist/css-components/content-card.d.ts +7 -7
  19. package/dist/css-components/content-card.js +498 -497
  20. package/dist/css-components/control-row.d.ts +1 -1
  21. package/dist/css-components/control-row.js +15 -15
  22. package/dist/css-components/cta-figure-aspect.js +120 -120
  23. package/dist/css-components/document-navigation.js +427 -390
  24. package/dist/css-components/editorial-content.js +42 -42
  25. package/dist/css-components/icon.js +72 -72
  26. package/dist/css-components/interactive-feedback.js +239 -217
  27. package/dist/css-components/interactive-tables.js +160 -155
  28. package/dist/css-components/legacy-navigation.d.ts +8 -0
  29. package/dist/css-components/legacy-navigation.js +816 -0
  30. package/dist/css-components/linked-logo-site-layout.d.ts +3 -3
  31. package/dist/css-components/linked-logo-site-layout.js +177 -180
  32. package/dist/css-components/list-tree.js +96 -94
  33. package/dist/css-components/list.js +9 -7
  34. package/dist/css-components/logo-media.d.ts +6 -6
  35. package/dist/css-components/logo-media.js +218 -207
  36. package/dist/css-components/navigation-layout.js +144 -144
  37. package/dist/css-components/panel.js +148 -144
  38. package/dist/css-components/search-box-and-filter.d.ts +0 -1
  39. package/dist/css-components/search-box-and-filter.js +263 -264
  40. package/dist/css-components/sites-editorial-ports.d.ts +3 -4
  41. package/dist/css-components/sites-editorial-ports.js +279 -247
  42. package/dist/css-components/sites-foundation.js +142 -146
  43. package/dist/css-components/sites-rich-lists.d.ts +5 -5
  44. package/dist/css-components/sites-rich-lists.js +339 -349
  45. package/dist/css-components/static-content-ports.d.ts +3 -3
  46. package/dist/css-components/static-content-ports.js +200 -186
  47. package/dist/css-components/tab-section.d.ts +3 -3
  48. package/dist/css-components/tab-section.js +93 -85
  49. package/dist/css-components/table.js +76 -75
  50. package/dist/css-components/tabs-choice-breadcrumbs.js +307 -303
  51. package/dist/css-components/tiered-list-equal-height-row.js +271 -271
  52. package/dist/css-components.js +1881 -2554
  53. package/dist/css-grid.d.ts +1 -1
  54. package/dist/css-grid.js +183 -173
  55. package/dist/css.js +317 -241
  56. package/dist/experiments/ibm-plex-engine-smoke/styles.css +894 -538
  57. package/dist/experiments/ibm-plex-engine-smoke/surfaces.json +2 -2
  58. package/dist/experiments/ibm-plex-engine-smoke/tokens.json +1 -1
  59. package/dist/in-page-navigation.js +1 -1
  60. package/dist/presets/app-tier/styles.css +928 -568
  61. package/dist/presets/app-tier/surfaces.json +17 -17
  62. package/dist/presets/app-tier/tokens.json +7 -7
  63. package/dist/presets/prose/styles.css +919 -562
  64. package/dist/presets/prose/surfaces.json +17 -17
  65. package/dist/presets/prose/tokens.json +1 -1
  66. package/dist/resizable-aside.js +12 -4
  67. package/dist/styles.css +919 -562
  68. package/dist/surfaces.json +17 -17
  69. package/dist/tiers/app/styles.css +928 -568
  70. package/dist/tiers/app/surfaces.json +17 -17
  71. package/dist/tiers/app/tokens.json +7 -7
  72. package/dist/tiers/documentation/styles.css +920 -563
  73. package/dist/tiers/documentation/surfaces.json +17 -17
  74. package/dist/tiers/documentation/tokens.json +2 -2
  75. package/dist/tiers/editorial/styles.css +919 -562
  76. package/dist/tiers/editorial/surfaces.json +17 -17
  77. package/dist/tiers/editorial/tokens.json +1 -1
  78. package/dist/tiers/os/styles.css +925 -568
  79. package/dist/tiers/os/surfaces.json +17 -17
  80. package/dist/tiers/os/tokens.json +7 -7
  81. package/dist/tokens.json +1 -1
  82. package/dist/types.d.ts +1 -1
  83. package/docs/publishing.md +31 -14
  84. package/package.json +119 -108
@@ -10,8 +10,8 @@
10
10
  background-image: linear-gradient(
11
11
  to top,
12
12
  var(--bf-baseline-grid-color),
13
- var(--bf-baseline-grid-color) 1px,
14
- transparent 1px,
13
+ var(--bf-baseline-grid-color) 0.0625rem,
14
+ transparent 0.0625rem,
15
15
  transparent
16
16
  );
17
17
  background-size: 100% var(--bf-baseline-grid-size);
@@ -47,7 +47,7 @@ html.u-baseline-grid::after {
47
47
  --bf-space-8: calc(var(--bf-baseline) * 8);
48
48
  --bf-space-12: calc(var(--bf-baseline) * 12);
49
49
  --bf-space-16: calc(var(--bf-baseline) * 16);
50
- --bf-content-max-width: 96rem;
50
+ --bf-content-max-width: 80rem;
51
51
  --bf-content-padding-inline: 1.5rem;
52
52
  --bf-measure: 38rem;
53
53
  --bf-section-space: 3rem;
@@ -163,7 +163,7 @@ html.u-baseline-grid::after {
163
163
  --bf-space-8: calc(var(--bf-baseline) * 8);
164
164
  --bf-space-12: calc(var(--bf-baseline) * 12);
165
165
  --bf-space-16: calc(var(--bf-baseline) * 16);
166
- --bf-content-max-width: 96rem;
166
+ --bf-content-max-width: 80rem;
167
167
  --bf-content-padding-inline: 1.5rem;
168
168
  --bf-measure: 38rem;
169
169
  --bf-section-space: 3rem;
@@ -395,13 +395,13 @@ html.u-baseline-grid::after {
395
395
  --bf-space-8: calc(var(--bf-baseline) * 8);
396
396
  --bf-space-12: calc(var(--bf-baseline) * 12);
397
397
  --bf-space-16: calc(var(--bf-baseline) * 16);
398
- --bf-content-max-width: 90rem;
398
+ --bf-content-max-width: 60rem;
399
399
  --bf-content-padding-inline: 1rem;
400
400
  --bf-measure: 40rem;
401
401
  --bf-section-space: 1rem;
402
402
  --bf-section-space-shallow: 0.5rem;
403
403
  --bf-section-space-deep: 2rem;
404
- --bf-strip-space: 4rem;
404
+ --bf-strip-space: 3rem;
405
405
  --bf-grid-gap-inline: 1.5rem;
406
406
  --bf-grid-gap-block: 1.5rem;
407
407
  --bf-page-margin: 2rem;
@@ -511,13 +511,13 @@ html.u-baseline-grid::after {
511
511
  --bf-space-8: calc(var(--bf-baseline) * 8);
512
512
  --bf-space-12: calc(var(--bf-baseline) * 12);
513
513
  --bf-space-16: calc(var(--bf-baseline) * 16);
514
- --bf-content-max-width: 67.5rem;
514
+ --bf-content-max-width: 60rem;
515
515
  --bf-content-padding-inline: 0.75rem;
516
516
  --bf-measure: 30rem;
517
517
  --bf-section-space: 3rem;
518
518
  --bf-section-space-shallow: 1.5rem;
519
519
  --bf-section-space-deep: 6rem;
520
- --bf-strip-space: 3rem;
520
+ --bf-strip-space: 2rem;
521
521
  --bf-grid-gap-inline: 1rem;
522
522
  --bf-grid-gap-block: 1rem;
523
523
  --bf-page-margin: 1rem;
@@ -785,7 +785,7 @@ html.u-baseline-grid::after {
785
785
  :where(.bf-theme) :where(a) {
786
786
  color: var(--bf-color-link);
787
787
  text-decoration: none;
788
- text-decoration-thickness: 1px;
788
+ text-decoration-thickness: 0.0625rem;
789
789
  text-underline-offset: 0.12em;
790
790
  }
791
791
 
@@ -798,8 +798,22 @@ html.u-baseline-grid::after {
798
798
  }
799
799
 
800
800
  :where(.bf-theme) :where(a:focus-visible) {
801
- outline: 2px solid var(--bf-color-focus);
802
- outline-offset: 2px;
801
+ outline: 0.125rem solid var(--bf-color-focus);
802
+ outline-offset: 0.125rem;
803
+ }
804
+
805
+ /* Standalone anchors need the same metric-owned text box as adjacent body
806
+ * controls. Raw anchors remain inline so prose links still participate in the
807
+ * surrounding line box. */
808
+ :where(.bf-theme) :where(a.bf-text-link) {
809
+ display: inline-block;
810
+ font-family: var(--bf-body-font-family);
811
+ font-size: var(--bf-body-font-size);
812
+ font-style: var(--bf-body-font-style);
813
+ font-weight: var(--bf-body-font-weight);
814
+ line-height: var(--bf-body-line-height);
815
+ margin-block: 0 var(--bf-body-margin-bottom);
816
+ padding-block: var(--bf-body-nudge-start) 0;
803
817
  }
804
818
 
805
819
  :where(.bf-theme) :where(code) {
@@ -810,7 +824,7 @@ html.u-baseline-grid::after {
810
824
  :where(.bf-theme) :where(.bf-page) {
811
825
  margin-inline: auto;
812
826
  max-inline-size: var(--bf-content-max-width);
813
- padding-inline: max(var(--bf-page-margin), var(--bf-content-padding-inline));
827
+ padding-inline: var(--bf-page-margin);
814
828
  }
815
829
 
816
830
  :where(.bf-theme) :where(.bf-page.is-fill) {
@@ -893,7 +907,14 @@ html.u-baseline-grid::after {
893
907
  }
894
908
 
895
909
  :where(.bf-theme) :where(.bf-stack.is-flush) {
896
- --bf-stack-space: 0px;
910
+ --bf-stack-space: 0rem;
911
+ }
912
+
913
+ /* A metric-flush stack is an explicit relationship between adjacent text
914
+ * roles. It retains the outer role nudges while cancelling only the preceding
915
+ * end compensation and following start nudge; no guessed negative gap is used. */
916
+ :where(.bf-theme) :where(.bf-stack.is-metric-flush) {
917
+ --bf-stack-space: 0rem;
897
918
  }
898
919
 
899
920
  :where(.bf-theme) :where(.bf-stack.is-extra-dense) {
@@ -921,10 +942,19 @@ html.u-baseline-grid::after {
921
942
  }
922
943
 
923
944
  :where(.bf-theme) :where(.bf-cluster) {
945
+ --bf-cluster-space: var(--bf-space-2);
924
946
  align-items: flex-start;
925
947
  display: flex;
926
948
  flex-wrap: wrap;
927
- gap: var(--bf-space-2);
949
+ gap: var(--bf-cluster-space);
950
+ }
951
+
952
+ :where(.bf-theme) :where(.bf-cluster.is-dense) {
953
+ --bf-cluster-space: var(--bf-space-1);
954
+ }
955
+
956
+ :where(.bf-theme) :where(.bf-cluster.is-nowrap) {
957
+ flex-wrap: nowrap;
928
958
  }
929
959
 
930
960
  :where(.bf-theme) :where(.bf-cluster.is-split) {
@@ -1046,6 +1076,14 @@ html.u-baseline-grid::after {
1046
1076
  }
1047
1077
 
1048
1078
 
1079
+ :where(.bf-theme) .bf-stack.is-metric-flush > :where(blockquote, p, h1, h2, h3, h4, h5, h6, .bf-body, .bf-h1, .bf-h2, .bf-h3, .bf-h4, .bf-h5, .bf-h6):has(+ :where(blockquote, p, h1, h2, h3, h4, h5, h6, .bf-body, .bf-h1, .bf-h2, .bf-h3, .bf-h4, .bf-h5, .bf-h6)) {
1080
+ margin-block-end: 0;
1081
+ }
1082
+
1083
+ :where(.bf-theme) .bf-stack.is-metric-flush > :where(blockquote, p, h1, h2, h3, h4, h5, h6, .bf-body, .bf-h1, .bf-h2, .bf-h3, .bf-h4, .bf-h5, .bf-h6) + :where(blockquote, p, h1, h2, h3, h4, h5, h6, .bf-body, .bf-h1, .bf-h2, .bf-h3, .bf-h4, .bf-h5, .bf-h6) {
1084
+ padding-block-start: 0;
1085
+ }
1086
+
1049
1087
  /* DEMO ONLY — Cap-derived nudges are unreliable (ascender ≠ cap height).
1050
1088
  The approximation (line-height + 1cap) / 2 drifts at larger sizes.
1051
1089
  Kept as a reference for why metrics-derived nudges are used instead. */
@@ -1101,10 +1139,36 @@ html.u-baseline-grid::after {
1101
1139
 
1102
1140
  :where(.bf-theme) :where(ul, ol) {
1103
1141
  margin-bottom: 0;
1142
+ padding-block-end: 0;
1104
1143
  }
1105
1144
 
1106
- :where(.bf-theme) :where(.bf-prose ul, .bf-prose ol) {
1107
- padding-inline-start: var(--bf-space-4);
1145
+ :where(.bf-theme) :where(.bf-prose ol) {
1146
+ padding-inline-start: calc(var(--bf-leading-mark-group-inset) + var(--bf-leading-mark-offset) - (var(--bf-leading-mark-size) * 0.5));
1147
+ }
1148
+
1149
+ :where(.bf-theme) :where(.bf-prose ol > li) {
1150
+ padding-inline-start: calc(var(--bf-leading-mark-size) * 0.5);
1151
+ }
1152
+
1153
+ :where(.bf-theme) :where(.bf-prose ul) {
1154
+ list-style: none;
1155
+ padding-inline-start: var(--bf-leading-mark-group-inset);
1156
+ }
1157
+
1158
+ :where(.bf-theme) :where(.bf-prose ul > li) {
1159
+ padding-inline-start: var(--bf-leading-mark-offset);
1160
+ position: relative;
1161
+ }
1162
+
1163
+ :where(.bf-theme) :where(.bf-prose ul > li)::before {
1164
+ background: currentColor;
1165
+ block-size: var(--bf-list-marker-dot-size);
1166
+ border-radius: 50%;
1167
+ content: "";
1168
+ inline-size: var(--bf-list-marker-dot-size);
1169
+ inset-block-start: calc(var(--bf-tick-box-offset) + ((var(--bf-leading-mark-size) - var(--bf-list-marker-dot-size)) * 0.5));
1170
+ inset-inline-start: calc((var(--bf-leading-mark-size) - var(--bf-list-marker-dot-size)) * 0.5);
1171
+ position: absolute;
1108
1172
  }
1109
1173
 
1110
1174
  :where(.bf-theme) :where(.bf-prose li) {
@@ -1114,39 +1178,37 @@ html.u-baseline-grid::after {
1114
1178
  }
1115
1179
 
1116
1180
  :where(.bf-theme) :where(.bf-prose blockquote) {
1117
- border-inline-start: 1px solid var(--bf-color-rule);
1118
- color: var(--bf-color-muted);
1181
+ color: var(--bf-color-text-default);
1119
1182
  font-family: var(--bf-body-font-family, "Ubuntu Sans", "Segoe UI", system-ui, sans-serif);
1120
1183
  font-size: var(--bf-body-font-size, 0.875rem);
1121
1184
  font-style: var(--bf-body-font-style, normal);
1122
1185
  font-weight: var(--bf-body-font-weight, 400);
1123
1186
  line-height: var(--bf-body-line-height, 1.25rem);
1124
1187
  margin-bottom: var(--bf-body-margin-bottom, 0.1725rem);
1125
- max-inline-size: calc(var(--bf-measure) + var(--bf-space-4));
1188
+ max-inline-size: var(--bf-measure);
1126
1189
  padding-block-end: 0rem;
1127
1190
  padding-block-start: var(--bf-body-nudge-start, 0.0775rem);
1128
- padding-inline-start: var(--bf-space-3);
1129
1191
  }
1130
1192
 
1131
- :where(.bf-theme) :where(.bf-rule, .bf-prose hr) {
1193
+ :where(.bf-theme) :where(hr) {
1132
1194
  background: var(--bf-color-rule);
1133
- block-size: 1px;
1195
+ block-size: 0.0625rem;
1134
1196
  border: 0;
1135
1197
  inline-size: 100%;
1136
1198
  /* Reserve one half-rem rhythm step after the rule, including its */
1137
1199
  /* thickness, so borderless content does not touch the divider. */
1138
- margin: 0 0 calc(0.5rem - 1px);
1200
+ margin: 0 0 calc(0.5rem - 0.0625rem);
1139
1201
  }
1140
1202
 
1141
1203
  /* Highlight rules share the same scalable emphasis-bar geometry as active
1142
1204
  * navigation, tabs, notifications, and document-navigation markers. */
1143
- :where(.bf-theme) :where(.bf-rule.is-highlighted, .bf-prose hr.is-highlighted) {
1205
+ :where(.bf-theme) :where(hr.is-highlighted) {
1144
1206
  block-size: var(--bf-bar-thickness);
1145
1207
  margin-block-end: calc(0.5rem - var(--bf-bar-thickness));
1146
1208
  }
1147
1209
 
1148
1210
  :where(.bf-theme) :where(.bf-token-row) {
1149
- border-top: 1px solid var(--bf-color-rule);
1211
+ border-top: 0.0625rem solid var(--bf-color-rule);
1150
1212
  display: grid;
1151
1213
  gap: var(--bf-space-1);
1152
1214
  padding-top: var(--bf-space-2);
@@ -1158,7 +1220,7 @@ html.u-baseline-grid::after {
1158
1220
  }
1159
1221
 
1160
1222
  :where(.bf-theme) {
1161
- --bf-border-width: 1px;
1223
+ --bf-border-width: 0.0625rem;
1162
1224
  --bf-bar-thickness: 0.1875rem;
1163
1225
  --bf-radius: 0rem;
1164
1226
  --bf-control-block-padding: 0.5rem;
@@ -1176,22 +1238,41 @@ html.u-baseline-grid::after {
1176
1238
  /* Action surfaces keep comfortable command targets; field surfaces can tighten independently. */
1177
1239
  --bf-disclosure-gap: 1rem;
1178
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);
1179
1250
  --bf-input-block-padding: var(--bf-body-nudge-start, 0.0775rem);
1180
1251
  --bf-button-block-padding: var(--bf-body-nudge-start, 0.0775rem);
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.25rem) + (var(--bf-button-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
1257
+ --bf-single-line-row-visual-offset: calc(var(--bf-body-nudge-start, 0.0775rem) + ((var(--bf-body-line-height, 1.25rem) - var(--bf-control-visual-size)) / 2));
1181
1258
  --bf-slider-track-size: calc(var(--bf-baseline) * 0.25);
1182
1259
  --bf-slider-row-block-size: max(var(--bf-control-box-size-compact), calc(var(--bf-body-nudge-start, 0.0775rem) + var(--bf-body-line-height, 1.25rem) + var(--bf-body-nudge-end)));
1183
1260
  --bf-slider-track-offset: calc(var(--bf-body-nudge-start, 0.0775rem) + ((var(--bf-body-line-height, 1.25rem) - var(--bf-slider-track-size)) / 2));
1184
1261
  --bf-table-row-border-size: var(--bf-border-width);
1185
- --bf-table-row-padding: var(--bf-body-nudge-start, 0.0775rem);
1186
- --bf-table-row-content-size: calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-table-row-padding) * 2) + var(--bf-table-row-border-size));
1262
+ --bf-table-row-padding-block-start: var(--bf-body-nudge-start, 0.0775rem);
1263
+ --bf-table-row-content-size: calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-table-row-padding-block-start) * 2) + var(--bf-table-row-border-size));
1187
1264
  --bf-table-row-block-size: calc(var(--bf-table-row-content-size) + mod(calc(var(--bf-baseline) - mod(var(--bf-table-row-content-size), var(--bf-baseline))), var(--bf-baseline)));
1188
- --bf-table-row-line-height: calc(var(--bf-table-row-block-size) - (var(--bf-table-row-padding) * 2) - var(--bf-table-row-border-size));
1189
- --bf-switch-row-block-size: calc(var(--bf-body-nudge-start, 0.0775rem) + var(--bf-body-line-height, 1.25rem) + var(--bf-body-nudge-end));
1190
- --bf-switch-track-offset: calc(var(--bf-body-nudge-start, 0.0775rem) + ((var(--bf-body-line-height, 1.25rem) - var(--bf-control-visual-size)) / 2));
1191
- --bf-tick-row-block-size: max(var(--bf-control-box-size-compact), calc(var(--bf-body-nudge-start, 0.0775rem) + var(--bf-body-line-height, 1.25rem) + var(--bf-body-nudge-end)));
1192
- --bf-tick-box-offset: calc(var(--bf-body-nudge-start, 0.0775rem) + ((var(--bf-body-line-height, 1.25rem) - var(--bf-control-visual-size)) / 2));
1193
- --bf-tick-label-offset: calc(var(--bf-control-visual-size) + var(--bf-control-inline-padding-field));
1194
- --bf-radio-dot-size: calc(var(--bf-control-visual-size) * 0.375);
1265
+ --bf-table-row-padding-block-end: max(0rem, calc(var(--bf-table-row-block-size) - var(--bf-body-line-height, 1.25rem) - var(--bf-table-row-padding-block-start) - var(--bf-table-row-border-size)));
1266
+ --bf-table-row-line-height: var(--bf-body-line-height, 1.25rem);
1267
+ --bf-switch-track-offset: var(--bf-single-line-row-visual-offset);
1268
+ --bf-tick-box-offset: var(--bf-single-line-row-visual-offset);
1269
+ --bf-leading-mark-size: var(--bf-control-visual-size);
1270
+ --bf-leading-mark-gap: var(--bf-component-inline-inset-field);
1271
+ --bf-leading-mark-offset: calc(var(--bf-leading-mark-size) + var(--bf-leading-mark-gap));
1272
+ --bf-leading-mark-group-inset: calc(var(--bf-component-inline-inset-continuation) - var(--bf-leading-mark-offset));
1273
+ --bf-tick-label-offset: var(--bf-leading-mark-offset);
1274
+ --bf-radio-dot-size: calc((var(--bf-control-visual-size) * 0.375) + var(--bf-border-width));
1275
+ --bf-list-marker-dot-size: calc(var(--bf-border-width) * 4);
1195
1276
  --bf-app-drawer-width-icon: 2rem;
1196
1277
  --bf-app-drawer-width-small: 15rem;
1197
1278
  --bf-app-drawer-width-small-max: 20rem;
@@ -1203,7 +1284,9 @@ html.u-baseline-grid::after {
1203
1284
  --bf-app-aside-width-max: var(--bf-app-drawer-width-medium-max);
1204
1285
  --bf-app-navigation-width: 15rem;
1205
1286
  --bf-app-navigation-width-collapsed: 3rem;
1206
- --bf-side-navigation-icon-optical-offset-block: 0.1875rem;
1287
+ --bf-icon-label-optical-offset-block: 0.1875rem;
1288
+ --bf-disclosure-icon-optical-offset-block: var(--bf-icon-label-optical-offset-block);
1289
+ --bf-side-navigation-icon-optical-offset-block: var(--bf-icon-label-optical-offset-block);
1207
1290
  --bf-side-navigation-icon-gap: 0.625rem;
1208
1291
  --bf-navigation-bar-min-block-size: calc(var(--bf-baseline) * 6);
1209
1292
  --bf-authoring-accent: #f6b73c;
@@ -1216,9 +1299,10 @@ html.u-baseline-grid::after {
1216
1299
  --bf-authoring-accent-focus-ring: rgba(246, 183, 60, 0.55);
1217
1300
  --bf-application-resize-handle-active: var(--bf-authoring-accent-strong);
1218
1301
  --bf-application-resize-handle-focus-ring: var(--bf-authoring-accent-focus-ring);
1219
- --bf-top-navigation-link-padding-inline: var(--bf-control-inline-padding-action);
1220
- --bf-top-navigation-end-slot-inline-size: calc(1rem + var(--bf-control-inline-padding-field));
1221
- --bf-top-navigation-search-toggle-inline-size: calc(1rem + (var(--bf-control-inline-padding-field) * 2));
1302
+ --bf-control-inline-padding-action-bordered: max(0rem, calc(var(--bf-component-inline-inset-action) - var(--bf-border-width)));
1303
+ --bf-top-navigation-link-padding-inline: var(--bf-component-inline-inset-action);
1304
+ --bf-top-navigation-end-slot-inline-size: calc(1rem + var(--bf-component-inline-inset-field));
1305
+ --bf-top-navigation-search-toggle-inline-size: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
1222
1306
  --bf-top-navigation-link-padding-block: max(var(--bf-body-nudge-start), calc(var(--bf-baseline) * 1.5));
1223
1307
  --bf-top-navigation-search-max-inline-size: 20rem;
1224
1308
  --bf-top-navigation-logo-tag-inline-size: 1.375rem;
@@ -1233,12 +1317,10 @@ html.u-baseline-grid::after {
1233
1317
  --bf-icon-size-large: 4rem;
1234
1318
  --bf-icon-size-x-large: 4.5rem;
1235
1319
  --bf-icon-size-xx-large: 6rem;
1236
- --bf-leading-icon-size: calc(var(--bf-baseline) * 2);
1237
- --bf-leading-icon-gap: calc(var(--bf-baseline) * 1);
1238
- --bf-leading-icon-offset: calc(var(--bf-body-nudge-start, 0.0775rem) + ((var(--bf-body-line-height, 1.25rem) - var(--bf-leading-icon-size)) / 2));
1239
- --bf-ui-chip-padding-inline: calc(var(--bf-body-line-height, 1.25rem) * 0.4);
1240
- --bf-ui-chip-padding-block: max(0rem, calc((var(--bf-control-inline-padding-action) * 0.25) - var(--bf-border-width)));
1241
- --bf-ui-chip-block-size: calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-ui-chip-padding-block) * 2) + (var(--bf-border-width) * 2));
1320
+ --bf-leading-icon-size: var(--bf-leading-mark-size);
1321
+ --bf-leading-icon-gap: var(--bf-leading-mark-gap);
1322
+ --bf-leading-icon-offset: var(--bf-single-line-row-visual-offset);
1323
+ --bf-ui-chip-padding-inline: var(--bf-component-inline-inset-field);
1242
1324
  --bf-ui-badge-padding-inline: calc(var(--bf-body-line-height, 1.25rem) * 0.25);
1243
1325
  --bf-ui-badge-overhang: calc(var(--bf-ui-badge-padding-inline) * -0.75);
1244
1326
  --bf-grid-max-inline-size: var(--bf-content-max-width);
@@ -1301,6 +1383,7 @@ html.u-baseline-grid::after {
1301
1383
  --bf-color-focus: var(--vf-color-focus, #2e96ff);
1302
1384
 
1303
1385
  --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");
1386
+ --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");
1304
1387
  --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");
1305
1388
  --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");
1306
1389
  --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");
@@ -1325,11 +1408,9 @@ html.u-baseline-grid::after {
1325
1408
  }
1326
1409
 
1327
1410
  :where(.bf-theme.bf-tier-documentation) {
1328
- --bf-control-baseline-reserve: 0rem;
1329
1411
  --bf-input-block-padding: 0.0775rem;
1330
1412
  --bf-button-block-padding: 0.0775rem;
1331
- --bf-table-row-padding: 0.0775rem;
1332
- --bf-border-width: 1px;
1413
+ --bf-border-width: 0.0625rem;
1333
1414
  --bf-bar-thickness: 0.1875rem;
1334
1415
  --bf-radius: 0rem;
1335
1416
  --bf-control-block-padding: 0.5rem;
@@ -1348,11 +1429,9 @@ html.u-baseline-grid::after {
1348
1429
  }
1349
1430
 
1350
1431
  :where(.bf-theme.bf-tier-editorial) {
1351
- --bf-control-baseline-reserve: 0rem;
1352
1432
  --bf-input-block-padding: 0.41rem;
1353
1433
  --bf-button-block-padding: 0.41rem;
1354
- --bf-table-row-padding: 0.41rem;
1355
- --bf-border-width: 1px;
1434
+ --bf-border-width: 0.0625rem;
1356
1435
  --bf-bar-thickness: 0.1875rem;
1357
1436
  --bf-radius: 0rem;
1358
1437
  --bf-control-block-padding: 0.5rem;
@@ -1371,53 +1450,48 @@ html.u-baseline-grid::after {
1371
1450
  }
1372
1451
 
1373
1452
  :where(.bf-theme.bf-tier-app) {
1374
- --bf-control-baseline-reserve: 0rem;
1375
1453
  --bf-input-block-padding: 0.0775rem;
1376
1454
  --bf-button-block-padding: 0.0775rem;
1377
- --bf-table-row-padding: 0.0775rem;
1378
- --bf-border-width: 1px;
1455
+ --bf-border-width: 0.0625rem;
1379
1456
  --bf-bar-thickness: 0.1875rem;
1380
1457
  --bf-radius: 0.125rem;
1381
1458
  --bf-control-block-padding: 0.5rem;
1382
1459
  --bf-control-block-padding-compact: 0.375rem;
1383
1460
  --bf-control-box-size: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding) * 2));
1384
1461
  --bf-control-box-size-compact: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding-compact) * 2));
1385
- --bf-control-inline-padding: 0.5rem;
1386
- --bf-control-inline-padding-action: 0.5rem;
1462
+ --bf-control-inline-padding: 1rem;
1463
+ --bf-control-inline-padding-action: 1rem;
1387
1464
  --bf-control-inline-padding-field: 0.25rem;
1388
1465
  --bf-control-visual-size: 1rem;
1389
1466
  --bf-field-gap: 0.5rem;
1390
- --bf-panel-padding-inline: 1.5rem;
1391
- --bf-panel-padding-block: 1.5rem;
1467
+ --bf-panel-padding-inline: 0.75rem;
1468
+ --bf-panel-padding-block: 0.75rem;
1392
1469
  --bf-accordion-indent: 1.5rem;
1393
1470
 
1394
1471
  }
1395
1472
 
1396
1473
  :where(.bf-theme.bf-tier-os) {
1397
- --bf-control-baseline-reserve: 0rem;
1398
1474
  --bf-input-block-padding: 0.245rem;
1399
1475
  --bf-button-block-padding: 0.245rem;
1400
- --bf-table-row-padding: 0.245rem;
1401
- --bf-border-width: 1px;
1476
+ --bf-border-width: 0.0625rem;
1402
1477
  --bf-bar-thickness: 0.1875rem;
1403
1478
  --bf-radius: 0rem;
1404
1479
  --bf-control-block-padding: 0.375rem;
1405
1480
  --bf-control-block-padding-compact: 0.25rem;
1406
1481
  --bf-control-box-size: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding) * 2));
1407
1482
  --bf-control-box-size-compact: calc(var(--bf-body-line-height) + (var(--bf-control-block-padding-compact) * 2));
1408
- --bf-control-inline-padding: 0.5rem;
1409
- --bf-control-inline-padding-action: 0.5rem;
1483
+ --bf-control-inline-padding: 1rem;
1484
+ --bf-control-inline-padding-action: 1rem;
1410
1485
  --bf-control-inline-padding-field: 0.25rem;
1411
1486
  --bf-control-visual-size: 0.75rem;
1412
1487
  --bf-field-gap: 0.25rem;
1413
- --bf-panel-padding-inline: 1rem;
1414
- --bf-panel-padding-block: 1rem;
1488
+ --bf-panel-padding-inline: 0.5rem;
1489
+ --bf-panel-padding-block: 0.5rem;
1415
1490
  --bf-accordion-indent: 0.75rem;
1416
1491
 
1417
1492
  }
1418
1493
 
1419
1494
 
1420
- :where(.bf-theme.is-dark),
1421
1495
  :where(.bf-theme.is-dark) {
1422
1496
  --bf-color-text-default: var(--vf-color-text-default, var(--bf-color-text, #ffffff));
1423
1497
  --bf-color-text-muted: var(--vf-color-text-muted, var(--bf-color-muted, rgba(255, 255, 255, 0.6)));
@@ -1467,6 +1541,7 @@ html.u-baseline-grid::after {
1467
1541
  --bf-color-focus: var(--vf-color-focus, #99ccff);
1468
1542
 
1469
1543
  --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");
1544
+ --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");
1470
1545
  --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");
1471
1546
  --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");
1472
1547
  --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");
@@ -1560,6 +1635,10 @@ html.u-baseline-grid::after {
1560
1635
  grid-template-columns: minmax(0, 1fr);
1561
1636
  }
1562
1637
 
1638
+ :where(.bf-theme) :where(.bf-field.is-range.is-stacked) > :where(.bf-control, .bf-form-help) {
1639
+ grid-column: 1;
1640
+ }
1641
+
1563
1642
  :where(.bf-theme) :where(.bf-field.is-range.is-stacked) > :where(.bf-control) {
1564
1643
  min-inline-size: 0;
1565
1644
  }
@@ -1577,7 +1656,7 @@ html.u-baseline-grid::after {
1577
1656
  margin: 0;
1578
1657
  min-inline-size: 0;
1579
1658
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
1580
- padding-inline: var(--bf-panel-padding-inline);
1659
+ padding-inline: var(--bf-component-inline-inset-continuation);
1581
1660
  padding-block-start: var(--bf-panel-padding-block);
1582
1661
  }
1583
1662
 
@@ -1604,7 +1683,7 @@ html.u-baseline-grid::after {
1604
1683
  min-inline-size: 0;
1605
1684
  margin-bottom: calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-input-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
1606
1685
  padding-block: max(0rem, calc(var(--bf-input-block-padding) - var(--bf-border-width)));
1607
- padding-inline: var(--bf-control-inline-padding-field);
1686
+ padding-inline: var(--bf-component-inline-inset-field);
1608
1687
  }
1609
1688
 
1610
1689
  :where(.bf-theme) :where(input[type='color'].bf-color-input) {
@@ -1623,8 +1702,8 @@ html.u-baseline-grid::after {
1623
1702
 
1624
1703
  :where(.bf-theme) :where(.bf-input, input[type='text'], input[type='number'], input[type='search'], input[type='password'], input[type='email'], input[type='url'], textarea, select):focus-visible {
1625
1704
  background-color: var(--bf-color-background-active);
1626
- outline: 2px solid var(--bf-color-focus);
1627
- outline-offset: 2px;
1705
+ outline: 0.125rem solid var(--bf-color-focus);
1706
+ outline-offset: 0.125rem;
1628
1707
  }
1629
1708
 
1630
1709
  :where(.bf-theme) :where(.bf-input, input[type='text'], input[type='number'], input[type='search'], input[type='password'], input[type='email'], input[type='url'], textarea, select):disabled {
@@ -1677,7 +1756,7 @@ html.u-baseline-grid::after {
1677
1756
  margin-inline-end: var(--bf-field-gap);
1678
1757
  min-block-size: var(--bf-control-box-size-compact);
1679
1758
  padding-block: max(0rem, calc(var(--bf-control-block-padding-compact) - var(--bf-border-width)));
1680
- padding-inline: var(--bf-control-inline-padding-action);
1759
+ padding-inline: var(--bf-control-inline-padding-action-bordered);
1681
1760
  }
1682
1761
 
1683
1762
  :where(.bf-theme) :where(input[type='file'])::file-selector-button:hover {
@@ -1686,16 +1765,31 @@ html.u-baseline-grid::after {
1686
1765
 
1687
1766
  :where(.bf-theme) :where(select) {
1688
1767
  background-image: var(--bf-ui-icon-chevron-down);
1689
- background-position: right var(--bf-control-inline-padding-field) center;
1768
+ background-position: right var(--bf-component-inline-inset-field) center;
1690
1769
  background-repeat: no-repeat;
1691
1770
  background-size: 1rem 1rem;
1692
- padding-inline-end: calc(var(--bf-control-inline-padding-field) * 2.5);
1771
+ overflow: hidden;
1772
+ padding-inline-end: calc(var(--bf-component-inline-inset-field) * 2.5);
1773
+ text-overflow: ellipsis;
1774
+ white-space: nowrap;
1693
1775
  }
1694
1776
 
1695
1777
  :where(.bf-theme) :where(input[type='number'], .bf-slider-input) {
1696
1778
  font-variant-numeric: tabular-nums;
1697
1779
  }
1698
1780
 
1781
+ /* Number fields retain their native input semantics and keyboard stepping,
1782
+ while one field-owned background paints the compact pair. Sharing select's
1783
+ 1rem canvas and end position avoids a second browser-reserved spin slot. */
1784
+ :where(.bf-theme) :where(input[type='number']) {
1785
+ appearance: textfield;
1786
+ background-image: var(--bf-ui-icon-number-stepper);
1787
+ background-position: right var(--bf-component-inline-inset-field) center;
1788
+ background-repeat: no-repeat;
1789
+ background-size: 1rem 1rem;
1790
+ padding-inline-end: calc(var(--bf-component-inline-inset-field) * 2.5);
1791
+ }
1792
+
1699
1793
  :where(.bf-theme) :where(.bf-slider-input) {
1700
1794
  flex: 0 1 5rem;
1701
1795
  inline-size: min(100%, 5rem);
@@ -1707,12 +1801,14 @@ html.u-baseline-grid::after {
1707
1801
 
1708
1802
  :where(.bf-theme) :where(input[type='number'])::-webkit-inner-spin-button,
1709
1803
  :where(.bf-theme) :where(input[type='number'])::-webkit-outer-spin-button {
1804
+ appearance: none;
1710
1805
  margin: 0;
1711
1806
  }
1712
1807
 
1713
1808
  :where(.bf-theme) :where(.bf-checkbox, .bf-radio) {
1809
+ display: grid;
1714
1810
  margin: 0;
1715
- min-block-size: var(--bf-tick-row-block-size);
1811
+ padding-inline-start: var(--bf-leading-mark-group-inset);
1716
1812
  position: relative;
1717
1813
  }
1718
1814
 
@@ -1733,12 +1829,11 @@ html.u-baseline-grid::after {
1733
1829
  font-weight: var(--bf-body-font-weight, 400);
1734
1830
  line-height: var(--bf-body-line-height, 1.25rem);
1735
1831
  color: var(--bf-color-text-default);
1832
+ border-block: var(--bf-border-width) solid transparent;
1736
1833
  cursor: pointer;
1737
1834
  display: block;
1738
- margin-bottom: 0;
1739
- min-block-size: var(--bf-tick-row-block-size);
1740
- padding-block-end: var(--bf-body-nudge-end);
1741
- padding-block-start: var(--bf-body-nudge-start, 0.0775rem);
1835
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
1836
+ padding-block: var(--bf-single-line-row-padding-block);
1742
1837
  padding-inline-start: var(--bf-tick-label-offset);
1743
1838
  position: relative;
1744
1839
  }
@@ -1769,7 +1864,7 @@ html.u-baseline-grid::after {
1769
1864
  border-left: calc(var(--bf-border-width) * 2) solid var(--bf-color-background-default);
1770
1865
  inline-size: calc(var(--bf-control-visual-size) * 0.6);
1771
1866
  inset-inline-start: calc(var(--bf-control-visual-size) * 0.2);
1772
- inset-block-start: calc(var(--bf-tick-box-offset) + (var(--bf-control-visual-size) * 0.18));
1867
+ inset-block-start: calc(var(--bf-tick-box-offset) + (var(--bf-control-visual-size) * 0.18) + (var(--bf-border-width) * 2));
1773
1868
  opacity: 0;
1774
1869
  transform: rotate(-45deg);
1775
1870
  }
@@ -1807,20 +1902,19 @@ html.u-baseline-grid::after {
1807
1902
  }
1808
1903
 
1809
1904
  :where(.bf-theme) :where(.bf-checkbox-input:focus-visible + .bf-checkbox-label)::before {
1810
- outline: 2px solid var(--bf-color-focus);
1811
- outline-offset: 2px;
1905
+ outline: 0.125rem solid var(--bf-color-focus);
1906
+ outline-offset: 0.125rem;
1812
1907
  }
1813
1908
 
1814
1909
  :where(.bf-theme) :where(.bf-radio-input:focus-visible + .bf-radio-label)::before {
1815
- outline: 2px solid var(--bf-color-focus);
1816
- outline-offset: 2px;
1910
+ outline: 0.125rem solid var(--bf-color-focus);
1911
+ outline-offset: 0.125rem;
1817
1912
  }
1818
1913
 
1819
1914
  :where(.bf-theme) :where(.bf-switch) {
1820
1915
  align-items: flex-start;
1821
1916
  display: inline-flex;
1822
1917
  gap: var(--bf-field-gap);
1823
- min-block-size: var(--bf-switch-row-block-size);
1824
1918
  position: relative;
1825
1919
  }
1826
1920
 
@@ -1869,8 +1963,8 @@ html.u-baseline-grid::after {
1869
1963
  }
1870
1964
 
1871
1965
  :where(.bf-theme) :where(.bf-switch-input:focus-visible + .bf-switch-slider) {
1872
- outline: 2px solid var(--bf-color-focus);
1873
- outline-offset: 2px;
1966
+ outline: 0.125rem solid var(--bf-color-focus);
1967
+ outline-offset: 0.125rem;
1874
1968
  }
1875
1969
 
1876
1970
  :where(.bf-theme) :where(.bf-switch-input:disabled + .bf-switch-slider) {
@@ -1884,11 +1978,11 @@ html.u-baseline-grid::after {
1884
1978
  font-weight: var(--bf-body-font-weight, 400);
1885
1979
  line-height: var(--bf-body-line-height, 1.25rem);
1886
1980
  color: var(--bf-color-text-default);
1981
+ border-block: var(--bf-border-width) solid transparent;
1887
1982
  cursor: pointer;
1888
1983
  display: inline-block;
1889
- margin: 0 0 var(--bf-body-margin-bottom);
1890
- padding-block-end: 0;
1891
- padding-block-start: var(--bf-body-nudge-start, 0.0775rem);
1984
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
1985
+ padding-block: var(--bf-single-line-row-padding-block);
1892
1986
  }
1893
1987
 
1894
1988
  :where(.bf-theme) :where(.bf-validation-message) {
@@ -1897,11 +1991,12 @@ html.u-baseline-grid::after {
1897
1991
  font-style: var(--bf-body-font-style, normal);
1898
1992
  font-weight: var(--bf-body-font-weight, 400);
1899
1993
  line-height: var(--bf-body-line-height, 1.25rem);
1994
+ border-block: var(--bf-border-width) solid transparent;
1900
1995
  color: var(--bf-color-text-muted);
1901
- margin: 0 0 var(--bf-body-margin-bottom);
1902
- padding-block-end: 0;
1903
- padding-block-start: var(--bf-body-nudge-start, 0.0775rem);
1904
- padding-inline-start: calc(var(--bf-control-visual-size) + var(--bf-field-gap));
1996
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
1997
+ margin-inline-start: var(--bf-leading-mark-group-inset);
1998
+ padding-block: var(--bf-single-line-row-padding-block);
1999
+ padding-inline-start: var(--bf-leading-mark-offset);
1905
2000
  position: relative;
1906
2001
  }
1907
2002
 
@@ -2036,7 +2131,7 @@ html.u-baseline-grid::after {
2036
2131
  border: var(--bf-border-width) solid var(--bf-color-border-high-contrast);
2037
2132
  block-size: var(--bf-control-visual-size);
2038
2133
  border-radius: 50%;
2039
- box-shadow: 0 0 calc(var(--bf-control-visual-size) * 0.25) 1px rgba(0, 0, 0, 0.2);
2134
+ box-shadow: 0 0 calc(var(--bf-control-visual-size) * 0.25) 0.0625rem rgba(0, 0, 0, 0.2);
2040
2135
  inline-size: var(--bf-control-visual-size);
2041
2136
  margin-top: calc((var(--bf-slider-track-size) - var(--bf-control-visual-size)) / 2);
2042
2137
  }
@@ -2062,7 +2157,7 @@ html.u-baseline-grid::after {
2062
2157
  border: var(--bf-border-width) solid var(--bf-color-border-high-contrast);
2063
2158
  block-size: var(--bf-control-visual-size);
2064
2159
  border-radius: 50%;
2065
- box-shadow: 0 0 calc(var(--bf-control-visual-size) * 0.25) 1px rgba(0, 0, 0, 0.2);
2160
+ box-shadow: 0 0 calc(var(--bf-control-visual-size) * 0.25) 0.0625rem rgba(0, 0, 0, 0.2);
2066
2161
  inline-size: var(--bf-control-visual-size);
2067
2162
  }
2068
2163
 
@@ -2161,9 +2256,9 @@ html.u-baseline-grid::after {
2161
2256
  color: var(--bf-color-text-default);
2162
2257
  cursor: pointer;
2163
2258
  display: inline-block;
2164
- margin-bottom: calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-button-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
2165
- padding-block: max(0rem, calc(var(--bf-button-block-padding) - var(--bf-border-width)));
2166
- padding-inline: var(--bf-control-inline-padding-action);
2259
+ margin-bottom: var(--bf-single-line-row-margin-block-end);
2260
+ padding-block: var(--bf-single-line-row-padding-block);
2261
+ padding-inline: var(--bf-control-inline-padding-action-bordered);
2167
2262
  text-align: center;
2168
2263
  text-decoration: none;
2169
2264
  }
@@ -2181,6 +2276,13 @@ html.u-baseline-grid::after {
2181
2276
  background-color: var(--bf-color-background-hover);
2182
2277
  }
2183
2278
 
2279
+ /* Anchor buttons are controls, not prose links. Qualifying the element and
2280
+ * its interaction states prevents the generic anchor underline from leaking
2281
+ * through while leaving the explicit is-link variant unchanged. */
2282
+ :where(.bf-theme) :where(a.bf-button:not(.is-link):is(:hover, :active)) {
2283
+ text-decoration: none;
2284
+ }
2285
+
2184
2286
  :where(.bf-theme) :where(.bf-button:not(.is-base):is(:active, [aria-pressed='true'])) {
2185
2287
  background-color: var(--bf-color-background-active);
2186
2288
  }
@@ -2190,8 +2292,8 @@ html.u-baseline-grid::after {
2190
2292
  }
2191
2293
 
2192
2294
  :where(.bf-theme) :where(.bf-button, .bf-button.is-base):focus-visible {
2193
- outline: 2px solid var(--bf-color-focus);
2194
- outline-offset: 2px;
2295
+ outline: 0.125rem solid var(--bf-color-focus);
2296
+ outline-offset: 0.125rem;
2195
2297
  }
2196
2298
 
2197
2299
  /* ------------------------------------------------------------------ */
@@ -2263,7 +2365,7 @@ html.u-baseline-grid::after {
2263
2365
  background-color: transparent;
2264
2366
  color: var(--bf-color-link-default);
2265
2367
  text-decoration: underline;
2266
- text-decoration-thickness: 1px;
2368
+ text-decoration-thickness: 0.0625rem;
2267
2369
  text-underline-offset: 0.075em;
2268
2370
  }
2269
2371
 
@@ -2290,6 +2392,19 @@ html.u-baseline-grid::after {
2290
2392
  justify-content: center;
2291
2393
  }
2292
2394
 
2395
+ /* An icon-only flex button has no text line box to preserve the occupied
2396
+ * control rhythm. A zero-width metric strut restores the active body line
2397
+ * without imposing a target block size or changing icon/label spacing. */
2398
+ :where(.bf-theme) :where(.bf-button.is-icon:not(:has(.bf-button-label))) {
2399
+ column-gap: 0;
2400
+ }
2401
+
2402
+ :where(.bf-theme) :where(.bf-button.is-icon:not(:has(.bf-button-label)))::before {
2403
+ block-size: var(--bf-body-line-height);
2404
+ content: "";
2405
+ inline-size: 0;
2406
+ }
2407
+
2293
2408
  :where(.bf-theme) :where(.bf-button-label) {
2294
2409
  min-inline-size: 0;
2295
2410
  }
@@ -2450,7 +2565,7 @@ html.u-baseline-grid::after {
2450
2565
  border-inline-start: var(--bf-bar-thickness) solid var(--bf-notice-border);
2451
2566
  color: var(--bf-color-text-default);
2452
2567
  display: flow-root;
2453
- margin-block: 0 var(--bf-section-space-shallow);
2568
+ margin: 0;
2454
2569
  max-inline-size: 100%;
2455
2570
  padding-block: var(--bf-space-2);
2456
2571
  padding-inline: var(--bf-space-2);
@@ -2496,16 +2611,15 @@ html.u-baseline-grid::after {
2496
2611
  /* ------------------------------------------------------------------ */
2497
2612
  /* Static content ports — Vanilla data spotlight and divided section. */
2498
2613
  /* Their children retain role-owned rhythm; these layout */
2499
- /* wrappers add only structural columns, rules, and explicit section ends. */
2614
+ /* wrappers add only structural columns, rules, and internal gaps. */
2500
2615
  /* ------------------------------------------------------------------ */
2501
2616
 
2502
2617
  /* Data spotlight: Vanilla's equal-height wrap becomes an intrinsic grid.
2503
2618
  Each item begins with a public highlighted rule using the shared emphasis
2504
- thickness. Item padding remains item-owned, so compositions never erase the
2505
- shallow inter-row rhythm when the pattern narrows. */
2619
+ thickness. The items container owns every inter-row gap. */
2506
2620
  :where(.bf-theme) :where(.bf-data-spotlight) {
2507
2621
  container-type: inline-size;
2508
- margin-block-end: var(--bf-section-space);
2622
+ margin: 0;
2509
2623
  min-inline-size: 0;
2510
2624
  }
2511
2625
 
@@ -2518,15 +2632,13 @@ html.u-baseline-grid::after {
2518
2632
  display: grid;
2519
2633
  grid-template-columns: minmax(0, 1fr);
2520
2634
  min-inline-size: 0;
2635
+ row-gap: var(--bf-section-space-shallow);
2521
2636
  }
2522
2637
 
2523
2638
  :where(.bf-theme) :where(.bf-data-spotlight-item) {
2524
2639
  min-inline-size: 0;
2525
2640
  overflow-wrap: anywhere;
2526
- }
2527
-
2528
- :where(.bf-theme) :where(.bf-data-spotlight-item:not(:last-child)) {
2529
- padding-block-end: var(--bf-section-space-shallow);
2641
+ padding: 0;
2530
2642
  }
2531
2643
 
2532
2644
  :where(.bf-theme) :where(.bf-data-spotlight-stat) {
@@ -2579,6 +2691,14 @@ html.u-baseline-grid::after {
2579
2691
  @container (width >= 38.75rem) {
2580
2692
  :where(.bf-theme) :where(.bf-data-spotlight-items) {
2581
2693
  grid-template-columns: repeat(2, minmax(0, 1fr));
2694
+ row-gap: var(--bf-space-1);
2695
+ }
2696
+
2697
+ :where(.bf-theme) :where(.bf-data-spotlight-items)::after {
2698
+ block-size: calc(var(--bf-section-space-shallow) - (var(--bf-space-1) * 2));
2699
+ content: "";
2700
+ grid-column: 1 / -1;
2701
+ grid-row: 6;
2582
2702
  }
2583
2703
 
2584
2704
  :where(.bf-theme) :where(.bf-data-spotlight-header, .bf-data-spotlight-item) {
@@ -2587,10 +2707,6 @@ html.u-baseline-grid::after {
2587
2707
  grid-template-rows: subgrid;
2588
2708
  }
2589
2709
 
2590
- :where(.bf-theme) :where(.bf-data-spotlight-item) {
2591
- padding-block-end: 0;
2592
- }
2593
-
2594
2710
  :where(.bf-theme) :where(.bf-data-spotlight.is-three-blocks) :where(.bf-data-spotlight-header) {
2595
2711
  block-size: 0;
2596
2712
  overflow: visible;
@@ -2598,7 +2714,13 @@ html.u-baseline-grid::after {
2598
2714
 
2599
2715
  :where(.bf-theme) :where(.bf-data-spotlight.is-three-blocks) :where(.bf-data-spotlight-item:first-of-type),
2600
2716
  :where(.bf-theme) :where(.bf-data-spotlight.is-four-blocks) :where(.bf-data-spotlight-item:nth-child(-n + 2)) {
2601
- padding-block-end: var(--bf-section-space-shallow);
2717
+ grid-row: span 5;
2718
+ }
2719
+
2720
+ :where(.bf-theme) :where(.bf-data-spotlight.is-two-blocks) :where(.bf-data-spotlight-item:nth-of-type(2)),
2721
+ :where(.bf-theme) :where(.bf-data-spotlight.is-three-blocks) :where(.bf-data-spotlight-item:nth-of-type(n + 2)),
2722
+ :where(.bf-theme) :where(.bf-data-spotlight.is-four-blocks) :where(.bf-data-spotlight-item:nth-of-type(n + 3)) {
2723
+ grid-row: 7 / span 5;
2602
2724
  }
2603
2725
  }
2604
2726
 
@@ -2611,15 +2733,18 @@ html.u-baseline-grid::after {
2611
2733
  grid-template-columns: repeat(4, minmax(0, 1fr));
2612
2734
  }
2613
2735
 
2736
+ :where(.bf-theme) :where(.bf-data-spotlight-items)::after {
2737
+ content: none;
2738
+ }
2739
+
2614
2740
  :where(.bf-theme) :where(.bf-data-spotlight.is-two-blocks) :where(.bf-data-spotlight-header) {
2615
2741
  block-size: 0;
2616
2742
  grid-column: span 2;
2617
2743
  overflow: visible;
2618
2744
  }
2619
2745
 
2620
- :where(.bf-theme) :where(.bf-data-spotlight.is-three-blocks) :where(.bf-data-spotlight-item:first-of-type),
2621
- :where(.bf-theme) :where(.bf-data-spotlight.is-four-blocks) :where(.bf-data-spotlight-item:nth-child(-n + 2)) {
2622
- padding-block-end: 0;
2746
+ :where(.bf-theme) :where(.bf-data-spotlight-item) {
2747
+ grid-row: span 5;
2623
2748
  }
2624
2749
  }
2625
2750
 
@@ -2628,7 +2753,7 @@ html.u-baseline-grid::after {
2628
2753
  headings, copy, and content items keep their own metric-derived rhythm. */
2629
2754
  :where(.bf-theme) :where(.bf-divided-section) {
2630
2755
  container-type: inline-size;
2631
- margin-block-end: var(--bf-section-space);
2756
+ margin: 0;
2632
2757
  min-inline-size: 0;
2633
2758
  }
2634
2759
 
@@ -2647,37 +2772,41 @@ html.u-baseline-grid::after {
2647
2772
  }
2648
2773
 
2649
2774
  :where(.bf-theme) :where(.bf-divided-section-list) {
2650
- align-content: start;
2651
- display: grid;
2775
+ --bf-divided-section-rule-to-content: calc(0.5rem - var(--bf-border-width));
2776
+ --bf-stack-space: 1.5rem;
2652
2777
  list-style: none;
2653
2778
  margin: 0;
2654
2779
  padding: 0;
2655
2780
  }
2656
2781
 
2782
+ /* Preserve the pre-0.1.5 list markup; canonical composition also carries
2783
+ bf-stack so the container remains the explicit owner of item spacing. */
2784
+ :where(.bf-theme) :where(.bf-divided-section-list:not(.bf-stack)) {
2785
+ align-content: start;
2786
+ display: grid;
2787
+ gap: var(--bf-stack-space);
2788
+ }
2789
+
2657
2790
  :where(.bf-theme) :where(.bf-divided-section-item) {
2658
2791
  align-content: start;
2659
2792
  display: grid;
2793
+ margin: 0;
2660
2794
  min-inline-size: 0;
2661
2795
  overflow-wrap: anywhere;
2796
+ padding: 0;
2797
+ position: relative;
2662
2798
  }
2663
2799
 
2664
- :where(.bf-theme) :where(.bf-divided-section-item:not(:last-child)) {
2665
- padding-block-end: var(--bf-section-space-shallow);
2666
- }
2667
-
2668
- :where(.bf-theme) :where(.bf-divided-section-item + .bf-divided-section-item) {
2669
- border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
2670
- padding-block-start: calc(var(--bf-section-space-shallow) - var(--bf-border-width));
2671
- }
2672
-
2673
- @container (width >= 38.75rem) {
2674
- :where(.bf-theme) :where(.bf-divided-section.is-split-medium) :where(.bf-divided-section-layout) {
2675
- column-gap: var(--bf-grid-gap-inline);
2676
- grid-template-columns: repeat(2, minmax(0, 1fr));
2677
- }
2800
+ :where(.bf-theme) :where(.bf-divided-section-item + .bf-divided-section-item)::before {
2801
+ background: var(--bf-color-border-low-contrast);
2802
+ block-size: var(--bf-border-width);
2803
+ content: "";
2804
+ inset-block-start: calc((var(--bf-divided-section-rule-to-content) + var(--bf-border-width)) * -1);
2805
+ inset-inline: 0;
2806
+ position: absolute;
2678
2807
  }
2679
2808
 
2680
- @container (width >= 64.75rem) {
2809
+ @container (width >= 45rem) {
2681
2810
  :where(.bf-theme) :where(.bf-divided-section) :where(.bf-divided-section-layout) {
2682
2811
  column-gap: var(--bf-grid-gap-inline);
2683
2812
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -2762,12 +2891,13 @@ html.u-baseline-grid::after {
2762
2891
  border: var(--bf-border-width) solid var(--bf-color-border-default);
2763
2892
  border-inline-start: var(--bf-bar-thickness) solid var(--bf-notification-accent);
2764
2893
  color: var(--bf-color-text-default);
2765
- margin-block: 0 var(--bf-space-3);
2894
+ margin-block: 0;
2766
2895
  max-inline-size: 100%;
2767
2896
  min-inline-size: 0;
2768
2897
  overflow-wrap: anywhere;
2769
- padding-block: calc(var(--bf-space-1) - var(--bf-border-width));
2770
- padding-inline: calc((var(--bf-space-2) * 2) + var(--bf-icon-size-default)) 0;
2898
+ padding-block-end: max(0rem, calc(var(--bf-space-half) - var(--bf-border-width)));
2899
+ padding-block-start: 0;
2900
+ padding-inline: calc(var(--bf-icon-label-inline-offset) - var(--bf-bar-thickness)) var(--bf-space-1);
2771
2901
  position: relative;
2772
2902
  }
2773
2903
 
@@ -2790,14 +2920,14 @@ html.u-baseline-grid::after {
2790
2920
  :where(.bf-theme) :where(.bf-notification.is-borderless) {
2791
2921
  border: 0;
2792
2922
  padding-block: 0;
2793
- padding-inline: calc(var(--bf-space-2) * 2) 0;
2923
+ padding-inline: calc(var(--bf-icon-size-default) + var(--bf-space-1)) 0;
2794
2924
  }
2795
2925
 
2796
2926
  :where(.bf-theme) :where(.bf-notification-icon) {
2797
2927
  background-color: var(--bf-notification-accent);
2798
2928
  background-image: none;
2799
- inset-block-start: calc(var(--bf-space-1) + ((var(--bf-body-line-height) - var(--bf-icon-size-default)) / 2) + var(--bf-body-nudge-start));
2800
- inset-inline-start: var(--bf-space-2);
2929
+ inset-block-start: calc(((var(--bf-h6-line-height) - var(--bf-icon-size-default)) / 2) + var(--bf-h6-nudge-start) - var(--bf-border-width));
2930
+ inset-inline-start: calc(var(--bf-icon-label-inline-offset) - var(--bf-bar-thickness) - var(--bf-icon-size-default) - var(--bf-space-1));
2801
2931
  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");
2802
2932
  mask-position: center;
2803
2933
  mask-repeat: no-repeat;
@@ -2818,22 +2948,52 @@ html.u-baseline-grid::after {
2818
2948
  }
2819
2949
 
2820
2950
  :where(.bf-theme) :where(.bf-notification.is-borderless > .bf-notification-icon) {
2821
- inset-block-start: calc(((var(--bf-body-line-height) - var(--bf-icon-size-default)) / 2) + var(--bf-body-nudge-start));
2951
+ inset-block-start: calc(((var(--bf-h6-line-height) - var(--bf-icon-size-default)) / 2) + var(--bf-h6-nudge-start));
2822
2952
  inset-inline-start: 0;
2823
2953
  }
2824
2954
 
2955
+ :where(.bf-theme) :where(.bf-notification.is-inline > .bf-notification-icon) {
2956
+ inset-block-start: calc(((var(--bf-body-line-height) - var(--bf-icon-size-default)) / 2) + var(--bf-body-nudge-start) - var(--bf-border-width));
2957
+ }
2958
+
2825
2959
  :where(.bf-theme) :where(.bf-notification-content, .bf-notification-meta) {
2826
2960
  max-inline-size: 100%;
2827
2961
  min-inline-size: 0;
2828
2962
  }
2829
2963
 
2830
2964
  :where(.bf-theme) :where(.bf-notification-content) {
2831
- margin-block-end: calc(var(--bf-space-2) - var(--bf-body-nudge-start));
2832
- padding-block-start: var(--bf-body-nudge-start);
2833
- padding-inline-end: var(--bf-space-4);
2965
+ /* Neutralise the shell's top border so the first metric role starts on-grid. */
2966
+ margin-block: calc(var(--bf-border-width) * -1) 0;
2967
+ padding-block-start: 0;
2968
+ padding-inline-end: calc(var(--bf-icon-size-default) + var(--bf-space-1));
2969
+ }
2970
+
2971
+ :where(.bf-theme) :where(.bf-notification.is-borderless .bf-notification-content) {
2972
+ --bf-stack-space: 0rem;
2973
+ margin-block-start: 0;
2974
+ }
2975
+
2976
+ /* Metadata-bearing notifications use a full baseline between title and copy,
2977
+ and pair it with the full end inset. This keeps both the metadata boundary
2978
+ and the complete shell on-grid; simpler messages retain compact rhythm. */
2979
+ :where(.bf-theme) :where(.bf-notification:has(> .bf-notification-meta)) {
2980
+ padding-block-end: calc(var(--bf-space-1) - var(--bf-border-width));
2981
+ }
2982
+
2983
+ :where(.bf-theme) :where(.bf-notification.is-inline) {
2984
+ padding-block-end: calc(var(--bf-space-1) - var(--bf-border-width));
2985
+ }
2986
+
2987
+ /* Return the cancelled H6/body metric edges to the shell boundary. The
2988
+ * Documentation tier deliberately gives those roles different metrics, so
2989
+ * deriving this inset keeps every bordered notification on-grid without
2990
+ * reopening the visible title/copy gap. Keep this after the shell variants so
2991
+ * the metric relationship owns their final compensation. */
2992
+ :where(.bf-theme) :where(.bf-notification:has(> .bf-notification-content.is-metric-flush):not(.is-borderless)) {
2993
+ padding-block-end: calc(var(--bf-space-1) - var(--bf-border-width) + var(--bf-baseline) - var(--bf-h6-nudge-start) - var(--bf-body-margin-bottom));
2834
2994
  }
2835
2995
 
2836
- :where(.bf-theme) :where(.bf-notification-title, .bf-notification-message, .bf-notification-timestamp) {
2996
+ :where(.bf-theme) :where(.bf-notification-message, .bf-notification-timestamp) {
2837
2997
  font-family: var(--bf-body-font-family);
2838
2998
  font-size: var(--bf-body-font-size);
2839
2999
  font-style: var(--bf-body-font-style);
@@ -2841,20 +3001,11 @@ html.u-baseline-grid::after {
2841
3001
  max-inline-size: 100%;
2842
3002
  }
2843
3003
 
2844
- :where(.bf-theme) :where(.bf-notification-title) {
2845
- font-weight: 600;
2846
- margin-block: 0;
2847
- padding-block: 0;
2848
- }
2849
-
2850
3004
  :where(.bf-theme) :where(.bf-notification-message) {
2851
3005
  font-weight: var(--bf-body-font-weight);
2852
- margin-block: 0;
2853
- padding-block: 0;
2854
- }
2855
-
2856
- :where(.bf-theme) :where(.bf-notification.is-inline .bf-notification-title, .bf-notification.is-inline .bf-notification-message) {
2857
- display: inline;
3006
+ margin-block: 0 var(--bf-body-margin-bottom);
3007
+ padding-block-end: 0;
3008
+ padding-block-start: var(--bf-body-nudge-start);
2858
3009
  }
2859
3010
 
2860
3011
  :where(.bf-theme) :where(.bf-notification-close) {
@@ -2864,8 +3015,8 @@ html.u-baseline-grid::after {
2864
3015
  margin-block-end: 0;
2865
3016
  padding: 0;
2866
3017
  position: absolute;
2867
- inset-block-start: var(--bf-space-1);
2868
- inset-inline-end: var(--bf-space-1);
3018
+ inset-block-start: 0;
3019
+ inset-inline-end: 0;
2869
3020
  }
2870
3021
 
2871
3022
  :where(.bf-theme) :where(.bf-notification.is-borderless .bf-notification-close) {
@@ -2880,7 +3031,7 @@ html.u-baseline-grid::after {
2880
3031
  flex-wrap: wrap;
2881
3032
  gap: var(--bf-space-1) var(--bf-space-2);
2882
3033
  justify-content: space-between;
2883
- margin-block-end: var(--bf-space-1);
3034
+ margin-block-end: 0;
2884
3035
  padding-block-start: calc(var(--bf-space-1) - var(--bf-border-width));
2885
3036
  padding-inline-end: var(--bf-space-2);
2886
3037
  }
@@ -2893,7 +3044,7 @@ html.u-baseline-grid::after {
2893
3044
  :where(.bf-theme) :where(.bf-notification-timestamp) {
2894
3045
  color: var(--bf-color-text-muted);
2895
3046
  font-weight: var(--bf-body-font-weight);
2896
- margin-block: 0 calc(var(--bf-space-2) - var(--bf-body-nudge-start));
3047
+ margin-block: 0 var(--bf-body-margin-bottom);
2897
3048
  padding-block: var(--bf-body-nudge-start) 0;
2898
3049
  }
2899
3050
 
@@ -2908,7 +3059,7 @@ html.u-baseline-grid::after {
2908
3059
 
2909
3060
  :where(.bf-theme) :where(.bf-notification-actions > .bf-button.is-link) {
2910
3061
  flex: 0 0 auto;
2911
- margin-block-end: calc(var(--bf-space-2) - var(--bf-body-nudge-start));
3062
+ margin-block-end: var(--bf-body-margin-bottom);
2912
3063
  padding-block: var(--bf-body-nudge-start) 0;
2913
3064
  }
2914
3065
 
@@ -2928,10 +3079,10 @@ html.u-baseline-grid::after {
2928
3079
  cursor: inherit;
2929
3080
  display: inline-block;
2930
3081
  font: inherit;
2931
- margin: -2px calc(var(--bf-space-half) * -1);
3082
+ margin: -0.125rem calc(var(--bf-space-half) * -1);
2932
3083
  max-inline-size: 100%;
2933
3084
  overflow: hidden;
2934
- padding: 2px var(--bf-space-half);
3085
+ padding: 0.125rem var(--bf-space-half);
2935
3086
  text-align: inherit;
2936
3087
  text-decoration: inherit;
2937
3088
  text-overflow: inherit;
@@ -2942,7 +3093,7 @@ html.u-baseline-grid::after {
2942
3093
  :where(.bf-theme) :where(.bf-table.is-sortable th[aria-sort]:hover, .bf-table-sort-button:focus-visible) {
2943
3094
  color: var(--bf-color-link-default);
2944
3095
  text-decoration: underline;
2945
- text-decoration-thickness: 1px;
3096
+ text-decoration-thickness: 0.0625rem;
2946
3097
  text-underline-offset: 0.075em;
2947
3098
  }
2948
3099
 
@@ -2951,11 +3102,11 @@ html.u-baseline-grid::after {
2951
3102
  }
2952
3103
 
2953
3104
  :where(.bf-theme) :where(.bf-table-sort-button:focus-visible) {
2954
- outline: 2px solid var(--bf-color-focus);
2955
- outline-offset: -2px;
3105
+ outline: 0.125rem solid var(--bf-color-focus);
3106
+ outline-offset: -0.125rem;
2956
3107
  }
2957
3108
 
2958
- :where(.bf-theme) :where(.bf-table.is-sortable th[aria-sort='ascending'], .bf-table.is-sortable th[aria-sort='descending'])::after {
3109
+ :where(.bf-theme) :where(.bf-table.is-sortable th[aria-sort])::after {
2959
3110
  background-image: var(--bf-ui-icon-chevron-down);
2960
3111
  background-position: center;
2961
3112
  background-repeat: no-repeat;
@@ -2965,9 +3116,14 @@ html.u-baseline-grid::after {
2965
3116
  display: inline-block;
2966
3117
  inline-size: var(--bf-icon-size-default);
2967
3118
  margin-inline-start: var(--bf-space-half);
3119
+ opacity: 0;
2968
3120
  vertical-align: calc((1cap - var(--bf-icon-size-default)) / 2);
2969
3121
  }
2970
3122
 
3123
+ :where(.bf-theme) :where(.bf-table.is-sortable th[aria-sort='ascending'], .bf-table.is-sortable th[aria-sort='descending'])::after {
3124
+ opacity: 1;
3125
+ }
3126
+
2971
3127
  :where(.bf-theme) :where(.bf-table.is-sortable th[aria-sort='ascending'])::after {
2972
3128
  transform: rotate(180deg);
2973
3129
  }
@@ -3004,9 +3160,9 @@ html.u-baseline-grid::after {
3004
3160
  }
3005
3161
 
3006
3162
  :where(.bf-theme) :where(.bf-table-mobile-card-frame > .bf-table.is-mobile-card > thead) {
3007
- block-size: 1px;
3163
+ block-size: 0.0625rem;
3008
3164
  clip-path: inset(50%);
3009
- inline-size: 1px;
3165
+ inline-size: 0.0625rem;
3010
3166
  overflow: hidden;
3011
3167
  position: absolute;
3012
3168
  white-space: nowrap;
@@ -3077,7 +3233,7 @@ html.u-baseline-grid::after {
3077
3233
  :where(.bf-theme) :where(.bf-logo-section) {
3078
3234
  container-name: bf-logo-section;
3079
3235
  container-type: inline-size;
3080
- margin-block-end: var(--bf-section-space-shallow);
3236
+ margin: 0;
3081
3237
  min-inline-size: 0;
3082
3238
  }
3083
3239
 
@@ -3111,8 +3267,8 @@ html.u-baseline-grid::after {
3111
3267
  }
3112
3268
 
3113
3269
  :where(.bf-theme) :where(.bf-logo-section-link:focus-visible) {
3114
- outline: 2px solid var(--bf-color-focus);
3115
- outline-offset: 2px;
3270
+ outline: 0.125rem solid var(--bf-color-focus);
3271
+ outline-offset: 0.125rem;
3116
3272
  }
3117
3273
 
3118
3274
  :where(.bf-theme) :where(.bf-logo-section-logo) {
@@ -3139,7 +3295,7 @@ html.u-baseline-grid::after {
3139
3295
  inline-size: 100%;
3140
3296
  }
3141
3297
 
3142
- /* Vanilla's small breakpoint is 620px. The items descendant, rather than the
3298
+ /* Vanilla's small breakpoint is 38.75rem. The items descendant, rather than the
3143
3299
  query container itself, responds when its allocated space reaches it. */
3144
3300
  @container bf-logo-section (width >= 38.75rem) {
3145
3301
  :where(.bf-theme) :where(.bf-logo-section-items) {
@@ -3163,19 +3319,21 @@ html.u-baseline-grid::after {
3163
3319
 
3164
3320
  /* ------------------------------------------------------------------ */
3165
3321
  /* Media object — semantic media/content slots with a container-owned */
3166
- /* structural collapse only. Content roles retain their own spacing. */
3322
+ /* structural collapse. Content roles retain their metric boxes. */
3167
3323
  /* ------------------------------------------------------------------ */
3168
3324
 
3169
3325
  :where(.bf-theme) :where(.bf-media-object) {
3170
- margin-block-end: var(--bf-section-space-shallow);
3326
+ container-name: bf-media-object;
3327
+ container-type: inline-size;
3328
+ margin: 0;
3171
3329
  min-inline-size: 0;
3172
3330
  }
3173
3331
 
3174
3332
  :where(.bf-theme) :where(.bf-media-object-layout) {
3175
- display: grid;
3176
3333
  align-items: start;
3177
- column-gap: var(--bf-space-2);
3178
- grid-template-columns: auto minmax(0, 1fr);
3334
+ column-gap: var(--bf-grid-gap-inline);
3335
+ display: grid;
3336
+ grid-template-columns: repeat(4, minmax(0, 1fr));
3179
3337
  min-inline-size: 0;
3180
3338
  }
3181
3339
 
@@ -3187,6 +3345,10 @@ html.u-baseline-grid::after {
3187
3345
  min-inline-size: 0;
3188
3346
  }
3189
3347
 
3348
+ :where(.bf-theme) :where(.bf-media-object-media) {
3349
+ grid-column: 1 / span 2;
3350
+ }
3351
+
3190
3352
  :where(.bf-theme) :where(.bf-media-object-media > :where(img, picture, svg, video)) {
3191
3353
  block-size: 100%;
3192
3354
  display: block;
@@ -3201,6 +3363,7 @@ html.u-baseline-grid::after {
3201
3363
  }
3202
3364
 
3203
3365
  :where(.bf-theme) :where(.bf-media-object-content) {
3366
+ grid-column: 3 / -1;
3204
3367
  min-inline-size: 0;
3205
3368
  overflow-wrap: anywhere;
3206
3369
  }
@@ -3240,8 +3403,12 @@ html.u-baseline-grid::after {
3240
3403
  }
3241
3404
 
3242
3405
  :where(.bf-theme) :where(.bf-media-object-meta-list) {
3406
+ --bf-stack-space: var(--bf-space-1);
3407
+ align-content: start;
3408
+ display: grid;
3409
+ gap: var(--bf-stack-space);
3243
3410
  list-style: none;
3244
- margin: var(--bf-space-1) 0 0;
3411
+ margin: 0;
3245
3412
  padding: 0;
3246
3413
  }
3247
3414
 
@@ -3254,22 +3421,22 @@ html.u-baseline-grid::after {
3254
3421
  overflow-wrap: anywhere;
3255
3422
  }
3256
3423
 
3257
- :where(.bf-theme) :where(.bf-media-object-meta + .bf-media-object-meta) {
3258
- margin-block-start: var(--bf-space-1);
3259
- }
3260
-
3261
3424
  :where(.bf-theme) :where(.bf-media-object-meta .bf-icon) {
3262
3425
  margin-block-start: var(--bf-body-nudge-start);
3263
3426
  }
3264
3427
 
3265
- :where(.bf-theme) :where(.bf-media-object.is-media-end) :where(.bf-media-object-content) {
3266
- grid-column: 1;
3267
- grid-row: 1;
3268
- }
3428
+ @container bf-media-object (width >= 38.75rem) {
3429
+ :where(.bf-theme) :where(.bf-media-object-layout) {
3430
+ grid-template-columns: repeat(8, minmax(0, 1fr));
3431
+ }
3269
3432
 
3270
- :where(.bf-theme) :where(.bf-media-object.is-media-end) :where(.bf-media-object-media) {
3271
- grid-column: 2;
3272
- grid-row: 1;
3433
+ :where(.bf-theme) :where(.bf-media-object-media) {
3434
+ grid-column: 1 / span 2;
3435
+ }
3436
+
3437
+ :where(.bf-theme) :where(.bf-media-object-content) {
3438
+ grid-column: 3 / -1;
3439
+ }
3273
3440
  }
3274
3441
 
3275
3442
 
@@ -3280,20 +3447,13 @@ html.u-baseline-grid::after {
3280
3447
  :where(.bf-theme) :where(.bf-linked-logo-section) {
3281
3448
  container-name: bf-linked-logo-section;
3282
3449
  container-type: inline-size;
3283
- margin-block-end: var(--bf-section-space);
3450
+ margin: 0;
3284
3451
  min-inline-size: 0;
3285
3452
  }
3286
3453
 
3287
- :where(.bf-theme) :where(.bf-linked-logo-section.is-shallow) {
3288
- margin-block-end: var(--bf-section-space-shallow);
3289
- }
3290
-
3291
- :where(.bf-theme) :where(.bf-linked-logo-section.is-deep) {
3292
- margin-block-end: var(--bf-section-space-deep);
3293
- }
3294
-
3295
3454
  :where(.bf-theme) :where(.bf-linked-logo-section-layout) {
3296
3455
  display: grid;
3456
+ gap: var(--bf-section-space-shallow);
3297
3457
  grid-template-columns: minmax(0, 1fr);
3298
3458
  min-inline-size: 0;
3299
3459
  }
@@ -3326,7 +3486,7 @@ html.u-baseline-grid::after {
3326
3486
  max-inline-size: none;
3327
3487
  }
3328
3488
 
3329
- :where(.bf-theme) :where(.bf-linked-logo-section-card) {
3489
+ :where(.bf-theme) :where(a.bf-linked-logo-section-card) {
3330
3490
  align-content: start;
3331
3491
  align-items: stretch;
3332
3492
  color: inherit;
@@ -3338,7 +3498,7 @@ html.u-baseline-grid::after {
3338
3498
  text-decoration: none;
3339
3499
  }
3340
3500
 
3341
- :where(.bf-theme) :where(.bf-linked-logo-section-card:hover) :where(.bf-linked-logo-section-card-copy) {
3501
+ :where(.bf-theme) :where(a.bf-linked-logo-section-card:hover) :where(.bf-linked-logo-section-card-copy) {
3342
3502
  text-decoration: underline;
3343
3503
  }
3344
3504
 
@@ -3357,7 +3517,7 @@ html.u-baseline-grid::after {
3357
3517
  of baselines tall. Keep the visual ratio exact and put only the residual
3358
3518
  rhythm compensation after the mark; the copy keeps its own semantic
3359
3519
  spacing and the occupied card still lands on the tier grid. */
3360
- @supports (margin-block-end: round(up, 1px, 1px)) {
3520
+ @supports (margin-block-end: round(up, 0.0625rem, 0.0625rem)) {
3361
3521
  :where(.bf-theme) :where(.bf-linked-logo-section-mark) {
3362
3522
  margin-block-end: calc(
3363
3523
  round(up, calc(100cqi * 9 / 16), var(--bf-baseline))
@@ -3389,21 +3549,25 @@ html.u-baseline-grid::after {
3389
3549
  overflow-wrap: anywhere;
3390
3550
  }
3391
3551
 
3392
- /* Vanilla's linked-logo block moves from one to two cards per row at the
3393
- 4-column medium grid. The section itself does not split until the 8-column
3394
- large grid: its macro uses large-only grid columns for the 50/50 and 25/75
3395
- rails. The root establishes the query context; only descendants change. */
3552
+ /* The linked-logo block moves from one to two cards per row at the 4-column
3553
+ medium grid. The balanced 50/50 section split uses the shared readable
3554
+ threshold; the 25/75 content rail and four-card density retain their
3555
+ separately measured wide threshold. The root establishes the query context;
3556
+ only descendants change. */
3396
3557
  @container bf-linked-logo-section (width >= 38.75rem) {
3397
3558
  :where(.bf-theme) :where(.bf-linked-logo-section-logos) :where(.bf-logo-section-items) {
3398
3559
  grid-template-columns: repeat(2, minmax(0, 1fr));
3399
3560
  }
3400
3561
  }
3401
3562
 
3402
- @container bf-linked-logo-section (width >= 64.75rem) {
3563
+ @container bf-linked-logo-section (width >= 45rem) {
3403
3564
  :where(.bf-theme) :where(.bf-linked-logo-section.is-50-50) :where(.bf-linked-logo-section-layout) {
3404
3565
  column-gap: var(--bf-grid-gap-inline);
3405
3566
  grid-template-columns: repeat(2, minmax(0, 1fr));
3406
3567
  }
3568
+ }
3569
+
3570
+ @container bf-linked-logo-section (width >= 64.75rem) {
3407
3571
 
3408
3572
  :where(.bf-theme) :where(.bf-linked-logo-section.is-25-75) :where(.bf-linked-logo-section-layout) {
3409
3573
  column-gap: var(--bf-grid-gap-inline);
@@ -3506,35 +3670,27 @@ html.u-baseline-grid::after {
3506
3670
  }
3507
3671
 
3508
3672
  /* A section title may be the route action without looking like body copy. */
3509
- :where(.bf-theme) :where(.bf-basic-section-title-link, .bf-basic-section-title-link:visited) {
3673
+ :where(.bf-theme) :where(a.bf-basic-section-title-link, a.bf-basic-section-title-link:visited) {
3510
3674
  color: var(--bf-color-link-default);
3511
3675
  text-decoration: none;
3512
3676
  }
3513
3677
 
3514
- :where(.bf-theme) :where(.bf-basic-section-title-link:hover) {
3678
+ :where(.bf-theme) :where(a.bf-basic-section-title-link:hover) {
3515
3679
  text-decoration: underline;
3516
3680
  text-decoration-thickness: var(--bf-border-width);
3517
3681
  text-underline-offset: 0.12em;
3518
3682
  }
3519
3683
 
3520
- /* Vanilla splits at medium only on request, otherwise at its large breakpoint.
3521
- The layout descendant reacts to the root container; the query never tries to
3684
+ /* A balanced section switches at the shared readable 50/50 threshold. The
3685
+ layout descendant reacts to the root container; the query never tries to
3522
3686
  restyle the container that established it. */
3523
- @container bf-basic-section (width >= 38.75rem) {
3524
- :where(.bf-theme) :where(.bf-basic-section.is-split-medium) :where(.bf-basic-section-layout) {
3687
+ @container bf-basic-section (width >= 45rem) {
3688
+ :where(.bf-theme) :where(.bf-basic-section-layout) {
3525
3689
  column-gap: var(--bf-grid-gap-inline);
3526
3690
  grid-template-columns: repeat(2, minmax(0, 1fr));
3527
3691
  }
3528
3692
  }
3529
3693
 
3530
- @container bf-basic-section (width >= 64.75rem) {
3531
- :where(.bf-theme) :where(.bf-basic-section:not(.is-split-medium)) :where(.bf-basic-section-layout) {
3532
- column-gap: var(--bf-grid-gap-inline);
3533
- grid-template-columns: repeat(2, minmax(0, 1fr));
3534
- }
3535
-
3536
- }
3537
-
3538
3694
  /* CTA section: Vanilla's 25/75 variant is an offset content rail. The full
3539
3695
  variant stays naturally full-width. Typography and action presentation are
3540
3696
  supplied by real heading elements and bf-cta-block. */
@@ -3548,19 +3704,23 @@ html.u-baseline-grid::after {
3548
3704
  display: grid;
3549
3705
  grid-template-columns: minmax(0, 1fr);
3550
3706
  min-inline-size: 0;
3551
- padding-block: calc(var(--bf-section-space-deep) / 2);
3552
3707
  }
3553
3708
 
3554
3709
  :where(.bf-theme) :where(.bf-cta-section-content) {
3710
+ --bf-stack-space: var(--bf-section-space-shallow);
3711
+ align-content: start;
3712
+ display: grid;
3713
+ gap: var(--bf-stack-space);
3555
3714
  min-inline-size: 0;
3556
3715
  overflow-wrap: anywhere;
3557
3716
  }
3558
3717
 
3559
- @container bf-cta-section (width >= 64.75rem) {
3560
- :where(.bf-theme) :where(.bf-cta-section-layout) {
3561
- padding-block: var(--bf-section-space-deep);
3562
- }
3718
+ :where(.bf-theme) :where(.bf-cta-section-copy) {
3719
+ min-inline-size: 0;
3720
+ overflow-wrap: anywhere;
3721
+ }
3563
3722
 
3723
+ @container bf-cta-section (width >= 64.75rem) {
3564
3724
  :where(.bf-theme) :where(.bf-cta-section.is-offset) :where(.bf-cta-section-layout) {
3565
3725
  column-gap: var(--bf-grid-gap-inline);
3566
3726
  grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
@@ -3628,15 +3788,15 @@ html.u-baseline-grid::after {
3628
3788
  /* semantic gaps and every text child keeps metric compensation. */
3629
3789
  /* ------------------------------------------------------------------ */
3630
3790
 
3631
- /* Hero: its deliberately asymmetric boundary mirrors the current Vanilla
3632
- section--hero: a compact arrival space, then the normal section exit. The
3633
- entry rule replaces one pixel of padding so it never changes the rhythm. */
3791
+ /* Hero: the compact arrival space belongs inside its entry rule. The outer
3792
+ stack owns the section exit, and the rule replaces one pixel of padding so
3793
+ it never changes the rhythm. */
3634
3794
  :where(.bf-theme) :where(.bf-hero) {
3635
3795
  border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
3636
3796
  container-name: bf-hero;
3637
3797
  container-type: inline-size;
3638
3798
  min-inline-size: 0;
3639
- padding-block-end: calc(var(--bf-section-space) / 2);
3799
+ padding-block-end: 0;
3640
3800
  padding-block-start: calc(var(--bf-space-2) - var(--bf-border-width));
3641
3801
  }
3642
3802
 
@@ -3649,6 +3809,7 @@ html.u-baseline-grid::after {
3649
3809
 
3650
3810
  :where(.bf-theme) :where(.bf-hero-layout) {
3651
3811
  display: grid;
3812
+ gap: var(--bf-section-space-shallow);
3652
3813
  grid-template-columns: minmax(0, 1fr);
3653
3814
  min-inline-size: 0;
3654
3815
  }
@@ -3658,9 +3819,9 @@ html.u-baseline-grid::after {
3658
3819
  overflow-wrap: anywhere;
3659
3820
  }
3660
3821
 
3661
- /* The normal hero keeps title, supporting heading, chip, prose and CTA in a
3662
- semantic copy stack. Hero titles are h1 slots and supporting titles are h2
3663
- slots. */
3822
+ /* Legacy copy slots remain valid for signpost variants. The default arrival
3823
+ composition separates a title area from its supporting content area, and
3824
+ the demo composes each area with the public stack density modifiers. */
3664
3825
  :where(.bf-theme) :where(.bf-hero-copy) {
3665
3826
  align-content: start;
3666
3827
  display: grid;
@@ -3687,7 +3848,7 @@ html.u-baseline-grid::after {
3687
3848
  allocated a fluid grid track. Snap only the media block to the active tier
3688
3849
  baseline so the following semantic text remains on-grid; its inline track
3689
3850
  and the surrounding Vanilla proportions remain unchanged. */
3690
- @supports (block-size: calc-size(auto, round(up, size, 1px))) {
3851
+ @supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
3691
3852
  :where(.bf-theme) :where(.bf-hero-media > .bf-aspect, .bf-hero-signpost > :where(img, picture, video, canvas, svg)) {
3692
3853
  block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
3693
3854
  }
@@ -3710,14 +3871,10 @@ html.u-baseline-grid::after {
3710
3871
  inline-size: 100%;
3711
3872
  }
3712
3873
 
3713
- /* Vanilla's desktop hero boundary is 1036px. The layout descendant responds
3714
- to the root container so embedding it in a narrower rail still collapses
3715
- correctly. */
3716
- /* The section boundary itself follows Vanilla's page-level desktop switch;
3717
- the composition below continues to react to the allocated container. */
3874
+ /* The section boundary follows the page-level desktop switch, while the
3875
+ two-column composition uses its measured intrinsic allocation below. */
3718
3876
  @media (width >= 64.75rem) {
3719
3877
  :where(.bf-theme) :where(.bf-hero) {
3720
- padding-block-end: var(--bf-section-space);
3721
3878
  padding-block-start: calc(var(--bf-space-3) - var(--bf-border-width));
3722
3879
  }
3723
3880
 
@@ -3726,7 +3883,7 @@ html.u-baseline-grid::after {
3726
3883
  }
3727
3884
  }
3728
3885
 
3729
- @container bf-hero (width >= 64.75rem) {
3886
+ @container bf-hero (width >= 45rem) {
3730
3887
  :where(.bf-theme) :where(.bf-hero-layout) {
3731
3888
  column-gap: var(--bf-grid-gap-inline);
3732
3889
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -3746,9 +3903,10 @@ html.u-baseline-grid::after {
3746
3903
  }
3747
3904
  }
3748
3905
 
3749
- /* Vanilla can intentionally split the three proportioned layouts at its
3750
- medium threshold. The modifier changes only structural tracks. */
3751
- @container bf-hero (width >= 38.75rem) {
3906
+ /* The named variants retain their proportion but share the readable split
3907
+ threshold with the default hero. The modifier changes only structural
3908
+ tracks; it does not introduce an earlier cramped layout. */
3909
+ @container bf-hero (width >= 45rem) {
3752
3910
  :where(.bf-theme) :where(.bf-hero.is-split-medium) :where(.bf-hero-layout) {
3753
3911
  column-gap: var(--bf-grid-gap-inline);
3754
3912
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -3768,14 +3926,10 @@ html.u-baseline-grid::after {
3768
3926
  :where(.bf-theme) :where(.bf-quote-wrapper) {
3769
3927
  container-name: bf-quote-wrapper;
3770
3928
  container-type: inline-size;
3771
- margin-block-end: var(--bf-section-space);
3929
+ margin: 0;
3772
3930
  min-inline-size: 0;
3773
3931
  }
3774
3932
 
3775
- :where(.bf-theme) :where(.bf-quote-wrapper.is-shallow) {
3776
- margin-block-end: var(--bf-section-space-shallow);
3777
- }
3778
-
3779
3933
  :where(.bf-theme) :where(.bf-quote-wrapper-header, .bf-quote-wrapper-layout, .bf-quote-wrapper-signpost, .bf-quote-wrapper-content, .bf-quote-wrapper-citation, .bf-quote-wrapper-media) {
3780
3934
  min-inline-size: 0;
3781
3935
  overflow-wrap: anywhere;
@@ -3822,7 +3976,7 @@ html.u-baseline-grid::after {
3822
3976
  /* The quote rail can also be a fractional grid track. Keep its media from
3823
3977
  introducing a sub-baseline row while leaving quotation and citation rhythm
3824
3978
  entirely baseline-compensated while its stack owns semantic gaps. */
3825
- @supports (block-size: calc-size(auto, round(up, size, 1px))) {
3979
+ @supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
3826
3980
  :where(.bf-theme) :where(.bf-quote-wrapper-signpost > :where(img, picture, svg), .bf-quote-wrapper-media > .bf-aspect) {
3827
3981
  block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
3828
3982
  }
@@ -3861,8 +4015,47 @@ html.u-baseline-grid::after {
3861
4015
  }
3862
4016
 
3863
4017
  @container bf-quote-wrapper (width >= 64.75rem) {
4018
+ :where(.bf-theme) :where(.bf-quote-wrapper-header) {
4019
+ grid-template-columns: repeat(8, minmax(0, 1fr));
4020
+ }
4021
+
4022
+ :where(.bf-theme) :where(.bf-quote-wrapper-header) > :first-child {
4023
+ grid-column: 1 / span 6;
4024
+ }
4025
+
4026
+ :where(.bf-theme) :where(.bf-quote-wrapper-header-link) {
4027
+ grid-column: 7 / -1;
4028
+ }
4029
+
4030
+ :where(.bf-theme) :where(.bf-quote-wrapper-layout) {
4031
+ grid-template-columns: repeat(8, minmax(0, 1fr));
4032
+ }
4033
+
4034
+ :where(.bf-theme) :where(.bf-quote-wrapper-signpost) {
4035
+ grid-column: 1 / span 2;
4036
+ }
4037
+
4038
+ :where(.bf-theme) :where(.bf-quote-wrapper-content, .bf-quote-wrapper-content:only-child) {
4039
+ display: grid;
4040
+ grid-column: 3 / -1;
4041
+ grid-template-columns: subgrid;
4042
+ }
4043
+
3864
4044
  :where(.bf-theme) :where(.bf-quote-wrapper-quote-row) {
3865
- grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
4045
+ grid-column: 1 / -1;
4046
+ grid-template-columns: subgrid;
4047
+ }
4048
+
4049
+ :where(.bf-theme) :where(.bf-quote-wrapper-prose) {
4050
+ grid-column: 1 / span 4;
4051
+ }
4052
+
4053
+ :where(.bf-theme) :where(.bf-quote-wrapper-citation) {
4054
+ grid-column: 5 / -1;
4055
+ }
4056
+
4057
+ :where(.bf-theme) :where(.bf-quote-wrapper-content) > :where(.bf-cta-block, .bf-quote-wrapper-media) {
4058
+ grid-column: 1 / -1;
3866
4059
  }
3867
4060
  }
3868
4061
 
@@ -3875,19 +4068,13 @@ html.u-baseline-grid::after {
3875
4068
  container-name: bf-rich-list;
3876
4069
  container-type: inline-size;
3877
4070
  min-inline-size: 0;
3878
- padding-block-end: calc(var(--bf-section-space) / 2);
3879
- }
3880
-
3881
- :where(.bf-theme) :where(.bf-rich-list.is-shallow) {
3882
- padding-block-end: var(--bf-section-space-shallow);
3883
- }
3884
-
3885
- :where(.bf-theme) :where(.bf-rich-list.is-deep) {
3886
- padding-block-end: calc(var(--bf-section-space-deep) / 2);
3887
4071
  }
3888
4072
 
3889
4073
  :where(.bf-theme) :where(.bf-rich-list-layout) {
4074
+ --bf-stack-space: var(--bf-space-1);
4075
+ align-content: start;
3890
4076
  display: grid;
4077
+ gap: var(--bf-stack-space);
3891
4078
  grid-template-columns: minmax(0, 1fr);
3892
4079
  min-inline-size: 0;
3893
4080
  }
@@ -3902,14 +4089,11 @@ html.u-baseline-grid::after {
3902
4089
  overflow-wrap: anywhere;
3903
4090
  }
3904
4091
 
3905
- @media (width >= 64.75rem) {
3906
- :where(.bf-theme) :where(.bf-rich-list:not(.is-shallow)) {
3907
- padding-block-end: var(--bf-section-space);
3908
- }
3909
-
3910
- :where(.bf-theme) :where(.bf-rich-list.is-deep) {
3911
- padding-block-end: var(--bf-section-space-deep);
3912
- }
4092
+ :where(.bf-theme) :where(.bf-rich-list-support, .bf-rich-list-content) {
4093
+ --bf-stack-space: var(--bf-space-1);
4094
+ align-content: start;
4095
+ display: grid;
4096
+ gap: var(--bf-stack-space);
3913
4097
  }
3914
4098
 
3915
4099
  /* ------------------------------------------------------------------ */
@@ -3936,7 +4120,7 @@ html.u-baseline-grid::after {
3936
4120
  /* A full-width ratio inside a fluid Sites rail otherwise leaves the next
3937
4121
  heading on a fractional pixel. The visual alone absorbs the trailing
3938
4122
  compensation; semantic children retain their own margins unchanged. */
3939
- @supports (block-size: calc-size(auto, round(up, size, 1px))) {
4123
+ @supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
3940
4124
  :where(.bf-theme) :where(.bf-rich-list-visual > .bf-aspect) {
3941
4125
  block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
3942
4126
  }
@@ -3975,8 +4159,12 @@ html.u-baseline-grid::after {
3975
4159
 
3976
4160
  /* Prefixes are logical here even though the shared list predates BF's
3977
4161
  logical-property rule. This keeps ticks, bullets and numbers RTL-safe. */
4162
+ :where(.bf-theme) :where(.bf-rich-list-list:has(> .bf-list-item:is(.is-ticked, .is-crossed)), .bf-rich-list-list.is-bulleted, ol.bf-rich-list-list) {
4163
+ padding-inline-start: var(--bf-leading-mark-group-inset);
4164
+ }
4165
+
3978
4166
  :where(.bf-theme) :where(.bf-rich-list-list) > .bf-list-item:is(.is-ticked, .is-crossed) {
3979
- padding-inline-start: calc(var(--bf-leading-icon-size) + var(--bf-leading-icon-gap));
4167
+ padding-inline-start: var(--bf-leading-mark-offset);
3980
4168
  }
3981
4169
 
3982
4170
  :where(.bf-theme) :where(.bf-rich-list-list) > .bf-list-item:is(.is-ticked, .is-crossed)::before {
@@ -3986,7 +4174,7 @@ html.u-baseline-grid::after {
3986
4174
  }
3987
4175
 
3988
4176
  :where(.bf-theme) :where(.bf-rich-list-list.is-bulleted) > :where(.bf-list-item) {
3989
- padding-inline-start: calc(var(--bf-leading-icon-size) + var(--bf-leading-icon-gap));
4177
+ padding-inline-start: var(--bf-leading-mark-offset);
3990
4178
  }
3991
4179
 
3992
4180
  :where(.bf-theme) :where(.bf-rich-list-list.is-bulleted) > :where(.bf-list-item)::before {
@@ -4005,7 +4193,7 @@ html.u-baseline-grid::after {
4005
4193
 
4006
4194
  :where(.bf-theme) :where(ol.bf-rich-list-list) > :where(.bf-list-item) {
4007
4195
  counter-increment: bf-rich-horizontal-counter;
4008
- padding-inline-start: calc(var(--bf-leading-icon-size) + var(--bf-leading-icon-gap));
4196
+ padding-inline-start: var(--bf-leading-mark-offset);
4009
4197
  }
4010
4198
 
4011
4199
  :where(.bf-theme) :where(ol.bf-rich-list-list) > :where(.bf-list-item)::before {
@@ -4052,7 +4240,7 @@ html.u-baseline-grid::after {
4052
4240
  }
4053
4241
  }
4054
4242
 
4055
- @container bf-rich-list (width >= 64.75rem) {
4243
+ @container bf-rich-list (width >= 45rem) {
4056
4244
  :where(.bf-theme) :where(.bf-rich-list.is-horizontal.is-50-50) > :where(.bf-rich-list-layout) {
4057
4245
  column-gap: var(--bf-grid-gap-inline);
4058
4246
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -4066,7 +4254,7 @@ html.u-baseline-grid::after {
4066
4254
  grid-column: 2;
4067
4255
  }
4068
4256
 
4069
- :where(.bf-theme) :where(.bf-rich-list.is-horizontal) > :where(.bf-rich-list-layout) > :where(.bf-rich-list-cta) {
4257
+ :where(.bf-theme) :where(.bf-rich-list.is-horizontal.is-50-50) > :where(.bf-rich-list-layout) > :where(.bf-rich-list-cta) {
4070
4258
  grid-column: 2;
4071
4259
  }
4072
4260
  }
@@ -4081,7 +4269,6 @@ html.u-baseline-grid::after {
4081
4269
 
4082
4270
  :where(.bf-theme) :where(.bf-rich-list.is-vertical) :where(.bf-rich-list-media) {
4083
4271
  container-type: inline-size;
4084
- padding-block-end: var(--bf-section-space-shallow);
4085
4272
  }
4086
4273
 
4087
4274
  :where(.bf-theme) :where(.bf-rich-list.is-vertical.is-flipped) :where(.bf-rich-list-media) {
@@ -4100,7 +4287,7 @@ html.u-baseline-grid::after {
4100
4287
  /* The media object deliberately stretches across fluid 1/2 and 2/3 ratios.
4101
4288
  Snap that resulting block, rather than resetting content spacing, so each
4102
4289
  tier's baseline survives both portrait and landscape allocations. */
4103
- @supports (block-size: calc-size(auto, round(up, size, 1px))) {
4290
+ @supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
4104
4291
  :where(.bf-theme) :where(.bf-rich-list-media-frame) {
4105
4292
  block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
4106
4293
  }
@@ -4143,11 +4330,7 @@ html.u-baseline-grid::after {
4143
4330
  /* Auto height has no shallow media wrapper in Vanilla. At narrow widths it
4144
4331
  remains a normal 3:2 frame; at the wide split it stretches with the content
4145
4332
  rail, clamped between the equivalent 16:9 and 2:3 heights. */
4146
- :where(.bf-theme) :where(.bf-rich-list-media.is-auto-height) {
4147
- padding-block-end: 0;
4148
- }
4149
-
4150
- @container bf-rich-list (width >= 64.75rem) {
4333
+ @container bf-rich-list (width >= 45rem) {
4151
4334
  :where(.bf-theme) :where(.bf-rich-list.is-vertical) > :where(.bf-rich-list-layout) {
4152
4335
  align-items: stretch;
4153
4336
  column-gap: var(--bf-grid-gap-inline);
@@ -4196,7 +4379,7 @@ html.u-baseline-grid::after {
4196
4379
  min-block-size: 56.25cqi;
4197
4380
  }
4198
4381
 
4199
- @supports (min-block-size: round(up, 1px, 1px)) {
4382
+ @supports (min-block-size: round(up, 0.0625rem, 0.0625rem)) {
4200
4383
  :where(.bf-theme) :where(.bf-rich-list-media.is-auto-height) :where(.bf-rich-list-media-frame) {
4201
4384
  max-block-size: round(down, 150cqi, var(--bf-baseline));
4202
4385
  min-block-size: round(up, 56.25cqi, var(--bf-baseline));
@@ -4214,6 +4397,7 @@ html.u-baseline-grid::after {
4214
4397
 
4215
4398
 
4216
4399
  :where(.bf-theme) :where(.bf-panel) {
4400
+ --bf-panel-content-padding-inline: var(--bf-component-inline-inset-continuation);
4217
4401
  background: var(--bf-color-background-default);
4218
4402
  color: var(--bf-color-text-default);
4219
4403
  display: flex;
@@ -4236,6 +4420,9 @@ html.u-baseline-grid::after {
4236
4420
  overscroll-behavior: contain;
4237
4421
  }
4238
4422
 
4423
+ /* Panel chrome and content consume the live page-grid gutter through a local
4424
+ * derived property, so their internal text rails follow the same
4425
+ * viewport brackets as surrounding page content. */
4239
4426
  :where(.bf-theme) :where(.bf-panel-header) {
4240
4427
  align-items: start;
4241
4428
  display: flex;
@@ -4244,7 +4431,7 @@ html.u-baseline-grid::after {
4244
4431
  justify-content: space-between;
4245
4432
  padding-block-end: var(--bf-panel-padding-block);
4246
4433
  padding-block-start: var(--bf-panel-padding-block);
4247
- padding-inline: var(--bf-panel-padding-inline);
4434
+ padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
4248
4435
  }
4249
4436
 
4250
4437
  /* A navigation brand keeps the Canonical tag attached to the panel's top edge
@@ -4254,7 +4441,7 @@ html.u-baseline-grid::after {
4254
4441
  gap: 0;
4255
4442
  padding-block: 0;
4256
4443
  padding-inline-end: 0;
4257
- padding-inline-start: var(--bf-panel-padding-inline);
4444
+ padding-inline-start: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
4258
4445
  }
4259
4446
 
4260
4447
  :where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) > :where(.bf-top-navigation-logo.is-canonical-tagged) {
@@ -4285,10 +4472,10 @@ html.u-baseline-grid::after {
4285
4472
  flex-wrap: wrap;
4286
4473
  gap: var(--bf-field-gap);
4287
4474
  justify-content: space-between;
4288
- min-block-size: calc(var(--bf-control-box-size-compact) + (var(--bf-panel-padding-block) * 2));
4475
+ min-block-size: calc(var(--bf-control-box-size-compact) + var(--bf-panel-padding-block));
4289
4476
  padding-block-end: var(--bf-panel-padding-block);
4290
- padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
4291
- padding-inline: var(--bf-panel-padding-inline);
4477
+ padding-block-start: 0;
4478
+ padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
4292
4479
  }
4293
4480
 
4294
4481
  :where(.bf-theme) :where(.bf-panel-footer.is-sticky) {
@@ -4350,8 +4537,8 @@ html.u-baseline-grid::after {
4350
4537
  }
4351
4538
 
4352
4539
  :where(.bf-theme) :where(.bf-panel-toggle:focus-visible) {
4353
- outline: 2px solid var(--bf-color-focus);
4354
- outline-offset: 2px;
4540
+ outline: 0.125rem solid var(--bf-color-focus);
4541
+ outline-offset: 0.125rem;
4355
4542
  }
4356
4543
 
4357
4544
  :where(.bf-theme) :where(.bf-panel-content) {
@@ -4359,7 +4546,7 @@ html.u-baseline-grid::after {
4359
4546
  min-block-size: 0;
4360
4547
  padding-block-end: var(--bf-panel-padding-block);
4361
4548
  padding-block-start: var(--bf-panel-padding-block);
4362
- padding-inline: var(--bf-panel-padding-inline);
4549
+ padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
4363
4550
  }
4364
4551
 
4365
4552
  :where(.bf-theme) :where(.bf-panel-content.is-flush) {
@@ -4384,7 +4571,7 @@ html.u-baseline-grid::after {
4384
4571
  overflow: auto;
4385
4572
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
4386
4573
  padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
4387
- padding-inline: var(--bf-panel-padding-inline);
4574
+ padding-inline: var(--bf-component-inline-inset-continuation);
4388
4575
  }
4389
4576
 
4390
4577
  :where(.bf-theme) :where(.bf-card.is-highlighted) {
@@ -4409,7 +4596,7 @@ html.u-baseline-grid::after {
4409
4596
 
4410
4597
  :where(.bf-theme) :where(a.bf-card:hover, a.bf-card.is-highlighted:hover, a.bf-card.is-overlay:hover, a.bf-card.is-muted:hover) {
4411
4598
  border-color: var(--bf-color-focus);
4412
- transform: translateY(-1px);
4599
+ transform: translateY(-0.0625rem);
4413
4600
  }
4414
4601
 
4415
4602
  :where(.bf-theme) :where(a.bf-card:focus:not(:focus-visible), a.bf-card.is-highlighted:focus:not(:focus-visible), a.bf-card.is-overlay:focus:not(:focus-visible), a.bf-card.is-muted:focus:not(:focus-visible)) {
@@ -4417,8 +4604,8 @@ html.u-baseline-grid::after {
4417
4604
  }
4418
4605
 
4419
4606
  :where(.bf-theme) :where(a.bf-card:focus-visible, a.bf-card.is-highlighted:focus-visible, a.bf-card.is-overlay:focus-visible, a.bf-card.is-muted:focus-visible) {
4420
- outline: 2px solid var(--bf-color-focus);
4421
- outline-offset: -2px;
4607
+ outline: 0.125rem solid var(--bf-color-focus);
4608
+ outline-offset: -0.125rem;
4422
4609
  }
4423
4610
 
4424
4611
  :where(.bf-theme) :where(.bf-card.is-preview) {
@@ -4501,7 +4688,7 @@ html.u-baseline-grid::after {
4501
4688
  min-inline-size: 0;
4502
4689
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
4503
4690
  padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
4504
- padding-inline: var(--bf-panel-padding-inline);
4691
+ padding-inline: var(--bf-component-inline-inset-continuation);
4505
4692
  text-align: left;
4506
4693
  }
4507
4694
 
@@ -4514,7 +4701,7 @@ html.u-baseline-grid::after {
4514
4701
  :where(.bf-theme) :where(button.bf-option-card:hover:not(:disabled)) {
4515
4702
  background: var(--bf-color-background-hover);
4516
4703
  border-color: var(--bf-color-focus);
4517
- transform: translateY(-1px);
4704
+ transform: translateY(-0.0625rem);
4518
4705
  }
4519
4706
 
4520
4707
  :where(.bf-theme) :where(.bf-option-card.is-active),
@@ -4525,8 +4712,8 @@ html.u-baseline-grid::after {
4525
4712
  }
4526
4713
 
4527
4714
  :where(.bf-theme) :where(button.bf-option-card:focus-visible) {
4528
- outline: 2px solid var(--bf-color-focus);
4529
- outline-offset: -2px;
4715
+ outline: 0.125rem solid var(--bf-color-focus);
4716
+ outline-offset: -0.125rem;
4530
4717
  }
4531
4718
 
4532
4719
  :where(.bf-theme) :where(.bf-option-card-label) {
@@ -4574,7 +4761,7 @@ html.u-baseline-grid::after {
4574
4761
  /* Snap the grid-row wrapper after intrinsic image/copy measurement. Because
4575
4762
  the card flexes inside it, peers retain Vanilla's equal-height row while
4576
4763
  the card edge and the following row both land on BF baselines. */
4577
- @supports (block-size: calc-size(auto, round(up, size, 1px))) {
4764
+ @supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
4578
4765
  :where(.bf-theme) :where(.bf-content-card-wrapper) {
4579
4766
  block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
4580
4767
  }
@@ -4751,7 +4938,7 @@ html.u-baseline-grid::after {
4751
4938
  text-transform: var(--bf-h1-text-transform);
4752
4939
  }
4753
4940
 
4754
- :where(.bf-theme) :where(.bf-content-card-main-link) {
4941
+ :where(.bf-theme) :where(a.bf-content-card-main-link) {
4755
4942
  -webkit-box-orient: vertical;
4756
4943
  -webkit-line-clamp: 3;
4757
4944
  color: inherit;
@@ -4771,7 +4958,7 @@ html.u-baseline-grid::after {
4771
4958
  z-index: 1;
4772
4959
  }
4773
4960
 
4774
- :where(.bf-theme) :where(.bf-content-card-main-link:is(:hover, :focus, :active, :visited)) {
4961
+ :where(.bf-theme) :where(a.bf-content-card-main-link:is(:hover, :focus, :active, :visited)) {
4775
4962
  color: inherit;
4776
4963
  text-decoration: none;
4777
4964
  }
@@ -4781,8 +4968,8 @@ html.u-baseline-grid::after {
4781
4968
  }
4782
4969
 
4783
4970
  :where(.bf-theme) :where(.bf-content-card:has(.bf-content-card-main-link:focus-visible)) {
4784
- outline: 3px solid var(--bf-color-focus);
4785
- outline-offset: 2px;
4971
+ outline: 0.1875rem solid var(--bf-color-focus);
4972
+ outline-offset: 0.125rem;
4786
4973
  }
4787
4974
 
4788
4975
  /* All nested actions sit above the expanded main-link hit area. This includes
@@ -4858,6 +5045,7 @@ html.u-baseline-grid::after {
4858
5045
  min-inline-size: 0;
4859
5046
  overflow-x: auto;
4860
5047
  padding-block-end: var(--bf-space-1);
5048
+ padding-block-start: calc(0.5rem - var(--bf-border-width));
4861
5049
  padding-inline: var(--bf-space-2);
4862
5050
  position: relative;
4863
5051
  scrollbar-width: none;
@@ -4895,11 +5083,11 @@ html.u-baseline-grid::after {
4895
5083
 
4896
5084
  /* Internal geometry responds to the card's allocated width. The card root is
4897
5085
  only the container; the frame/media/body descendants own queried styles. */
4898
- /* Vanilla switches the viewport at 620px/1036px. A four-column card is much
5086
+ /* Vanilla switches the viewport at 38.75rem/64.75rem. A four-column card is much
4899
5087
  narrower than that viewport after grid margins and gutters, so its internal
4900
- horizontal layout uses Vanilla's 460px minimum viable allocation. The
4901
- eight-column 50/50 split starts at the roughly 960px allocation left by the
4902
- 1036px viewport. This preserves the rendered switch in embedded BF grids. */
5088
+ horizontal layout uses Vanilla's 28.75rem minimum viable allocation. The
5089
+ eight-column 50/50 split starts at the roughly 60rem allocation left by the
5090
+ 64.75rem viewport. This preserves the rendered switch in embedded BF grids. */
4903
5091
  @container bf-content-card (width < 28.75rem) {
4904
5092
  :where(.bf-theme) :where(.bf-content-card-frame:not(:has(.bf-content-card-footer))) {
4905
5093
  min-block-size: 0;
@@ -5051,18 +5239,16 @@ html.u-baseline-grid::after {
5051
5239
 
5052
5240
  :where(.bf-theme) :where(.bf-tabs) {
5053
5241
  display: grid;
5242
+ gap: var(--bf-space-2);
5054
5243
  min-inline-size: 0;
5055
5244
  }
5056
5245
 
5057
5246
  :where(.bf-theme) :where(.bf-tabs-list) {
5058
- border-bottom: var(--bf-border-width) solid var(--bf-color-border-default);
5247
+ box-shadow: inset 0 calc(var(--bf-border-width) * -1) 0 var(--bf-color-border-default);
5059
5248
  display: flex;
5060
5249
  gap: 0;
5061
5250
  list-style: none;
5062
- /* Tabs keep their occupied block on the grid at the list boundary rather
5063
- than leaving each link's control compensation between its active rule and
5064
- the list rule. */
5065
- margin: 0 0 calc((var(--bf-baseline) * 2) - var(--bf-border-width));
5251
+ margin: 0;
5066
5252
  min-inline-size: 0;
5067
5253
  overflow-x: auto;
5068
5254
  padding: 0;
@@ -5084,16 +5270,16 @@ html.u-baseline-grid::after {
5084
5270
  align-items: center;
5085
5271
  background: transparent;
5086
5272
  border: 0;
5087
- border-bottom: var(--bf-bar-thickness) solid transparent;
5273
+ border-block: var(--bf-border-width) solid transparent;
5088
5274
  color: var(--bf-color-text-muted);
5089
5275
  cursor: pointer;
5090
- display: inline-flex;
5276
+ display: flex;
5091
5277
  gap: calc(var(--bf-baseline) * 0.5);
5092
5278
  justify-content: center;
5093
5279
  margin-bottom: 0;
5094
- padding-block-end: calc(var(--bf-body-nudge-end) + var(--bf-baseline) - var(--bf-bar-thickness));
5095
- padding-block-start: var(--bf-body-nudge-start);
5096
- padding-inline: var(--bf-control-inline-padding-action);
5280
+ padding-block-end: calc(var(--bf-single-line-row-padding-block) + var(--bf-single-line-row-margin-block-end));
5281
+ padding-block-start: var(--bf-single-line-row-padding-block);
5282
+ padding-inline: var(--bf-component-inline-inset-action);
5097
5283
  text-decoration: none;
5098
5284
  }
5099
5285
 
@@ -5102,18 +5288,22 @@ html.u-baseline-grid::after {
5102
5288
  color: var(--bf-color-text-default);
5103
5289
  }
5104
5290
 
5291
+ :where(.bf-theme) :where(a.bf-tabs-link:hover) {
5292
+ text-decoration: none;
5293
+ }
5294
+
5105
5295
  :where(.bf-theme) :where(.bf-tabs-link:focus:not(:focus-visible)) {
5106
5296
  outline: none;
5107
5297
  }
5108
5298
 
5109
5299
  :where(.bf-theme) :where(.bf-tabs-link:focus-visible) {
5110
5300
  color: var(--bf-color-text-default);
5111
- outline: 2px solid var(--bf-color-focus);
5112
- outline-offset: -2px;
5301
+ outline: 0.125rem solid var(--bf-color-focus);
5302
+ outline-offset: -0.125rem;
5113
5303
  }
5114
5304
 
5115
5305
  :where(.bf-theme) :where(.bf-tabs-link.is-active, .bf-tabs-link[aria-selected='true']) {
5116
- border-bottom-color: var(--bf-color-text-default);
5306
+ box-shadow: inset 0 calc(var(--bf-bar-thickness) * -1) 0 var(--bf-color-text-default);
5117
5307
  color: var(--bf-color-text-default);
5118
5308
  }
5119
5309
 
@@ -5163,10 +5353,10 @@ html.u-baseline-grid::after {
5163
5353
  display: grid;
5164
5354
  gap: calc(var(--bf-baseline) * 0.75);
5165
5355
  grid-template-columns: auto minmax(0, 1fr) auto;
5166
- margin: 0 0 calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-button-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
5356
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
5167
5357
  min-inline-size: 0;
5168
- padding-block: max(0rem, calc(var(--bf-button-block-padding) - var(--bf-border-width)));
5169
- padding-inline: var(--bf-control-inline-padding-field);
5358
+ padding-block: var(--bf-single-line-row-padding-block);
5359
+ padding-inline: var(--bf-component-inline-inset-field);
5170
5360
  }
5171
5361
 
5172
5362
  :where(.bf-theme) :where(.bf-choice-row:hover) {
@@ -5174,8 +5364,8 @@ html.u-baseline-grid::after {
5174
5364
  }
5175
5365
 
5176
5366
  :where(.bf-theme) :where(.bf-choice-row:has(:focus-visible)) {
5177
- outline: 2px solid var(--bf-color-focus);
5178
- outline-offset: -2px;
5367
+ outline: 0.125rem solid var(--bf-color-focus);
5368
+ outline-offset: -0.125rem;
5179
5369
  }
5180
5370
 
5181
5371
  :where(.bf-theme) :where(.bf-choice-row input[type='radio']) {
@@ -5222,7 +5412,7 @@ html.u-baseline-grid::after {
5222
5412
  gap: var(--bf-field-gap);
5223
5413
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
5224
5414
  padding-block-start: var(--bf-panel-padding-block);
5225
- padding-inline: var(--bf-panel-padding-inline);
5415
+ padding-inline: var(--bf-component-inline-inset-continuation);
5226
5416
  }
5227
5417
 
5228
5418
  :where(.bf-theme) :where(.bf-inline-options-heading) {
@@ -5296,11 +5486,11 @@ html.u-baseline-grid::after {
5296
5486
  cursor: pointer;
5297
5487
  display: inline-flex;
5298
5488
  justify-content: center;
5299
- margin-bottom: calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-button-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
5489
+ margin-bottom: var(--bf-single-line-row-margin-block-end);
5300
5490
  max-inline-size: 100%;
5301
5491
  overflow: hidden;
5302
- padding-block: max(0rem, calc(var(--bf-button-block-padding) - var(--bf-border-width)));
5303
- padding-inline: var(--bf-control-inline-padding-action);
5492
+ padding-block: var(--bf-single-line-row-padding-block);
5493
+ padding-inline: var(--bf-control-inline-padding-action-bordered);
5304
5494
  text-align: center;
5305
5495
  text-decoration: none;
5306
5496
  text-overflow: ellipsis;
@@ -5326,8 +5516,8 @@ html.u-baseline-grid::after {
5326
5516
  }
5327
5517
 
5328
5518
  :where(.bf-theme) :where(.bf-segmented-control-button:focus-visible, .bf-tab-buttons-button:focus-visible) {
5329
- outline: 2px solid var(--bf-color-focus);
5330
- outline-offset: -2px;
5519
+ outline: 0.125rem solid var(--bf-color-focus);
5520
+ outline-offset: -0.125rem;
5331
5521
  z-index: 2;
5332
5522
  }
5333
5523
 
@@ -5361,8 +5551,10 @@ html.u-baseline-grid::after {
5361
5551
  font-weight: var(--bf-body-font-weight, 400);
5362
5552
  line-height: var(--bf-body-line-height, 1.25rem);
5363
5553
  color: var(--bf-color-text-muted);
5364
- margin: 0;
5554
+ margin: 0 0 var(--bf-body-margin-bottom);
5365
5555
  min-inline-size: 0;
5556
+ padding-block-end: 0;
5557
+ padding-block-start: var(--bf-body-nudge-start);
5366
5558
  }
5367
5559
 
5368
5560
  :where(.bf-theme) :where(.bf-breadcrumbs-item) + :where(.bf-breadcrumbs-item)::before {
@@ -5393,26 +5585,35 @@ html.u-baseline-grid::after {
5393
5585
  :where(.bf-theme) :where(.bf-tab-section) {
5394
5586
  container-name: bf-tab-section;
5395
5587
  container-type: inline-size;
5396
- margin-block-end: var(--bf-section-space);
5588
+ margin: 0;
5397
5589
  min-inline-size: 0;
5398
5590
  }
5399
5591
 
5400
- :where(.bf-theme) :where(.bf-tab-section.is-shallow) {
5401
- margin-block-end: var(--bf-section-space-shallow);
5592
+ :where(.bf-theme) :where(.bf-tab-section-layout) {
5593
+ display: grid;
5594
+ grid-template-columns: minmax(0, 1fr);
5595
+ min-inline-size: 0;
5402
5596
  }
5403
5597
 
5404
- :where(.bf-theme) :where(.bf-tab-section.is-deep) {
5405
- margin-block-end: var(--bf-section-space-deep);
5598
+ :where(.bf-theme) :where(.bf-tab-section-rule) {
5599
+ grid-column: 1 / -1;
5406
5600
  }
5407
5601
 
5408
- :where(.bf-theme) :where(.bf-tab-section-layout) {
5602
+ :where(.bf-theme) :where(.bf-tab-section-body) {
5603
+ --bf-stack-space: var(--bf-section-space-shallow);
5604
+ align-content: start;
5409
5605
  display: grid;
5606
+ gap: var(--bf-stack-space);
5410
5607
  grid-template-columns: minmax(0, 1fr);
5411
5608
  min-inline-size: 0;
5412
5609
  }
5413
5610
 
5414
- :where(.bf-theme) :where(.bf-tab-section-rule) {
5415
- grid-column: 1 / -1;
5611
+ :where(.bf-theme) :where(.bf-tab-section-copy) {
5612
+ align-content: start;
5613
+ display: grid;
5614
+ grid-template-columns: minmax(0, 1fr);
5615
+ min-inline-size: 0;
5616
+ row-gap: var(--bf-space-1);
5416
5617
  }
5417
5618
 
5418
5619
  :where(.bf-theme) :where(.bf-tab-section-header, .bf-tab-section-intro, .bf-tab-section-tabs) {
@@ -5420,51 +5621,50 @@ html.u-baseline-grid::after {
5420
5621
  overflow-wrap: anywhere;
5421
5622
  }
5422
5623
 
5423
- /* Vanilla wraps every tab rail except the unadorned 50/50 special case in a
5424
- shallow section. This explicit composition padding does not change any
5425
- child's semantic margins. */
5426
- :where(.bf-theme) :where(.bf-tab-section:not(.is-50-50)) > :where(.bf-tab-section-layout) > :where(.bf-tab-section-tabs),
5427
- :where(.bf-theme) :where(.bf-tab-section.is-50-50) > :where(.bf-tab-section-layout:has(> .bf-tab-section-intro)) > :where(.bf-tab-section-tabs) {
5428
- padding-block-start: var(--bf-section-space-shallow);
5624
+ :where(.bf-theme) :where(.bf-tab-section-tabs) {
5625
+ align-self: start;
5429
5626
  }
5430
5627
 
5431
- @container bf-tab-section (width >= 64.75rem) {
5432
- :where(.bf-theme) :where(.bf-tab-section) > :where(.bf-tab-section-layout) {
5628
+ @container bf-tab-section (width >= 45rem) {
5629
+ :where(.bf-theme) :where(.bf-tab-section-body) {
5433
5630
  column-gap: var(--bf-grid-gap-inline);
5434
5631
  grid-template-columns: repeat(4, minmax(0, 1fr));
5435
5632
  }
5436
5633
 
5437
- :where(.bf-theme) :where(.bf-tab-section) > :where(.bf-tab-section-layout) > :where(.bf-tab-section-header) {
5634
+ :where(.bf-theme) :where(.bf-tab-section-copy) {
5438
5635
  grid-column: 1 / -1;
5636
+ grid-template-columns: subgrid;
5439
5637
  }
5440
5638
 
5441
5639
  /* With supporting copy or actions, Vanilla's heading row is 50/50 for all
5442
5640
  three section layouts. The following tab rail retains its own requested
5443
5641
  full, half or three-quarter span. */
5444
- :where(.bf-theme) :where(.bf-tab-section-layout:has(> .bf-tab-section-intro)) > :where(.bf-tab-section-header) {
5642
+ :where(.bf-theme) :where(.bf-tab-section-copy:has(> .bf-tab-section-intro)) > :where(.bf-tab-section-header) {
5445
5643
  grid-column: 1 / 3;
5446
5644
  }
5447
5645
 
5448
- :where(.bf-theme) :where(.bf-tab-section) > :where(.bf-tab-section-layout) > :where(.bf-tab-section-intro) {
5646
+ :where(.bf-theme) :where(.bf-tab-section-copy) > :where(.bf-tab-section-intro) {
5449
5647
  grid-column: 3 / -1;
5450
5648
  }
5451
5649
 
5452
- :where(.bf-theme) :where(.bf-tab-section) > :where(.bf-tab-section-layout) > :where(.bf-tab-section-tabs) {
5650
+ :where(.bf-theme) :where(.bf-tab-section-body) > :where(.bf-tab-section-tabs) {
5453
5651
  grid-column: 1 / -1;
5454
5652
  }
5455
5653
 
5456
5654
  /* An unadorned 50/50 section lets auto-placement put the heading and tabs
5457
5655
  in the same row. If an intro exists, it occupies that right-hand cell and
5458
5656
  the tabs move to the following row, matching the upstream rendering. */
5459
- :where(.bf-theme) :where(.bf-tab-section.is-50-50) > :where(.bf-tab-section-layout) > :where(.bf-tab-section-header) {
5657
+ :where(.bf-theme) :where(.bf-tab-section.is-50-50) :where(.bf-tab-section-copy:not(:has(> .bf-tab-section-intro))) {
5460
5658
  grid-column: 1 / 3;
5659
+ grid-row: 1;
5461
5660
  }
5462
5661
 
5463
- :where(.bf-theme) :where(.bf-tab-section.is-50-50) > :where(.bf-tab-section-layout) > :where(.bf-tab-section-tabs) {
5662
+ :where(.bf-theme) :where(.bf-tab-section.is-50-50) :where(.bf-tab-section-copy:not(:has(> .bf-tab-section-intro))) + :where(.bf-tab-section-tabs) {
5464
5663
  grid-column: 3 / -1;
5664
+ grid-row: 1;
5465
5665
  }
5466
5666
 
5467
- :where(.bf-theme) :where(.bf-tab-section.is-25-75) > :where(.bf-tab-section-layout) > :where(.bf-tab-section-tabs) {
5667
+ :where(.bf-theme) :where(.bf-tab-section.is-25-75) :where(.bf-tab-section-body) > :where(.bf-tab-section-tabs) {
5468
5668
  grid-column: 2 / -1;
5469
5669
  }
5470
5670
  }
@@ -5475,11 +5675,11 @@ html.u-baseline-grid::after {
5475
5675
  container-type: inline-size;
5476
5676
  display: grid;
5477
5677
  grid-template-columns: auto minmax(0, 1fr);
5478
- margin-block-end: var(--bf-section-space-shallow);
5678
+ margin: 0;
5479
5679
  min-inline-size: 0;
5480
5680
  }
5481
5681
 
5482
- :where(.bf-theme) :where(.bf-article-pagination-link) {
5682
+ :where(.bf-theme) :where(a.bf-article-pagination-link) {
5483
5683
  background-color: var(--bf-color-background-default);
5484
5684
  border: var(--bf-border-width) solid transparent;
5485
5685
  box-sizing: border-box;
@@ -5495,8 +5695,9 @@ html.u-baseline-grid::after {
5495
5695
  text-decoration: none;
5496
5696
  }
5497
5697
 
5498
- :where(.bf-theme) :where(.bf-article-pagination-link:hover) {
5698
+ :where(.bf-theme) :where(a.bf-article-pagination-link:hover) {
5499
5699
  background-color: var(--bf-color-background-hover);
5700
+ text-decoration: none;
5500
5701
  }
5501
5702
 
5502
5703
  :where(.bf-theme) :where(.bf-article-pagination-link:focus:not(:focus-visible)) {
@@ -5504,8 +5705,8 @@ html.u-baseline-grid::after {
5504
5705
  }
5505
5706
 
5506
5707
  :where(.bf-theme) :where(.bf-article-pagination-link:focus-visible) {
5507
- outline: 2px solid var(--bf-color-focus);
5508
- outline-offset: 2px;
5708
+ outline: 0.125rem solid var(--bf-color-focus);
5709
+ outline-offset: 0.125rem;
5509
5710
  }
5510
5711
 
5511
5712
  :where(.bf-theme) :where(.bf-article-pagination-link.is-previous) {
@@ -5607,12 +5808,12 @@ html.u-baseline-grid::after {
5607
5808
 
5608
5809
  :where(.bf-theme) :where(.bf-article-pagination-link.is-previous:not(:only-child) .bf-article-pagination-label),
5609
5810
  :where(.bf-theme) :where(.bf-article-pagination-link.is-previous:not(:only-child) .bf-article-pagination-title) {
5610
- block-size: 1px;
5811
+ block-size: 0.0625rem;
5611
5812
  border: 0;
5612
5813
  clip: rect(0 0 0 0);
5613
5814
  clip-path: inset(50%);
5614
- inline-size: 1px;
5615
- margin: -1px;
5815
+ inline-size: 0.0625rem;
5816
+ margin: -0.0625rem;
5616
5817
  overflow: hidden;
5617
5818
  padding: 0;
5618
5819
  position: absolute;
@@ -5630,6 +5831,10 @@ html.u-baseline-grid::after {
5630
5831
  padding: 0;
5631
5832
  }
5632
5833
 
5834
+ :where(.bf-theme) :where(.bf-list:has(> .bf-list-item:is(.is-ticked, .is-crossed)), ol.bf-list.is-divided) {
5835
+ padding-inline-start: var(--bf-leading-mark-group-inset);
5836
+ }
5837
+
5633
5838
  :where(.bf-theme) :where(.bf-list-item) {
5634
5839
  font-family: var(--bf-body-font-family, "Ubuntu Sans", "Segoe UI", system-ui, sans-serif);
5635
5840
  font-size: var(--bf-body-font-size, 0.875rem);
@@ -5645,8 +5850,10 @@ html.u-baseline-grid::after {
5645
5850
  }
5646
5851
 
5647
5852
  :where(.bf-theme) :where(.bf-list.is-divided) > :where(.bf-list-item) {
5648
- box-shadow: inset 0 1px 0 var(--bf-color-border-low-contrast);
5649
- padding-block-end: var(--bf-baseline);
5853
+ border-block: var(--bf-border-width) solid transparent;
5854
+ box-shadow: inset 0 0.0625rem 0 var(--bf-color-border-low-contrast);
5855
+ margin-block-end: var(--bf-single-line-row-margin-block-end);
5856
+ padding-block: var(--bf-single-line-row-padding-block);
5650
5857
  }
5651
5858
 
5652
5859
  :where(.bf-theme) :where(.bf-list.is-divided) > :where(.bf-list-item:first-child) {
@@ -5654,7 +5861,7 @@ html.u-baseline-grid::after {
5654
5861
  }
5655
5862
 
5656
5863
  :where(.bf-theme) :where(.bf-list-item.is-ticked, .bf-list-item.is-crossed) {
5657
- padding-inline-start: calc(var(--bf-leading-icon-size) + var(--bf-leading-icon-gap));
5864
+ padding-inline-start: var(--bf-leading-mark-offset);
5658
5865
  position: relative;
5659
5866
  }
5660
5867
 
@@ -5679,10 +5886,6 @@ html.u-baseline-grid::after {
5679
5886
  background-image: var(--bf-ui-icon-error-grey);
5680
5887
  }
5681
5888
 
5682
- :where(.bf-theme) :where(.bf-list.is-divided) > :where(.bf-list-item.is-ticked, .bf-list-item.is-crossed)::before {
5683
- top: calc(var(--bf-leading-icon-offset) + (var(--bf-baseline) * 0.5));
5684
- }
5685
-
5686
5889
  :where(.bf-theme) :where(ol.bf-list.is-divided) {
5687
5890
  counter-reset: bf-list-counter;
5688
5891
  }
@@ -5764,11 +5967,11 @@ html.u-baseline-grid::after {
5764
5967
  background: var(--bf-color-background-alt);
5765
5968
  color: var(--bf-color-link-default);
5766
5969
  display: block;
5767
- left: -999px;
5970
+ left: -62.4375rem;
5768
5971
  max-inline-size: calc(100vw - var(--bf-baseline));
5769
5972
  position: absolute;
5770
5973
  text-decoration: none;
5771
- top: -999px;
5974
+ top: -62.4375rem;
5772
5975
  }
5773
5976
 
5774
5977
  :where(.bf-theme) :where(.bf-skip-link:hover) {
@@ -5777,7 +5980,7 @@ html.u-baseline-grid::after {
5777
5980
 
5778
5981
  :where(.bf-theme) :where(.bf-skip-link:focus, .bf-skip-link:focus-visible) {
5779
5982
  left: calc(var(--bf-baseline) * 0.5);
5780
- outline: 2px solid var(--bf-color-focus);
5983
+ outline: 0.125rem solid var(--bf-color-focus);
5781
5984
  outline-offset: 0;
5782
5985
  padding-block: calc(var(--bf-baseline) * 1.5);
5783
5986
  padding-inline: calc(var(--bf-baseline) * 1.5);
@@ -5828,15 +6031,16 @@ html.u-baseline-grid::after {
5828
6031
  line-height: var(--bf-table-row-line-height);
5829
6032
  margin: 0;
5830
6033
  overflow: hidden;
5831
- padding-block: var(--bf-table-row-padding);
5832
- padding-inline: calc(var(--bf-baseline) * 0.75);
6034
+ padding-block-end: var(--bf-table-row-padding-block-end);
6035
+ padding-block-start: var(--bf-table-row-padding-block-start);
6036
+ padding-inline: var(--bf-component-inline-inset-field);
5833
6037
  text-align: left;
5834
6038
  text-overflow: ellipsis;
5835
6039
  vertical-align: top;
5836
6040
  }
5837
6041
 
5838
6042
  :where(.bf-theme) :where(th.is-icon-placeholder, td.is-icon-placeholder, .bf-table-cell.is-icon-placeholder) {
5839
- padding-inline-start: calc((var(--bf-baseline) * 0.75) + var(--bf-leading-icon-size) + var(--bf-leading-icon-gap));
6043
+ padding-inline-start: calc(var(--bf-component-inline-inset-field) + var(--bf-leading-icon-size) + var(--bf-leading-icon-gap));
5840
6044
  }
5841
6045
 
5842
6046
  :where(.bf-theme) :where(th.is-icon-placeholder, td.is-icon-placeholder, .bf-table-cell.is-icon-placeholder) > :where(.bf-icon:first-child) {
@@ -5894,15 +6098,17 @@ html.u-baseline-grid::after {
5894
6098
  gap: 0;
5895
6099
  inline-size: fit-content;
5896
6100
  justify-self: start;
5897
- margin: 0 var(--bf-ui-chip-padding-inline) var(--bf-field-gap) 0;
6101
+ margin: 0 var(--bf-ui-chip-padding-inline) var(--bf-single-line-row-margin-block-end) 0;
5898
6102
  max-inline-size: 100%;
5899
- min-block-size: var(--bf-ui-chip-block-size);
5900
- padding-block: var(--bf-ui-chip-padding-block);
5901
- padding-inline: var(--bf-ui-chip-padding-inline);
6103
+ padding-block: var(--bf-single-line-row-padding-block);
6104
+ padding-inline: max(0rem, calc(var(--bf-ui-chip-padding-inline) - var(--bf-border-width)));
5902
6105
  position: relative;
5903
6106
  text-decoration: none;
5904
6107
  user-select: none;
5905
- vertical-align: calc(var(--bf-border-width) - var(--bf-body-nudge-start, 0.0775rem));
6108
+ /* Inline-flex exposes the first text child's baseline. The surrounding
6109
+ border-aware row contract now matches buttons instead of inventing a
6110
+ second chip-only occupied height. */
6111
+ vertical-align: baseline;
5906
6112
  white-space: nowrap;
5907
6113
  }
5908
6114
 
@@ -5942,6 +6148,15 @@ html.u-baseline-grid::after {
5942
6148
  --bf-ui-chip-background-active: var(--bf-color-background-information-active);
5943
6149
  }
5944
6150
 
6151
+ :where(.bf-theme) :where(.bf-chip.is-borderless) {
6152
+ --bf-ui-chip-border: transparent;
6153
+ --bf-ui-chip-border-hover: transparent;
6154
+ --bf-ui-chip-border-active: transparent;
6155
+ --bf-ui-chip-background: transparent;
6156
+ --bf-ui-chip-background-hover: transparent;
6157
+ --bf-ui-chip-background-active: transparent;
6158
+ }
6159
+
5945
6160
  :where(.bf-theme) :where(.bf-chip, .bf-chip.is-positive, .bf-chip.is-caution, .bf-chip.is-negative, .bf-chip.is-information):hover {
5946
6161
  background-color: var(--bf-ui-chip-background-hover);
5947
6162
  border-color: var(--bf-ui-chip-border-hover);
@@ -6026,16 +6241,20 @@ html.u-baseline-grid::after {
6026
6241
  --bf-ui-status-background: color-mix(in srgb, var(--bf-color-background-alt) 70%, black);
6027
6242
  --bf-ui-status-color: var(--bf-color-button-positive-text);
6028
6243
  background-color: var(--bf-ui-status-background);
6244
+ border-block: var(--bf-border-width) solid transparent;
6029
6245
  color: var(--bf-ui-status-color);
6030
6246
  display: inline-block;
6247
+ inline-size: fit-content;
6248
+ justify-self: start;
6031
6249
  font-family: var(--bf-body-font-family, "Ubuntu Sans", "Segoe UI", system-ui, sans-serif);
6032
6250
  font-size: var(--bf-body-font-size, 0.875rem);
6033
6251
  font-style: var(--bf-body-font-style, normal);
6034
6252
  font-weight: var(--bf-body-font-weight, 400);
6035
6253
  line-height: var(--bf-body-line-height, 1.25rem);
6036
- margin: 0;
6037
- padding-block-end: var(--bf-h5-nudge-end);
6038
- padding-block-start: var(--bf-h5-nudge-start, 0.11056rem);
6254
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
6255
+ /* Status paint is physically symmetric and shares the same occupied block
6256
+ as a button; typography still comes from the body role. */
6257
+ padding-block: var(--bf-single-line-row-padding-block);
6039
6258
  padding-inline: var(--bf-ui-chip-padding-inline);
6040
6259
  text-align: center;
6041
6260
  text-decoration: none;
@@ -6073,7 +6292,7 @@ html.u-baseline-grid::after {
6073
6292
  margin: 0;
6074
6293
  padding: 0;
6075
6294
  position: relative;
6076
- text-indent: -9999px;
6295
+ text-indent: -624.9375rem;
6077
6296
  }
6078
6297
 
6079
6298
  :where(.bf-theme) :where(.bf-chip-dismiss) {
@@ -6085,7 +6304,7 @@ html.u-baseline-grid::after {
6085
6304
  :where(.bf-theme) :where(.bf-chip-dismiss, .bf-search-box-reset, .bf-search-and-filter-clear)::before,
6086
6305
  :where(.bf-theme) :where(.bf-chip-dismiss, .bf-search-box-reset, .bf-search-and-filter-clear)::after {
6087
6306
  background: currentColor;
6088
- block-size: 2px;
6307
+ block-size: 0.125rem;
6089
6308
  content: "";
6090
6309
  inline-size: 0.75rem;
6091
6310
  left: 50%;
@@ -6103,7 +6322,7 @@ html.u-baseline-grid::after {
6103
6322
 
6104
6323
 
6105
6324
  :where(.bf-theme) :where(.bf-search-box) {
6106
- --bf-search-box-action-inline-size: calc(1rem + (var(--bf-control-inline-padding-field) * 2));
6325
+ --bf-search-box-action-inline-size: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
6107
6326
  --bf-search-box-trailing-inline-size: calc((var(--bf-search-box-action-inline-size) * 2) + var(--bf-border-width));
6108
6327
  display: flex;
6109
6328
  inline-size: 100%;
@@ -6120,12 +6339,12 @@ html.u-baseline-grid::after {
6120
6339
 
6121
6340
  :where(.bf-theme) :where(.bf-search-box-reset, .bf-search-box-button) {
6122
6341
  align-items: center;
6123
- block-size: var(--bf-control-box-size);
6342
+ block-size: auto;
6124
6343
  display: inline-flex;
6125
6344
  inline-size: var(--bf-search-box-action-inline-size);
6345
+ inset-block: 0;
6126
6346
  justify-content: center;
6127
6347
  position: absolute;
6128
- top: 0;
6129
6348
  }
6130
6349
 
6131
6350
  :where(.bf-theme) :where(.bf-search-box-reset) {
@@ -6142,7 +6361,7 @@ html.u-baseline-grid::after {
6142
6361
  inset-inline-end: var(--bf-border-width);
6143
6362
  margin: 0;
6144
6363
  padding: 0;
6145
- text-indent: -9999px;
6364
+ text-indent: -624.9375rem;
6146
6365
  }
6147
6366
 
6148
6367
  :where(.bf-theme) :where(.bf-search-box-button)::before {
@@ -6169,8 +6388,8 @@ html.u-baseline-grid::after {
6169
6388
  }
6170
6389
 
6171
6390
  :where(.bf-theme) :where(.bf-search-box-reset:focus-visible, .bf-search-box-button:focus-visible) {
6172
- outline: 2px solid var(--bf-color-focus);
6173
- outline-offset: -2px;
6391
+ outline: 0.125rem solid var(--bf-color-focus);
6392
+ outline-offset: -0.125rem;
6174
6393
  }
6175
6394
 
6176
6395
  :where(.bf-theme) :where(.bf-search-and-filter) {
@@ -6185,7 +6404,7 @@ html.u-baseline-grid::after {
6185
6404
  :where(.bf-theme) :where(.bf-search-and-filter-search-container) {
6186
6405
  align-items: stretch;
6187
6406
  background: transparent;
6188
- box-shadow: inset 0 -1px 0 var(--bf-color-border-high-contrast);
6407
+ box-shadow: inset 0 -0.0625rem 0 var(--bf-color-border-high-contrast);
6189
6408
  display: flex;
6190
6409
  flex-wrap: wrap;
6191
6410
  gap: var(--bf-field-gap);
@@ -6201,7 +6420,7 @@ html.u-baseline-grid::after {
6201
6420
  }
6202
6421
 
6203
6422
  :where(.bf-theme) :where(.bf-search-and-filter-box) {
6204
- --bf-search-and-filter-action-inline-size: calc(1rem + (var(--bf-control-inline-padding-field) * 2));
6423
+ --bf-search-and-filter-action-inline-size: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
6205
6424
  --bf-search-and-filter-trailing-inline-size: calc(var(--bf-search-and-filter-action-inline-size) * 2);
6206
6425
  display: inline-flex;
6207
6426
  flex: 1 1 12rem;
@@ -6218,17 +6437,17 @@ html.u-baseline-grid::after {
6218
6437
  :where(.bf-theme) :where(.bf-search-and-filter-search-button) {
6219
6438
  appearance: none;
6220
6439
  background: transparent;
6221
- block-size: var(--bf-control-box-size);
6440
+ block-size: auto;
6222
6441
  border: 0;
6223
6442
  color: var(--bf-color-text-default);
6224
6443
  cursor: pointer;
6225
6444
  inline-size: var(--bf-search-and-filter-action-inline-size);
6445
+ inset-block: 0;
6226
6446
  inset-inline-end: 0;
6227
6447
  margin: 0;
6228
6448
  padding: 0;
6229
6449
  position: absolute;
6230
- text-indent: -9999px;
6231
- top: 0;
6450
+ text-indent: -624.9375rem;
6232
6451
  }
6233
6452
 
6234
6453
  :where(.bf-theme) :where(.bf-search-and-filter-search-button)::before {
@@ -6255,16 +6474,16 @@ html.u-baseline-grid::after {
6255
6474
  }
6256
6475
 
6257
6476
  :where(.bf-theme) :where(.bf-search-and-filter-search-button:focus-visible, .bf-search-and-filter-selected-count:focus-visible) {
6258
- outline: 2px solid var(--bf-color-focus);
6259
- outline-offset: -2px;
6477
+ outline: 0.125rem solid var(--bf-color-focus);
6478
+ outline-offset: -0.125rem;
6260
6479
  }
6261
6480
 
6262
6481
  :where(.bf-theme) :where(.bf-search-and-filter-clear) {
6263
- block-size: var(--bf-control-box-size);
6482
+ block-size: auto;
6264
6483
  inline-size: var(--bf-search-and-filter-action-inline-size);
6484
+ inset-block: 0;
6265
6485
  inset-inline-end: var(--bf-search-and-filter-action-inline-size);
6266
6486
  position: absolute;
6267
- top: 0;
6268
6487
  }
6269
6488
 
6270
6489
  :where(.bf-theme) :where(.bf-search-and-filter-selected-count) {
@@ -6294,12 +6513,12 @@ html.u-baseline-grid::after {
6294
6513
  background-color: var(--bf-color-background-inputs);
6295
6514
  border: var(--bf-border-width) solid var(--bf-color-border-default);
6296
6515
  border-top: 0;
6297
- box-shadow: 0 24px 72px rgba(0, 0, 0, 0.38);
6516
+ box-shadow: 0 1.5rem 4.5rem rgba(0, 0, 0, 0.38);
6298
6517
  display: grid;
6299
6518
  gap: var(--bf-field-gap);
6300
6519
  opacity: 1;
6301
6520
  padding-bottom: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
6302
- padding-inline: var(--bf-panel-padding-inline);
6521
+ padding-inline: var(--bf-component-inline-inset-continuation);
6303
6522
  padding-top: var(--bf-panel-padding-block);
6304
6523
  position: absolute;
6305
6524
  top: 100%;
@@ -6344,12 +6563,6 @@ html.u-baseline-grid::after {
6344
6563
  }
6345
6564
 
6346
6565
  :where(.bf-theme) :where(.bf-filter-panel-section-heading) {
6347
- font-family: var(--bf-h6-font-family, "Ubuntu Sans", "Segoe UI", system-ui, sans-serif);
6348
- font-size: var(--bf-h6-font-size, 1.125rem);
6349
- font-style: var(--bf-h6-font-style, normal);
6350
- font-weight: var(--bf-h6-font-weight, 300);
6351
- line-height: var(--bf-h6-line-height, 1.5rem);
6352
- color: var(--bf-color-text-muted);
6353
6566
  margin: 0;
6354
6567
  padding-block: 0;
6355
6568
  }
@@ -6396,7 +6609,7 @@ html.u-baseline-grid::after {
6396
6609
  :where(.bf-theme) :where(.bf-list-tree) {
6397
6610
  list-style: none;
6398
6611
  margin: 0;
6399
- padding-left: calc(var(--bf-baseline) * 0.5);
6612
+ padding-left: 0;
6400
6613
  }
6401
6614
 
6402
6615
  :where(.bf-theme) :where(.bf-list-tree) :where(.bf-list-tree) {
@@ -6410,27 +6623,29 @@ html.u-baseline-grid::after {
6410
6623
  }
6411
6624
 
6412
6625
  :where(.bf-theme) :where(.bf-list-tree-item) {
6626
+ display: grid;
6413
6627
  margin: 0;
6414
- padding-left: calc(var(--bf-baseline) * 1.5);
6628
+ padding-left: 0;
6415
6629
  position: relative;
6416
6630
  }
6417
6631
 
6418
- :where(.bf-theme) :where(.bf-list-tree-link) {
6632
+ :where(.bf-theme) :where(a.bf-list-tree-link) {
6419
6633
  font-family: var(--bf-body-font-family, "Ubuntu Sans", "Segoe UI", system-ui, sans-serif);
6420
6634
  font-size: var(--bf-body-font-size, 0.875rem);
6421
6635
  font-style: var(--bf-body-font-style, normal);
6422
6636
  font-weight: var(--bf-body-font-weight, 400);
6423
6637
  line-height: var(--bf-body-line-height, 1.25rem);
6424
6638
  color: var(--bf-color-text-default);
6639
+ border-block: var(--bf-border-width) solid transparent;
6425
6640
  cursor: pointer;
6426
6641
  display: block;
6427
- margin: 0;
6428
- min-block-size: var(--bf-control-box-size-compact);
6429
- padding-block: var(--bf-control-block-padding-compact);
6642
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
6643
+ padding-block: var(--bf-single-line-row-padding-block);
6644
+ padding-inline: var(--bf-component-inline-inset-continuation) var(--bf-component-inline-inset-action);
6430
6645
  text-decoration: none;
6431
6646
  }
6432
6647
 
6433
- :where(.bf-theme) :where(.bf-list-tree-link):hover {
6648
+ :where(.bf-theme) :where(a.bf-list-tree-link:hover) {
6434
6649
  color: var(--bf-color-link-default);
6435
6650
  text-decoration: underline;
6436
6651
  }
@@ -6444,8 +6659,8 @@ html.u-baseline-grid::after {
6444
6659
  }
6445
6660
 
6446
6661
  :where(.bf-theme) :where(.bf-list-tree-link):focus-visible {
6447
- outline: 2px solid var(--bf-color-focus);
6448
- outline-offset: -2px;
6662
+ outline: 0.125rem solid var(--bf-color-focus);
6663
+ outline-offset: -0.125rem;
6449
6664
  }
6450
6665
 
6451
6666
  :where(.bf-theme) :where(.bf-list-tree-toggle) {
@@ -6457,14 +6672,14 @@ html.u-baseline-grid::after {
6457
6672
  align-items: center;
6458
6673
  background: transparent;
6459
6674
  border: 0;
6675
+ border-block: var(--bf-border-width) solid transparent;
6460
6676
  color: var(--bf-color-text-default);
6461
6677
  cursor: pointer;
6462
- display: inline-flex;
6463
- gap: calc(var(--bf-baseline) * 0.5);
6464
- margin: 0 0 0 calc(var(--bf-baseline) * -1.5);
6465
- min-block-size: var(--bf-control-box-size-compact);
6466
- padding-block: var(--bf-control-block-padding-compact);
6467
- padding-inline: calc(var(--bf-baseline) * 0.25) calc(var(--bf-baseline) * 0.5);
6678
+ display: flex;
6679
+ gap: var(--bf-disclosure-gap);
6680
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
6681
+ padding-block: var(--bf-single-line-row-padding-block);
6682
+ padding-inline: 0 calc(var(--bf-baseline) * 0.5);
6468
6683
  text-align: left;
6469
6684
  width: 100%;
6470
6685
  }
@@ -6478,8 +6693,8 @@ html.u-baseline-grid::after {
6478
6693
  }
6479
6694
 
6480
6695
  :where(.bf-theme) :where(.bf-list-tree-toggle):focus-visible {
6481
- outline: 2px solid var(--bf-color-focus);
6482
- outline-offset: -2px;
6696
+ outline: 0.125rem solid var(--bf-color-focus);
6697
+ outline-offset: -0.125rem;
6483
6698
  }
6484
6699
 
6485
6700
  :where(.bf-theme) :where(.bf-list-tree-toggle)::before {
@@ -6491,20 +6706,42 @@ html.u-baseline-grid::after {
6491
6706
  content: "";
6492
6707
  flex: 0 0 1rem;
6493
6708
  inline-size: 1rem;
6494
- transform: rotate(-90deg);
6709
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block)) rotate(-90deg);
6495
6710
  }
6496
6711
 
6497
6712
  :where(.bf-theme) :where(.bf-list-tree-toggle[aria-expanded='true'])::before {
6498
- transform: rotate(0deg);
6713
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block)) rotate(0deg);
6499
6714
  }
6500
6715
 
6501
6716
 
6502
6717
  :where(.bf-theme) :where(.bf-side-navigation, .bf-side-navigation.is-icons, .bf-side-navigation.is-accordion, .bf-side-navigation.is-raw-html) {
6718
+ /* Plain navigation commands use the action rail. Icon-led rows move only their mark canvas,
6719
+ so their copy reaches the shared continuation rail without a fourth
6720
+ component inset. Navigation depth is added separately below. */
6721
+ /* Navigation copy uses one continuation rail whether a row has a leading
6722
+ disclosure/icon slot or not. The mark canvas is derived backwards from
6723
+ that rail, so iconless rows never introduce a fourth text start. */
6724
+ --bf-side-navigation-content-inset: var(--bf-component-inline-inset-continuation);
6725
+ --bf-side-navigation-disclosure-inset: max(0rem, calc(var(--bf-component-inline-inset-continuation) - var(--bf-disclosure-icon-inline-size) - var(--bf-disclosure-gap)));
6726
+ --bf-side-navigation-depth-step: var(--bf-space-2);
6727
+ --bf-side-navigation-group-gap: 1.5rem;
6503
6728
  color: var(--bf-color-text-inactive);
6504
6729
  display: block;
6505
6730
  inline-size: 100%;
6506
6731
  }
6507
6732
 
6733
+ :where(.bf-theme) :where(.bf-side-navigation-groups) {
6734
+ align-content: start;
6735
+ display: grid;
6736
+ gap: var(--bf-side-navigation-group-gap);
6737
+ }
6738
+
6739
+ :where(.bf-theme) :where(.bf-side-navigation-group) {
6740
+ display: grid;
6741
+ gap: 0rem;
6742
+ min-inline-size: 0;
6743
+ }
6744
+
6508
6745
  :where(.bf-theme) :where(.bf-side-navigation-drawer) {
6509
6746
  background: var(--bf-color-background-default);
6510
6747
  bottom: 0;
@@ -6521,7 +6758,7 @@ html.u-baseline-grid::after {
6521
6758
  }
6522
6759
 
6523
6760
  :where(.bf-theme) :where(.bf-side-navigation, .bf-side-navigation.is-icons, .bf-side-navigation.is-accordion, .bf-side-navigation.is-raw-html):where(.is-drawer-expanded) :where(.bf-side-navigation-drawer) {
6524
- box-shadow: 0 24px 72px rgba(0, 0, 0, 0.38);
6761
+ box-shadow: 0 1.5rem 4.5rem rgba(0, 0, 0, 0.38);
6525
6762
  transform: translateX(0);
6526
6763
  }
6527
6764
 
@@ -6551,7 +6788,7 @@ html.u-baseline-grid::after {
6551
6788
  border-bottom: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
6552
6789
  margin-bottom: calc(var(--bf-baseline) * 2);
6553
6790
  padding-bottom: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
6554
- padding-inline: var(--bf-panel-padding-inline);
6791
+ padding-inline: var(--bf-component-inline-inset-continuation);
6555
6792
  padding-top: var(--bf-panel-padding-block);
6556
6793
  position: sticky;
6557
6794
  top: 0;
@@ -6574,9 +6811,9 @@ html.u-baseline-grid::after {
6574
6811
  display: inline-flex;
6575
6812
  gap: calc(var(--bf-baseline) * 0.5);
6576
6813
  justify-content: center;
6577
- margin: 0 0 calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-button-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
6578
- padding-block: max(0rem, calc(var(--bf-button-block-padding) - var(--bf-border-width)));
6579
- padding-inline: var(--bf-control-inline-padding-action);
6814
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
6815
+ padding-block: var(--bf-single-line-row-padding-block);
6816
+ padding-inline: var(--bf-control-inline-padding-action-bordered);
6580
6817
  text-decoration: none;
6581
6818
  }
6582
6819
 
@@ -6611,8 +6848,8 @@ html.u-baseline-grid::after {
6611
6848
  }
6612
6849
 
6613
6850
  :where(.bf-theme) :where(.bf-side-navigation-toggle:focus-visible) {
6614
- outline: 2px solid var(--bf-color-focus);
6615
- outline-offset: -2px;
6851
+ outline: 0.125rem solid var(--bf-color-focus);
6852
+ outline-offset: -0.125rem;
6616
6853
  }
6617
6854
 
6618
6855
  :where(.bf-theme) :where(.bf-side-navigation-heading, .bf-side-navigation-heading.is-linked) {
@@ -6624,22 +6861,22 @@ html.u-baseline-grid::after {
6624
6861
  display: block;
6625
6862
  margin: 0 0 var(--bf-body-margin-bottom);
6626
6863
  padding-block: var(--bf-body-nudge-start) 0;
6864
+ padding-inline: var(--bf-side-navigation-content-inset);
6627
6865
  }
6628
6866
 
6629
- :where(.bf-theme) :where(.bf-side-navigation-list) {
6630
- border-bottom: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
6631
- list-style: none;
6632
- margin: 0 0 calc(var(--bf-baseline) * 2);
6633
- padding: 0 0 calc((var(--bf-baseline) * 2) - var(--bf-border-width));
6867
+ :where(.bf-theme) :where(.bf-side-navigation-heading.is-linked) {
6868
+ padding-inline: 0;
6634
6869
  }
6635
6870
 
6636
- :where(.bf-theme) :where(.bf-side-navigation-list:last-of-type) {
6637
- border-bottom: 0;
6638
- margin-bottom: 0;
6639
- padding-bottom: 0;
6871
+ :where(.bf-theme) :where(.bf-side-navigation-list) {
6872
+ display: grid;
6873
+ list-style: none;
6874
+ margin: 0;
6875
+ padding: 0;
6640
6876
  }
6641
6877
 
6642
6878
  :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title) {
6879
+ display: grid;
6643
6880
  margin: 0;
6644
6881
  position: relative;
6645
6882
  }
@@ -6653,21 +6890,23 @@ html.u-baseline-grid::after {
6653
6890
  align-items: center;
6654
6891
  background: transparent;
6655
6892
  border: 0;
6893
+ border-block: var(--bf-border-width) solid transparent;
6656
6894
  color: var(--bf-color-text-inactive);
6657
6895
  display: flex;
6658
6896
  gap: calc(var(--bf-baseline) * 0.5);
6659
6897
  inline-size: 100%;
6660
6898
  justify-content: flex-start;
6661
- margin: 0;
6662
- min-block-size: var(--bf-control-box-size-compact);
6663
- padding-block: max(0rem, calc(var(--bf-control-block-padding-compact) - 0rem));
6664
- padding-inline: var(--bf-panel-padding-inline);
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-side-navigation-content-inset);
6902
+ --bf-side-navigation-row-inset: var(--bf-side-navigation-content-inset);
6665
6903
  position: relative;
6666
6904
  text-align: left;
6667
6905
  text-decoration: none;
6668
6906
  }
6669
6907
 
6670
6908
  :where(.bf-theme) :where(.bf-side-navigation-accordion-button) {
6909
+ --bf-side-navigation-row-inset: var(--bf-side-navigation-disclosure-inset);
6671
6910
  gap: var(--bf-disclosure-gap);
6672
6911
  }
6673
6912
 
@@ -6676,22 +6915,21 @@ html.u-baseline-grid::after {
6676
6915
  font-weight: 600;
6677
6916
  }
6678
6917
 
6679
- :where(.bf-theme) :where(.bf-side-navigation-heading, .bf-side-navigation-heading.is-linked),
6680
6918
  :where(.bf-theme) :where(.bf-side-navigation-list) > :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title) > :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
6681
- padding-inline-start: var(--bf-panel-padding-inline);
6919
+ padding-inline-start: var(--bf-side-navigation-row-inset, var(--bf-side-navigation-content-inset));
6682
6920
  }
6683
6921
 
6684
6922
  :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
6685
6923
  :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
6686
6924
  > :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
6687
- padding-inline-start: calc(var(--bf-panel-padding-inline) + (var(--bf-baseline) * 2));
6925
+ padding-inline-start: calc(var(--bf-side-navigation-row-inset, var(--bf-side-navigation-content-inset)) + var(--bf-side-navigation-depth-step));
6688
6926
  }
6689
6927
 
6690
6928
  :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
6691
6929
  :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
6692
6930
  :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
6693
6931
  > :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
6694
- padding-inline-start: calc(var(--bf-panel-padding-inline) + (var(--bf-baseline) * 4));
6932
+ padding-inline-start: calc(var(--bf-side-navigation-row-inset, var(--bf-side-navigation-content-inset)) + (var(--bf-side-navigation-depth-step) * 2));
6695
6933
  }
6696
6934
 
6697
6935
  :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
@@ -6699,7 +6937,7 @@ html.u-baseline-grid::after {
6699
6937
  :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
6700
6938
  :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
6701
6939
  > :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
6702
- padding-inline-start: calc(var(--bf-panel-padding-inline) + (var(--bf-baseline) * 6));
6940
+ padding-inline-start: calc(var(--bf-side-navigation-row-inset, var(--bf-side-navigation-content-inset)) + (var(--bf-side-navigation-depth-step) * 3));
6703
6941
  }
6704
6942
 
6705
6943
  :where(.bf-theme) :where(.bf-side-navigation-link:hover, .bf-side-navigation-accordion-button:hover) {
@@ -6708,13 +6946,17 @@ html.u-baseline-grid::after {
6708
6946
  text-decoration: none;
6709
6947
  }
6710
6948
 
6949
+ :where(.bf-theme) :where(a.bf-side-navigation-link:is(:hover, :active)) {
6950
+ text-decoration: none;
6951
+ }
6952
+
6711
6953
  :where(.bf-theme) :where(.bf-side-navigation-link:focus:not(:focus-visible), .bf-side-navigation-accordion-button:focus:not(:focus-visible)) {
6712
6954
  outline: none;
6713
6955
  }
6714
6956
 
6715
6957
  :where(.bf-theme) :where(.bf-side-navigation-link:focus-visible, .bf-side-navigation-accordion-button:focus-visible) {
6716
- outline: 2px solid var(--bf-color-focus);
6717
- outline-offset: -2px;
6958
+ outline: 0.125rem solid var(--bf-color-focus);
6959
+ outline-offset: -0.125rem;
6718
6960
  }
6719
6961
 
6720
6962
  :where(.bf-theme) :where(.bf-side-navigation-link.is-active, .bf-side-navigation-link[aria-current='page'], .bf-side-navigation-link[aria-current='true']) {
@@ -6885,13 +7127,17 @@ html.u-baseline-grid::after {
6885
7127
  text-decoration: none;
6886
7128
  }
6887
7129
 
7130
+ :where(.bf-theme) :where(a.bf-top-navigation-link:is(:hover, :active)) {
7131
+ text-decoration: none;
7132
+ }
7133
+
6888
7134
  :where(.bf-theme) :where(.bf-top-navigation-link:focus:not(:focus-visible), .bf-top-navigation-menu-toggle:focus:not(:focus-visible), .bf-top-navigation-search-toggle:focus:not(:focus-visible)) {
6889
7135
  outline: none;
6890
7136
  }
6891
7137
 
6892
7138
  :where(.bf-theme) :where(.bf-top-navigation-link:focus-visible, .bf-top-navigation-menu-toggle:focus-visible, .bf-top-navigation-search-toggle:focus-visible) {
6893
- outline: 2px solid var(--bf-color-focus);
6894
- outline-offset: -2px;
7139
+ outline: 0.125rem solid var(--bf-color-focus);
7140
+ outline-offset: -0.125rem;
6895
7141
  }
6896
7142
 
6897
7143
  :where(.bf-theme) :where(.bf-top-navigation-item.is-selected) > :where(.bf-top-navigation-link),
@@ -7015,8 +7261,8 @@ html.u-baseline-grid::after {
7015
7261
  }
7016
7262
 
7017
7263
  :where(.bf-theme) :where(.bf-top-navigation-dropdown-item:focus-visible) {
7018
- outline: 2px solid var(--bf-color-focus);
7019
- outline-offset: -2px;
7264
+ outline: 0.125rem solid var(--bf-color-focus);
7265
+ outline-offset: -0.125rem;
7020
7266
  }
7021
7267
 
7022
7268
  :where(.bf-theme) :where(.bf-top-navigation-search-label) {
@@ -7187,11 +7433,12 @@ html.u-baseline-grid::after {
7187
7433
  content: "";
7188
7434
  flex: 0 0 var(--bf-disclosure-icon-inline-size);
7189
7435
  inline-size: var(--bf-disclosure-icon-inline-size);
7436
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block));
7190
7437
  transition: transform 120ms ease;
7191
7438
  }
7192
7439
 
7193
7440
  :where(.bf-theme) :where(.bf-side-navigation-accordion-button[aria-expanded='false'], .bf-side-navigation-expand[aria-expanded='false'])::before {
7194
- transform: rotate(-90deg);
7441
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block)) rotate(-90deg);
7195
7442
  }
7196
7443
 
7197
7444
  :where(.bf-theme) :where(.bf-side-navigation-expand) {
@@ -7256,14 +7503,34 @@ html.u-baseline-grid::after {
7256
7503
  }
7257
7504
 
7258
7505
  :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
7506
+ --bf-side-navigation-row-inset: max(0rem, calc(var(--bf-component-inline-inset-continuation) - 1rem - var(--bf-side-navigation-icon-gap)));
7259
7507
  align-items: baseline;
7260
7508
  column-gap: var(--bf-side-navigation-icon-gap);
7261
7509
  }
7262
7510
 
7511
+ /* Icon navigation keeps one stable label edge. Rows may omit a decorative
7512
+ icon without collapsing the shared icon track and pulling their copy left. */
7513
+ :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 {
7514
+ content: "";
7515
+ flex: 0 0 1rem;
7516
+ inline-size: 1rem;
7517
+ }
7518
+
7519
+ /* A collapsed icon rail cannot communicate an iconless destination. Remove
7520
+ the alignment spacer with the hidden label so it cannot become a blank
7521
+ visual affordance in that state. */
7522
+ :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-link, .bf-side-navigation-text):not(:has(> .bf-side-navigation-icon))::before {
7523
+ content: none;
7524
+ }
7525
+
7263
7526
  /* Icon-navigation headings share the label edge, not the icon edge. This
7264
7527
  keeps section names aligned with both the menu copy and a tagged wordmark. */
7265
- :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-heading, .bf-side-navigation-heading.is-linked) {
7266
- padding-inline-start: calc(var(--bf-panel-padding-inline) + 1rem + var(--bf-side-navigation-icon-gap));
7528
+ :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-heading:not(.is-linked)) {
7529
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
7530
+ }
7531
+
7532
+ :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-heading.is-linked) > :where(.bf-side-navigation-link) {
7533
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
7267
7534
  }
7268
7535
 
7269
7536
  :where(.bf-theme) :where(.bf-side-navigation-icon) > svg {
@@ -7307,7 +7574,7 @@ html.u-baseline-grid::after {
7307
7574
  :where(.bf-theme) :where(.bf-contextual-menu-dropdown) {
7308
7575
  background: var(--bf-color-background-default);
7309
7576
  border: var(--bf-border-width) solid var(--bf-color-border-default);
7310
- box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28);
7577
+ box-shadow: 0 0.75rem 2rem rgba(0, 0, 0, 0.28);
7311
7578
  display: none;
7312
7579
  list-style: none;
7313
7580
  margin: 0;
@@ -7341,7 +7608,7 @@ html.u-baseline-grid::after {
7341
7608
  }
7342
7609
 
7343
7610
  :where(.bf-theme) :where(.bf-contextual-menu-group) + :where(.bf-contextual-menu-group) {
7344
- box-shadow: inset 0 1px 0 var(--bf-color-border-default);
7611
+ box-shadow: inset 0 0.0625rem 0 var(--bf-color-border-default);
7345
7612
  }
7346
7613
 
7347
7614
  :where(.bf-theme) :where(.bf-contextual-menu-link) {
@@ -7359,7 +7626,7 @@ html.u-baseline-grid::after {
7359
7626
  margin: 0;
7360
7627
  overflow: hidden;
7361
7628
  padding-block: var(--bf-control-block-padding-compact);
7362
- padding-inline: var(--bf-panel-padding-inline);
7629
+ padding-inline: var(--bf-component-inline-inset-action);
7363
7630
  text-align: left;
7364
7631
  text-decoration: none;
7365
7632
  text-overflow: ellipsis;
@@ -7385,8 +7652,8 @@ html.u-baseline-grid::after {
7385
7652
  }
7386
7653
 
7387
7654
  :where(.bf-theme) :where(.bf-contextual-menu-link):focus-visible {
7388
- outline: 2px solid var(--bf-color-focus);
7389
- outline-offset: -2px;
7655
+ outline: 0.125rem solid var(--bf-color-focus);
7656
+ outline-offset: -0.125rem;
7390
7657
  }
7391
7658
 
7392
7659
  :where(.bf-theme) :where(.bf-contextual-menu-link.is-disabled, .bf-contextual-menu-link[disabled]) {
@@ -7414,7 +7681,7 @@ html.u-baseline-grid::after {
7414
7681
  font-weight: var(--bf-body-font-weight, 400);
7415
7682
  line-height: var(--bf-body-line-height, 1.25rem);
7416
7683
  background-color: var(--bf-color-background-alt);
7417
- box-shadow: inset 0 0 0 var(--bf-border-width) var(--bf-color-border-default), 0 12px 32px rgba(0, 0, 0, 0.24);
7684
+ 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);
7418
7685
  color: var(--bf-color-text-default);
7419
7686
  inline-size: max-content;
7420
7687
  left: 0;
@@ -7423,7 +7690,7 @@ html.u-baseline-grid::after {
7423
7690
  opacity: 0;
7424
7691
  padding-block-end: var(--bf-body-nudge-end);
7425
7692
  padding-block-start: var(--bf-body-nudge-start, 0.0775rem);
7426
- padding-inline: var(--bf-panel-padding-inline);
7693
+ padding-inline: var(--bf-component-inline-inset-continuation);
7427
7694
  pointer-events: none;
7428
7695
  position: absolute;
7429
7696
  top: 100%;
@@ -7567,10 +7834,10 @@ html.u-baseline-grid::after {
7567
7834
  display: inline-flex;
7568
7835
  gap: calc(var(--bf-baseline) * 0.5);
7569
7836
  justify-content: center;
7570
- margin-bottom: calc(0rem + mod(calc(var(--bf-baseline) - mod(calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-button-block-padding) * 2)), var(--bf-baseline))), var(--bf-baseline)));
7837
+ margin-bottom: var(--bf-single-line-row-margin-block-end);
7571
7838
  min-inline-size: var(--bf-control-box-size);
7572
7839
  padding-block: max(0rem, calc(var(--bf-button-block-padding) - var(--bf-border-width)));
7573
- padding-inline: var(--bf-control-inline-padding-action);
7840
+ padding-inline: var(--bf-control-inline-padding-action-bordered);
7574
7841
  text-align: center;
7575
7842
  text-decoration: none;
7576
7843
  }
@@ -7584,8 +7851,8 @@ html.u-baseline-grid::after {
7584
7851
  }
7585
7852
 
7586
7853
  :where(.bf-theme) :where(.bf-pagination-link:focus-visible, .bf-pagination-link.is-previous:focus-visible, .bf-pagination-link.is-next:focus-visible) {
7587
- outline: 2px solid var(--bf-color-focus);
7588
- outline-offset: 2px;
7854
+ outline: 0.125rem solid var(--bf-color-focus);
7855
+ outline-offset: 0.125rem;
7589
7856
  }
7590
7857
 
7591
7858
  :where(.bf-theme) :where(.bf-pagination-link.is-active, .bf-pagination-link[aria-current='page'], .bf-pagination-link[aria-current='true']) {
@@ -7664,14 +7931,15 @@ html.u-baseline-grid::after {
7664
7931
  appearance: none;
7665
7932
  background: transparent;
7666
7933
  border: 0;
7934
+ border-block: var(--bf-border-width) solid transparent;
7667
7935
  color: var(--bf-color-text-default);
7668
7936
  cursor: pointer;
7669
7937
  display: flex;
7670
7938
  gap: var(--bf-disclosure-gap);
7671
7939
  inline-size: 100%;
7672
7940
  justify-content: flex-start;
7673
- min-block-size: var(--bf-control-box-size);
7674
- padding-block: var(--bf-control-block-padding);
7941
+ margin-block-end: var(--bf-single-line-row-margin-block-end);
7942
+ padding-block: var(--bf-single-line-row-padding-block);
7675
7943
  padding-inline: 0;
7676
7944
  text-align: left;
7677
7945
  }
@@ -7681,8 +7949,8 @@ html.u-baseline-grid::after {
7681
7949
  }
7682
7950
 
7683
7951
  :where(.bf-theme) :where(.bf-accordion-tab):focus-visible {
7684
- outline: 2px solid var(--bf-color-focus);
7685
- outline-offset: 2px;
7952
+ outline: 0.125rem solid var(--bf-color-focus);
7953
+ outline-offset: 0.125rem;
7686
7954
  }
7687
7955
 
7688
7956
  :where(.bf-theme) :where(.bf-accordion-tab)::before {
@@ -7695,18 +7963,19 @@ html.u-baseline-grid::after {
7695
7963
  display: inline-block;
7696
7964
  flex: none;
7697
7965
  inline-size: var(--bf-disclosure-icon-inline-size);
7966
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block));
7698
7967
  transition: transform 120ms ease;
7699
7968
  }
7700
7969
 
7701
7970
  :where(.bf-theme) :where(.bf-accordion-tab[aria-expanded='false'])::before {
7702
- transform: rotate(-90deg);
7971
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block)) rotate(-90deg);
7703
7972
  }
7704
7973
 
7705
7974
  :where(.bf-theme) :where(.bf-accordion-panel) {
7706
7975
  margin: 0;
7707
7976
  overflow: hidden;
7708
7977
  padding-block-start: var(--bf-baseline);
7709
- padding-inline-start: calc(var(--bf-accordion-indent) + var(--bf-body-font-size, 0.875rem) + var(--bf-baseline));
7978
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
7710
7979
  }
7711
7980
 
7712
7981
  :where(.bf-theme) :where(.bf-accordion-panel[aria-hidden='true']) {
@@ -7772,7 +8041,7 @@ html.u-baseline-grid::after {
7772
8041
  :where(.bf-theme) :where(.bf-modal-header, .bf-modal-body, .bf-modal-footer) {
7773
8042
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
7774
8043
  padding-block-start: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
7775
- padding-inline: var(--bf-panel-padding-inline);
8044
+ padding-inline: var(--bf-component-inline-inset-continuation);
7776
8045
  }
7777
8046
 
7778
8047
  :where(.bf-theme) :where(.bf-modal-header) {
@@ -7846,7 +8115,7 @@ html.u-baseline-grid::after {
7846
8115
  :where(.bf-theme) :where(.bf-code-snippet-header) {
7847
8116
  align-items: start;
7848
8117
  background: var(--bf-color-background-active);
7849
- box-shadow: inset 0 -1px 0 var(--bf-color-border-default);
8118
+ box-shadow: inset 0 -0.0625rem 0 var(--bf-color-border-default);
7850
8119
  display: flex;
7851
8120
  flex-wrap: wrap;
7852
8121
  justify-content: space-between;
@@ -7868,7 +8137,7 @@ html.u-baseline-grid::after {
7868
8137
  margin: 0;
7869
8138
  overflow-wrap: anywhere;
7870
8139
  padding-block: var(--bf-panel-padding-block);
7871
- padding-inline: var(--bf-panel-padding-inline);
8140
+ padding-inline: var(--bf-component-inline-inset-continuation);
7872
8141
  }
7873
8142
 
7874
8143
  :where(.bf-theme) :where(.bf-code-snippet-dropdowns) {
@@ -7883,7 +8152,7 @@ html.u-baseline-grid::after {
7883
8152
  :where(.bf-theme) :where(.bf-code-snippet-header.is-stacked) :where(.bf-code-snippet-dropdowns) {
7884
8153
  justify-content: stretch;
7885
8154
  margin-inline-start: 0;
7886
- box-shadow: inset 0 1px 0 var(--bf-color-border-default);
8155
+ box-shadow: inset 0 0.0625rem 0 var(--bf-color-border-default);
7887
8156
  width: 100%;
7888
8157
  }
7889
8158
 
@@ -7902,12 +8171,12 @@ html.u-baseline-grid::after {
7902
8171
  min-block-size: calc(var(--bf-body-line-height, 1.25rem) + (var(--bf-panel-padding-block) * 2));
7903
8172
  min-inline-size: 0;
7904
8173
  padding-block: var(--bf-panel-padding-block);
7905
- padding-inline: var(--bf-panel-padding-inline);
8174
+ padding-inline: var(--bf-component-inline-inset-action);
7906
8175
  text-align: start;
7907
8176
  }
7908
8177
 
7909
8178
  :where(.bf-theme) :where(.bf-code-snippet-dropdown) + :where(.bf-code-snippet-dropdown) {
7910
- box-shadow: inset 1px 0 0 var(--bf-color-border-default);
8179
+ box-shadow: inset 0.0625rem 0 0 var(--bf-color-border-default);
7911
8180
  }
7912
8181
 
7913
8182
  :where(.bf-theme) :where(.bf-code-snippet-dropdown):focus:not(:focus-visible) {
@@ -7915,8 +8184,8 @@ html.u-baseline-grid::after {
7915
8184
  }
7916
8185
 
7917
8186
  :where(.bf-theme) :where(.bf-code-snippet-dropdown):focus-visible {
7918
- outline: 2px solid var(--bf-color-focus);
7919
- outline-offset: -2px;
8187
+ outline: 0.125rem solid var(--bf-color-focus);
8188
+ outline-offset: -0.125rem;
7920
8189
  }
7921
8190
 
7922
8191
  :where(.bf-theme) :where(.bf-code-snippet-block, .bf-code-snippet-block.is-icon, .bf-code-snippet-block.is-numbered) {
@@ -7931,7 +8200,7 @@ html.u-baseline-grid::after {
7931
8200
  min-inline-size: 0;
7932
8201
  overflow-x: auto;
7933
8202
  padding-block: var(--bf-panel-padding-block);
7934
- padding-inline: var(--bf-panel-padding-inline);
8203
+ padding-inline: var(--bf-component-inline-inset-continuation);
7935
8204
  tab-size: 2;
7936
8205
  white-space: pre;
7937
8206
  }
@@ -7947,7 +8216,7 @@ html.u-baseline-grid::after {
7947
8216
 
7948
8217
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon) {
7949
8218
  cursor: copy;
7950
- padding-inline-start: calc(var(--bf-panel-padding-inline) + (var(--bf-baseline) * 3));
8219
+ padding-inline-start: calc(var(--bf-component-inline-inset-continuation) + (var(--bf-baseline) * 3));
7951
8220
  position: relative;
7952
8221
  }
7953
8222
 
@@ -7959,7 +8228,7 @@ html.u-baseline-grid::after {
7959
8228
  line-height: var(--bf-h6-line-height, 1.5rem);
7960
8229
  color: var(--bf-color-text-muted);
7961
8230
  content: "$";
7962
- inset-inline-start: var(--bf-panel-padding-inline);
8231
+ inset-inline-start: var(--bf-component-inline-inset-continuation);
7963
8232
  inset-block-start: var(--bf-panel-padding-block);
7964
8233
  position: absolute;
7965
8234
  }
@@ -7974,7 +8243,7 @@ html.u-baseline-grid::after {
7974
8243
 
7975
8244
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon.is-copied) {
7976
8245
  background: color-mix(in srgb, var(--bf-color-background-alt) 78%, var(--bf-color-background-information-default));
7977
- box-shadow: inset 0 0 0 1px var(--bf-color-border-information);
8246
+ box-shadow: inset 0 0 0 0.0625rem var(--bf-color-border-information);
7978
8247
  }
7979
8248
 
7980
8249
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon):focus:not(:focus-visible) {
@@ -7982,8 +8251,8 @@ html.u-baseline-grid::after {
7982
8251
  }
7983
8252
 
7984
8253
  :where(.bf-theme) :where(.bf-code-snippet-block.is-icon):focus-visible {
7985
- outline: 2px solid var(--bf-color-focus);
7986
- outline-offset: -2px;
8254
+ outline: 0.125rem solid var(--bf-color-focus);
8255
+ outline-offset: -0.125rem;
7987
8256
  }
7988
8257
 
7989
8258
  :where(.bf-theme) :where(.bf-code-snippet-block.is-numbered) {
@@ -8045,6 +8314,32 @@ html.u-baseline-grid::after {
8045
8314
  z-index: 40;
8046
8315
  }
8047
8316
 
8317
+ /* A responsive application brand occupies the persistent bar only while the
8318
+ * full navigation brand is unavailable. The same public tagged-logo contract
8319
+ * is used in both locations; state CSS guarantees that only one copy is
8320
+ * visible and exposed at a time. */
8321
+ :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) :where(.bf-panel-header.is-navigation-brand) {
8322
+ align-items: start;
8323
+ column-gap: calc(var(--bf-baseline) * 2);
8324
+ padding-inline-end: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
8325
+ }
8326
+
8327
+ :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) {
8328
+ margin-block-end: calc(var(--bf-border-width) * -1);
8329
+ }
8330
+
8331
+ :where(.bf-theme) :where(.bf-navigation-bar.is-responsive) :where(.bf-panel-header.is-navigation-brand) > :where(.bf-top-navigation-logo.is-canonical-tagged) {
8332
+ flex: 1 1 12rem;
8333
+ inline-size: auto;
8334
+ min-inline-size: 0;
8335
+ }
8336
+
8337
+ :where(.bf-theme) :where(.bf-application:has(> .bf-navigation:not(.is-collapsed)))
8338
+ > :where(.bf-navigation-bar.is-responsive)
8339
+ :where(.bf-top-navigation-logo) {
8340
+ visibility: hidden;
8341
+ }
8342
+
8048
8343
  :where(.bf-theme) :where(.bf-navigation) {
8049
8344
  grid-column: 1 / -1;
8050
8345
  grid-row: 1 / -1;
@@ -8091,7 +8386,7 @@ html.u-baseline-grid::after {
8091
8386
  }
8092
8387
 
8093
8388
  :where(.bf-theme) :where(.bf-navigation:not(.is-collapsed)) > :where(.bf-navigation-drawer) {
8094
- box-shadow: 0 24px 72px rgba(0, 0, 0, 0.38);
8389
+ box-shadow: 0 1.5rem 4.5rem rgba(0, 0, 0, 0.38);
8095
8390
  transform: translateX(0);
8096
8391
  visibility: visible;
8097
8392
  }
@@ -8101,10 +8396,10 @@ html.u-baseline-grid::after {
8101
8396
  }
8102
8397
 
8103
8398
  :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-label) {
8104
- block-size: 1px;
8399
+ block-size: 0.0625rem;
8105
8400
  clip-path: inset(50%);
8106
- inline-size: 1px;
8107
- max-inline-size: 1px;
8401
+ inline-size: 0.0625rem;
8402
+ max-inline-size: 0.0625rem;
8108
8403
  opacity: 0;
8109
8404
  overflow: hidden;
8110
8405
  pointer-events: none;
@@ -8122,8 +8417,8 @@ html.u-baseline-grid::after {
8122
8417
  padding-inline: calc(var(--bf-baseline) * 1.25);
8123
8418
  }
8124
8419
 
8125
- :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-list) {
8126
- border-bottom-color: transparent;
8420
+ :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-list)::after {
8421
+ content: none;
8127
8422
  }
8128
8423
 
8129
8424
  :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) {
@@ -8136,6 +8431,14 @@ html.u-baseline-grid::after {
8136
8431
  grid-template-rows: minmax(0, 1fr);
8137
8432
  }
8138
8433
 
8434
+ :where(.bf-theme) :where(.bf-application:has(> .bf-navigation)):has(> .bf-aside.is-pinned:not(.is-collapsed)) {
8435
+ grid-template-areas:
8436
+ "navigation-bar navigation-bar"
8437
+ "main aside";
8438
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--bf-application-aside-width));
8439
+ grid-template-rows: min-content minmax(0, 1fr);
8440
+ }
8441
+
8139
8442
  :where(.bf-theme) :where(.bf-main) {
8140
8443
  grid-area: main;
8141
8444
  min-block-size: 0;
@@ -8174,7 +8477,7 @@ html.u-baseline-grid::after {
8174
8477
  :where(.bf-theme) :where(.bf-aside.is-overlay, .bf-aside.is-drawer) {
8175
8478
  align-self: stretch;
8176
8479
  block-size: auto;
8177
- box-shadow: 0 24px 72px rgba(0, 0, 0, 0.38);
8480
+ box-shadow: 0 1.5rem 4.5rem rgba(0, 0, 0, 0.38);
8178
8481
  bottom: 0;
8179
8482
  grid-column: 1 / -1;
8180
8483
  grid-row: 1 / -1;
@@ -8264,14 +8567,14 @@ html.u-baseline-grid::after {
8264
8567
 
8265
8568
  :where(.bf-theme) :where(.bf-application-aside-resize-handle)::after {
8266
8569
  background: var(--bf-color-border-default);
8267
- border-radius: 999px;
8570
+ border-radius: 62.4375rem;
8268
8571
  content: "";
8269
8572
  inset-block: var(--bf-panel-padding-block);
8270
- inset-inline-start: calc(50% - 1px);
8573
+ inset-inline-start: calc(50% - 0.0625rem);
8271
8574
  opacity: 0.95;
8272
8575
  position: absolute;
8273
8576
  transition: background-color 120ms ease, opacity 120ms ease;
8274
- width: 2px;
8577
+ width: 0.125rem;
8275
8578
  }
8276
8579
 
8277
8580
  :where(.bf-theme) :where(.bf-application-aside-resize-handle):hover::after,
@@ -8281,8 +8584,8 @@ html.u-baseline-grid::after {
8281
8584
  }
8282
8585
 
8283
8586
  :where(.bf-theme) :where(.bf-application-aside-resize-handle):focus-visible {
8284
- outline: 2px solid var(--bf-application-resize-handle-focus-ring);
8285
- outline-offset: -2px;
8587
+ outline: 0.125rem solid var(--bf-application-resize-handle-focus-ring);
8588
+ outline-offset: -0.125rem;
8286
8589
  }
8287
8590
 
8288
8591
  @media (min-width: 64.75rem) {
@@ -8301,6 +8604,16 @@ html.u-baseline-grid::after {
8301
8604
  grid-template-columns: minmax(0, var(--bf-application-navigation-width)) minmax(0, 1fr) minmax(0, var(--bf-application-aside-width));
8302
8605
  }
8303
8606
 
8607
+ :where(.bf-theme) :where(.bf-application:has(> .bf-navigation:not(.is-collapsed))) > :where(.bf-navigation-bar.is-responsive) {
8608
+ block-size: 0;
8609
+ border: 0;
8610
+ min-block-size: 0;
8611
+ overflow: hidden;
8612
+ pointer-events: none;
8613
+ position: absolute;
8614
+ visibility: hidden;
8615
+ }
8616
+
8304
8617
  :where(.bf-theme) :where(.bf-application:has(> .bf-navigation.is-collapsed)) {
8305
8618
  --bf-application-navigation-width: var(--bf-application-navigation-width-collapsed);
8306
8619
  }
@@ -8346,8 +8659,8 @@ html.u-baseline-grid::after {
8346
8659
  }
8347
8660
 
8348
8661
  /* The tagged treatment is opt-in. The Circle of Friends is aligned to the
8349
- * first title line, then the 38px tag extends upward to the navigation edge.
8350
- * Its 22px inline size preserves the established 38:22 (~1.73) tag ratio; the
8662
+ * first title line, then the 2.375rem tag extends upward to the navigation edge.
8663
+ * Its 1.375rem inline size preserves the established 38:22 (~1.73) tag ratio; the
8351
8664
  * tag must not stretch to the full occupied navigation row. */
8352
8665
  :where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) {
8353
8666
  min-inline-size: 0;
@@ -8401,8 +8714,8 @@ html.u-baseline-grid::after {
8401
8714
  line-height: var(--bf-top-navigation-logo-title-line-height, var(--bf-body-line-height, 1.5));
8402
8715
  overflow: visible;
8403
8716
  overflow-wrap: anywhere;
8404
- /* The first title line and the 16px mark share the mark's fixed centre:
8405
- * tag block-end minus the 6px inset minus half the mark. Symmetric title
8717
+ /* The first title line and the 1rem mark share the mark's fixed centre:
8718
+ * tag block-end minus the 0.375rem inset minus half the mark. Symmetric title
8406
8719
  * padding keeps the occupied row stable across all four type-density tiers. */
8407
8720
  padding-block: calc(
8408
8721
  var(--bf-top-navigation-logo-tag-block-size)
@@ -8488,11 +8801,15 @@ html.u-baseline-grid::after {
8488
8801
  :where(.bf-theme) :where(.bf-in-page-navigation) {
8489
8802
  container-name: bf-in-page-navigation;
8490
8803
  container-type: inline-size;
8491
- margin-block: 0 var(--bf-section-space-shallow);
8804
+ margin: 0;
8492
8805
  min-inline-size: 0;
8493
8806
  }
8494
8807
 
8495
8808
  :where(.bf-theme) :where(.bf-in-page-navigation-nav) {
8809
+ --bf-stack-space: var(--bf-space-1);
8810
+ align-content: start;
8811
+ display: grid;
8812
+ gap: var(--bf-stack-space);
8496
8813
  max-block-size: 100dvb;
8497
8814
  min-inline-size: 0;
8498
8815
  overflow: auto;
@@ -8508,12 +8825,17 @@ html.u-baseline-grid::after {
8508
8825
  line-height: var(--bf-h6-line-height, 1.5rem);
8509
8826
  color: var(--bf-color-text-muted);
8510
8827
  display: block;
8511
- margin: 0 0 var(--bf-space-1);
8512
- padding-block: var(--bf-h6-nudge-start) var(--bf-h6-nudge-end);
8828
+ margin-block: 0 var(--bf-h6-margin-bottom);
8829
+ padding-block-end: 0;
8830
+ padding-block-start: var(--bf-h6-nudge-start);
8513
8831
  }
8514
8832
 
8515
8833
  :where(.bf-theme) :where(.bf-in-page-navigation-list) {
8834
+ --bf-stack-space: var(--bf-space-1);
8835
+ align-content: start;
8516
8836
  border-inline-start: var(--bf-bar-thickness) solid var(--bf-color-border-low-contrast);
8837
+ display: grid;
8838
+ gap: var(--bf-stack-space);
8517
8839
  list-style: none;
8518
8840
  margin: 0;
8519
8841
  min-inline-size: 0;
@@ -8521,13 +8843,16 @@ html.u-baseline-grid::after {
8521
8843
  }
8522
8844
 
8523
8845
  :where(.bf-theme) :where(.bf-in-page-navigation-item) {
8846
+ align-content: start;
8847
+ display: grid;
8848
+ gap: var(--bf-stack-space);
8524
8849
  margin: 0;
8525
8850
  min-inline-size: 0;
8526
8851
  padding: 0;
8527
8852
  position: relative;
8528
8853
  }
8529
8854
 
8530
- :where(.bf-theme) :where(.bf-in-page-navigation-link) {
8855
+ :where(.bf-theme) :where(a.bf-in-page-navigation-link) {
8531
8856
  font-family: var(--bf-body-font-family, "Ubuntu Sans", "Segoe UI", system-ui, sans-serif);
8532
8857
  font-size: var(--bf-body-font-size, 0.875rem);
8533
8858
  font-style: var(--bf-body-font-style, normal);
@@ -8540,7 +8865,7 @@ html.u-baseline-grid::after {
8540
8865
  min-inline-size: 0;
8541
8866
  overflow: hidden;
8542
8867
  overflow-wrap: anywhere;
8543
- padding-block: calc(var(--bf-body-nudge-start) + var(--bf-space-half)) calc(var(--bf-body-nudge-end) + var(--bf-space-half));
8868
+ padding-block: var(--bf-body-nudge-start) var(--bf-body-nudge-end);
8544
8869
  padding-inline: var(--bf-space-2) 0;
8545
8870
  position: relative;
8546
8871
  text-decoration: none;
@@ -8548,7 +8873,7 @@ html.u-baseline-grid::after {
8548
8873
  -webkit-box-orient: vertical;
8549
8874
  }
8550
8875
 
8551
- :where(.bf-theme) :where(.bf-in-page-navigation-link:hover) {
8876
+ :where(.bf-theme) :where(a.bf-in-page-navigation-link:hover) {
8552
8877
  color: var(--bf-color-text-default);
8553
8878
  text-decoration: none;
8554
8879
  }
@@ -8558,8 +8883,8 @@ html.u-baseline-grid::after {
8558
8883
  }
8559
8884
 
8560
8885
  :where(.bf-theme) :where(.bf-in-page-navigation-link:focus-visible) {
8561
- outline: 2px solid var(--bf-color-focus);
8562
- outline-offset: 2px;
8886
+ outline: 0.125rem solid var(--bf-color-focus);
8887
+ outline-offset: 0.125rem;
8563
8888
  }
8564
8889
 
8565
8890
  :where(.bf-theme) :where(.bf-in-page-navigation-link.is-active, .bf-in-page-navigation-link[aria-current]) {
@@ -8615,8 +8940,8 @@ html.u-baseline-grid::after {
8615
8940
  }
8616
8941
 
8617
8942
  :where(.bf-theme) :where(.bf-in-page-navigation-toggle:focus-visible) {
8618
- outline: 2px solid var(--bf-color-focus);
8619
- outline-offset: -2px;
8943
+ outline: 0.125rem solid var(--bf-color-focus);
8944
+ outline-offset: -0.125rem;
8620
8945
  }
8621
8946
 
8622
8947
  :where(.bf-theme) :where(.bf-in-page-navigation-toggle > .bf-icon) {
@@ -8630,6 +8955,7 @@ html.u-baseline-grid::after {
8630
8955
  border-block-end: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
8631
8956
  display: grid;
8632
8957
  grid-template-columns: minmax(0, 1fr) auto;
8958
+ row-gap: 0;
8633
8959
  max-block-size: none;
8634
8960
  overflow: visible;
8635
8961
  position: static;
@@ -8642,6 +8968,7 @@ html.u-baseline-grid::after {
8642
8968
  :where(.bf-theme) :where(.bf-in-page-navigation-list) {
8643
8969
  border: 0;
8644
8970
  display: flex;
8971
+ gap: 0;
8645
8972
  grid-column: 1;
8646
8973
  grid-row: 1;
8647
8974
  margin: 0;
@@ -8706,7 +9033,8 @@ html.u-baseline-grid::after {
8706
9033
  :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) {
8707
9034
  background: var(--bf-color-background-alt);
8708
9035
  border-inline-start: var(--bf-bar-thickness) solid var(--bf-color-border-low-contrast);
8709
- display: block;
9036
+ display: grid;
9037
+ gap: var(--bf-stack-space);
8710
9038
  grid-column: 1 / -1;
8711
9039
  grid-row: 2;
8712
9040
  /* The mobile nav owns a bottom rule; reserve its thickness within the
@@ -8717,20 +9045,21 @@ html.u-baseline-grid::after {
8717
9045
  }
8718
9046
 
8719
9047
  :where(.bf-theme) :where(.bf-in-page-navigation.is-expanded .bf-in-page-navigation-item, .bf-in-page-navigation:has(.bf-in-page-navigation-toggle[aria-expanded='true']) .bf-in-page-navigation-item) {
8720
- display: block;
9048
+ display: grid;
8721
9049
  max-inline-size: none;
8722
9050
  }
8723
9051
 
8724
9052
  :where(.bf-theme) :where(.bf-in-page-navigation.is-expanded .bf-in-page-navigation-link, .bf-in-page-navigation:has(.bf-in-page-navigation-toggle[aria-expanded='true']) .bf-in-page-navigation-link) {
8725
9053
  display: -webkit-box;
8726
9054
  overflow-wrap: anywhere;
8727
- padding-block: calc(var(--bf-body-nudge-start) + var(--bf-space-half)) calc(var(--bf-body-nudge-end) + var(--bf-space-half));
9055
+ padding-block: var(--bf-body-nudge-start) var(--bf-body-nudge-end);
8728
9056
  padding-inline: var(--bf-space-2) 0;
8729
9057
  white-space: normal;
8730
9058
  }
8731
9059
 
8732
9060
  :where(.bf-theme) :where(.bf-in-page-navigation.is-expanded .bf-in-page-navigation-list .bf-in-page-navigation-list, .bf-in-page-navigation:has(.bf-in-page-navigation-toggle[aria-expanded='true']) .bf-in-page-navigation-list .bf-in-page-navigation-list) {
8733
- display: block;
9061
+ display: grid;
9062
+ gap: var(--bf-stack-space);
8734
9063
  }
8735
9064
 
8736
9065
  :where(.bf-theme) :where(.bf-in-page-navigation.is-expanded .bf-in-page-navigation-link.is-active, .bf-in-page-navigation.is-expanded .bf-in-page-navigation-link[aria-current], .bf-in-page-navigation:has(.bf-in-page-navigation-toggle[aria-expanded='true']) .bf-in-page-navigation-link.is-active, .bf-in-page-navigation:has(.bf-in-page-navigation-toggle[aria-expanded='true']) .bf-in-page-navigation-link[aria-current])::before {
@@ -8813,35 +9142,47 @@ html.u-baseline-grid::after {
8813
9142
  /* ------------------------------------------------------------------ */
8814
9143
 
8815
9144
  :where(.bf-theme) :where(.bf-table-of-contents) {
9145
+ --bf-table-of-contents-section-gap: var(--bf-section-space-shallow);
9146
+ align-content: start;
8816
9147
  container-name: bf-table-of-contents;
8817
9148
  container-type: inline-size;
8818
- margin-block: 0 var(--bf-section-space-shallow);
9149
+ display: grid;
9150
+ gap: var(--bf-table-of-contents-section-gap);
9151
+ margin: 0;
8819
9152
  min-inline-size: 0;
8820
9153
  }
8821
9154
 
8822
9155
  :where(.bf-theme) :where(.bf-table-of-contents-section) {
9156
+ --bf-stack-space: 0rem;
9157
+ align-content: start;
9158
+ display: grid;
9159
+ gap: var(--bf-stack-space);
8823
9160
  margin: 0;
8824
9161
  min-inline-size: 0;
8825
- padding-block-end: var(--bf-space-2);
9162
+ padding: 0;
9163
+ position: relative;
8826
9164
  }
8827
9165
 
8828
- :where(.bf-theme) :where(.bf-table-of-contents-section + .bf-table-of-contents-section) {
8829
- border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
8830
- padding-block-start: calc(var(--bf-space-2) - var(--bf-border-width));
9166
+ :where(.bf-theme) :where(.bf-table-of-contents-section + .bf-table-of-contents-section)::before {
9167
+ background: var(--bf-color-border-low-contrast);
9168
+ block-size: var(--bf-border-width);
9169
+ content: "";
9170
+ inset-block-start: 0;
9171
+ inset-inline: 0;
9172
+ position: absolute;
8831
9173
  }
8832
9174
 
8833
9175
  :where(.bf-theme) :where(.bf-table-of-contents-heading) {
8834
- font-family: var(--bf-h6-font-family, "Ubuntu Sans", "Segoe UI", system-ui, sans-serif);
8835
- font-size: var(--bf-h6-font-size, 1.125rem);
8836
- font-style: var(--bf-h6-font-style, normal);
8837
- font-weight: var(--bf-h6-font-weight, 300);
8838
- line-height: var(--bf-h6-line-height, 1.5rem);
8839
- color: var(--bf-color-text-muted);
8840
- margin: 0 0 var(--bf-space-1);
8841
- padding-block: var(--bf-h6-nudge-start) var(--bf-h6-nudge-end);
9176
+ color: var(--bf-color-text-default);
9177
+ margin: 0;
9178
+ padding-block-end: 0;
8842
9179
  }
8843
9180
 
8844
9181
  :where(.bf-theme) :where(.bf-table-of-contents-list) {
9182
+ --bf-stack-space: 0rem;
9183
+ align-content: start;
9184
+ display: grid;
9185
+ gap: var(--bf-stack-space);
8845
9186
  list-style: none;
8846
9187
  margin: 0;
8847
9188
  min-inline-size: 0;
@@ -8849,26 +9190,30 @@ html.u-baseline-grid::after {
8849
9190
  }
8850
9191
 
8851
9192
  :where(.bf-theme) :where(.bf-table-of-contents-item) {
9193
+ align-content: start;
9194
+ display: grid;
9195
+ gap: var(--bf-stack-space);
8852
9196
  margin: 0;
8853
9197
  min-inline-size: 0;
8854
9198
  padding: 0;
8855
9199
  }
8856
9200
 
8857
- :where(.bf-theme) :where(.bf-table-of-contents-link) {
9201
+ :where(.bf-theme) :where(a.bf-table-of-contents-link) {
8858
9202
  font-family: var(--bf-body-font-family, "Ubuntu Sans", "Segoe UI", system-ui, sans-serif);
8859
9203
  font-size: var(--bf-body-font-size, 0.875rem);
8860
9204
  font-style: var(--bf-body-font-style, normal);
8861
9205
  font-weight: var(--bf-body-font-weight, 400);
8862
9206
  line-height: var(--bf-body-line-height, 1.25rem);
9207
+ border-block: var(--bf-border-width) solid transparent;
8863
9208
  color: var(--bf-color-link-default);
8864
9209
  display: block;
8865
- margin: 0;
9210
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
8866
9211
  overflow-wrap: anywhere;
8867
- padding-block: calc(var(--bf-body-nudge-start) + var(--bf-space-half)) calc(var(--bf-body-nudge-end) + var(--bf-space-half));
9212
+ padding-block: var(--bf-single-line-row-padding-block);
8868
9213
  text-decoration: none;
8869
9214
  }
8870
9215
 
8871
- :where(.bf-theme) :where(.bf-table-of-contents-link:hover) {
9216
+ :where(.bf-theme) :where(a.bf-table-of-contents-link:hover) {
8872
9217
  color: var(--bf-color-text-default);
8873
9218
  text-decoration: underline;
8874
9219
  }
@@ -8878,8 +9223,8 @@ html.u-baseline-grid::after {
8878
9223
  }
8879
9224
 
8880
9225
  :where(.bf-theme) :where(.bf-table-of-contents-link:focus-visible) {
8881
- outline: 2px solid var(--bf-color-focus);
8882
- outline-offset: 2px;
9226
+ outline: 0.125rem solid var(--bf-color-focus);
9227
+ outline-offset: 0.125rem;
8883
9228
  }
8884
9229
 
8885
9230
  :where(.bf-theme) :where(.bf-table-of-contents-link.is-active, .bf-table-of-contents-link[aria-current]) {
@@ -8959,9 +9304,9 @@ html.u-baseline-grid::after {
8959
9304
  padding: 0;
8960
9305
  }
8961
9306
 
8962
- :where(.bf-theme) :where(.bf-tiered-list-header) > :where(.bf-rule),
8963
- :where(.bf-theme) :where(.bf-tiered-list-item) > :where(.bf-rule),
8964
- :where(.bf-theme) :where(.bf-tiered-list-cta) > :where(.bf-rule) {
9307
+ :where(.bf-theme) :where(.bf-tiered-list-header) > hr,
9308
+ :where(.bf-theme) :where(.bf-tiered-list-item) > hr,
9309
+ :where(.bf-theme) :where(.bf-tiered-list-cta) > hr {
8965
9310
  grid-column: 1 / -1;
8966
9311
  }
8967
9312
 
@@ -8976,8 +9321,8 @@ html.u-baseline-grid::after {
8976
9321
  grid-template-columns: repeat(8, minmax(0, 1fr));
8977
9322
  }
8978
9323
 
8979
- :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-item) > :where(.bf-rule),
8980
- :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-cta) > :where(.bf-rule) {
9324
+ :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-item) > hr,
9325
+ :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-cta) > hr {
8981
9326
  grid-column: 3 / span 6;
8982
9327
  }
8983
9328
 
@@ -8992,9 +9337,9 @@ html.u-baseline-grid::after {
8992
9337
  }
8993
9338
 
8994
9339
  /* ------------------------------------------------------------------ */
8995
- /* Header split (≥ 64.75rem): unchanged 50/50 title/description. */
9340
+ /* Header split (≥ 45rem): the shared readable 50/50 title/content split. */
8996
9341
  /* ------------------------------------------------------------------ */
8997
- @container (width >= 64.75rem) {
9342
+ @container (width >= 45rem) {
8998
9343
  :where(.bf-theme) :where(.bf-tiered-list:not(.is-description-full-width)) :where(.bf-tiered-list-header) {
8999
9344
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
9000
9345
  }
@@ -9018,7 +9363,7 @@ html.u-baseline-grid::after {
9018
9363
  queries cannot style their own container, so responsive descendants span
9019
9364
  these tracks instead of relying on an ineligible self-query. */
9020
9365
  grid-template-columns: repeat(8, minmax(0, 1fr));
9021
- margin-block-end: var(--bf-section-space-shallow);
9366
+ margin: 0;
9022
9367
  position: relative;
9023
9368
  }
9024
9369
 
@@ -9035,7 +9380,7 @@ html.u-baseline-grid::after {
9035
9380
  /* Responsive aspect media can make a shared subgrid track land between
9036
9381
  baselines. Snap that media box itself; the surrounding composition still
9037
9382
  does not own or erase any child's semantic margins. */
9038
- @supports (block-size: calc-size(auto, round(up, size, 1px))) {
9383
+ @supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
9039
9384
  :where(.bf-theme) :where(.bf-equal-height-row-item) > :where(.bf-aspect) {
9040
9385
  block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
9041
9386
  }
@@ -9114,7 +9459,7 @@ html.u-baseline-grid::after {
9114
9459
  :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1))::before,
9115
9460
  :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-2))::after {
9116
9461
  background-color: var(--bf-color-border-low-contrast);
9117
- block-size: 1px;
9462
+ block-size: 0.0625rem;
9118
9463
  content: "";
9119
9464
  display: none;
9120
9465
  grid-column: 1 / -1;
@@ -9187,8 +9532,8 @@ html.u-baseline-grid::after {
9187
9532
  /* ------------------------------------------------------------------ */
9188
9533
  /* Gutter and margin escalation — viewport-based, all tiers */
9189
9534
  /* Grid spec v0.3 §2.3: gutters set by global viewport breakpoint. */
9190
- /* Baseline Foundry models the spec's 460px x-small row as part of the */
9191
- /* default <620px bracket because the values do not change at 460px. */
9535
+ /* Baseline Foundry models the spec's 28.75rem x-small row as part of the */
9536
+ /* default <38.75rem bracket because the values do not change at 28.75rem. */
9192
9537
  /* ------------------------------------------------------------------ */
9193
9538
 
9194
9539
  :where(.bf-theme) {
@@ -9271,6 +9616,13 @@ html.u-baseline-grid::after {
9271
9616
  padding-inline: 0;
9272
9617
  }
9273
9618
 
9619
+ /* A page is the outer grid row and therefore owns its horizontal gutter.
9620
+ * Fixed-width regions nested anywhere inside it retain their cap and
9621
+ * centering behavior without introducing a second page inset. */
9622
+ :where(.bf-theme) :where(.bf-page) :where(.bf-fixed-width) {
9623
+ padding-inline: 0;
9624
+ }
9625
+
9274
9626
  /* ------------------------------------------------------------------ */
9275
9627
  /* Grid base — 4 columns, all tiers */
9276
9628
  /* ------------------------------------------------------------------ */
@@ -9292,7 +9644,7 @@ html.u-baseline-grid::after {
9292
9644
 
9293
9645
  :where(.bf-theme) :where(.bf-grid.is-guide) > * {
9294
9646
  background: color-mix(in srgb, var(--bf-color-accent) 18%, var(--bf-color-background-default));
9295
- box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--bf-color-accent) 50%, var(--bf-color-rule));
9647
+ box-shadow: inset 0 0 0 0.0625rem color-mix(in srgb, var(--bf-color-accent) 50%, var(--bf-color-rule));
9296
9648
  min-block-size: calc(var(--bf-baseline) * 4);
9297
9649
  }
9298
9650
 
@@ -9375,18 +9727,18 @@ html.u-baseline-grid::after {
9375
9727
 
9376
9728
  :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) {
9377
9729
  font-family: inherit;
9378
- font-size: 0.875rem;
9730
+ font-size: var(--bf-body-font-size);
9379
9731
  font-style: normal;
9380
9732
  font-weight: 400;
9381
- line-height: 1.25rem;
9733
+ line-height: var(--bf-body-line-height);
9382
9734
  }
9383
9735
 
9384
9736
  :where(.bf-theme.bf-tier-app) :where(.bf-input, .bf-button, .bf-button.is-base) {
9385
9737
  font-family: inherit;
9386
- font-size: 0.875rem;
9738
+ font-size: var(--bf-body-font-size);
9387
9739
  font-style: normal;
9388
9740
  font-weight: 400;
9389
- line-height: 1.25rem;
9741
+ line-height: var(--bf-body-line-height);
9390
9742
  }
9391
9743
 
9392
9744
  :where(.bf-theme.bf-tier-app) :where(.bf-application) {
@@ -9396,7 +9748,7 @@ html.u-baseline-grid::after {
9396
9748
  :where(.bf-theme.bf-tier-app) :where(.bf-navigation-drawer),
9397
9749
  :where(.bf-theme.bf-tier-app) :where(.bf-navigation:not(.is-collapsed)) > :where(.bf-navigation-drawer),
9398
9750
  :where(.bf-theme.bf-tier-app) :where(.bf-aside.is-overlay, .bf-aside.is-drawer) {
9399
- box-shadow: 0 10px 20px rgba(0, 0, 0, 0.12), 0 0 3px rgba(0, 0, 0, 0.12);
9751
+ box-shadow: 0 0.625rem 1.25rem rgba(0, 0, 0, 0.12), 0 0 0.1875rem rgba(0, 0, 0, 0.12);
9400
9752
  }
9401
9753
 
9402
9754
  :where(.bf-theme.bf-tier-app) :where(.bf-panel-header) {
@@ -9415,6 +9767,11 @@ html.u-baseline-grid::after {
9415
9767
  padding-block-end: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
9416
9768
  }
9417
9769
 
9770
+ :where(.bf-theme.bf-tier-app) :where(.bf-navigation-bar.is-responsive) :where(.bf-panel-header.is-navigation-brand) {
9771
+ gap: calc(var(--bf-baseline) * 2);
9772
+ padding-block: 0;
9773
+ }
9774
+
9418
9775
  :where(.bf-theme.bf-tier-app) :where(.bf-panel-controls) {
9419
9776
  gap: calc(var(--bf-baseline) * 1.5);
9420
9777
  }