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
|
@@ -17,248 +17,248 @@
|
|
|
17
17
|
* heading-styled paragraph.
|
|
18
18
|
*/
|
|
19
19
|
export function sitesEditorialPortsCss() {
|
|
20
|
-
return `/* ------------------------------------------------------------------ */
|
|
21
|
-
/* Sites editorial compositions — hero and quote wrapper. */
|
|
22
|
-
/* Section boundaries and grid tracks are structural; nested stacks own */
|
|
23
|
-
/* semantic gaps and every text child keeps metric compensation. */
|
|
24
|
-
/* ------------------------------------------------------------------ */
|
|
25
|
-
|
|
26
|
-
/* Hero: its deliberately asymmetric boundary mirrors the current Vanilla
|
|
27
|
-
section--hero: a compact arrival space, then the normal section exit. The
|
|
28
|
-
entry rule replaces one pixel of padding so it never changes the rhythm. */
|
|
29
|
-
:where(.bf-theme) :where(.bf-hero) {
|
|
30
|
-
border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
|
|
31
|
-
container-name: bf-hero;
|
|
32
|
-
container-type: inline-size;
|
|
33
|
-
min-inline-size: 0;
|
|
34
|
-
padding-block-end: calc(var(--bf-section-space) / 2);
|
|
35
|
-
padding-block-start: calc(var(--bf-space-2) - var(--bf-border-width));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* The hero owns its entry rule so consumers do not need a loose sibling.
|
|
39
|
-
The established borderless modifier removes only that visual boundary. */
|
|
40
|
-
:where(.bf-theme) :where(.bf-hero.is-borderless) {
|
|
41
|
-
border-block-start: 0;
|
|
42
|
-
padding-block-start: var(--bf-space-2);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
:where(.bf-theme) :where(.bf-hero-layout) {
|
|
46
|
-
display: grid;
|
|
47
|
-
grid-template-columns: minmax(0, 1fr);
|
|
48
|
-
min-inline-size: 0;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
:where(.bf-theme) :where(.bf-hero-copy, .bf-hero-title, .bf-hero-content, .bf-hero-media, .bf-hero-signpost, .bf-hero-intro, .bf-hero-lead) {
|
|
52
|
-
min-inline-size: 0;
|
|
53
|
-
overflow-wrap: anywhere;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/* The normal hero keeps title, supporting heading, chip, prose and CTA in a
|
|
57
|
-
semantic copy stack. Hero titles are h1 slots and supporting titles are h2
|
|
58
|
-
slots. */
|
|
59
|
-
:where(.bf-theme) :where(.bf-hero-copy) {
|
|
60
|
-
align-content: start;
|
|
61
|
-
display: grid;
|
|
62
|
-
grid-template-columns: minmax(0, 1fr);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
:where(.bf-theme) :where(.bf-hero-chip) {
|
|
66
|
-
margin-block: 0 var(--bf-body-margin-bottom);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/* Current Vanilla scopes a one-spacing-unit icon/value gap to the hero. */
|
|
70
|
-
:where(.bf-theme) :where(.bf-hero-chip.bf-chip) {
|
|
71
|
-
column-gap: var(--bf-space-1);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
:where(.bf-theme) :where(.bf-hero-media > :where(img, picture, video, canvas, svg), .bf-hero-signpost > :where(img, picture, video, canvas, svg)) {
|
|
75
|
-
block-size: auto;
|
|
76
|
-
display: block;
|
|
77
|
-
inline-size: 100%;
|
|
78
|
-
max-inline-size: 100%;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/* Intrinsic media ratios commonly resolve to fractional pixels once a hero is
|
|
82
|
-
allocated a fluid grid track. Snap only the media block to the active tier
|
|
83
|
-
baseline so the following semantic text remains on-grid; its inline track
|
|
84
|
-
and the surrounding Vanilla proportions remain unchanged. */
|
|
85
|
-
@supports (block-size: calc-size(auto, round(up, size, 1px))) {
|
|
86
|
-
:where(.bf-theme) :where(.bf-hero-media > .bf-aspect, .bf-hero-signpost > :where(img, picture, video, canvas, svg)) {
|
|
87
|
-
block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/* A signpost is a compact associated mark, not a decorative background. */
|
|
92
|
-
:where(.bf-theme) :where(.bf-hero-signpost) {
|
|
93
|
-
align-self: start;
|
|
94
|
-
max-inline-size: var(--bf-measure);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/* Full-width media follows the paired title/content tracks. */
|
|
98
|
-
:where(.bf-theme) :where(.bf-hero-media.is-full) {
|
|
99
|
-
grid-column: 1 / -1;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/* A closing visual remains inside the hero after its lead. The hero's stack
|
|
103
|
-
owns their shallow internal separation. */
|
|
104
|
-
:where(.bf-theme) :where(.bf-hero) > :where(.bf-hero-media.is-full:last-child) {
|
|
105
|
-
inline-size: 100%;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/* Vanilla's desktop hero boundary is 1036px. The layout descendant responds
|
|
109
|
-
to the root container so embedding it in a narrower rail still collapses
|
|
110
|
-
correctly. */
|
|
111
|
-
/* The section boundary itself follows Vanilla's page-level desktop switch;
|
|
112
|
-
the composition below continues to react to the allocated container. */
|
|
113
|
-
@media (width >= 64.75rem) {
|
|
114
|
-
:where(.bf-theme) :where(.bf-hero) {
|
|
115
|
-
padding-block-end: var(--bf-section-space);
|
|
116
|
-
padding-block-start: calc(var(--bf-space-3) - var(--bf-border-width));
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
:where(.bf-theme) :where(.bf-hero.is-borderless) {
|
|
120
|
-
padding-block-start: var(--bf-space-3);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
@container bf-hero (width >= 64.75rem) {
|
|
125
|
-
:where(.bf-theme) :where(.bf-hero-layout) {
|
|
126
|
-
column-gap: var(--bf-grid-gap-inline);
|
|
127
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
:where(.bf-theme) :where(.bf-hero.is-25-75) :where(.bf-hero-layout) {
|
|
131
|
-
grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
:where(.bf-theme) :where(.bf-hero.is-75-25) :where(.bf-hero-layout) {
|
|
135
|
-
grid-template-columns: minmax(0, 3fr) minmax(0, 1fr);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/* A fallback puts its introduction above the text/media pair. */
|
|
139
|
-
:where(.bf-theme) :where(.bf-hero.is-fallback) :where(.bf-hero-intro) {
|
|
140
|
-
max-inline-size: calc((100cqi - var(--bf-grid-gap-inline)) / 2);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/* Vanilla can intentionally split the three proportioned layouts at its
|
|
145
|
-
medium threshold. The modifier changes only structural tracks. */
|
|
146
|
-
@container bf-hero (width >= 38.75rem) {
|
|
147
|
-
:where(.bf-theme) :where(.bf-hero.is-split-medium) :where(.bf-hero-layout) {
|
|
148
|
-
column-gap: var(--bf-grid-gap-inline);
|
|
149
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
:where(.bf-theme) :where(.bf-hero.is-split-medium.is-25-75) :where(.bf-hero-layout) {
|
|
153
|
-
grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
:where(.bf-theme) :where(.bf-hero.is-split-medium.is-75-25) :where(.bf-hero-layout) {
|
|
157
|
-
grid-template-columns: minmax(0, 3fr) minmax(0, 1fr);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/* Quote wrapper: a heading may introduce a series of quotes. When it does,
|
|
162
|
-
its top rule belongs to the wrapper boundary, not to the quote itself. */
|
|
163
|
-
:where(.bf-theme) :where(.bf-quote-wrapper) {
|
|
164
|
-
container-name: bf-quote-wrapper;
|
|
165
|
-
container-type: inline-size;
|
|
166
|
-
margin-block-end: var(--bf-section-space);
|
|
167
|
-
min-inline-size: 0;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
:where(.bf-theme) :where(.bf-quote-wrapper.is-shallow) {
|
|
171
|
-
margin-block-end: var(--bf-section-space-shallow);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
: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) {
|
|
175
|
-
min-inline-size: 0;
|
|
176
|
-
overflow-wrap: anywhere;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-header) {
|
|
180
|
-
display: grid;
|
|
181
|
-
grid-template-columns: minmax(0, 1fr);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-layout) {
|
|
185
|
-
display: grid;
|
|
186
|
-
grid-template-columns: minmax(0, 1fr);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/* This class is a composition rail around the built-in prose blockquote, not
|
|
190
|
-
a second quotation type scale. The source may still contain rich semantic
|
|
191
|
-
inline markup and retains BF's metric compensation. */
|
|
192
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-prose) {
|
|
193
|
-
inline-size: min(100%, var(--bf-measure));
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-citation) {
|
|
197
|
-
color: var(--bf-color-text-muted);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-citation-name) {
|
|
201
|
-
color: var(--bf-color-text-default);
|
|
202
|
-
font-weight: var(--bf-h6-font-weight);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-signpost) {
|
|
206
|
-
align-self: start;
|
|
207
|
-
max-inline-size: 100%;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-signpost > :where(img, picture, svg)) {
|
|
211
|
-
block-size: auto;
|
|
212
|
-
display: block;
|
|
213
|
-
inline-size: auto;
|
|
214
|
-
max-inline-size: 100%;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/* The quote rail can also be a fractional grid track. Keep its media from
|
|
218
|
-
introducing a sub-baseline row while leaving quotation and citation rhythm
|
|
219
|
-
entirely baseline-compensated while its stack owns semantic gaps. */
|
|
220
|
-
@supports (block-size: calc-size(auto, round(up, size, 1px))) {
|
|
221
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-signpost > :where(img, picture, svg), .bf-quote-wrapper-media > .bf-aspect) {
|
|
222
|
-
block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-quote-row) {
|
|
227
|
-
display: grid;
|
|
228
|
-
grid-template-columns: minmax(0, 1fr);
|
|
229
|
-
min-inline-size: 0;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
@container bf-quote-wrapper (width >= 38.75rem) {
|
|
233
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-header) {
|
|
234
|
-
column-gap: var(--bf-grid-gap-inline);
|
|
235
|
-
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-header-link) {
|
|
239
|
-
grid-column: 4;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-layout) {
|
|
243
|
-
column-gap: var(--bf-grid-gap-inline);
|
|
244
|
-
grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/* Vanilla offsets a quote block without a signpost into the content rail. */
|
|
248
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-content:only-child) {
|
|
249
|
-
grid-column: 2;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-quote-row) {
|
|
253
|
-
column-gap: var(--bf-grid-gap-inline);
|
|
254
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
@container bf-quote-wrapper (width >= 64.75rem) {
|
|
259
|
-
:where(.bf-theme) :where(.bf-quote-wrapper-quote-row) {
|
|
260
|
-
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
20
|
+
return `/* ------------------------------------------------------------------ */
|
|
21
|
+
/* Sites editorial compositions — hero and quote wrapper. */
|
|
22
|
+
/* Section boundaries and grid tracks are structural; nested stacks own */
|
|
23
|
+
/* semantic gaps and every text child keeps metric compensation. */
|
|
24
|
+
/* ------------------------------------------------------------------ */
|
|
25
|
+
|
|
26
|
+
/* Hero: its deliberately asymmetric boundary mirrors the current Vanilla
|
|
27
|
+
section--hero: a compact arrival space, then the normal section exit. The
|
|
28
|
+
entry rule replaces one pixel of padding so it never changes the rhythm. */
|
|
29
|
+
:where(.bf-theme) :where(.bf-hero) {
|
|
30
|
+
border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
|
|
31
|
+
container-name: bf-hero;
|
|
32
|
+
container-type: inline-size;
|
|
33
|
+
min-inline-size: 0;
|
|
34
|
+
padding-block-end: calc(var(--bf-section-space) / 2);
|
|
35
|
+
padding-block-start: calc(var(--bf-space-2) - var(--bf-border-width));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* The hero owns its entry rule so consumers do not need a loose sibling.
|
|
39
|
+
The established borderless modifier removes only that visual boundary. */
|
|
40
|
+
:where(.bf-theme) :where(.bf-hero.is-borderless) {
|
|
41
|
+
border-block-start: 0;
|
|
42
|
+
padding-block-start: var(--bf-space-2);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
:where(.bf-theme) :where(.bf-hero-layout) {
|
|
46
|
+
display: grid;
|
|
47
|
+
grid-template-columns: minmax(0, 1fr);
|
|
48
|
+
min-inline-size: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
:where(.bf-theme) :where(.bf-hero-copy, .bf-hero-title, .bf-hero-content, .bf-hero-media, .bf-hero-signpost, .bf-hero-intro, .bf-hero-lead) {
|
|
52
|
+
min-inline-size: 0;
|
|
53
|
+
overflow-wrap: anywhere;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* The normal hero keeps title, supporting heading, chip, prose and CTA in a
|
|
57
|
+
semantic copy stack. Hero titles are h1 slots and supporting titles are h2
|
|
58
|
+
slots. */
|
|
59
|
+
:where(.bf-theme) :where(.bf-hero-copy) {
|
|
60
|
+
align-content: start;
|
|
61
|
+
display: grid;
|
|
62
|
+
grid-template-columns: minmax(0, 1fr);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
:where(.bf-theme) :where(.bf-hero-chip) {
|
|
66
|
+
margin-block: 0 var(--bf-body-margin-bottom);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Current Vanilla scopes a one-spacing-unit icon/value gap to the hero. */
|
|
70
|
+
:where(.bf-theme) :where(.bf-hero-chip.bf-chip) {
|
|
71
|
+
column-gap: var(--bf-space-1);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
:where(.bf-theme) :where(.bf-hero-media > :where(img, picture, video, canvas, svg), .bf-hero-signpost > :where(img, picture, video, canvas, svg)) {
|
|
75
|
+
block-size: auto;
|
|
76
|
+
display: block;
|
|
77
|
+
inline-size: 100%;
|
|
78
|
+
max-inline-size: 100%;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Intrinsic media ratios commonly resolve to fractional pixels once a hero is
|
|
82
|
+
allocated a fluid grid track. Snap only the media block to the active tier
|
|
83
|
+
baseline so the following semantic text remains on-grid; its inline track
|
|
84
|
+
and the surrounding Vanilla proportions remain unchanged. */
|
|
85
|
+
@supports (block-size: calc-size(auto, round(up, size, 1px))) {
|
|
86
|
+
:where(.bf-theme) :where(.bf-hero-media > .bf-aspect, .bf-hero-signpost > :where(img, picture, video, canvas, svg)) {
|
|
87
|
+
block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* A signpost is a compact associated mark, not a decorative background. */
|
|
92
|
+
:where(.bf-theme) :where(.bf-hero-signpost) {
|
|
93
|
+
align-self: start;
|
|
94
|
+
max-inline-size: var(--bf-measure);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Full-width media follows the paired title/content tracks. */
|
|
98
|
+
:where(.bf-theme) :where(.bf-hero-media.is-full) {
|
|
99
|
+
grid-column: 1 / -1;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* A closing visual remains inside the hero after its lead. The hero's stack
|
|
103
|
+
owns their shallow internal separation. */
|
|
104
|
+
:where(.bf-theme) :where(.bf-hero) > :where(.bf-hero-media.is-full:last-child) {
|
|
105
|
+
inline-size: 100%;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Vanilla's desktop hero boundary is 1036px. The layout descendant responds
|
|
109
|
+
to the root container so embedding it in a narrower rail still collapses
|
|
110
|
+
correctly. */
|
|
111
|
+
/* The section boundary itself follows Vanilla's page-level desktop switch;
|
|
112
|
+
the composition below continues to react to the allocated container. */
|
|
113
|
+
@media (width >= 64.75rem) {
|
|
114
|
+
:where(.bf-theme) :where(.bf-hero) {
|
|
115
|
+
padding-block-end: var(--bf-section-space);
|
|
116
|
+
padding-block-start: calc(var(--bf-space-3) - var(--bf-border-width));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
:where(.bf-theme) :where(.bf-hero.is-borderless) {
|
|
120
|
+
padding-block-start: var(--bf-space-3);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@container bf-hero (width >= 64.75rem) {
|
|
125
|
+
:where(.bf-theme) :where(.bf-hero-layout) {
|
|
126
|
+
column-gap: var(--bf-grid-gap-inline);
|
|
127
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
:where(.bf-theme) :where(.bf-hero.is-25-75) :where(.bf-hero-layout) {
|
|
131
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
:where(.bf-theme) :where(.bf-hero.is-75-25) :where(.bf-hero-layout) {
|
|
135
|
+
grid-template-columns: minmax(0, 3fr) minmax(0, 1fr);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* A fallback puts its introduction above the text/media pair. */
|
|
139
|
+
:where(.bf-theme) :where(.bf-hero.is-fallback) :where(.bf-hero-intro) {
|
|
140
|
+
max-inline-size: calc((100cqi - var(--bf-grid-gap-inline)) / 2);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Vanilla can intentionally split the three proportioned layouts at its
|
|
145
|
+
medium threshold. The modifier changes only structural tracks. */
|
|
146
|
+
@container bf-hero (width >= 38.75rem) {
|
|
147
|
+
:where(.bf-theme) :where(.bf-hero.is-split-medium) :where(.bf-hero-layout) {
|
|
148
|
+
column-gap: var(--bf-grid-gap-inline);
|
|
149
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
:where(.bf-theme) :where(.bf-hero.is-split-medium.is-25-75) :where(.bf-hero-layout) {
|
|
153
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
:where(.bf-theme) :where(.bf-hero.is-split-medium.is-75-25) :where(.bf-hero-layout) {
|
|
157
|
+
grid-template-columns: minmax(0, 3fr) minmax(0, 1fr);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* Quote wrapper: a heading may introduce a series of quotes. When it does,
|
|
162
|
+
its top rule belongs to the wrapper boundary, not to the quote itself. */
|
|
163
|
+
:where(.bf-theme) :where(.bf-quote-wrapper) {
|
|
164
|
+
container-name: bf-quote-wrapper;
|
|
165
|
+
container-type: inline-size;
|
|
166
|
+
margin-block-end: var(--bf-section-space);
|
|
167
|
+
min-inline-size: 0;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
:where(.bf-theme) :where(.bf-quote-wrapper.is-shallow) {
|
|
171
|
+
margin-block-end: var(--bf-section-space-shallow);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
: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) {
|
|
175
|
+
min-inline-size: 0;
|
|
176
|
+
overflow-wrap: anywhere;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-header) {
|
|
180
|
+
display: grid;
|
|
181
|
+
grid-template-columns: minmax(0, 1fr);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-layout) {
|
|
185
|
+
display: grid;
|
|
186
|
+
grid-template-columns: minmax(0, 1fr);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* This class is a composition rail around the built-in prose blockquote, not
|
|
190
|
+
a second quotation type scale. The source may still contain rich semantic
|
|
191
|
+
inline markup and retains BF's metric compensation. */
|
|
192
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-prose) {
|
|
193
|
+
inline-size: min(100%, var(--bf-measure));
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-citation) {
|
|
197
|
+
color: var(--bf-color-text-muted);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-citation-name) {
|
|
201
|
+
color: var(--bf-color-text-default);
|
|
202
|
+
font-weight: var(--bf-h6-font-weight);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-signpost) {
|
|
206
|
+
align-self: start;
|
|
207
|
+
max-inline-size: 100%;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-signpost > :where(img, picture, svg)) {
|
|
211
|
+
block-size: auto;
|
|
212
|
+
display: block;
|
|
213
|
+
inline-size: auto;
|
|
214
|
+
max-inline-size: 100%;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* The quote rail can also be a fractional grid track. Keep its media from
|
|
218
|
+
introducing a sub-baseline row while leaving quotation and citation rhythm
|
|
219
|
+
entirely baseline-compensated while its stack owns semantic gaps. */
|
|
220
|
+
@supports (block-size: calc-size(auto, round(up, size, 1px))) {
|
|
221
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-signpost > :where(img, picture, svg), .bf-quote-wrapper-media > .bf-aspect) {
|
|
222
|
+
block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-quote-row) {
|
|
227
|
+
display: grid;
|
|
228
|
+
grid-template-columns: minmax(0, 1fr);
|
|
229
|
+
min-inline-size: 0;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
@container bf-quote-wrapper (width >= 38.75rem) {
|
|
233
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-header) {
|
|
234
|
+
column-gap: var(--bf-grid-gap-inline);
|
|
235
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-header-link) {
|
|
239
|
+
grid-column: 4;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-layout) {
|
|
243
|
+
column-gap: var(--bf-grid-gap-inline);
|
|
244
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* Vanilla offsets a quote block without a signpost into the content rail. */
|
|
248
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-content:only-child) {
|
|
249
|
+
grid-column: 2;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-quote-row) {
|
|
253
|
+
column-gap: var(--bf-grid-gap-inline);
|
|
254
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
@container bf-quote-wrapper (width >= 64.75rem) {
|
|
259
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-quote-row) {
|
|
260
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
263
|
`;
|
|
264
264
|
}
|