@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,718 @@
1
+ /* Banners, footer, sections, prose, headings, and sidenotes. */
2
+
3
+ .site-banners {
4
+ position: relative;
5
+ z-index: 2;
6
+ display: grid;
7
+ gap: 0.75rem;
8
+ width: min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));
9
+ margin: 0 auto;
10
+ padding: 1rem 0 0;
11
+ }
12
+
13
+ .site-banner {
14
+ display: flex;
15
+ align-items: center;
16
+ width: 100%;
17
+ min-width: 0;
18
+ gap: 1rem;
19
+ border: 1px solid var(--color-warning-accent);
20
+ border-inline-start: 0.35rem solid var(--color-warning-accent);
21
+ padding: 0.8rem 0.9rem;
22
+ background: var(--color-warning-surface);
23
+ color: var(--color-warning-text);
24
+ }
25
+
26
+ .site-banner[hidden] {
27
+ display: none;
28
+ }
29
+
30
+ .site-banner-copy {
31
+ display: flex;
32
+ align-items: baseline;
33
+ flex-wrap: wrap;
34
+ gap: 0.65rem;
35
+ min-width: 0;
36
+ flex: 1 1 auto;
37
+ }
38
+
39
+ .site-banner-title,
40
+ .site-banner-text {
41
+ margin: 0;
42
+ }
43
+
44
+ .site-banner-title {
45
+ flex: 0 0 auto;
46
+ white-space: nowrap;
47
+ font-weight: 700;
48
+ }
49
+
50
+ .site-banner-text {
51
+ min-width: 0;
52
+ margin-top: 0.2rem;
53
+ overflow-wrap: anywhere;
54
+ }
55
+
56
+ .site-banner-dismiss {
57
+ flex: 0 0 auto;
58
+ width: 2rem;
59
+ height: 2rem;
60
+ border: 1px solid color-mix(in srgb, currentColor 35%, transparent);
61
+ padding: 0;
62
+ background: transparent;
63
+ color: currentColor;
64
+ cursor: pointer;
65
+ font-size: 1.25rem;
66
+ line-height: 1;
67
+ }
68
+
69
+ .site-banner-dismiss:hover,
70
+ .site-banner-dismiss:focus-visible {
71
+ background: color-mix(in srgb, currentColor 12%, transparent);
72
+ }
73
+
74
+ .site-footer {
75
+ position: relative;
76
+ isolation: isolate;
77
+ z-index: 2;
78
+ width: min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));
79
+ margin: 0 auto;
80
+ padding: 0 0 2.5rem;
81
+ background-color: var(--site-footer-background-color, var(--color-page));
82
+ color: var(--site-footer-text-color, var(--color-muted));
83
+ font-size: 0.75rem;
84
+ line-height: 1.5;
85
+ text-align: center;
86
+ }
87
+
88
+ .site-footer::before {
89
+ position: absolute;
90
+ z-index: -1;
91
+ inset: 0 calc(50% - 50vw);
92
+ background-color: var(--site-footer-background-color, var(--color-page));
93
+ content: "";
94
+ pointer-events: none;
95
+ }
96
+
97
+ .site-footer p {
98
+ margin: 0;
99
+ }
100
+
101
+ .site-footer span {
102
+ display: block;
103
+ }
104
+
105
+ .site-section {
106
+ --layout-heading-width: min(100%, var(--reader-text-width, var(--section-heading-width-desktop, 760px)));
107
+ --layout-reading-width: min(100%, var(--reader-text-width, var(--section-body-width-desktop, var(--text-width))));
108
+ --layout-media-width: min(100%, var(--image-layout-width));
109
+ --layout-note-width: var(--section-note-width, 12rem);
110
+ --layout-note-gap: var(--section-note-gap, 1.25rem);
111
+ position: relative;
112
+ isolation: isolate;
113
+ background-color: var(--section-background-color, transparent);
114
+ padding: var(--space-nav-to-first-section) 0 0;
115
+ }
116
+
117
+ .site-section::before {
118
+ position: absolute;
119
+ z-index: -1;
120
+ inset: 0 calc(50% - 50vw);
121
+ background-color: var(--section-background-color, transparent);
122
+ content: "";
123
+ pointer-events: none;
124
+ }
125
+
126
+ .site-page-layout-tree .site-section::before {
127
+ left: 0;
128
+ right: calc(0px - var(--tree-layout-outer-margin));
129
+ }
130
+
131
+ .site-section + .site-section {
132
+ margin-top: 0;
133
+ padding-top: var(--space-section-to-section);
134
+ }
135
+
136
+ .site-section-page-title-empty .section-header {
137
+ padding-bottom: 0;
138
+ }
139
+
140
+ .site-section-page-title-empty .section-header h1 {
141
+ padding-bottom: 0;
142
+ }
143
+
144
+ .site-section-page-title-empty + .site-section {
145
+ padding-top: var(--space-page-title-to-first-section);
146
+ }
147
+
148
+ .site-section:last-child {
149
+ padding-bottom: var(--space-final-section-bottom);
150
+ }
151
+
152
+ .section-card {
153
+ background: transparent;
154
+ color: var(--section-text-color, var(--color-text));
155
+ }
156
+
157
+ .section-header {
158
+ width: var(--layout-heading-width);
159
+ margin-block: 0;
160
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
161
+ padding: 0;
162
+ text-align: var(--section-heading-align-desktop, center);
163
+ }
164
+
165
+ .site-section-first-block-is-visual .section-header h1,
166
+ .site-section-first-block-is-visual .section-header h2 {
167
+ padding-bottom: var(--space-heading-to-block);
168
+ }
169
+
170
+ .section-header h1,
171
+ .section-header h2,
172
+ p,
173
+ ul {
174
+ margin-top: 0;
175
+ }
176
+
177
+ .section-header h1,
178
+ .section-header h2 {
179
+ margin-bottom: 0;
180
+ padding-bottom: var(--section-heading-spacing-after, 0.55em);
181
+ color: inherit;
182
+ font-size: var(--section-heading-font-size-desktop, clamp(1.35rem, 1.1rem + 0.9vw, 2rem));
183
+ font-weight: var(--section-heading-font-weight, 400);
184
+ letter-spacing: 0;
185
+ line-height: var(--section-heading-line-height, 1.04);
186
+ text-transform: uppercase;
187
+ overflow-wrap: anywhere;
188
+ }
189
+
190
+ .section-body {
191
+ display: flow-root;
192
+ container-type: inline-size;
193
+ width: 100%;
194
+ margin: 0 auto;
195
+ color: inherit;
196
+ font-family: var(--font-sans);
197
+ font-size: clamp(0.96rem, 0.94rem + 0.08vw, 1rem);
198
+ }
199
+
200
+ .section-note {
201
+ display: grid;
202
+ grid-template-columns: auto minmax(0, 1fr);
203
+ column-gap: 0.25rem;
204
+ width: 100%;
205
+ margin: var(--section-body-paragraph-spacing, 0.85em) 0 0;
206
+ border-inline-start: 2px solid color-mix(in srgb, currentColor 35%, transparent);
207
+ padding: 0 0 0 0.35rem;
208
+ color: var(--section-secondary-text-color, var(--color-secondary-text));
209
+ font-size: 0.88em;
210
+ line-height: 1.45;
211
+ scroll-margin-top: calc(var(--site-top-anchor-offset) + 1rem);
212
+ }
213
+
214
+ .section-note-number {
215
+ display: block;
216
+ margin: 0;
217
+ color: inherit;
218
+ font-size: 0.82em;
219
+ font-weight: 700;
220
+ line-height: 1;
221
+ text-decoration: none;
222
+ }
223
+
224
+ .section-note-ref {
225
+ display: inline-block;
226
+ margin-left: 0.03em;
227
+ font-size: 0.72em;
228
+ line-height: 0;
229
+ white-space: nowrap;
230
+ vertical-align: super;
231
+ }
232
+
233
+ .section-note-ref a {
234
+ color: inherit;
235
+ text-decoration: underline;
236
+ text-decoration-thickness: 0.08em;
237
+ text-underline-offset: 0.15em;
238
+ }
239
+
240
+ .section-note:target {
241
+ border-inline-start-color: currentColor;
242
+ background: color-mix(in srgb, currentColor 6%, transparent);
243
+ }
244
+
245
+ .section-note-ref:has(+ .section-note:hover) a,
246
+ .section-note-ref a:hover,
247
+ .section-note-ref a:focus-visible {
248
+ text-decoration-thickness: 0.16em;
249
+ }
250
+
251
+ .section-note-content {
252
+ min-width: 0;
253
+ }
254
+
255
+ .section-markdown {
256
+ width: var(--layout-reading-width);
257
+ max-width: none;
258
+ margin-block: 0;
259
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
260
+ font-size: var(--section-body-font-size-desktop, clamp(0.96rem, 0.94rem + 0.08vw, 1rem));
261
+ line-height: var(--section-body-line-height, 1.6);
262
+ text-align: var(--section-body-align-desktop, left);
263
+ }
264
+
265
+ .norna-search {
266
+ --pagefind-ui-scale: 0.88;
267
+ --pagefind-ui-primary: var(--color-link-text);
268
+ --pagefind-ui-text: var(--color-primary-text);
269
+ --pagefind-ui-background: var(--color-page);
270
+ --pagefind-ui-border: var(--color-nav-separator);
271
+ --pagefind-ui-tag: var(--color-surface-soft-background);
272
+ --pagefind-ui-border-width: 1px;
273
+ --pagefind-ui-border-radius: var(--corner-radius-medium);
274
+ --pagefind-ui-image-border-radius: var(--corner-radius-medium);
275
+ --pagefind-ui-font: var(--font-sans);
276
+ width: var(--layout-reading-width);
277
+ margin: var(--space-content-block-gap) var(--layout-inline-end-margin) 0 var(--layout-inline-start-margin);
278
+ }
279
+
280
+ .norna-search > [data-search-status] {
281
+ margin: 0;
282
+ color: var(--color-secondary-text);
283
+ }
284
+
285
+ .child-page-list {
286
+ width: var(--layout-reading-width);
287
+ margin-block: 0;
288
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
289
+ font-size: var(--section-body-font-size-desktop, clamp(0.96rem, 0.94rem + 0.08vw, 1rem));
290
+ line-height: var(--section-body-line-height, 1.6);
291
+ text-align: left;
292
+ }
293
+
294
+ .child-page-list ul {
295
+ display: grid;
296
+ gap: 0;
297
+ margin: 0;
298
+ padding: 0;
299
+ list-style: none;
300
+ }
301
+
302
+ .child-page-list li {
303
+ margin: 0;
304
+ border-top: 1px solid var(--color-nav-separator);
305
+ }
306
+
307
+ .child-page-list li:last-child {
308
+ border-bottom: 1px solid var(--color-nav-separator);
309
+ }
310
+
311
+ .child-page-list a {
312
+ display: grid;
313
+ grid-template-columns: minmax(0, 1fr) auto;
314
+ align-items: center;
315
+ gap: 1rem;
316
+ padding: 0.9rem 0.15rem;
317
+ color: inherit;
318
+ text-decoration: none;
319
+ }
320
+
321
+ .child-page-list a:hover,
322
+ .child-page-list a:focus-visible {
323
+ background: var(--color-surface-soft-background);
324
+ }
325
+
326
+ .child-page-list-copy {
327
+ display: grid;
328
+ min-width: 0;
329
+ gap: 0.2rem;
330
+ }
331
+
332
+ .child-page-list-copy strong {
333
+ font-size: 1em;
334
+ font-weight: 650;
335
+ line-height: 1.35;
336
+ }
337
+
338
+ .child-page-list-copy > span {
339
+ color: var(--section-secondary-text-color, var(--color-secondary-text));
340
+ font-size: 0.9em;
341
+ line-height: 1.45;
342
+ }
343
+
344
+ .child-page-list svg {
345
+ width: 1rem;
346
+ height: 1rem;
347
+ stroke-width: 1.75;
348
+ }
349
+
350
+ .section-body > .child-page-list:not(:last-child) {
351
+ margin-bottom: var(--space-content-block-gap);
352
+ }
353
+
354
+ .section-markdown table {
355
+ display: block;
356
+ max-width: 100%;
357
+ margin: var(--section-body-paragraph-spacing, 0.85em) 0;
358
+ border-collapse: collapse;
359
+ font-size: 0.92em;
360
+ line-height: 1.45;
361
+ overflow-x: auto;
362
+ overscroll-behavior-inline: contain;
363
+ scrollbar-gutter: stable;
364
+ }
365
+
366
+ .section-markdown :is(th, td) {
367
+ border-bottom: 1px solid color-mix(in srgb, currentColor 24%, transparent);
368
+ padding: 0.65rem 0.75rem;
369
+ text-align: left;
370
+ vertical-align: top;
371
+ }
372
+
373
+ .section-markdown thead th {
374
+ border-bottom-color: color-mix(in srgb, currentColor 48%, transparent);
375
+ }
376
+
377
+ :root[data-focus-reading='on'] :is(
378
+ .site-nav-leading,
379
+ .site-nav,
380
+ .mobile-nav-menu,
381
+ .page-nav,
382
+ .tree-local-navigation,
383
+ .page-contents-navigation,
384
+ .site-breadcrumbs,
385
+ .site-footer
386
+ ) {
387
+ display: none !important;
388
+ }
389
+
390
+ :root[data-focus-reading='on'] .site-nav-row {
391
+ justify-content: flex-end;
392
+ }
393
+
394
+ @media (min-width: 701px) {
395
+ :root[data-focus-reading='on'] .site-page-layout-tree {
396
+ display: grid;
397
+ grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr);
398
+ gap: var(--tree-layout-gap);
399
+ width: min(calc(100% - (var(--content-gutter) * 2)), var(--tree-layout-width));
400
+ }
401
+
402
+ :root[data-focus-reading='on'] .site-page-layout-tree > .site-content {
403
+ grid-column: 2;
404
+ width: 100%;
405
+ }
406
+
407
+ :root[data-focus-reading='on'] .site-page-layout-tree .site-section::before {
408
+ left: 0;
409
+ right: calc(0px - var(--tree-layout-outer-margin));
410
+ }
411
+ }
412
+
413
+ @media (min-width: 1101px) {
414
+ :root[data-focus-reading='on'] .site-page-layout-tree {
415
+ grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr) var(--contents-navigation-width);
416
+ }
417
+ }
418
+
419
+ :root[data-focus-reading='on'] .site-content-has-breadcrumbs > .site-section:first-of-type {
420
+ padding-top: var(--space-nav-to-first-section);
421
+ }
422
+
423
+ .section-markdown p {
424
+ margin: 0 0 var(--section-body-paragraph-spacing, 1em);
425
+ }
426
+
427
+ .section-markdown blockquote {
428
+ margin: 0 0 var(--section-body-paragraph-spacing, 1em);
429
+ border-left: 1px solid color-mix(in srgb, currentColor 34%, transparent);
430
+ padding-left: 1rem;
431
+ }
432
+
433
+ .section-markdown blockquote > :last-child {
434
+ margin-bottom: 0;
435
+ }
436
+
437
+ .section-markdown .norna-callout {
438
+ --callout-accent: var(--color-accent);
439
+ --callout-background: var(--color-surface-soft-background);
440
+ --callout-text: var(--color-surface-soft-text);
441
+ display: flow-root;
442
+ margin: 0 0 var(--section-body-paragraph-spacing, 1em);
443
+ border: 1px solid color-mix(in srgb, var(--callout-accent) 52%, transparent);
444
+ border-inline-start: 0.3rem solid var(--callout-accent);
445
+ border-radius: var(--corner-radius-medium, 6px);
446
+ padding: 0.85rem 1rem;
447
+ background: var(--callout-background);
448
+ color: var(--callout-text);
449
+ }
450
+
451
+ .section-markdown .norna-callout-important {
452
+ --callout-background: var(--color-surface-emphasis-background);
453
+ --callout-text: var(--color-surface-emphasis-text);
454
+ }
455
+
456
+ .section-markdown .norna-callout-tip {
457
+ --callout-accent: var(--color-success-accent);
458
+ --callout-background: var(--color-success-surface);
459
+ --callout-text: var(--color-success-text);
460
+ }
461
+
462
+ .section-markdown :is(.norna-callout-warning, .norna-callout-caution) {
463
+ --callout-accent: var(--color-warning-accent);
464
+ --callout-background: var(--color-warning-surface);
465
+ --callout-text: var(--color-warning-text);
466
+ }
467
+
468
+ .section-markdown .norna-callout-danger {
469
+ --callout-accent: var(--color-error-accent);
470
+ --callout-background: var(--color-error-surface);
471
+ --callout-text: var(--color-error-text);
472
+ }
473
+
474
+ .section-markdown .norna-callout-label {
475
+ margin: 0 0 0.35rem;
476
+ color: inherit;
477
+ font-family: var(--font-sans);
478
+ font-size: 0.78rem;
479
+ font-weight: 700;
480
+ letter-spacing: 0;
481
+ line-height: 1.35;
482
+ }
483
+
484
+ .section-markdown .norna-callout a {
485
+ color: inherit;
486
+ }
487
+
488
+ .section-markdown .norna-callout > :last-child {
489
+ margin-bottom: 0;
490
+ }
491
+
492
+ .section-markdown pre.astro-code {
493
+ margin: 0 0 var(--section-body-paragraph-spacing, 1em);
494
+ border: 1px solid color-mix(in srgb, currentColor 18%, transparent);
495
+ border-radius: var(--corner-radius-medium, 6px);
496
+ padding: 0.78rem 0.9rem;
497
+ background: var(--color-code-background) !important;
498
+ color: var(--color-code-text);
499
+ font-size: 0.92em;
500
+ line-height: 1.45;
501
+ text-align: left;
502
+ }
503
+
504
+ .section-markdown .code-block {
505
+ position: relative;
506
+ margin: 0 0 var(--section-body-paragraph-spacing, 1em);
507
+ }
508
+
509
+ .section-markdown .norna-code-example {
510
+ margin: 0 0 var(--section-body-paragraph-spacing, 1em);
511
+ border: 1px solid color-mix(in srgb, var(--color-code-text) 18%, transparent);
512
+ border-radius: var(--corner-radius-medium, 6px);
513
+ overflow: hidden;
514
+ background: var(--color-code-background);
515
+ color: var(--color-code-text);
516
+ }
517
+
518
+ .section-markdown .norna-code-title {
519
+ min-height: 3.25rem;
520
+ margin: 0;
521
+ padding: 0.85rem 3.85rem 0.75rem 0.9rem;
522
+ border-bottom: 1px solid color-mix(in srgb, var(--color-code-text) 22%, transparent);
523
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
524
+ font-size: 0.82rem;
525
+ font-weight: 650;
526
+ line-height: 1.35;
527
+ overflow-wrap: anywhere;
528
+ }
529
+
530
+ .section-markdown .norna-code-example > pre.astro-code {
531
+ margin: 0;
532
+ border: 0;
533
+ border-radius: 0;
534
+ }
535
+
536
+ .section-markdown .norna-code-example.code-block > pre.astro-code {
537
+ padding-right: 0.9rem;
538
+ }
539
+
540
+ .section-markdown .code-block > pre.astro-code {
541
+ margin: 0;
542
+ padding-right: 3.85rem;
543
+ }
544
+
545
+ .section-markdown pre.astro-code.norna-code-has-highlighted-lines code {
546
+ display: block;
547
+ }
548
+
549
+ .section-markdown pre.astro-code .norna-code-line-highlighted {
550
+ display: inline-block;
551
+ width: calc(100% + 1.8rem);
552
+ margin-inline: -0.9rem;
553
+ padding-inline: calc(0.9rem - 3px) 0.9rem;
554
+ border-inline-start: 3px solid var(--color-code-text);
555
+ background: color-mix(in srgb, var(--color-code-text) 14%, var(--color-code-background));
556
+ }
557
+
558
+ .code-block-copy {
559
+ position: absolute;
560
+ top: 0.5rem;
561
+ right: 0.5rem;
562
+ z-index: 1;
563
+ display: grid;
564
+ width: 2.25rem;
565
+ height: 2.25rem;
566
+ place-items: center;
567
+ padding: 0;
568
+ border: 1px solid color-mix(in srgb, var(--color-code-text) 35%, transparent);
569
+ border-radius: var(--corner-radius-small, 2px);
570
+ background: color-mix(in srgb, var(--color-code-background) 78%, var(--color-code-text));
571
+ color: var(--color-code-text);
572
+ cursor: pointer;
573
+ transition: background-color 0.15s ease, border-color 0.15s ease;
574
+ }
575
+
576
+ .code-block-copy:hover,
577
+ .code-block-copy:active,
578
+ .code-block-copy[data-copy-state] {
579
+ border-color: color-mix(in srgb, var(--color-code-text) 65%, transparent);
580
+ background: color-mix(in srgb, var(--color-code-background) 62%, var(--color-code-text));
581
+ }
582
+
583
+ .code-block-copy svg {
584
+ width: 1.125rem;
585
+ height: 1.125rem;
586
+ fill: none;
587
+ stroke: currentColor;
588
+ }
589
+
590
+ .code-block-copy [hidden] {
591
+ display: none;
592
+ }
593
+
594
+ .section-markdown pre.astro-code code {
595
+ font: inherit;
596
+ }
597
+
598
+ .section-markdown :not(pre) > code {
599
+ overflow-wrap: anywhere;
600
+ word-break: break-word;
601
+ }
602
+
603
+ .section-markdown > :last-child,
604
+ .image-meta :last-child {
605
+ margin-bottom: 0;
606
+ }
607
+
608
+ .section-markdown > pre.astro-code:last-child {
609
+ margin-bottom: 0;
610
+ }
611
+
612
+ .section-markdown > .code-block:last-child {
613
+ margin-bottom: 0;
614
+ }
615
+
616
+ .section-markdown > .norna-code-example:last-child {
617
+ margin-bottom: 0;
618
+ }
619
+
620
+ .section-markdown blockquote > pre.astro-code:last-child {
621
+ margin-bottom: 0;
622
+ }
623
+
624
+ .section-markdown blockquote > .code-block:last-child {
625
+ margin-bottom: 0;
626
+ }
627
+
628
+ .section-markdown h3 {
629
+ margin:
630
+ var(--section-markdown-h3-spacing-before, 1.5em)
631
+ 0
632
+ var(--section-markdown-h3-spacing-after, 0.5em);
633
+ border-top: 1px solid var(--color-soft);
634
+ padding-top: 0.55em;
635
+ font-family: var(--font-sans);
636
+ font-size: var(--section-markdown-h3-font-size-desktop, 0.82rem);
637
+ font-weight: var(--section-markdown-h3-font-weight, 700);
638
+ letter-spacing: 0;
639
+ line-height: var(--section-markdown-h3-line-height, 1.35);
640
+ text-align: var(--section-markdown-h3-align-desktop, left);
641
+ text-transform: uppercase;
642
+ }
643
+
644
+ .section-markdown h4 {
645
+ margin:
646
+ var(--section-markdown-h4-spacing-before, 1.1em)
647
+ 0
648
+ var(--section-markdown-h4-spacing-after, 0.4em);
649
+ color: inherit;
650
+ font-size: var(--section-markdown-h4-font-size-desktop, clamp(0.96rem, 0.94rem + 0.08vw, 1rem));
651
+ font-weight: var(--section-markdown-h4-font-weight, 400);
652
+ letter-spacing: 0;
653
+ line-height: var(--section-markdown-h4-line-height, 1.5);
654
+ text-align: var(--section-markdown-h4-align-desktop, left);
655
+ }
656
+
657
+ .section-markdown ul,
658
+ .section-markdown ol {
659
+ display: inline-block;
660
+ margin-right: auto;
661
+ margin-left: auto;
662
+ padding-left: 1.2rem;
663
+ text-align: left;
664
+ }
665
+
666
+ .section-markdown li + li {
667
+ margin-top: 0.35rem;
668
+ }
669
+
670
+ .section-markdown [data-footnote-ref] {
671
+ color: inherit;
672
+ font-size: 0.72em;
673
+ font-weight: 700;
674
+ text-decoration-thickness: 0.08em;
675
+ text-underline-offset: 0.15em;
676
+ }
677
+
678
+ .section-markdown [data-footnotes] {
679
+ margin-top: calc(var(--section-body-paragraph-spacing, 1em) * 1.75);
680
+ border-top: 1px solid color-mix(in srgb, currentColor 24%, transparent);
681
+ padding-top: var(--section-body-paragraph-spacing, 1em);
682
+ font-size: 0.88em;
683
+ line-height: 1.5;
684
+ }
685
+
686
+ .section-markdown [data-footnotes] > .sr-only {
687
+ position: absolute;
688
+ width: 1px;
689
+ height: 1px;
690
+ margin: -1px;
691
+ padding: 0;
692
+ border: 0;
693
+ overflow: hidden;
694
+ clip: rect(0 0 0 0);
695
+ clip-path: inset(50%);
696
+ white-space: nowrap;
697
+ }
698
+
699
+ .section-markdown [data-footnotes] ol {
700
+ display: block;
701
+ margin: 0;
702
+ padding-inline-start: 1.5rem;
703
+ }
704
+
705
+ .section-markdown [data-footnotes] li {
706
+ padding-inline-start: 0.2rem;
707
+ scroll-margin-top: calc(var(--site-top-anchor-offset) + 1rem);
708
+ }
709
+
710
+ .section-markdown [data-footnotes] li:target {
711
+ background: color-mix(in srgb, currentColor 6%, transparent);
712
+ }
713
+
714
+ .section-markdown [data-footnote-backref] {
715
+ margin-inline-start: 0.15em;
716
+ color: inherit;
717
+ text-decoration: none;
718
+ }