baseline-foundry 0.1.4 → 0.1.6
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 +17 -9
- package/config/experiments/ibm-plex-engine-smoke.json +1 -1
- package/config/experiments/ubuntu-engine-smoke.json +1 -1
- package/config/foundation-theme.json +1 -1
- package/config/tiers/app.json +6 -6
- package/config/tiers/documentation.json +2 -2
- package/config/tiers/editorial.json +1 -1
- package/config/tiers/os.json +6 -6
- package/dist/baseline-grid-overlay.js +2 -2
- package/dist/build.js +4 -4
- package/dist/code-snippet.js +1 -1
- package/dist/css-app-tier.js +16 -5
- package/dist/css-components/article-pagination.js +9 -8
- package/dist/css-components/button-actions.js +24 -4
- package/dist/css-components/cards-options.js +8 -8
- package/dist/css-components/chip-badge-status.d.ts +0 -3
- package/dist/css-components/chip-badge-status.js +57 -10
- package/dist/css-components/content-card.d.ts +7 -7
- package/dist/css-components/content-card.js +17 -16
- package/dist/css-components/control-row.d.ts +1 -1
- package/dist/css-components/control-row.js +1 -1
- package/dist/css-components/document-navigation.js +66 -29
- package/dist/css-components/editorial-content.js +1 -1
- package/dist/css-components/interactive-feedback.js +50 -28
- package/dist/css-components/interactive-tables.js +13 -8
- package/dist/css-components/legacy-navigation.d.ts +0 -1
- package/dist/css-components/legacy-navigation.js +108 -32
- package/dist/css-components/linked-logo-site-layout.d.ts +3 -3
- package/dist/css-components/linked-logo-site-layout.js +17 -20
- package/dist/css-components/list-tree.js +21 -19
- package/dist/css-components/list.js +9 -7
- package/dist/css-components/logo-media.d.ts +6 -6
- package/dist/css-components/logo-media.js +38 -27
- package/dist/css-components/navigation-layout.js +6 -8
- package/dist/css-components/panel.js +12 -12
- package/dist/css-components/search-box-and-filter.d.ts +0 -1
- package/dist/css-components/search-box-and-filter.js +18 -19
- package/dist/css-components/sites-editorial-ports.d.ts +3 -4
- package/dist/css-components/sites-editorial-ports.js +61 -29
- package/dist/css-components/sites-foundation.js +15 -19
- package/dist/css-components/sites-rich-lists.d.ts +5 -5
- package/dist/css-components/sites-rich-lists.js +26 -36
- package/dist/css-components/static-content-ports.d.ts +3 -3
- package/dist/css-components/static-content-ports.js +51 -37
- package/dist/css-components/tab-section.d.ts +3 -3
- package/dist/css-components/tab-section.js +34 -26
- package/dist/css-components/table.js +4 -7
- package/dist/css-components/tabs-choice-breadcrumbs.js +25 -21
- package/dist/css-components/tiered-list-equal-height-row.js +10 -10
- package/dist/css-components.js +243 -124
- package/dist/css-grid.d.ts +1 -1
- package/dist/css-grid.js +18 -8
- package/dist/css.js +94 -18
- package/dist/experiments/ibm-plex-engine-smoke/styles.css +1005 -563
- package/dist/experiments/ibm-plex-engine-smoke/surfaces.json +2 -2
- package/dist/experiments/ibm-plex-engine-smoke/tokens.json +1 -1
- package/dist/in-page-navigation.js +1 -1
- package/dist/presets/app-tier/styles.css +1046 -593
- package/dist/presets/app-tier/surfaces.json +17 -17
- package/dist/presets/app-tier/tokens.json +7 -7
- package/dist/presets/prose/styles.css +1036 -587
- package/dist/presets/prose/surfaces.json +17 -17
- package/dist/presets/prose/tokens.json +1 -1
- package/dist/resizable-aside.js +12 -4
- package/dist/styles.css +1036 -587
- package/dist/surfaces.json +17 -17
- package/dist/tiers/app/styles.css +1046 -593
- package/dist/tiers/app/surfaces.json +17 -17
- package/dist/tiers/app/tokens.json +7 -7
- package/dist/tiers/documentation/styles.css +1037 -588
- package/dist/tiers/documentation/surfaces.json +17 -17
- package/dist/tiers/documentation/tokens.json +2 -2
- package/dist/tiers/editorial/styles.css +1036 -587
- package/dist/tiers/editorial/surfaces.json +17 -17
- package/dist/tiers/editorial/tokens.json +1 -1
- package/dist/tiers/os/styles.css +1042 -593
- package/dist/tiers/os/surfaces.json +17 -17
- package/dist/tiers/os/tokens.json +7 -7
- package/dist/tokens.json +1 -1
- package/dist/types.d.ts +1 -1
- package/docs/publishing.md +1 -1
- package/package.json +2 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Vanilla parity ports: logo section and media object.
|
|
3
3
|
*
|
|
4
|
-
* Vanilla → BF rhythm mapping (at Vanilla's
|
|
5
|
-
* - Logo mark heights
|
|
4
|
+
* Vanilla → BF rhythm mapping (at Vanilla's 0.5rem unit):
|
|
5
|
+
* - Logo mark heights 4.5rem / 6.5rem → `space-8 + space-1` / `space-12 +
|
|
6
6
|
* space-1` (nine / thirteen BF baselines).
|
|
7
|
-
* - Logo
|
|
7
|
+
* - Logo 2rem inline gap → `space-4`; Vanilla's 0.5rem / 1rem negative row pull
|
|
8
8
|
* and matching wrapper compensation → `space-1` / `space-2`.
|
|
9
|
-
* - Media thumbnails
|
|
10
|
-
* gap → `space-2`; trailing
|
|
11
|
-
*
|
|
9
|
+
* - Media thumbnails 3rem / 6rem → `space-6` / `space-12`; their 1rem
|
|
10
|
+
* gap → `space-2`; trailing 1.5rem → `section-space-shallow`; metadata top
|
|
11
|
+
* 0.5rem → `space-1`.
|
|
12
12
|
*
|
|
13
13
|
* Those are relative values, rather than fixed pixels, so the same semantics
|
|
14
14
|
* retain the deliberately denser documentation, app, and OS tiers.
|
|
@@ -21,7 +21,7 @@ export function logoMediaCss() {
|
|
|
21
21
|
:where(.bf-theme) :where(.bf-logo-section) {
|
|
22
22
|
container-name: bf-logo-section;
|
|
23
23
|
container-type: inline-size;
|
|
24
|
-
margin
|
|
24
|
+
margin: 0;
|
|
25
25
|
min-inline-size: 0;
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -55,8 +55,8 @@ export function logoMediaCss() {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
:where(.bf-theme) :where(.bf-logo-section-link:focus-visible) {
|
|
58
|
-
outline:
|
|
59
|
-
outline-offset:
|
|
58
|
+
outline: 0.125rem solid var(--bf-color-focus);
|
|
59
|
+
outline-offset: 0.125rem;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
:where(.bf-theme) :where(.bf-logo-section-logo) {
|
|
@@ -83,7 +83,7 @@ export function logoMediaCss() {
|
|
|
83
83
|
inline-size: 100%;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
/* Vanilla's small breakpoint is
|
|
86
|
+
/* Vanilla's small breakpoint is 38.75rem. The items descendant, rather than the
|
|
87
87
|
query container itself, responds when its allocated space reaches it. */
|
|
88
88
|
@container bf-logo-section (width >= 38.75rem) {
|
|
89
89
|
:where(.bf-theme) :where(.bf-logo-section-items) {
|
|
@@ -107,19 +107,21 @@ export function logoMediaCss() {
|
|
|
107
107
|
|
|
108
108
|
/* ------------------------------------------------------------------ */
|
|
109
109
|
/* Media object — semantic media/content slots with a container-owned */
|
|
110
|
-
/* structural collapse
|
|
110
|
+
/* structural collapse. Content roles retain their metric boxes. */
|
|
111
111
|
/* ------------------------------------------------------------------ */
|
|
112
112
|
|
|
113
113
|
:where(.bf-theme) :where(.bf-media-object) {
|
|
114
|
-
|
|
114
|
+
container-name: bf-media-object;
|
|
115
|
+
container-type: inline-size;
|
|
116
|
+
margin: 0;
|
|
115
117
|
min-inline-size: 0;
|
|
116
118
|
}
|
|
117
119
|
|
|
118
120
|
:where(.bf-theme) :where(.bf-media-object-layout) {
|
|
119
|
-
display: grid;
|
|
120
121
|
align-items: start;
|
|
121
|
-
column-gap: var(--bf-
|
|
122
|
-
|
|
122
|
+
column-gap: var(--bf-grid-gap-inline);
|
|
123
|
+
display: grid;
|
|
124
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
123
125
|
min-inline-size: 0;
|
|
124
126
|
}
|
|
125
127
|
|
|
@@ -131,6 +133,10 @@ export function logoMediaCss() {
|
|
|
131
133
|
min-inline-size: 0;
|
|
132
134
|
}
|
|
133
135
|
|
|
136
|
+
:where(.bf-theme) :where(.bf-media-object-media) {
|
|
137
|
+
grid-column: 1 / span 2;
|
|
138
|
+
}
|
|
139
|
+
|
|
134
140
|
:where(.bf-theme) :where(.bf-media-object-media > :where(img, picture, svg, video)) {
|
|
135
141
|
block-size: 100%;
|
|
136
142
|
display: block;
|
|
@@ -145,6 +151,7 @@ export function logoMediaCss() {
|
|
|
145
151
|
}
|
|
146
152
|
|
|
147
153
|
:where(.bf-theme) :where(.bf-media-object-content) {
|
|
154
|
+
grid-column: 3 / -1;
|
|
148
155
|
min-inline-size: 0;
|
|
149
156
|
overflow-wrap: anywhere;
|
|
150
157
|
}
|
|
@@ -184,8 +191,12 @@ export function logoMediaCss() {
|
|
|
184
191
|
}
|
|
185
192
|
|
|
186
193
|
:where(.bf-theme) :where(.bf-media-object-meta-list) {
|
|
194
|
+
--bf-stack-space: var(--bf-space-1);
|
|
195
|
+
align-content: start;
|
|
196
|
+
display: grid;
|
|
197
|
+
gap: var(--bf-stack-space);
|
|
187
198
|
list-style: none;
|
|
188
|
-
margin:
|
|
199
|
+
margin: 0;
|
|
189
200
|
padding: 0;
|
|
190
201
|
}
|
|
191
202
|
|
|
@@ -198,22 +209,22 @@ export function logoMediaCss() {
|
|
|
198
209
|
overflow-wrap: anywhere;
|
|
199
210
|
}
|
|
200
211
|
|
|
201
|
-
:where(.bf-theme) :where(.bf-media-object-meta + .bf-media-object-meta) {
|
|
202
|
-
margin-block-start: var(--bf-space-1);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
212
|
:where(.bf-theme) :where(.bf-media-object-meta .bf-icon) {
|
|
206
213
|
margin-block-start: var(--bf-body-nudge-start);
|
|
207
214
|
}
|
|
208
215
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
216
|
+
@container bf-media-object (width >= 38.75rem) {
|
|
217
|
+
:where(.bf-theme) :where(.bf-media-object-layout) {
|
|
218
|
+
grid-template-columns: repeat(8, minmax(0, 1fr));
|
|
219
|
+
}
|
|
213
220
|
|
|
214
|
-
:where(.bf-theme) :where(.bf-media-object
|
|
215
|
-
|
|
216
|
-
|
|
221
|
+
:where(.bf-theme) :where(.bf-media-object-media) {
|
|
222
|
+
grid-column: 1 / span 2;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
:where(.bf-theme) :where(.bf-media-object-content) {
|
|
226
|
+
grid-column: 3 / -1;
|
|
227
|
+
}
|
|
217
228
|
}
|
|
218
229
|
`;
|
|
219
230
|
}
|
|
@@ -14,8 +14,8 @@ export function navigationLayoutCss() {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/* The tagged treatment is opt-in. The Circle of Friends is aligned to the
|
|
17
|
-
* first title line, then the
|
|
18
|
-
* Its
|
|
17
|
+
* first title line, then the 2.375rem tag extends upward to the navigation edge.
|
|
18
|
+
* Its 1.375rem inline size preserves the established 38:22 (~1.73) tag ratio; the
|
|
19
19
|
* tag must not stretch to the full occupied navigation row. */
|
|
20
20
|
:where(.bf-theme) :where(.bf-top-navigation-logo.is-canonical-tagged) {
|
|
21
21
|
min-inline-size: 0;
|
|
@@ -69,13 +69,11 @@ export function navigationLayoutCss() {
|
|
|
69
69
|
line-height: var(--bf-top-navigation-logo-title-line-height, var(--bf-body-line-height, 1.5));
|
|
70
70
|
overflow: visible;
|
|
71
71
|
overflow-wrap: anywhere;
|
|
72
|
-
/* The first title line and the
|
|
73
|
-
*
|
|
74
|
-
*
|
|
72
|
+
/* The first title line and the 1rem mark share the public brand-line centre.
|
|
73
|
+
* The derived brand block is twice that fixed centre, so the orange tag can
|
|
74
|
+
* extend upward without changing the title or adjacent-header baseline. */
|
|
75
75
|
padding-block: calc(
|
|
76
|
-
var(--bf-
|
|
77
|
-
- var(--bf-top-navigation-logo-icon-bottom-offset)
|
|
78
|
-
- (var(--bf-top-navigation-logo-icon-size) / 2)
|
|
76
|
+
var(--bf-navigation-brand-line-center-block)
|
|
79
77
|
- (var(--bf-top-navigation-logo-title-line-height, var(--bf-body-line-height, 1.5rem)) / 2)
|
|
80
78
|
);
|
|
81
79
|
text-overflow: clip;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export function panelCss(options) {
|
|
2
2
|
const { bodyTypeStyles, h4TypeStyles } = options;
|
|
3
3
|
return `:where(.bf-theme) :where(.bf-panel) {
|
|
4
|
+
--bf-panel-content-padding-inline: var(--bf-component-inline-inset-continuation);
|
|
4
5
|
background: var(--bf-color-background-default);
|
|
5
6
|
color: var(--bf-color-text-default);
|
|
6
7
|
display: flex;
|
|
@@ -23,6 +24,9 @@ export function panelCss(options) {
|
|
|
23
24
|
overscroll-behavior: contain;
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
/* Panel chrome and content consume the live page-grid gutter through a local
|
|
28
|
+
* derived property, so their internal text rails follow the same
|
|
29
|
+
* viewport brackets as surrounding page content. */
|
|
26
30
|
:where(.bf-theme) :where(.bf-panel-header) {
|
|
27
31
|
align-items: start;
|
|
28
32
|
display: flex;
|
|
@@ -31,7 +35,7 @@ export function panelCss(options) {
|
|
|
31
35
|
justify-content: space-between;
|
|
32
36
|
padding-block-end: var(--bf-panel-padding-block);
|
|
33
37
|
padding-block-start: var(--bf-panel-padding-block);
|
|
34
|
-
padding-inline: var(--bf-panel-padding-inline);
|
|
38
|
+
padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
/* A navigation brand keeps the Canonical tag attached to the panel's top edge
|
|
@@ -41,17 +45,13 @@ export function panelCss(options) {
|
|
|
41
45
|
gap: 0;
|
|
42
46
|
padding-block: 0;
|
|
43
47
|
padding-inline-end: 0;
|
|
44
|
-
padding-inline-start: var(--bf-panel-padding-inline);
|
|
48
|
+
padding-inline-start: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
:where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) > :where(.bf-top-navigation-logo.is-canonical-tagged) {
|
|
48
52
|
inline-size: 100%;
|
|
49
53
|
}
|
|
50
54
|
|
|
51
|
-
:where(.bf-theme) :where(.bf-panel-header.is-navigation-brand) :where(.bf-top-navigation-logo-title) {
|
|
52
|
-
transform: translateY(var(--bf-navigation-brand-title-optical-offset-block));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
55
|
:where(.bf-theme) :where(.bf-panel-header) > :where(.bf-panel-title) {
|
|
56
56
|
min-inline-size: 0;
|
|
57
57
|
}
|
|
@@ -72,10 +72,10 @@ export function panelCss(options) {
|
|
|
72
72
|
flex-wrap: wrap;
|
|
73
73
|
gap: var(--bf-field-gap);
|
|
74
74
|
justify-content: space-between;
|
|
75
|
-
min-block-size: calc(var(--bf-control-box-size-compact) +
|
|
75
|
+
min-block-size: calc(var(--bf-control-box-size-compact) + var(--bf-panel-padding-block));
|
|
76
76
|
padding-block-end: var(--bf-panel-padding-block);
|
|
77
|
-
padding-block-start:
|
|
78
|
-
padding-inline: var(--bf-panel-padding-inline);
|
|
77
|
+
padding-block-start: 0;
|
|
78
|
+
padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
:where(.bf-theme) :where(.bf-panel-footer.is-sticky) {
|
|
@@ -127,8 +127,8 @@ ${bodyTypeStyles} align-items: center;
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
:where(.bf-theme) :where(.bf-panel-toggle:focus-visible) {
|
|
130
|
-
outline:
|
|
131
|
-
outline-offset:
|
|
130
|
+
outline: 0.125rem solid var(--bf-color-focus);
|
|
131
|
+
outline-offset: 0.125rem;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
:where(.bf-theme) :where(.bf-panel-content) {
|
|
@@ -136,7 +136,7 @@ ${bodyTypeStyles} align-items: center;
|
|
|
136
136
|
min-block-size: 0;
|
|
137
137
|
padding-block-end: var(--bf-panel-padding-block);
|
|
138
138
|
padding-block-start: var(--bf-panel-padding-block);
|
|
139
|
-
padding-inline: var(--bf-panel-padding-inline);
|
|
139
|
+
padding-inline: var(--bf-panel-content-padding-inline, var(--bf-panel-padding-inline));
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
:where(.bf-theme) :where(.bf-panel-content.is-flush) {
|
|
@@ -2,7 +2,6 @@ type SearchBoxAndFilterCssOptions = {
|
|
|
2
2
|
bodySelectedStartNudge: string;
|
|
3
3
|
bodyTypeStyles: string;
|
|
4
4
|
buttonBlockPaddingVar: string;
|
|
5
|
-
h6TypeStyles: string;
|
|
6
5
|
inputMarginBottom: string;
|
|
7
6
|
};
|
|
8
7
|
export declare function searchBoxAndFilterCss(options: SearchBoxAndFilterCssOptions): string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export function searchBoxAndFilterCss(options) {
|
|
2
|
-
const { bodySelectedStartNudge, bodyTypeStyles, buttonBlockPaddingVar,
|
|
2
|
+
const { bodySelectedStartNudge, bodyTypeStyles, buttonBlockPaddingVar, inputMarginBottom, } = options;
|
|
3
3
|
return `:where(.bf-theme) :where(.bf-search-box) {
|
|
4
|
-
--bf-search-box-action-inline-size: calc(1rem + (var(--bf-
|
|
4
|
+
--bf-search-box-action-inline-size: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
|
|
5
5
|
--bf-search-box-trailing-inline-size: calc((var(--bf-search-box-action-inline-size) * 2) + var(--bf-border-width));
|
|
6
6
|
display: flex;
|
|
7
7
|
inline-size: 100%;
|
|
@@ -18,12 +18,12 @@ export function searchBoxAndFilterCss(options) {
|
|
|
18
18
|
|
|
19
19
|
:where(.bf-theme) :where(.bf-search-box-reset, .bf-search-box-button) {
|
|
20
20
|
align-items: center;
|
|
21
|
-
block-size:
|
|
21
|
+
block-size: auto;
|
|
22
22
|
display: inline-flex;
|
|
23
23
|
inline-size: var(--bf-search-box-action-inline-size);
|
|
24
|
+
inset-block: 0;
|
|
24
25
|
justify-content: center;
|
|
25
26
|
position: absolute;
|
|
26
|
-
top: 0;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
:where(.bf-theme) :where(.bf-search-box-reset) {
|
|
@@ -40,7 +40,7 @@ export function searchBoxAndFilterCss(options) {
|
|
|
40
40
|
inset-inline-end: var(--bf-border-width);
|
|
41
41
|
margin: 0;
|
|
42
42
|
padding: 0;
|
|
43
|
-
text-indent: -
|
|
43
|
+
text-indent: -624.9375rem;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
:where(.bf-theme) :where(.bf-search-box-button)::before {
|
|
@@ -67,8 +67,8 @@ export function searchBoxAndFilterCss(options) {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
:where(.bf-theme) :where(.bf-search-box-reset:focus-visible, .bf-search-box-button:focus-visible) {
|
|
70
|
-
outline:
|
|
71
|
-
outline-offset: -
|
|
70
|
+
outline: 0.125rem solid var(--bf-color-focus);
|
|
71
|
+
outline-offset: -0.125rem;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
:where(.bf-theme) :where(.bf-search-and-filter) {
|
|
@@ -83,7 +83,7 @@ export function searchBoxAndFilterCss(options) {
|
|
|
83
83
|
:where(.bf-theme) :where(.bf-search-and-filter-search-container) {
|
|
84
84
|
align-items: stretch;
|
|
85
85
|
background: transparent;
|
|
86
|
-
box-shadow: inset 0 -
|
|
86
|
+
box-shadow: inset 0 -0.0625rem 0 var(--bf-color-border-high-contrast);
|
|
87
87
|
display: flex;
|
|
88
88
|
flex-wrap: wrap;
|
|
89
89
|
gap: var(--bf-field-gap);
|
|
@@ -99,7 +99,7 @@ export function searchBoxAndFilterCss(options) {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
:where(.bf-theme) :where(.bf-search-and-filter-box) {
|
|
102
|
-
--bf-search-and-filter-action-inline-size: calc(1rem + (var(--bf-
|
|
102
|
+
--bf-search-and-filter-action-inline-size: calc(1rem + (var(--bf-component-inline-inset-field) * 2));
|
|
103
103
|
--bf-search-and-filter-trailing-inline-size: calc(var(--bf-search-and-filter-action-inline-size) * 2);
|
|
104
104
|
display: inline-flex;
|
|
105
105
|
flex: 1 1 12rem;
|
|
@@ -116,17 +116,17 @@ export function searchBoxAndFilterCss(options) {
|
|
|
116
116
|
:where(.bf-theme) :where(.bf-search-and-filter-search-button) {
|
|
117
117
|
appearance: none;
|
|
118
118
|
background: transparent;
|
|
119
|
-
block-size:
|
|
119
|
+
block-size: auto;
|
|
120
120
|
border: 0;
|
|
121
121
|
color: var(--bf-color-text-default);
|
|
122
122
|
cursor: pointer;
|
|
123
123
|
inline-size: var(--bf-search-and-filter-action-inline-size);
|
|
124
|
+
inset-block: 0;
|
|
124
125
|
inset-inline-end: 0;
|
|
125
126
|
margin: 0;
|
|
126
127
|
padding: 0;
|
|
127
128
|
position: absolute;
|
|
128
|
-
text-indent: -
|
|
129
|
-
top: 0;
|
|
129
|
+
text-indent: -624.9375rem;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
:where(.bf-theme) :where(.bf-search-and-filter-search-button)::before {
|
|
@@ -153,16 +153,16 @@ export function searchBoxAndFilterCss(options) {
|
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
:where(.bf-theme) :where(.bf-search-and-filter-search-button:focus-visible, .bf-search-and-filter-selected-count:focus-visible) {
|
|
156
|
-
outline:
|
|
157
|
-
outline-offset: -
|
|
156
|
+
outline: 0.125rem solid var(--bf-color-focus);
|
|
157
|
+
outline-offset: -0.125rem;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
:where(.bf-theme) :where(.bf-search-and-filter-clear) {
|
|
161
|
-
block-size:
|
|
161
|
+
block-size: auto;
|
|
162
162
|
inline-size: var(--bf-search-and-filter-action-inline-size);
|
|
163
|
+
inset-block: 0;
|
|
163
164
|
inset-inline-end: var(--bf-search-and-filter-action-inline-size);
|
|
164
165
|
position: absolute;
|
|
165
|
-
top: 0;
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
:where(.bf-theme) :where(.bf-search-and-filter-selected-count) {
|
|
@@ -187,12 +187,12 @@ ${bodyTypeStyles} appearance: none;
|
|
|
187
187
|
background-color: var(--bf-color-background-inputs);
|
|
188
188
|
border: var(--bf-border-width) solid var(--bf-color-border-default);
|
|
189
189
|
border-top: 0;
|
|
190
|
-
box-shadow: 0
|
|
190
|
+
box-shadow: 0 1.5rem 4.5rem rgba(0, 0, 0, 0.38);
|
|
191
191
|
display: grid;
|
|
192
192
|
gap: var(--bf-field-gap);
|
|
193
193
|
opacity: 1;
|
|
194
194
|
padding-bottom: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
|
|
195
|
-
padding-inline: var(--bf-
|
|
195
|
+
padding-inline: var(--bf-component-inline-inset-continuation);
|
|
196
196
|
padding-top: var(--bf-panel-padding-block);
|
|
197
197
|
position: absolute;
|
|
198
198
|
top: 100%;
|
|
@@ -237,7 +237,6 @@ ${bodyTypeStyles} appearance: none;
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
:where(.bf-theme) :where(.bf-filter-panel-section-heading) {
|
|
240
|
-
${h6TypeStyles} color: var(--bf-color-text-muted);
|
|
241
240
|
margin: 0;
|
|
242
241
|
padding-block: 0;
|
|
243
242
|
}
|
|
@@ -7,10 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Vanilla → BF spacing mapping:
|
|
9
9
|
* - Hero's `$spv--large` / `$spv--x-large` top boundary → `space-2` /
|
|
10
|
-
* `space-3`;
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* and gutter token at Vanilla's 620px / 1036px composition thresholds.
|
|
10
|
+
* `space-3`; the surrounding stack owns the section exit.
|
|
11
|
+
* - The default 50/50 relationship remains viable from a measured 45rem
|
|
12
|
+
* allocation; explicit 25/75 and 75/25 variants retain their own thresholds.
|
|
14
13
|
* - Quote-wrapper's signpost/content and quote/citation relationships use
|
|
15
14
|
* the same 25/75 and 2/1 proportions. A quotation itself remains the
|
|
16
15
|
* existing semantic BF prose `blockquote`; it is not recreated as a
|
|
@@ -7,10 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Vanilla → BF spacing mapping:
|
|
9
9
|
* - Hero's `$spv--large` / `$spv--x-large` top boundary → `space-2` /
|
|
10
|
-
* `space-3`;
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* and gutter token at Vanilla's 620px / 1036px composition thresholds.
|
|
10
|
+
* `space-3`; the surrounding stack owns the section exit.
|
|
11
|
+
* - The default 50/50 relationship remains viable from a measured 45rem
|
|
12
|
+
* allocation; explicit 25/75 and 75/25 variants retain their own thresholds.
|
|
14
13
|
* - Quote-wrapper's signpost/content and quote/citation relationships use
|
|
15
14
|
* the same 25/75 and 2/1 proportions. A quotation itself remains the
|
|
16
15
|
* existing semantic BF prose `blockquote`; it is not recreated as a
|
|
@@ -23,15 +22,15 @@ export function sitesEditorialPortsCss() {
|
|
|
23
22
|
/* semantic gaps and every text child keeps metric compensation. */
|
|
24
23
|
/* ------------------------------------------------------------------ */
|
|
25
24
|
|
|
26
|
-
/* Hero:
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
/* Hero: the compact arrival space belongs inside its entry rule. The outer
|
|
26
|
+
stack owns the section exit, and the rule replaces one pixel of padding so
|
|
27
|
+
it never changes the rhythm. */
|
|
29
28
|
:where(.bf-theme) :where(.bf-hero) {
|
|
30
29
|
border-block-start: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
|
|
31
30
|
container-name: bf-hero;
|
|
32
31
|
container-type: inline-size;
|
|
33
32
|
min-inline-size: 0;
|
|
34
|
-
padding-block-end:
|
|
33
|
+
padding-block-end: 0;
|
|
35
34
|
padding-block-start: calc(var(--bf-space-2) - var(--bf-border-width));
|
|
36
35
|
}
|
|
37
36
|
|
|
@@ -44,6 +43,7 @@ export function sitesEditorialPortsCss() {
|
|
|
44
43
|
|
|
45
44
|
:where(.bf-theme) :where(.bf-hero-layout) {
|
|
46
45
|
display: grid;
|
|
46
|
+
gap: var(--bf-section-space-shallow);
|
|
47
47
|
grid-template-columns: minmax(0, 1fr);
|
|
48
48
|
min-inline-size: 0;
|
|
49
49
|
}
|
|
@@ -53,9 +53,9 @@ export function sitesEditorialPortsCss() {
|
|
|
53
53
|
overflow-wrap: anywhere;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
/*
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
/* Legacy copy slots remain valid for signpost variants. The default arrival
|
|
57
|
+
composition separates a title area from its supporting content area, and
|
|
58
|
+
the demo composes each area with the public stack density modifiers. */
|
|
59
59
|
:where(.bf-theme) :where(.bf-hero-copy) {
|
|
60
60
|
align-content: start;
|
|
61
61
|
display: grid;
|
|
@@ -82,7 +82,7 @@ export function sitesEditorialPortsCss() {
|
|
|
82
82
|
allocated a fluid grid track. Snap only the media block to the active tier
|
|
83
83
|
baseline so the following semantic text remains on-grid; its inline track
|
|
84
84
|
and the surrounding Vanilla proportions remain unchanged. */
|
|
85
|
-
@supports (block-size: calc-size(auto, round(up, size,
|
|
85
|
+
@supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
|
|
86
86
|
:where(.bf-theme) :where(.bf-hero-media > .bf-aspect, .bf-hero-signpost > :where(img, picture, video, canvas, svg)) {
|
|
87
87
|
block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
|
|
88
88
|
}
|
|
@@ -105,14 +105,10 @@ export function sitesEditorialPortsCss() {
|
|
|
105
105
|
inline-size: 100%;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
/*
|
|
109
|
-
|
|
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. */
|
|
108
|
+
/* The section boundary follows the page-level desktop switch, while the
|
|
109
|
+
two-column composition uses its measured intrinsic allocation below. */
|
|
113
110
|
@media (width >= 64.75rem) {
|
|
114
111
|
:where(.bf-theme) :where(.bf-hero) {
|
|
115
|
-
padding-block-end: var(--bf-section-space);
|
|
116
112
|
padding-block-start: calc(var(--bf-space-3) - var(--bf-border-width));
|
|
117
113
|
}
|
|
118
114
|
|
|
@@ -121,7 +117,7 @@ export function sitesEditorialPortsCss() {
|
|
|
121
117
|
}
|
|
122
118
|
}
|
|
123
119
|
|
|
124
|
-
@container bf-hero (width >=
|
|
120
|
+
@container bf-hero (width >= 45rem) {
|
|
125
121
|
:where(.bf-theme) :where(.bf-hero-layout) {
|
|
126
122
|
column-gap: var(--bf-grid-gap-inline);
|
|
127
123
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
@@ -141,9 +137,10 @@ export function sitesEditorialPortsCss() {
|
|
|
141
137
|
}
|
|
142
138
|
}
|
|
143
139
|
|
|
144
|
-
/*
|
|
145
|
-
|
|
146
|
-
|
|
140
|
+
/* The named variants retain their proportion but share the readable split
|
|
141
|
+
threshold with the default hero. The modifier changes only structural
|
|
142
|
+
tracks; it does not introduce an earlier cramped layout. */
|
|
143
|
+
@container bf-hero (width >= 45rem) {
|
|
147
144
|
:where(.bf-theme) :where(.bf-hero.is-split-medium) :where(.bf-hero-layout) {
|
|
148
145
|
column-gap: var(--bf-grid-gap-inline);
|
|
149
146
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
@@ -163,14 +160,10 @@ export function sitesEditorialPortsCss() {
|
|
|
163
160
|
:where(.bf-theme) :where(.bf-quote-wrapper) {
|
|
164
161
|
container-name: bf-quote-wrapper;
|
|
165
162
|
container-type: inline-size;
|
|
166
|
-
margin
|
|
163
|
+
margin: 0;
|
|
167
164
|
min-inline-size: 0;
|
|
168
165
|
}
|
|
169
166
|
|
|
170
|
-
:where(.bf-theme) :where(.bf-quote-wrapper.is-shallow) {
|
|
171
|
-
margin-block-end: var(--bf-section-space-shallow);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
167
|
: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
168
|
min-inline-size: 0;
|
|
176
169
|
overflow-wrap: anywhere;
|
|
@@ -217,7 +210,7 @@ export function sitesEditorialPortsCss() {
|
|
|
217
210
|
/* The quote rail can also be a fractional grid track. Keep its media from
|
|
218
211
|
introducing a sub-baseline row while leaving quotation and citation rhythm
|
|
219
212
|
entirely baseline-compensated while its stack owns semantic gaps. */
|
|
220
|
-
@supports (block-size: calc-size(auto, round(up, size,
|
|
213
|
+
@supports (block-size: calc-size(auto, round(up, size, 0.0625rem))) {
|
|
221
214
|
:where(.bf-theme) :where(.bf-quote-wrapper-signpost > :where(img, picture, svg), .bf-quote-wrapper-media > .bf-aspect) {
|
|
222
215
|
block-size: calc-size(auto, round(up, size, var(--bf-baseline)));
|
|
223
216
|
}
|
|
@@ -256,8 +249,47 @@ export function sitesEditorialPortsCss() {
|
|
|
256
249
|
}
|
|
257
250
|
|
|
258
251
|
@container bf-quote-wrapper (width >= 64.75rem) {
|
|
252
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-header) {
|
|
253
|
+
grid-template-columns: repeat(8, minmax(0, 1fr));
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-header) > :first-child {
|
|
257
|
+
grid-column: 1 / span 6;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-header-link) {
|
|
261
|
+
grid-column: 7 / -1;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-layout) {
|
|
265
|
+
grid-template-columns: repeat(8, minmax(0, 1fr));
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-signpost) {
|
|
269
|
+
grid-column: 1 / span 2;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-content, .bf-quote-wrapper-content:only-child) {
|
|
273
|
+
display: grid;
|
|
274
|
+
grid-column: 3 / -1;
|
|
275
|
+
grid-template-columns: subgrid;
|
|
276
|
+
}
|
|
277
|
+
|
|
259
278
|
:where(.bf-theme) :where(.bf-quote-wrapper-quote-row) {
|
|
260
|
-
grid-
|
|
279
|
+
grid-column: 1 / -1;
|
|
280
|
+
grid-template-columns: subgrid;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-prose) {
|
|
284
|
+
grid-column: 1 / span 4;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-citation) {
|
|
288
|
+
grid-column: 5 / -1;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
:where(.bf-theme) :where(.bf-quote-wrapper-content) > :where(.bf-cta-block, .bf-quote-wrapper-media) {
|
|
292
|
+
grid-column: 1 / -1;
|
|
261
293
|
}
|
|
262
294
|
}
|
|
263
295
|
`;
|
|
@@ -55,35 +55,27 @@ export function sitesFoundationCss() {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/* A section title may be the route action without looking like body copy. */
|
|
58
|
-
:where(.bf-theme) :where(.bf-basic-section-title-link, .bf-basic-section-title-link:visited) {
|
|
58
|
+
:where(.bf-theme) :where(a.bf-basic-section-title-link, a.bf-basic-section-title-link:visited) {
|
|
59
59
|
color: var(--bf-color-link-default);
|
|
60
60
|
text-decoration: none;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
:where(.bf-theme) :where(.bf-basic-section-title-link:hover) {
|
|
63
|
+
:where(.bf-theme) :where(a.bf-basic-section-title-link:hover) {
|
|
64
64
|
text-decoration: underline;
|
|
65
65
|
text-decoration-thickness: var(--bf-border-width);
|
|
66
66
|
text-underline-offset: 0.12em;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
/*
|
|
70
|
-
|
|
69
|
+
/* A balanced section switches at the shared readable 50/50 threshold. The
|
|
70
|
+
layout descendant reacts to the root container; the query never tries to
|
|
71
71
|
restyle the container that established it. */
|
|
72
|
-
@container bf-basic-section (width >=
|
|
73
|
-
:where(.bf-theme) :where(.bf-basic-section
|
|
72
|
+
@container bf-basic-section (width >= 45rem) {
|
|
73
|
+
:where(.bf-theme) :where(.bf-basic-section-layout) {
|
|
74
74
|
column-gap: var(--bf-grid-gap-inline);
|
|
75
75
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
@container bf-basic-section (width >= 64.75rem) {
|
|
80
|
-
:where(.bf-theme) :where(.bf-basic-section:not(.is-split-medium)) :where(.bf-basic-section-layout) {
|
|
81
|
-
column-gap: var(--bf-grid-gap-inline);
|
|
82
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
79
|
/* CTA section: Vanilla's 25/75 variant is an offset content rail. The full
|
|
88
80
|
variant stays naturally full-width. Typography and action presentation are
|
|
89
81
|
supplied by real heading elements and bf-cta-block. */
|
|
@@ -97,19 +89,23 @@ export function sitesFoundationCss() {
|
|
|
97
89
|
display: grid;
|
|
98
90
|
grid-template-columns: minmax(0, 1fr);
|
|
99
91
|
min-inline-size: 0;
|
|
100
|
-
padding-block: calc(var(--bf-section-space-deep) / 2);
|
|
101
92
|
}
|
|
102
93
|
|
|
103
94
|
:where(.bf-theme) :where(.bf-cta-section-content) {
|
|
95
|
+
--bf-stack-space: var(--bf-section-space-shallow);
|
|
96
|
+
align-content: start;
|
|
97
|
+
display: grid;
|
|
98
|
+
gap: var(--bf-stack-space);
|
|
104
99
|
min-inline-size: 0;
|
|
105
100
|
overflow-wrap: anywhere;
|
|
106
101
|
}
|
|
107
102
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
103
|
+
:where(.bf-theme) :where(.bf-cta-section-copy) {
|
|
104
|
+
min-inline-size: 0;
|
|
105
|
+
overflow-wrap: anywhere;
|
|
106
|
+
}
|
|
112
107
|
|
|
108
|
+
@container bf-cta-section (width >= 64.75rem) {
|
|
113
109
|
:where(.bf-theme) :where(.bf-cta-section.is-offset) :where(.bf-cta-section-layout) {
|
|
114
110
|
column-gap: var(--bf-grid-gap-inline);
|
|
115
111
|
grid-template-columns: minmax(0, 1fr) minmax(0, 3fr);
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
* content paired with one responsive image or video slot.
|
|
9
9
|
*
|
|
10
10
|
* Vanilla → BF spacing mapping:
|
|
11
|
-
* - horizontal item
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
14
|
-
* - the 620px/1036px page breakpoints → 38.75rem/64.75rem container
|
|
11
|
+
* - horizontal item 0.5rem/1rem block padding → `space-1`/`space-2`;
|
|
12
|
+
* - 1rem grid gutters → `grid-gap-inline`;
|
|
13
|
+
* - the 38.75rem/64.75rem page breakpoints → 38.75rem/64.75rem container
|
|
15
14
|
* thresholds for descendants. Text roles keep their own metric-derived
|
|
16
|
-
* margins and baseline compensation in every tier.
|
|
15
|
+
* margins and baseline compensation in every tier. Parent stacks own every
|
|
16
|
+
* boundary outside the pattern.
|
|
17
17
|
*/
|
|
18
18
|
export declare function sitesRichListsCss(): string;
|