@janga/norna 0.7.23 → 0.7.25

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 (82) hide show
  1. package/README.md +14 -18
  2. package/astro.config.mjs +14 -0
  3. package/bin/norna-cli.mjs +6 -0
  4. package/package.json +25 -2
  5. package/schemas/category.schema.json +2 -2
  6. package/schemas/config.schema.json +80 -15
  7. package/schemas/content-frontmatter.schema.json +7 -7
  8. package/schemas/page-theme.schema.json +26 -26
  9. package/schemas/sitewide-content.schema.json +18 -18
  10. package/schemas/theme.schema.json +246 -246
  11. package/scripts/build-site.mjs +1 -0
  12. package/scripts/check-config.mjs +16 -1
  13. package/scripts/dev-local.mjs +106 -11
  14. package/scripts/generate-search-index.mjs +57 -0
  15. package/scripts/init-site.mjs +3 -0
  16. package/scripts/lib/code-fence-metadata.mjs +228 -0
  17. package/scripts/lib/edit-source-link.mjs +102 -0
  18. package/scripts/lib/editor-language-service.mjs +32 -12
  19. package/scripts/lib/image-presentation.mjs +4 -0
  20. package/scripts/lib/navigation-model.mjs +34 -13
  21. package/scripts/lib/navigation-review.mjs +396 -0
  22. package/scripts/lib/norna-markdown-blocks.mjs +164 -26
  23. package/scripts/lib/norna-markdown-render-plugin.mjs +64 -1
  24. package/scripts/lib/page-aliases.mjs +21 -1
  25. package/scripts/lib/page-markdown.mjs +32 -1
  26. package/scripts/lib/page-move-plan.mjs +659 -0
  27. package/scripts/lib/presentation-palette-metadata.mjs +1 -1
  28. package/scripts/lib/presentation.mjs +1 -10
  29. package/scripts/lib/project-config.mjs +141 -5
  30. package/scripts/lib/public-asset-conventions.mjs +36 -2
  31. package/scripts/lib/schema-definitions.mjs +30 -5
  32. package/scripts/lib/schema-editor-metadata.mjs +36 -4
  33. package/scripts/lib/schema-value-definitions.mjs +4 -1
  34. package/scripts/lib/semantic-callouts.mjs +128 -0
  35. package/scripts/lib/site-content.mjs +2 -1
  36. package/scripts/lib/site-link-graph.mjs +33 -2
  37. package/scripts/lib/site-navigation-tree.mjs +85 -0
  38. package/scripts/lib/site-paths.mjs +14 -2
  39. package/scripts/lib/social-image-assets.mjs +30 -0
  40. package/scripts/lib/table-render-plugin.mjs +33 -0
  41. package/scripts/lib/theme-presets.mjs +2 -2
  42. package/scripts/lib/theme-profiles.mjs +0 -4
  43. package/scripts/move-site-page.mjs +256 -0
  44. package/scripts/review-navigation.mjs +32 -0
  45. package/scripts/sync-content-sections.mjs +67 -4
  46. package/scripts/sync-site-public.mjs +24 -5
  47. package/src/components/CardList.astro +1 -0
  48. package/src/components/CodeBlockCopyScript.astro +11 -5
  49. package/src/components/EditSourceLink.astro +17 -0
  50. package/src/components/ImageCarousel.astro +9 -7
  51. package/src/components/ImageStack.astro +34 -9
  52. package/src/components/ImageStackEnhancement.astro +331 -0
  53. package/src/components/NavigationPageTree.astro +66 -55
  54. package/src/components/NavigationTreeControls.astro +77 -0
  55. package/src/components/PageAliasRedirect.astro +1 -1
  56. package/src/components/PageContentsNavigation.astro +2 -3
  57. package/src/components/PageList.astro +33 -0
  58. package/src/components/PageSequenceNavigation.astro +37 -0
  59. package/src/components/SearchPage.astro +151 -0
  60. package/src/components/SectionNavigationScript.astro +45 -7
  61. package/src/components/SiteNavigation.astro +102 -51
  62. package/src/components/SitePage.astro +107 -39
  63. package/src/components/SiteSection.astro +11 -3
  64. package/src/components/SiteTreeNavigation.astro +11 -1
  65. package/src/components/TableOverflowScript.astro +251 -0
  66. package/src/components/TreeNavigationScript.astro +271 -34
  67. package/src/layouts/BaseLayout.astro +83 -2
  68. package/src/lib/generatedImages.ts +18 -0
  69. package/src/lib/sectionContent.ts +36 -30
  70. package/src/lib/siteNavigation.ts +31 -52
  71. package/src/lib/sitePages.ts +6 -3
  72. package/src/lib/sitePublicAssets.ts +1 -0
  73. package/src/pages/404.astro +110 -0
  74. package/src/pages/[...slug].astro +15 -5
  75. package/src/styles/content.css +538 -39
  76. package/src/styles/media.css +187 -8
  77. package/src/styles/navigation.css +199 -3
  78. package/src/styles/page-layout.css +481 -100
  79. package/src/styles/responsive.css +144 -28
  80. package/starters/basic/README.md +6 -19
  81. package/starters/basic/package.json +1 -0
  82. package/starters/basic/site/pages/000-home/content.md +13 -50
