@janga/norna 0.7.9 → 0.7.11

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 (287) hide show
  1. package/README.md +4 -2
  2. package/bin/norna-cli.mjs +3 -0
  3. package/docs/README.md +16 -12
  4. package/docs/commands.md +6 -0
  5. package/docs/configuration.md +10 -54
  6. package/docs/content.md +20 -21
  7. package/docs/design/norna-diagram-design.md +2 -0
  8. package/docs/design/site-examples-structure.md +35 -24
  9. package/docs/engine-development.md +13 -7
  10. package/docs/getting-started.md +56 -19
  11. package/docs/routes.md +8 -6
  12. package/docs/site-structure.md +11 -6
  13. package/docs/sitewide-content.md +74 -0
  14. package/docs/theme.md +125 -140
  15. package/docs/typography.md +72 -45
  16. package/examples/README.md +41 -0
  17. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +59 -0
  18. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +138 -0
  19. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +755 -0
  20. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-modules.mjs +1 -0
  21. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/content.d.ts +8 -0
  22. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -0
  23. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev-local.json +2 -2
  24. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev.json +2 -2
  25. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +53 -0
  26. package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +5 -0
  27. package/examples/complete-sites/dog-shelter-multi-page/README.md +9 -0
  28. package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/_metadata.json +13 -7
  29. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +18 -0
  30. package/examples/complete-sites/dog-shelter-multi-page/site/config.mjs +30 -0
  31. package/examples/complete-sites/dog-shelter-multi-page/site/content.md +12 -0
  32. package/examples/complete-sites/dog-shelter-multi-page/site/public/favicon.svg +10 -0
  33. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +19 -0
  34. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +19 -0
  35. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/route-content.md +30 -0
  36. package/examples/complete-sites/dog-shelter-multi-page/site/routes/020-adopt/route-content.md +12 -0
  37. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +6 -0
  38. package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +25 -0
  39. package/examples/complete-sites/dog-shelter-single-page/README.md +9 -0
  40. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +18 -0
  41. package/examples/complete-sites/dog-shelter-single-page/site/config.mjs +30 -0
  42. package/examples/complete-sites/dog-shelter-single-page/site/content.md +38 -0
  43. package/examples/complete-sites/dog-shelter-single-page/site/images/what-we-do/dog-house.svg +25 -0
  44. package/examples/complete-sites/dog-shelter-single-page/site/images/you-can-help/heart.svg +13 -0
  45. package/examples/complete-sites/dog-shelter-single-page/site/public/favicon.svg +10 -0
  46. package/examples/complete-sites/dog-shelter-single-page/site/public/robots.txt +2 -0
  47. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +6 -0
  48. package/examples/complete-sites/dog-shelter-single-page/site/theme.md +25 -0
  49. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +59 -0
  50. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +138 -0
  51. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +755 -0
  52. package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +1 -0
  53. package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +183 -0
  54. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -0
  55. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +11 -0
  56. package/examples/feature-demos/media-and-surfaces/.astro/settings.json +5 -0
  57. package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +2 -0
  58. package/examples/feature-demos/media-and-surfaces/README.md +15 -0
  59. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +74 -0
  60. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
  61. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  62. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  63. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  64. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  65. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  66. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  67. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  68. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  69. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  70. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
  71. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  72. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
  73. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  74. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
  75. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  76. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
  77. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  78. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
  79. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  80. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
  81. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  82. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
  83. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  84. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
  85. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  86. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +66 -0
  87. package/examples/feature-demos/media-and-surfaces/site/config.mjs +30 -0
  88. package/examples/feature-demos/media-and-surfaces/site/content.md +64 -0
  89. package/examples/feature-demos/media-and-surfaces/site/public/robots.txt +2 -0
  90. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-carousel.svg +11 -0
  91. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-stack.svg +9 -0
  92. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/cards/card-surfaces.svg +8 -0
  93. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-one.svg +8 -0
  94. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-three.svg +13 -0
  95. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/carousel/carousel-two.svg +8 -0
  96. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/stack/stack-one.svg +8 -0
  97. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/images/stack/stack-two.svg +9 -0
  98. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/route-content.md +85 -0
  99. package/examples/feature-demos/media-and-surfaces/site/routes/010-media/theme.md +3 -0
  100. package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/route-content.md +44 -0
  101. package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/theme.md +8 -0
  102. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.md +6 -0
  103. package/examples/feature-demos/media-and-surfaces/site/theme.md +3 -0
  104. package/examples/{typography-presets/.astro/collections/theme.schema.json → feature-demos/theme-presets/.astro/collections/routeTheme.schema.json} +143 -65
  105. package/examples/feature-demos/theme-presets/.astro/collections/site.schema.json +59 -0
  106. package/examples/feature-demos/theme-presets/.astro/collections/sitewide.schema.json +138 -0
  107. package/examples/feature-demos/theme-presets/.astro/collections/theme.schema.json +755 -0
  108. package/examples/feature-demos/theme-presets/.astro/content-assets.mjs +4 -0
  109. package/examples/feature-demos/theme-presets/.astro/content-modules.mjs +1 -0
  110. package/examples/feature-demos/theme-presets/.astro/content.d.ts +183 -0
  111. package/examples/feature-demos/theme-presets/.astro/data-store.json +1 -0
  112. package/examples/feature-demos/theme-presets/.astro/dev-local.json +8 -0
  113. package/examples/feature-demos/theme-presets/.astro/dev.json +15 -0
  114. package/examples/feature-demos/theme-presets/.astro/dev.log +127 -0
  115. package/examples/feature-demos/theme-presets/.astro/types.d.ts +2 -0
  116. package/examples/feature-demos/theme-presets/README.md +14 -0
  117. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js +1389 -0
  118. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js.map +1 -0
  119. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/package.json +3 -0
  120. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  121. package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +290 -0
  122. package/examples/{typography-presets → feature-demos/theme-presets}/site/config.mjs +4 -16
  123. package/examples/feature-demos/theme-presets/site/content.md +17 -0
  124. package/examples/feature-demos/theme-presets/site/routes/010-portfolio/route-content.md +34 -0
  125. package/examples/feature-demos/theme-presets/site/routes/010-portfolio/theme.md +3 -0
  126. package/examples/feature-demos/theme-presets/site/routes/020-documentation/route-content.md +33 -0
  127. package/examples/feature-demos/theme-presets/site/routes/020-documentation/theme.md +3 -0
  128. package/examples/feature-demos/theme-presets/site/routes/030-project/route-content.md +34 -0
  129. package/examples/feature-demos/theme-presets/site/routes/030-project/theme.md +3 -0
  130. package/examples/feature-demos/theme-presets/site/routes/040-statement/route-content.md +34 -0
  131. package/examples/feature-demos/theme-presets/site/routes/040-statement/theme.md +3 -0
  132. package/examples/feature-demos/theme-presets/site/sitewide-content.md +14 -0
  133. package/examples/feature-demos/theme-presets/site/theme.md +3 -0
  134. package/fixtures/basic/site/config.mjs +0 -13
  135. package/fixtures/basic/site/sitewide-content.md +12 -0
  136. package/fixtures/basic/site/theme.md +2 -2
  137. package/fixtures/content-model-v2/site/content.md +2 -5
  138. package/fixtures/content-model-v2/site/theme.md +1 -3
  139. package/package.json +9 -4
  140. package/scripts/build-pages.mjs +71 -0
  141. package/scripts/check-config.mjs +23 -1
  142. package/scripts/export-theme-preset.mjs +31 -0
  143. package/scripts/init-site.mjs +1 -0
  144. package/scripts/lib/example-sites.mjs +34 -0
  145. package/scripts/lib/frontmatter-yaml.mjs +28 -0
  146. package/scripts/lib/logo-assets.mjs +35 -0
  147. package/scripts/lib/norna-markdown-blocks.mjs +166 -0
  148. package/scripts/lib/presentation.mjs +106 -47
  149. package/scripts/lib/project-config.mjs +68 -105
  150. package/scripts/lib/site-content.mjs +26 -118
  151. package/scripts/lib/site-paths.mjs +2 -0
  152. package/scripts/lib/sitewide-config.mjs +34 -0
  153. package/scripts/lib/theme-config.mjs +75 -8
  154. package/scripts/lib/theme-presets.mjs +209 -0
  155. package/scripts/lib/typography.mjs +20 -26
  156. package/scripts/show-typography.mjs +43 -149
  157. package/scripts/sync-content-sections.mjs +19 -17
  158. package/scripts/test-content-check.mjs +59 -27
  159. package/scripts/test-content-model-v2.mjs +154 -0
  160. package/scripts/test-engine-commands.mjs +4 -1
  161. package/scripts/test-examples.mjs +15 -0
  162. package/scripts/test-navigation.mjs +73 -45
  163. package/scripts/test-package-check.mjs +66 -24
  164. package/scripts/test-temporary-visibility.mjs +19 -2
  165. package/scripts/test-theme-presets.mjs +151 -0
  166. package/src/components/CardList.astro +5 -2
  167. package/src/components/GalleryGrid.astro +37 -16
  168. package/src/components/SiteBanners.astro +100 -0
  169. package/src/components/SiteNavigation.astro +48 -31
  170. package/src/components/SitePage.astro +55 -13
  171. package/src/components/SiteSection.astro +193 -35
  172. package/src/content.config.ts +80 -48
  173. package/src/layouts/BaseLayout.astro +64 -14
  174. package/src/lib/routeThemes.ts +61 -0
  175. package/src/lib/sectionContent.ts +235 -51
  176. package/src/lib/sitePublicAssets.ts +1 -0
  177. package/src/styles/global.css +284 -93
  178. package/starters/basic/.github/workflows/deploy.yml +1 -1
  179. package/starters/basic/README.md +7 -6
  180. package/starters/basic/package.json +1 -0
  181. package/starters/basic/site/config.mjs +0 -13
  182. package/starters/basic/site/content.md +1 -1
  183. package/starters/basic/site/sitewide-content.md +14 -0
  184. package/starters/basic/site/theme.md +13 -24
  185. package/starters/project/.github/workflows/deploy.yml +1 -1
  186. package/starters/project/README.md +10 -8
  187. package/starters/project/package.json +1 -0
  188. package/starters/project/site/config.mjs +0 -13
  189. package/starters/project/site/sitewide-content.md +14 -0
  190. package/starters/project/site/theme.md +3 -11
  191. package/examples/dog-gallery/site/.norna/generated-images.json +0 -226
  192. package/examples/dog-gallery/site/config.mjs +0 -67
  193. package/examples/dog-gallery/site/content.md +0 -128
  194. package/examples/dog-gallery/site/images/black-dogs/black-puppy-meadow.png +0 -0
  195. package/examples/dog-gallery/site/images/black-dogs/photo-of-a-black-dog.jpg +0 -0
  196. package/examples/dog-gallery/site/images/brown-dogs/brown-dog.jpg +0 -0
  197. package/examples/dog-gallery/site/images/brown-dogs/dog-accompanies-master.jpg +0 -0
  198. package/examples/dog-gallery/site/images/golden-dogs/golden-retriever.jpg +0 -0
  199. package/examples/dog-gallery/site/images/golden-dogs/toller-puppy.jpg +0 -0
  200. package/examples/dog-gallery/site/images/white-dogs/white-cute-dog.jpg +0 -0
  201. package/examples/dog-gallery/site/images/white-dogs/white-puppy-garden.png +0 -0
  202. package/examples/dog-gallery/site/public/favicon.svg +0 -7
  203. package/examples/dog-gallery/site/routes/010-dog-care/route-content.md +0 -38
  204. package/examples/dog-gallery/site/theme.md +0 -112
  205. package/examples/typography-presets/.astro/collections/site.schema.json +0 -776
  206. package/examples/typography-presets/.astro/data-store.json +0 -1
  207. package/examples/typography-presets/.astro/dev.log +0 -24
  208. package/examples/typography-presets/site/.norna/generated-images.json +0 -290
  209. package/examples/typography-presets/site/content.md +0 -134
  210. package/examples/typography-presets/site/theme.md +0 -43
  211. /package/examples/{typography-presets/.astro/content-modules.mjs → complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs} +0 -0
  212. /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/types.d.ts +0 -0
  213. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
  214. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
  215. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
  216. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
  217. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
  218. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
  219. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
  220. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
  221. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
  222. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
  223. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
  224. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
  225. /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/embla-carousel.js +0 -0
  226. /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
  227. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
  228. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
  229. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
  230. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
  231. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/package.json +0 -0
  232. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  233. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
  234. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
  235. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
  236. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
  237. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
  238. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
  239. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
  240. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
  241. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
  242. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
  243. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/site/public/robots.txt +0 -0
  244. /package/examples/{typography-presets → feature-demos/media-and-surfaces}/.astro/content-assets.mjs +0 -0
  245. /package/examples/{typography-presets → feature-demos/media-and-surfaces}/node_modules/.vite/deps/package.json +0 -0
  246. /package/examples/{typography-presets → feature-demos/media-and-surfaces}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  247. /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/settings.json +0 -0
  248. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/_metadata.json +0 -0
  249. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
  250. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
  251. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
  252. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
  253. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
  254. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
  255. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
  256. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
  257. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
  258. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
  259. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
  260. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
  261. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
  262. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
  263. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
  264. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
  265. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
  266. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
  267. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
  268. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
  269. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
  270. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
  271. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
  272. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
  273. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
  274. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
  275. /package/examples/{typography-presets → feature-demos/theme-presets}/site/public/robots.txt +0 -0
  276. /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/puppy-portrait.jpg +0 -0
  277. /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/shepherd-portrait.jpg +0 -0
  278. /package/examples/{typography-presets/site/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/white-puppy.jpg +0 -0
  279. /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/black-schnauzer.jpg +0 -0
  280. /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/retriever-portrait.jpg +0 -0
  281. /package/examples/{typography-presets/site/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/schnauzer-portrait.jpg +0 -0
  282. /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/boxer-portrait.jpg +0 -0
  283. /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grass-puppy.jpg +0 -0
  284. /package/examples/{typography-presets/site/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grey-street-dog.jpg +0 -0
  285. /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/black-pedigree.jpg +0 -0
  286. /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/sheepdog-grass.jpg +0 -0
  287. /package/examples/{typography-presets/site → feature-demos/theme-presets/site/routes/040-statement}/images/statement/sheepdog-wide.jpg +0 -0
@@ -4,8 +4,6 @@
4
4
  # Active values below are ordinary YAML; this marked comment block is only help text.
5
5
  #
6
6
  # Available structure:
7
- # navigation:
8
- # brand: site-wide brand/home text; defaults to the homepage title
9
7
  # layout:
10
8
  # density: compact | normal | airy
11
9
  # pageWidth: CSS length, e.g. 1180px
@@ -22,9 +20,12 @@
22
20
  # finalSectionBottom:
23
21
  # desktop: CSS length or clamp(), e.g. clamp(1.4rem, 3vw, 2.75rem)
24
22
  # mobile: CSS length, e.g. 1.5rem
25
- # bodyToImages:
26
- # desktop: CSS length, e.g. 1.25rem
27
- # mobile: CSS length, e.g. 1rem
23
+ # headingToBlock:
24
+ # desktop: CSS length, e.g. 0.75em
25
+ # mobile: CSS length, e.g. 0.7em
26
+ # blockGap:
27
+ # desktop: CSS length, e.g. 1.5em
28
+ # mobile: CSS length, e.g. 1.25em
28
29
  # imageGap:
29
30
  # desktop: CSS length or clamp(), e.g. clamp(1.25rem, 2.8vw, 2rem)
30
31
  # mobile: CSS length, e.g. 1.5rem
@@ -81,19 +82,11 @@
81
82
  # lineHeight: number from 1 through 3
82
83
  # spacingBefore: CSS length, e.g. 0.5em
83
84
  # presentation:
84
- # backgroundColor: quoted hex color, e.g. "#000000"
85
- # textColor: quoted hex color, e.g. "#f7f4ee"
86
- # inlineStyles:
87
- # style-name:
88
- # color: quoted hex color
89
- # frame:
90
- # colors: presentation | theme
91
- # colors:
92
- # backgroundColor: quoted hex color
93
- # textColor: quoted hex color
85
+ # palette: dark # Alternatives: light, paper
86
+ # sectionSurfaces:
87
+ # mode: none | cycle
88
+ # sequence: [base, soft, emphasis]
94
89
  # norna:end theme-help
95
- navigation:
96
- brand: Example Site
97
90
  layout:
98
91
  density: normal
99
92
  pageWidth: 1180px
@@ -113,11 +106,7 @@ typography:
113
106
  preset: quiet-gallery
114
107
  rhythm: normal
115
108
  presentation:
116
- backgroundColor: "#000000"
117
- textColor: "#f7f4ee"
118
- inlineStyles:
119
- highlight:
120
- color: "#ffd84d"
121
- frame:
122
- colors: presentation
109
+ palette: dark # Alternatives: light, paper
110
+ sectionSurfaces:
111
+ mode: cycle
123
112
  ---
@@ -42,7 +42,7 @@ jobs:
42
42
  - name: Install dependencies
43
43
  run: npm ci
44
44
 
45
- - name: Build
45
+ - name: Check and build
46
46
  run: npm run build
47
47
 
48
48
  - name: Configure Pages
@@ -20,8 +20,9 @@ npm run dev -- --kill
20
20
 
21
21
  - `site/config.mjs`: technical settings such as URL, language labels, GitHub
22
22
  repository, and deploy workflow.
23
- - `site/theme.md`: site-wide visual settings such as brand text, layout
24
- density, typography rhythm, colors, frame colors, and inline text styles.
23
+ - `site/sitewide-content.md`: shared brand or logo, banners and footer content.
24
+ - `site/theme.md`: site-wide visual settings such as layout density, typography
25
+ rhythm, palettes, section surfaces, and typography.
25
26
  - `site/content.md`: homepage title, sections, placeholders, project summary,
26
27
  links, install command, example usage, benefits, next steps, managed media
27
28
  blocks, and license.
@@ -39,13 +40,14 @@ GitHub Pages workflow uses `npm ci`.
39
40
  benefits, use cases, and license in `site/content.md`.
40
41
  2. Replace the guide examples in `site/routes/010-guide/route-content.md`, or
41
42
  delete the route if the homepage is enough.
42
- 3. Edit `site/theme.md` for brand name, layout density, typography rhythm,
43
- colors, frame colors, and inline text styles.
44
- 4. Put any local source images in the image folder for the Markdown section
43
+ 3. Edit `site/sitewide-content.md` for the brand or logo, banners and footer.
44
+ 4. Edit `site/theme.md` for layout density, typography rhythm, palette, section
45
+ surfaces, and typography.
46
+ 5. Put any local source images in the image folder for the Markdown section
45
47
  that references them, for example `site/images/intro/`.
46
- 5. Edit `site/config.mjs` for public URL, GitHub repository, footer text, and
47
- deploy workflow name.
48
- 6. Update `package.json` with the site's package name and keep
48
+ 6. Edit `site/config.mjs` for public URL, GitHub repository and deploy workflow
49
+ name.
50
+ 7. Update `package.json` with the site's package name and keep
49
51
  `package-lock.json` committed.
50
52
 
51
53
  ## Common Commands
@@ -14,6 +14,7 @@
14
14
  "norna:config:check": "norna config:check",
15
15
  "norna:content:check": "norna content:check",
16
16
  "norna:sync": "norna content:sync",
17
+ "norna:theme:export": "norna theme:export",
17
18
  "norna:typography:presets": "norna typography presets",
18
19
  "norna:typography:show": "norna typography show",
19
20
  "norna:public": "norna site:public",
@@ -22,19 +22,6 @@ export default {
22
22
  gallery: 'Images',
23
23
  },
24
24
  },
25
- footer: {
26
- copyrightMessage: '(c) Project contributors.',
27
- buildInfo: {
28
- enabled: true,
29
- text: 'Built',
30
- dateTimeFormat: {
31
- locale: 'en-GB',
32
- timeZone: 'UTC',
33
- dateStyle: 'short',
34
- timeStyle: 'short',
35
- },
36
- },
37
- },
38
25
  github: {
39
26
  repo: 'owner/project-name',
40
27
  branch: 'main',
@@ -0,0 +1,14 @@
1
+ ---
2
+ navigation:
3
+ brand: Project Name
4
+ footer:
5
+ copyrightMessage: (c) Project contributors.
6
+ buildInfo:
7
+ enabled: true
8
+ text: Built
9
+ dateTimeFormat:
10
+ locale: en-GB
11
+ timeZone: UTC
12
+ dateStyle: short
13
+ timeStyle: short
14
+ ---
@@ -1,7 +1,5 @@
1
1
  ---
2
2
  # Site-wide visual defaults. Remove a value to use the engine default.
3
- navigation:
4
- brand: Project Name
5
3
  layout:
6
4
  density: compact
7
5
  pageWidth: 1120px
@@ -31,13 +29,7 @@ typography:
31
29
  preset: text-forward
32
30
  rhythm: compact
33
31
  presentation:
34
- backgroundColor: "#001314"
35
- textColor: "#f6f1e8"
36
- inlineStyles:
37
- accent:
38
- color: "#8fd3ff"
39
- muted:
40
- color: "#b8b1a6"
41
- frame:
42
- colors: presentation
32
+ palette: dark # Alternatives: light, paper
33
+ sectionSurfaces:
34
+ mode: cycle
43
35
  ---
@@ -1,226 +0,0 @@
1
- {
2
- "black-puppy-meadow.png": {
3
- "outputVersion": 2,
4
- "sourceHash": "7255e3d9148c1ded01ae6ae6809b9a8261b553a1516d3f8f4de0554bc321f652",
5
- "width": 1536,
6
- "height": 1024,
7
- "variants": [
8
- {
9
- "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp",
10
- "width": 480
11
- },
12
- {
13
- "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp",
14
- "width": 768
15
- },
16
- {
17
- "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp",
18
- "width": 1080
19
- },
20
- {
21
- "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp",
22
- "width": 1440
23
- },
24
- {
25
- "src": "/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp",
26
- "width": 1536
27
- }
28
- ]
29
- },
30
- "photo-of-a-black-dog.jpg": {
31
- "outputVersion": 2,
32
- "sourceHash": "5cf614d2863ca8f86b6162c7b477fd2690adbc101816206c9e675bf36d9962d0",
33
- "width": 960,
34
- "height": 1600,
35
- "variants": [
36
- {
37
- "src": "/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp",
38
- "width": 480
39
- },
40
- {
41
- "src": "/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp",
42
- "width": 768
43
- },
44
- {
45
- "src": "/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp",
46
- "width": 960
47
- }
48
- ]
49
- },
50
- "brown-dog.jpg": {
51
- "outputVersion": 2,
52
- "sourceHash": "50ef114e49ae48491c015157b4a25f4f1fd69140170fe6d4202c551858c3e03d",
53
- "width": 3939,
54
- "height": 2626,
55
- "variants": [
56
- {
57
- "src": "/images/generated/brown-dogs/brown-dog-50ef114e-480.webp",
58
- "width": 480
59
- },
60
- {
61
- "src": "/images/generated/brown-dogs/brown-dog-50ef114e-768.webp",
62
- "width": 768
63
- },
64
- {
65
- "src": "/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp",
66
- "width": 1080
67
- },
68
- {
69
- "src": "/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp",
70
- "width": 1440
71
- },
72
- {
73
- "src": "/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp",
74
- "width": 1920
75
- },
76
- {
77
- "src": "/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp",
78
- "width": 3939
79
- }
80
- ]
81
- },
82
- "dog-accompanies-master.jpg": {
83
- "outputVersion": 2,
84
- "sourceHash": "7ef804d5ebe27724409f4ffa94389c7b1102c2c8bb9c1dae29ecbd4c56e61af9",
85
- "width": 2400,
86
- "height": 1800,
87
- "variants": [
88
- {
89
- "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp",
90
- "width": 480
91
- },
92
- {
93
- "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp",
94
- "width": 768
95
- },
96
- {
97
- "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp",
98
- "width": 1080
99
- },
100
- {
101
- "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp",
102
- "width": 1440
103
- },
104
- {
105
- "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp",
106
- "width": 1920
107
- },
108
- {
109
- "src": "/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp",
110
- "width": 2400
111
- }
112
- ]
113
- },
114
- "golden-retriever.jpg": {
115
- "outputVersion": 2,
116
- "sourceHash": "f797fd880d6c3b112ceb3408f468fbeaf442efc792f935fd6c9954b812fdc838",
117
- "width": 1600,
118
- "height": 1200,
119
- "variants": [
120
- {
121
- "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp",
122
- "width": 480
123
- },
124
- {
125
- "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp",
126
- "width": 768
127
- },
128
- {
129
- "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp",
130
- "width": 1080
131
- },
132
- {
133
- "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp",
134
- "width": 1440
135
- },
136
- {
137
- "src": "/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp",
138
- "width": 1600
139
- }
140
- ]
141
- },
142
- "toller-puppy.jpg": {
143
- "outputVersion": 2,
144
- "sourceHash": "a2a8fbc0d599deb019d45f7b11de98bcbcb4f1fd609e931073161dcb88cbf63f",
145
- "width": 2576,
146
- "height": 1932,
147
- "variants": [
148
- {
149
- "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp",
150
- "width": 480
151
- },
152
- {
153
- "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp",
154
- "width": 768
155
- },
156
- {
157
- "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp",
158
- "width": 1080
159
- },
160
- {
161
- "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp",
162
- "width": 1440
163
- },
164
- {
165
- "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp",
166
- "width": 1920
167
- },
168
- {
169
- "src": "/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp",
170
- "width": 2576
171
- }
172
- ]
173
- },
174
- "white-cute-dog.jpg": {
175
- "outputVersion": 2,
176
- "sourceHash": "077a06891d97eafb4593cfcaa5c9b04fdb1e3a6206d56acd4ebd3eadb83356bf",
177
- "width": 1277,
178
- "height": 1060,
179
- "variants": [
180
- {
181
- "src": "/images/generated/white-dogs/white-cute-dog-077a0689-480.webp",
182
- "width": 480
183
- },
184
- {
185
- "src": "/images/generated/white-dogs/white-cute-dog-077a0689-768.webp",
186
- "width": 768
187
- },
188
- {
189
- "src": "/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp",
190
- "width": 1080
191
- },
192
- {
193
- "src": "/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp",
194
- "width": 1277
195
- }
196
- ]
197
- },
198
- "white-puppy-garden.png": {
199
- "outputVersion": 2,
200
- "sourceHash": "d3ab2ca04fb37dfbf010e7f9f3adf2ba8401553bd1946e3b388cb662eac58ee9",
201
- "width": 1536,
202
- "height": 1024,
203
- "variants": [
204
- {
205
- "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp",
206
- "width": 480
207
- },
208
- {
209
- "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp",
210
- "width": 768
211
- },
212
- {
213
- "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp",
214
- "width": 1080
215
- },
216
- {
217
- "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp",
218
- "width": 1440
219
- },
220
- {
221
- "src": "/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp",
222
- "width": 1536
223
- }
224
- ]
225
- }
226
- }
@@ -1,67 +0,0 @@
1
- const siteUrl = 'http://localhost:4321/';
2
-
3
- export default {
4
- site: {
5
- // Public canonical URL for this site.
6
- url: siteUrl,
7
-
8
- // URL path prefix. Use "/" for root sites and "/repository-name/" for
9
- // GitHub Pages project sites without a custom domain.
10
- basePath: '/',
11
- },
12
- navigation: {
13
- smoothScroll: {
14
- // Set to false to make section links jump directly to the target anchor.
15
- enabled: true,
16
-
17
- // Minimum and maximum animation time for controlled anchor navigation.
18
- minimumDurationMs: 2_000,
19
- maximumDurationMs: 4_000,
20
-
21
- // Additional duration per pixel of scroll distance, before min/max clamping.
22
- durationPerPixelMs: 0.22,
23
- },
24
- },
25
- locale: {
26
- lang: 'en',
27
- labels: {
28
- skipToContent: 'Skip to content',
29
- sectionNavigation: 'Sections',
30
- gallery: 'Images',
31
- },
32
- },
33
- footer: {
34
- // Omit this value to hide the copyright sentence.
35
- copyrightMessage: 'Dog images from Wikimedia Commons; see image captions for license details.',
36
-
37
- // Set enabled to false to hide the build timestamp while keeping its config.
38
- buildInfo: {
39
- enabled: true,
40
-
41
- // Text shown before the formatted build timestamp.
42
- text: 'Built',
43
-
44
- // Standard Intl.DateTimeFormat options for the build timestamp.
45
- dateTimeFormat: {
46
- locale: 'en-GB',
47
- timeZone: 'UTC',
48
- dateStyle: 'short',
49
- timeStyle: 'short',
50
- },
51
- },
52
- },
53
- github: {
54
- // Example repository and workflow details used by deploy scripts.
55
- repo: 'owner/example-site',
56
- branch: 'main',
57
- pagesWorkflow: 'Deploy to GitHub Pages',
58
- },
59
- deploy: {
60
- watch: {
61
- // Defaults for npm run deploy:watch.
62
- intervalMs: 10_000,
63
- timeoutMs: 15 * 60_000,
64
- runLimit: 10,
65
- },
66
- },
67
- };
@@ -1,128 +0,0 @@
1
- ---
2
- title: Local Dog Example
3
- description: A small norna example with free dog images.
4
- navigation:
5
- label: Dog site!
6
- sections:
7
- summer-dogs:
8
- visible:
9
- from: "2026-08-01"
10
- until: "2026-09-01"
11
- ---
12
-
13
- ## Black Dogs {#black-dogs}
14
-
15
- Black-coated dogs from the local norna development collection. This
16
- sentence contains [yellow highlighted text]{.highlight} for inline style
17
- inspection.
18
-
19
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a
20
- ante venenatis dapibus posuere velit aliquet.
21
-
22
- ### Coat notes
23
-
24
- This `###` heading should follow `typography.headings.h3`.
25
-
26
- #### Small detail
27
-
28
- This `####` heading should follow `typography.headings.h4`.
29
-
30
- Curabitur blandit tempus porttitor. Donec id elit non mi porta gravida at eget
31
- metus. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
32
-
33
- ```norna-image-stack
34
- - image: photo-of-a-black-dog.jpg
35
- alt: A black dog sitting outdoors and looking at the camera.
36
- caption: Photo of a dog. ContaDeletada2906, CC0 1.0, via Wikimedia Commons.
37
- - image: black-puppy-meadow.png
38
- alt: A black puppy standing in a grassy meadow and looking at the camera.
39
- caption: AI-generated image.
40
- ```
41
-
42
- ## Summer Dogs {#summer-dogs}
43
-
44
- This temporary section is visible during August 2026. It is here to demonstrate
45
- date-controlled sections and [warm alert text]{.alert} in the local dog example.
46
-
47
- Lorem ipsum dolor sit amet.
48
-
49
- Vestibulum id ligula porta felis euismod semper. Maecenas faucibus mollis
50
- interdum. Nullam quis risus eget urna mollis ornare vel eu leo.
51
-
52
- ## Brown Dogs {#brown-dogs}
53
-
54
- Brown dogs provide a second image section for local navigation checks.
55
-
56
- Donec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac
57
- cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit
58
- amet risus.
59
-
60
- Maecenas sed diam eget risus varius blandit sit amet non magna. Morbi leo risus,
61
- porta ac consectetur ac, vestibulum at eros. Sed posuere consectetur est at
62
- lobortis.
63
-
64
- ```norna-image-stack
65
- - image: brown-dog.jpg
66
- alt: A brown dog looking directly at the camera.
67
- caption: DogBrown. Frank-3, CC0 1.0, via Wikimedia Commons.
68
- - image: dog-accompanies-master.jpg
69
- alt: A man walks outdoors with a dog at his side.
70
- caption: Dog accompanies his master. Steve Hillebrand, U.S. Fish and Wildlife Service, public domain.
71
- ```
72
-
73
- ## Golden Dogs {#golden-dogs}
74
-
75
- Golden-coated retrievers add a third image section and more scrolling depth.
76
-
77
- Cras justo odio, dapibus ac facilisis in, egestas eget quam.
78
-
79
- ### Training note
80
-
81
- This `###` heading follows the site-wide `headings.h3` style.
82
-
83
- Nulla vitae elit libero, a pharetra augue. Integer posuere erat a ante venenatis
84
- dapibus posuere velit aliquet. Aenean eu leo quam. Pellentesque ornare sem
85
- lacinia quam venenatis vestibulum.
86
-
87
- ```norna-image-stack
88
- - image: golden-retriever.jpg
89
- alt: A golden retriever standing outdoors.
90
- caption: Golden Retriever. Ribo, public domain, via Wikimedia Commons.
91
- - image: toller-puppy.jpg
92
- alt: A young Nova Scotia Duck Tolling Retriever puppy sitting on grass.
93
- caption: Nova Scotia Duck Tolling Retriever puppy. RM, public domain, via Wikimedia Commons.
94
- ```
95
-
96
- ## White Dogs {#white-dogs}
97
-
98
- A white dog completes the colour-based image sequence.
99
-
100
- Etiam porta sem malesuada magna mollis euismod. Donec id elit non mi porta
101
- gravida at eget metus.
102
-
103
- Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Lorem ipsum
104
- dolor sit amet, consectetur adipiscing elit. Donec sed odio dui. Vestibulum id
105
- ligula porta felis euismod semper.
106
-
107
- ```norna-image-stack
108
- - image: white-cute-dog.jpg
109
- alt: A white dog looking toward the camera.
110
- caption: White cute dog. Neal Ziring, public domain, via Wikimedia Commons.
111
- - image: white-puppy-garden.png
112
- alt: A fluffy white puppy standing on grass in a garden.
113
- caption: AI-generated image.
114
- ```
115
-
116
- ## Sources {#sources}
117
-
118
- Most images are sourced from Wikimedia Commons pages that list CC0 or
119
- public-domain licensing:
120
-
121
- - [Photo of a dog](https://commons.wikimedia.org/wiki/File:Photo_of_a_dog.jpg)
122
- - [DogBrown](https://commons.wikimedia.org/wiki/File:DogBrown.jpg)
123
- - [Dog accompanies his master](https://commons.wikimedia.org/wiki/File:Dog_accompanies_his_master.jpg)
124
- - [Golden Retriever](https://commons.wikimedia.org/wiki/File:Golden_Retriever.jpg)
125
- - [Toller pup7wks2](https://commons.wikimedia.org/wiki/File:Toller_pup7wks2.JPG)
126
- - [White cute dog](https://commons.wikimedia.org/wiki/File:White_cute_dog.jpg)
127
-
128
- The black and white puppy images are AI-generated.
@@ -1,7 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
2
- <rect width="128" height="128" rx="24" fill="#111111" />
3
- <circle cx="40" cy="43" r="13" fill="#ffffff" />
4
- <circle cx="64" cy="34" r="13" fill="#ffffff" />
5
- <circle cx="88" cy="43" r="13" fill="#ffffff" />
6
- <path fill="#ffffff" d="M31 83c0-18 15-31 33-31s33 13 33 31c0 12-9 18-20 14-7-3-19-3-26 0-11 4-20-2-20-14Z" />
7
- </svg>
@@ -1,38 +0,0 @@
1
- ---
2
- title: Dog care
3
- description: A small route for testing multi-page norna navigation.
4
- navigation:
5
- label: Dog care
6
- ---
7
-
8
- ## Daily rhythm {#daily-rhythm}
9
-
10
- Dogs often settle into a home when the day has a clear rhythm. Meals, walks,
11
- rest and play do not need to be dramatic events, but they become easier to
12
- understand when they happen in a predictable order.
13
-
14
- Short routines also make a media page easier to scan. This route exists mainly
15
- to test how page navigation and site navigation behave together.
16
-
17
- ### Morning checks
18
-
19
- This `###` heading tests route-level body subheadings.
20
-
21
- #### Quiet detail
22
-
23
- This `####` heading should stay smaller than the `###` above it.
24
-
25
- ## Calm training {#calm-training}
26
-
27
- Good training can be quiet. A short session with one clear task is often more
28
- useful than a long session with many competing signals.
29
-
30
- The same principle applies to navigation. The page should show where the visitor
31
- is in the site first, and then offer a simple way to jump within the current
32
- page.
33
-
34
- ## Media notes {#media-notes}
35
-
36
- This section is intentionally text-only. Image routes can be added later, but a
37
- first navigation test should make it easy to judge menus, active states and
38
- anchor positions without layout noise from new media.