@janga/norna 0.7.16 → 0.7.18

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 (342) hide show
  1. package/README.md +18 -9
  2. package/astro.config.mjs +35 -3
  3. package/bin/norna-cli.mjs +1 -1
  4. package/docs/README.md +16 -14
  5. package/docs/commands.md +2 -2
  6. package/docs/configuration.md +25 -2
  7. package/docs/content.md +92 -103
  8. package/docs/design/navigation-and-theme-plan.md +186 -0
  9. package/docs/design/norna-diagram-design.md +9 -9
  10. package/docs/design/site-examples-structure.md +15 -11
  11. package/docs/engine-development.md +19 -22
  12. package/docs/getting-started.md +21 -16
  13. package/docs/images-and-metadata.md +12 -9
  14. package/docs/pages.md +190 -0
  15. package/docs/public-files.md +49 -36
  16. package/docs/publishing.md +19 -3
  17. package/docs/site-files.md +46 -38
  18. package/docs/sitewide-content.md +20 -36
  19. package/docs/theme.md +109 -143
  20. package/docs/typography.md +19 -31
  21. package/examples/README.md +10 -4
  22. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +17 -41
  23. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +26 -67
  24. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +185 -88
  25. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -1
  26. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +4 -4
  27. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +5 -5
  28. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +33 -23
  29. package/examples/complete-sites/dog-shelter-multi-page/README.md +1 -1
  30. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +8 -8
  31. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +20 -20
  32. package/examples/complete-sites/dog-shelter-multi-page/site/{content.md → pages/000-home/content.md} +3 -4
  33. package/examples/complete-sites/dog-shelter-multi-page/site/{routes → pages}/010-dogs/content.md +3 -4
  34. package/examples/complete-sites/dog-shelter-multi-page/site/{routes → pages}/020-adopt/content.md +3 -4
  35. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +2 -4
  36. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +17 -41
  37. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +26 -67
  38. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +185 -88
  39. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -1
  40. package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +8 -0
  41. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +5 -5
  42. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +16 -12
  43. package/examples/complete-sites/dog-shelter-single-page/README.md +1 -1
  44. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +8 -8
  45. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +12 -12
  46. package/examples/complete-sites/dog-shelter-single-page/site/{content.md → pages/000-home/content.md} +5 -2
  47. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +2 -4
  48. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +17 -41
  49. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +26 -67
  50. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +180 -91
  51. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
  52. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +4 -14
  53. package/examples/feature-demos/media-and-surfaces/README.md +2 -2
  54. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +9 -9
  55. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +16 -16
  56. package/examples/feature-demos/media-and-surfaces/site/{content.md → pages/000-home/content.md} +4 -7
  57. package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/010-media/content.md +6 -5
  58. package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/020-surfaces/content.md +9 -7
  59. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +2 -0
  60. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
  61. package/examples/feature-demos/sitewide-content/README.md +3 -3
  62. package/examples/feature-demos/sitewide-content/site/pages/000-home/content.md +17 -0
  63. package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +17 -0
  64. package/examples/feature-demos/sitewide-content/site/{routes → pages}/020-notices/content.md +7 -6
  65. package/examples/feature-demos/sitewide-content/site/{routes → pages}/030-footer/content.md +6 -5
  66. package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +4 -13
  67. package/examples/feature-demos/theme-preset-documentation/README.md +16 -0
  68. package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +74 -0
  69. package/examples/feature-demos/{theme-presets/site/routes/020-documentation → theme-preset-documentation/site/pages/000-home}/content.md +4 -7
  70. package/examples/feature-demos/theme-preset-documentation/site/sitewide-content.yaml +3 -0
  71. package/examples/feature-demos/theme-preset-portfolio/README.md +16 -0
  72. package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +74 -0
  73. package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +1 -0
  74. package/examples/feature-demos/{theme-presets/site/routes/010-portfolio → theme-preset-portfolio/site/pages/000-home}/content.md +4 -7
  75. package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +2 -0
  76. package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +3 -0
  77. package/examples/feature-demos/theme-preset-project/README.md +16 -0
  78. package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +74 -0
  79. package/examples/feature-demos/theme-preset-project/site/config.yaml +1 -0
  80. package/examples/feature-demos/{theme-presets/site/routes/030-project → theme-preset-project/site/pages/000-home}/content.md +4 -7
  81. package/examples/feature-demos/theme-preset-project/site/public/robots.txt +2 -0
  82. package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +3 -0
  83. package/examples/feature-demos/theme-preset-statement/README.md +16 -0
  84. package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +74 -0
  85. package/examples/feature-demos/theme-preset-statement/site/config.yaml +1 -0
  86. package/examples/feature-demos/{theme-presets/site/routes/040-statement → theme-preset-statement/site/pages/000-home}/content.md +4 -7
  87. package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +2 -0
  88. package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +3 -0
  89. package/fixtures/basic/site/{content.md → pages/000-home/content.md} +5 -6
  90. package/fixtures/basic/site/sitewide-content.yaml +1 -8
  91. package/fixtures/basic/site/theme.yaml +1 -8
  92. package/fixtures/content-model-v2/site/{content.md → pages/000-home/content.md} +11 -13
  93. package/fixtures/content-model-v2/site/pages/010-guide/content.md +18 -0
  94. package/fixtures/nested-pages/.astro/collections/site.schema.json +35 -0
  95. package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +97 -0
  96. package/fixtures/nested-pages/.astro/collections/theme.schema.json +844 -0
  97. package/fixtures/nested-pages/.astro/content-assets.mjs +4 -0
  98. package/fixtures/nested-pages/.astro/content-modules.mjs +1 -0
  99. package/fixtures/nested-pages/.astro/content.d.ts +183 -0
  100. package/fixtures/nested-pages/.astro/data-store.json +1 -0
  101. package/fixtures/nested-pages/.astro/dev-local.json +8 -0
  102. package/fixtures/nested-pages/.astro/dev.log +1128 -0
  103. package/fixtures/nested-pages/.astro/settings.json +5 -0
  104. package/fixtures/nested-pages/.astro/types.d.ts +2 -0
  105. package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +74 -0
  106. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  107. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  108. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  109. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  110. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  111. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  112. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  113. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  114. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  115. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  116. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  117. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  118. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  119. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  120. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  121. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  122. package/fixtures/nested-pages/node_modules/.vite/deps/package.json +3 -0
  123. package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  124. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  125. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  126. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  127. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  128. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  129. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  130. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  131. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  132. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  133. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  134. package/fixtures/nested-pages/site/.norna/generated-images.json +10 -0
  135. package/fixtures/nested-pages/site/config.yaml +3 -0
  136. package/fixtures/nested-pages/site/pages/000-home/content.md +15 -0
  137. package/fixtures/nested-pages/site/pages/010-guides/content.md +15 -0
  138. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +21 -0
  139. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +21 -0
  140. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +18 -0
  141. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +2 -0
  142. package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +11 -0
  143. package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +9 -0
  144. package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +3 -0
  145. package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +3 -0
  146. package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +3 -0
  147. package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +3 -0
  148. package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +3 -0
  149. package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +3 -0
  150. package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +3 -0
  151. package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +3 -0
  152. package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +3 -0
  153. package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +3 -0
  154. package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +3 -0
  155. package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +3 -0
  156. package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +3 -0
  157. package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +3 -0
  158. package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +3 -0
  159. package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +3 -0
  160. package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +3 -0
  161. package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +3 -0
  162. package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +7 -0
  163. package/fixtures/nested-pages/site/pages/020-reference/content.md +10 -0
  164. package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +11 -0
  165. package/fixtures/nested-pages/site/theme.yaml +1 -0
  166. package/package.json +8 -4
  167. package/schemas/config.schema.json +46 -5
  168. package/schemas/content-frontmatter.schema.json +28 -63
  169. package/schemas/manifest.json +4 -2
  170. package/schemas/page-theme.schema.json +192 -0
  171. package/schemas/sitewide-content.schema.json +58 -132
  172. package/schemas/theme.schema.json +434 -152
  173. package/scripts/check-config.mjs +8 -6
  174. package/scripts/deploy-site.mjs +6 -8
  175. package/scripts/doctor.mjs +2 -2
  176. package/scripts/generate-images.mjs +15 -29
  177. package/scripts/generate-schemas.mjs +7 -218
  178. package/scripts/lib/base-path-redirect.mjs +9 -0
  179. package/scripts/lib/editor-language-service.mjs +125 -79
  180. package/scripts/lib/example-sites.mjs +15 -3
  181. package/scripts/lib/heading-ids.mjs +161 -0
  182. package/scripts/lib/navigation-model.mjs +51 -0
  183. package/scripts/lib/norna-markdown-blocks.mjs +3 -4
  184. package/scripts/lib/page-model.mjs +102 -0
  185. package/scripts/lib/presentation.mjs +25 -17
  186. package/scripts/lib/project-config.mjs +46 -8
  187. package/scripts/lib/schema-definitions.mjs +78 -55
  188. package/scripts/lib/schema-editor-metadata.mjs +519 -0
  189. package/scripts/lib/schema-value-definitions.mjs +20 -6
  190. package/scripts/lib/site-content.mjs +159 -97
  191. package/scripts/lib/site-conventions.mjs +1 -0
  192. package/scripts/lib/site-paths.mjs +11 -5
  193. package/scripts/lib/theme-config.mjs +12 -18
  194. package/scripts/lib/theme-presets.mjs +55 -14
  195. package/scripts/release.mjs +1 -1
  196. package/scripts/show-typography.mjs +4 -30
  197. package/scripts/sync-content-sections.mjs +107 -68
  198. package/scripts/{test-temporary-visibility.mjs → test-banner-visibility.mjs} +8 -25
  199. package/scripts/test-client-javascript.mjs +50 -46
  200. package/scripts/test-content-check.mjs +153 -69
  201. package/scripts/test-content-model-v2.mjs +566 -285
  202. package/scripts/test-documentation.mjs +10 -3
  203. package/scripts/test-editor-language-service.mjs +172 -25
  204. package/scripts/test-engine-commands.mjs +6 -5
  205. package/scripts/test-examples.mjs +30 -1
  206. package/scripts/test-heading-ids.mjs +68 -0
  207. package/scripts/test-navigation-model.mjs +63 -0
  208. package/scripts/test-navigation.mjs +11 -2
  209. package/scripts/test-nested-pages.mjs +125 -0
  210. package/scripts/test-package-check.mjs +55 -95
  211. package/scripts/test-page-model.mjs +108 -0
  212. package/scripts/test-project-config.mjs +22 -3
  213. package/scripts/test-schemas.mjs +82 -15
  214. package/scripts/test-theme-presets.mjs +57 -42
  215. package/src/components/NavigationPageTree.astro +157 -0
  216. package/src/components/PageContentsLinks.astro +40 -0
  217. package/src/components/SectionNavigationScript.astro +117 -5
  218. package/src/components/SiteBreadcrumbs.astro +32 -0
  219. package/src/components/SiteNavigation.astro +97 -68
  220. package/src/components/SitePage.astro +93 -55
  221. package/src/components/SiteSection.astro +29 -27
  222. package/src/components/SiteTreeNavigation.astro +35 -0
  223. package/src/components/TreeNavigationScript.astro +83 -0
  224. package/src/content.config.ts +8 -10
  225. package/src/layouts/BaseLayout.astro +21 -20
  226. package/src/lib/pageThemes.ts +44 -0
  227. package/src/lib/sectionContent.ts +106 -107
  228. package/src/lib/siteNavigation.ts +49 -0
  229. package/src/lib/sitePages.ts +96 -38
  230. package/src/pages/{[slug].astro → [...slug].astro} +2 -2
  231. package/src/pages/index.astro +2 -1
  232. package/src/styles/global.css +743 -57
  233. package/starters/basic/README.md +9 -11
  234. package/starters/basic/site/{content.md → pages/000-home/content.md} +7 -4
  235. package/starters/basic/site/sitewide-content.yaml +1 -10
  236. package/starters/basic/site/theme.yaml +1 -105
  237. package/starters/project/README.md +14 -14
  238. package/starters/project/site/{content.md → pages/000-home/content.md} +5 -4
  239. package/starters/project/site/{routes → pages}/010-guide/content.md +5 -4
  240. package/starters/project/site/sitewide-content.yaml +1 -10
  241. package/starters/project/site/theme.yaml +1 -31
  242. package/docs/routes.md +0 -121
  243. package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/theme.yaml +0 -3
  244. package/examples/feature-demos/sitewide-content/site/content.md +0 -16
  245. package/examples/feature-demos/sitewide-content/site/routes/010-identity/content.md +0 -20
  246. package/examples/feature-demos/theme-presets/README.md +0 -18
  247. package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +0 -290
  248. package/examples/feature-demos/theme-presets/site/content.md +0 -17
  249. package/examples/feature-demos/theme-presets/site/sitewide-content.yaml +0 -12
  250. package/examples/feature-demos/theme-presets/site/theme.yaml +0 -1
  251. package/fixtures/content-model-v2/site/routes/010-guide/content.md +0 -17
  252. package/scripts/lib/route-model.mjs +0 -17
  253. package/scripts/test-route-model.mjs +0 -32
  254. package/src/lib/routeThemes.ts +0 -41
  255. /package/examples/complete-sites/dog-shelter-multi-page/site/{images/intro → pages/000-home/images}/shelter-dog.jpg +0 -0
  256. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/010-dogs/images/dogs → pages/010-dogs/images}/rex.jpg +0 -0
  257. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/010-dogs/images/dogs → pages/010-dogs/images}/rover.jpg +0 -0
  258. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/020-adopt/images/adopt → pages/020-adopt/images}/adoption-dog.jpg +0 -0
  259. /package/examples/complete-sites/dog-shelter-single-page/site/{images/you-can-help → pages/000-home/images}/foster-dog.jpg +0 -0
  260. /package/examples/complete-sites/dog-shelter-single-page/site/{images/what-we-do → pages/000-home/images}/rescue-dog.jpg +0 -0
  261. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-carousel.svg +0 -0
  262. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-stack.svg +0 -0
  263. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-surfaces.svg +0 -0
  264. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-one.svg +0 -0
  265. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-three.svg +0 -0
  266. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-two.svg +0 -0
  267. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/stack → pages/010-media/images}/stack-one.svg +0 -0
  268. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/stack → pages/010-media/images}/stack-two.svg +0 -0
  269. /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/config.yaml +0 -0
  270. /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/black-schnauzer.jpg +0 -0
  271. /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/retriever-portrait.jpg +0 -0
  272. /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/schnauzer-portrait.jpg +0 -0
  273. /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/public/robots.txt +0 -0
  274. /package/examples/feature-demos/{theme-presets/site/routes/020-documentation → theme-preset-documentation/site}/theme.yaml +0 -0
  275. /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/puppy-portrait.jpg +0 -0
  276. /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/shepherd-portrait.jpg +0 -0
  277. /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/white-puppy.jpg +0 -0
  278. /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio → theme-preset-portfolio/site}/theme.yaml +0 -0
  279. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/routeTheme.schema.json +0 -0
  280. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/site.schema.json +0 -0
  281. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/sitewide.schema.json +0 -0
  282. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/theme.schema.json +0 -0
  283. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-assets.mjs +0 -0
  284. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-modules.mjs +0 -0
  285. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content.d.ts +0 -0
  286. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/data-store.json +0 -0
  287. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev-local.json +0 -0
  288. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.json +0 -0
  289. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.log +0 -0
  290. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/settings.json +0 -0
  291. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/types.d.ts +0 -0
  292. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/_metadata.json +0 -0
  293. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
  294. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
  295. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
  296. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
  297. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
  298. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
  299. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
  300. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
  301. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
  302. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
  303. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
  304. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
  305. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js +0 -0
  306. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
  307. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
  308. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
  309. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
  310. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
  311. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/package.json +0 -0
  312. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  313. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
  314. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
  315. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
  316. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
  317. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
  318. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
  319. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
  320. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
  321. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
  322. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
  323. /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/boxer-portrait.jpg +0 -0
  324. /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/grass-puppy.jpg +0 -0
  325. /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/grey-street-dog.jpg +0 -0
  326. /package/examples/feature-demos/{theme-presets/site/routes/030-project → theme-preset-project/site}/theme.yaml +0 -0
  327. /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/black-pedigree.jpg +0 -0
  328. /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/sheepdog-grass.jpg +0 -0
  329. /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/sheepdog-wide.jpg +0 -0
  330. /package/examples/feature-demos/{theme-presets/site/routes/040-statement → theme-preset-statement/site}/theme.yaml +0 -0
  331. /package/fixtures/basic/site/{images/work → pages/000-home/images}/.gitkeep +0 -0
  332. /package/fixtures/content-model-v2/site/{images/card-section → pages/000-home/images}/adopt.svg +0 -0
  333. /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/detail.jpg +0 -0
  334. /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/duplicate.jpg +0 -0
  335. /package/fixtures/content-model-v2/site/{images/card-section → pages/000-home/images}/foster.svg +0 -0
  336. /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/hero.jpg +0 -0
  337. /package/fixtures/content-model-v2/site/{images/plain → pages/000-home/images}/image.jpg +0 -0
  338. /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-one.jpg +0 -0
  339. /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-three.jpg +0 -0
  340. /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-two.jpg +0 -0
  341. /package/fixtures/content-model-v2/site/{routes/010-guide/images/intro → pages/010-guide/images}/duplicate.jpg +0 -0
  342. /package/starters/basic/site/{images/work → pages/000-home/images}/.gitkeep +0 -0
