@janga/norna 0.7.22 → 0.7.24

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