@janga/norna 0.7.8 → 0.7.10

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 (234) hide show
  1. package/README.md +1 -1
  2. package/docs/README.md +18 -11
  3. package/docs/configuration.md +9 -54
  4. package/docs/content.md +6 -7
  5. package/docs/design/norna-diagram-design.md +158 -0
  6. package/docs/getting-started.md +18 -16
  7. package/docs/routes.md +7 -6
  8. package/docs/site-structure.md +4 -2
  9. package/docs/sitewide-content.md +74 -0
  10. package/docs/theme.md +61 -128
  11. package/docs/typography.md +45 -33
  12. package/examples/001-dog-shelter-single-page/README.md +9 -0
  13. package/examples/001-dog-shelter-single-page/site/config.mjs +27 -0
  14. package/examples/001-dog-shelter-single-page/site/content.md +38 -0
  15. package/examples/001-dog-shelter-single-page/site/images/what-we-do/dog-house.svg +25 -0
  16. package/examples/001-dog-shelter-single-page/site/images/you-can-help/heart.svg +13 -0
  17. package/examples/001-dog-shelter-single-page/site/public/favicon.svg +10 -0
  18. package/examples/001-dog-shelter-single-page/site/public/robots.txt +2 -0
  19. package/examples/001-dog-shelter-single-page/site/sitewide-content.md +6 -0
  20. package/examples/001-dog-shelter-single-page/site/theme.md +25 -0
  21. package/examples/002-dog-shelter-multi-page/README.md +9 -0
  22. package/examples/002-dog-shelter-multi-page/site/config.mjs +27 -0
  23. package/examples/002-dog-shelter-multi-page/site/content.md +12 -0
  24. package/examples/002-dog-shelter-multi-page/site/public/favicon.svg +10 -0
  25. package/examples/002-dog-shelter-multi-page/site/public/robots.txt +2 -0
  26. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +19 -0
  27. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +19 -0
  28. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/route-content.md +30 -0
  29. package/examples/002-dog-shelter-multi-page/site/routes/020-adopt/route-content.md +12 -0
  30. package/examples/002-dog-shelter-multi-page/site/sitewide-content.md +6 -0
  31. package/examples/002-dog-shelter-multi-page/site/theme.md +25 -0
  32. package/examples/dog-gallery/.astro/collections/site.schema.json +776 -0
  33. package/examples/dog-gallery/.astro/collections/theme.schema.json +672 -0
  34. package/examples/dog-gallery/.astro/content-assets.mjs +4 -0
  35. package/examples/dog-gallery/.astro/content-modules.mjs +1 -0
  36. package/examples/dog-gallery/.astro/content.d.ts +175 -0
  37. package/examples/dog-gallery/.astro/data-store.json +1 -0
  38. package/examples/dog-gallery/.astro/dev-local.json +8 -0
  39. package/examples/dog-gallery/.astro/dev.json +13 -0
  40. package/examples/dog-gallery/.astro/dev.log +95 -0
  41. package/examples/dog-gallery/.astro/settings.json +5 -0
  42. package/examples/dog-gallery/.astro/types.d.ts +2 -0
  43. package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +1 -0
  44. package/examples/dog-gallery/dist/_astro/SitePage.DicGh_5N.css +1 -0
  45. package/examples/dog-gallery/dist/dog-care/index.html +15 -0
  46. package/examples/dog-gallery/dist/dog-shelter-logo.svg +14 -0
  47. package/examples/dog-gallery/dist/favicon.svg +7 -0
  48. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
  49. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
  50. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
  51. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
  52. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
  53. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
  54. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
  55. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
  56. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
  57. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
  58. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
  59. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
  60. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
  61. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
  62. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
  63. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
  64. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
  65. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
  66. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
  67. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
  68. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
  69. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
  70. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
  71. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
  72. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
  73. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
  74. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
  75. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
  76. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
  77. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
  78. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
  79. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
  80. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
  81. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
  82. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
  83. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
  84. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
  85. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
  86. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
  87. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
  88. package/examples/dog-gallery/dist/index.html +45 -0
  89. package/examples/dog-gallery/dist/robots.txt +2 -0
  90. package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +7 -7
  91. package/examples/dog-gallery/site/.norna/generated-images.json +8 -8
  92. package/examples/dog-gallery/site/config.mjs +0 -20
  93. package/examples/dog-gallery/site/content.md +4 -5
  94. package/examples/dog-gallery/site/public/logo.svg +14 -0
  95. package/examples/dog-gallery/site/sitewide-content.md +16 -0
  96. package/examples/dog-gallery/site/theme.md +13 -24
  97. package/examples/presentation/README.md +15 -0
  98. package/examples/presentation/site/.norna/generated-images.json +66 -0
  99. package/examples/presentation/site/config.mjs +29 -0
  100. package/examples/presentation/site/content.md +67 -0
  101. package/examples/presentation/site/public/robots.txt +2 -0
  102. package/examples/presentation/site/routes/010-presets/route-content.md +63 -0
  103. package/examples/presentation/site/routes/010-presets/theme.md +4 -0
  104. package/examples/presentation/site/routes/020-media/images/cards/card-carousel.svg +11 -0
  105. package/examples/presentation/site/routes/020-media/images/cards/card-stack.svg +9 -0
  106. package/examples/presentation/site/routes/020-media/images/cards/card-surfaces.svg +8 -0
  107. package/examples/presentation/site/routes/020-media/images/carousel/carousel-one.svg +8 -0
  108. package/examples/presentation/site/routes/020-media/images/carousel/carousel-three.svg +13 -0
  109. package/examples/presentation/site/routes/020-media/images/carousel/carousel-two.svg +8 -0
  110. package/examples/presentation/site/routes/020-media/images/stack/stack-one.svg +8 -0
  111. package/examples/presentation/site/routes/020-media/images/stack/stack-two.svg +9 -0
  112. package/examples/presentation/site/routes/020-media/route-content.md +77 -0
  113. package/examples/presentation/site/routes/020-media/theme.md +4 -0
  114. package/examples/presentation/site/routes/030-surfaces/route-content.md +44 -0
  115. package/examples/presentation/site/routes/030-surfaces/theme.md +7 -0
  116. package/examples/presentation/site/sitewide-content.md +6 -0
  117. package/examples/presentation/site/theme.md +43 -0
  118. package/examples/typography-presets/.astro/collections/routeTheme.schema.json +746 -0
  119. package/examples/typography-presets/.astro/collections/site.schema.json +59 -0
  120. package/examples/typography-presets/.astro/collections/sitewide.schema.json +114 -0
  121. package/examples/typography-presets/.astro/collections/theme.schema.json +770 -0
  122. package/examples/typography-presets/.astro/content-assets.mjs +4 -0
  123. package/examples/typography-presets/.astro/content-modules.mjs +1 -0
  124. package/examples/typography-presets/.astro/content.d.ts +183 -0
  125. package/examples/typography-presets/.astro/data-store.json +1 -0
  126. package/examples/typography-presets/.astro/dev-local.json +8 -0
  127. package/examples/typography-presets/.astro/dev.json +15 -0
  128. package/examples/typography-presets/.astro/dev.log +45 -0
  129. package/examples/typography-presets/.astro/settings.json +5 -0
  130. package/examples/typography-presets/.astro/types.d.ts +2 -0
  131. package/examples/typography-presets/node_modules/.vite/deps/_metadata.json +80 -0
  132. package/examples/typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  133. package/examples/typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  134. package/examples/typography-presets/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  135. package/examples/typography-presets/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  136. package/examples/typography-presets/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  137. package/examples/typography-presets/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  138. package/examples/typography-presets/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  139. package/examples/typography-presets/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  140. package/examples/typography-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  141. package/examples/typography-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  142. package/examples/typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  143. package/examples/typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  144. package/examples/typography-presets/node_modules/.vite/deps/embla-carousel.js +1389 -0
  145. package/examples/typography-presets/node_modules/.vite/deps/embla-carousel.js.map +1 -0
  146. package/examples/typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  147. package/examples/typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  148. package/examples/typography-presets/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  149. package/examples/typography-presets/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  150. package/examples/typography-presets/node_modules/.vite/deps/package.json +3 -0
  151. package/examples/typography-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  152. package/examples/typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  153. package/examples/typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  154. package/examples/typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  155. package/examples/typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  156. package/examples/typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  157. package/examples/typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  158. package/examples/typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  159. package/examples/typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  160. package/examples/typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  161. package/examples/typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  162. package/examples/typography-presets/site/.norna/generated-images.json +290 -0
  163. package/examples/typography-presets/site/config.mjs +29 -0
  164. package/examples/typography-presets/site/content.md +16 -0
  165. package/examples/typography-presets/site/public/robots.txt +2 -0
  166. package/examples/typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/puppy-portrait.jpg +0 -0
  167. package/examples/typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/shepherd-portrait.jpg +0 -0
  168. package/examples/typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/white-puppy.jpg +0 -0
  169. package/examples/typography-presets/site/routes/010-quiet-gallery/route-content.md +34 -0
  170. package/examples/typography-presets/site/routes/010-quiet-gallery/theme.md +4 -0
  171. package/examples/typography-presets/site/routes/020-compact-gallery/images/compact-gallery/black-schnauzer.jpg +0 -0
  172. package/examples/typography-presets/site/routes/020-compact-gallery/images/compact-gallery/retriever-portrait.jpg +0 -0
  173. package/examples/typography-presets/site/routes/020-compact-gallery/images/compact-gallery/schnauzer-portrait.jpg +0 -0
  174. package/examples/typography-presets/site/routes/020-compact-gallery/route-content.md +33 -0
  175. package/examples/typography-presets/site/routes/020-compact-gallery/theme.md +4 -0
  176. package/examples/typography-presets/site/routes/030-text-forward/images/text-forward/boxer-portrait.jpg +0 -0
  177. package/examples/typography-presets/site/routes/030-text-forward/images/text-forward/grass-puppy.jpg +0 -0
  178. package/examples/typography-presets/site/routes/030-text-forward/images/text-forward/grey-street-dog.jpg +0 -0
  179. package/examples/typography-presets/site/routes/030-text-forward/route-content.md +34 -0
  180. package/examples/typography-presets/site/routes/030-text-forward/theme.md +4 -0
  181. package/examples/typography-presets/site/routes/040-statement/images/statement/black-pedigree.jpg +0 -0
  182. package/examples/typography-presets/site/routes/040-statement/images/statement/sheepdog-grass.jpg +0 -0
  183. package/examples/typography-presets/site/routes/040-statement/images/statement/sheepdog-wide.jpg +0 -0
  184. package/examples/typography-presets/site/routes/040-statement/route-content.md +34 -0
  185. package/examples/typography-presets/site/routes/040-statement/theme.md +4 -0
  186. package/examples/typography-presets/site/sitewide-content.md +14 -0
  187. package/examples/typography-presets/site/theme.md +43 -0
  188. package/fixtures/basic/site/config.mjs +0 -13
  189. package/fixtures/basic/site/sitewide-content.md +12 -0
  190. package/fixtures/basic/site/theme.md +2 -2
  191. package/fixtures/content-model-v2/site/content.md +2 -5
  192. package/fixtures/content-model-v2/site/theme.md +1 -3
  193. package/package.json +3 -2
  194. package/scripts/check-config.mjs +22 -1
  195. package/scripts/lib/frontmatter-yaml.mjs +28 -0
  196. package/scripts/lib/logo-assets.mjs +35 -0
  197. package/scripts/lib/norna-markdown-blocks.mjs +166 -0
  198. package/scripts/lib/presentation.mjs +104 -46
  199. package/scripts/lib/project-config.mjs +67 -105
  200. package/scripts/lib/site-content.mjs +26 -42
  201. package/scripts/lib/site-paths.mjs +2 -0
  202. package/scripts/lib/sitewide-config.mjs +34 -0
  203. package/scripts/lib/theme-config.mjs +72 -6
  204. package/scripts/lib/typography.mjs +20 -26
  205. package/scripts/show-typography.mjs +40 -147
  206. package/scripts/sync-content-sections.mjs +19 -14
  207. package/scripts/test-content-check.mjs +76 -14
  208. package/scripts/test-content-model-v2.mjs +154 -0
  209. package/scripts/test-engine-commands.mjs +3 -1
  210. package/scripts/test-package-check.mjs +78 -19
  211. package/scripts/test-temporary-visibility.mjs +19 -2
  212. package/src/components/CardList.astro +5 -2
  213. package/src/components/GalleryGrid.astro +37 -16
  214. package/src/components/SiteBanners.astro +100 -0
  215. package/src/components/SiteNavigation.astro +48 -31
  216. package/src/components/SitePage.astro +55 -13
  217. package/src/components/SiteSection.astro +194 -36
  218. package/src/content.config.ts +78 -48
  219. package/src/layouts/BaseLayout.astro +64 -14
  220. package/src/lib/routeThemes.ts +61 -0
  221. package/src/lib/sectionContent.ts +236 -44
  222. package/src/lib/sitePublicAssets.ts +1 -0
  223. package/src/styles/global.css +282 -93
  224. package/starters/basic/.github/workflows/deploy.yml +1 -1
  225. package/starters/basic/README.md +7 -6
  226. package/starters/basic/site/config.mjs +0 -13
  227. package/starters/basic/site/content.md +1 -1
  228. package/starters/basic/site/sitewide-content.md +14 -0
  229. package/starters/basic/site/theme.md +13 -24
  230. package/starters/project/.github/workflows/deploy.yml +1 -1
  231. package/starters/project/README.md +10 -8
  232. package/starters/project/site/config.mjs +0 -13
  233. package/starters/project/site/sitewide-content.md +14 -0
  234. package/starters/project/site/theme.md +3 -11