@@ -15,14 +15,12 @@ If the standard local port is blocked, start with:
15
15
  npm run norna:dev -- --kill
16
16
  ```
17
17
 
18
- Edit the shared navigation label, logo settings, banners, and footer in
18
+ Edit shared logo settings, banners, and footer in
19
19
  `site/sitewide-content.yaml`,
20
20
  site-wide visual defaults in `site/theme.yaml`, homepage content and section
21
- metadata in `site/content.md`, and technical settings such as URL and locale
22
- in `site/config.yaml`. Keep source images under `site/images/<section-id>/`
23
- and static public files under `site/public/`. The image folder name should
24
- match the section id in Markdown, for example `## Work {#work}` uses
25
- `site/images/work/`.
21
+ metadata in `site/pages/000-home/content.md`, and technical settings such as URL
22
+ and locale in `site/config.yaml`. Keep managed homepage source images under
23
+ `site/pages/000-home/images/` and static public files under `site/public/`.
26
24
 
27
25
  For a GitHub Pages project site without a custom domain, include the repository
28
26
  path in the public URL:
@@ -36,10 +34,10 @@ Norna derives `/repository-name/` as the base path. Use a root URL such as
36
34
 
37
35
  In GitHub repository settings, configure Pages to build from GitHub Actions.
38
36
 