@@ -40,7 +40,7 @@
40
40
  background-color: transparent;
41
41
  }
42
42
 
43
- @media (min-width: 701px) {
43
+ @media (min-width: 961px) {
44
44
  .site-page-layout-tree > .site-content {
45
45
  --layout-inline-start-margin: 0;
46
46
  --layout-inline-end-margin: auto;
@@ -48,6 +48,17 @@
48
48
  }
49
49
  }
50
50
 
51
+ :is(.tree-local-navigation, .mobile-site-nav, .page-contents-navigation) {
52
+ --tree-disclosure-icon-width: 0.9rem;
53
+ --tree-disclosure-gap: 0.6rem;
54
+ --tree-disclosure-offset: calc(var(--tree-disclosure-icon-width) + var(--tree-disclosure-gap));
55
+ --tree-current-item-background: color-mix(
56
+ in srgb,
57
+ var(--color-surface-soft-background) 58%,
58
+ var(--color-page)
59
+ );
60
+ }
61
+
51
62
  .tree-local-navigation {
52
63
  position: sticky;
53
64
  top: calc(var(--site-top-anchor-offset) + 1.25rem);
@@ -55,10 +66,138 @@
55
66
  min-height: 0;
56
67
  max-height: calc(100svh - var(--site-top-anchor-offset) - 2.5rem);
57
68
  border-inline-end: 1px solid var(--color-nav-separator);
58
- padding: 1.5rem 0;
69
+ padding: 1.25rem 0.75rem 1.25rem 0.35rem;
59
70
  background: var(--color-page);
60
71
  overflow-y: auto;
61
72
  overscroll-behavior: contain;
73
+ scrollbar-gutter: stable;
74
+ }
75
+
76
+ .navigation-tree-controls {
77
+ position: sticky;
78
+ top: 0;
79
+ z-index: 4;
80
+ display: grid;
81
+ grid-template-columns: minmax(0, 1fr) auto;
82
+ gap: 0.45rem;
83
+ margin: 0 0 0.85rem;
84
+ border-bottom: 1px solid var(--color-nav-separator);
85
+ padding: 0 0 0.75rem;
86
+ background: var(--color-page);
87
+ }
88
+
89
+ .navigation-tree-filter {
90
+ position: relative;
91
+ grid-column: 1 / -1;
92
+ display: flex;
93
+ align-items: center;
94
+ }
95
+
96
+ .navigation-tree-filter > svg {
97
+ position: absolute;
98
+ left: 0.55rem;
99
+ width: 0.95rem;
100
+ height: 0.95rem;
101
+ pointer-events: none;
102
+ opacity: 0.62;
103
+ }
104
+
105
+ .navigation-tree-filter > input {
106
+ min-width: 0;
107
+ width: 100%;
108
+ min-height: 2.15rem;
109
+ border: 1px solid var(--color-border);
110
+ border-radius: var(--corner-radius-small, 2px);
111
+ padding: 0.4rem 0.55rem 0.4rem 1.85rem;
112
+ background: var(--color-page);
113
+ color: var(--color-primary-text);
114
+ font: inherit;
115
+ font-size: 0.78rem;
116
+ letter-spacing: 0;
117
+ }
118
+
119
+ .navigation-tree-filter > input::placeholder {
120
+ color: var(--color-secondary-text);
121
+ opacity: 0.8;
122
+ }
123
+
124
+ .navigation-tree-filter > input:focus-visible {
125
+ outline: 2px solid var(--color-focus-ring);
126
+ outline-offset: 2px;
127
+ }
128
+
129
+ .navigation-tree-commands {
130
+ grid-column: 1 / -1;
131
+ display: flex;
132
+ justify-content: flex-end;
133
+ gap: 0.35rem;
134
+ }
135
+
136
+ .navigation-tree-commands > button {
137
+ display: grid;
138
+ place-items: center;
139
+ width: 2.15rem;
140
+ height: 2.15rem;
141
+ border: 1px solid var(--color-border);
142
+ border-radius: var(--corner-radius-small, 2px);
143
+ padding: 0;
144
+ background: var(--color-page);
145
+ color: var(--color-secondary-text);
146
+ cursor: pointer;
147
+ }
148
+
149
+ .navigation-tree-commands > button:hover,
150
+ .navigation-tree-commands > button:focus-visible {
151
+ background: var(--color-surface-soft-background);
152
+ color: var(--color-primary-text);
153
+ }
154
+
155
+ .navigation-tree-commands > button:focus-visible {
156
+ outline: 2px solid var(--color-focus-ring);
157
+ outline-offset: 2px;
158
+ }
159
+
160
+ .navigation-tree-commands > button:disabled {
161
+ cursor: not-allowed;
162
+ opacity: 0.38;
163
+ }
164
+
165
+ .navigation-tree-commands svg {
166
+ width: 1rem;
167
+ height: 1rem;
168
+ }
169
+
170
+ .navigation-tree-filter-empty {
171
+ grid-column: 1 / -1;
172
+ margin: 0.2rem 0 0;
173
+ color: var(--color-secondary-text);
174
+ font-size: 0.75rem;
175
+ line-height: 1.4;
176
+ }
177
+
178
+ [data-tree-filter-active='true'] .navigation-page-sections,
179
+ [data-tree-filter-active='true'] .navigation-page-sections-disclosure {
180
+ display: none;
181
+ }
182
+
183
+ :root[data-appearance='dark']
184
+ :is(.tree-local-navigation, .mobile-site-nav, .page-contents-navigation) {
185
+ --tree-current-item-background: color-mix(
186
+ in srgb,
187
+ var(--color-surface-emphasis-background) 64%,
188
+ var(--color-surface-soft-background)
189
+ );
190
+ }
191
+
192
+ @media (prefers-color-scheme: dark) {
193
+ :root[data-appearance='system']
194
+ :is(.tree-local-navigation, .mobile-site-nav, .page-contents-navigation) {
195
+ --tree-current-item-background: color-mix(
196
+ in srgb,
197
+ var(--color-surface-emphasis-background) 64%,
198
+ var(--color-surface-soft-background)
199
+ );
200
+ }
62
201
  }
63
202
 
64
203
  .page-contents-navigation {
@@ -78,14 +217,6 @@
78
217
  overscroll-behavior: contain;
79
218
  }
80
219
 
81
- .page-contents-navigation-inline {
82
- display: none;
83
- width: min(100%, var(--reader-text-width, var(--page-text-width, var(--text-width))));
84
- margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
85
- border-block: 1px solid var(--color-nav-separator);
86
- padding: 0.85rem 0;
87
- }
88
-
89
220
  .page-contents-navigation-label {
90
221
  margin: 0 0 0.65rem;
91
222
  color: var(--color-primary-text);
@@ -95,7 +226,7 @@
95
226
  line-height: 1.3;
96
227
  }
97
228
 
98
- @media (min-width: 701px) and (max-width: 1100px) {
229
+ @media (min-width: 961px) and (max-width: 1280px) {
99
230
  .site-page-layout-tree {
100
231
  --tree-layout-width: max(var(--page-width), 76rem);
101
232
  grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr);
@@ -104,16 +235,72 @@
104
235
  .page-contents-navigation-rail {
105
236
  display: none;
106
237
  }
238
+ }
107
239
 
108
- .page-contents-navigation-inline {
240
+ @media (min-width: 1281px) {
241
+ .site-page-layout-tree[data-page-contents-placement='contents-rail']
242
+ .tree-local-navigation .navigation-page-sections,
243
+ .site-page-layout-tree[data-page-contents-placement='contents-rail']
244
+ .tree-local-navigation .navigation-page-sections-disclosure {
245
+ display: none;
246
+ }
247
+ }
248
+
249
+ @media (max-width: 960px) {
250
+ .site-page-layout-tree {
109
251
  display: block;
252
+ width: 100%;
253
+ }
254
+
255
+ .site-page-layout-tree > .site-content {
256
+ width: min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));
257
+ }
258
+
259
+ .tree-local-navigation,
260
+ .page-contents-navigation {
261
+ display: none;
110
262
  }
111
263
  }
112
264
 
113
265
  .navigation-page-sections {
114
- margin: 0.15rem 0 0.55rem 0.3rem;
115
- border-left: 2px solid color-mix(in srgb, currentColor 38%, transparent);
116
- padding: 0.2rem 0 0.25rem 0.85rem;
266
+ margin: 0.1rem 0 0.45rem 0.25rem;
267
+ border-left: 1px solid color-mix(in srgb, currentColor 26%, transparent);
268
+ padding: 0.15rem 0 0.2rem 0.75rem;
269
+ }
270
+
271
+ .navigation-page-tree-sidebar
272
+ .navigation-page-sections-disclosure > .navigation-page-sections {
273
+ margin-inline-start: var(--tree-disclosure-offset);
274
+ }
275
+
276
+ .navigation-page-sections-disclosure > summary {
277
+ position: absolute;
278
+ top: 0;
279
+ left: 0;
280
+ display: grid;
281
+ place-items: center;
282
+ width: var(--tree-disclosure-offset);
283
+ height: 1.95rem;
284
+ border: 0;
285
+ border-radius: var(--corner-radius-small, 2px);
286
+ list-style: none;
287
+ cursor: pointer;
288
+ color: var(--color-secondary-text);
289
+ }
290
+
291
+ .navigation-page-sections-disclosure > summary::-webkit-details-marker {
292
+ display: none;
293
+ }
294
+
295
+ .navigation-page-sections-disclosure > summary:hover,
296
+ .navigation-page-sections-disclosure > summary:focus-visible {
297
+ background: color-mix(in srgb, currentColor 8%, transparent);
298
+ color: var(--color-primary-text);
299
+ }
300
+
301
+ .navigation-page-sections-disclosure[open]
302
+ > summary .navigation-page-chevron::before {
303
+ transform: rotate(90deg);
117
304
  }
118
305
 
119
306
  .navigation-page-tree,
@@ -127,67 +314,53 @@
127
314
  position: relative;
128
315
  }
