@janga/norna 0.7.10 → 0.7.12

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 (476) hide show
  1. package/README.md +120 -106
  2. package/bin/norna-cli.mjs +4 -1
  3. package/docs/README.md +107 -74
  4. package/docs/assets/norna-dog-shelter.jpg +0 -0
  5. package/docs/commands.md +13 -4
  6. package/docs/configuration.md +86 -184
  7. package/docs/content.md +14 -14
  8. package/docs/design/command-organization.md +1 -1
  9. package/docs/design/norna-diagram-design.md +2 -1
  10. package/docs/design/site-examples-structure.md +38 -24
  11. package/docs/engine-development.md +28 -15
  12. package/docs/getting-started.md +141 -124
  13. package/docs/how-to/embedded-site.md +35 -0
  14. package/docs/publishing.md +47 -46
  15. package/docs/requirements.md +54 -0
  16. package/docs/routes.md +3 -2
  17. package/docs/site-structure.md +12 -9
  18. package/docs/sitewide-content.md +2 -1
  19. package/docs/theme.md +104 -34
  20. package/docs/typography.md +32 -17
  21. package/examples/README.md +43 -0
  22. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/sitewide.schema.json +24 -0
  23. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/theme.schema.json +9 -24
  24. package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content.d.ts +9 -1
  25. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -0
  26. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/dev-local.json +2 -2
  27. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +13 -0
  28. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +26 -0
  29. package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +5 -0
  30. package/examples/complete-sites/dog-shelter-multi-page/README.md +16 -0
  31. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +74 -0
  32. package/examples/{typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js} +4 -4
  33. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  34. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_aria-query.js +151 -151
  35. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  36. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_axobject-query.js +131 -131
  37. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  38. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_n_html-escaper.js +1 -1
  39. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  40. package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +10 -10
  41. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  42. package/examples/{typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js} +10 -10
  43. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  44. package/examples/{typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js} +1 -1
  45. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  46. package/examples/{typography-presets/node_modules/.vite/deps/icons-RyebKi45.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js} +1 -1
  47. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  48. package/examples/{typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js} +2 -2
  49. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  50. package/examples/{typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js} +2 -2
  51. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  52. package/examples/{typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js} +10 -10
  53. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  54. package/examples/{typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js} +1 -1
  55. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  56. package/examples/{typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js → complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js} +3 -3
  57. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  58. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +98 -0
  59. package/examples/complete-sites/dog-shelter-multi-page/site/config.md +3 -0
  60. package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/content.md +12 -0
  61. package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +9 -0
  62. package/examples/complete-sites/dog-shelter-multi-page/site/routes/010-dogs/route-content.md +22 -0
  63. package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-multi-page}/site/routes/020-adopt/route-content.md +11 -0
  64. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.md +16 -0
  65. package/examples/complete-sites/dog-shelter-multi-page/site/theme.md +3 -0
  66. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +59 -0
  67. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +138 -0
  68. package/examples/{dog-gallery → complete-sites/dog-shelter-single-page}/.astro/collections/theme.schema.json +151 -68
  69. package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +183 -0
  70. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -0
  71. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +13 -0
  72. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +14 -0
  73. package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +5 -0
  74. package/examples/complete-sites/dog-shelter-single-page/README.md +16 -0
  75. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +74 -0
  76. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
  77. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  78. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  79. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  80. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  81. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  82. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  83. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  84. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  85. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  86. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
  87. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  88. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
  89. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  90. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
  91. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  92. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
  93. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  94. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
  95. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  96. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
  97. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  98. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
  99. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  100. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
  101. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  102. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +50 -0
  103. package/examples/complete-sites/dog-shelter-single-page/site/config.md +3 -0
  104. package/examples/complete-sites/dog-shelter-single-page/site/content.md +34 -0
  105. package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +9 -0
  106. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.md +16 -0
  107. package/examples/complete-sites/dog-shelter-single-page/site/theme.md +3 -0
  108. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +59 -0
  109. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +138 -0
  110. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +755 -0
  111. package/examples/feature-demos/media-and-surfaces/.astro/content-assets.mjs +4 -0
  112. package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +1 -0
  113. package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +183 -0
  114. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -0
  115. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +24 -0
  116. package/examples/feature-demos/media-and-surfaces/.astro/settings.json +5 -0
  117. package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +2 -0
  118. package/examples/feature-demos/media-and-surfaces/README.md +21 -0
  119. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +80 -0
  120. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
  121. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  122. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  123. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  124. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  125. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  126. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  127. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  128. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  129. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  130. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
  131. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  132. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js +1389 -0
  133. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +1 -0
  134. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
  135. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  136. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
  137. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  138. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/package.json +3 -0
  139. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  140. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
  141. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  142. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
  143. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  144. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
  145. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  146. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
  147. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  148. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
  149. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  150. package/examples/{presentation → feature-demos/media-and-surfaces}/site/.norna/generated-images.json +16 -16
  151. package/examples/feature-demos/media-and-surfaces/site/config.md +4 -0
  152. package/examples/feature-demos/media-and-surfaces/site/content.md +18 -0
  153. package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/route-content.md +17 -24
  154. package/examples/{presentation/site/routes/030-surfaces → feature-demos/media-and-surfaces/site/routes/020-surfaces}/route-content.md +1 -1
  155. package/examples/{presentation/site/routes/030-surfaces → feature-demos/media-and-surfaces/site/routes/020-surfaces}/theme.md +1 -0
  156. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.md +6 -0
  157. package/examples/feature-demos/media-and-surfaces/site/theme.md +3 -0
  158. package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +59 -0
  159. package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +138 -0
  160. package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +755 -0
  161. package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +1 -0
  162. package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +1 -0
  163. package/examples/feature-demos/sitewide-content/.astro/content.d.ts +183 -0
  164. package/examples/feature-demos/sitewide-content/.astro/data-store.json +1 -0
  165. package/examples/feature-demos/sitewide-content/.astro/dev.json +13 -0
  166. package/examples/feature-demos/sitewide-content/.astro/dev.log +18 -0
  167. package/examples/feature-demos/sitewide-content/.astro/settings.json +5 -0
  168. package/examples/feature-demos/sitewide-content/.astro/types.d.ts +2 -0
  169. package/examples/feature-demos/sitewide-content/README.md +18 -0
  170. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +74 -0
  171. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +434 -0
  172. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +1 -0
  173. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  174. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  175. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  176. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  177. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  178. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  179. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  180. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  181. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +1534 -0
  182. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +1 -0
  183. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +48 -0
  184. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +1 -0
  185. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +42 -0
  186. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +1 -0
  187. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +3 -0
  188. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  189. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +190 -0
  190. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +1 -0
  191. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +458 -0
  192. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +1 -0
  193. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +1016 -0
  194. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +1 -0
  195. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +32 -0
  196. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +1 -0
  197. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +111 -0
  198. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +1 -0
  199. package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +1 -0
  200. package/examples/feature-demos/sitewide-content/site/config.md +3 -0
  201. package/examples/feature-demos/sitewide-content/site/content.md +16 -0
  202. package/examples/feature-demos/sitewide-content/site/public/logo.svg +6 -0
  203. package/examples/feature-demos/sitewide-content/site/routes/010-identity/route-content.md +20 -0
  204. package/examples/feature-demos/sitewide-content/site/routes/020-notices/route-content.md +22 -0
  205. package/examples/feature-demos/sitewide-content/site/routes/030-footer/route-content.md +17 -0
  206. package/examples/feature-demos/sitewide-content/site/sitewide-content.md +33 -0
  207. package/examples/feature-demos/sitewide-content/site/theme.md +3 -0
  208. package/examples/feature-demos/theme-presets/.astro/collections/site.schema.json +59 -0
  209. package/examples/feature-demos/theme-presets/.astro/collections/sitewide.schema.json +138 -0
  210. package/examples/feature-demos/theme-presets/.astro/collections/theme.schema.json +755 -0
  211. package/examples/feature-demos/theme-presets/.astro/content-assets.mjs +4 -0
  212. package/examples/feature-demos/theme-presets/.astro/content-modules.mjs +1 -0
  213. package/examples/{typography-presets → feature-demos/theme-presets}/.astro/data-store.json +1 -1
  214. package/examples/feature-demos/theme-presets/.astro/dev-local.json +8 -0
  215. package/examples/{typography-presets → feature-demos/theme-presets}/.astro/dev.json +2 -2
  216. package/examples/feature-demos/theme-presets/.astro/dev.log +164 -0
  217. package/examples/feature-demos/theme-presets/.astro/types.d.ts +2 -0
  218. package/examples/feature-demos/theme-presets/README.md +18 -0
  219. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/package.json +3 -0
  220. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  221. package/examples/{typography-presets → feature-demos/theme-presets}/site/.norna/generated-images.json +45 -45
  222. package/examples/feature-demos/theme-presets/site/config.md +3 -0
  223. package/examples/feature-demos/theme-presets/site/content.md +17 -0
  224. package/examples/feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio/shepherd-portrait.jpg +0 -0
  225. package/examples/feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio/white-puppy.jpg +0 -0
  226. package/examples/{typography-presets/site/routes/010-quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio}/route-content.md +8 -8
  227. package/examples/feature-demos/theme-presets/site/routes/010-portfolio/theme.md +3 -0
  228. package/examples/feature-demos/theme-presets/site/routes/020-documentation/images/documentation/retriever-portrait.jpg +0 -0
  229. package/examples/{typography-presets/site/routes/020-compact-gallery → feature-demos/theme-presets/site/routes/020-documentation}/route-content.md +8 -8
  230. package/examples/feature-demos/theme-presets/site/routes/020-documentation/theme.md +3 -0
  231. package/examples/feature-demos/theme-presets/site/routes/030-project/images/project/boxer-portrait.jpg +0 -0
  232. package/examples/feature-demos/theme-presets/site/routes/030-project/images/project/grass-puppy.jpg +0 -0
  233. package/examples/{typography-presets/site/routes/030-text-forward → feature-demos/theme-presets/site/routes/030-project}/route-content.md +8 -8
  234. package/examples/feature-demos/theme-presets/site/routes/030-project/theme.md +3 -0
  235. package/examples/feature-demos/theme-presets/site/routes/040-statement/images/statement/sheepdog-grass.jpg +0 -0
  236. package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/route-content.md +3 -3
  237. package/examples/feature-demos/theme-presets/site/routes/040-statement/theme.md +3 -0
  238. package/examples/{typography-presets → feature-demos/theme-presets}/site/sitewide-content.md +1 -1
  239. package/examples/feature-demos/theme-presets/site/theme.md +3 -0
  240. package/fixtures/basic/site/config.md +3 -0
  241. package/fixtures/content-model-v2/site/config.md +3 -0
  242. package/package.json +17 -8
  243. package/scripts/build-pages.mjs +69 -0
  244. package/scripts/check-config.mjs +3 -11
  245. package/scripts/deploy-site.mjs +12 -8
  246. package/scripts/export-theme-preset.mjs +31 -0
  247. package/scripts/init-site.mjs +1 -0
  248. package/scripts/lib/example-sites.mjs +37 -0
  249. package/scripts/lib/github-repository.mjs +44 -0
  250. package/scripts/lib/norna-markdown-blocks.mjs +97 -10
  251. package/scripts/lib/presentation.mjs +6 -5
  252. package/scripts/lib/project-config.mjs +114 -124
  253. package/scripts/lib/site-content.mjs +9 -2
  254. package/scripts/lib/site-paths.mjs +6 -2
  255. package/scripts/lib/theme-config.mjs +3 -0
  256. package/scripts/lib/theme-presets.mjs +209 -0
  257. package/scripts/show-typography.mjs +6 -5
  258. package/scripts/test-client-javascript.mjs +236 -0
  259. package/scripts/test-content-check.mjs +103 -0
  260. package/scripts/test-content-model-v2.mjs +9 -13
  261. package/scripts/test-documentation.mjs +116 -0
  262. package/scripts/test-engine-commands.mjs +13 -3
  263. package/scripts/test-examples.mjs +24 -0
  264. package/scripts/test-navigation.mjs +73 -45
  265. package/scripts/test-package-check.mjs +17 -9
  266. package/scripts/test-project-config.mjs +130 -0
  267. package/scripts/test-temporary-visibility.mjs +3 -10
  268. package/scripts/test-theme-presets.mjs +146 -0
  269. package/scripts/watch-pages-deploy.mjs +15 -11
  270. package/src/components/GalleryGrid.astro +30 -230
  271. package/src/components/ImageCarousel.astro +184 -0
  272. package/src/components/MobileSectionNavigationScript.astro +14 -0
  273. package/src/components/NornaSmoothScrollScript.astro +250 -0
  274. package/src/components/SiteNavigation.astro +58 -341
  275. package/src/components/SiteNotesScript.astro +43 -0
  276. package/src/components/SitePage.astro +6 -3
  277. package/src/components/SiteSection.astro +4 -47
  278. package/src/content.config.ts +2 -0
  279. package/src/layouts/BaseLayout.astro +1 -1
  280. package/src/lib/galleryImages.ts +53 -0
  281. package/src/styles/global.css +83 -1
  282. package/starters/basic/.github/workflows/deploy.yml +1 -2
  283. package/starters/basic/README.md +10 -8
  284. package/starters/basic/package.json +1 -0
  285. package/starters/basic/site/config.md +3 -0
  286. package/starters/project/.github/workflows/deploy.yml +1 -2
  287. package/starters/project/README.md +3 -4
  288. package/starters/project/package.json +1 -0
  289. package/starters/project/site/config.md +3 -0
  290. package/examples/001-dog-shelter-single-page/README.md +0 -9
  291. package/examples/001-dog-shelter-single-page/site/config.mjs +0 -27
  292. package/examples/001-dog-shelter-single-page/site/content.md +0 -38
  293. package/examples/001-dog-shelter-single-page/site/images/what-we-do/dog-house.svg +0 -25
  294. package/examples/001-dog-shelter-single-page/site/images/you-can-help/heart.svg +0 -13
  295. package/examples/001-dog-shelter-single-page/site/sitewide-content.md +0 -6
  296. package/examples/001-dog-shelter-single-page/site/theme.md +0 -25
  297. package/examples/002-dog-shelter-multi-page/README.md +0 -9
  298. package/examples/002-dog-shelter-multi-page/site/config.mjs +0 -27
  299. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +0 -19
  300. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +0 -19
  301. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/route-content.md +0 -30
  302. package/examples/002-dog-shelter-multi-page/site/sitewide-content.md +0 -6
  303. package/examples/002-dog-shelter-multi-page/site/theme.md +0 -25
  304. package/examples/dog-gallery/.astro/collections/site.schema.json +0 -776
  305. package/examples/dog-gallery/.astro/data-store.json +0 -1
  306. package/examples/dog-gallery/.astro/dev-local.json +0 -8
  307. package/examples/dog-gallery/.astro/dev.json +0 -13
  308. package/examples/dog-gallery/.astro/dev.log +0 -95
  309. package/examples/dog-gallery/.astro/settings.json +0 -5
  310. package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +0 -1
  311. package/examples/dog-gallery/dist/_astro/SitePage.DicGh_5N.css +0 -1
  312. package/examples/dog-gallery/dist/dog-care/index.html +0 -15
  313. package/examples/dog-gallery/dist/dog-shelter-logo.svg +0 -14
  314. package/examples/dog-gallery/dist/favicon.svg +0 -7
  315. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
  316. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
  317. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
  318. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
  319. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
  320. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
  321. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
  322. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
  323. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
  324. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
  325. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
  326. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
  327. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
  328. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
  329. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
  330. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
  331. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
  332. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
  333. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
  334. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
  335. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
  336. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
  337. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
  338. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
  339. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
  340. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
  341. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
  342. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
  343. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
  344. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
  345. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
  346. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
  347. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
  348. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
  349. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
  350. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
  351. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
  352. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
  353. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
  354. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
  355. package/examples/dog-gallery/dist/index.html +0 -45
  356. package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +0 -74
  357. package/examples/dog-gallery/site/.norna/generated-images.json +0 -226
  358. package/examples/dog-gallery/site/config.mjs +0 -47
  359. package/examples/dog-gallery/site/content.md +0 -127
  360. package/examples/dog-gallery/site/images/black-dogs/black-puppy-meadow.png +0 -0
  361. package/examples/dog-gallery/site/images/black-dogs/photo-of-a-black-dog.jpg +0 -0
  362. package/examples/dog-gallery/site/images/brown-dogs/brown-dog.jpg +0 -0
  363. package/examples/dog-gallery/site/images/brown-dogs/dog-accompanies-master.jpg +0 -0
  364. package/examples/dog-gallery/site/images/golden-dogs/golden-retriever.jpg +0 -0
  365. package/examples/dog-gallery/site/images/golden-dogs/toller-puppy.jpg +0 -0
  366. package/examples/dog-gallery/site/images/white-dogs/white-cute-dog.jpg +0 -0
  367. package/examples/dog-gallery/site/images/white-dogs/white-puppy-garden.png +0 -0
  368. package/examples/dog-gallery/site/public/favicon.svg +0 -7
  369. package/examples/dog-gallery/site/public/logo.svg +0 -14
  370. package/examples/dog-gallery/site/routes/010-dog-care/route-content.md +0 -38
  371. package/examples/dog-gallery/site/sitewide-content.md +0 -16
  372. package/examples/dog-gallery/site/theme.md +0 -101
  373. package/examples/presentation/README.md +0 -15
  374. package/examples/presentation/site/config.mjs +0 -29
  375. package/examples/presentation/site/content.md +0 -67
  376. package/examples/presentation/site/public/robots.txt +0 -2
  377. package/examples/presentation/site/routes/010-presets/route-content.md +0 -63
  378. package/examples/presentation/site/routes/010-presets/theme.md +0 -4
  379. package/examples/presentation/site/routes/020-media/theme.md +0 -4
  380. package/examples/presentation/site/sitewide-content.md +0 -6
  381. package/examples/presentation/site/theme.md +0 -43
  382. package/examples/typography-presets/.astro/dev.log +0 -45
  383. package/examples/typography-presets/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  384. package/examples/typography-presets/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  385. package/examples/typography-presets/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  386. package/examples/typography-presets/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  387. package/examples/typography-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  388. package/examples/typography-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  389. package/examples/typography-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  390. package/examples/typography-presets/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  391. package/examples/typography-presets/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  392. package/examples/typography-presets/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  393. package/examples/typography-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  394. package/examples/typography-presets/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  395. package/examples/typography-presets/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  396. package/examples/typography-presets/site/config.mjs +0 -29
  397. package/examples/typography-presets/site/content.md +0 -16
  398. package/examples/typography-presets/site/routes/010-quiet-gallery/theme.md +0 -4
  399. package/examples/typography-presets/site/routes/020-compact-gallery/theme.md +0 -4
  400. package/examples/typography-presets/site/routes/030-text-forward/theme.md +0 -4
  401. package/examples/typography-presets/site/routes/040-statement/theme.md +0 -4
  402. package/examples/typography-presets/site/theme.md +0 -43
  403. package/fixtures/basic/site/config.mjs +0 -27
  404. package/fixtures/content-model-v2/site/config.mjs +0 -11
  405. package/starters/basic/site/config.mjs +0 -27
  406. package/starters/project/site/config.mjs +0 -30
  407. /package/examples/{typography-presets → complete-sites/dog-shelter-multi-page}/.astro/collections/site.schema.json +0 -0
  408. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content-assets.mjs +0 -0
  409. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/content-modules.mjs +0 -0
  410. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/.astro/types.d.ts +0 -0
  411. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/package.json +0 -0
  412. /package/examples/{dog-gallery → complete-sites/dog-shelter-multi-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  413. /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery/retriever-portrait.jpg → complete-sites/dog-shelter-multi-page/site/images/intro/shelter-dog.jpg} +0 -0
  414. /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-multi-page}/site/public/favicon.svg +0 -0
  415. /package/examples/{001-dog-shelter-single-page → complete-sites/dog-shelter-multi-page}/site/public/robots.txt +0 -0
  416. /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/white-puppy.jpg → complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.jpg} +0 -0
  417. /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward/boxer-portrait.jpg → complete-sites/dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.jpg} +0 -0
  418. /package/examples/{typography-presets/site/routes/040-statement/images/statement/sheepdog-grass.jpg → complete-sites/dog-shelter-multi-page/site/routes/020-adopt/images/adopt/adoption-dog.jpg} +0 -0
  419. /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/content-assets.mjs +0 -0
  420. /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/content-modules.mjs +0 -0
  421. /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/.astro/types.d.ts +0 -0
  422. /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/node_modules/.vite/deps/package.json +0 -0
  423. /package/examples/{typography-presets → complete-sites/dog-shelter-single-page}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  424. /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward/grass-puppy.jpg → complete-sites/dog-shelter-single-page/site/images/what-we-do/rescue-dog.jpg} +0 -0
  425. /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery/shepherd-portrait.jpg → complete-sites/dog-shelter-single-page/site/images/you-can-help/foster-dog.jpg} +0 -0
  426. /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-single-page}/site/public/favicon.svg +0 -0
  427. /package/examples/{002-dog-shelter-multi-page → complete-sites/dog-shelter-single-page}/site/public/robots.txt +0 -0
  428. /package/examples/{dog-gallery/dist → feature-demos/media-and-surfaces/site/public}/robots.txt +0 -0
  429. /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-carousel.svg +0 -0
  430. /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-stack.svg +0 -0
  431. /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/cards/card-surfaces.svg +0 -0
  432. /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-one.svg +0 -0
  433. /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-three.svg +0 -0
  434. /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/carousel/carousel-two.svg +0 -0
  435. /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/stack/stack-one.svg +0 -0
  436. /package/examples/{presentation/site/routes/020-media → feature-demos/media-and-surfaces/site/routes/010-media}/images/stack/stack-two.svg +0 -0
  437. /package/examples/{dog-gallery → feature-demos/sitewide-content}/site/public/robots.txt +0 -0
  438. /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/collections/routeTheme.schema.json +0 -0
  439. /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/content.d.ts +0 -0
  440. /package/examples/{typography-presets → feature-demos/theme-presets}/.astro/settings.json +0 -0
  441. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/_metadata.json +0 -0
  442. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
  443. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
  444. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
  445. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
  446. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
  447. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
  448. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
  449. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
  450. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
  451. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
  452. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
  453. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
  454. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/embla-carousel.js +0 -0
  455. /package/examples/{typography-presets → feature-demos/theme-presets}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
  456. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
  457. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
  458. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
  459. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
  460. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
  461. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
  462. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
  463. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
  464. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
  465. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
  466. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
  467. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
  468. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
  469. /package/examples/{dog-gallery → feature-demos/theme-presets}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
  470. /package/examples/{typography-presets → feature-demos/theme-presets}/site/public/robots.txt +0 -0
  471. /package/examples/{typography-presets/site/routes/010-quiet-gallery/images/quiet-gallery → feature-demos/theme-presets/site/routes/010-portfolio/images/portfolio}/puppy-portrait.jpg +0 -0
  472. /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/black-schnauzer.jpg +0 -0
  473. /package/examples/{typography-presets/site/routes/020-compact-gallery/images/compact-gallery → feature-demos/theme-presets/site/routes/020-documentation/images/documentation}/schnauzer-portrait.jpg +0 -0
  474. /package/examples/{typography-presets/site/routes/030-text-forward/images/text-forward → feature-demos/theme-presets/site/routes/030-project/images/project}/grey-street-dog.jpg +0 -0
  475. /package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/images/statement/black-pedigree.jpg +0 -0
  476. /package/examples/{typography-presets → feature-demos/theme-presets}/site/routes/040-statement/images/statement/sheepdog-wide.jpg +0 -0
