@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
@@ -252,24 +252,6 @@ ul {
252
252
  min-width: 0;
253
253
  }
254
254
 
255
- @media (min-width: 1101px) {
256
- @container (min-width: 55rem) {
257
- .section-note {
258
- float: right;
259
- clear: right;
260
- width: var(--layout-note-width);
261
- margin: 0 calc(0px - var(--layout-note-width) - var(--layout-note-gap)) 0.75rem var(--layout-note-gap);
262
- }
263
- }
264
-
265
- .site-page-layout-contents .section-note {
266
- float: none;
267
- clear: none;
268
- width: 100%;
269
- margin: var(--section-body-paragraph-spacing, 0.85em) 0 0;
270
- }
271
- }
272
-
273
255
  .section-markdown {
274
256
  width: var(--layout-reading-width);
275
257
  max-width: none;
@@ -280,33 +262,395 @@ ul {
280
262
  text-align: var(--section-body-align-desktop, left);
281
263
  }
282
264
 
283
- .section-markdown table {
284
- display: block;
285
- max-width: 100%;
286
- margin: var(--section-body-paragraph-spacing, 0.85em) 0;
287
- border-collapse: collapse;
288
- font-size: 0.92em;
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;
289
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
+ .norna-table-frame {
355
+ position: relative;
356
+ width: 100%;
357
+ margin-block: var(--section-body-paragraph-spacing, 0.85em);
358
+ margin-inline: 0;
359
+ color: inherit;
360
+ }
361
+
362
+ .section-markdown > .norna-table-frame {
363
+ --table-prose-width: 100%;
364
+ --table-end-width: calc((100cqi + var(--layout-reading-width)) / 2);
365
+ --table-canvas-width: 100cqi;
366
+ --table-canvas-inline-offset: calc((var(--layout-reading-width) - 100cqi) / 2);
367
+ width: var(--table-end-width);
368
+ }
369
+
370
+ .section-markdown > .norna-table-frame[data-table-layout='prose'] {
371
+ width: var(--table-prose-width);
372
+ }
373
+
374
+ .section-markdown > .norna-table-frame[data-table-layout='end'] {
375
+ width: var(--table-end-width);
376
+ }
377
+
378
+ .section-markdown > .norna-table-frame[data-table-layout='canvas'] {
379
+ width: var(--table-canvas-width);
380
+ margin-inline-start: var(--table-canvas-inline-offset);
381
+ }
382
+
383
+ .norna-table-scroll {
384
+ width: 100%;
385
+ max-width: 100%;
386
+ border-inline: 1px solid transparent;
290
387
  overflow-x: auto;
388
+ overflow-y: hidden;
291
389
  overscroll-behavior-inline: contain;
292
390
  scrollbar-gutter: stable;
293
391
  }
294
392
 
295
- .section-markdown :is(th, td) {
393
+ .norna-table-scroll:focus-visible {
394
+ outline: var(--focus-indicator-width) solid var(--color-focus-ring);
395
+ outline-offset: 2px;
396
+ }
397
+
398
+ .norna-table-navigation {
399
+ position: sticky;
400
+ top: var(--site-top-anchor-offset);
401
+ z-index: 5;
402
+ display: flex;
403
+ min-height: 2.75rem;
404
+ align-items: center;
405
+ justify-content: flex-end;
406
+ padding: 0;
407
+ background: var(--section-background-color, var(--color-page));
408
+ color: inherit;
409
+ pointer-events: none;
410
+ }
411
+
412
+ .norna-table-navigation[hidden] {
413
+ display: none;
414
+ }
415
+
416
+ .norna-table-navigation-buttons {
417
+ display: flex;
418
+ gap: 0.125rem;
419
+ background: transparent;
420
+ pointer-events: auto;
421
+ }
422
+
423
+ .norna-table-navigation button {
424
+ position: relative;
425
+ display: grid;
426
+ width: 2.75rem;
427
+ height: 2.75rem;
428
+ place-items: center;
429
+ border: 0;
430
+ border-radius: var(--corner-radius-small, 2px);
431
+ padding: 0;
432
+ background: transparent;
433
+ color: var(--section-secondary-text-color, var(--color-secondary-text));
434
+ cursor: pointer;
435
+ }
436
+
437
+ .norna-table-navigation button::before {
438
+ position: absolute;
439
+ inset: 0.3rem;
440
+ border: 1px solid color-mix(in srgb, var(--color-border) 72%, transparent);
441
+ border-radius: var(--corner-radius-small, 2px);
442
+ background: color-mix(
443
+ in srgb,
444
+ var(--color-surface-soft-background) 52%,
445
+ var(--section-background-color, var(--color-page))
446
+ );
447
+ content: '';
448
+ }
449
+
450
+ .norna-table-navigation button svg {
451
+ position: relative;
452
+ z-index: 1;
453
+ }
454
+
455
+ .norna-table-navigation button:hover:not(:disabled),
456
+ .norna-table-navigation button:active:not(:disabled) {
457
+ color: var(--color-surface-emphasis-text);
458
+ }
459
+
460
+ .norna-table-navigation button:hover:not(:disabled)::before,
461
+ .norna-table-navigation button:active:not(:disabled)::before {
462
+ border-color: var(--color-border);
463
+ background: var(--color-surface-emphasis-background);
464
+ }
465
+
466
+ .norna-table-navigation button:focus-visible {
467
+ outline: var(--focus-indicator-width) solid var(--color-focus-ring);
468
+ outline-offset: 2px;
469
+ box-shadow: 0 0 0 calc(var(--focus-indicator-width) * 2) var(--color-focus-ring-contrast);
470
+ }
471
+
472
+ .norna-table-navigation button:disabled {
473
+ cursor: not-allowed;
474
+ opacity: 0.42;
475
+ }
476
+
477
+ .norna-table-frame:dir(rtl) .norna-table-navigation button svg {
478
+ transform: scaleX(-1);
479
+ }
480
+
481
+ .norna-table-sticky-heading {
482
+ display: none;
483
+ position: sticky;
484
+ z-index: 4;
485
+ top: calc(var(--site-top-anchor-offset) + var(--table-navigation-height, 0px));
486
+ width: 100%;
487
+ height: var(--table-sticky-heading-height, 0px);
488
+ overflow: hidden;
489
+ background: var(--section-background-color, var(--color-page));
490
+ pointer-events: none;
491
+ }
492
+
493
+ .norna-table-frame[data-table-overflow='true'][data-table-sticky-heading='true']
494
+ > .norna-table-sticky-heading {
495
+ display: block;
496
+ }
497
+
498
+ .norna-table-frame[data-table-overflow='true'][data-table-sticky-heading='true']
499
+ > .norna-table-scroll {
500
+ margin-block-start: calc(0px - var(--table-sticky-heading-height, 0px));
501
+ }
502
+
503
+ .norna-table-sticky-heading-track {
504
+ position: absolute;
505
+ top: 0;
506
+ left: 0;
507
+ transform: translateX(0);
508
+ transform-origin: left top;
509
+ will-change: transform;
510
+ }
511
+
512
+ .norna-table-sticky-heading-cell {
513
+ position: absolute;
514
+ overflow: hidden;
515
+ border-bottom: 1px solid color-mix(in srgb, currentColor 48%, transparent);
516
+ background: var(--section-background-color, var(--color-page));
517
+ color: inherit;
518
+ }
519
+
520
+ .norna-table-frame::before,
521
+ .norna-table-frame::after {
522
+ position: absolute;
523
+ z-index: 3;
524
+ top: var(--table-navigation-height, 0px);
525
+ bottom: 0.75rem;
526
+ width: 2rem;
527
+ content: "";
528
+ opacity: 0;
529
+ pointer-events: none;
530
+ transition: opacity 120ms ease;
531
+ }
532
+
533
+ .norna-table-frame::before {
534
+ inset-inline-start: 0;
535
+ background: linear-gradient(
536
+ to right,
537
+ color-mix(in srgb, var(--section-background-color, var(--color-page)) 98%, transparent),
538
+ transparent
539
+ );
540
+ box-shadow: inset 0.5rem 0 0.7rem -0.65rem color-mix(in srgb, currentColor 62%, transparent);
541
+ }
542
+
543
+ .norna-table-frame::after {
544
+ inset-inline-end: 0;
545
+ background: linear-gradient(
546
+ to left,
547
+ color-mix(in srgb, var(--section-background-color, var(--color-page)) 98%, transparent),
548
+ transparent
549
+ );
550
+ box-shadow: inset -0.5rem 0 0.7rem -0.65rem color-mix(in srgb, currentColor 62%, transparent);
551
+ }
552
+
553
+ .norna-table-frame:dir(rtl)::before {
554
+ background: linear-gradient(
555
+ to left,
556
+ color-mix(in srgb, var(--section-background-color, var(--color-page)) 98%, transparent),
557
+ transparent
558
+ );
559
+ box-shadow: inset -0.5rem 0 0.7rem -0.65rem color-mix(in srgb, currentColor 62%, transparent);
560
+ }
561
+
562
+ .norna-table-frame:dir(rtl)::after {
563
+ background: linear-gradient(
564
+ to right,
565
+ color-mix(in srgb, var(--section-background-color, var(--color-page)) 98%, transparent),
566
+ transparent
567
+ );
568
+ box-shadow: inset 0.5rem 0 0.7rem -0.65rem color-mix(in srgb, currentColor 62%, transparent);
569
+ }
570
+
571
+ .norna-table-frame[data-table-at-end='true']::after {
572
+ opacity: 0;
573
+ }
574
+
575
+ .norna-table-frame[data-table-overflow='true'][data-table-at-end='false']::after,
576
+ .norna-table-frame[data-table-overflow='true'][data-table-at-start='false']::before {
577
+ opacity: 1;
578
+ }
579
+
580
+ .norna-table-frame table {
581
+ display: table;
582
+ width: auto;
583
+ max-width: none;
584
+ margin: 0;
585
+ border-collapse: collapse;
586
+ font-size: 0.92em;
587
+ line-height: 1.45;
588
+ }
589
+
590
+ .section-markdown
591
+ > .norna-table-frame[data-table-layout='canvas'][data-table-overflow='false'] table {
592
+ margin-inline-start: auto;
593
+ }
594
+
595
+ .norna-table-frame :is(th, td) {
296
596
  border-bottom: 1px solid color-mix(in srgb, currentColor 24%, transparent);
297
597
  padding: 0.65rem 0.75rem;
298
598
  text-align: left;
299
599
  vertical-align: top;
300
600
  }
301
601
 
302
- .section-markdown thead th {
602
+ .norna-table-frame thead th {
303
603
  border-bottom-color: color-mix(in srgb, currentColor 48%, transparent);
604
+ background: var(--section-background-color, var(--color-page));
605
+ }
606
+
607
+ .section-markdown > .norna-table-frame[data-table-overflow='false'] .norna-table-scroll {
608
+ overflow: visible;
304
609
  }
305
610
 
306
- :root[data-focus-reading='on'] :is(
307
- .site-nav-leading,
611
+ .section-markdown > .norna-table-frame[data-table-overflow='false'] thead th {
612
+ position: sticky;
613
+ top: var(--site-top-anchor-offset);
614
+ z-index: 2;
615
+ }
616
+
617
+ @media (min-width: 961px) {
618
+ .site-page-layout-tree .section-markdown > .norna-table-frame {
619
+ --table-end-width: 100cqi;
620
+ --table-canvas-width: var(--table-end-width);
621
+ --table-canvas-inline-offset: 0px;
622
+ }
623
+
624
+ :root[data-reader-preferences-ready='true'][data-focus-reading='on']
625
+ .site-page-layout-tree .section-markdown > .norna-table-frame {
626
+ --table-canvas-width: calc(100cqi + var(--tree-navigation-width) + var(--tree-layout-gap));
627
+ --table-canvas-inline-offset: calc(0px - var(--tree-navigation-width) - var(--tree-layout-gap));
628
+ }
629
+ }
630
+
631
+ @media (min-width: 1101px) {
632
+ :root[data-reader-preferences-ready='true'][data-focus-reading='on']
633
+ .site-page-layout-tree .section-markdown > .norna-table-frame {
634
+ --table-end-width: calc(100cqi + var(--contents-navigation-width) + var(--tree-layout-gap));
635
+ --table-canvas-width: calc(
636
+ 100cqi
637
+ + var(--tree-navigation-width)
638
+ + var(--contents-navigation-width)
639
+ + (var(--tree-layout-gap) * 2)
640
+ );
641
+ --table-canvas-inline-offset: calc(0px - var(--tree-navigation-width) - var(--tree-layout-gap));
642
+ }
643
+ }
644
+
645
+ @media (min-width: 1281px) {
646
+ .site-page-layout-tree:not(.site-page-layout-contents) .section-markdown > .norna-table-frame {
647
+ --table-end-width: calc(100cqi + var(--contents-navigation-width) + var(--tree-layout-gap));
648
+ --table-canvas-width: var(--table-end-width);
649
+ }
650
+ }
651
+
652
+ :root[data-reader-preferences-ready='true'][data-focus-reading='on'] :is(
308
653
  .site-nav,
309
- .mobile-nav-menu,
310
654
  .page-nav,
311
655
  .tree-local-navigation,
312
656
  .page-contents-navigation,
@@ -316,36 +660,33 @@ ul {
316
660
  display: none !important;
317
661
  }
318
662
 
319
- :root[data-focus-reading='on'] .site-nav-row {
320
- justify-content: flex-end;
321
- }
322
-
323
- @media (min-width: 701px) {
324
- :root[data-focus-reading='on'] .site-page-layout-tree {
663
+ @media (min-width: 961px) {
664
+ :root[data-reader-preferences-ready='true'][data-focus-reading='on'] .site-page-layout-tree {
325
665
  display: grid;
326
666
  grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr);
327
667
  gap: var(--tree-layout-gap);
328
668
  width: min(calc(100% - (var(--content-gutter) * 2)), var(--tree-layout-width));
329
669
  }
330
670
 
331
- :root[data-focus-reading='on'] .site-page-layout-tree > .site-content {
671
+ :root[data-reader-preferences-ready='true'][data-focus-reading='on'] .site-page-layout-tree > .site-content {
332
672
  grid-column: 2;
333
673
  width: 100%;
334
674
  }
335
675
 
336
- :root[data-focus-reading='on'] .site-page-layout-tree .site-section::before {
676
+ :root[data-reader-preferences-ready='true'][data-focus-reading='on'] .site-page-layout-tree .site-section::before {
337
677
  left: 0;
338
678
  right: calc(0px - var(--tree-layout-outer-margin));
339
679
  }
340
680
  }
341
681
 
342
682
  @media (min-width: 1101px) {
343
- :root[data-focus-reading='on'] .site-page-layout-tree {
683
+ :root[data-reader-preferences-ready='true'][data-focus-reading='on'] .site-page-layout-tree {
344
684
  grid-template-columns: var(--tree-navigation-width) minmax(0, 1fr) var(--contents-navigation-width);
345
685
  }
346
686
  }
347
687
 
348
- :root[data-focus-reading='on'] .site-content-has-breadcrumbs > .site-section:first-of-type {
688
+ :root[data-reader-preferences-ready='true'][data-focus-reading='on']
689
+ .site-content-has-breadcrumbs > .site-section:first-of-type {
349
690
  padding-top: var(--space-nav-to-first-section);
350
691
  }
351
692
 
@@ -363,6 +704,61 @@ ul {
363
704
  margin-bottom: 0;
364
705
  }
365
706
 
707
+ .section-markdown .norna-callout {
708
+ --callout-accent: var(--color-accent);
709
+ --callout-background: var(--color-surface-soft-background);
710
+ --callout-text: var(--color-surface-soft-text);
711
+ display: flow-root;
712
+ margin: 0 0 var(--section-body-paragraph-spacing, 1em);
713
+ border: 1px solid color-mix(in srgb, var(--callout-accent) 52%, transparent);
714
+ border-inline-start: 0.3rem solid var(--callout-accent);
715
+ border-radius: var(--corner-radius-medium, 6px);
716
+ padding: 0.85rem 1rem;
717
+ background: var(--callout-background);
718
+ color: var(--callout-text);
719
+ }
720
+
721
+ .section-markdown .norna-callout-important {
722
+ --callout-background: var(--color-surface-emphasis-background);
723
+ --callout-text: var(--color-surface-emphasis-text);
724
+ }
725
+
726
+ .section-markdown .norna-callout-tip {
727
+ --callout-accent: var(--color-success-accent);
728
+ --callout-background: var(--color-success-surface);
729
+ --callout-text: var(--color-success-text);
730
+ }
731
+
732
+ .section-markdown :is(.norna-callout-warning, .norna-callout-caution) {
733
+ --callout-accent: var(--color-warning-accent);
734
+ --callout-background: var(--color-warning-surface);
735
+ --callout-text: var(--color-warning-text);
736
+ }
737
+
738
+ .section-markdown .norna-callout-danger {
739
+ --callout-accent: var(--color-error-accent);
740
+ --callout-background: var(--color-error-surface);
741
+ --callout-text: var(--color-error-text);
742
+ }
743
+
744
+ .section-markdown .norna-callout-label {
745
+ margin: 0 0 0.35rem;
746
+ color: inherit;
747
+ font-family: var(--font-sans);
748
+ font-size: 0.78rem;
749
+ font-weight: 700;
750
+ letter-spacing: 0;
751
+ line-height: 1.35;
752
+ }
753
+
754
+ .section-markdown .norna-callout a {
755
+ color: inherit;
756
+ }
757
+
758
+ .section-markdown .norna-callout > :last-child {
759
+ margin-bottom: 0;
760
+ }
761
+
366
762
  .section-markdown pre.astro-code {
367
763
  margin: 0 0 var(--section-body-paragraph-spacing, 1em);
368
764
  border: 1px solid color-mix(in srgb, currentColor 18%, transparent);
@@ -380,11 +776,60 @@ ul {
380
776
  margin: 0 0 var(--section-body-paragraph-spacing, 1em);
381
777
  }
382
778
 
779
+ .section-markdown .norna-code-example {
780
+ margin: 0 0 var(--section-body-paragraph-spacing, 1em);
781
+ border: 1px solid color-mix(in srgb, var(--color-code-text) 18%, transparent);
782
+ border-radius: var(--corner-radius-medium, 6px);
783
+ overflow: visible;
784
+ background: var(--color-code-background);
785
+ color: var(--color-code-text);
786
+ }
787
+
788
+ .section-markdown .norna-code-title {
789
+ position: sticky;
790
+ top: var(--site-top-anchor-offset);
791
+ z-index: 2;
792
+ min-height: 3.25rem;
793
+ margin: 0;
794
+ padding: 0.85rem 3.85rem 0.75rem 0.9rem;
795
+ border-bottom: 1px solid color-mix(in srgb, var(--color-code-text) 22%, transparent);
796
+ border-radius: calc(var(--corner-radius-medium, 6px) - 1px) calc(var(--corner-radius-medium, 6px) - 1px) 0 0;
797
+ background: var(--color-code-background);
798
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
799
+ font-size: 0.82rem;
800
+ font-weight: 650;
801
+ line-height: 1.35;
802
+ overflow-wrap: anywhere;
803
+ }
804
+
805
+ .section-markdown .norna-code-example > pre.astro-code {
806
+ margin: 0;
807
+ border: 0;
808
+ border-radius: 0 0 calc(var(--corner-radius-medium, 6px) - 1px) calc(var(--corner-radius-medium, 6px) - 1px);
809
+ }
810
+
811
+ .section-markdown .norna-code-example.code-block > pre.astro-code {
812
+ padding-right: 0.9rem;
813
+ }
814
+
383
815
  .section-markdown .code-block > pre.astro-code {
384
816
  margin: 0;
385
817
  padding-right: 3.85rem;
386
818
  }
387
819
 
820
+ .section-markdown pre.astro-code.norna-code-has-highlighted-lines code {
821
+ display: block;
822
+ }
823
+
824
+ .section-markdown pre.astro-code .norna-code-line-highlighted {
825
+ display: inline-block;
826
+ width: calc(100% + 1.8rem);
827
+ margin-inline: -0.9rem;
828
+ padding-inline: calc(0.9rem - 3px) 0.9rem;
829
+ border-inline-start: 3px solid var(--color-code-text);
830
+ background: color-mix(in srgb, var(--color-code-text) 14%, var(--color-code-background));
831
+ }
832
+
388
833
  .code-block-copy {
389
834
  position: absolute;
390
835
  top: 0.5rem;
@@ -443,6 +888,10 @@ ul {
443
888
  margin-bottom: 0;
444
889
  }
445
890
 
891
+ .section-markdown > .norna-code-example:last-child {
892
+ margin-bottom: 0;
893
+ }
894
+
446
895
  .section-markdown blockquote > pre.astro-code:last-child {
447
896
  margin-bottom: 0;
448
897
  }
@@ -492,3 +941,53 @@ ul {
492
941
  .section-markdown li + li {
493
942
  margin-top: 0.35rem;
494
943
  }
944
+
945
+ .section-markdown [data-footnote-ref] {
946
+ color: inherit;
947
+ font-size: 0.72em;
948
+ font-weight: 700;
949
+ text-decoration-thickness: 0.08em;
950
+ text-underline-offset: 0.15em;
951
+ }
952
+
953
+ .section-markdown [data-footnotes] {
954
+ margin-top: calc(var(--section-body-paragraph-spacing, 1em) * 1.75);
955
+ border-top: 1px solid color-mix(in srgb, currentColor 24%, transparent);
956
+ padding-top: var(--section-body-paragraph-spacing, 1em);
957
+ font-size: 0.88em;
958
+ line-height: 1.5;
959
+ }
960
+
961
+ .section-markdown [data-footnotes] > .sr-only {
962
+ position: absolute;
963
+ width: 1px;
964
+ height: 1px;
965
+ margin: -1px;
966
+ padding: 0;
967
+ border: 0;
968
+ overflow: hidden;
969
+ clip: rect(0 0 0 0);
970
+ clip-path: inset(50%);
971
+ white-space: nowrap;
972
+ }
973
+
974
+ .section-markdown [data-footnotes] ol {
975
+ display: block;
976
+ margin: 0;
977
+ padding-inline-start: 1.5rem;
978
+ }
979
+
980
+ .section-markdown [data-footnotes] li {
981
+ padding-inline-start: 0.2rem;
982
+ scroll-margin-top: calc(var(--site-top-anchor-offset) + 1rem);
983
+ }
984
+
985
+ .section-markdown [data-footnotes] li:target {
986
+ background: color-mix(in srgb, currentColor 6%, transparent);
987
+ }
988
+
989
+ .section-markdown [data-footnote-backref] {
990
+ margin-inline-start: 0.15em;
991
+ color: inherit;
992
+ text-decoration: none;
993
+ }