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.
- package/README.md +568 -552
- package/config/experiments/ibm-plex-engine-smoke.json +115 -115
- package/config/experiments/ubuntu-engine-smoke.json +115 -115
- package/config/foundation-theme.json +110 -110
- package/config/tiers/app.json +116 -116
- package/config/tiers/documentation.json +116 -116
- package/config/tiers/editorial.json +116 -116
- package/config/tiers/os.json +116 -116
- package/dist/baseline-grid-overlay.js +43 -43
- package/dist/css-app-tier.js +73 -73
- package/dist/css-components/article-pagination.js +140 -140
- package/dist/css-components/button-actions.js +161 -161
- package/dist/css-components/cards-options.js +176 -176
- package/dist/css-components/chip-badge-status.js +158 -158
- package/dist/css-components/content-card.js +490 -490
- package/dist/css-components/control-row.js +14 -14
- package/dist/css-components/cta-figure-aspect.js +120 -120
- package/dist/css-components/document-navigation.js +390 -390
- package/dist/css-components/editorial-content.js +42 -42
- package/dist/css-components/icon.js +72 -72
- package/dist/css-components/interactive-feedback.js +217 -217
- package/dist/css-components/interactive-tables.js +155 -155
- package/dist/css-components/legacy-navigation.d.ts +9 -0
- package/dist/css-components/legacy-navigation.js +763 -0
- package/dist/css-components/linked-logo-site-layout.js +177 -177
- package/dist/css-components/list-tree.js +94 -94
- package/dist/css-components/logo-media.js +201 -201
- package/dist/css-components/navigation-layout.js +144 -144
- package/dist/css-components/panel.js +144 -144
- package/dist/css-components/search-box-and-filter.js +263 -263
- package/dist/css-components/sites-editorial-ports.js +243 -243
- package/dist/css-components/sites-foundation.js +146 -146
- package/dist/css-components/sites-rich-lists.js +344 -344
- package/dist/css-components/static-content-ports.js +182 -182
- package/dist/css-components/tab-section.js +82 -82
- package/dist/css-components/table.js +75 -75
- package/dist/css-components/tabs-choice-breadcrumbs.js +303 -303
- package/dist/css-components/tiered-list-equal-height-row.js +271 -271
- package/dist/css-components.js +1791 -2542
- package/dist/css-grid.js +172 -172
- package/dist/css.js +240 -240
- package/docs/publishing.md +30 -13
- 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
|
}
|