@@ -1,171 +1,188 @@
1
- # Getting Started
1
+ # Build Your First Norna Site
2
2
 
3
- This guide creates a new site repository from the included starter. It describes
4
- the generic `norna` setup; site-specific content belongs in the new site
5
- repository.
3
+ This tutorial takes the shortest path from an empty directory to a running,
4
+ edited, and verified Norna site. Follow the steps in order. Installation time
5
+ depends on your npm connection, but the site work itself should take about five
6
+ minutes.
6
7
 
7
- ## Requirements
8
+ At the end you will have:
8
9
 
9
- - Node.js `>=22.12.0`
10
- - ImageMagick for image generation
11
- - GitHub CLI (`gh`) for deploy checks and deploy monitoring
10
+ - a standalone site project with a pinned Norna version,
11
+ - a homepage with your own content and navigation,
12
+ - a complete visual preset,
13
+ - validated source files and a static build in `dist/`.
12
14
 
13
- Install Playwright Chromium only when you plan to run navigation diagnostics:
15
+ ## Before You Start
14
16
 
15
- ```sh
16
- npx playwright install chromium
17
- ```
17
+ You need:
18
+
19
+ - Node.js `22.12` or later,
20
+ - npm, which is included with Node.js,
21
+ - a terminal and a text editor.
18
22
 
