@conduction/docusaurus-preset 3.44.0 → 3.44.2

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 (39) hide show
  1. package/package.json +1 -1
  2. package/src/components/AppsGrid/AppsGrid.module.css +1 -1
  3. package/src/components/AppsPreview/AppsPreview.module.css +1 -1
  4. package/src/components/AtomZones/AtomZones.module.css +1 -1
  5. package/src/components/BlueprintRush/BlueprintRush.module.css +1 -1
  6. package/src/components/ContentCard/ContentCard.module.css +3 -3
  7. package/src/components/DetailHero/DetailHero.module.css +10 -2
  8. package/src/components/DownloadPanel/DownloadPanel.module.css +1 -1
  9. package/src/components/EmployeeCard/EmployeeCard.module.css +1 -1
  10. package/src/components/FacetedFilters/FacetedFilters.module.css +54 -0
  11. package/src/components/FeaturedCard/FeaturedCard.module.css +1 -1
  12. package/src/components/GameModal/GameModal.jsx +170 -154
  13. package/src/components/GameModal/GameModal.module.css +52 -5
  14. package/src/components/Hero/Hero.module.css +1 -1
  15. package/src/components/HexCard/HexCard.module.css +2 -2
  16. package/src/components/HowSteps/HowSteps.module.css +1 -1
  17. package/src/components/LeafCard/LeafCard.module.css +2 -2
  18. package/src/components/McpToolShelf/McpToolShelf.module.css +2 -2
  19. package/src/components/ModuleCard/ModuleCard.module.css +1 -1
  20. package/src/components/NewsletterCta/NewsletterCta.module.css +1 -1
  21. package/src/components/NextSteps/NextSteps.module.css +1 -1
  22. package/src/components/PairCard/PairCard.module.css +1 -1
  23. package/src/components/PartnerCard/PartnerCard.module.css +1 -1
  24. package/src/components/PartnerDirectory/PartnerDirectory.module.css +1 -1
  25. package/src/components/Pipeline/Pipeline.module.css +1 -1
  26. package/src/components/PlatformOverview/PlatformOverview.module.css +1 -1
  27. package/src/components/Reconcile/Reconcile.module.css +1 -1
  28. package/src/components/ReferenceCard/ReferenceCard.module.css +1 -1
  29. package/src/components/RotatingCards/RotatingCards.module.css +1 -1
  30. package/src/components/Showcase/Showcase.module.css +2 -2
  31. package/src/components/SolutionCard/SolutionCard.module.css +1 -1
  32. package/src/components/StatsStrip/StatsStrip.module.css +1 -1
  33. package/src/components/WidgetShelf/WidgetShelf.module.css +2 -2
  34. package/src/components/primitives/SectionHead.module.css +1 -1
  35. package/src/components/primitives/icons.jsx +20 -0
  36. package/src/theme/Navbar/index.jsx +73 -0
  37. package/src/theme/Navbar/styles.module.css +205 -8
  38. package/static/lib/canal-footer.css +111 -1
  39. package/static/lib/platform-diagram.css +35 -0
@@ -21,7 +21,7 @@
21
21
 