39
- Page width, side gutters, layout density, typography rhythm, image width, image
40
- height limits, font, palettes, section surfaces, and site-wide typography are
41
- configured in `site/theme.yaml`. A route may replace that visual theme with its
42
- own `theme.yaml`.
37
+ Page width, side gutters, content spacing, image sizing, palette, shape, and
38
+ site-wide typography are configured in `site/theme.yaml`. A page may use a
39
+ limited `theme.yaml` for local text width, content spacing, managed-image
40
+ sizing, and section background pattern.
43
41
 
44
42
  Commit `package-lock.json` after the first install so GitHub Actions can use
45
43
  `npm ci`.
@@ -73,7 +71,7 @@ Generic documentation lives in the `norna` repository:
73
71
  - `docs/content.md`
74
72
  - `docs/theme.md`
75
73
  - `docs/typography.md`
76
- - `docs/routes.md`
74
+ - `docs/pages.md`
77
75
  - `docs/configuration.md`
78
76
  - `docs/commands.md`
79
77
  - `docs/images-and-metadata.md`
@@ -1,16 +1,19 @@
1
1
  ---
2
- title: Example Site
3
- description: Minimal norna starter site.
2
+ page:
3
+ description: Minimal norna starter site.
4
4
  ---
5
5
 
6
+ # Example Site
7
+
8
+
6
9
  ## Intro {#intro}