19
- ## Create A Site
23
+ ImageMagick is needed when you add raster images that Norna should process. It
24
+ is not needed to make the text-only first edit in this tutorial. GitHub CLI and
25
+ Playwright are not required.
20
26
 
21
- ### Standalone Site
27
+ See [Requirements and limitations](requirements.md) for platform details and
28
+ the current product boundaries.
22
29
 
23
- Use a standalone setup when the website is its own project. Create the site
24
- from the starter first, then install dependencies inside the new site
25
- directory:
30
+ ## 1. Create And Run The Site
31
+
32
+ Run these commands from the directory where you keep projects:
26
33
 
27
34
  ```sh
28
- cd path/to/your/projects
29
35
  npx @janga/norna@latest init my-site
30
36
  cd my-site
31
37
  npm install
32
38
  npm run dev
33
39
  ```
34
40
 
35
- After `npm install`, the project's npm scripts use the project-local `norna`
36
- binary from `node_modules/.bin`. A globally installed `norna` can also be used
37
- as a convenience launcher; inside a project with an installed `@janga/norna`
38
- dependency, it delegates to the project's local version.
41
+ `init` creates the project before `npm install` runs. The generated
42
+ `package.json` pins the Norna engine version so this project keeps using the
43
+ same version until you update it deliberately.
39
44
 
