@janga/norna 0.7.17 → 0.7.22

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 (533) hide show
  1. package/README.md +32 -13
  2. package/astro.config.mjs +22 -0
  3. package/bin/norna-cli.mjs +7 -1
  4. package/package.json +46 -12
  5. package/schemas/category.schema.json +20 -0
  6. package/schemas/config.schema.json +55 -4
  7. package/schemas/content-frontmatter.schema.json +5 -5
  8. package/schemas/manifest.json +4 -2
  9. package/schemas/page-theme.schema.json +192 -0
  10. package/schemas/sitewide-content.schema.json +18 -18
  11. package/schemas/theme.schema.json +364 -226
  12. package/scripts/add-site-node.mjs +251 -0
  13. package/scripts/check-config.mjs +12 -3
  14. package/scripts/deploy-site.mjs +6 -9
  15. package/scripts/generate-images.mjs +18 -29
  16. package/scripts/generate-schemas.mjs +7 -1
  17. package/scripts/init-site.mjs +35 -0
  18. package/scripts/lib/astro-command.mjs +14 -9
  19. package/scripts/lib/editor-language-service.mjs +28 -191
  20. package/scripts/lib/heading-ids.mjs +3 -1
  21. package/scripts/lib/navigation-model.mjs +23 -17
  22. package/scripts/lib/norna-markdown-blocks.mjs +64 -145
  23. package/scripts/lib/norna-markdown-render-plugin.mjs +37 -0
  24. package/scripts/lib/object.mjs +28 -0
  25. package/scripts/lib/page-markdown.mjs +282 -0
  26. package/scripts/lib/page-model.mjs +26 -7
  27. package/scripts/lib/presentation-contract.mjs +266 -0
  28. package/scripts/lib/presentation-palette-metadata.mjs +51 -0
  29. package/scripts/lib/presentation.mjs +548 -93
  30. package/scripts/lib/project-config.mjs +73 -16
  31. package/scripts/lib/schema-definitions.mjs +89 -21
  32. package/scripts/lib/schema-editor-metadata.mjs +166 -33
  33. package/scripts/lib/schema-value-definitions.mjs +32 -4
  34. package/scripts/lib/site-content.mjs +33 -223
  35. package/scripts/lib/site-conventions.mjs +1 -0
  36. package/scripts/lib/site-paths.mjs +11 -6
  37. package/scripts/lib/site-structure.mjs +189 -0
  38. package/scripts/lib/theme-config.mjs +3 -2
  39. package/scripts/lib/theme-presets.mjs +105 -101
  40. package/scripts/lib/theme-profiles.mjs +221 -0
  41. package/scripts/lib/typography.mjs +220 -35
  42. package/scripts/lib/yaml-config.mjs +46 -6
  43. package/scripts/lib/yaml-indentation.mjs +86 -0
  44. package/scripts/show-typography.mjs +3 -36
  45. package/scripts/sync-content-sections.mjs +88 -79
  46. package/src/components/DisplaySettings.astro +107 -0
  47. package/src/components/ImageCarousel.astro +34 -13
  48. package/src/components/NavigationPageTree.astro +154 -34
  49. package/src/components/PageContentsLinks.astro +40 -0
  50. package/src/components/SectionNavigationScript.astro +68 -7
  51. package/src/components/SiteBreadcrumbs.astro +24 -18
  52. package/src/components/SiteNavigation.astro +130 -46
  53. package/src/components/SitePage.astro +65 -55
  54. package/src/components/SiteSection.astro +37 -198
  55. package/src/components/SiteTreeNavigation.astro +36 -0
  56. package/src/components/TreeNavigationScript.astro +83 -0
  57. package/src/content.config.ts +2 -8
  58. package/src/layouts/BaseLayout.astro +52 -2
  59. package/src/lib/generatedImages.ts +0 -7
  60. package/src/lib/pageThemes.ts +11 -9
  61. package/src/lib/readerPreferencesScript.mjs +141 -0
  62. package/src/lib/sectionContent.ts +120 -206
  63. package/src/lib/siteNavigation.ts +38 -19
  64. package/src/lib/sitePages.ts +115 -33
  65. package/src/pages/[...slug].astro +2 -2
  66. package/src/pages/index.astro +2 -1
  67. package/src/styles/global.css +1110 -279
  68. package/starters/basic/README.md +8 -8
  69. package/starters/basic/site/theme.yaml +1 -105
  70. package/docs/README.md +0 -135
  71. package/docs/assets/norna-dog-shelter.jpg +0 -0
  72. package/docs/commands.md +0 -189
  73. package/docs/configuration.md +0 -119
  74. package/docs/content.md +0 -342
  75. package/docs/design/command-organization.md +0 -414
  76. package/docs/design/navigation-and-theme-plan.md +0 -115
  77. package/docs/design/norna-diagram-design.md +0 -159
  78. package/docs/design/site-examples-structure.md +0 -115
  79. package/docs/engine-development.md +0 -218
  80. package/docs/getting-started.md +0 -206
  81. package/docs/how-to/embedded-site.md +0 -35
  82. package/docs/images-and-metadata.md +0 -186
  83. package/docs/local-development.md +0 -82
  84. package/docs/pages.md +0 -134
  85. package/docs/public-files.md +0 -118
  86. package/docs/publishing.md +0 -117
  87. package/docs/requirements.md +0 -54
  88. package/docs/site-files.md +0 -145
  89. package/docs/sitewide-content.md +0 -73
  90. package/docs/theme.md +0 -271
  91. package/docs/typography.md +0 -180
  92. package/examples/README.md +0 -43
  93. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +0 -35
  94. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +0 -97
  95. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +0 -852
  96. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs +0 -4
  97. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-modules.mjs +0 -1
  98. package/examples/complete-sites/dog-shelter-multi-page/.astro/content.d.ts +0 -183
  99. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +0 -1
  100. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +0 -8
  101. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +0 -13
  102. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +0 -36
  103. package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +0 -5
  104. package/examples/complete-sites/dog-shelter-multi-page/.astro/types.d.ts +0 -2
  105. package/examples/complete-sites/dog-shelter-multi-page/README.md +0 -24
  106. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +0 -74
  107. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  108. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  109. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  110. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  111. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  112. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  113. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  114. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  115. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  116. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  117. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  118. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  119. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  120. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  121. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  122. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  123. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/package.json +0 -3
  124. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  125. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  126. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  127. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  128. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  129. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  130. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  131. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  132. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  133. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  134. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  135. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +0 -98
  136. package/examples/complete-sites/dog-shelter-multi-page/site/config.yaml +0 -1
  137. package/examples/complete-sites/dog-shelter-multi-page/site/content.md +0 -23
  138. package/examples/complete-sites/dog-shelter-multi-page/site/images/shelter-dog.jpg +0 -0
  139. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/content.md +0 -21
  140. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rex.jpg +0 -0
  141. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rover.jpg +0 -0
  142. package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/content.md +0 -22
  143. package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/images/adoption-dog.jpg +0 -0
  144. package/examples/complete-sites/dog-shelter-multi-page/site/public/favicon.svg +0 -10
  145. package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +0 -9
  146. package/examples/complete-sites/dog-shelter-multi-page/site/public/robots.txt +0 -2
  147. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +0 -4
  148. package/examples/complete-sites/dog-shelter-multi-page/site/theme.yaml +0 -1
  149. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +0 -35
  150. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +0 -97
  151. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +0 -852
  152. package/examples/complete-sites/dog-shelter-single-page/.astro/content-assets.mjs +0 -4
  153. package/examples/complete-sites/dog-shelter-single-page/.astro/content-modules.mjs +0 -1
  154. package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +0 -183
  155. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +0 -1
  156. package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +0 -8
  157. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +0 -13
  158. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +0 -18
  159. package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +0 -5
  160. package/examples/complete-sites/dog-shelter-single-page/.astro/types.d.ts +0 -2
  161. package/examples/complete-sites/dog-shelter-single-page/README.md +0 -24
  162. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +0 -74
  163. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  164. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  165. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  166. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  167. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  168. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  169. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  170. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  171. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  172. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  173. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  174. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  175. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  176. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  177. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  178. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  179. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/package.json +0 -3
  180. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  181. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  182. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  183. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  184. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  185. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  186. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  187. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  188. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  189. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  190. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  191. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +0 -50
  192. package/examples/complete-sites/dog-shelter-single-page/site/config.yaml +0 -1
  193. package/examples/complete-sites/dog-shelter-single-page/site/content.md +0 -37
  194. package/examples/complete-sites/dog-shelter-single-page/site/images/foster-dog.jpg +0 -0
  195. package/examples/complete-sites/dog-shelter-single-page/site/images/rescue-dog.jpg +0 -0
  196. package/examples/complete-sites/dog-shelter-single-page/site/public/favicon.svg +0 -10
  197. package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +0 -9
  198. package/examples/complete-sites/dog-shelter-single-page/site/public/robots.txt +0 -2
  199. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +0 -4
  200. package/examples/complete-sites/dog-shelter-single-page/site/theme.yaml +0 -1
  201. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +0 -35
  202. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +0 -97
  203. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +0 -852
  204. package/examples/feature-demos/media-and-surfaces/.astro/content-assets.mjs +0 -4
  205. package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +0 -1
  206. package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +0 -183
  207. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +0 -1
  208. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +0 -14
  209. package/examples/feature-demos/media-and-surfaces/.astro/settings.json +0 -5
  210. package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +0 -2
  211. package/examples/feature-demos/media-and-surfaces/README.md +0 -21
  212. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +0 -80
  213. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  214. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  215. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  216. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  217. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  218. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  219. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  220. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  221. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  222. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  223. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  224. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  225. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js +0 -1389
  226. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  227. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  228. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  229. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  230. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  231. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/package.json +0 -3
  232. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  233. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  234. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  235. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  236. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  237. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  238. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  239. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  240. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  241. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  242. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  243. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +0 -66
  244. package/examples/feature-demos/media-and-surfaces/site/config.yaml +0 -1
  245. package/examples/feature-demos/media-and-surfaces/site/content.md +0 -15
  246. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/content.md +0 -71
  247. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-carousel.svg +0 -11
  248. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-stack.svg +0 -9
  249. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-surfaces.svg +0 -8
  250. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-one.svg +0 -8
  251. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-three.svg +0 -13
  252. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-two.svg +0 -8
  253. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-one.svg +0 -8
  254. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-two.svg +0 -9
  255. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/content.md +0 -41
  256. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +0 -3
  257. package/examples/feature-demos/media-and-surfaces/site/public/robots.txt +0 -2
  258. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
  259. package/examples/feature-demos/media-and-surfaces/site/theme.yaml +0 -1
  260. package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +0 -59
  261. package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +0 -138
  262. package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +0 -755
  263. package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +0 -1
  264. package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +0 -1
  265. package/examples/feature-demos/sitewide-content/.astro/content.d.ts +0 -183
  266. package/examples/feature-demos/sitewide-content/.astro/data-store.json +0 -1
  267. package/examples/feature-demos/sitewide-content/.astro/dev.json +0 -13
  268. package/examples/feature-demos/sitewide-content/.astro/dev.log +0 -18
  269. package/examples/feature-demos/sitewide-content/.astro/settings.json +0 -5
  270. package/examples/feature-demos/sitewide-content/.astro/types.d.ts +0 -2
  271. package/examples/feature-demos/sitewide-content/README.md +0 -26
  272. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +0 -74
  273. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  274. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  275. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  276. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  277. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  278. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  279. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  280. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  281. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  282. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  283. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  284. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  285. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  286. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  287. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  288. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  289. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +0 -3
  290. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  291. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  292. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  293. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  294. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  295. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  296. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  297. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  298. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  299. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  300. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  301. package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +0 -1
  302. package/examples/feature-demos/sitewide-content/site/config.yaml +0 -1
  303. package/examples/feature-demos/sitewide-content/site/content.md +0 -17
  304. package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +0 -17
  305. package/examples/feature-demos/sitewide-content/site/pages/020-notices/content.md +0 -23
  306. package/examples/feature-demos/sitewide-content/site/pages/030-footer/content.md +0 -18
  307. package/examples/feature-demos/sitewide-content/site/public/logo.svg +0 -6
  308. package/examples/feature-demos/sitewide-content/site/public/robots.txt +0 -2
  309. package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +0 -14
  310. package/examples/feature-demos/sitewide-content/site/theme.yaml +0 -1
  311. package/examples/feature-demos/theme-presets/.astro/collections/routeTheme.schema.json +0 -746
  312. package/examples/feature-demos/theme-presets/.astro/collections/site.schema.json +0 -59
  313. package/examples/feature-demos/theme-presets/.astro/collections/sitewide.schema.json +0 -138
  314. package/examples/feature-demos/theme-presets/.astro/collections/theme.schema.json +0 -755
  315. package/examples/feature-demos/theme-presets/.astro/content-assets.mjs +0 -4
  316. package/examples/feature-demos/theme-presets/.astro/content-modules.mjs +0 -1
  317. package/examples/feature-demos/theme-presets/.astro/content.d.ts +0 -183
  318. package/examples/feature-demos/theme-presets/.astro/data-store.json +0 -1
  319. package/examples/feature-demos/theme-presets/.astro/dev-local.json +0 -8
  320. package/examples/feature-demos/theme-presets/.astro/dev.json +0 -15
  321. package/examples/feature-demos/theme-presets/.astro/dev.log +0 -164
  322. package/examples/feature-demos/theme-presets/.astro/settings.json +0 -5
  323. package/examples/feature-demos/theme-presets/.astro/types.d.ts +0 -2
  324. package/examples/feature-demos/theme-presets/README.md +0 -18
  325. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/_metadata.json +0 -80
  326. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  327. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  328. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  329. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  330. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  331. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  332. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  333. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  334. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  335. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  336. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  337. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  338. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js +0 -1389
  339. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  340. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  341. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  342. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  343. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  344. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/package.json +0 -3
  345. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  346. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  347. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  348. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  349. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  350. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  351. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  352. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  353. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  354. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  355. package/examples/feature-demos/theme-presets/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  356. package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +0 -290
  357. package/examples/feature-demos/theme-presets/site/config.yaml +0 -1
  358. package/examples/feature-demos/theme-presets/site/content.md +0 -14
  359. package/examples/feature-demos/theme-presets/site/pages/010-portfolio/content.md +0 -31
  360. package/examples/feature-demos/theme-presets/site/pages/010-portfolio/images/puppy-portrait.jpg +0 -0
  361. package/examples/feature-demos/theme-presets/site/pages/010-portfolio/images/shepherd-portrait.jpg +0 -0
  362. package/examples/feature-demos/theme-presets/site/pages/010-portfolio/images/white-puppy.jpg +0 -0
  363. package/examples/feature-demos/theme-presets/site/pages/010-portfolio/theme.yaml +0 -1
  364. package/examples/feature-demos/theme-presets/site/pages/020-documentation/content.md +0 -30
  365. package/examples/feature-demos/theme-presets/site/pages/020-documentation/images/black-schnauzer.jpg +0 -0
  366. package/examples/feature-demos/theme-presets/site/pages/020-documentation/images/retriever-portrait.jpg +0 -0
  367. package/examples/feature-demos/theme-presets/site/pages/020-documentation/images/schnauzer-portrait.jpg +0 -0
  368. package/examples/feature-demos/theme-presets/site/pages/020-documentation/theme.yaml +0 -1
  369. package/examples/feature-demos/theme-presets/site/pages/030-project/content.md +0 -31
  370. package/examples/feature-demos/theme-presets/site/pages/030-project/images/boxer-portrait.jpg +0 -0
  371. package/examples/feature-demos/theme-presets/site/pages/030-project/images/grass-puppy.jpg +0 -0
  372. package/examples/feature-demos/theme-presets/site/pages/030-project/images/grey-street-dog.jpg +0 -0
  373. package/examples/feature-demos/theme-presets/site/pages/030-project/theme.yaml +0 -1
  374. package/examples/feature-demos/theme-presets/site/pages/040-statement/content.md +0 -31
  375. package/examples/feature-demos/theme-presets/site/pages/040-statement/images/black-pedigree.jpg +0 -0
  376. package/examples/feature-demos/theme-presets/site/pages/040-statement/images/sheepdog-grass.jpg +0 -0
  377. package/examples/feature-demos/theme-presets/site/pages/040-statement/images/sheepdog-wide.jpg +0 -0
  378. package/examples/feature-demos/theme-presets/site/pages/040-statement/theme.yaml +0 -1
  379. package/examples/feature-demos/theme-presets/site/public/robots.txt +0 -2
  380. package/examples/feature-demos/theme-presets/site/sitewide-content.yaml +0 -3
  381. package/examples/feature-demos/theme-presets/site/theme.yaml +0 -1
  382. package/fixtures/basic/site/.norna/generated-images.json +0 -1
  383. package/fixtures/basic/site/config.yaml +0 -1
  384. package/fixtures/basic/site/content.md +0 -14
  385. package/fixtures/basic/site/public/robots.txt +0 -2
  386. package/fixtures/basic/site/sitewide-content.yaml +0 -3
  387. package/fixtures/basic/site/theme.yaml +0 -8
  388. package/fixtures/content-model-v2/.astro/collections/site.schema.json +0 -776
  389. package/fixtures/content-model-v2/.astro/collections/theme.schema.json +0 -668
  390. package/fixtures/content-model-v2/.astro/content-assets.mjs +0 -4
  391. package/fixtures/content-model-v2/.astro/content-modules.mjs +0 -1
  392. package/fixtures/content-model-v2/.astro/content.d.ts +0 -175
  393. package/fixtures/content-model-v2/.astro/data-store.json +0 -1
  394. package/fixtures/content-model-v2/.astro/dev-local.json +0 -8
  395. package/fixtures/content-model-v2/.astro/dev.json +0 -13
  396. package/fixtures/content-model-v2/.astro/dev.log +0 -231
  397. package/fixtures/content-model-v2/.astro/settings.json +0 -5
  398. package/fixtures/content-model-v2/.astro/types.d.ts +0 -2
  399. package/fixtures/content-model-v2/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +0 -1
  400. package/fixtures/content-model-v2/dist/_astro/SitePage.BbfZub4g.css +0 -1
  401. package/fixtures/content-model-v2/dist/guide/index.html +0 -3
  402. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-480.webp +0 -0
  403. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-768.webp +0 -0
  404. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-971.webp +0 -0
  405. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-480.webp +0 -0
  406. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-768.webp +0 -0
  407. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-971.webp +0 -0
  408. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-480.webp +0 -0
  409. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-768.webp +0 -0
  410. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-971.webp +0 -0
  411. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1080.webp +0 -0
  412. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1440.webp +0 -0
  413. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1600.webp +0 -0
  414. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-480.webp +0 -0
  415. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-768.webp +0 -0
  416. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-480.webp +0 -0
  417. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-768.webp +0 -0
  418. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-960.webp +0 -0
  419. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1080.webp +0 -0
  420. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1440.webp +0 -0
  421. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1600.webp +0 -0
  422. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-480.webp +0 -0
  423. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-768.webp +0 -0
  424. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1080.webp +0 -0
  425. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1440.webp +0 -0
  426. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1600.webp +0 -0
  427. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-480.webp +0 -0
  428. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-768.webp +0 -0
  429. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1080.webp +0 -0
  430. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1440.webp +0 -0
  431. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1600.webp +0 -0
  432. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-480.webp +0 -0
  433. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-768.webp +0 -0
  434. package/fixtures/content-model-v2/dist/index.html +0 -8
  435. package/fixtures/content-model-v2/node_modules/.vite/deps/_metadata.json +0 -80
  436. package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  437. package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  438. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  439. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  440. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  441. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  442. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  443. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  444. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  445. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  446. package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  447. package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  448. package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js +0 -1389
  449. package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  450. package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  451. package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  452. package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  453. package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  454. package/fixtures/content-model-v2/node_modules/.vite/deps/package.json +0 -3
  455. package/fixtures/content-model-v2/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  456. package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  457. package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  458. package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  459. package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  460. package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  461. package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  462. package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  463. package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  464. package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  465. package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  466. package/fixtures/content-model-v2/site/.norna/generated-images.json +0 -210
  467. package/fixtures/content-model-v2/site/config.yaml +0 -1
  468. package/fixtures/content-model-v2/site/content.md +0 -79
  469. package/fixtures/content-model-v2/site/images/adopt.svg +0 -9
  470. package/fixtures/content-model-v2/site/images/detail.jpg +0 -0
  471. package/fixtures/content-model-v2/site/images/duplicate.jpg +0 -0
  472. package/fixtures/content-model-v2/site/images/foster.svg +0 -12
  473. package/fixtures/content-model-v2/site/images/hero.jpg +0 -0
  474. package/fixtures/content-model-v2/site/images/image.jpg +0 -0
  475. package/fixtures/content-model-v2/site/images/slide-one.jpg +0 -0
  476. package/fixtures/content-model-v2/site/images/slide-three.jpg +0 -0
  477. package/fixtures/content-model-v2/site/images/slide-two.jpg +0 -0
  478. package/fixtures/content-model-v2/site/pages/010-guide/content.md +0 -18
  479. package/fixtures/content-model-v2/site/pages/010-guide/images/duplicate.jpg +0 -0
  480. package/fixtures/content-model-v2/site/theme.yaml +0 -4
  481. package/fixtures/nested-pages/site/.norna/generated-images.json +0 -10
  482. package/fixtures/nested-pages/site/config.yaml +0 -1
  483. package/fixtures/nested-pages/site/content.md +0 -15
  484. package/fixtures/nested-pages/site/pages/010-guides/content.md +0 -15
  485. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +0 -21
  486. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +0 -21
  487. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +0 -14
  488. package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +0 -11
  489. package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +0 -3
  490. package/fixtures/nested-pages/site/pages/020-reference/content.md +0 -10
  491. package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +0 -11
  492. package/fixtures/nested-pages/site/theme.yaml +0 -3
  493. package/scripts/build-pages.mjs +0 -69
  494. package/scripts/lib/example-sites.mjs +0 -37
  495. package/scripts/lib/frontmatter-yaml.mjs +0 -113
  496. package/scripts/lib/git-status.mjs +0 -7
  497. package/scripts/release.mjs +0 -153
  498. package/scripts/test-banner-visibility.mjs +0 -80
  499. package/scripts/test-ci-lockfile.mjs +0 -65
  500. package/scripts/test-cli-discovery.mjs +0 -124
  501. package/scripts/test-client-javascript.mjs +0 -218
  502. package/scripts/test-content-check.mjs +0 -621
  503. package/scripts/test-content-model-v2.mjs +0 -1629
  504. package/scripts/test-documentation.mjs +0 -187
  505. package/scripts/test-editor-language-service.mjs +0 -302
  506. package/scripts/test-engine-commands.mjs +0 -204
  507. package/scripts/test-examples.mjs +0 -24
  508. package/scripts/test-heading-ids.mjs +0 -68
  509. package/scripts/test-navigation-model.mjs +0 -63
  510. package/scripts/test-navigation-preview.mjs +0 -108
  511. package/scripts/test-navigation.mjs +0 -148
  512. package/scripts/test-nested-pages.mjs +0 -110
  513. package/scripts/test-package-check.mjs +0 -531
  514. package/scripts/test-page-model.mjs +0 -80
  515. package/scripts/test-project-config.mjs +0 -144
  516. package/scripts/test-schemas.mjs +0 -154
  517. package/scripts/test-site-public.mjs +0 -85
  518. package/scripts/test-theme-presets.mjs +0 -182
  519. package/src/components/SiteNotesScript.astro +0 -43
  520. package/starters/basic/site/images/.gitkeep +0 -1
  521. package/starters/project/.github/workflows/deploy.yml +0 -64
  522. package/starters/project/README.md +0 -84
  523. package/starters/project/package-lock.json +0 -4296
  524. package/starters/project/package.json +0 -37
  525. package/starters/project/site/config.yaml +0 -1
  526. package/starters/project/site/content.md +0 -119
  527. package/starters/project/site/pages/010-guide/content.md +0 -80
  528. package/starters/project/site/public/robots.txt +0 -2
  529. package/starters/project/site/sitewide-content.yaml +0 -3
  530. package/starters/project/site/theme.yaml +0 -31
  531. package/tsconfig.json +0 -5
  532. /package/starters/basic/site/{content.md → pages/000-home/content.md} +0 -0
  533. /package/{fixtures/basic/site → starters/basic/site/pages/000-home}/images/.gitkeep +0 -0
