@cbnventures/docusaurus-preset-nova 0.21.0 → 0.22.0

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 (108) hide show
  1. package/build/package.json +8 -5
  2. package/build/src/lib/regex.d.ts +2 -0
  3. package/build/src/lib/regex.d.ts.map +1 -1
  4. package/build/src/lib/regex.js +47 -42
  5. package/build/src/lib/regex.js.map +1 -1
  6. package/build/src/lib/search/indexer.d.ts.map +1 -1
  7. package/build/src/lib/search/indexer.js +3 -1
  8. package/build/src/lib/search/indexer.js.map +1 -1
  9. package/build/src/lib/search/worker.js +4 -3
  10. package/build/src/lib/search/worker.js.map +1 -1
  11. package/build/src/lib/translations.d.ts.map +1 -1
  12. package/build/src/lib/translations.js +20 -14
  13. package/build/src/lib/translations.js.map +1 -1
  14. package/build/src/lib/use-navbar-active-item.d.ts.map +1 -1
  15. package/build/src/lib/use-navbar-active-item.js +12 -1
  16. package/build/src/lib/use-navbar-active-item.js.map +1 -1
  17. package/build/src/styles/presets/envoy/theme/Navbar/Bridge/style.css +39 -10
  18. package/build/src/styles/presets/envoy/theme/Navbar/Canopy/style.css +50 -11
  19. package/build/src/styles/presets/envoy/theme/Navbar/Compass/style.css +41 -11
  20. package/build/src/styles/presets/envoy/theme/Navbar/Monolith/style.css +20 -5
  21. package/build/src/styles/presets/envoy/theme/Navbar/More/style.css +4 -3
  22. package/build/src/styles/presets/envoy/theme/Navbar/style.css +13 -5
  23. package/build/src/styles/presets/foundry/theme/Navbar/Bridge/style.css +41 -11
  24. package/build/src/styles/presets/foundry/theme/Navbar/Canopy/style.css +40 -11
  25. package/build/src/styles/presets/foundry/theme/Navbar/Compass/style.css +41 -11
  26. package/build/src/styles/presets/foundry/theme/Navbar/Monolith/style.css +20 -5
  27. package/build/src/styles/presets/foundry/theme/Navbar/More/style.css +4 -3
  28. package/build/src/styles/presets/foundry/theme/Navbar/style.css +13 -5
  29. package/build/src/styles/presets/lantern/theme/Navbar/Bridge/style.css +37 -10
  30. package/build/src/styles/presets/lantern/theme/Navbar/Canopy/style.css +45 -12
  31. package/build/src/styles/presets/lantern/theme/Navbar/Compass/style.css +37 -11
  32. package/build/src/styles/presets/lantern/theme/Navbar/Monolith/style.css +23 -5
  33. package/build/src/styles/presets/lantern/theme/Navbar/More/style.css +4 -3
  34. package/build/src/styles/presets/lantern/theme/Navbar/style.css +13 -4
  35. package/build/src/styles/presets/marshal/theme/Navbar/Bridge/style.css +50 -10
  36. package/build/src/styles/presets/marshal/theme/Navbar/Canopy/style.css +41 -12
  37. package/build/src/styles/presets/marshal/theme/Navbar/Compass/style.css +41 -10
  38. package/build/src/styles/presets/marshal/theme/Navbar/Monolith/style.css +34 -3
  39. package/build/src/styles/presets/marshal/theme/Navbar/More/style.css +4 -3
  40. package/build/src/styles/presets/marshal/theme/Navbar/style.css +16 -5
  41. package/build/src/styles/presets/sample/theme/Navbar/Canopy/style.css +16 -0
  42. package/build/src/styles/presets/sentinel/theme/Navbar/Bridge/style.css +41 -11
  43. package/build/src/styles/presets/sentinel/theme/Navbar/Canopy/style.css +40 -11
  44. package/build/src/styles/presets/sentinel/theme/Navbar/Compass/style.css +41 -11
  45. package/build/src/styles/presets/sentinel/theme/Navbar/Monolith/style.css +20 -5
  46. package/build/src/styles/presets/sentinel/theme/Navbar/More/style.css +4 -3
  47. package/build/src/styles/presets/sentinel/theme/Navbar/style.css +14 -4
  48. package/build/src/styles/presets/signal/theme/Navbar/Bridge/style.css +36 -13
  49. package/build/src/styles/presets/signal/theme/Navbar/Canopy/style.css +28 -11
  50. package/build/src/styles/presets/signal/theme/Navbar/Compass/style.css +41 -12
  51. package/build/src/styles/presets/signal/theme/Navbar/Monolith/style.css +22 -5
  52. package/build/src/styles/presets/signal/theme/Navbar/style.css +19 -5
  53. package/build/src/styles/theme/Navbar/Bridge/style.css +33 -0
  54. package/build/src/styles/theme/Navbar/Canopy/style.css +33 -0
  55. package/build/src/styles/theme/Navbar/Compass/style.css +33 -0
  56. package/build/src/styles/theme/Navbar/Monolith/style.css +33 -0
  57. package/build/src/styles/theme/NavbarItem/style.css +68 -0
  58. package/build/src/tests/bin-git-tracked.test.d.ts +2 -0
  59. package/build/src/tests/bin-git-tracked.test.d.ts.map +1 -0
  60. package/build/src/tests/bin-git-tracked.test.js +43 -0
  61. package/build/src/tests/bin-git-tracked.test.js.map +1 -0
  62. package/build/src/tests/lib/search/worker.test.js +15 -0
  63. package/build/src/tests/lib/search/worker.test.js.map +1 -1
  64. package/build/src/tests/lib/translations.test.js +20 -20
  65. package/build/src/tests/lib/translations.test.js.map +1 -1
  66. package/build/src/tests/since-version.test.js +2 -1
  67. package/build/src/tests/since-version.test.js.map +1 -1
  68. package/build/src/theme/BlogArchivePage/index.js +1 -1
  69. package/build/src/theme/BlogArchivePage/index.js.map +1 -1
  70. package/build/src/theme/Navbar/Bridge/mobile-menu.d.ts.map +1 -1
  71. package/build/src/theme/Navbar/Bridge/mobile-menu.js +29 -1
  72. package/build/src/theme/Navbar/Bridge/mobile-menu.js.map +1 -1
  73. package/build/src/theme/Navbar/Canopy/mobile-menu.d.ts.map +1 -1
  74. package/build/src/theme/Navbar/Canopy/mobile-menu.js +29 -1
  75. package/build/src/theme/Navbar/Canopy/mobile-menu.js.map +1 -1
  76. package/build/src/theme/Navbar/Compass/mobile-menu.d.ts.map +1 -1
  77. package/build/src/theme/Navbar/Compass/mobile-menu.js +29 -1
  78. package/build/src/theme/Navbar/Compass/mobile-menu.js.map +1 -1
  79. package/build/src/theme/Navbar/Monolith/mobile-menu.d.ts.map +1 -1
  80. package/build/src/theme/Navbar/Monolith/mobile-menu.js +29 -1
  81. package/build/src/theme/Navbar/Monolith/mobile-menu.js.map +1 -1
  82. package/build/src/theme/NavbarItem/dropdown-navbar-item.d.ts.map +1 -1
  83. package/build/src/theme/NavbarItem/dropdown-navbar-item.js +14 -1
  84. package/build/src/theme/NavbarItem/dropdown-navbar-item.js.map +1 -1
  85. package/build/src/types/lib/search/indexer.d.ts +4 -0
  86. package/build/src/types/lib/search/worker.d.ts +7 -0
  87. package/build/src/types/lib/translations.d.ts +4 -0
  88. package/build/src/types/lib/use-navbar-active-item.d.ts +6 -0
  89. package/build/src/types/tests/bin-git-tracked.test.d.ts +52 -0
  90. package/build/src/types/tests/lib/search/worker.test.d.ts +13 -0
  91. package/build/src/types/theme/Navbar/Bridge/mobile-menu.d.ts +21 -5
  92. package/build/src/types/theme/Navbar/Canopy/mobile-menu.d.ts +21 -5
  93. package/build/src/types/theme/Navbar/Compass/mobile-menu.d.ts +23 -7
  94. package/build/src/types/theme/Navbar/Monolith/mobile-menu.d.ts +21 -5
  95. package/build/src/types/theme/NavbarItem/index.d.ts +12 -0
  96. package/nova-config.d.ts +14 -2
  97. package/nova-sidebars.d.ts +1 -0
  98. package/package.json +8 -5
  99. package/build/src/tests/demo-coverage.test.d.ts +0 -2
  100. package/build/src/tests/demo-coverage.test.d.ts.map +0 -1
  101. package/build/src/tests/demo-coverage.test.js +0 -178
  102. package/build/src/tests/demo-coverage.test.js.map +0 -1
  103. package/build/src/tests/demo-logo-override.test.d.ts +0 -2
  104. package/build/src/tests/demo-logo-override.test.d.ts.map +0 -1
  105. package/build/src/tests/demo-logo-override.test.js +0 -42
  106. package/build/src/tests/demo-logo-override.test.js.map +0 -1
  107. package/build/src/types/tests/demo-coverage.test.d.ts +0 -176
  108. package/build/src/types/tests/demo-logo-override.test.d.ts +0 -45