40
- A freshly created empty directory is not a `norna` site yet. It becomes a
41
- site when `init` copies the starter files, including `package.json`. If you run
42
- `npm install` in an empty directory, npm may walk up to a parent directory and
43
- install dependencies for another project instead.
45
+ ### Checkpoint: The Starter Is Visible
44
46
 
45
- For normal site work, keep site repositories as siblings of the `norna`
46
- engine repository. For example:
47
+ Open the URL printed by the development server. It is normally
48
+ `http://localhost:4321/`, but Norna uses another available port when necessary.
49
+ You should see the starter homepage and its section navigation.
47
50
 
48
- ```text
49
- Projects/
50
- norna/
51
- my-site/
51
+ Leave the development server running while you complete the next steps.
52
+
53
+ ## 2. Replace The Homepage Content
54
+
55
+ Replace `site/content.md` with:
56
+
57
+ ```md
58
+ ---
59
+ title: My first Norna site
60
+ description: A website built from plain files.
61
+ ---
62
+
63
+ ## Welcome {#welcome}
64
+
65
+ This page is written in Markdown. Norna provides its layout and navigation.
66
+
67
+ ## Next {#next}
68
+
69
+ Edit this file while the development server is running and the browser updates.
52
70
  ```
53
71
 
54
- The starter contains:
72
+ Each `##` heading is a page section. Its explicit `{#section-id}` gives the
73
+ section a stable identity and is required by Norna.
55
74
 
