baseline-foundry 0.1.3 → 0.1.4

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 (43) hide show
  1. package/README.md +568 -552
  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/css-app-tier.js +73 -73
  11. package/dist/css-components/article-pagination.js +140 -140
  12. package/dist/css-components/button-actions.js +161 -161
  13. package/dist/css-components/cards-options.js +176 -176
  14. package/dist/css-components/chip-badge-status.js +158 -158
  15. package/dist/css-components/content-card.js +490 -490
  16. package/dist/css-components/control-row.js +14 -14
  17. package/dist/css-components/cta-figure-aspect.js +120 -120
  18. package/dist/css-components/document-navigation.js +390 -390
  19. package/dist/css-components/editorial-content.js +42 -42
  20. package/dist/css-components/icon.js +72 -72
  21. package/dist/css-components/interactive-feedback.js +217 -217
  22. package/dist/css-components/interactive-tables.js +155 -155
  23. package/dist/css-components/legacy-navigation.d.ts +9 -0
  24. package/dist/css-components/legacy-navigation.js +763 -0
  25. package/dist/css-components/linked-logo-site-layout.js +177 -177
  26. package/dist/css-components/list-tree.js +94 -94
  27. package/dist/css-components/logo-media.js +201 -201
  28. package/dist/css-components/navigation-layout.js +144 -144
  29. package/dist/css-components/panel.js +144 -144
  30. package/dist/css-components/search-box-and-filter.js +263 -263
  31. package/dist/css-components/sites-editorial-ports.js +243 -243
  32. package/dist/css-components/sites-foundation.js +146 -146
  33. package/dist/css-components/sites-rich-lists.js +344 -344
  34. package/dist/css-components/static-content-ports.js +182 -182
  35. package/dist/css-components/tab-section.js +82 -82
  36. package/dist/css-components/table.js +75 -75
  37. package/dist/css-components/tabs-choice-breadcrumbs.js +303 -303
  38. package/dist/css-components/tiered-list-equal-height-row.js +271 -271
  39. package/dist/css-components.js +1791 -2542
  40. package/dist/css-grid.js +172 -172
  41. package/dist/css.js +240 -240
  42. package/docs/publishing.md +30 -13
  43. package/package.json +119 -108