7
10
  This is a minimal starter site for norna. Since this site doesn't have any
8
- routes defined, the navigation menu will be a sticky bar with anchor links for
11
+ pages defined, the navigation menu will be a sticky bar with anchor links for
9
12
  ease of use on phones etc. **Highlighted inline text** when a short
10
13
  phrase needs emphasis
11
14
  ## Work {#work}
12
15
  Add Norna image blocks in Markdown where the images should appear. Put
13
- matching source images under `images/work/`.
16
+ matching source images directly under `images/`.
14
17
 
15
18
  ````
16
19
  ```norna-image-stack
@@ -1,12 +1,3 @@
1
- navigation:
2
- label: Example Site
3
1
  footer:
4
2
  copyrightMessage: (c) Example Owner.
5
- buildInfo:
6
- enabled: true
7
- text: Built
8
- dateTimeFormat:
9
- locale: en-GB
10
- timeZone: UTC
11
- dateStyle: short
12
- timeStyle: short
3
+ buildInfo: true
@@ -1,105 +1 @@
1
- # norna:start theme-help
2
- # Site-wide visual defaults. Remove a value to use the engine default.
3
- # Active values below are ordinary YAML; this marked comment block is only help text.
4
- #
5
- # Available structure:
6
- # layout:
7
- # density: compact | normal | airy
8
- # pageWidth: CSS length, e.g. 1180px
9
- # gutter:
10
- # desktop: CSS length or clamp(), e.g. clamp(1.25rem, 4vw, 3rem)
11
- # mobile: CSS length, e.g. 1rem
12
- # spacing:
13
- # firstSectionTop:
14
- # desktop: CSS length or clamp(), e.g. clamp(1.875rem, 3vw, 2.75rem)
15
- # mobile: CSS length, e.g. 1.375rem
16
- # sectionGap:
17
- # desktop: CSS length or clamp(), e.g. clamp(1.4rem, 3vw, 2.75rem)
18
- # mobile: CSS length, e.g. 1.5rem
19
- # finalSectionBottom:
20
- # desktop: CSS length or clamp(), e.g. clamp(1.4rem, 3vw, 2.75rem)
21
- # mobile: CSS length, e.g. 1.5rem
22
- # headingToBlock:
23
- # desktop: CSS length, e.g. 0.75em
24
- # mobile: CSS length, e.g. 0.7em
25
- # blockGap:
26
- # desktop: CSS length, e.g. 1.5em
27
- # mobile: CSS length, e.g. 1.25em
28
- # imageGap:
29
- # desktop: CSS length or clamp(), e.g. clamp(1.25rem, 2.8vw, 2rem)
30
- # mobile: CSS length, e.g. 1.5rem
31
- # images:
32
- # width: CSS length, e.g. 900px
33
- # maxAvailableWidthPercent:
34
- # desktop: number from 1 through 100
35
- # mobile: number from 1 through 100
36
- # maxAvailableHeightPercent:
37
- # desktop: number from 1 through 100
38
- # mobile: number from 1 through 100
39
- # typography:
40
- # fontFamily: CSS font-family stack
41
- # profile: restrained | dense | reading | statement
42
- # rhythm: compact | normal | airy
43
- # overrides:
44
- # headings:
45
- # h2:
46
- # align:
47
- # desktop: left | center | right
48
- # mobile: left | center | right
49
- # size: small | medium | large | xlarge
50
- # lineHeight: number from 1 through 3
51
- # spacingBefore: CSS length, e.g. 0
52
- # spacingAfter: CSS length, e.g. 0.55em
53
- # h3:
54
- # align:
55
- # desktop: left | center | right
56
- # mobile: left | center | right
57
- # size: small | medium | large | xlarge
58
- # lineHeight: number from 1 through 3
59
- # spacingBefore: CSS length, e.g. 1.5em
60
- # spacingAfter: CSS length, e.g. 0.5em
61
- # h4:
62
- # align:
63
- # desktop: left | center | right
64
- # mobile: left | center | right
65
- # size: small | medium | large | xlarge
66
- # lineHeight: number from 1 through 3
67
- # spacingBefore: CSS length, e.g. 1.1em
68
- # spacingAfter: CSS length, e.g. 0.4em
69
- # body:
70
- # align:
71
- # desktop: left | center | right
72
- # mobile: left | center | right
73
- # size: small | medium | large | xlarge
74
- # lineHeight: number from 1 through 3
75
- # paragraphSpacing: CSS length, e.g. 0.85em
76
- # caption:
77
- # align:
78
- # desktop: left | center | right
79
- # mobile: left | center | right
80
- # size: small | medium | large | xlarge
81
- # lineHeight: number from 1 through 3
82
- # spacingBefore: CSS length, e.g. 0.5em
83
- # palette: dark # Alternatives: light, paper
84
- # sectionSurfaces: [base, soft, emphasis]
85
- # norna:end theme-help
86
- layout:
87
- density: normal
88
- pageWidth: 1180px
89
- gutter:
90
- desktop: clamp(1.25rem, 4vw, 3rem)
91
- mobile: 1rem
92
- images:
93
- width: 900px
94
- maxAvailableWidthPercent:
95
- desktop: 100
96
- mobile: 100
97
- maxAvailableHeightPercent:
98
- desktop: 74
99
- mobile: 68
100
- typography:
101
- fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
102
- profile: restrained
103
- rhythm: normal
104
- palette: dark # Alternatives: light, paper
105
- sectionSurfaces: [base, soft, emphasis]
1
+ preset: project
@@ -19,13 +19,13 @@ npm run norna:dev -- --kill
19
19
  ## Files
20
20
 
21
21
  - `site/config.yaml`: public URL and optional language and smooth scrolling.
22
- - `site/sitewide-content.yaml`: shared navigation identity, banners, and footer.
23
- - `site/theme.yaml`: site-wide visual settings such as layout density, typography
24
- rhythm, palettes, section surfaces, and typography.
25
- - `site/content.md`: homepage title, sections, placeholders, project summary,
22
+ - `site/sitewide-content.yaml`: shared logo display settings, banners, and footer.
23
+ - `site/theme.yaml`: the site-wide visual preset and any focused overrides.
24
+ - `site/pages/000-home/content.md`: homepage title, sections, placeholders,
25
+ project summary,
26
26
  links, install command, example usage, benefits, next steps, Norna blocks,
27
27
  and license.
28
- - `site/routes/010-guide/content.md`: short secondary page with realistic
28
+ - `site/pages/010-guide/content.md`: short secondary page with realistic
29
29
  project guide content.
30
30
  - `site/public/robots.txt`: static public file copied into the built site.
31
31
 
@@ -36,15 +36,15 @@ GitHub Pages workflow uses `npm ci`.
36
36
  ## Adapt The Starter
37
37
 
38
38
  1. Replace the project name, tagline, links, install command, example usage,
39
- benefits, use cases, and license in `site/content.md`.
40
- 2. Replace the guide examples in `site/routes/010-guide/content.md`, or
41
- delete the route if the homepage is enough.
42
- 3. Edit `site/sitewide-content.yaml` for the navigation label, logo display,
39
+ benefits, use cases, and license in `site/pages/000-home/content.md`.
40
+ 2. Replace the guide examples in `site/pages/010-guide/content.md`, or
41
+ delete the page if the homepage is enough.
42
+ 3. Edit `site/sitewide-content.yaml` for logo display settings,
43
43
  banners, and footer.
44
- 4. Edit `site/theme.yaml` 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
47
- that references them, for example `site/images/intro/`.
44
+ 4. Select a preset in `site/theme.yaml`. Add focused overrides only when the
45
+ project needs them.
46
+ 5. Put managed homepage source images in `site/pages/000-home/images/`. Images
47
+ for another page belong directly in that page's `images/` directory.
48
48
  6. Edit `site/config.yaml` for the public URL and, when needed, language or smooth
49
49
  scrolling. Deploy commands discover the GitHub repository and default branch.
50
50
  7. Update `package.json` with the site's package name and keep
@@ -79,6 +79,6 @@ Generic Norna documentation lives in the Norna repository:
79
79
  - `docs/content.md`
80
80
  - `docs/theme.md`
81
81
  - `docs/typography.md`
82
- - `docs/routes.md`
82
+ - `docs/pages.md`
83
83
  - `docs/configuration.md`
84
84
  - `docs/commands.md`
@@ -1,10 +1,11 @@
1
1
  ---
2
- title: Your project
3
- description: A compact project site starter for an open source developer tool.
4
- navigation:
5
- label: Home
2
+ page:
3
+ description: A compact project site starter for an open source developer tool.
6
4
  ---
7
5
 
6
+ # Your project
7
+
8
+
8
9
  ## `<Your project> - <short value proposition>` {#intro}
9
10
 
10
11
  Describe the project in one short, concrete phrase. Focus on what it helps the
@@ -1,10 +1,11 @@
1
1
  ---
2
- title: Guide
3
- description: Adapt this compact guide for normal project use.
4
- navigation:
5
- label: Guide
2
+ page:
3
+ description: Adapt this compact guide for normal project use.
6
4
  ---
7
5
 
6
+ # Guide
7
+
8
+
8
9
  ## Quickstart {#quickstart}
9
10
 
10
11
  Show the shortest path from installation to a useful result.
@@ -1,12 +1,3 @@
1
- navigation:
2
- label: Project Name
3
1
  footer:
4
2
  copyrightMessage: (c) Project contributors.
5
- buildInfo:
6
- enabled: true
7
- text: Built
8
- dateTimeFormat:
9
- locale: en-GB
10
- timeZone: UTC
11
- dateStyle: short
12
- timeStyle: short
3
+ buildInfo: true
@@ -1,31 +1 @@
1
- # Site-wide visual defaults. Remove a value to use the engine default.
2
- layout:
3
- density: compact
4
- pageWidth: 1120px
5
- gutter:
6
- desktop: clamp(1.25rem, 4vw, 3rem)
7
- mobile: 1rem
8
- spacing:
9
- firstSectionTop:
10
- desktop: clamp(0.9rem, 1.6vw, 1.5rem)
11
- mobile: 0.9rem
12
- sectionGap:
13
- desktop: clamp(0.8rem, 1.6vw, 1.5rem)
14
- mobile: 1rem
15
- finalSectionBottom:
16
- desktop: clamp(1rem, 2vw, 1.75rem)
17
- mobile: 1rem
18
- images:
19
- width: 840px
20
- maxAvailableWidthPercent:
21
- desktop: 100
22
- mobile: 100
23
- maxAvailableHeightPercent:
24
- desktop: 70
25
- mobile: 62
26
- typography:
27
- fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
28
- profile: reading
29
- rhythm: compact
30
- palette: dark # Alternatives: light, paper
31
- sectionSurfaces: [base, soft]
1
+ preset: project
package/docs/routes.md DELETED
@@ -1,121 +0,0 @@
1
- # Routes
2
-
3
- `site/content.md` is the homepage and builds to `/`. Optional route pages live
4
- under `site/routes/<NNN-route-id>/content.md` and build to first-level
5
- URLs.
6
-
7
- Routes use the same page frontmatter, optional section metadata, Norna-managed
8
- Norna blocks, and Markdown section model as the homepage. See [Content](content.md)
9
- for the page and section model.
10
-
11
- Route directories can contain route content, route-local images, and
12
- an optional route-local `theme.yaml`. The route theme replaces the root visual
13
- theme for that route and can select any complete top-level theme preset. Route
14
- directories cannot contain `config.yaml` or `sitewide-content.yaml`; technical
15
- configuration and shared identity remain at the selected site's top level.
16
-
17
- ## Route Directory Format
18
-
19
- Route directories must use:
20
-
21
- ```text
22
- NNN-route-id
23
- ```
24
-
25
- `NNN` is a three-digit presentation order from `001` through `999`.
26
- `route-id` becomes the route identity and URL segment.
27
-
28
- Valid examples:
29
-
30
- ```text
31
- 010-getting-started
32
- 020-concepts
33
- 120-api-reference
34
- ```
35
-
36
- Invalid examples:
37
-
38
- ```text
39
- 10-about
40
- 000-home
41
- 010_About
42
- 010-About
43
- 010-about-
44
- 010-about--team
45
- ```
46
-
47
- The route id may contain only lowercase `a-z`, numbers, and single hyphens
48
- between alphanumeric groups. The numeric prefix is not part of the route id or
49
- URL.
50
-
51
- Renaming `030-contact/` to `015-contact/` changes navigation order but keeps
52
- the route id `contact` and URL `/contact/`.
53
-
54
- ## Route File
55
-
56
- Add a first-level route by creating:
57
-
58
- ```text
59
- site/routes/010-about/content.md
60
- ```
61
-
62
- Minimal route page:
63
-
64
- ```md
65
- ---
66
- title: About
67
- description: About this site.
68
- navigation:
69
- label: About
70
- ---
71
-
72
- ## Intro {#intro}
73
-
74
- Text...
75
- ```
76
-
77
- The example above builds to `/about/`.
78
-
79
- ## Navigation
80
-
81
- `navigation` may contain:
82
-
83
- - `include`: optional boolean. Defaults to `true`.
84
- - `label`: optional string. Defaults to `title`.
85
-
86
- Route order comes from the directory prefix. The homepage is always first.
87
-
88
- Current route navigation is intended for small sites. This guidance may change
89
- as route support matures, but the present model is:
90
-
91
- - A single-page site should normally use only page navigation between sections.
92
- - A small multi-page site may use site navigation between routes plus page
93
- navigation between sections on the current page.
94
- - If a site needs many routes, deeply nested routes, or several navigation
95
- levels, it has probably outgrown the current sticky-navigation model and may
96
- need a different site structure or navigation system.
97
-
98
- ## Route Images
99
-
100
- Route images live under the physical route directory:
101
-
102
- ```text
103
- site/routes/010-about/images/intro/image.jpg
104
- ```
105
-
106
- Image references in route content still use only the filename:
107
-
108
- ````md
109
- ```norna-image-stack
110
- - image: image.jpg
111
- alt: Intro image.
112
- ```
113
- ````
114
-
115
- The image directory segment after `images/` should match the section id.
116
- If the section id or route folder changes, run `norna content:check` to find
117
- misplaced images and `norna content:sync` to move unambiguous files into the
118
- expected section folder. `content:sync` can move images between route image
119
- roots when the filename is unambiguous across the site and the move will not
120
- break another reference; these cross-route writes require a clean Git working
121
- tree.
@@ -1,3 +0,0 @@
1
- preset: project
2
- palette: light
3
- sectionSurfaces: [base, soft, emphasis]
@@ -1,16 +0,0 @@
1
- ---
2
- title: Sitewide Content
3
- description: See how Norna keeps shared identity, notices and footer content consistent across routes.
4
- navigation:
5
- label: Home
6
- ---
7
-
8
- ## Shared across the site {#intro}
9
-
10
- This demo separates page content from elements that belong to the site as a
11
- whole. The logo, navigation identity, banners and footer come from shared files
12
- and remain consistent as you move between routes.
13
-
14
- Visit [Identity](/identity/) to inspect the logo and navigation model,
15
- [Notices](/notices/) to inspect the banner stack and dismissal behaviour, and
16
- [Footer](/footer/) to inspect persistent footer content and build information.
@@ -1,20 +0,0 @@
1
- ---
2
- title: Identity
3
- description: See how a convention-based logo and shared identity work across a Norna site.
4
- navigation:
5
- label: Identity
6
- ---
7
-
8
- ## One identity across routes {#identity}
9
-
10
- The logo in the navigation is discovered from `public/logo.svg`. Its alt text
11
- and display height belong to `sitewide-content.yaml`, because the identity is
12
- shared by every route.
13
-
14
- If a site has no logo file, Norna shows the navigation label as text instead. A
15
- route cannot replace the shared navigation identity.
16
-
17
- ## Navigation context {#navigation}
18
-
19
- The route links come from the site's page structure. The shared logo returns to
20
- Home, while the active route is indicated in the same navigation row.
@@ -1,18 +0,0 @@
1
- # Themes
2
-
3
- This feature demo compares Norna's complete built-in theme presets. Every route
4
- uses one preset without overrides, so differences in layout, typography,
5
- palette, surfaces and image presentation come from the preset itself.
6
-
7
- [Live demo](https://janga.github.io/norna/examples/feature-demos/theme-presets/)
8
- |
9
- [View source](https://github.com/janga/norna/tree/main/examples/feature-demos/theme-presets)
10
-
11
- Run it from the repository root:
12
-
13
- ```sh
14
- node bin/norna.mjs --site-dir examples/feature-demos/theme-presets/site dev:local
15
- ```
16
-
17
- The dog photos are CC0 images by Bicanski, sourced from Pixnio. Attribution is
18
- included in the image captions even though the licence does not require it.