56
- - `package.json` with npm scripts that call `norna`
57
- - `.github/workflows/deploy.yml` for GitHub Pages
58
- - `site/config.mjs`
59
- - `site/theme.md`
60
- - `site/sitewide-content.md`
61
- - `site/content.md`
62
- - `site/public/robots.txt`
75
+ ### Checkpoint: Content And Navigation Update
63
76
 
64
- Commit the generated `package-lock.json` after the first install.
77
+ Return to the browser. The page should now contain `Welcome` and `Next`, and
78
+ the single-page navigation should link to those two sections. You should not
79
+ need to restart the server.
65
80
 
66
- ### Embedded Site
81
+ ## 3. Set The Shared Brand
67
82
 
68
- Use an embedded setup when a Norna site should live inside an existing Node or
69
- GitHub project:
83
+ Replace `site/sitewide-content.md` with:
70
84
 
71
- ```sh
72
- cd existing-project
73
- npx @janga/norna@latest init . --type embedded --site-dir presentation
74
- npm install
75
- npm run norna:dev
85
+ ```yaml
86
+ ---
87
+ navigation:
88
+ brand: My first Norna site
89
+ footer:
90
+ copyrightMessage: My first Norna site.
91
+ ---
92
+ ```
93
+
94
+ The brand and footer are site-wide content rather than page sections. If you
95
+ add routes later, they inherit these values.
96
+
97
+ ### Checkpoint: The Brand Is Shared
98
+
99
+ The navigation should now display `My first Norna site`. The footer should show
100
+ the new message.
101
+
102
+ ## 4. Choose A Complete Theme
103
+
104
+ Replace `site/theme.md` with:
105
+
106
+ ```yaml
107
+ ---
108
+ preset: project
109
+ ---
76
110
  ```
77
111
 
78
- The command looks different because the target is different. `.` means "add
79
- Norna to the current project" instead of creating a new directory.
80
- `--site-dir presentation` tells Norna to manage `presentation/` as the site
81
- directory instead of the default `site/`.
82
-
83
- Embedded setup keeps the surrounding project structure. It adds namespaced
84
- `norna:*` scripts so Norna does not take over the project's normal `build`,
85
- `test`, or deploy scripts.
86
-
87
- Relevant documentation: [Commands](commands.md), [Site Structure](site-structure.md).
88
-
89
- ## First Edits
90
-
91
- 1. Edit `site/config.mjs` for the site's URL, language labels, GitHub
92
- repository, and deploy settings.
93
- 2. Edit `site/sitewide-content.md` for the shared brand or logo, banners and
94
- footer content.
95
- 3. Edit `site/theme.md` for site-wide layout, layout density, typography
96
- rhythm, image sizing, font, typography preset, palettes, and section
97
- surfaces, or omit it to use engine defaults.
98
- 4. Edit `site/content.md` for homepage title, description, Markdown sections,
99
- text, Norna managed media blocks, alt text, and captions.
100
- 5. Put source images under `site/images/<section-id>/`, where `<section-id>`
101
- matches a `## Section {#section-id}` heading in `site/content.md`.
102
- 6. Add optional route pages under
103
- `site/routes/<NNN-route-id>/route-content.md`, for example
104
- `site/routes/010-about/route-content.md`.
105
- 7. Put static files such as `robots.txt`, `CNAME`, and favicons under
106
- `site/public/`.
107
- 8. Run:
112
+ The preset supplies coordinated layout, typography, spacing, image sizing,
113
+ palette, and section surfaces. Add overrides only when a real site needs to
114
+ differ from the preset.
115
+
116
+ ### Checkpoint: The Preset Is Active
117
+
118
+ The browser should refresh with the `project` presentation. Your content files
119
+ remain unchanged because presentation belongs in `theme.md`.
120
+
121
+ ## 5. Check And Build
122
+
123
+ Open another terminal in `my-site` and run:
108
124
 
