baseline-foundry 0.1.3 → 0.1.5

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 (84) hide show
  1. package/README.md +577 -553
  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/build.js +4 -4
  11. package/dist/code-snippet.js +1 -1
  12. package/dist/css-app-tier.js +78 -73
  13. package/dist/css-components/article-pagination.js +141 -140
  14. package/dist/css-components/button-actions.js +181 -161
  15. package/dist/css-components/cards-options.js +176 -176
  16. package/dist/css-components/chip-badge-status.d.ts +0 -3
  17. package/dist/css-components/chip-badge-status.js +174 -159
  18. package/dist/css-components/content-card.d.ts +7 -7
  19. package/dist/css-components/content-card.js +498 -497
  20. package/dist/css-components/control-row.d.ts +1 -1
  21. package/dist/css-components/control-row.js +15 -15
  22. package/dist/css-components/cta-figure-aspect.js +120 -120
  23. package/dist/css-components/document-navigation.js +427 -390
  24. package/dist/css-components/editorial-content.js +42 -42
  25. package/dist/css-components/icon.js +72 -72
  26. package/dist/css-components/interactive-feedback.js +239 -217
  27. package/dist/css-components/interactive-tables.js +160 -155
  28. package/dist/css-components/legacy-navigation.d.ts +8 -0
  29. package/dist/css-components/legacy-navigation.js +816 -0
  30. package/dist/css-components/linked-logo-site-layout.d.ts +3 -3
  31. package/dist/css-components/linked-logo-site-layout.js +177 -180
  32. package/dist/css-components/list-tree.js +96 -94
  33. package/dist/css-components/list.js +9 -7
  34. package/dist/css-components/logo-media.d.ts +6 -6
  35. package/dist/css-components/logo-media.js +218 -207
  36. package/dist/css-components/navigation-layout.js +144 -144
  37. package/dist/css-components/panel.js +148 -144
  38. package/dist/css-components/search-box-and-filter.d.ts +0 -1
  39. package/dist/css-components/search-box-and-filter.js +263 -264
  40. package/dist/css-components/sites-editorial-ports.d.ts +3 -4
  41. package/dist/css-components/sites-editorial-ports.js +279 -247
  42. package/dist/css-components/sites-foundation.js +142 -146
  43. package/dist/css-components/sites-rich-lists.d.ts +5 -5
  44. package/dist/css-components/sites-rich-lists.js +339 -349
  45. package/dist/css-components/static-content-ports.d.ts +3 -3
  46. package/dist/css-components/static-content-ports.js +200 -186
  47. package/dist/css-components/tab-section.d.ts +3 -3
  48. package/dist/css-components/tab-section.js +93 -85
  49. package/dist/css-components/table.js +76 -75
  50. package/dist/css-components/tabs-choice-breadcrumbs.js +307 -303
  51. package/dist/css-components/tiered-list-equal-height-row.js +271 -271
  52. package/dist/css-components.js +1881 -2554
  53. package/dist/css-grid.d.ts +1 -1
  54. package/dist/css-grid.js +183 -173
  55. package/dist/css.js +317 -241
  56. package/dist/experiments/ibm-plex-engine-smoke/styles.css +894 -538
  57. package/dist/experiments/ibm-plex-engine-smoke/surfaces.json +2 -2
  58. package/dist/experiments/ibm-plex-engine-smoke/tokens.json +1 -1
  59. package/dist/in-page-navigation.js +1 -1
  60. package/dist/presets/app-tier/styles.css +928 -568
  61. package/dist/presets/app-tier/surfaces.json +17 -17
  62. package/dist/presets/app-tier/tokens.json +7 -7
  63. package/dist/presets/prose/styles.css +919 -562
  64. package/dist/presets/prose/surfaces.json +17 -17
  65. package/dist/presets/prose/tokens.json +1 -1
  66. package/dist/resizable-aside.js +12 -4
  67. package/dist/styles.css +919 -562
  68. package/dist/surfaces.json +17 -17
  69. package/dist/tiers/app/styles.css +928 -568
  70. package/dist/tiers/app/surfaces.json +17 -17
  71. package/dist/tiers/app/tokens.json +7 -7
  72. package/dist/tiers/documentation/styles.css +920 -563
  73. package/dist/tiers/documentation/surfaces.json +17 -17
  74. package/dist/tiers/documentation/tokens.json +2 -2
  75. package/dist/tiers/editorial/styles.css +919 -562
  76. package/dist/tiers/editorial/surfaces.json +17 -17
  77. package/dist/tiers/editorial/tokens.json +1 -1
  78. package/dist/tiers/os/styles.css +925 -568
  79. package/dist/tiers/os/surfaces.json +17 -17
  80. package/dist/tiers/os/tokens.json +7 -7
  81. package/dist/tokens.json +1 -1
  82. package/dist/types.d.ts +1 -1
  83. package/docs/publishing.md +31 -14
  84. package/package.json +119 -108