@@ -1,145 +0,0 @@
1
- # Site Files
2
-
3
- Norna expects a defined set of files and directories. Their names and locations
4
- are part of the site model: following the structure lets Norna find content,
5
- presentation, configuration, pages, and assets without path configuration.
6
-
7
- The selected site directory is `site/` by default:
8
-
9
- ```text
10
- site/
11
- |-- config.yaml
12
- |-- theme.yaml
13
- |-- sitewide-content.yaml
14
- |-- content.md
15
- |-- images/
16
- | `-- image.jpg
17
- |-- pages/
18
- | `-- <NNN-page-id>/
19
- | |-- content.md
20
- | |-- theme.yaml
21
- | `-- images/
22
- | `-- image.jpg
23
- |-- public/
24
- `-- .norna/
25
- |-- generated-images.json
26
- `-- public/
27
- ```
28
-
29
- File and directory names shown literally above must use that exact lowercase
30
- spelling. This keeps sites portable between case-sensitive and
31
- case-insensitive file systems.
32
-
33
- ## Root Files
34
-
35
- | Path | Required | Responsibility |
36
- | --- | --- | --- |
37
- | `config.yaml` | Yes | Public URL, language, and browser scroll behavior. |
38
- | `theme.yaml` | Yes | Complete visual preset and optional focused overrides. |
39
- | `sitewide-content.yaml` | No | Shared logo display settings, banners, and footer. |
40
- | `content.md` | Yes | Homepage title, optional metadata, sections, prose, and Norna blocks. |
41
-
42
- These responsibilities are deliberately separate:
43
-
44
- - [`config.yaml`](configuration.md) contains the few technical settings that
45
- apply to the whole site.
46
- - [`theme.yaml`](theme.md) controls presentation. A normal file can contain
47
- only a preset selection.
48
- - [`sitewide-content.yaml`](sitewide-content.md) contains editorial material
49
- shared by every page.
50
- - [`content.md`](content.md) is the homepage file and remains ordinary
51
- Markdown. YAML frontmatter is optional.
52
-
53
- Pages cannot provide `config.yaml` or `sitewide-content.yaml`. Technical
54
- configuration and shared logo, banner, and footer settings have one site-wide
55
- source.
56
-
57
- ## Images
58
-
59
- Managed homepage images belong in:
60
-
61
- ```text
62
- site/images/
63
- ```
64
-
65
- All managed images used by the homepage share this directory. Markdown blocks
66
- refer to managed images by filename, not by path. See
67
- [Images and Metadata](images-and-metadata.md) for supported formats, generated
68
- variants, and syncing.
69
-
70
- ## Pages
71
-
72
- Each first-level page is one directory under `pages/`:
73
-
74
- ```text
75
- site/pages/010-guide/
76
- |-- content.md
77
- |-- theme.yaml
78
- `-- images/
79
- `-- image.jpg
80
- ```
81
-
82
- `content.md` is required for a page. The optional page `theme.yaml` replaces
83
- the root visual theme for that page. Page images live directly in that page's
84
- `images/` directory.
85
-
86
- The three-digit page prefix controls navigation order and is not part of the
87
- URL. See [Pages](pages.md) for exact directory-name and page-id rules.
88
-
89
- ## Public Files
90
-
91
- `site/public/` contains static files copied without image processing. Most
92
- names are site-owned, but Norna recognizes a small set of exact conventional
93
- filenames for the navigation logo and browser icons.
94
-
95
- See [Public Files](public-files.md) for navigation-logo and browser-icon
96
- filenames, GitHub Pages `CNAME`, arbitrary static files, root-relative links,
97
- and publishing paths.
98
-
99
- ## Selecting The Site Directory
100
-
101
- Use `NORNA_SITE_DIR` or `norna --site-dir <path>` to select a site directory
102
- explicitly.
103
-
104
- Without an explicit selection, Norna first accepts the current directory when
105
- it contains both `config.yaml` and `content.md`. Otherwise it walks upward until
106
- it finds a default `site/` directory containing those two files.
107
-
108
- ## Versioned Files
109
-
110
- Version the source files above together with:
111
-
112
- - `site/.norna/generated-images.json`, which records reusable managed-image
113
- output;
114
- - `.github/workflows/deploy.yml`, when using the included GitHub Pages
115
- publishing integration;
116
- - `package.json` and `package-lock.json`, which pin the local Norna engine and
117
- project scripts.
118
-
119
- Source images and files under `site/public/` are also versioned site input.
120
-
121
- ## Generated Files
122
-
123
- Do not edit these by hand:
124
-
125
- - `site/.norna/public/`: build-preparation output copied from `site/public/`,
126
- plus generated or copied managed images;
127
- - `dist/`: final static website output;
128
- - `.astro/`: Astro cache, generated types, and local dev-server state.
129
-
130
- `norna site:public` removes stale copied static files from
131
- `site/.norna/public/` while preserving managed image output under its `images/`
132
- directory.
133
-
134
- ## Engine Repository Layout
135
-
136
- These directories belong to the Norna engine repository, not to an ordinary
137
- site:
138
-
139
- - `bin/`: the launcher and public CLI dispatcher;
140
- - `scripts/`: validation, image, preview, publishing, and test tools;
141
- - `src/`: the Astro renderer, components, styles, and content schema;
142
- - `starters/`: source copied by `norna init`;
143
- - `examples/`: complete sites and focused feature demonstrations;
144
- - `fixtures/`: engine regression input;
145
- - root `site/`: the Norna introduction and documentation site.
@@ -1,73 +0,0 @@
1
- # `sitewide-content.yaml`
2
-
3
- `site/sitewide-content.yaml` is optional. It contains editorial content and
4
- optional logo display settings shared by every page: banners, footer, and an
5
- optional navigation-logo height override.
6
-
7
- The file contains plain YAML without Markdown frontmatter delimiters. Page
8
- sections do not belong here; they remain in each page's `content.md`.
9
-
10
- ## Navigation Logo
11
-
12
- A logo file is discovered from `site/public/`; no path or site name is
13
- configured here. The logo links to the homepage, and its alternative text
14
- comes from the homepage Markdown H1 in `site/content.md`.
15
-
16
- Add `logo` only to override the discovered file's displayed height:
17
-
18
- ```yaml
19
- logo:
20
- height: 2.6rem
21
- ```
22
-
23
- The logo width follows the file's intrinsic aspect ratio. See
24
- [Public Files: Navigation Logo](public-files.md#navigation-logo) for exact
25
- filenames, placement, portability, and validation rules.
26
-
27
- The logo is a separate home link and does not have a section menu. In a
28
- multi-page site, the homepage remains the first ordinary navigation item, uses
29
- its Markdown H1 as its label, and exposes its sections in the same way as
30
- pages. Page content and page themes cannot replace the shared logo setting.
31
-
32
- ## Banners
33
-
34
- Use `banners` for short notices shown above page content on every page. List
35
- order controls presentation order. Each banner needs a unique lowercase `id`,
36
- a title, and text:
37
-
38
- ```yaml
39
- banners:
40
- - id: project-status
41
- tone: warning
42
- visible:
43
- from: "2026-08-01"
44
- until: "2026-09-01"
45
- title: Experimental code
46
- text: Not for production use.
47
- ```
48
-
49
- `tone` currently supports `warning`. `visible` is optional. `from` is inclusive
50
- and `until` is exclusive; both use `YYYY-MM-DD`, and either may be omitted.
51
-
52
- Visitors can dismiss each active banner. Dismissal state is stored locally in
53
- the browser and tied to the banner content, so an edited banner can appear
54
- again. Keep banners concise; they are rendered as compact one-line notices and
55
- may use an ellipsis when space is limited.
56
-
57
- ## Footer
58
-
59
- The footer can contain copyright or ownership text and optional generated build
60
- information:
61
-
62
- ```yaml
63
- footer:
64
- copyrightMessage: (c) Example Owner.
65
- buildInfo: true
66
- ```
67
-
68
- Set `buildInfo` to `true` to show the generated build date and time. Norna uses
69
- the site's configured language, a compact format, and UTC. If both copyright
70
- text and build information are absent, no footer is rendered.
71
-
72
- See [Site Files](site-files.md) for where this optional file belongs in the
73
- complete site model.
package/docs/theme.md DELETED
@@ -1,271 +0,0 @@
1
- # Theme
2
-
3
- `site/theme.yaml` defines the site-wide visual theme for a Norna site. It is a
4
- required plain YAML file. The normal setup selects one complete theme preset
5
- and adds only focused overrides when needed.
6
-
7
- An optional `theme.yaml` inside a page directory replaces the root visual
8
- theme for that page. Navigation-logo display settings remain site-wide and
9
- belong in `sitewide-content.yaml`.
10
-
11
- ## Theme Presets
12
-
13
- Available complete theme presets are:
14
-
15
- - `portfolio`: restrained typography and a broad image area for image-led
16
- presentation.
17
- - `documentation`: reading-focused typography, a paper palette, and compact
18
- structural rhythm.
19
- - `project`: compact layout and a light presentation for project and product
20
- sites.
21
- - `statement`: airy spacing and stronger typography for short editorial
22
- content.
23
-
24
- A normal `theme.yaml` can be only:
25
-
26
- ```yaml
27
- preset: documentation
28
- ```
29
-
30
- Each preset supplies coordinated values for:
31
-
32
- - layout density, page width, and gutters
33
- - managed image sizing
34
- - font family, typography profile, and typography rhythm
35
- - palette and section-surface behaviour
36
-
37
- The nested `typography.profile` setting documented below is a lower-level
38
- typography choice. A top-level theme `preset` selects the complete visual
39
- system, including that typography choice.
40
-
41
- ## Overrides
42
-
43
- Values written beside the top-level preset override only that part of the
44
- preset. Other preset values remain active:
45
-
46
- ```yaml
47
- preset: documentation
48
- layout:
49
- pageWidth: 1320px
50
- palette: dark
51
- ```
52
-
53
- Nested objects are merged by key. `sectionSurfaces` replaces the preset array
54
- when it is specified.
55
-
56
- It is still valid to omit the top-level preset and define the visual settings
57
- explicitly. Omitted explicit settings then use engine defaults. This is useful
58
- for focused testing, but selecting a complete preset is the simpler normal
59
- workflow.
60
-
61
- ## Export A Preset
62
-
63
- Export the installed definition of a preset before choosing overrides:
64
-
65
- ```sh
66
- norna theme:export documentation
67
- ```
68
-
69
- In a generated site, the equivalent npm command is:
70
-
71
- ```sh
72
- npm run norna:theme:export -- documentation
73
- ```
74
-
75
- The command creates `site/orig-documentation-theme.yaml`, or the corresponding
76
- path under the selected site directory. The file contains the preset values,
77
- comments describing accepted alternatives, and an example of a fine-grained
78
- typography override.
79
-
80
- Norna never loads `orig-*-theme.yaml`; only `theme.yaml` is active. The export
81
- command refuses to overwrite an existing reference file.
82
-
83
- Page titles and site navigation are not part of the visual theme. Define
84
- optional logo display settings in `site/sitewide-content.yaml`; see
85
- [Sitewide Content](sitewide-content.md).
86
-
87
- ## Layout
88
-
89
- `layout` is optional. It controls the outer page geometry:
90
-
91
- - `pageWidth`: maximum width of the main page content area.
92
- - `gutter`: side margin removed from the viewport before available content
93
- width is calculated. Use either one CSS length for all viewports or
94
- `desktop` / `mobile` values.
95
- - `density`: default structural spacing profile. Allowed values are `compact`,
96
- `normal`, and `airy`.
97
- - `spacing`: optional spacing overrides for sections and content blocks. Every
98
- spacing value accepts either one CSS length for all viewports or `desktop` /
99
- `mobile` values.
100
-
101
- Example:
102
-
103
- ```yaml
104
- layout:
105
- density: normal
106
- pageWidth: 1180px
107
- gutter:
108
- desktop: clamp(1.25rem, 4vw, 3rem)
109
- mobile: 1rem
110
- spacing:
111
- firstSectionTop:
112
- desktop: clamp(1.875rem, 3vw, 2.75rem)
113
- mobile: 1.375rem
114
- sectionGap:
115
- desktop: clamp(1.4rem, 3vw, 2.75rem)
116
- mobile: 1.5rem
117
- headingToBlock:
118
- desktop: 0.75em
119
- mobile: 0.7em
120
- blockGap:
121
- desktop: 1.5em
122
- mobile: 1.25em
123
- ```
124
-
125
- If omitted, Norna uses `1180px` for `pageWidth`, desktop
126
- `clamp(1.25rem, 4vw, 3rem)` for `gutter`, mobile `1rem`, and `normal` layout
127
- density.
128
-
129
- Spacing keys:
130
-
131
- - `firstSectionTop`: space above the first section heading.
132
- - `sectionGap`: space above each following section.
133
- - `finalSectionBottom`: space below the final section.
134
- - `headingToBlock`: space between a section heading and its first visual content
135
- block, such as an image stack, carousel, or card list.
136
- - `blockGap`: space between content blocks in a section. It applies between
137
- Markdown, image, carousel, and card-list blocks, but not after the final block.
138
- - `imageGap`: space between stacked images or carousel blocks.
139
-
140
- The default `compact`, `normal`, and `airy` density profiles provide values for
141
- these spacing keys. The `em` values for `headingToBlock` and `blockGap` are
142
- relative to the relevant text size, so the rhythm follows typography changes.
143
- Use `sectionGap` and the other structural keys when the distance should describe
144
- the page layout rather than the size of nearby text.
145
-
146
- Text-near spacing inside Markdown, such as spacing after headings, spacing
147
- before Markdown subheadings, paragraph spacing, and caption spacing, belongs to
148
- `typography.rhythm` and typography overrides.
149
-
150
- ## Image Sizing
151
-
152
- `images` is optional. It controls managed image sizing:
153
-
154
- - `width`: hard maximum rendered image area width for images, captions, and
155
- aligned text.
156
- - `maxAvailableWidthPercent`: maximum share of available width after gutters.
157
- - `maxAvailableHeightPercent`: maximum share of viewport height used by
158
- images.
159
-
160
- Example:
161
-
162
- ```yaml
163
- images:
164
- width: 900px
165
- maxAvailableWidthPercent:
166
- desktop: 100
167
- mobile: 100
168
- maxAvailableHeightPercent:
169
- desktop: 74
170
- mobile: 68
171
- ```
172
-
173
- If omitted, Norna uses `900px`, full available width, and image height limits of
174
- desktop `74` / mobile `68`.
175
-
176
- ## Typography
177
-
178
- Top-level `typography` is the site-wide typographic base. It supports:
179
-
180
- - `fontFamily`: global CSS font-family stack.
181
- - `profile`: built-in typography profile.
182
- - `rhythm`: text-near spacing profile. Allowed values are `compact`,
183
- `normal`, and `airy`.
184
- - `overrides`: focused changes to preset values.
185
-
186
- Example:
187
-
188
- ```yaml
189
- typography:
190
- fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
191
- profile: reading
192
- rhythm: normal
193
- overrides:
194
- headings:
195
- h2:
196
- size: medium
197
- weight: 600
198
- spacingAfter: 0.55em
199
- h3:
200
- size: medium
201
- spacingBefore: 1.5em
202
- spacingAfter: 0.5em
203
- body:
204
- width: narrow
205
- lineHeight: 1.55
206
- ```
207
-
208
- Use `norna typography profiles` to inspect built-in profile and rhythm values,
209
- and `norna typography show` to inspect the resolved typography for the
210
- selected site. See [Typography](typography.md).
211
-
212
- ## Palette And Section Surfaces
213
-
214
- `palette` and `sectionSurfaces` are optional top-level theme settings:
215
-
216
- - `palette`: `dark`, `light`, or `paper`. It coordinates page, navigation,
217
- footer, and section colors.
218
- - `sectionSurfaces`: one to three unique values chosen from `base`, `soft`, and
219
- `emphasis`. One value gives every section the same surface. Multiple values
220
- cycle in the listed order.
221
-
222
- Example:
223
-
224
- ```yaml
225
- palette: paper # Alternatives: dark, light
226
- sectionSurfaces: [base, soft, emphasis]
227
- ```
228
-
229
- ## Page Themes
230
-
231
- Add `theme.yaml` to a page directory when that page should have a different
232
- visual expression:
233
-
234
- ```text
235
- site/pages/010-guide/theme.yaml
236
- ```
237
-
238
- The page theme uses the same visual schema and complete presets as the root
239
- theme. A page can therefore select a different expression without repeating a
240
- large configuration:
241
-
242
- ```yaml
243
- preset: statement
244
- ```
245
-
246
- It completely replaces the root visual theme for that page. If the page
247
- theme selects no top-level preset, omitted values use engine defaults rather
248
- than values from the root theme. It cannot define navigation-logo settings or
249
- technical configuration.
250
-
251
- Section surfaces render as full-width horizontal bands while the section
252
- content keeps the normal page and image widths. Links keep the palette's global
253
- accent color.
254
-
255
- ## Common Questions
256
-
257
- ### Should every page select its own preset?
258
-
259
- No. A page without its own `theme.yaml` inherits the root theme, which is the
260
- normal choice when the site should keep one visual expression.
261
-
262
- Add a page theme only when the page should intentionally look different. If
263
- the page should keep the same preset but demonstrate a focused change, repeat
264
- the root preset in the page theme and override only that setting. This is
265
- necessary because a page theme replaces the root visual theme rather than
266
- merging with it.
267
-
268
- For example, a page demonstrating section surfaces may keep `preset: project`
269
- and change only `sectionSurfaces`. A page demonstrating image or content
270
- blocks should normally inherit the root preset so that the blocks remain the
271
- only variable being compared.
@@ -1,180 +0,0 @@
1
- # Typography
2
-
3
- Norna typography is configured in `site/theme.yaml` through a site-wide font,
4
- profile, text rhythm, and optional overrides.
5
-
6
- The normal workflow is to select a complete top-level theme preset. It already
7
- chooses a coordinated font, typography profile, and rhythm:
8
-
9
- ```yaml
10
- preset: documentation
11
- ```
12
-
13
- Use the nested `typography` block only when those typographic choices need to
14
- differ from the selected theme preset. Typography is configured at root-theme
15
- or page-theme level, not in page or section content.
16
-
17
- ## Typography Profiles
18
-
19
- Available profiles:
20
-
21
- - `restrained`: the default for image-led sites. Text is restrained and
22
- supports the images without dominating the page.
23
- - `dense`: tighter typography for many sections, many images, or
24
- short information blocks.
25
- - `reading`: more generous body text for pages where longer text carries
26
- more of the experience.
27
- - `statement`: tighter, more declarative line-height for short programmatic
28
- statements. Use it sparingly, usually as a page-level exception.
29
-
30
- If a complete top-level theme preset is selected, that preset supplies the
31
- typography choice. If both the top-level preset and nested typography are
32
- omitted, the engine default is `restrained`.
33
-
34
- Profiles define alignment, size, weight, and line height for `headings.h1`
35
- through `headings.h4`, `body`, and `caption`. They also choose a readable body
36
- text width. Built-in presets use `medium` as the default size for every text
37
- role. Visual heading hierarchy comes from the Markdown heading level, so `h1`
38
- is larger than `h2`, `h2` is larger than `h3`, and so on.
39
-
40
- The profiles use these controls deliberately:
41
-
42
- - `restrained` uses restrained heading weights and a normal reading width.
43
- - `dense` uses stronger headings and a wider text column for short,
44
- scannable content.
45
- - `reading` uses a narrower reading width and more generous body line
46
- height.
47
- - `statement` uses the strongest heading weights and a narrow text column for
48
- short, declarative content.
49
-
50
- `rhythm` defines text-near spacing for headings, paragraphs, and captions.
51
- Available rhythms are `compact`, `normal`, and `airy`. Built-in rhythm values
52
- use `em` so spacing follows the rendered text size.
53
-
54
- Use this command to inspect the exact profile and rhythm values shipped with
55
- the installed engine:
56
-
57
- ```sh
58
- norna typography profiles
59
- ```
60
-
61
- Use this command to inspect the effective values for the selected site after
62
- profiles, rhythms, and overrides have been applied:
63
-
64
- ```sh
65
- norna typography show
66
- ```
67
-
68
- The output includes the site theme, every page, and every section. Each
69
- resolved value shows its `source`; values inherited by a page or section are
70
- also marked with `inherited: true`.
71
-
72
- ## Configuration Shape
73
-
74
- ```yaml
75
- typography:
76
- fontFamily: "Arial, 'Helvetica Neue', Helvetica, sans-serif"
77
- profile: restrained
78
- rhythm: normal
79
- overrides:
80
- headings:
81
- h2:
82
- size: medium
83
- weight: 600
84
- spacingAfter: 0.55em
85
- h3:
86
- size: medium
87
- spacingBefore: 1.5em
88
- spacingAfter: 0.5em
89
- body:
90
- width: narrow
91
- paragraphSpacing: 0.8em
92
- caption:
93
- spacingBefore: 0.5em
94
- ```
95
-
96
- The typographic roles are:
97
-
98
- - `headings.h1`: reserved for page-level Markdown `#` headings if the content
99
- model starts supporting them.
100
- - `headings.h2`: Markdown `##` section headings.
101
- - `headings.h3`: Markdown `###` subheadings inside section body text.
102
- - `headings.h4`: Markdown `####` subheadings inside section body text.
103
- - `body`: Markdown body text inside sections.
104
- - `caption`: image captions.
105
-
106
- Allowed alignment values are `left`, `center`, and `right`. Alignment can be
107
- responsive:
108
-
109
- ```yaml
110
- align:
111
- desktop: left
112
- mobile: center
113
- ```
114
-
115
- Allowed size values are `small`, `medium`, `large`, and `xlarge`. `medium` is
116
- the normal reading size. Use `small` for quieter supporting text, and use
117
- `large` or `xlarge` only when a page or section needs stronger emphasis.
118
- Each heading level uses its own scale but follows the same principle:
119
- `medium` is the normal size for that level. Norna may render the first section
120
- heading as an HTML `h1` for document structure, but its visual typography still
121
- follows the Markdown level the user wrote: `##` uses `headings.h2`.
122
-
123
- `lineHeight` is a unitless number from `1` through `3`. `spacingBefore`,
124
- `spacingAfter`, and `paragraphSpacing` are CSS lengths such as `0`, `0.8em`,
125
- `1rem`, or `12px`. Use `em` for spacing that should track the text size.
126
-
127
- `weight` is a controlled heading weight. Allowed values are `400`, `500`,
128
- `600`, and `700`. `body.width` is the readable text width and accepts
129
- `narrow`, `normal`, or `wide`. It controls the prose column, not the page's
130
- maximum width or the width of image blocks.
131
-
132
- Supported override fields:
133
-
134
- - `headings.h1.align`, `headings.h1.size`, `headings.h1.weight`,
135
- `headings.h1.lineHeight`,
136
- `headings.h1.spacingBefore`, `headings.h1.spacingAfter`
137
- - `headings.h2.align`, `headings.h2.size`, `headings.h2.weight`,
138
- `headings.h2.lineHeight`,
139
- `headings.h2.spacingBefore`, `headings.h2.spacingAfter`
140
- - `headings.h3.align`, `headings.h3.size`, `headings.h3.weight`,
141
- `headings.h3.lineHeight`,
142
- `headings.h3.spacingBefore`, `headings.h3.spacingAfter`
143
- - `headings.h4.align`, `headings.h4.size`, `headings.h4.weight`,
144
- `headings.h4.lineHeight`,
145
- `headings.h4.spacingBefore`, `headings.h4.spacingAfter`
146
- - `body.align`, `body.size`, `body.width`, `body.lineHeight`,
147
- `body.paragraphSpacing`
148
- - `caption.align`, `caption.size`, `caption.lineHeight`,
149
- `caption.spacingBefore`
150
-
151
- ## Page Themes
152
-
153
- The simplest page-specific typography change is to select a complete theme
154
- preset:
155
-
156
- ```yaml
157
- # site/pages/010-introduction/theme.yaml
158
- preset: statement
159
- ```
160
-
161
- A page-local `theme.yaml` replaces the root visual theme rather than inheriting
162
- from it. The complete preset supplies a coherent page theme without repeating
163
- the root values.
164
-
165
- Use a nested typography choice when only the typographic character needs to be
166
- specified explicitly:
167
-
168
- ```yaml
169
- # site/pages/010-introduction/theme.yaml
170
- typography:
171
- profile: statement
172
- rhythm: normal
173
- ```
174
-
175
- Without a top-level theme preset, other omitted page-theme values use engine
176
- defaults rather than values from the root theme.
177
-
178
- The `body.width` value controls the prose column independently of the page and
179
- image widths. Captions are normally centered, but `reading` uses
180
- left-aligned captions to support longer explanatory text.