109
125
  ```sh
110
- npm run norna:config:check
111
- npm run norna:content:check
112
- npm run norna:sync
113
126
  npm run norna:check
114
127
  npm run build
115
128
  ```
116
129
 
117
- `norna:sync` moves misplaced referenced image files when the intended move is
118
- unambiguous. It can move images between sections and routes, but cross-route
119
- writes require a clean Git working tree so the operation is easy to roll back.
120
- Publishing is normally done by committing the site files and pushing them with
121
- Git; the starter GitHub Pages workflow runs the required checks before
122
- publishing.
130
+ The check should complete without errors. The build should create:
123
131
 
124
- Relevant documentation: [Content](content.md), [Theme](theme.md),
125
- [Typography](typography.md), [Routes](routes.md), [Images And Metadata](images-and-metadata.md).
132
+ ```text
133
+ dist/
134
+ ```
126
135
 
127
- ## Configure The Public URL
136
+ `dist/` is generated output. Continue editing the files under `site/`; do not
137
+ edit the built HTML as the source of the website.
128
138
 
129
- For a custom domain or any site published at the web root, use:
139
+ ### Checkpoint: The Source Produces A Clean Build
130
140
 
131
- ```js
132
- site: {
133
- url: 'https://example.com/',
134
- basePath: '/',
135
- }
136
- ```
141
+ Confirm that both commands exit successfully and that `dist/index.html`
142
+ exists. You now have a complete local Norna workflow: edit, preview, check, and
143
+ build.
144
+
145
+ ## What To Do Next
137
146
 