@@ -0,0 +1,816 @@
1
+ export function legacyNavigationCss(options) {
2
+ const { bodyMediumTypeStyles, bodySemiboldTypeStyles, bodyTypeStyles, buttonMarginBottom, buttonPadding } = options;
3
+ return `:where(.bf-theme) :where(.bf-side-navigation, .bf-side-navigation.is-icons, .bf-side-navigation.is-accordion, .bf-side-navigation.is-raw-html) {
4
+ /* Plain navigation commands use the action rail. Icon-led rows move only their mark canvas,
5
+ so their copy reaches the shared continuation rail without a fourth
6
+ component inset. Navigation depth is added separately below. */
7
+ /* Navigation copy uses one continuation rail whether a row has a leading
8
+ disclosure/icon slot or not. The mark canvas is derived backwards from
9
+ that rail, so iconless rows never introduce a fourth text start. */
10
+ --bf-side-navigation-content-inset: var(--bf-component-inline-inset-continuation);
11
+ --bf-side-navigation-disclosure-inset: max(0rem, calc(var(--bf-component-inline-inset-continuation) - var(--bf-disclosure-icon-inline-size) - var(--bf-disclosure-gap)));
12
+ --bf-side-navigation-depth-step: var(--bf-space-2);
13
+ --bf-side-navigation-group-gap: 1.5rem;
14
+ color: var(--bf-color-text-inactive);
15
+ display: block;
16
+ inline-size: 100%;
17
+ }
18
+
19
+ :where(.bf-theme) :where(.bf-side-navigation-groups) {
20
+ align-content: start;
21
+ display: grid;
22
+ gap: var(--bf-side-navigation-group-gap);
23
+ }
24
+
25
+ :where(.bf-theme) :where(.bf-side-navigation-group) {
26
+ display: grid;
27
+ gap: 0rem;
28
+ min-inline-size: 0;
29
+ }
30
+
31
+ :where(.bf-theme) :where(.bf-side-navigation-drawer) {
32
+ background: var(--bf-color-background-default);
33
+ bottom: 0;
34
+ color: var(--bf-color-text-default);
35
+ inline-size: 100%;
36
+ left: 0;
37
+ overflow: auto;
38
+ position: fixed;
39
+ top: 0;
40
+ transform: translateX(-100%);
41
+ transition: transform 160ms ease, visibility 160ms ease, box-shadow 160ms ease;
42
+ visibility: visible;
43
+ z-index: 102;
44
+ }
45
+
46
+ :where(.bf-theme) :where(.bf-side-navigation, .bf-side-navigation.is-icons, .bf-side-navigation.is-accordion, .bf-side-navigation.is-raw-html):where(.is-drawer-expanded) :where(.bf-side-navigation-drawer) {
47
+ box-shadow: 0 1.5rem 4.5rem rgba(0, 0, 0, 0.38);
48
+ transform: translateX(0);
49
+ }
50
+
51
+ :where(.bf-theme) :where(.bf-side-navigation, .bf-side-navigation.is-icons, .bf-side-navigation.is-accordion, .bf-side-navigation.is-raw-html):where(.is-drawer-hidden) :where(.bf-side-navigation-drawer) {
52
+ display: none;
53
+ }
54
+
55
+ :where(.bf-theme) :where(.bf-side-navigation-overlay) {
56
+ background: var(--bf-color-background-overlay);
57
+ inset: 0;
58
+ opacity: 0;
59
+ pointer-events: none;
60
+ position: fixed;
61
+ transition: opacity 160ms ease, visibility 160ms ease;
62
+ visibility: hidden;
63
+ z-index: 101;
64
+ }
65
+
66
+ :where(.bf-theme) :where(.bf-side-navigation, .bf-side-navigation.is-icons, .bf-side-navigation.is-accordion, .bf-side-navigation.is-raw-html):where(.is-drawer-expanded) :where(.bf-side-navigation-overlay) {
67
+ opacity: 1;
68
+ pointer-events: auto;
69
+ visibility: visible;
70
+ }
71
+
72
+ :where(.bf-theme) :where(.bf-side-navigation-drawer-header) {
73
+ background: var(--bf-color-background-default);
74
+ border-bottom: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
75
+ margin-bottom: calc(var(--bf-baseline) * 2);
76
+ padding-bottom: calc(var(--bf-panel-padding-block) - var(--bf-border-width));
77
+ padding-inline: var(--bf-component-inline-inset-continuation);
78
+ padding-top: var(--bf-panel-padding-block);
79
+ position: sticky;
80
+ top: 0;
81
+ z-index: 1;
82
+ }
83
+
84
+ :where(.bf-theme) :where(.bf-side-navigation-toggle, .bf-side-navigation-toggle.is-in-drawer) {
85
+ ${bodyTypeStyles} align-items: center;
86
+ appearance: none;
87
+ background: var(--bf-color-background-default);
88
+ border: var(--bf-border-width) solid var(--bf-color-border-high-contrast);
89
+ border-radius: var(--bf-radius);
90
+ color: var(--bf-color-text-default);
91
+ cursor: pointer;
92
+ display: inline-flex;
93
+ gap: calc(var(--bf-baseline) * 0.5);
94
+ justify-content: center;
95
+ margin: 0 0 ${buttonMarginBottom};
96
+ ${buttonPadding} padding-inline: var(--bf-control-inline-padding-action-bordered);
97
+ text-decoration: none;
98
+ }
99
+
100
+ :where(.bf-theme) :where(.bf-side-navigation-toggle)::before {
101
+ background-image: var(--bf-ui-icon-chevron-down);
102
+ background-position: center;
103
+ background-repeat: no-repeat;
104
+ background-size: 1rem 1rem;
105
+ block-size: 1rem;
106
+ content: "";
107
+ inline-size: 1rem;
108
+ transform: rotate(-90deg);
109
+ }
110
+
111
+ :where(.bf-theme) :where(.bf-side-navigation-toggle.is-in-drawer)::before {
112
+ background-image: var(--bf-ui-icon-chevron-down);
113
+ background-position: center;
114
+ background-repeat: no-repeat;
115
+ background-size: 1rem 1rem;
116
+ block-size: 1rem;
117
+ content: "";
118
+ inline-size: 1rem;
119
+ transform: rotate(90deg);
120
+ }
121
+
122
+ :where(.bf-theme) :where(.bf-side-navigation-toggle:hover) {
123
+ background: var(--bf-color-background-hover);
124
+ }
125
+
126
+ :where(.bf-theme) :where(.bf-side-navigation-toggle:focus:not(:focus-visible)) {
127
+ outline: none;
128
+ }
129
+
130
+ :where(.bf-theme) :where(.bf-side-navigation-toggle:focus-visible) {
131
+ outline: 0.125rem solid var(--bf-color-focus);
132
+ outline-offset: -0.125rem;
133
+ }
134
+
135
+ :where(.bf-theme) :where(.bf-side-navigation-heading, .bf-side-navigation-heading.is-linked) {
136
+ ${bodySemiboldTypeStyles} display: block;
137
+ margin: 0 0 var(--bf-body-margin-bottom);
138
+ padding-block: var(--bf-body-nudge-start) 0;
139
+ padding-inline: var(--bf-side-navigation-content-inset);
140
+ }
141
+
142
+ :where(.bf-theme) :where(.bf-side-navigation-heading.is-linked) {
143
+ padding-inline: 0;
144
+ }
145
+
146
+ :where(.bf-theme) :where(.bf-side-navigation-list) {
147
+ display: grid;
148
+ list-style: none;
149
+ margin: 0;
150
+ padding: 0;
151
+ }
152
+
153
+ :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title) {
154
+ display: grid;
155
+ margin: 0;
156
+ position: relative;
157
+ }
158
+
159
+ :where(.bf-theme) :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
160
+ ${bodyTypeStyles} align-items: center;
161
+ background: transparent;
162
+ border: 0;
163
+ border-block: var(--bf-border-width) solid transparent;
164
+ color: var(--bf-color-text-inactive);
165
+ display: flex;
166
+ gap: calc(var(--bf-baseline) * 0.5);
167
+ inline-size: 100%;
168
+ justify-content: flex-start;
169
+ margin: 0 0 var(--bf-single-line-row-margin-block-end);
170
+ padding-block: var(--bf-single-line-row-padding-block);
171
+ padding-inline: var(--bf-side-navigation-content-inset);
172
+ --bf-side-navigation-row-inset: var(--bf-side-navigation-content-inset);
173
+ position: relative;
174
+ text-align: left;
175
+ text-decoration: none;
176
+ }
177
+
178
+ :where(.bf-theme) :where(.bf-side-navigation-accordion-button) {
179
+ --bf-side-navigation-row-inset: var(--bf-side-navigation-disclosure-inset);
180
+ gap: var(--bf-disclosure-gap);
181
+ }
182
+
183
+ :where(.bf-theme) :where(.bf-side-navigation-item.is-title) > :where(.bf-side-navigation-link, .bf-side-navigation-text) {
184
+ color: var(--bf-color-text-default);
185
+ font-weight: 600;
186
+ }
187
+
188
+ :where(.bf-theme) :where(.bf-side-navigation-list) > :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title) > :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
189
+ padding-inline-start: var(--bf-side-navigation-row-inset, var(--bf-side-navigation-content-inset));
190
+ }
191
+
192
+ :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
193
+ :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
194
+ > :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
195
+ padding-inline-start: calc(var(--bf-side-navigation-row-inset, var(--bf-side-navigation-content-inset)) + var(--bf-side-navigation-depth-step));
196
+ }
197
+
198
+ :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
199
+ :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
200
+ :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
201
+ > :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
202
+ padding-inline-start: calc(var(--bf-side-navigation-row-inset, var(--bf-side-navigation-content-inset)) + (var(--bf-side-navigation-depth-step) * 2));
203
+ }
204
+
205
+ :where(.bf-theme) :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
206
+ :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
207
+ :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
208
+ :where(.bf-side-navigation-item, .bf-side-navigation-item.is-title)
209
+ > :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
210
+ padding-inline-start: calc(var(--bf-side-navigation-row-inset, var(--bf-side-navigation-content-inset)) + (var(--bf-side-navigation-depth-step) * 3));
211
+ }
212
+
213
+ :where(.bf-theme) :where(.bf-side-navigation-link:hover, .bf-side-navigation-accordion-button:hover) {
214
+ background: var(--bf-color-background-hover);
215
+ color: var(--bf-color-text-default);
216
+ text-decoration: none;
217
+ }
218
+
219
+ :where(.bf-theme) :where(a.bf-side-navigation-link:is(:hover, :active)) {
220
+ text-decoration: none;
221
+ }
222
+
223
+ :where(.bf-theme) :where(.bf-side-navigation-link:focus:not(:focus-visible), .bf-side-navigation-accordion-button:focus:not(:focus-visible)) {
224
+ outline: none;
225
+ }
226
+
227
+ :where(.bf-theme) :where(.bf-side-navigation-link:focus-visible, .bf-side-navigation-accordion-button:focus-visible) {
228
+ outline: 0.125rem solid var(--bf-color-focus);
229
+ outline-offset: -0.125rem;
230
+ }
231
+
232
+ :where(.bf-theme) :where(.bf-side-navigation-link.is-active, .bf-side-navigation-link[aria-current='page'], .bf-side-navigation-link[aria-current='true']) {
233
+ background: var(--bf-color-background-active);
234
+ box-shadow: inset var(--bf-bar-thickness) 0 0 var(--bf-color-text-default);
235
+ color: var(--bf-color-text-default);
236
+ cursor: default;
237
+ }
238
+
239
+ :where(.bf-theme) :where(.bf-top-navigation) {
240
+ background: var(--bf-color-background-default);
241
+ box-shadow: inset 0 calc(var(--bf-border-width) * -1) 0 var(--bf-color-border-low-contrast);
242
+ color: var(--bf-color-text-default);
243
+ isolation: isolate;
244
+ position: relative;
245
+ z-index: 50;
246
+ }
247
+
248
+ :where(.bf-theme) :where(.bf-top-navigation.is-sticky) {
249
+ position: sticky;
250
+ top: 0;
251
+ z-index: 98;
252
+ }
253
+
254
+ :where(.bf-theme) :where(.bf-top-navigation-row) {
255
+ display: flex;
256
+ flex-direction: column;
257
+ min-block-size: var(--bf-navigation-bar-min-block-size);
258
+ min-inline-size: 0;
259
+ padding-block: calc(var(--bf-baseline) / 2);
260
+ padding-inline: var(--bf-panel-padding-inline);
261
+ position: relative;
262
+ z-index: 1;
263
+ }
264
+
265
+ :where(.bf-theme) :where(.bf-top-navigation) :where(.bf-fixed-width) > :where(.bf-top-navigation-row) {
266
+ padding-inline: 0;
267
+ }
268
+
269
+ :where(.bf-theme) :where(.bf-top-navigation-banner) {
270
+ align-items: stretch;
271
+ display: flex;
272
+ justify-content: space-between;
273
+ min-inline-size: 0;
274
+ }
275
+
276
+ :where(.bf-theme) :where(.bf-top-navigation-logo) {
277
+ align-items: stretch;
278
+ display: flex;
279
+ min-inline-size: 0;
280
+ }
281
+
282
+ :where(.bf-theme) :where(.bf-top-navigation-logo) > :where(.bf-top-navigation-link) {
283
+ ${bodyMediumTypeStyles} align-items: center;
284
+ color: var(--bf-color-text-default);
285
+ column-gap: calc(var(--bf-baseline) * 1.5);
286
+ display: inline-flex;
287
+ inline-size: auto;
288
+ justify-content: flex-start;
289
+ margin: 0;
290
+ min-inline-size: 0;
291
+ padding-block: var(--bf-top-navigation-link-padding-block);
292
+ padding-inline: 0;
293
+ text-decoration: none;
294
+ }
295
+
296
+ :where(.bf-theme) :where(.bf-top-navigation-logo) > :where(.bf-top-navigation-link:hover) {
297
+ background: transparent;
298
+ text-decoration: none;
299
+ }
300
+
301
+ :where(.bf-theme) :where(.bf-top-navigation-logo-tag) {
302
+ align-items: center;
303
+ background: var(--bf-color-accent);
304
+ block-size: var(--bf-top-navigation-logo-tag-block-size);
305
+ color: #ffffff;
306
+ display: inline-flex;
307
+ flex: 0 0 auto;
308
+ inline-size: var(--bf-top-navigation-logo-tag-inline-size);
309
+ justify-content: center;
310
+ }
311
+
312
+ :where(.bf-theme) :where(.bf-top-navigation-logo-icon) {
313
+ block-size: var(--bf-top-navigation-logo-icon-size);
314
+ inline-size: var(--bf-top-navigation-logo-icon-size);
315
+ }
316
+
317
+ :where(.bf-theme) :where(.bf-top-navigation-logo-title) {
318
+ min-inline-size: 0;
319
+ overflow: hidden;
320
+ text-overflow: ellipsis;
321
+ white-space: nowrap;
322
+ }
323
+
324
+ :where(.bf-theme) :where(.bf-top-navigation-nav) {
325
+ display: none;
326
+ flex-direction: column;
327
+ min-inline-size: 0;
328
+ }
329
+
330
+ :where(.bf-theme) :where(.bf-top-navigation-nav[aria-hidden='false']) {
331
+ display: flex;
332
+ }
333
+
334
+ :where(.bf-theme) :where(.bf-top-navigation-list) {
335
+ display: flex;
336
+ flex-direction: column;
337
+ list-style: none;
338
+ margin: 0;
339
+ min-inline-size: 0;
340
+ padding: 0;
341
+ }
342
+
343
+ :where(.bf-theme) :where(.bf-top-navigation-list.is-banner-actions) {
344
+ align-items: stretch;
345
+ display: flex;
346
+ flex: 0 0 auto;
347
+ flex-direction: row;
348
+ }
349
+
350
+ :where(.bf-theme) :where(.bf-top-navigation-item) {
351
+ margin: 0;
352
+ min-inline-size: 0;
353
+ position: relative;
354
+ }
355
+
356
+ :where(.bf-theme) :where(.bf-top-navigation-nav) :where(.bf-top-navigation-item) {
357
+ border-top: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
358
+ }
359
+
360
+ :where(.bf-theme) :where(.bf-top-navigation-item.is-right-shifted) {
361
+ margin-inline-start: auto;
362
+ }
363
+
364
+ :where(.bf-theme) :where(.bf-top-navigation-link, .bf-top-navigation-menu-toggle, .bf-top-navigation-search-toggle) {
365
+ ${bodyTypeStyles} align-items: center;
366
+ appearance: none;
367
+ background: transparent;
368
+ border: 0;
369
+ color: var(--bf-color-text-default);
370
+ cursor: pointer;
371
+ display: inline-flex;
372
+ gap: calc(var(--bf-baseline) * 1);
373
+ inline-size: 100%;
374
+ justify-content: flex-start;
375
+ margin: 0;
376
+ min-inline-size: 0;
377
+ padding-block: var(--bf-top-navigation-link-padding-block);
378
+ padding-inline: var(--bf-top-navigation-link-padding-inline);
379
+ position: relative;
380
+ text-align: left;
381
+ text-decoration: none;
382
+ white-space: nowrap;
383
+ }
384
+
385
+ :where(.bf-theme) :where(.bf-top-navigation-link:hover, .bf-top-navigation-menu-toggle:hover, .bf-top-navigation-search-toggle:hover) {
386
+ background: var(--bf-color-background-hover);
387
+ text-decoration: none;
388
+ }
389
+
390
+ :where(.bf-theme) :where(a.bf-top-navigation-link:is(:hover, :active)) {
391
+ text-decoration: none;
392
+ }
393
+
394
+ :where(.bf-theme) :where(.bf-top-navigation-link:focus:not(:focus-visible), .bf-top-navigation-menu-toggle:focus:not(:focus-visible), .bf-top-navigation-search-toggle:focus:not(:focus-visible)) {
395
+ outline: none;
396
+ }
397
+
398
+ :where(.bf-theme) :where(.bf-top-navigation-link:focus-visible, .bf-top-navigation-menu-toggle:focus-visible, .bf-top-navigation-search-toggle:focus-visible) {
399
+ outline: 0.125rem solid var(--bf-color-focus);
400
+ outline-offset: -0.125rem;
401
+ }
402
+
403
+ :where(.bf-theme) :where(.bf-top-navigation-item.is-selected) > :where(.bf-top-navigation-link),
404
+ :where(.bf-theme) :where(.bf-top-navigation-item.is-dropdown-toggle.is-active) > :where(.bf-top-navigation-link),
405
+ :where(.bf-theme) :where(.bf-top-navigation-link[aria-current='page']) {
406
+ background: var(--bf-color-background-hover);
407
+ box-shadow: inset var(--bf-bar-thickness) 0 0 var(--bf-color-text-default);
408
+ color: var(--bf-color-text-default);
409
+ }
410
+
411
+ :where(.bf-theme) :where(.bf-top-navigation-menu-toggle) {
412
+ display: inline-flex;
413
+ }
414
+
415
+ :where(.bf-theme) :where(.bf-top-navigation-search-toggle) {
416
+ justify-content: center;
417
+ min-inline-size: var(--bf-top-navigation-search-toggle-inline-size);
418
+ }
419
+
420
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-toggle) {
421
+ padding-inline-end: calc(var(--bf-top-navigation-link-padding-inline) + var(--bf-top-navigation-end-slot-inline-size));
422
+ }
423
+
424
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-toggle)::after {
425
+ background-image: var(--bf-ui-icon-chevron-down);
426
+ background-position: center;
427
+ background-repeat: no-repeat;
428
+ background-size: 1rem 1rem;
429
+ block-size: 1rem;
430
+ bottom: 0;
431
+ content: "";
432
+ inline-size: 1rem;
433
+ margin-block: auto;
434
+ pointer-events: none;
435
+ position: absolute;
436
+ right: var(--bf-top-navigation-link-padding-inline);
437
+ top: 0;
438
+ transform: rotate(0deg);
439
+ transition: transform 160ms ease;
440
+ }
441
+
442
+ :where(.bf-theme) :where(.bf-top-navigation-item.is-dropdown-toggle.is-active) > :where(.bf-top-navigation-dropdown-toggle)::after {
443
+ transform: rotate(180deg);
444
+ }
445
+
446
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown) {
447
+ background: var(--bf-color-background-default);
448
+ border-top: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
449
+ display: none;
450
+ list-style: none;
451
+ margin: 0;
452
+ min-inline-size: 100%;
453
+ padding: 0;
454
+ }
455
+
456
+ :where(.bf-theme) :where(.bf-top-navigation-item.is-dropdown-toggle.is-active) > :where(.bf-top-navigation-dropdown) {
457
+ display: block;
458
+ }
459
+
460
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-item) {
461
+ ${bodyTypeStyles} align-items: center;
462
+ color: var(--bf-color-text-default);
463
+ display: flex;
464
+ gap: calc(var(--bf-baseline) * 2);
465
+ inline-size: 100%;
466
+ justify-content: space-between;
467
+ min-inline-size: 0;
468
+ padding-block: var(--bf-top-navigation-link-padding-block);
469
+ padding-inline: calc(var(--bf-top-navigation-link-padding-inline) + (var(--bf-baseline) * 2)) var(--bf-top-navigation-link-padding-inline);
470
+ text-align: left;
471
+ text-decoration: none;
472
+ white-space: nowrap;
473
+ }
474
+
475
+ :where(.bf-theme) :where(button.bf-top-navigation-dropdown-item) {
476
+ appearance: none;
477
+ background: transparent;
478
+ border: 0;
479
+ cursor: pointer;
480
+ font: inherit;
481
+ }
482
+
483
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-item-label) {
484
+ min-inline-size: 0;
485
+ overflow: hidden;
486
+ text-overflow: ellipsis;
487
+ }
488
+
489
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-item-shortcut) {
490
+ color: var(--bf-color-text-muted);
491
+ flex: 0 0 auto;
492
+ white-space: nowrap;
493
+ }
494
+
495
+ :where(.bf-theme) :where(button.bf-top-navigation-dropdown-item:disabled) {
496
+ color: var(--bf-color-text-muted);
497
+ cursor: default;
498
+ }
499
+
500
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown > li.is-divider) {
501
+ border-top: var(--bf-border-width) solid var(--bf-color-border-default);
502
+ margin-block: calc(var(--bf-baseline) * 0.5);
503
+ }
504
+
505
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown > li + li) > :where(.bf-top-navigation-dropdown-item) {
506
+ border-top: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
507
+ }
508
+
509
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-item:hover) {
510
+ background: var(--bf-color-background-hover);
511
+ text-decoration: none;
512
+ }
513
+
514
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-item:focus:not(:focus-visible)) {
515
+ outline: none;
516
+ }
517
+
518
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-item:focus-visible) {
519
+ outline: 0.125rem solid var(--bf-color-focus);
520
+ outline-offset: -0.125rem;
521
+ }
522
+
523
+ :where(.bf-theme) :where(.bf-top-navigation-search-label) {
524
+ display: none;
525
+ }
526
+
527
+ :where(.bf-theme) :where(.bf-top-navigation-search-toggle)::after {
528
+ background-image: var(--bf-ui-icon-search);
529
+ background-position: center;
530
+ background-repeat: no-repeat;
531
+ background-size: 1rem 1rem;
532
+ block-size: 1rem;
533
+ content: "";
534
+ flex: 0 0 1rem;
535
+ inline-size: 1rem;
536
+ }
537
+
538
+ :where(.bf-theme) :where(.bf-top-navigation-search-toggle[aria-pressed='true'])::after {
539
+ background-image: var(--bf-ui-icon-close);
540
+ }
541
+
542
+ :where(.bf-theme) :where(.bf-top-navigation-nav) :where(.bf-top-navigation-search-toggle) {
543
+ display: none;
544
+ }
545
+
546
+ :where(.bf-theme) :where(.bf-top-navigation-search) {
547
+ border-top: var(--bf-border-width) solid var(--bf-color-border-low-contrast);
548
+ display: none;
549
+ min-inline-size: 0;
550
+ padding-block: var(--bf-top-navigation-link-padding-block);
551
+ padding-inline: var(--bf-top-navigation-link-padding-inline);
552
+ }
553
+
554
+ :where(.bf-theme) :where(.bf-top-navigation-search[aria-hidden='false']) {
555
+ display: block;
556
+ }
557
+
558
+ :where(.bf-theme) :where(.bf-top-navigation:has(.bf-top-navigation-search[aria-hidden='false'])) :where(.bf-top-navigation-nav) > :where(.bf-top-navigation-list) {
559
+ display: none;
560
+ }
561
+
562
+ :where(.bf-theme) :where(.bf-top-navigation-search) :where(.bf-search-box) {
563
+ margin-bottom: 0;
564
+ }
565
+
566
+ :where(.bf-theme) :where(.bf-top-navigation-search-overlay) {
567
+ display: none;
568
+ }
569
+
570
+ @media (min-width: 64.75rem) {
571
+ :where(.bf-theme) :where(.bf-top-navigation-row) {
572
+ align-items: stretch;
573
+ flex-direction: row;
574
+ gap: calc(var(--bf-baseline) * 2);
575
+ }
576
+
577
+ :where(.bf-theme) :where(.bf-top-navigation-banner) {
578
+ flex: 0 0 auto;
579
+ }
580
+
581
+ :where(.bf-theme) :where(.bf-top-navigation-nav) {
582
+ align-items: stretch;
583
+ display: flex;
584
+ flex: 1 1 auto;
585
+ flex-direction: row;
586
+ justify-content: space-between;
587
+ }
588
+
589
+ :where(.bf-theme) :where(.bf-top-navigation-list) {
590
+ align-items: stretch;
591
+ flex-direction: row;
592
+ flex-wrap: wrap;
593
+ }
594
+
595
+ :where(.bf-theme) :where(.bf-top-navigation-nav) :where(.bf-top-navigation-item) {
596
+ border-top: 0;
597
+ }
598
+
599
+ :where(.bf-theme) :where(.bf-top-navigation-link, .bf-top-navigation-search-toggle) {
600
+ inline-size: auto;
601
+ }
602
+
603
+ :where(.bf-theme) :where(.bf-top-navigation-list.is-banner-actions) {
604
+ display: none;
605
+ }
606
+
607
+ :where(.bf-theme) :where(.bf-top-navigation-nav) :where(.bf-top-navigation-search-toggle) {
608
+ display: inline-flex;
609
+ }
610
+
611
+ :where(.bf-theme) :where(.bf-top-navigation-search-toggle) {
612
+ justify-content: flex-start;
613
+ min-inline-size: 0;
614
+ }
615
+
616
+ :where(.bf-theme) :where(.bf-top-navigation-search-label) {
617
+ display: inline;
618
+ }
619
+
620
+ :where(.bf-theme) :where(.bf-top-navigation-item.is-selected) > :where(.bf-top-navigation-link),
621
+ :where(.bf-theme) :where(.bf-top-navigation-item.is-dropdown-toggle.is-active) > :where(.bf-top-navigation-link),
622
+ :where(.bf-theme) :where(.bf-top-navigation-link[aria-current='page']) {
623
+ box-shadow: inset 0 calc(var(--bf-bar-thickness) * -1) 0 var(--bf-color-text-default);
624
+ }
625
+
626
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown) {
627
+ border-top: 0;
628
+ box-shadow: 0 0 0 var(--bf-border-width) var(--bf-color-border-low-contrast), 0 calc(var(--bf-baseline) * 0.5) calc(var(--bf-baseline) * 2) rgba(0, 0, 0, 0.16);
629
+ left: 0;
630
+ min-inline-size: max(100%, 12rem);
631
+ position: absolute;
632
+ top: calc((var(--bf-top-navigation-link-padding-block) * 2) + var(--bf-body-line-height));
633
+ z-index: 5;
634
+ }
635
+
636
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown.is-right) {
637
+ left: auto;
638
+ right: 0;
639
+ }
640
+
641
+ :where(.bf-theme) :where(.bf-top-navigation-dropdown-item) {
642
+ padding-inline: var(--bf-top-navigation-link-padding-inline);
643
+ }
644
+
645
+ :where(.bf-theme) :where(.bf-top-navigation-search) {
646
+ align-items: center;
647
+ border-top: 0;
648
+ flex: 1 1 auto;
649
+ justify-content: flex-end;
650
+ padding-block: var(--bf-top-navigation-link-padding-block);
651
+ padding-inline: 0;
652
+ }
653
+
654
+ :where(.bf-theme) :where(.bf-top-navigation-search) :where(.bf-search-box) {
655
+ inline-size: min(100%, var(--bf-top-navigation-search-max-inline-size));
656
+ }
657
+
658
+ :where(.bf-theme) :where(.bf-top-navigation-search-overlay) {
659
+ background: var(--bf-color-background-overlay);
660
+ display: block;
661
+ inset: 0;
662
+ opacity: 0;
663
+ pointer-events: none;
664
+ position: fixed;
665
+ transition: opacity 160ms ease, visibility 160ms ease;
666
+ visibility: hidden;
667
+ z-index: 0;
668
+ }
669
+
670
+ :where(.bf-theme) :where(.bf-top-navigation-search-overlay[aria-hidden='false']) {
671
+ opacity: 0.5;
672
+ pointer-events: auto;
673
+ visibility: visible;
674
+ }
675
+ }
676
+
677
+ :where(.bf-theme) :where(.bf-side-navigation-item:has(> .bf-side-navigation-list [aria-current='page']), .bf-side-navigation-item:has(> .bf-side-navigation-list [aria-current='true'])) > :where(.bf-side-navigation-link, .bf-side-navigation-accordion-button) {
678
+ color: var(--bf-color-text-default);
679
+ }
680
+
681
+ :where(.bf-theme) :where(.bf-side-navigation-accordion-button)::before,
682
+ :where(.bf-theme) :where(.bf-side-navigation-expand)::before {
683
+ background-image: var(--bf-ui-icon-chevron-down);
684
+ background-position: center;
685
+ background-repeat: no-repeat;
686
+ background-size: var(--bf-disclosure-icon-inline-size) var(--bf-disclosure-icon-inline-size);
687
+ block-size: var(--bf-disclosure-icon-inline-size);
688
+ content: "";
689
+ flex: 0 0 var(--bf-disclosure-icon-inline-size);
690
+ inline-size: var(--bf-disclosure-icon-inline-size);
691
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block));
692
+ transition: transform 120ms ease;
693
+ }
694
+
695
+ :where(.bf-theme) :where(.bf-side-navigation-accordion-button[aria-expanded='false'], .bf-side-navigation-expand[aria-expanded='false'])::before {
696
+ transform: translateY(var(--bf-disclosure-icon-optical-offset-block)) rotate(-90deg);
697
+ }
698
+
699
+ :where(.bf-theme) :where(.bf-side-navigation-expand) {
700
+ ${bodyTypeStyles} background: transparent;
701
+ border: 0;
702
+ color: inherit;
703
+ cursor: pointer;
704
+ inset-block-start: 0;
705
+ margin: 0;
706
+ min-block-size: var(--bf-control-box-size-compact);
707
+ padding-inline: calc(var(--bf-baseline) * 0.5);
708
+ position: absolute;
709
+ right: 0;
710
+ }
711
+
712
+ :where(.bf-theme) :where(.bf-side-navigation-list[aria-expanded='false']) {
713
+ block-size: 0;
714
+ margin-bottom: 0;
715
+ opacity: 0;
716
+ overflow: hidden;
717
+ padding-bottom: 0;
718
+ transform: translate3d(0, calc(var(--bf-baseline) * -0.5), 0);
719
+ visibility: hidden;
720
+ }
721
+
722
+ :where(.bf-theme) :where(.bf-side-navigation-list[aria-expanded='true']) {
723
+ block-size: auto;
724
+ opacity: 1;
725
+ transform: translate3d(0, 0, 0);
726
+ visibility: visible;
727
+ }
728
+
729
+ :where(.bf-theme) :where(.bf-side-navigation-label) {
730
+ display: block;
731
+ min-inline-size: 0;
732
+ overflow: hidden;
733
+ text-overflow: ellipsis;
734
+ }
735
+
736
+ :where(.bf-theme) :where(.bf-side-navigation-status) {
737
+ align-items: center;
738
+ display: inline-flex;
739
+ margin-inline-start: auto;
740
+ }
741
+
742
+ :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-icon) {
743
+ align-items: center;
744
+ display: inline-flex;
745
+ flex: 0 0 1rem;
746
+ inline-size: 1rem;
747
+ justify-content: center;
748
+ transform: translateY(var(--bf-side-navigation-icon-optical-offset-block));
749
+ }
750
+
751
+ :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation-icon) {
752
+ transform: none;
753
+ }
754
+
755
+ :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-link, .bf-side-navigation-text, .bf-side-navigation-accordion-button) {
756
+ --bf-side-navigation-row-inset: max(0rem, calc(var(--bf-component-inline-inset-continuation) - 1rem - var(--bf-side-navigation-icon-gap)));
757
+ align-items: baseline;
758
+ column-gap: var(--bf-side-navigation-icon-gap);
759
+ }
760
+
761
+ /* Icon navigation keeps one stable label edge. Rows may omit a decorative
762
+ icon without collapsing the shared icon track and pulling their copy left. */
763
+ :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-link, .bf-side-navigation-text):not(:has(> .bf-side-navigation-icon))::before {
764
+ content: "";
765
+ flex: 0 0 1rem;
766
+ inline-size: 1rem;
767
+ }
768
+
769
+ /* A collapsed icon rail cannot communicate an iconless destination. Remove
770
+ the alignment spacer with the hidden label so it cannot become a blank
771
+ visual affordance in that state. */
772
+ :where(.bf-theme) :where(.bf-navigation.is-collapsed) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-link, .bf-side-navigation-text):not(:has(> .bf-side-navigation-icon))::before {
773
+ content: none;
774
+ }
775
+
776
+ /* Icon-navigation headings share the label edge, not the icon edge. This
777
+ keeps section names aligned with both the menu copy and a tagged wordmark. */
778
+ :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-heading:not(.is-linked)) {
779
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
780
+ }
781
+
782
+ :where(.bf-theme) :where(.bf-side-navigation.is-icons) :where(.bf-side-navigation-heading.is-linked) > :where(.bf-side-navigation-link) {
783
+ padding-inline-start: var(--bf-component-inline-inset-continuation);
784
+ }
785
+
786
+ :where(.bf-theme) :where(.bf-side-navigation-icon) > svg {
787
+ block-size: 1rem;
788
+ display: block;
789
+ inline-size: 1rem;
790
+ }
791
+
792
+ @media (min-width: 64.75rem) {
793
+ :where(.bf-theme) :where(.bf-side-navigation-toggle),
794
+ :where(.bf-theme) :where(.bf-side-navigation-drawer-header),
795
+ :where(.bf-theme) :where(.bf-side-navigation-overlay) {
796
+ display: none;
797
+ }
798
+
799
+ :where(.bf-theme) :where(.bf-side-navigation-drawer),
800
+ :where(.bf-theme) :where(.bf-side-navigation, .bf-side-navigation.is-icons, .bf-side-navigation.is-accordion, .bf-side-navigation.is-raw-html):where(.is-drawer-expanded) :where(.bf-side-navigation-drawer) {
801
+ box-shadow: none;
802
+ display: block;
803
+ max-inline-size: none;
804
+ overflow: visible;
805
+ position: static;
806
+ transform: translateX(0);
807
+ }
808
+
809
+ :where(.bf-theme) :where(.bf-side-navigation.is-sticky) {
810
+ max-block-size: 100dvh;
811
+ overflow-y: auto;
812
+ position: sticky;
813
+ top: 0;
814
+ }
815
+ }`;
816
+ }