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
@@ -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
  }