@@ -0,0 +1,63 @@
1
+ ---
2
+ title: Presets
3
+ description: Compare Norna's built-in typography presets.
4
+ navigation:
5
+ label: Presets
6
+ ---
7
+
8
+ ## Quiet Gallery {#quiet-gallery}
9
+
10
+ This route uses the `quiet-gallery` preset. It keeps headings and body text
11
+ restrained so images or other visual material can carry more of the page.
12
+
13
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a
14
+ ante venenatis dapibus posuere velit aliquet. This is useful for portfolios,
15
+ image-led presentations and pages where captions matter more than long prose.
16
+
17
+ ### Typical use
18
+
19
+ Choose this preset when the page should feel calm and the visual material should
20
+ remain the primary signal.
21
+
22
+ ## Compact Gallery {#compact-gallery}
23
+
24
+ This section uses `compact-gallery`. It keeps the same broad model but fits more
25
+ short sections and image-led content into a smaller vertical rhythm.
26
+
27
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lacinia bibendum
28
+ nulla sed consectetur. This is useful when visitors need to scan many compact
29
+ items without losing the overall structure of the page.
30
+
31
+ ### Typical use
32
+
33
+ Choose this preset for a dense overview, catalogue or small collection of
34
+ related items.
35
+
36
+ ## Text Forward {#text-forward}
37
+
38
+ This section uses `text-forward`. It gives explanatory writing more presence
39
+ while retaining the same Norna section structure.
40
+
41
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere consectetur
42
+ est at lobortis. Cras mattis consectetur purus sit amet fermentum. This is
43
+ useful for guides, project explanations and documentation with only occasional
44
+ images.
45
+
46
+ ### Typical use
47
+
48
+ Choose this preset when the reader should spend more time with the text than
49
+ with a gallery.
50
+
51
+ ## Statement {#statement}
52
+
53
+ This section uses `statement`. It gives short, declarative content a stronger
54
+ visual voice.
55
+
56
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id elit non mi
57
+ porta gravida at eget metus. Use it sparingly when a section needs emphasis,
58
+ contrast or a more direct editorial tone.
59
+
60
+ ### Typical use
61
+
62
+ Choose this preset for an introduction, a short point of view or a deliberately
63
+ strong transition between quieter sections.
@@ -0,0 +1,4 @@
1
+ ---
2
+ typography:
3
+ preset: quiet-gallery
4
+ ---
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 700" role="img" aria-labelledby="title desc">
2
+ <title id="title">Carousel card</title>
3
+ <desc id="desc">A framed panel with a central image and navigation marks.</desc>
4
+ <rect width="1200" height="700" fill="#d9dfda"/>
5
+ <rect x="210" y="130" width="780" height="440" rx="18" fill="#f7f8f7"/>
6
+ <circle cx="600" cy="320" r="135" fill="#38645a"/>
7
+ <path d="M300 570h600" stroke="#17201d" stroke-width="10" opacity=".35"/>
8
+ <circle cx="545" cy="570" r="10" fill="#17201d"/>
9
+ <circle cx="600" cy="570" r="10" fill="#17201d" opacity=".35"/>
10
+ <circle cx="655" cy="570" r="10" fill="#17201d" opacity=".35"/>
11
+ </svg>
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 700" role="img" aria-labelledby="title desc">
2
+ <title id="title">Image stack card</title>
3
+ <desc id="desc">Three offset paper rectangles represent an image stack.</desc>
4
+ <rect width="1200" height="700" fill="#f0ebe1"/>
5
+ <rect x="270" y="170" width="660" height="360" fill="#d8d0c4" transform="rotate(-7 600 350)"/>
6
+ <rect x="270" y="170" width="660" height="360" fill="#685a43" transform="rotate(6 600 350)"/>
7
+ <rect x="270" y="170" width="660" height="360" fill="#f8f5ee"/>
8
+ <circle cx="600" cy="350" r="92" fill="#685a43"/>
9
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 700" role="img" aria-labelledby="title desc">
2
+ <title id="title">Section surfaces card</title>
3
+ <desc id="desc">Two horizontal surfaces show a restrained change of section background.</desc>
4
+ <rect width="1200" height="700" fill="#f8f5ee"/>
5
+ <rect x="170" y="145" width="860" height="170" fill="#f8f5ee" stroke="#272522" stroke-opacity=".25" stroke-width="5"/>
6
+ <rect x="170" y="385" width="860" height="170" fill="#ebe5d9"/>
7
+ <path d="M300 230h600M300 470h600" stroke="#685a43" stroke-width="18" opacity=".8"/>
8
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 700" role="img" aria-labelledby="title desc">
2
+ <title id="title">Carousel frame one</title>
3
+ <desc id="desc">A green panel with a diagonal line.</desc>
4
+ <rect width="1200" height="700" fill="#d9dfda"/>
5
+ <path d="M120 560 1080 140" stroke="#38645a" stroke-width="46"/>
6
+ <circle cx="260" cy="190" r="70" fill="#17201d"/>
7
+ <circle cx="940" cy="510" r="70" fill="#f7f8f7"/>
8
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 700" role="img" aria-labelledby="title desc">
2
+ <title id="title">Carousel frame three</title>
3
+ <desc id="desc">A red panel with a compact grid.</desc>
4
+ <rect width="1200" height="700" fill="#7d302b"/>
5
+ <g fill="#f8f5ee">
6
+ <rect x="270" y="170" width="180" height="150"/>
7
+ <rect x="510" y="170" width="180" height="150" opacity=".72"/>
8
+ <rect x="750" y="170" width="180" height="150" opacity=".48"/>
9
+ <rect x="270" y="380" width="180" height="150" opacity=".48"/>
10
+ <rect x="510" y="380" width="180" height="150" opacity=".72"/>
11
+ <rect x="750" y="380" width="180" height="150"/>
12
+ </g>
13
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 700" role="img" aria-labelledby="title desc">
2
+ <title id="title">Carousel frame two</title>
3
+ <desc id="desc">A blue-green panel with two overlapping circles.</desc>
4
+ <rect width="1200" height="700" fill="#17201d"/>
5
+ <circle cx="485" cy="350" r="210" fill="#38645a"/>
6
+ <circle cx="715" cy="350" r="210" fill="#d9dfda" opacity=".88"/>
7
+ <path d="M370 350h460" stroke="#f7f8f7" stroke-width="12" opacity=".65"/>
8
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 700" role="img" aria-labelledby="title desc">
2
+ <title id="title">Single visual idea</title>
3
+ <desc id="desc">A warm panel with a large circle and a small accent line.</desc>
4
+ <rect width="1200" height="700" fill="#f0ebe1"/>
5
+ <circle cx="600" cy="330" r="190" fill="#685a43"/>
6
+ <rect x="260" y="555" width="680" height="12" rx="6" fill="#272522" opacity=".55"/>
7
+ <rect x="420" y="590" width="360" height="8" rx="4" fill="#272522" opacity=".25"/>
8
+ </svg>
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 700" role="img" aria-labelledby="title desc">
2
+ <title id="title">Related visual detail</title>
3
+ <desc id="desc">A dark panel with three aligned cream blocks.</desc>
4
+ <rect width="1200" height="700" fill="#272522"/>
5
+ <rect x="170" y="170" width="250" height="360" fill="#f8f5ee"/>
6
+ <rect x="475" y="170" width="250" height="360" fill="#d8d0c4"/>
7
+ <rect x="780" y="170" width="250" height="360" fill="#685a43"/>
8
+ <rect x="170" y="570" width="860" height="10" fill="#f8f5ee" opacity=".55"/>
9
+ </svg>
@@ -0,0 +1,77 @@
1
+ ---
2
+ title: Media blocks
3
+ description: Compare Norna's managed image stacks, carousels and card lists.
4
+ navigation:
5
+ label: Media blocks
6
+ ---
7
+
8
+ ## Image stack {#stack}
9
+
10
+ An image stack places one or more managed images in the normal Markdown flow.
11
+ Each source file belongs in the section's image folder, and Norna creates the
12
+ responsive output used by the browser.
13
+
14
+ ````
15
+ ```norna-image-stack
16
+ - image: stack-one.svg
17
+ alt: A pale panel with a single large circle.
18
+ caption: One image can introduce a visual idea.
19
+ - image: stack-two.svg
20
+ alt: A dark panel with three aligned blocks.
21
+ caption: A stack can contain several related images.
22
+ ```
23
+ ````
24
+
25
+ ```norna-image-stack
26
+ - image: stack-one.svg
27
+ alt: A pale panel with a single large circle.
28
+ caption: One image can introduce a visual idea.
29
+ - image: stack-two.svg
30
+ alt: A dark panel with three aligned blocks.
31
+ caption: A stack can contain several related images.
32
+ ```
33
+
34
+ ## Image carousel {#carousel}
35
+
36
+ A carousel keeps a related group together while showing one image at a time.
37
+ The controls, keyboard interaction and current position are provided by Norna.
38
+
39
+ ```norna-image-carousel
40
+ - image: carousel-one.svg
41
+ alt: A green panel with a diagonal line.
42
+ caption: First frame: a broad direction.
43
+ - image: carousel-two.svg
44
+ alt: A blue panel with two overlapping circles.
45
+ caption: Second frame: a closer relationship.
46
+ - image: carousel-three.svg
47
+ alt: A red panel with a compact grid.
48
+ caption: Third frame: a denser detail.
49
+ ```
50
+
51
+ ## Card list {#cards}
52
+
53
+ Cards are useful when several short items need the same visual treatment. The
54
+ block controls the layout and size without requiring a component for each card.
55
+
56
+ ```norna-card-list
57
+ layout: image-top
58
+ flow: grid
59
+ size: m
60
+ width: normal
61
+
62
+ - title: Image stack
63
+ text: A simple vertical sequence of managed images.
64
+ image: card-stack.svg
65
+ badge-text: Established
66
+ - title: Carousel
67
+ text: A focused sequence with controls and captions.
68
+ image: card-carousel.svg
69
+ badge-text: Established
70
+ - title: Section surfaces
71
+ text: A bounded way to create rhythm between sections.
72
+ image: card-surfaces.svg
73
+ badge-text: New
74
+ ```
75
+
76
+ The examples above are still ordinary Markdown blocks. Their presentation is
77
+ opinionated, so the same source remains predictable on smaller screens.
@@ -0,0 +1,4 @@
1
+ ---
2
+ typography:
3
+ preset: compact-gallery
4
+ ---
@@ -0,0 +1,44 @@
1
+ ---
2
+ title: Surfaces
3
+ description: See how palette defaults and section surfaces work together.
4
+ navigation:
5
+ label: Surfaces
6
+ ---
7
+
8
+ ## Palette options {#palette-options}
9
+
10
+ Norna currently provides a small set of named palettes. The theme chooses one
11
+ for the whole site:
12
+
13
+ ```yaml
14
+ presentation:
15
+ palette: dark
16
+ ```
17
+
18
+ The available choices are `dark`, `light` and `paper`. A palette defines the
19
+ page, navigation, frame and section colours together, so these parts stay in
20
+ balance.
21
+
22
+ ## Emphasis surface {#emphasis-surface}
23
+
24
+ The route theme uses a palette and a surface sequence when a visual pause or
25
+ change of rhythm helps the reader. This is not a free-form colour override:
26
+
27
+ ```yaml
28
+ presentation:
29
+ sectionSurfaces:
30
+ mode: cycle
31
+ sequence: [base, soft, emphasis]
32
+ ```
33
+
34
+ The theme can cycle through the selected surfaces automatically. Individual
35
+ sections do not select their own colours.
36
+
37
+ ## A practical rule {#practical-rule}
38
+
39
+ Use the site palette for the overall tone. Use soft and emphasis surfaces for a
40
+ small number of meaningful transitions, not to make every section look
41
+ unrelated.
42
+
43
+ Typography presets and media blocks can vary the content inside that system;
44
+ surfaces provide the route-level rhythm around it.
@@ -0,0 +1,7 @@
1
+ ---
2
+ presentation:
3
+ palette: light
4
+ sectionSurfaces:
5
+ mode: cycle
6
+ sequence: [base, soft, emphasis]
7
+ ---
@@ -0,0 +1,6 @@
1
+ ---
2
+ navigation:
3
+ brand: Visual Model
4
+ footer:
5
+ copyrightMessage: Norna visual model example.
6
+ ---
@@ -0,0 +1,43 @@
1
+ ---
2
+ layout:
3
+ density: normal
4
+ pageWidth: 1240px
5
+ gutter:
6
+ desktop: clamp(1.25rem, 4vw, 3rem)
7
+ mobile: 1rem
8
+ spacing:
9
+ firstSectionTop:
10
+ desktop: clamp(1.5rem, 3vw, 2.5rem)
11
+ mobile: 1rem
12
+ sectionGap:
13
+ desktop: clamp(2rem, 4vw, 3.5rem)
14
+ mobile: 2rem
15
+ finalSectionBottom:
16
+ desktop: clamp(2rem, 4vw, 3.5rem)
17
+ mobile: 2rem
18
+ headingToBlock:
19
+ desktop: 0.75em
20
+ mobile: 0.7em
21
+ blockGap:
22
+ desktop: 1.5em
23
+ mobile: 1.25em
24
+ imageGap:
25
+ desktop: clamp(1.25rem, 3vw, 2.25rem)
26
+ mobile: 1.5rem
27
+ gallery:
28
+ width: 960px
29
+ maxAvailableWidthPercent:
30
+ desktop: 100
31
+ mobile: 100
32
+ maxAvailableHeightPercent:
33
+ desktop: 72
34
+ mobile: 68
35
+ typography:
36
+ fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
37
+ preset: text-forward
38
+ rhythm: normal
39
+ presentation:
40
+ palette: paper # Alternatives: dark, light
41
+ sectionSurfaces:
42
+ mode: cycle
43
+ ---