22
22
  @media (max-width: 900px) {
23
23
  .hero {
24
- grid-template-columns: 1fr;
24
+ grid-template-columns: minmax(0, 1fr);
25
25
  padding: 0 24px;
26
26
  gap: 32px;
27
27
  }
@@ -17,7 +17,7 @@
17
17
  .card {
18
18
  position: relative;
19
19
  display: grid;
20
- grid-template-columns: 1fr;
20
+ grid-template-columns: minmax(0, 1fr);
21
21
  grid-template-areas:
22
22
  "head"
23
23
  "body";
@@ -43,7 +43,7 @@
43
43
 
44
44
  @media (max-width: 720px) {
45
45
  .hasActions {
46
- grid-template-columns: 1fr;
46
+ grid-template-columns: minmax(0, 1fr);
47
47
  grid-template-areas:
48
48
  "head"
49
49
  "body"
@@ -6,7 +6,7 @@
6
6
  .cols-2 { grid-template-columns: repeat(2, 1fr); }
7
7
  .cols-3 { grid-template-columns: repeat(3, 1fr); }
8
8
  .cols-4 { grid-template-columns: repeat(4, 1fr); }
9
- @media (max-width: 900px) { .row { grid-template-columns: 1fr; } }
9
+ @media (max-width: 900px) { .row { grid-template-columns: minmax(0, 1fr); } }
10
10
 
11
11
  .step {
12
12
  background: white;
@@ -141,13 +141,13 @@ a.card:hover {
141
141
  margin: var(--space-5) 0;
142
142
  }
143
143
 
144
- .grid-1 { grid-template-columns: 1fr; }
144
+ .grid-1 { grid-template-columns: minmax(0, 1fr); }
145
145
  .grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
146
146
  .grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
147
147
  .grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
148
148
 
149
149
  @media (max-width: 768px) {
150
150
  .grid-2, .grid-3, .grid-4 {
151
- grid-template-columns: 1fr;
151
+ grid-template-columns: minmax(0, 1fr);
152
152
  }
153
153
  }
@@ -39,7 +39,7 @@
39
39
  align-items: start;
40
40
  }
41
41
  @media (max-width: 1024px) {
42
- .layout { grid-template-columns: 1fr; }
42
+ .layout { grid-template-columns: minmax(0, 1fr); }
43
43
  }
44
44
 
45
45
  .grid {
@@ -48,7 +48,7 @@
48
48
  gap: var(--space-4);
49
49
  }
50
50
  @media (max-width: 720px) {
51
- .grid { grid-template-columns: 1fr; }
51
+ .grid { grid-template-columns: minmax(0, 1fr); }
52
52
  }
53
53
 
54
54
  .card {
@@ -26,7 +26,7 @@
26
26
  }
27
27
 
28
28
  @media (max-width: 700px) {
29
- .card { grid-template-columns: 1fr; }
29
+ .card { grid-template-columns: minmax(0, 1fr); }
30
30
  }
31
31
 
32
32
  .leftCol {
@@ -14,7 +14,7 @@
14
14
  font-family: var(--conduction-typography-font-family-body);
15
15
  }
16
16
  @media (max-width: 900px) {
17
- .cta { grid-template-columns: 1fr; padding: var(--space-8); }
17
+ .cta { grid-template-columns: minmax(0, 1fr); padding: var(--space-8); }
18
18
  }
19
19
 
20
20
  .copy { min-width: 0; }
@@ -28,7 +28,7 @@
28
28
  .cols-4 { grid-template-columns: repeat(4, 1fr); }
29
29
 
30
30
  @media (max-width: 800px) {
31
- .cols-2, .cols-3, .cols-4 { grid-template-columns: 1fr; }
31
+ .cols-2, .cols-3, .cols-4 { grid-template-columns: minmax(0, 1fr); }
32
32
  }
33
33
 
34
34
  .card {
@@ -5,7 +5,7 @@
5
5
  .row { display: grid; gap: 16px; }
6
6
  .cols-2 { grid-template-columns: repeat(2, 1fr); }
7
7
  .cols-3 { grid-template-columns: repeat(3, 1fr); }
8
- @media (max-width: 900px) { .row { grid-template-columns: 1fr; } }
8
+ @media (max-width: 900px) { .row { grid-template-columns: minmax(0, 1fr); } }
9
9
 
10
10
  .card {
11
11
  background: white;
@@ -10,7 +10,7 @@
10
10
  }
11
11
  .cols-2 { grid-template-columns: repeat(2, 1fr); }
12
12
  .cols-3 { grid-template-columns: repeat(3, 1fr); }
13
- @media (max-width: 900px) { .grid { grid-template-columns: 1fr; } }
13
+ @media (max-width: 900px) { .grid { grid-template-columns: minmax(0, 1fr); } }
14
14
 
15
15
  .card {
16
16
  background: white;
@@ -19,7 +19,7 @@
19
19
 
20
20
  @media (max-width: 900px) {
21
21
  .layout {
22
- grid-template-columns: 1fr;
22
+ grid-template-columns: minmax(0, 1fr);
23
23
  gap: 32px;
24
24
  }
25
25
  }
@@ -20,7 +20,7 @@
20
20
  margin: 0 auto;
21
21
  }
22
22
  @media (max-width: 1100px) {
23
- .pipeline { grid-template-columns: 1fr; }
23
+ .pipeline { grid-template-columns: minmax(0, 1fr); }
24
24
  }
25
25
 
26
26
  /* Steps row. Position relative so the ::before line can absolute-
@@ -31,7 +31,7 @@
31
31
  margin-bottom: 64px;
32
32
  }
33
33
  @media (max-width: 900px) {
34
- .head { grid-template-columns: 1fr; gap: 24px; margin-bottom: 48px; }
34
+ .head { grid-template-columns: minmax(0, 1fr); gap: 24px; margin-bottom: 48px; }
35
35
  }
36
36
 
37
37
  .eyebrow {
@@ -70,7 +70,7 @@
70
70
  max-width: 720px;
71
71
  }
72
72
  @media (max-width: 700px) {
73
- .sheet { grid-template-columns: 1fr; }
73
+ .sheet { grid-template-columns: minmax(0, 1fr); }
74
74
  }
75
75
 
76
76
  .column {
@@ -5,7 +5,7 @@
5
5
  .grid { display: grid; gap: 16px; }
6
6
  .cols-2 { grid-template-columns: repeat(2, 1fr); }
7
7
  .cols-3 { grid-template-columns: repeat(3, 1fr); }
8
- @media (max-width: 900px) { .grid { grid-template-columns: 1fr; } }
8
+ @media (max-width: 900px) { .grid { grid-template-columns: minmax(0, 1fr); } }
9
9
 
10
10
  .card {
11
11
  background: white;
@@ -65,7 +65,7 @@
65
65
  }
66
66
 
67
67
  @media (max-width: 900px) {
68
- .card { grid-template-columns: 1fr; min-height: auto; }
68
+ .card { grid-template-columns: minmax(0, 1fr); min-height: auto; }
69
69
  }
70
70
 
71
71
  /* ---------- Image side (coloured panel) — full-bleed to all edges
@@ -33,8 +33,8 @@
33
33
  /* ---------- Body ---------- */
34
34
  .body { display: grid; gap: var(--space-8); align-items: stretch; }
35
35
  .layout-side .body { grid-template-columns: 1fr 1.2fr; }
36
- .layout-stack .body { grid-template-columns: 1fr; gap: var(--space-6); }
37
- @media (max-width: 900px) { .layout-side .body { grid-template-columns: 1fr; } }
36
+ .layout-stack .body { grid-template-columns: minmax(0, 1fr); gap: var(--space-6); }
37
+ @media (max-width: 900px) { .layout-side .body { grid-template-columns: minmax(0, 1fr); } }
38
38
 
39
39
  /* ---------- List of items ---------- */
40
40
  .list { display: flex; flex-direction: column; gap: var(--space-3); }
@@ -5,7 +5,7 @@
5
5
  .grid { display: grid; gap: 20px; }
6
6
  .cols-2 { grid-template-columns: repeat(2, 1fr); }
7
7
  .cols-3 { grid-template-columns: repeat(3, 1fr); }
8
- @media (max-width: 900px) { .grid { grid-template-columns: 1fr; } }
8
+ @media (max-width: 900px) { .grid { grid-template-columns: minmax(0, 1fr); } }
9
9
 
10
10
  .card {
11
11
  background: white;
@@ -34,7 +34,7 @@
34
34
  }
35
35
  }
36
36
  @media (max-width: 500px) {
37
- .inner { grid-template-columns: 1fr; }
37
+ .inner { grid-template-columns: minmax(0, 1fr); }
38
38
  }
39
39
 
40
40
  .value {
@@ -53,7 +53,7 @@
53
53
  }
54
54
  .cols-2 { grid-template-columns: repeat(2, 1fr); }
55
55
  .cols-3 { grid-template-columns: repeat(3, 1fr); }
56
- @media (max-width: 900px) { .grid { grid-template-columns: 1fr; } }
56
+ @media (max-width: 900px) { .grid { grid-template-columns: minmax(0, 1fr); } }
57
57
 
58
58
  /* ---- Carousel (default) ----
59
59
  *
@@ -172,7 +172,7 @@
172
172
  .carousel .card { width: auto; }
173
173
  }
174
174
  @media (prefers-reduced-motion: reduce) and (max-width: 900px) {
175
- .group { grid-template-columns: 1fr; }
175
+ .group { grid-template-columns: minmax(0, 1fr); }
176
176
  }
177
177
 
178
178
  .card {
@@ -17,7 +17,7 @@
17
17
  .align-stack .lede { max-width: 60ch; margin-top: 16px; }
18
18
 
19
19
  @media (max-width: 900px) {
20
- .align-split { grid-template-columns: 1fr; gap: 24px; }
20
+ .align-split { grid-template-columns: minmax(0, 1fr); gap: 24px; }
21
21
  }
22
22
 
23
23
  .title {
@@ -46,6 +46,26 @@ export const ICONS = {
46
46
  <polyline points="13 6 19 12 13 18"/>
47
47
  </svg>
48
48
  ),
49
+
50
+ /* Hamburger. Opens the navbar drawer below the desktop breakpoint.
51
+ Three bars rather than a "more" glyph because the drawer holds the
52
+ whole primary navigation, not an overflow remainder. */
53
+ menu: (
54
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" aria-hidden="true">
55
+ <line x1="4" y1="7" x2="20" y2="7"/>
56
+ <line x1="4" y1="12" x2="20" y2="12"/>
57
+ <line x1="4" y1="17" x2="20" y2="17"/>
58
+ </svg>
59
+ ),
60
+
61
+ /* Close. Dismisses the navbar drawer. Same stroke weight as `menu` so
62
+ the toggle does not visually jump when the icon swaps. */
63
+ close: (
64
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" aria-hidden="true">
65
+ <line x1="6" y1="6" x2="18" y2="18"/>
66
+ <line x1="18" y1="6" x2="6" y2="18"/>
67
+ </svg>
68
+ ),
49
69
  };
50
70
 
51
71
  /**
@@ -191,6 +191,44 @@ export default function Navbar() {
191
191
  const items = navbar.items || [];
192
192
  const brand = brandFor(location.pathname, navbar.title);
193
193
 
194
+ /* Mobile drawer. Below the desktop breakpoint the whole primary
195
+ navigation moves into a drawer, rather than being allowed to
196
+ overflow the bar: at 390px the inline bar needs about 571px, so
197
+ the trailing items used to land off-screen with no way to reach
198
+ them (the site clips horizontal overflow, so they were not even
199
+ scrollable). Everything goes in, links and CTAs both, because the
200
+ bar has to fit an unknown number of items on an unknown wordmark
201
+ length. Keeping any of them inline only moves the cliff. */
202
+ const [menuOpen, setMenuOpen] = React.useState(false);
203
+ const toggleRef = React.useRef(null);
204
+
205
+ /* Close on navigation. Without this the drawer stays open over the
206
+ page the visitor just asked for. */
207
+ React.useEffect(() => {
208
+ setMenuOpen(false);
209
+ }, [location.pathname]);
210
+
211
+ /* While open: Escape closes and returns focus to the toggle, and the
212
+ page behind the drawer does not scroll. Both effects are torn down
213
+ together so a route change mid-gesture cannot strand the body with
214
+ `overflow: hidden`. */
215
+ React.useEffect(() => {
216
+ if (!menuOpen) return undefined;
217
+ const onKeyDown = (event) => {
218
+ if (event.key === 'Escape') {
219
+ setMenuOpen(false);
220
+ toggleRef.current?.focus();
221
+ }
222
+ };
223
+ document.addEventListener('keydown', onKeyDown);
224
+ const previousOverflow = document.body.style.overflow;
225
+ document.body.style.overflow = 'hidden';
226
+ return () => {
227
+ document.removeEventListener('keydown', onKeyDown);
228
+ document.body.style.overflow = previousOverflow;
229
+ };
230
+ }, [menuOpen]);
231
+
194
232
  /* Wordmark resolution order:
195
233
  1. ConNext / Common Ground sub-brand → custom JSX (Con<Next>, …)
196
234
  2. Conduction product app (Open*, Docu*, My*, …) → prefix-light
@@ -278,6 +316,41 @@ export default function Navbar() {
278
316
  <NavItem key={i} item={item} location={location} appVersion={appVersion} />
279
317
  ))}
280
318
  </div>
319
+
320
+ {/* Drawer toggle. Rendered on every viewport and hidden with CSS
321
+ above the breakpoint, so the markup does not depend on a
322
+ client-side width measurement that SSR cannot make. */}
323
+ <button
324
+ ref={toggleRef}
325
+ type="button"
326
+ className={styles.menuToggle}
327
+ aria-expanded={menuOpen}
328
+ aria-controls="navbar-drawer"
329
+ aria-label={menuOpen
330
+ ? translate({id: 'preset.navbar.menu.close', message: 'Close menu', description: 'Accessible label for the navbar drawer toggle while the drawer is open'})
331
+ : translate({id: 'preset.navbar.menu.open', message: 'Open menu', description: 'Accessible label for the navbar drawer toggle while the drawer is closed'})}
332
+ onClick={() => setMenuOpen((open) => !open)}
333
+ >
334
+ <span className={styles.iconGlyph} aria-hidden="true">
335
+ {menuOpen ? ICONS.close : ICONS.menu}
336
+ </span>
337
+ </button>
338
+
339
+ {/* Drawer. Kept mounted and hidden so the toggle's aria-controls
340
+ always resolves to a real element. `hidden` also keeps the
341
+ links out of the tab order and out of the accessibility tree
342
+ while closed, which a purely visual `display: none` on the
343
+ parent would not guarantee across the breakpoint. */}
344
+ <div id="navbar-drawer" className={styles.drawer} hidden={!menuOpen}>
345
+ <div className={styles.drawerItems}>
346
+ {leftItems.map((item, i) => (
347
+ <NavItem key={`l${i}`} item={item} location={location} appVersion={appVersion} />
348
+ ))}
349
+ {rightItems.map((item, i) => (
350
+ <NavItem key={`r${i}`} item={item} location={location} appVersion={appVersion} />
351
+ ))}
352
+ </div>
353
+ </div>
281
354
  </nav>
282
355
  );
283
356
  }