129
316
 
317
+ .navigation-page-node[hidden] {
318
+ display: none !important;
319
+ }
320
+
130
321
  .navigation-page-tree-sidebar .navigation-page-link {
131
322
  display: block;
132
- padding: 0.45rem 2rem 0.45rem 0;
323
+ border-radius: var(--corner-radius-small, 2px);
324
+ padding: 0.375rem 0.3rem 0.375rem var(--tree-disclosure-offset);
133
325
  color: var(--color-secondary-text);
134
- font-size: 0.86rem;
135
- line-height: 1.35;
326
+ font-size: 0.84rem;
327
+ font-weight: 400;
328
+ line-height: 1.4;
136
329
  text-decoration: none;
137
330
  }
138
331
 
139
- .navigation-page-tree-sidebar > .navigation-page-node > .navigation-page-link {
332
+ .tree-local-navigation
333
+ > nav
334
+ > .navigation-page-tree-sidebar
335
+ > .navigation-page-node
336
+ > .navigation-page-link {
140
337
  color: var(--color-primary-text);
141
- font-size: 0.94rem;
142
- font-weight: 700;
338
+ font-size: 0.9rem;
339
+ font-weight: 650;
143
340
  }
144
341
 
145
342
  .navigation-page-tree-sidebar .navigation-page-link:hover,
146
- .navigation-page-tree-sidebar .navigation-page-link:focus-visible,
147
- .navigation-page-tree-sidebar .navigation-page-link[aria-current='page'] {
343
+ .navigation-page-tree-sidebar .navigation-page-link:focus-visible {
344
+ background: color-mix(in srgb, var(--color-surface-soft-background) 68%, transparent);
148
345
  color: var(--color-primary-text);
149
346
  text-decoration: underline;
150
347
  text-decoration-thickness: 1px;
151
348
  text-underline-offset: 0.28em;
152
349
  }
153
350
 
154
- .navigation-page-tree-sidebar .navigation-page-tree-sidebar {
155
- margin: 0.25rem 0 0.25rem 0.3rem;
156
- border-left: 1px solid color-mix(in srgb, currentColor 18%, transparent);
157
- padding-left: 0.85rem;
158
- }
159
-
160
- .navigation-page-branch:not(.navigation-page-disclosure) > summary {
161
- position: absolute;
162
- top: 0.25rem;
163
- right: 0;
164
- display: grid;
165
- place-items: center;
166
- width: 1.8rem;
167
- height: 1.8rem;
168
- border: 0;
169
- border-radius: var(--corner-radius-small, 2px);
170
- list-style: none;
171
- cursor: pointer;
172
- color: var(--color-secondary-text);
173
- }
174
-
175
- .navigation-page-branch:not(.navigation-page-disclosure) > summary::-webkit-details-marker {
176
- display: none;
177
- }
178
-
179
- .navigation-page-branch:not(.navigation-page-disclosure) > summary:hover,
180
- .navigation-page-branch:not(.navigation-page-disclosure) > summary:focus-visible {
181
- background: color-mix(in srgb, currentColor 8%, transparent);
351
+ .navigation-page-tree-sidebar .navigation-page-link[aria-current='page'] {
352
+ background: var(--tree-current-item-background);
182
353
  color: var(--color-primary-text);
354
+ font-weight: 650;
355
+ text-decoration: underline;
356
+ text-decoration-thickness: 1px;
357
+ text-underline-offset: 0.28em;
183
358
  }
184
359
 
185
- .navigation-page-branch:not(.navigation-page-disclosure) > summary > [aria-hidden='true']::before {
186
- content: "+";
187
- }
188
-
189
- .navigation-page-branch:not(.navigation-page-disclosure)[open] > summary > [aria-hidden='true']::before {
190
- content: "−";
360
+ .navigation-page-tree-sidebar .navigation-page-tree-sidebar {
361
+ margin: 0.15rem 0 0.2rem 0.25rem;
362
+ border-left: 1px solid color-mix(in srgb, currentColor 16%, transparent);
363
+ padding-left: 0.75rem;
191
364
  }
192
365
 
193
366
  .navigation-page-disclosure > .navigation-page-summary {
@@ -197,9 +370,10 @@
197
370
  width: 100%;
198
371
  border: 0;
199
372
  border-radius: var(--corner-radius-small, 2px);
200
- padding: 0.45rem 0;
201
- font-size: 0.86rem;
202
- line-height: 1.35;
373
+ padding: 0.375rem 0.3rem 0.375rem 0;
374
+ font-size: 0.84rem;
375
+ font-weight: 400;
376
+ line-height: 1.4;
203
377
  list-style: none;
204
378
  cursor: pointer;
205
379
  color: var(--color-secondary-text);
@@ -215,34 +389,91 @@
215
389
  position: relative;
216
390
  }
217
391
 
218
- .navigation-page-disclosure-sidebar {
392
+ .navigation-page-disclosure-sidebar.navigation-category-disclosure {
219
393
  display: grid;
220
394
  grid-template-columns: minmax(0, 1fr);
221
395
  }
222
396
 
223
- .navigation-page-disclosure-sidebar > .navigation-page-summary,
224
- .navigation-page-disclosure-sidebar > .navigation-page-open-link {
397
+ .navigation-page-disclosure-sidebar.navigation-category-disclosure
398
+ > .navigation-page-summary {
399
+ display: grid;
400
+ grid-template-columns: var(--tree-disclosure-icon-width) minmax(0, 1fr);
401
+ column-gap: var(--tree-disclosure-gap);
402
+ justify-content: normal;
403
+ }
404
+
405
+ .navigation-page-disclosure-sidebar.navigation-category-disclosure
406
+ > .navigation-page-summary > .navigation-page-summary-title {
407
+ grid-column: 2;
408
+ width: auto;
409
+ }
410
+
411
+ .navigation-page-disclosure-sidebar.navigation-category-disclosure
412
+ > .navigation-page-summary > .navigation-page-chevron {
225
413
  grid-column: 1;
226
414
  grid-row: 1;
415
+ display: grid;
416
+ place-items: center;
417
+ width: var(--tree-disclosure-icon-width);
418
+ height: 1.35em;
227
419
  }
228
420
 
229
- .navigation-page-disclosure-sidebar > .navigation-page-open-link {
230
- z-index: 1;
421
+ .navigation-page-node-page-disclosure {
422
+ display: grid;
423
+ grid-template-columns: var(--tree-disclosure-offset) minmax(0, 1fr);
424
+ }
425
+
426
+ .navigation-page-node-page-disclosure
427
+ > .navigation-page-disclosure
428
+ > .navigation-page-summary {
429
+ grid-column: 1;
430
+ grid-row: 1;
431
+ display: grid;
432
+ place-items: center;
433
+ width: 100%;
434
+ min-height: 1.95rem;
435
+ padding: 0;
231
436
  }
232
437
 
233
- .navigation-page-disclosure-sidebar > .navigation-page-branch-content {
438
+ .navigation-page-node-page-disclosure > .navigation-page-disclosure {
234
439
  grid-column: 1;
440
+ grid-row: 1;
441
+ }
442
+
443
+ .navigation-page-node-page-disclosure > .navigation-page-open-link {
444
+ grid-column: 2;
445
+ grid-row: 1;
446
+ }
447
+
448
+ .navigation-page-node-page-disclosure > .navigation-page-branch-content {
449
+ grid-column: 1 / -1;
235
450
  grid-row: 2;
236
451
  }
237
452
 
453
+ .navigation-page-node-page-disclosure
454
+ > .navigation-page-disclosure:not([open])
455
+ ~ .navigation-page-branch-content {
456
+ display: none;
457
+ }
458
+
238
459
  .navigation-page-disclosure > .navigation-page-summary::-webkit-details-marker {
239
460
  display: none;
240
461
  }
241
462
 
242
463
  .navigation-page-disclosure > .navigation-page-summary:hover,
243
- .navigation-page-disclosure > .navigation-page-summary:focus-visible,
464
+ .navigation-page-disclosure > .navigation-page-summary:focus-visible {
465
+ background: color-mix(in srgb, var(--color-surface-soft-background) 68%, transparent);
466
+ color: var(--color-primary-text);
467
+ }
468
+
244
469
  .navigation-page-disclosure[data-current-page='true'] > .navigation-page-summary {
470
+ background: var(--tree-current-item-background);
245
471
  color: var(--color-primary-text);
472
+ font-weight: 650;
473
+ }
474
+
475
+ .navigation-page-disclosure[data-current-page='true'] + .navigation-page-open-link {
476
+ background: var(--tree-current-item-background);
246
477
  }
247
478
 
248
479
  .navigation-page-disclosure > .navigation-page-summary:hover > :first-child,
@@ -253,39 +484,43 @@
253
484
  text-underline-offset: 0.28em;
254
485
  }
255
486
 
256
- .navigation-page-disclosure:not(.navigation-category-disclosure)[open]
257
- > .navigation-page-summary > .navigation-page-summary-title {
258
- opacity: 0;
259
- }
260
-
261
487
  .navigation-category-disclosure[data-current-branch='true'] > .navigation-page-summary {
262
488
  color: var(--color-primary-text);
489
+ font-weight: 600;
263
490
  }
264
491
 
265
492
  .navigation-page-open-link {
266
- position: absolute;
267
- top: 0;
268
- left: 0;
269
- display: none;
270
- width: calc(100% - 2rem);
271
- padding: 0.45rem 0;
493
+ display: block;
494
+ min-width: 0;
495
+ width: 100%;
496
+ border-radius: var(--corner-radius-small, 2px);
497
+ padding: 0.375rem 0.3rem 0.375rem 0;
272
498
  color: var(--color-secondary-text);
273
- font-size: 0.86rem;
274
- line-height: 1.35;
499
+ font-size: 0.84rem;
500
+ font-weight: 400;
501
+ line-height: 1.4;
275
502
  overflow: visible;
276
503
  overflow-wrap: anywhere;
277
504
  text-decoration: none;
278
505
  white-space: normal;
279
506
  }
280
507
 
281
- .navigation-page-disclosure[open] > .navigation-page-open-link {
282
- display: block;
508
+ .navigation-page-node-page-disclosure > .navigation-page-open-link {
509
+ width: 100%;
283
510
  }
284
511
 
285
512
  .navigation-page-open-link:hover,
286
- .navigation-page-open-link:focus-visible,
513
+ .navigation-page-open-link:focus-visible {
514
+ background: color-mix(in srgb, var(--color-surface-soft-background) 68%, transparent);
515
+ color: var(--color-primary-text);
516
+ text-decoration: underline;
517
+ text-decoration-thickness: 1px;
518
+ text-underline-offset: 0.28em;
519
+ }
520
+
287
521
  .navigation-page-open-link[aria-current='page'] {
288
522
  color: var(--color-primary-text);
523
+ font-weight: 650;
289
524
  text-decoration: underline;
290
525
  text-decoration-thickness: 1px;
291
526
  text-underline-offset: 0.28em;
@@ -303,35 +538,59 @@
303
538
  transform: rotate(90deg);
304
539
  }
305
540
 
306
- .navigation-page-tree-sidebar > .navigation-page-node > .navigation-page-disclosure > .navigation-page-summary {
541
+ .navigation-page-tree-sidebar .navigation-page-chevron::before {
542
+ width: 0.38rem;
543
+ height: 0.38rem;
544
+ border-right: 1.5px solid currentColor;
545
+ border-bottom: 1.5px solid currentColor;
546
+ content: '';
547
+ transform: rotate(-45deg);
548
+ }
549
+
550
+ .navigation-page-tree-sidebar
551
+ .navigation-page-disclosure[open]
552
+ > .navigation-page-summary .navigation-page-chevron::before,
553
+ .navigation-page-tree-sidebar
554
+ .navigation-page-sections-disclosure[open]
555
+ > summary .navigation-page-chevron::before {
556
+ transform: rotate(45deg);
557
+ }
558
+
559
+ .tree-local-navigation
560
+ > nav
561
+ > .navigation-page-tree-sidebar
562
+ > .navigation-page-node
563
+ > .navigation-page-disclosure
564
+ > .navigation-page-summary {
307
565
  color: var(--color-primary-text);
308
- font-size: 0.94rem;
309
- font-weight: 700;
566
+ font-size: 0.9rem;
567
+ font-weight: 650;
310
568
  }
311
569
 
312
- .navigation-page-tree-sidebar > .navigation-page-node > .navigation-page-disclosure > .navigation-page-open-link {
570
+ .tree-local-navigation
571
+ > nav
572
+ > .navigation-page-tree-sidebar
573
+ > .navigation-page-node
574
+ > .navigation-page-open-link {
313
575
  color: var(--color-primary-text);
314
- font-size: 0.94rem;
315
- font-weight: 700;
576
+ font-size: 0.9rem;
577
+ font-weight: 650;
316
578
  }
317
579
 
318
- .navigation-page-tree-sidebar .navigation-page-disclosure > .navigation-page-branch-content {
319
- margin: 0.1rem 0 0.25rem 0.3rem;
320
- border-left: 1px solid color-mix(in srgb, currentColor 18%, transparent);
321
- padding-left: 0.85rem;
580
+ .navigation-page-tree-sidebar .navigation-page-disclosure > .navigation-page-branch-content,
581
+ .navigation-page-tree-sidebar .navigation-page-node-page-disclosure > .navigation-page-branch-content {
582
+ margin: 0.1rem 0 0.2rem 0.25rem;
583
+ border-left: 1px solid color-mix(in srgb, currentColor 16%, transparent);
584
+ padding-left: 0.75rem;
322
585
  }
323
586
 
324
- .navigation-page-tree-sidebar .navigation-page-disclosure .navigation-page-tree-sidebar {
325
- margin: 0.25rem 0;
587
+ .navigation-page-tree-sidebar .navigation-page-disclosure .navigation-page-tree-sidebar,
588
+ .navigation-page-tree-sidebar .navigation-page-branch-content > .navigation-page-tree-sidebar {
589
+ margin: 0.15rem 0;
326
590
  border-left: 0;
327
591
  padding-left: 0;
328
592
  }
329
593
 
330
- .navigation-page-disclosure[data-current-branch='true']:not([data-current-page='true']):not([data-sections-open='true'])
331
- > .navigation-page-branch-content > .navigation-page-sections {
332
- display: none;
333
- }
334
-
335
594
  .page-contents-links li + li {
336
595
  margin-top: 0.45rem;
337
596
  }
@@ -360,6 +619,12 @@
360
619
  text-underline-offset: 0.25em;
361
620
  }
362
621
 
622
+ .page-contents-navigation-rail .page-contents-links a[aria-current='location'] {
623
+ border-radius: var(--corner-radius-small, 2px);
624
+ background: var(--tree-current-item-background);
625
+ box-shadow: 0 0 0 0.2rem var(--tree-current-item-background);
626
+ }
627
+
363
628
  .page-contents-links a[aria-current='location']::before {
364
629
  position: absolute;
365
630
  top: 0.15em;
@@ -371,6 +636,24 @@
371
636
  content: '';
372
637
  }
373
638
 
639
+ .navigation-page-tree-sidebar .navigation-page-sections .page-contents-links a {
640
+ margin-inline: -0.4rem 0.2rem;
641
+ border-radius: var(--corner-radius-small, 2px);
642
+ padding-inline: 0.4rem;
643
+ }
644
+
645
+ .navigation-page-tree-sidebar
646
+ .navigation-page-sections .page-contents-links a[aria-current='location'] {
647
+ background: var(--tree-current-item-background);
648
+ color: var(--color-primary-text);
649
+ text-decoration-thickness: 1.5px;
650
+ }
651
+
652
+ .navigation-page-tree-sidebar
653
+ .navigation-page-sections .page-contents-links a[aria-current='location']::before {
654
+ content: none;
655
+ }
656
+
374
657
  .site-breadcrumbs {
375
658
  min-height: calc(clamp(1rem, 2.5vw, 1.5rem) + 1.35rem);
376
659
  width: min(100%, var(--reader-text-width, var(--page-text-width, var(--text-width))));
@@ -435,3 +718,101 @@
435
718
  .site-content-has-breadcrumbs > .site-section:first-of-type {
436
719
  padding-top: clamp(1.15rem, 2.5vw, 1.75rem);
437
720
  }
721
+
722
+ .site-content-has-page-sequence > .site-section:last-of-type,
723
+ .site-content-has-edit-source > .site-section:last-of-type {
724
+ padding-bottom: var(--space-content-block-gap);
725
+ }
726
+
727
+ .edit-source-link {
728
+ width: min(100%, var(--reader-text-width, var(--page-text-width, var(--text-width))));
729
+ margin: 0 var(--layout-inline-end-margin) var(--space-content-block-gap) var(--layout-inline-start-margin);
730
+ border-top: 1px solid var(--color-nav-separator);
731
+ padding-top: 0.75rem;
732
+ color: var(--color-secondary-text);
733
+ font-size: 0.84rem;
734
+ }
735
+
736
+ .edit-source-link a {
737
+ display: inline-flex;
738
+ align-items: center;
739
+ gap: 0.45rem;
740
+ color: inherit;
741
+ text-decoration: none;
742
+ }
743
+
744
+ .edit-source-link a:hover,
745
+ .edit-source-link a:focus-visible {
746
+ color: var(--color-primary-text);
747
+ text-decoration: underline;
748
+ text-underline-offset: 0.25em;
749
+ }
750
+
751
+ .edit-source-link svg {
752
+ width: 0.95rem;
753
+ height: 0.95rem;
754
+ stroke-width: 1.75;
755
+ }
756
+
757
+ .site-content-has-edit-source:not(.site-content-has-page-sequence) > .edit-source-link {
758
+ margin-bottom: var(--space-final-section-bottom);
759
+ }
760
+
761
+ .page-sequence-navigation {
762
+ display: grid;
763
+ grid-template-columns: repeat(2, minmax(0, 1fr));
764
+ gap: 0.75rem;
765
+ width: min(100%, var(--reader-text-width, var(--page-text-width, var(--text-width))));
766
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
767
+ padding: 0 0 var(--space-final-section-bottom);
768
+ }
769
+
770
+ .page-sequence-link {
771
+ display: grid;
772
+ grid-template-columns: auto minmax(0, 1fr);
773
+ align-items: center;
774
+ gap: 0.65rem;
775
+ min-width: 0;
776
+ border: 1px solid var(--color-nav-separator);
777
+ border-radius: var(--corner-radius-medium);
778
+ padding: 0.8rem;
779
+ color: var(--color-primary-text);
780
+ text-decoration: none;
781
+ }
782
+
783
+ .page-sequence-link:hover,
784
+ .page-sequence-link:focus-visible {
785
+ border-color: var(--color-primary-text);
786
+ background: var(--color-surface-soft-background);
787
+ }
788
+
789
+ .page-sequence-link > svg {
790
+ width: 1rem;
791
+ height: 1rem;
792
+ stroke-width: 1.75;
793
+ }
794
+
795
+ .page-sequence-link > span {
796
+ display: grid;
797
+ min-width: 0;
798
+ gap: 0.15rem;
799
+ }
800
+
801
+ .page-sequence-next {
802
+ grid-template-columns: minmax(0, 1fr) auto;
803
+ text-align: right;
804
+ }
805
+
806
+ .page-sequence-direction {
807
+ color: var(--color-secondary-text);
808
+ font-size: 0.72rem;
809
+ font-weight: 650;
810
+ line-height: 1.3;
811
+ }
812
+
813
+ .page-sequence-title {
814
+ font-size: 0.92rem;
815
+ font-weight: 650;
816
+ line-height: 1.35;
817
+ overflow-wrap: anywhere;
818
+ }