138
- For a GitHub Pages project site without a custom domain, the site is served
139
- under the repository name. Configure both values:
147
+ - [Add and manage images](content.md#managed-media-blocks)
148
+ - [Add another page](routes.md)
149
+ - [Inspect and adjust the theme](theme.md)
150
+ - [Configure the public URL](configuration.md)
151
+ - [Publish with GitHub Pages](publishing.md)
152
+ - [Browse complete and focused examples](../examples/README.md)
140
153
 
141
- ```js
142
- site: {
143
- url: 'https://owner.github.io/repository-name/',
144
- basePath: '/repository-name/',
145
- }
154
+ To add Norna inside an existing Node project instead of creating a standalone
155
+ site, see [Add an embedded site](how-to/embedded-site.md).
156
+
157
+ The [documentation map](README.md) separates task guides, explanation, and
158
+ reference so you can continue from the kind of question you have.
159
+
160
+ ## Common First Problems
161
+
162
+ ### The Default Port Is Occupied
163
+
164
+ Start the development server with:
165
+
166
+ ```sh
167
+ npm run dev -- --kill
146
168
  ```
147
169
 
148
- After that, content files may still use root-style internal links such as
149
- `/getting-started/` and `/favicon.svg`. Norna applies `site.basePath` during
150
- rendering so the built links work under the GitHub Pages project path.
170
+ This tells Norna to stop the process occupying its standard port before
171
+ starting. The separator `--` is required so npm forwards `--kill` to Norna.
172
+
173
+ ### Images Fail During Checking Or Building
151
174
 
152
- The starter includes a GitHub Pages workflow in `.github/workflows/deploy.yml`.
153
- In the GitHub repository settings, configure Pages to build from GitHub
154
- Actions.
175
+ Install ImageMagick and confirm that either `magick` or the older `identify`
176
+ and `convert` commands are available. Then rerun the failed command.
155
177
 
156
- Relevant documentation: [Configuration](configuration.md), [Publishing](publishing.md).
178
+ ### The Page Reports Invalid Content
157
179
 
158
- Read [Site Structure](site-structure.md), [Content](content.md),
159
- [Theme](theme.md), [Typography](typography.md), [Routes](routes.md), and
160
- [Configuration](configuration.md) before publishing a real site.
180
+ Run:
161
181
 
162
- To change the site's maximum page width, side gutters, layout density,
163
- typography rhythm, image width, image height limits, font, palettes, or
164
- site-wide typography preset, edit `site/theme.md`. See [Theme](theme.md) for
165
- the accepted shape.
182
+ ```sh
183
+ npm run norna:content:check
184
+ ```
166
185
 
167
- To give a route a different visual expression, add a complete route-local
168
- `theme.md`. See [Theme](theme.md#route-themes) and [Typography](typography.md).
169
- Use `norna typography presets` to inspect the installed preset and rhythm values
170
- and `norna typography show` to inspect the resolved typography for the selected
171
- site.
186
+ Read all reported issues before editing. Norna reports file and line context
187
+ for invalid sections and managed content blocks. See [Content](content.md) for
188
+ the accepted Markdown forms.
@@ -0,0 +1,35 @@
1
+ # Add Norna To An Existing Project
2
+
3
+ Use embedded setup when the website should live inside an existing Node
4
+ project rather than in its own repository.
5
+
6
+ From the existing project root, run:
7
+
8
+ ```sh
9
+ npx @janga/norna@latest init . --type embedded --site-dir presentation
10
+ npm install
11
+ npm run norna:dev
12
+ ```
13
+
14
+ The arguments are intentionally different from standalone setup:
15
+
16
+ - `.` means that Norna should update the current project instead of creating a
17
+ new project directory.
18
+ - `--type embedded` preserves the surrounding project's role and scripts.
19
+ - `--site-dir presentation` puts the site source in `presentation/` instead of
20
+ the default `site/` directory.
21
+
22
+ Embedded setup adds `@janga/norna` as a project dependency and adds namespaced
23
+ `norna:*` npm scripts. It refuses to overwrite conflicting scripts or a
24
+ non-empty target site directory.
25
+
26
+ The surrounding project keeps its normal `build`, `test`, and deploy commands.
27
+ Use the added commands for the embedded site:
28
+
29
+ ```sh
30
+ npm run norna:check
31
+ npm run norna:build
32
+ ```
33
+
34
+ See [Commands](../commands.md) for the complete script list and
35
+ [Site Structure](../site-structure.md) for source and generated files.
@@ -1,52 +1,47 @@
1
1
  # Publishing
2
2
 
3
- Publishing is site-specific. The generic deploy commands read repository,
4
- branch, workflow, watch, and public URL settings from the selected site's
5
- `site/config.mjs`.
3
+ Norna includes a GitHub Pages workflow and deploy helpers. The public URL is
4
+ declared in `site/config.md`; repository and default branch are discovered from
5
+ GitHub when a deploy command runs.
6
6
 
7
7
  Do not run deploy commands from the engine repository unless you deliberately
8
- want to test the demo configuration.
8
+ want to deploy the documentation site.
9
9
 
10
10
  ## GitHub Pages Workflow
11
11
 
12
- Each site repository should own its `.github/workflows/deploy.yml`. The starter
13
- workflow:
12
+ Each site repository owns `.github/workflows/deploy.yml`. The starter workflow:
14
13
 
15
- 1. checks out the site repository,
16
- 2. sets up Node,
17
- 3. installs image tools,
14
+ 1. runs for the repository's default branch,
15
+ 2. checks out the site repository,
16
+ 3. sets up Node and image tools,
18
17
  4. restores the generated image cache,
19
- 5. runs `npm ci`,
20
- 6. runs `npm run build` in the starter, which aliases
21
- `npm run norna:build`,
22
- 7. uploads `dist/`,
23
- 8. deploys to GitHub Pages.
18
+ 5. runs `npm ci` and `npm run build`,
19
+ 6. uploads `dist/`,
20
+ 7. deploys the artifact to GitHub Pages.
24
21
 
25
- Site-specific static files such as `site/public/CNAME`, `robots.txt`, and
22
+ In the GitHub repository settings, set Pages to build from GitHub Actions.
23
+ Site-specific public files such as `site/public/CNAME`, `robots.txt` and
26
24
  `sitemap.xml` belong in the site repository.
27
25
 
28
- In the GitHub repository settings, set Pages to build from GitHub Actions. For
29
- a project site without a custom domain, configure the site URL and base path in
30
- `site/config.mjs`:
26
+ For a project site without a custom domain, include the repository path in
27
+ `site/config.md`:
31
28
 
32
- ```js
33
- site: {
34
- url: 'https://owner.github.io/repository-name/',
35
- basePath: '/repository-name/',
36
- }
29
+ ```yaml
30
+ ---
31
+ url: https://owner.github.io/repository-name/
32
+ ---
37
33
  ```
38
34
 
39
- For a custom domain, keep `basePath` as `/`:
35
+ For a custom domain or root-hosted site:
40
36
 
41
- ```js
42
- site: {
43
- url: 'https://example.com/',
44
- basePath: '/',
45
- }
37
+ ```yaml
38
+ ---
39
+ url: https://example.com/
40
+ ---
46
41
  ```
47
42
 
48
- Norna uses `site.basePath` for generated internal page links, favicons,
49
- generated images, and root-relative links or images written in Markdown.
43
+ Norna derives the base path from the URL pathname and applies it to generated
44
+ internal links, favicons, managed images and root-relative Markdown links.
50
45
 
51
46
  ## Deploy An Already Committed Branch
52
47
 
@@ -56,16 +51,17 @@ Use:
56
51
  npm run norna:deploy
57
52
  ```
58
53
 
59
- The deploy command:
54
+ The command requires an authenticated GitHub CLI. It asks GitHub for the
55
+ current repository and its default branch, then:
60
56
 
61
- - requires the current branch to equal `github.branch`,
62
- - requires a clean worktree before build,
57
+ - requires the current branch to be that default branch,
58
+ - requires a clean worktree before the build,
63
59
  - fetches `origin`,
64
60
  - refuses to proceed when the branch is behind or diverged,
65
61
  - runs the full build,
66
62
  - requires the build to leave the worktree clean,
67
- - pushes only when the local branch is ahead of `origin/<branch>`,
68
- - checks the configured GitHub Pages workflow.
63
+ - pushes only when local `HEAD` is ahead of the remote branch,
64
+ - checks the included `deploy.yml` GitHub Pages workflow.
69
65
 
70
66
  It does not create commits or push uncommitted changes.
71
67
 
@@ -77,11 +73,11 @@ The older convenience flow remains available:
77
73
  npm run norna:deploy:commit -- "Commit message"
78
74
  ```
79
75
 
80
- It builds, stages only allowed site changes, commits, pushes, and checks Pages.
81
- The allowlist is implemented in `scripts/deploy-site.mjs` and includes the
82
- site content file, selected config/static files, expected generated images,
83
- generated image manifest, package files, `tsconfig.json`, `astro.config.mjs`,
84
- and `src/` changes.
76
+ It discovers the same repository/default branch, builds, stages only allowed
77
+ site changes, commits, pushes and checks Pages. The allowlist is implemented in
78
+ `scripts/deploy-site.mjs` and includes site content and configuration, expected
79
+ managed images and generated image state, public files, package files and
80
+ renderer source changes.
85
81
 
86
82
  ## Watch A Deploy
87
83
 
@@ -91,14 +87,19 @@ Use:
91
87
  npm run norna:deploy:watch
92
88
  ```
93
89
 
94
- By default it monitors the workflow run for the current `HEAD` on the configured
95
- branch and repository. Useful one-run overrides include:
90
+ By default it monitors `deploy.yml` for the current `HEAD` in the discovered
91
+ repository and default branch. Useful one-run overrides include:
96
92
 
97
93
  ```sh
98
94
  npm run norna:deploy:watch -- --timeout 20m --interval 5s
99
95
  npm run norna:deploy:watch -- --sha <commit-sha>
96
+ npm run norna:deploy:watch -- --repo owner/name --branch main
100
97
  ```
101
98
 
102
- The monitor prints the run id, run URL, Actions URL, branch, commit SHA, status,
103
- and configured public site URL. On failures it fetches failed job details and a
104
- log excerpt.
99
+ The default poll interval is 10 seconds, timeout is 15 minutes and recent-run
100
+ limit is 10. `--workflow`, `--site-url` and `--limit` provide further one-run
101
+ overrides; these operational values do not belong in `config.md`.
102
+
103
+ The monitor prints the run id, run URL, Actions URL, branch, commit SHA, status
104
+ and public site URL. On failures it fetches failed job details and a log
105
+ excerpt.
@@ -0,0 +1,54 @@
1
+ # Requirements And Limitations
2
+
3
+ This page separates requirements for ordinary site work from optional tooling
4
+ and current product boundaries.
5
+
6
+ ## Required For Every Site
7
+
8
+ - Node.js `22.12.0` or later.
9
+ - npm or another package manager capable of installing the project-local
10
+ `@janga/norna` dependency. Generated standalone sites use npm scripts and a
11
+ committed `package-lock.json` by default.
12
+ - A terminal and a text editor.
13
+
14
+ ## Required For Managed Raster Images
15
+
16
+ ImageMagick is required when Norna reads raster image dimensions or generates
17
+ responsive raster variants. Norna accepts either the current `magick` command
18
+ or the older `identify` and `convert` commands.
19
+
20
+ Static SVG images with an intrinsic aspect ratio are rendered directly and do
21
+ not need raster variants. See [Images and Metadata](images-and-metadata.md) for
22
+ the supported managed-image behavior.
23
+
24
+ ## Optional Tools
25
+
26
+ - Git is strongly recommended for reviewing and restoring site changes. It is
27
+ used by the normal commit-and-push publishing workflow.
28
+ - GitHub CLI (`gh`) is needed only for Norna's deploy status and monitoring
29
+ helpers.
30
+ - Playwright Chromium is needed only for navigation diagnostics used while
31
+ developing the Norna engine.
32
+
33
+ Neither GitHub CLI nor Playwright is required to edit, preview, check, or build
34
+ an ordinary Norna site.
35
+
36
+ ## Current Product Boundaries
37
+
38
+ - Norna builds generated static output into `dist/`.
39
+ - GitHub Pages is the only publishing provider with an included integration.
40
+ Other static hosts can serve the generated files, but Norna does not
41
+ currently configure or publish to them.
42
+ - Norna provides its own site model and presentation layer. A project does not
43
+ supply custom page templates, component trees, or rendering logic through
44
+ the normal site interface.
45
+ - Norna is intended for content-driven websites. Dynamic applications,
46
+ database-backed publishing, and visual CMS editing are outside its current
47
+ scope.
48
+ - Norna is pre-1.0. Breaking changes to files, configuration, and commands may
49
+ occur between releases and should be reviewed before updating a project.
50
+
51
+ These constraints are part of the product's current scope, not hidden setup
52
+ steps. Start with [the tutorial](getting-started.md), and use
53
+ [`norna engine:version`](commands.md#command-summary) to inspect the version
54
+ installed by an existing project.
package/docs/routes.md CHANGED
@@ -10,9 +10,10 @@ for the page and section model.
10
10
 
11
11
  Route directories can contain route content, route-local images, and
12
12
  an optional route-local `theme.md`. The route theme replaces the root visual
13
- theme for that route. Route directories cannot contain technical site
13
+ theme for that route and can select any complete top-level theme preset. Route
14
+ directories cannot contain technical site
14
15
  configuration; technical configuration stays in the selected site directory's
15
- top-level `config.mjs`.
16
+ top-level `config.md`.
16
17
 
17
18
  ## Route Directory Format
18
19
 
@@ -9,7 +9,7 @@ The selected site directory defaults to `site/`:
9
9
 
10
10
  ```text
11
11
  site/
12
- |-- config.mjs
12
+ |-- config.md
13
13
  |-- theme.md
14
14
  |-- sitewide-content.md
15
15
  |-- content.md
@@ -28,18 +28,19 @@ site/
28
28
 
29
29
  Use `NORNA_SITE_DIR` or `norna --site-dir <path>` to select another
30
30
  site directory. Without an explicit site directory, commands first accept the
31
- current directory when it contains both `config.mjs` and `content.md`.
31
+ current directory when it contains both `config.md` and `content.md`.
32
32
  Otherwise, commands started from a subdirectory walk upward until they find the
33
33
  default `site/` directory containing those files.
34
- `theme.md` is optional; omit it to use the engine's built-in visual defaults.
34
+ `theme.md` is required. It can contain only a complete preset selection.
35
35
 
36
36
  ## Versioned Source Files
37
37
 
38
38
  Version these files in a site repository:
39
39
 
40
- - `site/config.mjs`: technical site configuration.
41
- - `site/theme.md`: optional site-wide visual theme, including layout, spacing,
42
- image sizing, font, typography defaults, palettes, and section surfaces.
40
+ - `site/config.md`: public URL and optional language and smooth scrolling.
41
+ - `site/theme.md`: required site-wide visual theme. It normally selects a
42
+ complete preset and may add focused layout, image, typography, palette, or
43
+ section-surface overrides.
43
44
  See [Theme](theme.md).
44
45
  - `site/sitewide-content.md`: shared site identity, banners and footer content.
45
46
  See [Sitewide Content](sitewide-content.md).
@@ -74,7 +75,7 @@ Do not edit these by hand:
74
75
 
75
76
  Favicons are convention-based. Put files such as `favicon.svg`, `favicon.ico`,
76
77
  `favicon.png`, or `apple-touch-icon.png` in `site/public/`. The renderer emits
77
- icon links only for files that exist and prefixes them with `site.basePath`
78
+ icon links only for files that exist and prefixes them with the base path
78
79
  when the site is published below a path such as `/repository-name/`.
79
80
 
80
81
  ## Engine Repository Layout
@@ -90,6 +91,8 @@ In this repository:
90
91
  - `starters/project/` is a project-site starter used as a maintained example
91
92
  for small project and developer-tool sites.
92
93
  - `fixtures/basic/site/` is used by engine regression tests.
93
- - `examples/dog-gallery/site/` is the local visual dog example used by demo
94
- builds and navigation diagnostics.
94
+ - `examples/feature-demos/media-and-surfaces/site/` is the broad visual example
95
+ used by demo builds and navigation diagnostics.
96
+ - `examples/complete-sites/` contains coherent sites, while
97
+ `examples/feature-demos/` contains focused visual test benches.
95
98
  - `site/` is reserved for the local documentation site.
@@ -2,7 +2,8 @@
2
2
 
3
3
  `site/sitewide-content.md` contains content and settings shared by the whole site. It
4
4
  is separate from `content.md`, which defines the homepage, and from
5
- `config.mjs`, which defines technical behaviour.
5
+ `config.md`, which defines the public URL and optional language and scroll
6
+ behaviour.
6
7
 
7
8
  ## Site identity
8
9