@@ -1,14 +1,14 @@
1
1
  export function tieredListEqualHeightRowCss() {
2
- return `/* ------------------------------------------------------------------ */
3
- /* Tiered list */
4
- /* Editorial pattern (Vanilla parity): paired list of titles + */
5
- /* descriptions under a top-level title + description, with optional */
6
- /* CTA. Vanilla uses media queries at tablet/desktop; Baseline Foundry */
7
- /* uses container queries on the pattern itself so the layout reacts */
8
- /* to its own width (panels, drawers, narrow main areas) instead of */
9
- /* the viewport. Stack gaps own semantics; text keeps compensation. */
10
- /* ------------------------------------------------------------------ */
11
-
2
+ return `/* ------------------------------------------------------------------ */
3
+ /* Tiered list */
4
+ /* Editorial pattern (Vanilla parity): paired list of titles + */
5
+ /* descriptions under a top-level title + description, with optional */
6
+ /* CTA. Vanilla uses media queries at tablet/desktop; Baseline Foundry */
7
+ /* uses container queries on the pattern itself so the layout reacts */
8
+ /* to its own width (panels, drawers, narrow main areas) instead of */
9
+ /* the viewport. Stack gaps own semantics; text keeps compensation. */
10
+ /* ------------------------------------------------------------------ */
11
+
12
12
  :where(.bf-theme) :where(.bf-tiered-list) {
13
13
  container-type: inline-size;
14
14
  display: grid;
@@ -21,266 +21,266 @@ export function tieredListEqualHeightRowCss() {
21
21
  }
22
22
 
23
23
  :where(.bf-theme) :where(.bf-tiered-list-header),
24
- :where(.bf-theme) :where(.bf-tiered-list-item),
25
- :where(.bf-theme) :where(.bf-tiered-list-cta) {
26
- column-gap: var(--bf-grid-gap-inline);
27
- display: grid;
28
- grid-template-columns: minmax(0, 1fr);
29
- }
30
-
31
- /* Consumer-proven compact rows. These are deliberately independent of the
32
- editorial hanging-indent composition below: flush rows describe a plain
33
- two-slot datum while triple rows add a named intermediate role. */
34
- :where(.bf-theme) :where(.bf-tiered-list.is-flush, .bf-tiered-list.is-triple) :where(.bf-tiered-list-item) {
35
- align-items: start;
36
- grid-template-columns: minmax(0, 1fr);
37
- }
38
-
39
- :where(.bf-theme) :where(.bf-tiered-list-item-label, .bf-tiered-list-item-role, .bf-tiered-list-item-value) {
40
- display: block;
41
- font-family: var(--bf-body-font-family);
42
- font-size: var(--bf-body-font-size);
43
- font-style: var(--bf-body-font-style);
44
- font-weight: var(--bf-body-font-weight);
45
- line-height: var(--bf-body-line-height);
46
- margin-block: 0 var(--bf-body-margin-bottom);
47
- min-inline-size: 0;
48
- overflow-wrap: anywhere;
49
- padding-block-end: 0;
50
- padding-block-start: var(--bf-body-nudge-start);
51
- }
52
-
53
- :where(.bf-theme) :where(.bf-tiered-list-item-role) {
54
- color: var(--bf-color-text-muted);
55
- }
56
-
57
- :where(.bf-theme) :where(ol.bf-tiered-list, ul.bf-tiered-list, ol.bf-tiered-list-items, ul.bf-tiered-list-items) {
58
- list-style: none;
59
- margin: 0;
60
- padding: 0;
61
- }
62
-
63
- :where(.bf-theme) :where(.bf-tiered-list-header) > :where(.bf-rule),
64
- :where(.bf-theme) :where(.bf-tiered-list-item) > :where(.bf-rule),
65
- :where(.bf-theme) :where(.bf-tiered-list-cta) > :where(.bf-rule) {
66
- grid-column: 1 / -1;
67
- }
68
-
69
- /* ------------------------------------------------------------------ */
70
- /* Medium container (≥ 38.75rem): items use BF’s 8-column grid with a */
71
- /* hanging indent. Vanilla: title col 3 / span 2, description col 5 / */
72
- /* span 4. The rule above each item starts at col 3 to match. */
73
- /* ------------------------------------------------------------------ */
74
- @container (width >= 38.75rem) {
75
- :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-item),
76
- :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-cta) {
77
- grid-template-columns: repeat(8, minmax(0, 1fr));
78
- }
79
-
80
- :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),
81
- :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) {
82
- grid-column: 3 / span 6;
83
- }
84
-
85
- :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-item-title) {
86
- grid-column: 3 / span 2;
87
- }
88
-
89
- :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-item-description),
90
- :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-cta-block) {
91
- grid-column: 5 / span 4;
92
- }
93
- }
94
-
95
- /* ------------------------------------------------------------------ */
96
- /* Header split (≥ 64.75rem): unchanged 50/50 title/description. */
97
- /* ------------------------------------------------------------------ */
98
- @container (width >= 64.75rem) {
99
- :where(.bf-theme) :where(.bf-tiered-list:not(.is-description-full-width)) :where(.bf-tiered-list-header) {
100
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
101
- }
102
- }
103
-
104
- /* ------------------------------------------------------------------ */
105
- /* Equal-height row (Vanilla parity). */
106
- /* Cross-column row alignment via CSS subgrid: each column is a 4-row */
107
- /* subgrid so items at the same vertical position across columns share */
108
- /* the same baseline (e.g. icon row, title row, description row, */
109
- /* trailing list row). Vanilla uses media queries; BF uses container */
110
- /* queries on the row itself so the layout reacts to its own width. */
111
- /* Optional cross-column dividers via .is-divider-1 / -2 / -3 mirror */
112
- /* Vanilla’s has-divider-N modifiers (renamed for the BF is-* rule). */
113
- /* ------------------------------------------------------------------ */
114
- :where(.bf-theme) :where(.bf-equal-height-row) {
115
- container-type: inline-size;
116
- display: grid;
117
- gap: var(--bf-grid-gap-block) var(--bf-grid-gap-inline);
118
- /* Keep the logical track system on the query container itself. Container
119
- queries cannot style their own container, so responsive descendants span
120
- these tracks instead of relying on an ineligible self-query. */
121
- grid-template-columns: repeat(8, minmax(0, 1fr));
122
- margin-block-end: var(--bf-section-space-shallow);
123
- position: relative;
124
- }
125
-
126
- :where(.bf-theme) :where(.bf-equal-height-row-col) {
127
- border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
128
- display: grid;
129
- grid-column: 1 / -1;
130
- grid-row: span 4;
131
- grid-template-rows: subgrid;
132
- margin-block-end: var(--bf-space-1);
133
- position: relative;
134
- }
135
-
136
- /* Responsive aspect media can make a shared subgrid track land between
137
- baselines. Snap that media box itself; the surrounding composition still
138
- does not own or erase any child's semantic margins. */
139
- @supports (block-size: calc-size(auto, round(up, size, 1px))) {
140
- :where(.bf-theme) :where(.bf-equal-height-row-item) > :where(.bf-aspect) {
141
- block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
142
- }
143
- }
144
-
145
- :where(.bf-theme) :where(.bf-equal-height-row-col.is-borderless) {
146
- border-block-start: 0;
147
- }
148
-
149
- @container (width >= 38.75rem) {
150
- :where(.bf-theme) :where(.bf-equal-height-row-col) {
151
- grid-column: span 8;
152
- grid-template-columns: subgrid;
153
- }
154
-
155
- :where(.bf-theme) :where(.bf-equal-height-row-col) > :where(.bf-equal-height-row-item) {
156
- grid-column: span 4;
157
- }
158
-
159
- :where(.bf-theme) :where(.bf-equal-height-row-col) > :where(.bf-equal-height-row-item):first-child {
160
- grid-row: span 100;
161
- }
162
-
163
- :where(.bf-theme) :where(.bf-equal-height-row.is-wrap) :where(.bf-equal-height-row-col) {
164
- grid-column: span 4;
165
- grid-template-columns: none;
166
- }
167
-
168
- :where(.bf-theme) :where(.bf-equal-height-row.is-wrap) :where(.bf-equal-height-row-col) > :where(.bf-equal-height-row-item) {
169
- grid-column: auto;
170
- }
171
-
172
- :where(.bf-theme) :where(.bf-equal-height-row.is-wrap) :where(.bf-equal-height-row-col) > :where(.bf-equal-height-row-item):first-child {
173
- grid-row: auto;
174
- }
175
- }
176
-
177
- @container (width >= 64.75rem) {
178
- :where(.bf-theme) :where(.bf-equal-height-row-col) {
179
- border-block-start: 0;
180
- grid-column: span 2;
181
- margin-block-end: 0;
182
- }
183
- }
184
-
185
- /* The Sites equal-heights composition constrains two-item groups to the
186
- trailing half of the large grid and three-item groups to its trailing
187
- three quarters. These modifiers preserve those rendered proportions while
188
- keeping the existing equal-height row as the single alignment primitive. */
189
- @media (width >= 64.75rem) {
190
- :where(.bf-theme) :where(.bf-equal-height-row.is-columns-2) {
191
- inline-size: calc(50% - (var(--bf-grid-gap-inline) / 2));
192
- margin-inline-start: auto;
193
- }
194
-
195
- :where(.bf-theme) :where(.bf-equal-height-row.is-columns-2) :where(.bf-equal-height-row-col) {
196
- grid-column: span 4;
197
- }
198
-
199
- :where(.bf-theme) :where(.bf-equal-height-row.is-columns-3) {
200
- grid-template-columns: repeat(6, minmax(0, 1fr));
201
- inline-size: calc(75% - (var(--bf-grid-gap-inline) / 4));
202
- margin-inline-start: auto;
203
- }
204
-
205
- :where(.bf-theme) :where(.bf-equal-height-row.is-columns-3) :where(.bf-equal-height-row-col) {
206
- grid-column: span 2;
207
- }
208
- }
209
-
210
- /* Cross-column dividers — Vanilla pattern uses a single ::before for */
211
- /* divider-1 and a single ::after for divider-2; the third divider */
212
- /* falls back onto whichever pseudo is still available. */
213
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-1)::before,
214
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-2)::after,
215
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1))::before,
216
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-2))::after {
217
- background-color: var(--bf-color-border-low-contrast);
218
- block-size: 1px;
219
- content: "";
220
- display: none;
221
- grid-column: 1 / -1;
222
- inset-inline: 0;
223
- margin: auto;
224
- position: absolute;
225
- }
226
-
227
- @container (width >= 64.75rem) {
228
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-1)::before,
229
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-2)::after,
230
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1))::before,
231
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-2))::after {
232
- display: block;
233
- }
234
- }
235
-
236
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-1)::before {
237
- grid-row: 2;
238
- }
239
-
240
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-2)::after {
241
- grid-row: 3;
242
- }
243
-
244
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1))::before,
245
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-2))::after,
246
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1):not(.is-divider-2))::before {
247
- grid-row: 4;
248
- }
249
-
250
- :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1):not(.is-divider-2))::after {
251
- display: none;
252
- }
253
-
254
- /* Flush and triple rows remain intrinsic at narrow widths, then gain their
255
- aligned slots only when their own container has room. */
256
- @container (width >= 32rem) {
257
- :where(.bf-theme) :where(.bf-tiered-list.is-flush) :where(.bf-tiered-list-item) {
258
- grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
259
- }
260
-
261
- :where(.bf-theme) :where(.bf-tiered-list.is-flush) :where(.bf-tiered-list-item-label, .bf-tiered-list-item-title) {
262
- grid-column: 1;
263
- }
264
-
265
- :where(.bf-theme) :where(.bf-tiered-list.is-flush) :where(.bf-tiered-list-item-value, .bf-tiered-list-item-description) {
266
- grid-column: 2;
267
- }
268
-
269
- :where(.bf-theme) :where(.bf-tiered-list.is-triple) :where(.bf-tiered-list-item) {
270
- grid-template-columns: minmax(0, 2fr) minmax(0, 2fr) minmax(0, 3fr);
271
- }
272
-
273
- :where(.bf-theme) :where(.bf-tiered-list.is-triple) :where(.bf-tiered-list-item-label) {
274
- grid-column: 1;
275
- }
276
-
277
- :where(.bf-theme) :where(.bf-tiered-list.is-triple) :where(.bf-tiered-list-item-role) {
278
- grid-column: 2;
279
- }
280
-
281
- :where(.bf-theme) :where(.bf-tiered-list.is-triple) :where(.bf-tiered-list-item-value) {
282
- grid-column: 3;
283
- }
284
- }
24
+ :where(.bf-theme) :where(.bf-tiered-list-item),
25
+ :where(.bf-theme) :where(.bf-tiered-list-cta) {
26
+ column-gap: var(--bf-grid-gap-inline);
27
+ display: grid;
28
+ grid-template-columns: minmax(0, 1fr);
29
+ }
30
+
31
+ /* Consumer-proven compact rows. These are deliberately independent of the
32
+ editorial hanging-indent composition below: flush rows describe a plain
33
+ two-slot datum while triple rows add a named intermediate role. */
34
+ :where(.bf-theme) :where(.bf-tiered-list.is-flush, .bf-tiered-list.is-triple) :where(.bf-tiered-list-item) {
35
+ align-items: start;
36
+ grid-template-columns: minmax(0, 1fr);
37
+ }
38
+
39
+ :where(.bf-theme) :where(.bf-tiered-list-item-label, .bf-tiered-list-item-role, .bf-tiered-list-item-value) {
40
+ display: block;
41
+ font-family: var(--bf-body-font-family);
42
+ font-size: var(--bf-body-font-size);
43
+ font-style: var(--bf-body-font-style);
44
+ font-weight: var(--bf-body-font-weight);
45
+ line-height: var(--bf-body-line-height);
46
+ margin-block: 0 var(--bf-body-margin-bottom);
47
+ min-inline-size: 0;
48
+ overflow-wrap: anywhere;
49
+ padding-block-end: 0;
50
+ padding-block-start: var(--bf-body-nudge-start);
51
+ }
52
+
53
+ :where(.bf-theme) :where(.bf-tiered-list-item-role) {
54
+ color: var(--bf-color-text-muted);
55
+ }
56
+
57
+ :where(.bf-theme) :where(ol.bf-tiered-list, ul.bf-tiered-list, ol.bf-tiered-list-items, ul.bf-tiered-list-items) {
58
+ list-style: none;
59
+ margin: 0;
60
+ padding: 0;
61
+ }
62
+
63
+ :where(.bf-theme) :where(.bf-tiered-list-header) > :where(.bf-rule),
64
+ :where(.bf-theme) :where(.bf-tiered-list-item) > :where(.bf-rule),
65
+ :where(.bf-theme) :where(.bf-tiered-list-cta) > :where(.bf-rule) {
66
+ grid-column: 1 / -1;
67
+ }
68
+
69
+ /* ------------------------------------------------------------------ */
70
+ /* Medium container (≥ 38.75rem): items use BF’s 8-column grid with a */
71
+ /* hanging indent. Vanilla: title col 3 / span 2, description col 5 / */
72
+ /* span 4. The rule above each item starts at col 3 to match. */
73
+ /* ------------------------------------------------------------------ */
74
+ @container (width >= 38.75rem) {
75
+ :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-item),
76
+ :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-cta) {
77
+ grid-template-columns: repeat(8, minmax(0, 1fr));
78
+ }
79
+
80
+ :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),
81
+ :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) {
82
+ grid-column: 3 / span 6;
83
+ }
84
+
85
+ :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-item-title) {
86
+ grid-column: 3 / span 2;
87
+ }
88
+
89
+ :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-item-description),
90
+ :where(.bf-theme) :where(.bf-tiered-list:not(.is-list-full-width):not(.is-flush):not(.is-triple)) :where(.bf-tiered-list-cta-block) {
91
+ grid-column: 5 / span 4;
92
+ }
93
+ }
94
+
95
+ /* ------------------------------------------------------------------ */
96
+ /* Header split (≥ 64.75rem): unchanged 50/50 title/description. */
97
+ /* ------------------------------------------------------------------ */
98
+ @container (width >= 64.75rem) {
99
+ :where(.bf-theme) :where(.bf-tiered-list:not(.is-description-full-width)) :where(.bf-tiered-list-header) {
100
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
101
+ }
102
+ }
103
+
104
+ /* ------------------------------------------------------------------ */
105
+ /* Equal-height row (Vanilla parity). */
106
+ /* Cross-column row alignment via CSS subgrid: each column is a 4-row */
107
+ /* subgrid so items at the same vertical position across columns share */
108
+ /* the same baseline (e.g. icon row, title row, description row, */
109
+ /* trailing list row). Vanilla uses media queries; BF uses container */
110
+ /* queries on the row itself so the layout reacts to its own width. */
111
+ /* Optional cross-column dividers via .is-divider-1 / -2 / -3 mirror */
112
+ /* Vanilla’s has-divider-N modifiers (renamed for the BF is-* rule). */
113
+ /* ------------------------------------------------------------------ */
114
+ :where(.bf-theme) :where(.bf-equal-height-row) {
115
+ container-type: inline-size;
116
+ display: grid;
117
+ gap: var(--bf-grid-gap-block) var(--bf-grid-gap-inline);
118
+ /* Keep the logical track system on the query container itself. Container
119
+ queries cannot style their own container, so responsive descendants span
120
+ these tracks instead of relying on an ineligible self-query. */
121
+ grid-template-columns: repeat(8, minmax(0, 1fr));
122
+ margin-block-end: var(--bf-section-space-shallow);
123
+ position: relative;
124
+ }
125
+
126
+ :where(.bf-theme) :where(.bf-equal-height-row-col) {
127
+ border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
128
+ display: grid;
129
+ grid-column: 1 / -1;
130
+ grid-row: span 4;
131
+ grid-template-rows: subgrid;
132
+ margin-block-end: var(--bf-space-1);
133
+ position: relative;
134
+ }
135
+
136
+ /* Responsive aspect media can make a shared subgrid track land between
137
+ baselines. Snap that media box itself; the surrounding composition still
138
+ does not own or erase any child's semantic margins. */
139
+ @supports (block-size: calc-size(auto, round(up, size, 1px))) {
140
+ :where(.bf-theme) :where(.bf-equal-height-row-item) > :where(.bf-aspect) {
141
+ block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
142
+ }
143
+ }
144
+
145
+ :where(.bf-theme) :where(.bf-equal-height-row-col.is-borderless) {
146
+ border-block-start: 0;
147
+ }
148
+
149
+ @container (width >= 38.75rem) {
150
+ :where(.bf-theme) :where(.bf-equal-height-row-col) {
151
+ grid-column: span 8;
152
+ grid-template-columns: subgrid;
153
+ }
154
+
155
+ :where(.bf-theme) :where(.bf-equal-height-row-col) > :where(.bf-equal-height-row-item) {
156
+ grid-column: span 4;
157
+ }
158
+
159
+ :where(.bf-theme) :where(.bf-equal-height-row-col) > :where(.bf-equal-height-row-item):first-child {
160
+ grid-row: span 100;
161
+ }
162
+
163
+ :where(.bf-theme) :where(.bf-equal-height-row.is-wrap) :where(.bf-equal-height-row-col) {
164
+ grid-column: span 4;
165
+ grid-template-columns: none;
166
+ }
167
+
168
+ :where(.bf-theme) :where(.bf-equal-height-row.is-wrap) :where(.bf-equal-height-row-col) > :where(.bf-equal-height-row-item) {
169
+ grid-column: auto;
170
+ }
171
+
172
+ :where(.bf-theme) :where(.bf-equal-height-row.is-wrap) :where(.bf-equal-height-row-col) > :where(.bf-equal-height-row-item):first-child {
173
+ grid-row: auto;
174
+ }
175
+ }
176
+
177
+ @container (width >= 64.75rem) {
178
+ :where(.bf-theme) :where(.bf-equal-height-row-col) {
179
+ border-block-start: 0;
180
+ grid-column: span 2;
181
+ margin-block-end: 0;
182
+ }
183
+ }
184
+
185
+ /* The Sites equal-heights composition constrains two-item groups to the
186
+ trailing half of the large grid and three-item groups to its trailing
187
+ three quarters. These modifiers preserve those rendered proportions while
188
+ keeping the existing equal-height row as the single alignment primitive. */
189
+ @media (width >= 64.75rem) {
190
+ :where(.bf-theme) :where(.bf-equal-height-row.is-columns-2) {
191
+ inline-size: calc(50% - (var(--bf-grid-gap-inline) / 2));
192
+ margin-inline-start: auto;
193
+ }
194
+
195
+ :where(.bf-theme) :where(.bf-equal-height-row.is-columns-2) :where(.bf-equal-height-row-col) {
196
+ grid-column: span 4;
197
+ }
198
+
199
+ :where(.bf-theme) :where(.bf-equal-height-row.is-columns-3) {
200
+ grid-template-columns: repeat(6, minmax(0, 1fr));
201
+ inline-size: calc(75% - (var(--bf-grid-gap-inline) / 4));
202
+ margin-inline-start: auto;
203
+ }
204
+
205
+ :where(.bf-theme) :where(.bf-equal-height-row.is-columns-3) :where(.bf-equal-height-row-col) {
206
+ grid-column: span 2;
207
+ }
208
+ }
209
+
210
+ /* Cross-column dividers — Vanilla pattern uses a single ::before for */
211
+ /* divider-1 and a single ::after for divider-2; the third divider */
212
+ /* falls back onto whichever pseudo is still available. */
213
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-1)::before,
214
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-2)::after,
215
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1))::before,
216
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-2))::after {
217
+ background-color: var(--bf-color-border-low-contrast);
218
+ block-size: 1px;
219
+ content: "";
220
+ display: none;
221
+ grid-column: 1 / -1;
222
+ inset-inline: 0;
223
+ margin: auto;
224
+ position: absolute;
225
+ }
226
+
227
+ @container (width >= 64.75rem) {
228
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-1)::before,
229
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-2)::after,
230
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1))::before,
231
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-2))::after {
232
+ display: block;
233
+ }
234
+ }
235
+
236
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-1)::before {
237
+ grid-row: 2;
238
+ }
239
+
240
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-2)::after {
241
+ grid-row: 3;
242
+ }
243
+
244
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1))::before,
245
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-2))::after,
246
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1):not(.is-divider-2))::before {
247
+ grid-row: 4;
248
+ }
249
+
250
+ :where(.bf-theme) :where(.bf-equal-height-row.is-divider-3:not(.is-divider-1):not(.is-divider-2))::after {
251
+ display: none;
252
+ }
253
+
254
+ /* Flush and triple rows remain intrinsic at narrow widths, then gain their
255
+ aligned slots only when their own container has room. */
256
+ @container (width >= 32rem) {
257
+ :where(.bf-theme) :where(.bf-tiered-list.is-flush) :where(.bf-tiered-list-item) {
258
+ grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
259
+ }
260
+
261
+ :where(.bf-theme) :where(.bf-tiered-list.is-flush) :where(.bf-tiered-list-item-label, .bf-tiered-list-item-title) {
262
+ grid-column: 1;
263
+ }
264
+
265
+ :where(.bf-theme) :where(.bf-tiered-list.is-flush) :where(.bf-tiered-list-item-value, .bf-tiered-list-item-description) {
266
+ grid-column: 2;
267
+ }
268
+
269
+ :where(.bf-theme) :where(.bf-tiered-list.is-triple) :where(.bf-tiered-list-item) {
270
+ grid-template-columns: minmax(0, 2fr) minmax(0, 2fr) minmax(0, 3fr);
271
+ }
272
+
273
+ :where(.bf-theme) :where(.bf-tiered-list.is-triple) :where(.bf-tiered-list-item-label) {
274
+ grid-column: 1;
275
+ }
276
+
277
+ :where(.bf-theme) :where(.bf-tiered-list.is-triple) :where(.bf-tiered-list-item-role) {
278
+ grid-column: 2;
279
+ }
280
+
281
+ :where(.bf-theme) :where(.bf-tiered-list.is-triple) :where(.bf-tiered-list-item-value) {
282
+ grid-column: 3;
283
+ }
284
+ }
285
285
  `;
286
286
  }