@@ -90,7 +90,8 @@
90
90
  * ============================ */
91
91
 
92
92
  .nova-navbar-compass-items a,
93
- .nova-navbar-compass-items .nova-navbar-more-summary {
93
+ .nova-navbar-compass-items .nova-navbar-more-summary,
94
+ .nova-navbar-compass-items .nova-dropdown-summary {
94
95
  min-height: 2.25rem;
95
96
  padding: 0.375rem 0.75rem;
96
97
 
@@ -113,7 +114,10 @@
113
114
  .nova-navbar-compass-items a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
114
115
  .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:hover,
115
116
  .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:focus-visible,
116
- .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary {
117
+ .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary,
118
+ .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:hover,
119
+ .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:focus-visible,
120
+ .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active)[open] > .nova-dropdown-summary {
117
121
  color: var(--nova-color-primary-700);
118
122
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 88%);
119
123
  text-decoration: none;
@@ -124,7 +128,10 @@
124
128
  [data-theme="dark"] .nova-navbar-compass-items a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
125
129
  [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:hover,
126
130
  [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:focus-visible,
127
- [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary {
131
+ [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary,
132
+ [data-theme="dark"] .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:hover,
133
+ [data-theme="dark"] .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:focus-visible,
134
+ [data-theme="dark"] .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active)[open] > .nova-dropdown-summary {
128
135
  color: var(--nova-color-primary-300);
129
136
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 80%);
130
137
  }
@@ -141,7 +148,8 @@
141
148
  .nova-navbar-compass-items a[aria-current="page"],
142
149
  .nova-navbar-compass-items a.navbar__link--active,
143
150
  .nova-navbar-compass-items .nova-navbar-more:has(a[aria-current="page"]) > .nova-navbar-more-summary,
144
- .nova-navbar-compass-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary {
151
+ .nova-navbar-compass-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary,
152
+ .nova-navbar-compass-items .nova-dropdown--active > .nova-dropdown-summary {
145
153
  font-weight: 600;
146
154
  color: var(--nova-color-primary-800);
147
155
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 84%);
@@ -150,7 +158,8 @@
150
158
  [data-theme="dark"] .nova-navbar-compass-items a[aria-current="page"],
151
159
  [data-theme="dark"] .nova-navbar-compass-items a.navbar__link--active,
152
160
  [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:has(a[aria-current="page"]) > .nova-navbar-more-summary,
153
- [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary {
161
+ [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary,
162
+ [data-theme="dark"] .nova-navbar-compass-items .nova-dropdown--active > .nova-dropdown-summary {
154
163
  color: var(--nova-color-primary-200);
155
164
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 76%);
156
165
  }
@@ -327,7 +336,8 @@
327
336
  * 13. Mobile menu items - mono uppercase carved labels
328
337
  * ============================ */
329
338
 
330
- .nova-navbar-compass-menu-item {
339
+ .nova-navbar-compass-menu-item,
340
+ .nova-navbar-compass-menu-dropdown-summary {
331
341
  gap: 0.75rem;
332
342
 
333
343
  font-family: var(--nova-font-display);
@@ -335,7 +345,7 @@
335
345
  font-weight: 500;
336
346
  font-variation-settings: "opsz" 36;
337
347
  font-size: 1rem;
338
- color: var(--nova-lantern-ink);
348
+ color: var(--nova-color-primary-700);
339
349
  border-radius: 6px;
340
350
 
341
351
  transition:
@@ -343,6 +353,10 @@
343
353
  background-color var(--nova-lantern-transition);
344
354
  }
345
355
 
356
+ [data-theme="dark"] .nova-navbar-compass-menu-dropdown-summary {
357
+ color: var(--nova-color-primary-400);
358
+ }
359
+
346
360
  /* External-link arrow - tint amber to match the Lantern voice */
347
361
  .nova-navbar-compass-menu-panel .nova-navbar-compass-menu-items a[target="_blank"] span::after {
348
362
  background-color: var(--nova-color-primary-600);
@@ -353,14 +367,18 @@
353
367
  }
354
368
 
355
369
  .nova-navbar-compass-menu-item:hover,
356
- .nova-navbar-compass-menu-item:focus-visible {
370
+ .nova-navbar-compass-menu-item:focus-visible,
371
+ .nova-navbar-compass-menu-dropdown-summary:hover,
372
+ .nova-navbar-compass-menu-dropdown-summary:focus-visible {
357
373
  color: var(--nova-color-primary-700);
358
374
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 90%);
359
375
  text-decoration: none;
360
376
  }
361
377
 
362
378
  [data-theme="dark"] .nova-navbar-compass-menu-item:hover,
363
- [data-theme="dark"] .nova-navbar-compass-menu-item:focus-visible {
379
+ [data-theme="dark"] .nova-navbar-compass-menu-item:focus-visible,
380
+ [data-theme="dark"] .nova-navbar-compass-menu-dropdown-summary:hover,
381
+ [data-theme="dark"] .nova-navbar-compass-menu-dropdown-summary:focus-visible {
364
382
  color: var(--nova-color-primary-300);
365
383
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 84%);
366
384
  }
@@ -377,11 +395,13 @@
377
395
  }
378
396
 
379
397
  /* Inline icon glyph - amber tint */
380
- .nova-navbar-compass-menu-item svg {
398
+ .nova-navbar-compass-menu-item svg,
399
+ .nova-navbar-compass-menu-dropdown-summary svg {
381
400
  color: var(--nova-color-primary-600);
382
401
  }
383
402
 
384
- [data-theme="dark"] .nova-navbar-compass-menu-item svg {
403
+ [data-theme="dark"] .nova-navbar-compass-menu-item svg,
404
+ [data-theme="dark"] .nova-navbar-compass-menu-dropdown-summary svg {
385
405
  color: var(--nova-color-primary-400);
386
406
  }
387
407
 
@@ -399,3 +419,9 @@
399
419
  animation-delay: calc(var(--nova-item-index, 0) * 50ms + 50ms);
400
420
  }
401
421
 
422
+ /* No open margin needed for this preset */
423
+
424
+ .nova-navbar-compass-menu-dropdown-children {
425
+ padding-inline-start: 1.75rem;
426
+ }
427
+
@@ -224,7 +224,8 @@
224
224
  * 8. Mobile menu items - mono uppercase carved labels
225
225
  * ============================ */
226
226
 
227
- .nova-navbar-monolith-menu-item {
227
+ .nova-navbar-monolith-menu-item,
228
+ .nova-navbar-monolith-menu-dropdown-summary {
228
229
  gap: 0.75rem;
229
230
 
230
231
  font-family: var(--nova-font-display);
@@ -232,7 +233,7 @@
232
233
  font-weight: 500;
233
234
  font-variation-settings: "opsz" 36;
234
235
  font-size: 1rem;
235
- color: var(--nova-lantern-ink);
236
+ color: var(--nova-color-primary-700);
236
237
  border-radius: 6px;
237
238
 
238
239
  transition:
@@ -241,18 +242,26 @@
241
242
  }
242
243
 
243
244
  .nova-navbar-monolith-menu-item:hover,
244
- .nova-navbar-monolith-menu-item:focus-visible {
245
+ .nova-navbar-monolith-menu-item:focus-visible,
246
+ .nova-navbar-monolith-menu-dropdown-summary:hover,
247
+ .nova-navbar-monolith-menu-dropdown-summary:focus-visible {
245
248
  color: var(--nova-color-primary-700);
246
249
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 90%);
247
250
  text-decoration: none;
248
251
  }
249
252
 
250
253
  [data-theme="dark"] .nova-navbar-monolith-menu-item:hover,
251
- [data-theme="dark"] .nova-navbar-monolith-menu-item:focus-visible {
254
+ [data-theme="dark"] .nova-navbar-monolith-menu-item:focus-visible,
255
+ [data-theme="dark"] .nova-navbar-monolith-menu-dropdown-summary:hover,
256
+ [data-theme="dark"] .nova-navbar-monolith-menu-dropdown-summary:focus-visible {
252
257
  color: var(--nova-color-primary-300);
253
258
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 84%);
254
259
  }
255
260
 
261
+ [data-theme="dark"] .nova-navbar-monolith-menu-dropdown-summary {
262
+ color: var(--nova-color-primary-400);
263
+ }
264
+
256
265
  .nova-navbar-monolith-menu-item[aria-current="page"] {
257
266
  color: var(--nova-color-primary-800);
258
267
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 84%);
@@ -278,9 +287,18 @@
278
287
  * preset declares `motion.staggeredReveals: true`.
279
288
  * ============================ */
280
289
 
281
- .nova-navbar-monolith-menu-item {
290
+ .nova-navbar-monolith-menu-item,
291
+ .nova-navbar-monolith-menu-dropdown {
282
292
  opacity: 0;
283
293
 
284
294
  animation: lantern-fade-in-up var(--nova-lantern-transition) forwards;
285
295
  animation-delay: calc(var(--nova-item-index, 0) * 50ms + 50ms);
286
296
  }
297
+
298
+ /* ============================
299
+ * 9. Mobile menu dropdown spacing
300
+ * ============================ */
301
+
302
+ .nova-navbar-monolith-menu-dropdown-children {
303
+ padding-inline-start: 1.75rem;
304
+ }
@@ -2,9 +2,10 @@
2
2
  * Lantern - `Navbar/More` theme overlay.
3
3
  *
4
4
  * The popover menu, item link, and active-item styling are grouped with
5
- * `.nova-locale-dropdown-menu` / `.nova-version-dropdown-menu` in this
6
- * preset's `Navbar/style.css` so all three navbar dropdowns share one
7
- * surface treatment. No per-component overrides needed here.
5
+ * `.nova-locale-dropdown-menu` / `.nova-version-dropdown-menu` /
6
+ * `.nova-dropdown-menu` in this preset's `Navbar/style.css` so all four
7
+ * navbar dropdowns share one surface treatment. No per-component
8
+ * overrides needed here.
8
9
  *
9
10
  * @since 0.18.0
10
11
  */
@@ -70,6 +70,7 @@
70
70
  /* Popover menu - mirrors search-dropdown paper-card treatment. */
71
71
  .nova-locale-dropdown-menu,
72
72
  .nova-version-dropdown-menu,
73
+ .nova-dropdown-menu,
73
74
  .nova-navbar-more-menu {
74
75
  padding: 0.5rem 0;
75
76
 
@@ -81,6 +82,7 @@
81
82
 
82
83
  [data-theme="dark"] .nova-locale-dropdown-menu,
83
84
  [data-theme="dark"] .nova-version-dropdown-menu,
85
+ [data-theme="dark"] .nova-dropdown-menu,
84
86
  [data-theme="dark"] .nova-navbar-more-menu {
85
87
  background: color-mix(in srgb, var(--nova-color-primary-500), var(--nova-lantern-bg) 88%);
86
88
  border-color: color-mix(in srgb, var(--nova-color-primary-500), var(--nova-lantern-border) 50%);
@@ -89,13 +91,14 @@
89
91
 
90
92
  /* Item link - italic Fraunces caption.
91
93
  Explicit `display: block`, `border-radius: 0`, `text-transform: none`,
92
- `letter-spacing: normal` defend the More popover items from the variant
93
- nav-item cluster rule (`.nova-navbar-compass-items a`) which would
94
- otherwise leak inline-flex, rounded corners, uppercase, and 0.12em
95
- tracking onto items rendered inside the popover. No-op for
94
+ `letter-spacing: normal` defend the More and generic dropdown popover
95
+ items from the variant nav-item cluster rule (`.nova-navbar-compass-items a`)
96
+ which would otherwise leak inline-flex, rounded corners, uppercase, and
97
+ 0.12em tracking onto items rendered inside the popover. No-op for
96
98
  locale/version where no variant rule competes. */
97
99
  .nova-locale-dropdown-item-link,
98
100
  .nova-version-dropdown-item-link,
101
+ .nova-dropdown-menu .nova-dropdown-item a,
99
102
  .nova-navbar-more-menu .nova-navbar-more-item a {
100
103
  display: block;
101
104
  padding: 0.5rem 0.75rem;
@@ -121,6 +124,8 @@
121
124
  .nova-locale-dropdown-item-link:focus-visible,
122
125
  .nova-version-dropdown-item-link:hover,
123
126
  .nova-version-dropdown-item-link:focus-visible,
127
+ .nova-dropdown-menu .nova-dropdown-item a:hover,
128
+ .nova-dropdown-menu .nova-dropdown-item a:focus-visible,
124
129
  .nova-navbar-more-menu .nova-navbar-more-item a:hover,
125
130
  .nova-navbar-more-menu .nova-navbar-more-item a:focus-visible {
126
131
  text-decoration: none;
@@ -130,6 +135,8 @@
130
135
  .nova-locale-dropdown-item:not(.nova-locale-dropdown-item--active) > .nova-locale-dropdown-item-link:focus-visible,
131
136
  .nova-version-dropdown-item:not(.nova-version-dropdown-item--active) > .nova-version-dropdown-item-link:hover,
132
137
  .nova-version-dropdown-item:not(.nova-version-dropdown-item--active) > .nova-version-dropdown-item-link:focus-visible,
138
+ .nova-dropdown-menu .nova-dropdown-item a:not(.navbar__link--active):not([aria-current="page"]):hover,
139
+ .nova-dropdown-menu .nova-dropdown-item a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
133
140
  .nova-navbar-more-menu .nova-navbar-more-item a:not(.navbar__link--active):not([aria-current="page"]):hover,
134
141
  .nova-navbar-more-menu .nova-navbar-more-item a:not(.navbar__link--active):not([aria-current="page"]):focus-visible {
135
142
  color: var(--nova-color-primary-700);
@@ -141,6 +148,8 @@
141
148
  [data-theme="dark"] .nova-locale-dropdown-item:not(.nova-locale-dropdown-item--active) > .nova-locale-dropdown-item-link:focus-visible,
142
149
  [data-theme="dark"] .nova-version-dropdown-item:not(.nova-version-dropdown-item--active) > .nova-version-dropdown-item-link:hover,
143
150
  [data-theme="dark"] .nova-version-dropdown-item:not(.nova-version-dropdown-item--active) > .nova-version-dropdown-item-link:focus-visible,
151
+ [data-theme="dark"] .nova-dropdown-menu .nova-dropdown-item a:not(.navbar__link--active):not([aria-current="page"]):hover,
152
+ [data-theme="dark"] .nova-dropdown-menu .nova-dropdown-item a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
144
153
  [data-theme="dark"] .nova-navbar-more-menu .nova-navbar-more-item a:not(.navbar__link--active):not([aria-current="page"]):hover,
145
154
  [data-theme="dark"] .nova-navbar-more-menu .nova-navbar-more-item a:not(.navbar__link--active):not([aria-current="page"]):focus-visible {
146
155
  color: var(--nova-color-primary-300);
@@ -71,7 +71,8 @@
71
71
  * ============================ */
72
72
 
73
73
  .nova-navbar-bridge-items a,
74
- .nova-navbar-bridge-items .nova-navbar-more-summary {
74
+ .nova-navbar-bridge-items .nova-navbar-more-summary,
75
+ .nova-navbar-bridge-items .nova-dropdown-summary {
75
76
  display: inline-flex;
76
77
  align-items: center;
77
78
  min-height: 2.25rem;
@@ -95,7 +96,10 @@
95
96
  .nova-navbar-bridge-items a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
96
97
  .nova-navbar-bridge-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:hover,
97
98
  .nova-navbar-bridge-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:focus-visible,
98
- .nova-navbar-bridge-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary {
99
+ .nova-navbar-bridge-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary,
100
+ .nova-navbar-bridge-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:hover,
101
+ .nova-navbar-bridge-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:focus-visible,
102
+ .nova-navbar-bridge-items .nova-dropdown:not(.nova-dropdown--active)[open] > .nova-dropdown-summary {
99
103
  color: var(--nova-color-accent-800);
100
104
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 94%);
101
105
  text-decoration: none;
@@ -105,7 +109,10 @@
105
109
  [data-theme="dark"] .nova-navbar-bridge-items a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
106
110
  [data-theme="dark"] .nova-navbar-bridge-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:hover,
107
111
  [data-theme="dark"] .nova-navbar-bridge-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:focus-visible,
108
- [data-theme="dark"] .nova-navbar-bridge-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary {
112
+ [data-theme="dark"] .nova-navbar-bridge-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary,
113
+ [data-theme="dark"] .nova-navbar-bridge-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:hover,
114
+ [data-theme="dark"] .nova-navbar-bridge-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:focus-visible,
115
+ [data-theme="dark"] .nova-navbar-bridge-items .nova-dropdown:not(.nova-dropdown--active)[open] > .nova-dropdown-summary {
109
116
  color: var(--nova-color-accent-300);
110
117
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 86%);
111
118
  }
@@ -132,7 +139,8 @@
132
139
  .nova-navbar-bridge-items a[aria-current="page"],
133
140
  .nova-navbar-bridge-items a.navbar__link--active,
134
141
  .nova-navbar-bridge-items .nova-navbar-more:has(a[aria-current="page"]) > .nova-navbar-more-summary,
135
- .nova-navbar-bridge-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary {
142
+ .nova-navbar-bridge-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary,
143
+ .nova-navbar-bridge-items .nova-dropdown--active > .nova-dropdown-summary {
136
144
  color: var(--nova-color-accent-800);
137
145
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 88%);
138
146
  }
@@ -140,7 +148,8 @@
140
148
  [data-theme="dark"] .nova-navbar-bridge-items a[aria-current="page"],
141
149
  [data-theme="dark"] .nova-navbar-bridge-items a.navbar__link--active,
142
150
  [data-theme="dark"] .nova-navbar-bridge-items .nova-navbar-more:has(a[aria-current="page"]) > .nova-navbar-more-summary,
143
- [data-theme="dark"] .nova-navbar-bridge-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary {
151
+ [data-theme="dark"] .nova-navbar-bridge-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary,
152
+ [data-theme="dark"] .nova-navbar-bridge-items .nova-dropdown--active > .nova-dropdown-summary {
144
153
  color: var(--nova-color-accent-300);
145
154
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 80%);
146
155
  }
@@ -275,7 +284,8 @@
275
284
  * 11. Mobile menu items - mono uppercase carved labels
276
285
  * ============================ */
277
286
 
278
- .nova-navbar-bridge-menu-item {
287
+ .nova-navbar-bridge-menu-item,
288
+ .nova-navbar-bridge-menu-dropdown-summary {
279
289
  gap: 0.75rem;
280
290
 
281
291
  font-family: var(--nova-font-code);
@@ -283,25 +293,33 @@
283
293
  font-weight: 600;
284
294
  letter-spacing: 0.08em;
285
295
  text-transform: uppercase;
286
- color: var(--nova-marshal-ink);
296
+ color: var(--nova-color-primary-700);
287
297
  border-radius: 2px;
288
298
 
289
299
  transition: color var(--nova-marshal-transition);
290
300
  }
291
301
 
292
302
  .nova-navbar-bridge-menu-item:hover,
293
- .nova-navbar-bridge-menu-item:focus-visible {
303
+ .nova-navbar-bridge-menu-item:focus-visible,
304
+ .nova-navbar-bridge-menu-dropdown-summary:hover,
305
+ .nova-navbar-bridge-menu-dropdown-summary:focus-visible {
294
306
  color: var(--nova-color-primary-800);
295
307
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 94%);
296
308
  text-decoration: none;
297
309
  }
298
310
 
299
311
  [data-theme="dark"] .nova-navbar-bridge-menu-item:hover,
300
- [data-theme="dark"] .nova-navbar-bridge-menu-item:focus-visible {
312
+ [data-theme="dark"] .nova-navbar-bridge-menu-item:focus-visible,
313
+ [data-theme="dark"] .nova-navbar-bridge-menu-dropdown-summary:hover,
314
+ [data-theme="dark"] .nova-navbar-bridge-menu-dropdown-summary:focus-visible {
301
315
  color: var(--nova-color-primary-300);
302
316
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 88%);
303
317
  }
304
318
 
319
+ [data-theme="dark"] .nova-navbar-bridge-menu-dropdown-summary {
320
+ color: var(--nova-color-primary-300);
321
+ }
322
+
305
323
  .nova-navbar-bridge-menu-item[aria-current="page"] {
306
324
  color: var(--nova-color-primary-800);
307
325
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 88%);
@@ -322,6 +340,14 @@
322
340
  color: var(--nova-color-accent-500);
323
341
  }
324
342
 
343
+ .nova-navbar-bridge-menu-dropdown-summary svg {
344
+ color: var(--nova-color-accent-700);
345
+ }
346
+
347
+ [data-theme="dark"] .nova-navbar-bridge-menu-dropdown-summary svg {
348
+ color: var(--nova-color-accent-500);
349
+ }
350
+
325
351
  /* External-link arrow - green */
326
352
  .nova-navbar-bridge-menu-panel .nova-navbar-bridge-menu-items a[target="_blank"] span::after {
327
353
  background-color: var(--nova-color-primary-700);
@@ -340,8 +366,22 @@
340
366
  * feel argues against a per-item ripple.
341
367
  * ============================ */
342
368
 
343
- .nova-navbar-bridge-menu-item {
369
+ .nova-navbar-bridge-menu-item,
370
+ .nova-navbar-bridge-menu-dropdown {
344
371
  opacity: 0;
345
372
 
346
373
  animation: marshal-fade-in var(--nova-marshal-transition) forwards;
347
374
  }
375
+
376
+ /* ============================
377
+ * 13. Mobile menu dropdown spacing
378
+ * ============================ */
379
+
380
+ .nova-navbar-bridge-menu-dropdown[open] > .nova-navbar-bridge-menu-dropdown-summary {
381
+ margin-bottom: 0.125rem;
382
+ }
383
+
384
+ .nova-navbar-bridge-menu-dropdown-children {
385
+ gap: 0.125rem;
386
+ padding-inline-start: 1.75rem;
387
+ }
@@ -79,7 +79,8 @@
79
79
  * ============================ */
80
80
 
81
81
  .nova-navbar-canopy-items a,
82
- .nova-navbar-canopy-items .nova-navbar-more-summary {
82
+ .nova-navbar-canopy-items .nova-navbar-more-summary,
83
+ .nova-navbar-canopy-items .nova-dropdown-summary {
83
84
  min-height: 2.25rem;
84
85
  padding: 0.375rem 0.75rem;
85
86
 
@@ -101,7 +102,10 @@
101
102
  .nova-navbar-canopy-items a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
102
103
  .nova-navbar-canopy-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:hover,
103
104
  .nova-navbar-canopy-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:focus-visible,
104
- .nova-navbar-canopy-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary {
105
+ .nova-navbar-canopy-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary,
106
+ .nova-navbar-canopy-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:hover,
107
+ .nova-navbar-canopy-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:focus-visible,
108
+ .nova-navbar-canopy-items .nova-dropdown:not(.nova-dropdown--active)[open] > .nova-dropdown-summary {
105
109
  color: var(--nova-color-accent-800);
106
110
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 94%);
107
111
  text-decoration: none;
@@ -111,7 +115,10 @@
111
115
  [data-theme="dark"] .nova-navbar-canopy-items a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
112
116
  [data-theme="dark"] .nova-navbar-canopy-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:hover,
113
117
  [data-theme="dark"] .nova-navbar-canopy-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:focus-visible,
114
- [data-theme="dark"] .nova-navbar-canopy-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary {
118
+ [data-theme="dark"] .nova-navbar-canopy-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary,
119
+ [data-theme="dark"] .nova-navbar-canopy-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:hover,
120
+ [data-theme="dark"] .nova-navbar-canopy-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:focus-visible,
121
+ [data-theme="dark"] .nova-navbar-canopy-items .nova-dropdown:not(.nova-dropdown--active)[open] > .nova-dropdown-summary {
115
122
  color: var(--nova-color-accent-300);
116
123
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 86%);
117
124
  }
@@ -139,7 +146,8 @@
139
146
  .nova-navbar-canopy-items a[aria-current="page"],
140
147
  .nova-navbar-canopy-items a.navbar__link--active,
141
148
  .nova-navbar-canopy-items .nova-navbar-more:has(a[aria-current="page"]) > .nova-navbar-more-summary,
142
- .nova-navbar-canopy-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary {
149
+ .nova-navbar-canopy-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary,
150
+ .nova-navbar-canopy-items .nova-dropdown--active > .nova-dropdown-summary {
143
151
  color: var(--nova-color-accent-800);
144
152
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 88%);
145
153
  }
@@ -147,7 +155,8 @@
147
155
  [data-theme="dark"] .nova-navbar-canopy-items a[aria-current="page"],
148
156
  [data-theme="dark"] .nova-navbar-canopy-items a.navbar__link--active,
149
157
  [data-theme="dark"] .nova-navbar-canopy-items .nova-navbar-more:has(a[aria-current="page"]) > .nova-navbar-more-summary,
150
- [data-theme="dark"] .nova-navbar-canopy-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary {
158
+ [data-theme="dark"] .nova-navbar-canopy-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary,
159
+ [data-theme="dark"] .nova-navbar-canopy-items .nova-dropdown--active > .nova-dropdown-summary {
151
160
  color: var(--nova-color-accent-300);
152
161
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 80%);
153
162
  }
@@ -286,7 +295,8 @@
286
295
  gap: 0.5rem;
287
296
  }
288
297
 
289
- .nova-navbar-canopy-menu-item {
298
+ .nova-navbar-canopy-menu-item,
299
+ .nova-navbar-canopy-menu-dropdown-summary {
290
300
  position: relative;
291
301
 
292
302
  flex-direction: column;
@@ -301,7 +311,7 @@
301
311
  letter-spacing: 0.08em;
302
312
  text-align: center;
303
313
  text-transform: uppercase;
304
- color: var(--nova-marshal-ink);
314
+ color: var(--nova-color-primary-700);
305
315
 
306
316
  background-color: transparent;
307
317
  border: 1px solid var(--nova-marshal-border);
@@ -312,15 +322,23 @@
312
322
  border-color var(--nova-marshal-transition);
313
323
  }
314
324
 
325
+ [data-theme="dark"] .nova-navbar-canopy-menu-dropdown-summary {
326
+ color: var(--nova-color-primary-300);
327
+ }
328
+
315
329
  .nova-navbar-canopy-menu-item:hover,
316
- .nova-navbar-canopy-menu-item:focus-visible {
330
+ .nova-navbar-canopy-menu-item:focus-visible,
331
+ .nova-navbar-canopy-menu-dropdown-summary:hover,
332
+ .nova-navbar-canopy-menu-dropdown-summary:focus-visible {
317
333
  color: var(--nova-color-primary-800);
318
334
  border-color: var(--nova-color-primary-700);
319
335
  text-decoration: none;
320
336
  }
321
337
 
322
338
  [data-theme="dark"] .nova-navbar-canopy-menu-item:hover,
323
- [data-theme="dark"] .nova-navbar-canopy-menu-item:focus-visible {
339
+ [data-theme="dark"] .nova-navbar-canopy-menu-item:focus-visible,
340
+ [data-theme="dark"] .nova-navbar-canopy-menu-dropdown-summary:hover,
341
+ [data-theme="dark"] .nova-navbar-canopy-menu-dropdown-summary:focus-visible {
324
342
  color: var(--nova-color-primary-300);
325
343
  border-color: var(--nova-color-primary-400);
326
344
  }
@@ -337,11 +355,13 @@
337
355
  box-shadow: inset 2px 0 0 0 var(--nova-color-primary-400);
338
356
  }
339
357
 
340
- .nova-navbar-canopy-menu-item svg {
358
+ .nova-navbar-canopy-menu-item svg,
359
+ .nova-navbar-canopy-menu-dropdown-summary svg {
341
360
  color: var(--nova-color-accent-700);
342
361
  }
343
362
 
344
- [data-theme="dark"] .nova-navbar-canopy-menu-item svg {
363
+ [data-theme="dark"] .nova-navbar-canopy-menu-item svg,
364
+ [data-theme="dark"] .nova-navbar-canopy-menu-dropdown-summary svg {
345
365
  color: var(--nova-color-accent-500);
346
366
  }
347
367
 
@@ -360,12 +380,21 @@
360
380
  * `motion.staggeredReveals: false` so items reveal together.
361
381
  * ============================ */
362
382
 
363
- .nova-navbar-canopy-menu-item {
383
+ .nova-navbar-canopy-menu-item,
384
+ .nova-navbar-canopy-menu-dropdown {
364
385
  opacity: 0;
365
386
 
366
387
  animation: marshal-fade-in var(--nova-marshal-transition) forwards;
367
388
  }
368
389
 
390
+ .nova-navbar-canopy-menu-dropdown[open] > .nova-navbar-canopy-menu-dropdown-summary {
391
+ margin-bottom: 0.5rem;
392
+ }
393
+
394
+ .nova-navbar-canopy-menu-dropdown-children {
395
+ gap: 0.5rem;
396
+ }
397
+
369
398
  /* Brand sizes scale up on tablet+. */
370
399
  @media (min-width: 768px) {
371
400
  .nova-navbar-canopy-brand img {
@@ -87,7 +87,8 @@
87
87
  * ============================ */
88
88
 
89
89
  .nova-navbar-compass-items a,
90
- .nova-navbar-compass-items .nova-navbar-more-summary {
90
+ .nova-navbar-compass-items .nova-navbar-more-summary,
91
+ .nova-navbar-compass-items .nova-dropdown-summary {
91
92
  display: inline-flex;
92
93
  align-items: center;
93
94
  min-height: 2.25rem;
@@ -111,7 +112,10 @@
111
112
  .nova-navbar-compass-items a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
112
113
  .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:hover,
113
114
  .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:focus-visible,
114
- .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary {
115
+ .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary,
116
+ .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:hover,
117
+ .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:focus-visible,
118
+ .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active)[open] > .nova-dropdown-summary {
115
119
  color: var(--nova-color-accent-800);
116
120
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 94%);
117
121
  text-decoration: none;
@@ -121,7 +125,10 @@
121
125
  [data-theme="dark"] .nova-navbar-compass-items a:not(.navbar__link--active):not([aria-current="page"]):focus-visible,
122
126
  [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:hover,
123
127
  [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"])) > .nova-navbar-more-summary:focus-visible,
124
- [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary {
128
+ [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:not(:has(a.navbar__link--active)):not(:has(a[aria-current="page"]))[open] > .nova-navbar-more-summary,
129
+ [data-theme="dark"] .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:hover,
130
+ [data-theme="dark"] .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active) > .nova-dropdown-summary:focus-visible,
131
+ [data-theme="dark"] .nova-navbar-compass-items .nova-dropdown:not(.nova-dropdown--active)[open] > .nova-dropdown-summary {
125
132
  color: var(--nova-color-accent-300);
126
133
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 86%);
127
134
  }
@@ -138,7 +145,8 @@
138
145
  .nova-navbar-compass-items a[aria-current="page"],
139
146
  .nova-navbar-compass-items a.navbar__link--active,
140
147
  .nova-navbar-compass-items .nova-navbar-more:has(a[aria-current="page"]) > .nova-navbar-more-summary,
141
- .nova-navbar-compass-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary {
148
+ .nova-navbar-compass-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary,
149
+ .nova-navbar-compass-items .nova-dropdown--active > .nova-dropdown-summary {
142
150
  color: var(--nova-color-accent-800);
143
151
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 88%);
144
152
  }
@@ -146,7 +154,8 @@
146
154
  [data-theme="dark"] .nova-navbar-compass-items a[aria-current="page"],
147
155
  [data-theme="dark"] .nova-navbar-compass-items a.navbar__link--active,
148
156
  [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:has(a[aria-current="page"]) > .nova-navbar-more-summary,
149
- [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary {
157
+ [data-theme="dark"] .nova-navbar-compass-items .nova-navbar-more:has(a.navbar__link--active) > .nova-navbar-more-summary,
158
+ [data-theme="dark"] .nova-navbar-compass-items .nova-dropdown--active > .nova-dropdown-summary {
150
159
  color: var(--nova-color-accent-300);
151
160
  background-color: color-mix(in srgb, var(--nova-color-accent-500), transparent 80%);
152
161
  }
@@ -279,7 +288,8 @@
279
288
  * 12. Mobile menu items - mono uppercase carved labels
280
289
  * ============================ */
281
290
 
282
- .nova-navbar-compass-menu-item {
291
+ .nova-navbar-compass-menu-item,
292
+ .nova-navbar-compass-menu-dropdown-summary {
283
293
  gap: 0.75rem;
284
294
 
285
295
  font-family: var(--nova-font-code);
@@ -287,21 +297,29 @@
287
297
  font-weight: 600;
288
298
  letter-spacing: 0.08em;
289
299
  text-transform: uppercase;
290
- color: var(--nova-marshal-ink);
300
+ color: var(--nova-color-primary-700);
291
301
  border-radius: 2px;
292
302
 
293
303
  transition: color var(--nova-marshal-transition);
294
304
  }
295
305
 
306
+ [data-theme="dark"] .nova-navbar-compass-menu-dropdown-summary {
307
+ color: var(--nova-color-primary-300);
308
+ }
309
+
296
310
  .nova-navbar-compass-menu-item:hover,
297
- .nova-navbar-compass-menu-item:focus-visible {
311
+ .nova-navbar-compass-menu-item:focus-visible,
312
+ .nova-navbar-compass-menu-dropdown-summary:hover,
313
+ .nova-navbar-compass-menu-dropdown-summary:focus-visible {
298
314
  color: var(--nova-color-primary-800);
299
315
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 94%);
300
316
  text-decoration: none;
301
317
  }
302
318
 
303
319
  [data-theme="dark"] .nova-navbar-compass-menu-item:hover,
304
- [data-theme="dark"] .nova-navbar-compass-menu-item:focus-visible {
320
+ [data-theme="dark"] .nova-navbar-compass-menu-item:focus-visible,
321
+ [data-theme="dark"] .nova-navbar-compass-menu-dropdown-summary:hover,
322
+ [data-theme="dark"] .nova-navbar-compass-menu-dropdown-summary:focus-visible {
305
323
  color: var(--nova-color-primary-300);
306
324
  background-color: color-mix(in srgb, var(--nova-color-primary-500), transparent 88%);
307
325
  }
@@ -341,8 +359,21 @@
341
359
  * `motion.staggeredReveals: false` so items reveal together.
342
360
  * ============================ */
343
361
 
344
- .nova-navbar-compass-menu-item {
362
+ .nova-navbar-compass-menu-item,
363
+ .nova-navbar-compass-menu-dropdown {
345
364
  opacity: 0;
346
365
 
347
366
  animation: marshal-fade-in var(--nova-marshal-transition) forwards;
348
367
  }
368
+
369
+ /* ============================
370
+ * 13. Mobile menu dropdown spacing
371
+ * ============================ */
372
+
373
+ .nova-navbar-compass-menu-dropdown[open] > .nova-navbar-compass-menu-dropdown-summary {
374
+ margin-bottom: 0.125rem;
375
+ }
376
+
377
+ .nova-navbar-compass-menu-dropdown-children {
378
+ padding-inline-start: 1.75rem;
379
+ }