@@ -193,15 +193,212 @@
193
193
  white-space: nowrap;
194
194
  }
195
195
 
196
- /* Responsive collapse, simplified for v1.
197
- TODO: hamburger menu like the design-system mock. */
198
- @media (max-width: 900px) {
196
+ /**
197
+ * Drawer toggle (hamburger).
198
+ *
199
+ * Hidden above the breakpoint. Always rendered in the markup so the
200
+ * button's `aria-controls` resolves during server rendering, when
201
+ * there is no viewport width to branch on.
202
+ *
203
+ * 44px square. WCAG 2.2 SC 2.5.8 (AA) only requires 24x24, which this
204
+ * clears comfortably; 44 is the size a thumb actually wants, and it is
205
+ * the primary control on every phone-width page.
206
+ */
207
+ .menuToggle {
208
+ display: none;
209
+ align-items: center;
210
+ justify-content: center;
211
+ width: 44px;
212
+ height: 44px;
213
+ padding: 0;
214
+ border: 1px solid var(--c-cobalt-100);
215
+ border-radius: var(--radius-sm);
216
+ background: white;
217
+ color: var(--c-cobalt-700);
218
+ font-size: 22px;
219
+ cursor: pointer;
220
+ transition: color 160ms ease, background 160ms ease;
221
+ }
222
+ .menuToggle:hover {
223
+ color: var(--c-blue-cobalt);
224
+ background: var(--c-cobalt-50);
225
+ }
226
+
227
+ /**
228
+ * Drawer panel.
229
+ *
230
+ * `display: none` by default rather than relying on the `hidden`
231
+ * attribute alone, because the rules below set a display value and any
232
+ * such declaration overrides the UA default for `[hidden]`. Opening is
233
+ * therefore scoped to the breakpoint AND to `:not([hidden])`, so the
234
+ * panel can never appear on desktop even if the state says open.
235
+ *
236
+ * Positioned against .nav, which is `position: sticky` and so already
237
+ * a containing block for absolutely positioned descendants.
238
+ */
239
+ .drawer {
240
+ display: none;
241
+ position: absolute;
242
+ top: 100%;
243
+ left: 0;
244
+ right: 0;
245
+ background: white;
246
+ border-bottom: 1px solid var(--c-cobalt-100);
247
+ box-shadow: 0 12px 24px rgba(16, 42, 86, 0.10);
248
+ max-height: 75vh;
249
+ overflow-y: auto;
250
+ -webkit-overflow-scrolling: touch;
251
+ }
252
+
253
+ .drawerItems {
254
+ display: flex;
255
+ flex-direction: column;
256
+ padding: 8px 24px 20px;
257
+ }
258
+
259
+ /* Every interactive row in the drawer gets a full-width 44px target.
260
+ Styling by context rather than by passing a variant down through
261
+ NavItem keeps the item types (link, cta, github, apiDocs, locale)
262
+ rendering exactly as they do in the bar. */
263
+ .drawerItems > a {
264
+ display: flex;
265
+ align-items: center;
266
+ min-height: 44px;
267
+ width: 100%;
268
+ border-bottom: 1px solid var(--c-cobalt-50);
269
+ font-size: 16px;
270
+ }
271
+ .drawerItems > a:last-child { border-bottom: none; }
272
+
273
+ /* The locale item is a list, not a single row, so it sizes to its
274
+ contents and lets the language links below own the 44px rhythm. */
275
+ .drawerItems > .localeWrapper {
276
+ display: block;
277
+ width: 100%;
278
+ }
279
+
280
+ /* The install CTA keeps its filled treatment but becomes a full-width
281
+ block, so it reads as the primary action of the drawer. */
282
+ .drawerItems > .cta {
283
+ justify-content: center;
284
+ margin-top: 16px;
285
+ border-bottom: none;
286
+ padding: 12px 16px;
287
+ }
288
+
289
+ /* Icon-only items (GitHub) need a visible hit area in a vertical list,
290
+ where there is no neighbouring label to borrow width from. */
291
+ .drawerItems > .iconLink {
292
+ width: 100%;
293
+ justify-content: flex-start;
294
+ height: auto;
295
+ }
296
+
297
+ /* The version pill is a static chip, not a control: keep it inline and
298
+ out of the 44px rhythm. */
299
+ .drawerItems > .versionPill {
300
+ align-self: flex-start;
301
+ margin-top: 12px;
302
+ }
303
+
304
+ /**
305
+ * Locale switcher inside the drawer.
306
+ *
307
+ * Two Infima behaviours have to be undone here.
308
+ *
309
+ * First, Infima hides `.navbar__item` outright below 996px, because it
310
+ * expects its own mobile sidebar to take over. Inside this drawer that
311
+ * rule collapses the locale item to a zero-height blank row, so the
312
+ * display value is restored explicitly.
313
+ *
314
+ * Second, the menu is a hover dropdown positioned absolutely. A hover
315
+ * dropdown is the wrong control on touch, and in a vertical panel the
316
+ * absolute menu lands off the side of the screen. Pinning it into the
317
+ * flow and dropping the trigger turns it into what it should be on a
318
+ * phone: a plain list of the available languages.
319
+ */
320
+ .drawer .localeWrapper :global(.navbar__item) {
321
+ display: block;
322
+ width: 100%;
323
+ padding: 0;
324
+ }
325
+
326
+ /* The trigger just repeats the current locale, which the list already
327
+ marks as active. Dropping it avoids an "English / English /
328
+ Nederlands" stutter. */
329
+ .drawer .localeWrapper :global(.navbar__link) {
330
+ display: none;
331
+ }
332
+
333
+ .drawer .localeWrapper :global(.dropdown__menu) {
334
+ position: static;
335
+ display: block;
336
+ transform: none;
337
+ opacity: 1;
338
+ visibility: visible;
339
+ box-shadow: none;
340
+ background: transparent;
341
+ padding: 0;
342
+ margin: 0;
343
+ min-width: 0;
344
+ max-height: none;
345
+ }
346
+
347
+ .drawer .localeWrapper :global(.dropdown__link) {
348
+ display: flex;
349
+ align-items: center;
350
+ min-height: 44px;
351
+ margin: 0;
352
+ border-radius: 0;
353
+ border-bottom: 1px solid var(--c-cobalt-50);
354
+ font-size: 16px;
355
+ }
356
+
357
+ /**
358
+ * Breakpoint.
359
+ *
360
+ * 996px matches Docusaurus's own navbar collapse, so the drawer and
361
+ * the framework's mobile sidebar agree about where "mobile" starts.
362
+ * Measured on conduction.nl: the inline bar needs 571px at its
363
+ * narrowest and 775px with a full item set, so collapsing at 996px
364
+ * clears both with room for sites that add items.
365
+ */
366
+ @media (max-width: 996px) {
199
367
  .nav {
200
- padding: 16px 24px;
201
- flex-wrap: wrap;
202
- gap: 16px;
368
+ padding: 12px 16px;
369
+ gap: 12px;
203
370
  }
204
371
  .left { gap: 16px; }
205
- .links { gap: 16px; }
206
- .ctas { gap: 8px; }
372
+
373
+ /* The bar keeps only the wordmark and the toggle. */
374
+ .links,
375
+ .ctas {
376
+ display: none;
377
+ }
378
+
379
+ .menuToggle {
380
+ display: inline-flex;
381
+ }
382
+
383
+ .drawer:not([hidden]) {
384
+ display: block;
385
+ }
386
+
387
+ /* Long product wordmarks must not push the toggle off the bar. The
388
+ wordmark is also the home link, so it gets the same 44px height as
389
+ the toggle it sits opposite. */
390
+ .wordmark {
391
+ font-size: 19px;
392
+ min-width: 0;
393
+ min-height: 44px;
394
+ }
395
+ .wordmarkText {
396
+ overflow: hidden;
397
+ text-overflow: ellipsis;
398
+ white-space: nowrap;
399
+ }
400
+ .left {
401
+ min-width: 0;
402
+ flex: 1;
403
+ }
207
404
  }