@janga/norna 0.7.16 → 0.7.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/README.md +18 -9
  2. package/astro.config.mjs +35 -3
  3. package/bin/norna-cli.mjs +1 -1
  4. package/docs/README.md +16 -14
  5. package/docs/commands.md +2 -2
  6. package/docs/configuration.md +25 -2
  7. package/docs/content.md +92 -103
  8. package/docs/design/navigation-and-theme-plan.md +186 -0
  9. package/docs/design/norna-diagram-design.md +9 -9
  10. package/docs/design/site-examples-structure.md +15 -11
  11. package/docs/engine-development.md +19 -22
  12. package/docs/getting-started.md +21 -16
  13. package/docs/images-and-metadata.md +12 -9
  14. package/docs/pages.md +190 -0
  15. package/docs/public-files.md +49 -36
  16. package/docs/publishing.md +19 -3
  17. package/docs/site-files.md +46 -38
  18. package/docs/sitewide-content.md +20 -36
  19. package/docs/theme.md +109 -143
  20. package/docs/typography.md +19 -31
  21. package/examples/README.md +10 -4
  22. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +17 -41
  23. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +26 -67
  24. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +185 -88
  25. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +1 -1
  26. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +4 -4
  27. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +5 -5
  28. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +33 -23
  29. package/examples/complete-sites/dog-shelter-multi-page/README.md +1 -1
  30. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +8 -8
  31. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +20 -20
  32. package/examples/complete-sites/dog-shelter-multi-page/site/{content.md → pages/000-home/content.md} +3 -4
  33. package/examples/complete-sites/dog-shelter-multi-page/site/{routes → pages}/010-dogs/content.md +3 -4
  34. package/examples/complete-sites/dog-shelter-multi-page/site/{routes → pages}/020-adopt/content.md +3 -4
  35. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +2 -4
  36. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +17 -41
  37. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +26 -67
  38. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +185 -88
  39. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +1 -1
  40. package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +8 -0
  41. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +5 -5
  42. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +16 -12
  43. package/examples/complete-sites/dog-shelter-single-page/README.md +1 -1
  44. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +8 -8
  45. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +12 -12
  46. package/examples/complete-sites/dog-shelter-single-page/site/{content.md → pages/000-home/content.md} +5 -2
  47. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +2 -4
  48. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +17 -41
  49. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +26 -67
  50. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +180 -91
  51. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
  52. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +4 -14
  53. package/examples/feature-demos/media-and-surfaces/README.md +2 -2
  54. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +9 -9
  55. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +16 -16
  56. package/examples/feature-demos/media-and-surfaces/site/{content.md → pages/000-home/content.md} +4 -7
  57. package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/010-media/content.md +6 -5
  58. package/examples/feature-demos/media-and-surfaces/site/{routes → pages}/020-surfaces/content.md +9 -7
  59. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +2 -0
  60. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
  61. package/examples/feature-demos/sitewide-content/README.md +3 -3
  62. package/examples/feature-demos/sitewide-content/site/pages/000-home/content.md +17 -0
  63. package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +17 -0
  64. package/examples/feature-demos/sitewide-content/site/{routes → pages}/020-notices/content.md +7 -6
  65. package/examples/feature-demos/sitewide-content/site/{routes → pages}/030-footer/content.md +6 -5
  66. package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +4 -13
  67. package/examples/feature-demos/theme-preset-documentation/README.md +16 -0
  68. package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +74 -0
  69. package/examples/feature-demos/{theme-presets/site/routes/020-documentation → theme-preset-documentation/site/pages/000-home}/content.md +4 -7
  70. package/examples/feature-demos/theme-preset-documentation/site/sitewide-content.yaml +3 -0
  71. package/examples/feature-demos/theme-preset-portfolio/README.md +16 -0
  72. package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +74 -0
  73. package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +1 -0
  74. package/examples/feature-demos/{theme-presets/site/routes/010-portfolio → theme-preset-portfolio/site/pages/000-home}/content.md +4 -7
  75. package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +2 -0
  76. package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +3 -0
  77. package/examples/feature-demos/theme-preset-project/README.md +16 -0
  78. package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +74 -0
  79. package/examples/feature-demos/theme-preset-project/site/config.yaml +1 -0
  80. package/examples/feature-demos/{theme-presets/site/routes/030-project → theme-preset-project/site/pages/000-home}/content.md +4 -7
  81. package/examples/feature-demos/theme-preset-project/site/public/robots.txt +2 -0
  82. package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +3 -0
  83. package/examples/feature-demos/theme-preset-statement/README.md +16 -0
  84. package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +74 -0
  85. package/examples/feature-demos/theme-preset-statement/site/config.yaml +1 -0
  86. package/examples/feature-demos/{theme-presets/site/routes/040-statement → theme-preset-statement/site/pages/000-home}/content.md +4 -7
  87. package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +2 -0
  88. package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +3 -0
  89. package/fixtures/basic/site/{content.md → pages/000-home/content.md} +5 -6
  90. package/fixtures/basic/site/sitewide-content.yaml +1 -8
  91. package/fixtures/basic/site/theme.yaml +1 -8
  92. package/fixtures/content-model-v2/site/{content.md → pages/000-home/content.md} +11 -13
  93. package/fixtures/content-model-v2/site/pages/010-guide/content.md +18 -0
  94. package/fixtures/nested-pages/.astro/collections/site.schema.json +35 -0
  95. package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +97 -0
  96. package/fixtures/nested-pages/.astro/collections/theme.schema.json +844 -0
  97. package/fixtures/nested-pages/.astro/content-assets.mjs +4 -0
  98. package/fixtures/nested-pages/.astro/content-modules.mjs +1 -0
  99. package/fixtures/nested-pages/.astro/content.d.ts +183 -0
  100. package/fixtures/nested-pages/.astro/data-store.json +1 -0
  101. package/fixtures/nested-pages/.astro/dev-local.json +8 -0
  102. package/fixtures/nested-pages/.astro/dev.log +1128 -0
  103. package/fixtures/nested-pages/.astro/settings.json +5 -0
  104. package/fixtures/nested-pages/.astro/types.d.ts +2 -0
  105. package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +74 -0
  106. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  107. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  108. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  109. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  110. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  111. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  112. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  113. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  114. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  115. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  116. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  117. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  118. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  119. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  120. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  121. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  122. package/fixtures/nested-pages/node_modules/.vite/deps/package.json +3 -0
  123. package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  124. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  125. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  126. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  127. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  128. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  129. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  130. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  131. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  132. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  133. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  134. package/fixtures/nested-pages/site/.norna/generated-images.json +10 -0
  135. package/fixtures/nested-pages/site/config.yaml +3 -0
  136. package/fixtures/nested-pages/site/pages/000-home/content.md +15 -0
  137. package/fixtures/nested-pages/site/pages/010-guides/content.md +15 -0
  138. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +21 -0
  139. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +21 -0
  140. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +18 -0
  141. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +2 -0
  142. package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +11 -0
  143. package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +9 -0
  144. package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +3 -0
  145. package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +3 -0
  146. package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +3 -0
  147. package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +3 -0
  148. package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +3 -0
  149. package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +3 -0
  150. package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +3 -0
  151. package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +3 -0
  152. package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +3 -0
  153. package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +3 -0
  154. package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +3 -0
  155. package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +3 -0
  156. package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +3 -0
  157. package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +3 -0
  158. package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +3 -0
  159. package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +3 -0
  160. package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +3 -0
  161. package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +3 -0
  162. package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +7 -0
  163. package/fixtures/nested-pages/site/pages/020-reference/content.md +10 -0
  164. package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +11 -0
  165. package/fixtures/nested-pages/site/theme.yaml +1 -0
  166. package/package.json +8 -4
  167. package/schemas/config.schema.json +46 -5
  168. package/schemas/content-frontmatter.schema.json +28 -63
  169. package/schemas/manifest.json +4 -2
  170. package/schemas/page-theme.schema.json +192 -0
  171. package/schemas/sitewide-content.schema.json +58 -132
  172. package/schemas/theme.schema.json +434 -152
  173. package/scripts/check-config.mjs +8 -6
  174. package/scripts/deploy-site.mjs +6 -8
  175. package/scripts/doctor.mjs +2 -2
  176. package/scripts/generate-images.mjs +15 -29
  177. package/scripts/generate-schemas.mjs +7 -218
  178. package/scripts/lib/base-path-redirect.mjs +9 -0
  179. package/scripts/lib/editor-language-service.mjs +125 -79
  180. package/scripts/lib/example-sites.mjs +15 -3
  181. package/scripts/lib/heading-ids.mjs +161 -0
  182. package/scripts/lib/navigation-model.mjs +51 -0
  183. package/scripts/lib/norna-markdown-blocks.mjs +3 -4
  184. package/scripts/lib/page-model.mjs +102 -0
  185. package/scripts/lib/presentation.mjs +25 -17
  186. package/scripts/lib/project-config.mjs +46 -8
  187. package/scripts/lib/schema-definitions.mjs +78 -55
  188. package/scripts/lib/schema-editor-metadata.mjs +519 -0
  189. package/scripts/lib/schema-value-definitions.mjs +20 -6
  190. package/scripts/lib/site-content.mjs +159 -97
  191. package/scripts/lib/site-conventions.mjs +1 -0
  192. package/scripts/lib/site-paths.mjs +11 -5
  193. package/scripts/lib/theme-config.mjs +12 -18
  194. package/scripts/lib/theme-presets.mjs +55 -14
  195. package/scripts/release.mjs +1 -1
  196. package/scripts/show-typography.mjs +4 -30
  197. package/scripts/sync-content-sections.mjs +107 -68
  198. package/scripts/{test-temporary-visibility.mjs → test-banner-visibility.mjs} +8 -25
  199. package/scripts/test-client-javascript.mjs +50 -46
  200. package/scripts/test-content-check.mjs +153 -69
  201. package/scripts/test-content-model-v2.mjs +566 -285
  202. package/scripts/test-documentation.mjs +10 -3
  203. package/scripts/test-editor-language-service.mjs +172 -25
  204. package/scripts/test-engine-commands.mjs +6 -5
  205. package/scripts/test-examples.mjs +30 -1
  206. package/scripts/test-heading-ids.mjs +68 -0
  207. package/scripts/test-navigation-model.mjs +63 -0
  208. package/scripts/test-navigation.mjs +11 -2
  209. package/scripts/test-nested-pages.mjs +125 -0
  210. package/scripts/test-package-check.mjs +55 -95
  211. package/scripts/test-page-model.mjs +108 -0
  212. package/scripts/test-project-config.mjs +22 -3
  213. package/scripts/test-schemas.mjs +82 -15
  214. package/scripts/test-theme-presets.mjs +57 -42
  215. package/src/components/NavigationPageTree.astro +157 -0
  216. package/src/components/PageContentsLinks.astro +40 -0
  217. package/src/components/SectionNavigationScript.astro +117 -5
  218. package/src/components/SiteBreadcrumbs.astro +32 -0
  219. package/src/components/SiteNavigation.astro +97 -68
  220. package/src/components/SitePage.astro +93 -55
  221. package/src/components/SiteSection.astro +29 -27
  222. package/src/components/SiteTreeNavigation.astro +35 -0
  223. package/src/components/TreeNavigationScript.astro +83 -0
  224. package/src/content.config.ts +8 -10
  225. package/src/layouts/BaseLayout.astro +21 -20
  226. package/src/lib/pageThemes.ts +44 -0
  227. package/src/lib/sectionContent.ts +106 -107
  228. package/src/lib/siteNavigation.ts +49 -0
  229. package/src/lib/sitePages.ts +96 -38
  230. package/src/pages/{[slug].astro → [...slug].astro} +2 -2
  231. package/src/pages/index.astro +2 -1
  232. package/src/styles/global.css +743 -57
  233. package/starters/basic/README.md +9 -11
  234. package/starters/basic/site/{content.md → pages/000-home/content.md} +7 -4
  235. package/starters/basic/site/sitewide-content.yaml +1 -10
  236. package/starters/basic/site/theme.yaml +1 -105
  237. package/starters/project/README.md +14 -14
  238. package/starters/project/site/{content.md → pages/000-home/content.md} +5 -4
  239. package/starters/project/site/{routes → pages}/010-guide/content.md +5 -4
  240. package/starters/project/site/sitewide-content.yaml +1 -10
  241. package/starters/project/site/theme.yaml +1 -31
  242. package/docs/routes.md +0 -121
  243. package/examples/feature-demos/media-and-surfaces/site/routes/020-surfaces/theme.yaml +0 -3
  244. package/examples/feature-demos/sitewide-content/site/content.md +0 -16
  245. package/examples/feature-demos/sitewide-content/site/routes/010-identity/content.md +0 -20
  246. package/examples/feature-demos/theme-presets/README.md +0 -18
  247. package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +0 -290
  248. package/examples/feature-demos/theme-presets/site/content.md +0 -17
  249. package/examples/feature-demos/theme-presets/site/sitewide-content.yaml +0 -12
  250. package/examples/feature-demos/theme-presets/site/theme.yaml +0 -1
  251. package/fixtures/content-model-v2/site/routes/010-guide/content.md +0 -17
  252. package/scripts/lib/route-model.mjs +0 -17
  253. package/scripts/test-route-model.mjs +0 -32
  254. package/src/lib/routeThemes.ts +0 -41
  255. /package/examples/complete-sites/dog-shelter-multi-page/site/{images/intro → pages/000-home/images}/shelter-dog.jpg +0 -0
  256. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/010-dogs/images/dogs → pages/010-dogs/images}/rex.jpg +0 -0
  257. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/010-dogs/images/dogs → pages/010-dogs/images}/rover.jpg +0 -0
  258. /package/examples/complete-sites/dog-shelter-multi-page/site/{routes/020-adopt/images/adopt → pages/020-adopt/images}/adoption-dog.jpg +0 -0
  259. /package/examples/complete-sites/dog-shelter-single-page/site/{images/you-can-help → pages/000-home/images}/foster-dog.jpg +0 -0
  260. /package/examples/complete-sites/dog-shelter-single-page/site/{images/what-we-do → pages/000-home/images}/rescue-dog.jpg +0 -0
  261. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-carousel.svg +0 -0
  262. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-stack.svg +0 -0
  263. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/cards → pages/010-media/images}/card-surfaces.svg +0 -0
  264. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-one.svg +0 -0
  265. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-three.svg +0 -0
  266. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/carousel → pages/010-media/images}/carousel-two.svg +0 -0
  267. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/stack → pages/010-media/images}/stack-one.svg +0 -0
  268. /package/examples/feature-demos/media-and-surfaces/site/{routes/010-media/images/stack → pages/010-media/images}/stack-two.svg +0 -0
  269. /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/config.yaml +0 -0
  270. /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/black-schnauzer.jpg +0 -0
  271. /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/retriever-portrait.jpg +0 -0
  272. /package/examples/feature-demos/{theme-presets/site/routes/020-documentation/images/documentation → theme-preset-documentation/site/pages/000-home/images}/schnauzer-portrait.jpg +0 -0
  273. /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/public/robots.txt +0 -0
  274. /package/examples/feature-demos/{theme-presets/site/routes/020-documentation → theme-preset-documentation/site}/theme.yaml +0 -0
  275. /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/puppy-portrait.jpg +0 -0
  276. /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/shepherd-portrait.jpg +0 -0
  277. /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio/images/portfolio → theme-preset-portfolio/site/pages/000-home/images}/white-puppy.jpg +0 -0
  278. /package/examples/feature-demos/{theme-presets/site/routes/010-portfolio → theme-preset-portfolio/site}/theme.yaml +0 -0
  279. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/routeTheme.schema.json +0 -0
  280. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/site.schema.json +0 -0
  281. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/sitewide.schema.json +0 -0
  282. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/theme.schema.json +0 -0
  283. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-assets.mjs +0 -0
  284. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-modules.mjs +0 -0
  285. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content.d.ts +0 -0
  286. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/data-store.json +0 -0
  287. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev-local.json +0 -0
  288. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.json +0 -0
  289. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.log +0 -0
  290. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/settings.json +0 -0
  291. /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/types.d.ts +0 -0
  292. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/_metadata.json +0 -0
  293. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
  294. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
  295. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
  296. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
  297. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
  298. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
  299. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
  300. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
  301. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
  302. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
  303. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
  304. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
  305. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js +0 -0
  306. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
  307. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
  308. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
  309. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
  310. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
  311. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/package.json +0 -0
  312. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
  313. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
  314. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
  315. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
  316. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
  317. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
  318. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
  319. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
  320. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
  321. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
  322. /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
  323. /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/boxer-portrait.jpg +0 -0
  324. /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/grass-puppy.jpg +0 -0
  325. /package/examples/feature-demos/{theme-presets/site/routes/030-project/images/project → theme-preset-project/site/pages/000-home/images}/grey-street-dog.jpg +0 -0
  326. /package/examples/feature-demos/{theme-presets/site/routes/030-project → theme-preset-project/site}/theme.yaml +0 -0
  327. /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/black-pedigree.jpg +0 -0
  328. /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/sheepdog-grass.jpg +0 -0
  329. /package/examples/feature-demos/{theme-presets/site/routes/040-statement/images/statement → theme-preset-statement/site/pages/000-home/images}/sheepdog-wide.jpg +0 -0
  330. /package/examples/feature-demos/{theme-presets/site/routes/040-statement → theme-preset-statement/site}/theme.yaml +0 -0
  331. /package/fixtures/basic/site/{images/work → pages/000-home/images}/.gitkeep +0 -0
  332. /package/fixtures/content-model-v2/site/{images/card-section → pages/000-home/images}/adopt.svg +0 -0
  333. /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/detail.jpg +0 -0
  334. /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/duplicate.jpg +0 -0
  335. /package/fixtures/content-model-v2/site/{images/card-section → pages/000-home/images}/foster.svg +0 -0
  336. /package/fixtures/content-model-v2/site/{images/intro → pages/000-home/images}/hero.jpg +0 -0
  337. /package/fixtures/content-model-v2/site/{images/plain → pages/000-home/images}/image.jpg +0 -0
  338. /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-one.jpg +0 -0
  339. /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-three.jpg +0 -0
  340. /package/fixtures/content-model-v2/site/{images/timed → pages/000-home/images}/slide-two.jpg +0 -0
  341. /package/fixtures/content-model-v2/site/{routes/010-guide/images/intro → pages/010-guide/images}/duplicate.jpg +0 -0
  342. /package/starters/basic/site/{images/work → pages/000-home/images}/.gitkeep +0 -0
@@ -27,36 +27,81 @@
27
27
  "description": "For short, expressive sites, with larger typography, airy spacing, and stronger section emphasis."
28
28
  }
29
29
  ],
30
- "markdownDescription": "```yaml\npreset: documentation\n```\n\nSelects coordinated layout, image sizing, typography, palette and section surfaces. This is the normal starting point for a theme.\n\n[Compare theme presets](https://github.com/janga/norna/blob/v0.7.16/docs/theme.md#theme-presets)"
30
+ "markdownDescription": "```yaml\npreset: documentation\n```\n\nSelects coordinated shapes, layout, image sizing, typography, palette and section backgrounds. This is the normal starting point for a theme.\n\n[Compare theme presets](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#theme-presets)"
31
+ },
32
+ "shape": {
33
+ "description": "Site-wide shape profile. Omit this to use the selected preset.",
34
+ "type": "string",
35
+ "oneOf": [
36
+ {
37
+ "const": "square",
38
+ "title": "Square",
39
+ "description": "Use square corners for navigation, cards and framed content."
40
+ },
41
+ {
42
+ "const": "soft",
43
+ "title": "Soft",
44
+ "description": "Use restrained rounded corners consistently across the site."
45
+ }
46
+ ],
47
+ "markdownDescription": "```yaml\nshape: soft\n```\n\nChooses one consistent corner treatment for navigation, cards and framed content throughout the site.\n\n[Theme reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md)",
48
+ "examples": [
49
+ "square",
50
+ "soft"
51
+ ]
31
52
  },
32
53
  "layout": {
33
54
  "type": "object",
34
55
  "properties": {
35
- "density": {
36
- "description": "Overall spacing density. Omit this to keep the selected preset.",
56
+ "contentSpacing": {
57
+ "description": "Page content spacing. Omit this to keep the selected preset or inherited page setting.",
37
58
  "type": "string",
38
59
  "oneOf": [
39
60
  {
40
61
  "const": "compact",
41
62
  "title": "Compact",
42
- "description": "Reduce vertical spacing while preserving readable separation."
63
+ "description": "Use restrained spacing between sections and structured blocks."
43
64
  },
44
65
  {
45
66
  "const": "normal",
46
67
  "title": "Normal",
47
- "description": "Use balanced vertical spacing."
68
+ "description": "Use balanced content spacing."
48
69
  },
49
70
  {
50
- "const": "airy",
51
- "title": "Airy",
52
- "description": "Increase vertical spacing for a more expansive presentation."
71
+ "const": "spacious",
72
+ "title": "Spacious",
73
+ "description": "Use more expansive spacing between sections and structured blocks."
53
74
  }
54
- ]
75
+ ],
76
+ "markdownDescription": "```yaml\nlayout:\n contentSpacing: compact\n```\n\nPage content spacing. Omit this to keep the selected preset or inherited page setting.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
77
+ },
78
+ "textWidth": {
79
+ "description": "Body-text line length. Omit this to keep the selected preset or inherited page setting.",
80
+ "type": "string",
81
+ "oneOf": [
82
+ {
83
+ "const": "narrow",
84
+ "title": "Narrow",
85
+ "description": "Use a shorter line length suited to reading-focused text."
86
+ },
87
+ {
88
+ "const": "normal",
89
+ "title": "Normal",
90
+ "description": "Use the balanced default line length."
91
+ },
92
+ {
93
+ "const": "wide",
94
+ "title": "Wide",
95
+ "description": "Allow body text to use more horizontal space."
96
+ }
97
+ ],
98
+ "markdownDescription": "```yaml\nlayout:\n textWidth: narrow\n```\n\nBody-text line length. Omit this to keep the selected preset or inherited page setting.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
55
99
  },
56
100
  "pageWidth": {
57
101
  "description": "Maximum width of the site layout. Omit this to keep the selected preset.",
58
102
  "type": "string",
59
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$"
103
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
104
+ "markdownDescription": "```yaml\nlayout:\n pageWidth: 72rem\n```\n\nMaximum width of the site layout. Omit this to keep the selected preset.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
60
105
  },
61
106
  "gutter": {
62
107
  "description": "Horizontal page gutter as one value or separate desktop and mobile values.",
@@ -72,12 +117,14 @@
72
117
  "desktop": {
73
118
  "type": "string",
74
119
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
75
- "description": "Responsive CSS length or clamp() expression."
120
+ "description": "Responsive CSS length or clamp() expression.",
121
+ "markdownDescription": "```yaml\nlayout:\n gutter:\n desktop: clamp(1.25rem, 4vw, 3rem)\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
76
122
  },
77
123
  "mobile": {
78
124
  "type": "string",
79
125
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
80
- "description": "Responsive CSS length or clamp() expression."
126
+ "description": "Responsive CSS length or clamp() expression.",
127
+ "markdownDescription": "```yaml\nlayout:\n gutter:\n mobile: 1rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
81
128
  }
82
129
  },
83
130
  "required": [
@@ -86,6 +133,17 @@
86
133
  ],
87
134
  "additionalProperties": false
88
135
  }
136
+ ],
137
+ "markdownDescription": "```yaml\nlayout:\n gutter:\n desktop: clamp(1.25rem, 4vw, 3rem)\n mobile: 1rem\n```\n\nHorizontal page gutter as one value or separate desktop and mobile values.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
138
+ "defaultSnippets": [
139
+ {
140
+ "label": "Responsive page gutter",
141
+ "markdownDescription": "Set separate page gutters for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
142
+ "body": {
143
+ "desktop": "${1:clamp(1.25rem, 4vw, 3rem)}",
144
+ "mobile": "${2:1rem}"
145
+ }
146
+ }
89
147
  ]
90
148
  },
91
149
  "spacing": {
@@ -106,12 +164,14 @@
106
164
  "desktop": {
107
165
  "type": "string",
108
166
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
109
- "description": "Responsive CSS length or clamp() expression."
167
+ "description": "Responsive CSS length or clamp() expression.",
168
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n blockGap:\n desktop: 1.5em\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
110
169
  },
111
170
  "mobile": {
112
171
  "type": "string",
113
172
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
114
- "description": "Responsive CSS length or clamp() expression."
173
+ "description": "Responsive CSS length or clamp() expression.",
174
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n blockGap:\n mobile: 1.5em\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
115
175
  }
116
176
  },
117
177
  "required": [
@@ -120,6 +180,17 @@
120
180
  ],
121
181
  "additionalProperties": false
122
182
  }
183
+ ],
184
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n blockGap: 1.5em\n```\n\nDefault vertical gap between structured content blocks.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
185
+ "defaultSnippets": [
186
+ {
187
+ "label": "Responsive spacing",
188
+ "markdownDescription": "Set separate spacing values for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
189
+ "body": {
190
+ "desktop": "${1:1.5em}",
191
+ "mobile": "${2:1.5em}"
192
+ }
193
+ }
123
194
  ]
124
195
  },
125
196
  "finalSectionBottom": {
@@ -136,12 +207,14 @@
136
207
  "desktop": {
137
208
  "type": "string",
138
209
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
139
- "description": "Responsive CSS length or clamp() expression."
210
+ "description": "Responsive CSS length or clamp() expression.",
211
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n finalSectionBottom:\n desktop: 2rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
140
212
  },
141
213
  "mobile": {
142
214
  "type": "string",
143
215
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
144
- "description": "Responsive CSS length or clamp() expression."
216
+ "description": "Responsive CSS length or clamp() expression.",
217
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n finalSectionBottom:\n mobile: 2rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
145
218
  }
146
219
  },
147
220
  "required": [
@@ -150,6 +223,17 @@
150
223
  ],
151
224
  "additionalProperties": false
152
225
  }
226
+ ],
227
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n finalSectionBottom: 2rem\n```\n\nBottom space after the final section.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
228
+ "defaultSnippets": [
229
+ {
230
+ "label": "Responsive spacing",
231
+ "markdownDescription": "Set separate spacing values for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
232
+ "body": {
233
+ "desktop": "${1:2rem}",
234
+ "mobile": "${2:2rem}"
235
+ }
236
+ }
153
237
  ]
154
238
  },
155
239
  "firstSectionTop": {
@@ -166,12 +250,14 @@
166
250
  "desktop": {
167
251
  "type": "string",
168
252
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
169
- "description": "Responsive CSS length or clamp() expression."
253
+ "description": "Responsive CSS length or clamp() expression.",
254
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n firstSectionTop:\n desktop: 1.5rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
170
255
  },
171
256
  "mobile": {
172
257
  "type": "string",
173
258
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
174
- "description": "Responsive CSS length or clamp() expression."
259
+ "description": "Responsive CSS length or clamp() expression.",
260
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n firstSectionTop:\n mobile: 1.5rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
175
261
  }
176
262
  },
177
263
  "required": [
@@ -180,6 +266,17 @@
180
266
  ],
181
267
  "additionalProperties": false
182
268
  }
269
+ ],
270
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n firstSectionTop: 1.5rem\n```\n\nTop space before the first section.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
271
+ "defaultSnippets": [
272
+ {
273
+ "label": "Responsive spacing",
274
+ "markdownDescription": "Set separate spacing values for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
275
+ "body": {
276
+ "desktop": "${1:1.5rem}",
277
+ "mobile": "${2:1.5rem}"
278
+ }
279
+ }
183
280
  ]
184
281
  },
185
282
  "headingToBlock": {
@@ -196,12 +293,14 @@
196
293
  "desktop": {
197
294
  "type": "string",
198
295
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
199
- "description": "Responsive CSS length or clamp() expression."
296
+ "description": "Responsive CSS length or clamp() expression.",
297
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n headingToBlock:\n desktop: 0.75em\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
200
298
  },
201
299
  "mobile": {
202
300
  "type": "string",
203
301
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
204
- "description": "Responsive CSS length or clamp() expression."
302
+ "description": "Responsive CSS length or clamp() expression.",
303
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n headingToBlock:\n mobile: 0.75em\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
205
304
  }
206
305
  },
207
306
  "required": [
@@ -210,6 +309,17 @@
210
309
  ],
211
310
  "additionalProperties": false
212
311
  }
312
+ ],
313
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n headingToBlock: 0.75em\n```\n\nGap from a section heading to a following structured block.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
314
+ "defaultSnippets": [
315
+ {
316
+ "label": "Responsive spacing",
317
+ "markdownDescription": "Set separate spacing values for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
318
+ "body": {
319
+ "desktop": "${1:0.75em}",
320
+ "mobile": "${2:0.75em}"
321
+ }
322
+ }
213
323
  ]
214
324
  },
215
325
  "imageGap": {
@@ -226,12 +336,14 @@
226
336
  "desktop": {
227
337
  "type": "string",
228
338
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
229
- "description": "Responsive CSS length or clamp() expression."
339
+ "description": "Responsive CSS length or clamp() expression.",
340
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n imageGap:\n desktop: 1rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
230
341
  },
231
342
  "mobile": {
232
343
  "type": "string",
233
344
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
234
- "description": "Responsive CSS length or clamp() expression."
345
+ "description": "Responsive CSS length or clamp() expression.",
346
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n imageGap:\n mobile: 1rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
235
347
  }
236
348
  },
237
349
  "required": [
@@ -240,6 +352,17 @@
240
352
  ],
241
353
  "additionalProperties": false
242
354
  }
355
+ ],
356
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n imageGap: 1rem\n```\n\nGap between images in an image stack.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
357
+ "defaultSnippets": [
358
+ {
359
+ "label": "Responsive spacing",
360
+ "markdownDescription": "Set separate spacing values for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
361
+ "body": {
362
+ "desktop": "${1:1rem}",
363
+ "mobile": "${2:1rem}"
364
+ }
365
+ }
243
366
  ]
244
367
  },
245
368
  "sectionGap": {
@@ -256,12 +379,14 @@
256
379
  "desktop": {
257
380
  "type": "string",
258
381
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
259
- "description": "Responsive CSS length or clamp() expression."
382
+ "description": "Responsive CSS length or clamp() expression.",
383
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n sectionGap:\n desktop: 2rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
260
384
  },
261
385
  "mobile": {
262
386
  "type": "string",
263
387
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
264
- "description": "Responsive CSS length or clamp() expression."
388
+ "description": "Responsive CSS length or clamp() expression.",
389
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n sectionGap:\n mobile: 2rem\n```\n\nResponsive CSS length or clamp() expression.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
265
390
  }
266
391
  },
267
392
  "required": [
@@ -270,15 +395,41 @@
270
395
  ],
271
396
  "additionalProperties": false
272
397
  }
398
+ ],
399
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n sectionGap: 2rem\n```\n\nVertical separation between page sections.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
400
+ "defaultSnippets": [
401
+ {
402
+ "label": "Responsive spacing",
403
+ "markdownDescription": "Set separate spacing values for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
404
+ "body": {
405
+ "desktop": "${1:2rem}",
406
+ "mobile": "${2:2rem}"
407
+ }
408
+ }
273
409
  ]
274
410
  }
275
411
  },
276
- "additionalProperties": false
412
+ "additionalProperties": false,
413
+ "markdownDescription": "```yaml\nlayout:\n spacing:\n sectionGap: 2rem\n```\n\nFine-grained spacing overrides.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
414
+ "defaultSnippets": [
415
+ {
416
+ "label": "Layout spacing overrides",
417
+ "markdownDescription": "Start with the structural spacing values most commonly adjusted together.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)",
418
+ "body": {
419
+ "sectionGap": {
420
+ "desktop": "${1:2rem}",
421
+ "mobile": "${2:1.5rem}"
422
+ },
423
+ "headingToBlock": "${3:0.75em}",
424
+ "blockGap": "${4:1.5em}"
425
+ }
426
+ }
427
+ ]
277
428
  }
278
429
  },
279
430
  "additionalProperties": false,
280
431
  "description": "Optional layout overrides applied after the preset.",
281
- "markdownDescription": "```yaml\nlayout:\n density: compact\n pageWidth: 72rem\n```\n\nOverrides page width, gutters and structural spacing after the selected preset.\n\n[Layout reference](https://github.com/janga/norna/blob/v0.7.16/docs/theme.md#layout)"
432
+ "markdownDescription": "```yaml\nlayout:\n contentSpacing: compact\n textWidth: narrow\n```\n\nOverrides text width, content spacing, page width and gutters after the selected preset.\n\n[Layout reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#layout)"
282
433
  },
283
434
  "images": {
284
435
  "type": "object",
@@ -286,7 +437,8 @@
286
437
  "width": {
287
438
  "description": "Maximum managed-image width. Omit this to keep the selected preset.",
288
439
  "type": "string",
289
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$"
440
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$",
441
+ "markdownDescription": "```yaml\nimages:\n width: 900px\n```\n\nMaximum managed-image width. Omit this to keep the selected preset.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)"
290
442
  },
291
443
  "maxAvailableWidthPercent": {
292
444
  "description": "Maximum percentage of available horizontal space used by managed images.",
@@ -303,13 +455,15 @@
303
455
  "type": "number",
304
456
  "exclusiveMinimum": 0,
305
457
  "maximum": 100,
306
- "description": "Percentage used on wider screens."
458
+ "description": "Percentage used on wider screens.",
459
+ "markdownDescription": "```yaml\nimages:\n maxAvailableWidthPercent:\n desktop: 100\n```\n\nPercentage used on wider screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)"
307
460
  },
308
461
  "mobile": {
309
462
  "type": "number",
310
463
  "exclusiveMinimum": 0,
311
464
  "maximum": 100,
312
- "description": "Percentage used on narrow screens."
465
+ "description": "Percentage used on narrow screens.",
466
+ "markdownDescription": "```yaml\nimages:\n maxAvailableWidthPercent:\n mobile: 100\n```\n\nPercentage used on narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)"
313
467
  }
314
468
  },
315
469
  "required": [
@@ -318,6 +472,17 @@
318
472
  ],
319
473
  "additionalProperties": false
320
474
  }
475
+ ],
476
+ "markdownDescription": "```yaml\nimages:\n maxAvailableWidthPercent:\n desktop: 100\n mobile: 100\n```\n\nMaximum percentage of available horizontal space used by managed images.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)",
477
+ "defaultSnippets": [
478
+ {
479
+ "label": "Responsive image limit",
480
+ "markdownDescription": "Set separate managed-image limits for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)",
481
+ "body": {
482
+ "desktop": "${1:100}",
483
+ "mobile": "${2:100}"
484
+ }
485
+ }
321
486
  ]
322
487
  },
323
488
  "maxAvailableHeightPercent": {
@@ -335,13 +500,15 @@
335
500
  "type": "number",
336
501
  "exclusiveMinimum": 0,
337
502
  "maximum": 100,
338
- "description": "Percentage used on wider screens."
503
+ "description": "Percentage used on wider screens.",
504
+ "markdownDescription": "```yaml\nimages:\n maxAvailableHeightPercent:\n desktop: 74\n```\n\nPercentage used on wider screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)"
339
505
  },
340
506
  "mobile": {
341
507
  "type": "number",
342
508
  "exclusiveMinimum": 0,
343
509
  "maximum": 100,
344
- "description": "Percentage used on narrow screens."
510
+ "description": "Percentage used on narrow screens.",
511
+ "markdownDescription": "```yaml\nimages:\n maxAvailableHeightPercent:\n mobile: 68\n```\n\nPercentage used on narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)"
345
512
  }
346
513
  },
347
514
  "required": [
@@ -350,12 +517,23 @@
350
517
  ],
351
518
  "additionalProperties": false
352
519
  }
520
+ ],
521
+ "markdownDescription": "```yaml\nimages:\n maxAvailableHeightPercent:\n desktop: 74\n mobile: 68\n```\n\nMaximum percentage of viewport height used by managed images.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)",
522
+ "defaultSnippets": [
523
+ {
524
+ "label": "Responsive image limit",
525
+ "markdownDescription": "Set separate managed-image limits for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)",
526
+ "body": {
527
+ "desktop": "${1:74}",
528
+ "mobile": "${2:68}"
529
+ }
530
+ }
353
531
  ]
354
532
  }
355
533
  },
356
534
  "additionalProperties": false,
357
535
  "description": "Optional defaults for managed image presentation.",
358
- "markdownDescription": "```yaml\nimages:\n width: 900px\n maxAvailableHeightPercent: 74\n```\n\nOverrides the available width and height used by Norna-managed images.\n\n[Image sizing reference](https://github.com/janga/norna/blob/v0.7.16/docs/theme.md#image-sizing)"
536
+ "markdownDescription": "```yaml\nimages:\n width: 900px\n maxAvailableHeightPercent: 74\n```\n\nOverrides the available width and height used by Norna-managed images.\n\n[Image sizing reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#image-sizing)"
359
537
  },
360
538
  "typography": {
361
539
  "type": "object",
@@ -363,7 +541,8 @@
363
541
  "fontFamily": {
364
542
  "description": "CSS font-family stack.",
365
543
  "type": "string",
366
- "minLength": 1
544
+ "minLength": 1,
545
+ "markdownDescription": "```yaml\ntypography:\n fontFamily: \"Arial, sans-serif\"\n```\n\nCSS font-family stack.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
367
546
  },
368
547
  "profile": {
369
548
  "description": "Typography profile. Omit this to keep the selected preset.",
@@ -389,7 +568,8 @@
389
568
  "title": "Statement",
390
569
  "description": "Stronger headings and tighter body rhythm for short, expressive pages."
391
570
  }
392
- ]
571
+ ],
572
+ "markdownDescription": "```yaml\ntypography:\n profile: reading\n```\n\nTypography profile. Omit this to keep the selected preset.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
393
573
  },
394
574
  "rhythm": {
395
575
  "description": "Typography spacing rhythm. Omit this to keep the selected preset.",
@@ -410,7 +590,8 @@
410
590
  "title": "Airy",
411
591
  "description": "Increase vertical spacing for a more expansive presentation."
412
592
  }
413
- ]
593
+ ],
594
+ "markdownDescription": "```yaml\ntypography:\n rhythm: normal\n```\n\nTypography spacing rhythm. Omit this to keep the selected preset.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
414
595
  },
415
596
  "overrides": {
416
597
  "description": "Focused typography overrides applied after the profile.",
@@ -447,7 +628,8 @@
447
628
  "title": "Right",
448
629
  "description": "Align text with the right edge of its text area."
449
630
  }
450
- ]
631
+ ],
632
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n \n align:\n desktop: left\n```\n\nText alignment on wider screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
451
633
  },
452
634
  "mobile": {
453
635
  "description": "Text alignment on narrow screens.",
@@ -468,10 +650,22 @@
468
650
  "title": "Right",
469
651
  "description": "Align text with the right edge of its text area."
470
652
  }
471
- ]
653
+ ],
654
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n \n align:\n mobile: left\n```\n\nText alignment on narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
472
655
  }
473
656
  },
474
- "additionalProperties": false
657
+ "additionalProperties": false,
658
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n \n align:\n desktop: left\n mobile: left\n```\n\nResponsive text alignment override.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
659
+ "defaultSnippets": [
660
+ {
661
+ "label": "Responsive text alignment",
662
+ "markdownDescription": "Set separate text alignment for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
663
+ "body": {
664
+ "desktop": "${1:left}",
665
+ "mobile": "${2:left}"
666
+ }
667
+ }
668
+ ]
475
669
  },
476
670
  "size": {
477
671
  "type": "string",
@@ -497,13 +691,15 @@
497
691
  "title": "Extra large",
498
692
  "description": "Use the largest available type size for exceptional emphasis."
499
693
  }
500
- ]
694
+ ],
695
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n \n size: medium\n```\n\nText size from the active typography system. Omit an override to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
501
696
  },
502
697
  "lineHeight": {
503
698
  "type": "number",
504
699
  "minimum": 1,
505
700
  "maximum": 3,
506
- "description": "Unitless line height between 1 and 3."
701
+ "description": "Unitless line height between 1 and 3.",
702
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n \n lineHeight: 1.5\n```\n\nUnitless line height between 1 and 3.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
507
703
  },
508
704
  "weight": {
509
705
  "description": "Heading font weight. Omit this to keep the profile value.",
@@ -528,20 +724,24 @@
528
724
  "title": "Bold",
529
725
  "description": "Use bold font weight."
530
726
  }
531
- ]
727
+ ],
728
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n \n weight: 600\n```\n\nHeading font weight. Omit this to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
532
729
  },
533
730
  "spacingBefore": {
534
731
  "description": "Vertical space before the heading.",
535
732
  "type": "string",
536
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
733
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
734
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n \n spacingBefore: 1.5em\n```\n\nVertical space before the heading.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
537
735
  },
538
736
  "spacingAfter": {
539
737
  "description": "Vertical space after the heading.",
540
738
  "type": "string",
541
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
739
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
740
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n \n spacingAfter: 0.5em\n```\n\nVertical space after the heading.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
542
741
  }
543
742
  },
544
- "additionalProperties": false
743
+ "additionalProperties": false,
744
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h1:\n size: medium\n```\n\nOverrides for Markdown level 1 headings.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
545
745
  },
546
746
  "h2": {
547
747
  "description": "Overrides for Markdown level 2 section headings.",
@@ -570,7 +770,8 @@
570
770
  "title": "Right",
571
771
  "description": "Align text with the right edge of its text area."
572
772
  }
573
- ]
773
+ ],
774
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n \n align:\n desktop: left\n```\n\nText alignment on wider screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
574
775
  },
575
776
  "mobile": {
576
777
  "description": "Text alignment on narrow screens.",
@@ -591,10 +792,22 @@
591
792
  "title": "Right",
592
793
  "description": "Align text with the right edge of its text area."
593
794
  }
594
- ]
795
+ ],
796
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n \n align:\n mobile: left\n```\n\nText alignment on narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
595
797
  }
596
798
  },
597
- "additionalProperties": false
799
+ "additionalProperties": false,
800
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n \n align:\n desktop: left\n mobile: left\n```\n\nResponsive text alignment override.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
801
+ "defaultSnippets": [
802
+ {
803
+ "label": "Responsive text alignment",
804
+ "markdownDescription": "Set separate text alignment for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
805
+ "body": {
806
+ "desktop": "${1:left}",
807
+ "mobile": "${2:left}"
808
+ }
809
+ }
810
+ ]
598
811
  },
599
812
  "size": {
600
813
  "type": "string",
@@ -620,13 +833,15 @@
620
833
  "title": "Extra large",
621
834
  "description": "Use the largest available type size for exceptional emphasis."
622
835
  }
623
- ]
836
+ ],
837
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n \n size: medium\n```\n\nText size from the active typography system. Omit an override to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
624
838
  },
625
839
  "lineHeight": {
626
840
  "type": "number",
627
841
  "minimum": 1,
628
842
  "maximum": 3,
629
- "description": "Unitless line height between 1 and 3."
843
+ "description": "Unitless line height between 1 and 3.",
844
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n \n lineHeight: 1.5\n```\n\nUnitless line height between 1 and 3.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
630
845
  },
631
846
  "weight": {
632
847
  "description": "Heading font weight. Omit this to keep the profile value.",
@@ -651,20 +866,24 @@
651
866
  "title": "Bold",
652
867
  "description": "Use bold font weight."
653
868
  }
654
- ]
869
+ ],
870
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n \n weight: 600\n```\n\nHeading font weight. Omit this to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
655
871
  },
656
872
  "spacingBefore": {
657
873
  "description": "Vertical space before the heading.",
658
874
  "type": "string",
659
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
875
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
876
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n \n spacingBefore: 1.5em\n```\n\nVertical space before the heading.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
660
877
  },
661
878
  "spacingAfter": {
662
879
  "description": "Vertical space after the heading.",
663
880
  "type": "string",
664
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
881
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
882
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n \n spacingAfter: 0.5em\n```\n\nVertical space after the heading.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
665
883
  }
666
884
  },
667
- "additionalProperties": false
885
+ "additionalProperties": false,
886
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n size: medium\n```\n\nOverrides for Markdown level 2 section headings.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
668
887
  },
669
888
  "h3": {
670
889
  "description": "Overrides for Markdown level 3 headings.",
@@ -693,7 +912,8 @@
693
912
  "title": "Right",
694
913
  "description": "Align text with the right edge of its text area."
695
914
  }
696
- ]
915
+ ],
916
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n \n align:\n desktop: left\n```\n\nText alignment on wider screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
697
917
  },
698
918
  "mobile": {
699
919
  "description": "Text alignment on narrow screens.",
@@ -714,10 +934,22 @@
714
934
  "title": "Right",
715
935
  "description": "Align text with the right edge of its text area."
716
936
  }
717
- ]
937
+ ],
938
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n \n align:\n mobile: left\n```\n\nText alignment on narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
718
939
  }
719
940
  },
720
- "additionalProperties": false
941
+ "additionalProperties": false,
942
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n \n align:\n desktop: left\n mobile: left\n```\n\nResponsive text alignment override.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
943
+ "defaultSnippets": [
944
+ {
945
+ "label": "Responsive text alignment",
946
+ "markdownDescription": "Set separate text alignment for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
947
+ "body": {
948
+ "desktop": "${1:left}",
949
+ "mobile": "${2:left}"
950
+ }
951
+ }
952
+ ]
721
953
  },
722
954
  "size": {
723
955
  "type": "string",
@@ -743,13 +975,15 @@
743
975
  "title": "Extra large",
744
976
  "description": "Use the largest available type size for exceptional emphasis."
745
977
  }
746
- ]
978
+ ],
979
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n \n size: medium\n```\n\nText size from the active typography system. Omit an override to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
747
980
  },
748
981
  "lineHeight": {
749
982
  "type": "number",
750
983
  "minimum": 1,
751
984
  "maximum": 3,
752
- "description": "Unitless line height between 1 and 3."
985
+ "description": "Unitless line height between 1 and 3.",
986
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n \n lineHeight: 1.5\n```\n\nUnitless line height between 1 and 3.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
753
987
  },
754
988
  "weight": {
755
989
  "description": "Heading font weight. Omit this to keep the profile value.",
@@ -774,20 +1008,24 @@
774
1008
  "title": "Bold",
775
1009
  "description": "Use bold font weight."
776
1010
  }
777
- ]
1011
+ ],
1012
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n \n weight: 600\n```\n\nHeading font weight. Omit this to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
778
1013
  },
779
1014
  "spacingBefore": {
780
1015
  "description": "Vertical space before the heading.",
781
1016
  "type": "string",
782
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
1017
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
1018
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n \n spacingBefore: 1.5em\n```\n\nVertical space before the heading.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
783
1019
  },
784
1020
  "spacingAfter": {
785
1021
  "description": "Vertical space after the heading.",
786
1022
  "type": "string",
787
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
1023
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
1024
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n \n spacingAfter: 0.5em\n```\n\nVertical space after the heading.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
788
1025
  }
789
1026
  },
790
- "additionalProperties": false
1027
+ "additionalProperties": false,
1028
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h3:\n size: medium\n```\n\nOverrides for Markdown level 3 headings.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
791
1029
  },
792
1030
  "h4": {
793
1031
  "description": "Overrides for Markdown level 4 headings.",
@@ -816,7 +1054,8 @@
816
1054
  "title": "Right",
817
1055
  "description": "Align text with the right edge of its text area."
818
1056
  }
819
- ]
1057
+ ],
1058
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n \n align:\n desktop: left\n```\n\nText alignment on wider screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
820
1059
  },
821
1060
  "mobile": {
822
1061
  "description": "Text alignment on narrow screens.",
@@ -837,10 +1076,22 @@
837
1076
  "title": "Right",
838
1077
  "description": "Align text with the right edge of its text area."
839
1078
  }
840
- ]
1079
+ ],
1080
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n \n align:\n mobile: left\n```\n\nText alignment on narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
841
1081
  }
842
1082
  },
843
- "additionalProperties": false
1083
+ "additionalProperties": false,
1084
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n \n align:\n desktop: left\n mobile: left\n```\n\nResponsive text alignment override.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
1085
+ "defaultSnippets": [
1086
+ {
1087
+ "label": "Responsive text alignment",
1088
+ "markdownDescription": "Set separate text alignment for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
1089
+ "body": {
1090
+ "desktop": "${1:left}",
1091
+ "mobile": "${2:left}"
1092
+ }
1093
+ }
1094
+ ]
844
1095
  },
845
1096
  "size": {
846
1097
  "type": "string",
@@ -866,13 +1117,15 @@
866
1117
  "title": "Extra large",
867
1118
  "description": "Use the largest available type size for exceptional emphasis."
868
1119
  }
869
- ]
1120
+ ],
1121
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n \n size: medium\n```\n\nText size from the active typography system. Omit an override to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
870
1122
  },
871
1123
  "lineHeight": {
872
1124
  "type": "number",
873
1125
  "minimum": 1,
874
1126
  "maximum": 3,
875
- "description": "Unitless line height between 1 and 3."
1127
+ "description": "Unitless line height between 1 and 3.",
1128
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n \n lineHeight: 1.5\n```\n\nUnitless line height between 1 and 3.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
876
1129
  },
877
1130
  "weight": {
878
1131
  "description": "Heading font weight. Omit this to keep the profile value.",
@@ -897,23 +1150,28 @@
897
1150
  "title": "Bold",
898
1151
  "description": "Use bold font weight."
899
1152
  }
900
- ]
1153
+ ],
1154
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n \n weight: 600\n```\n\nHeading font weight. Omit this to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
901
1155
  },
902
1156
  "spacingBefore": {
903
1157
  "description": "Vertical space before the heading.",
904
1158
  "type": "string",
905
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
1159
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
1160
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n \n spacingBefore: 1.5em\n```\n\nVertical space before the heading.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
906
1161
  },
907
1162
  "spacingAfter": {
908
1163
  "description": "Vertical space after the heading.",
909
1164
  "type": "string",
910
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
1165
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
1166
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n \n spacingAfter: 0.5em\n```\n\nVertical space after the heading.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
911
1167
  }
912
1168
  },
913
- "additionalProperties": false
1169
+ "additionalProperties": false,
1170
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h4:\n size: medium\n```\n\nOverrides for Markdown level 4 headings.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
914
1171
  }
915
1172
  },
916
- "additionalProperties": false
1173
+ "additionalProperties": false,
1174
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n headings:\n h2:\n size: medium\n```\n\nOverrides for heading levels.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
917
1175
  },
918
1176
  "body": {
919
1177
  "description": "Overrides for body text.",
@@ -942,7 +1200,8 @@
942
1200
  "title": "Right",
943
1201
  "description": "Align text with the right edge of its text area."
944
1202
  }
945
- ]
1203
+ ],
1204
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n body:\n align:\n desktop: left\n```\n\nText alignment on wider screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
946
1205
  },
947
1206
  "mobile": {
948
1207
  "description": "Text alignment on narrow screens.",
@@ -963,10 +1222,22 @@
963
1222
  "title": "Right",
964
1223
  "description": "Align text with the right edge of its text area."
965
1224
  }
966
- ]
1225
+ ],
1226
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n body:\n align:\n mobile: left\n```\n\nText alignment on narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
967
1227
  }
968
1228
  },
969
- "additionalProperties": false
1229
+ "additionalProperties": false,
1230
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n body:\n align:\n desktop: left\n mobile: left\n```\n\nResponsive text alignment override.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
1231
+ "defaultSnippets": [
1232
+ {
1233
+ "label": "Responsive text alignment",
1234
+ "markdownDescription": "Set separate text alignment for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
1235
+ "body": {
1236
+ "desktop": "${1:left}",
1237
+ "mobile": "${2:left}"
1238
+ }
1239
+ }
1240
+ ]
970
1241
  },
971
1242
  "size": {
972
1243
  "type": "string",
@@ -992,42 +1263,25 @@
992
1263
  "title": "Extra large",
993
1264
  "description": "Use the largest available type size for exceptional emphasis."
994
1265
  }
995
- ]
1266
+ ],
1267
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n body:\n size: medium\n```\n\nText size from the active typography system. Omit an override to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
996
1268
  },
997
1269
  "lineHeight": {
998
1270
  "type": "number",
999
1271
  "minimum": 1,
1000
1272
  "maximum": 3,
1001
- "description": "Unitless line height between 1 and 3."
1002
- },
1003
- "width": {
1004
- "description": "Maximum body-text line length.",
1005
- "type": "string",
1006
- "oneOf": [
1007
- {
1008
- "const": "narrow",
1009
- "title": "Narrow",
1010
- "description": "Use a shorter line length suited to reading-focused text."
1011
- },
1012
- {
1013
- "const": "normal",
1014
- "title": "Normal",
1015
- "description": "Use the balanced default line length."
1016
- },
1017
- {
1018
- "const": "wide",
1019
- "title": "Wide",
1020
- "description": "Allow body text to use more horizontal space."
1021
- }
1022
- ]
1273
+ "description": "Unitless line height between 1 and 3.",
1274
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n body:\n lineHeight: 1.5\n```\n\nUnitless line height between 1 and 3.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1023
1275
  },
1024
1276
  "paragraphSpacing": {
1025
1277
  "description": "Vertical space between body paragraphs.",
1026
1278
  "type": "string",
1027
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
1279
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
1280
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n body:\n paragraphSpacing: 1em\n```\n\nVertical space between body paragraphs.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1028
1281
  }
1029
1282
  },
1030
- "additionalProperties": false
1283
+ "additionalProperties": false,
1284
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n body:\n lineHeight: 1.55\n```\n\nOverrides for body text.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1031
1285
  },
1032
1286
  "caption": {
1033
1287
  "description": "Overrides for image captions.",
@@ -1056,7 +1310,8 @@
1056
1310
  "title": "Right",
1057
1311
  "description": "Align text with the right edge of its text area."
1058
1312
  }
1059
- ]
1313
+ ],
1314
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n caption:\n align:\n desktop: left\n```\n\nText alignment on wider screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1060
1315
  },
1061
1316
  "mobile": {
1062
1317
  "description": "Text alignment on narrow screens.",
@@ -1077,10 +1332,22 @@
1077
1332
  "title": "Right",
1078
1333
  "description": "Align text with the right edge of its text area."
1079
1334
  }
1080
- ]
1335
+ ],
1336
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n caption:\n align:\n mobile: left\n```\n\nText alignment on narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1081
1337
  }
1082
1338
  },
1083
- "additionalProperties": false
1339
+ "additionalProperties": false,
1340
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n caption:\n align:\n desktop: left\n mobile: left\n```\n\nResponsive text alignment override.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
1341
+ "defaultSnippets": [
1342
+ {
1343
+ "label": "Responsive text alignment",
1344
+ "markdownDescription": "Set separate text alignment for wider and narrow screens.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
1345
+ "body": {
1346
+ "desktop": "${1:left}",
1347
+ "mobile": "${2:left}"
1348
+ }
1349
+ }
1350
+ ]
1084
1351
  },
1085
1352
  "size": {
1086
1353
  "type": "string",
@@ -1106,29 +1373,51 @@
1106
1373
  "title": "Extra large",
1107
1374
  "description": "Use the largest available type size for exceptional emphasis."
1108
1375
  }
1109
- ]
1376
+ ],
1377
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n caption:\n size: medium\n```\n\nText size from the active typography system. Omit an override to keep the profile value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1110
1378
  },
1111
1379
  "lineHeight": {
1112
1380
  "type": "number",
1113
1381
  "minimum": 1,
1114
1382
  "maximum": 3,
1115
- "description": "Unitless line height between 1 and 3."
1383
+ "description": "Unitless line height between 1 and 3.",
1384
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n caption:\n lineHeight: 1.5\n```\n\nUnitless line height between 1 and 3.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1116
1385
  },
1117
1386
  "spacingBefore": {
1118
1387
  "description": "Vertical space between an image and its caption.",
1119
1388
  "type": "string",
1120
- "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
1389
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$",
1390
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n caption:\n spacingBefore: 0.5em\n```\n\nVertical space between an image and its caption.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1121
1391
  }
1122
1392
  },
1123
- "additionalProperties": false
1393
+ "additionalProperties": false,
1394
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n caption:\n size: small\n```\n\nOverrides for image captions.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1124
1395
  }
1125
1396
  },
1126
- "additionalProperties": false
1397
+ "additionalProperties": false,
1398
+ "markdownDescription": "```yaml\ntypography:\n overrides:\n body:\n lineHeight: 1.55\n```\n\nFocused typography overrides applied after the profile.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
1399
+ "defaultSnippets": [
1400
+ {
1401
+ "label": "Typography overrides",
1402
+ "markdownDescription": "Start a focused set of heading and body-text overrides.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)",
1403
+ "body": {
1404
+ "headings": {
1405
+ "h2": {
1406
+ "size": "${1:medium}",
1407
+ "weight": "${2:600}"
1408
+ }
1409
+ },
1410
+ "body": {
1411
+ "lineHeight": "${3:1.55}"
1412
+ }
1413
+ }
1414
+ }
1415
+ ]
1127
1416
  }
1128
1417
  },
1129
1418
  "additionalProperties": false,
1130
1419
  "description": "Typography profile, rhythm, font family, and focused overrides.",
1131
- "markdownDescription": "```yaml\ntypography:\n profile: reading\n rhythm: normal\n```\n\nOverrides the preset's font stack, typography profile, rhythm or individual text settings.\n\n[Typography configuration reference](https://github.com/janga/norna/blob/v0.7.16/docs/typography.md#configuration-shape)"
1420
+ "markdownDescription": "```yaml\ntypography:\n profile: reading\n rhythm: normal\n```\n\nOverrides the preset's font stack, typography profile, rhythm or individual text settings.\n\n[Typography configuration reference](https://github.com/janga/norna/blob/v0.7.18/docs/typography.md#configuration-shape)"
1132
1421
  },
1133
1422
  "palette": {
1134
1423
  "type": "string",
@@ -1150,59 +1439,52 @@
1150
1439
  "description": "Warm off-white surfaces with dark text."
1151
1440
  }
1152
1441
  ],
1153
- "markdownDescription": "```yaml\npalette: paper\n```\n\nChooses a coordinated color system for the page frame, navigation, footer and section surfaces.\n\n[Palette and section surfaces](https://github.com/janga/norna/blob/v0.7.16/docs/theme.md#palette-and-section-surfaces)",
1442
+ "markdownDescription": "```yaml\npalette: paper\n```\n\nChooses a coordinated color system for the page frame, navigation, footer and section surfaces.\n\n[Palette and section surfaces](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#palette-and-section-surfaces)",
1154
1443
  "examples": [
1155
1444
  "dark",
1156
1445
  "light",
1157
1446
  "paper"
1158
1447
  ]
1159
1448
  },
1160
- "sectionSurfaces": {
1161
- "description": "Surface sequence cycled through page sections. Omit this to keep the selected preset.",
1162
- "minItems": 1,
1163
- "maxItems": 3,
1164
- "type": "array",
1165
- "items": {
1166
- "type": "string",
1167
- "description": "Semantic section surface from the active palette.",
1168
- "oneOf": [
1169
- {
1170
- "const": "base",
1171
- "title": "Base",
1172
- "description": "Use the palette's normal page surface."
1173
- },
1174
- {
1175
- "const": "soft",
1176
- "title": "Soft",
1177
- "description": "Use the palette's subtle contrasting surface."
1178
- },
1179
- {
1180
- "const": "emphasis",
1181
- "title": "Emphasis",
1182
- "description": "Use the palette's strongest section surface."
1183
- }
1184
- ]
1449
+ "sections": {
1450
+ "type": "object",
1451
+ "properties": {
1452
+ "backgroundPattern": {
1453
+ "description": "Section background sequence. Omit this to keep the selected preset or inherited page setting.",
1454
+ "type": "string",
1455
+ "oneOf": [
1456
+ {
1457
+ "const": "uniform",
1458
+ "title": "Uniform",
1459
+ "description": "Use the palette base surface for every section."
1460
+ },
1461
+ {
1462
+ "const": "alternating",
1463
+ "title": "Alternating",
1464
+ "description": "Alternate between the palette base and soft surfaces."
1465
+ },
1466
+ {
1467
+ "const": "cycling",
1468
+ "title": "Cycling",
1469
+ "description": "Cycle through the palette base, soft and emphasis surfaces."
1470
+ }
1471
+ ],
1472
+ "markdownDescription": "```yaml\nsections:\n backgroundPattern: alternating\n```\n\nSection background sequence. Omit this to keep the selected preset or inherited page setting.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#palette-and-section-surfaces)",
1473
+ "examples": [
1474
+ "uniform",
1475
+ "alternating",
1476
+ "cycling"
1477
+ ]
1478
+ }
1185
1479
  },
1186
- "markdownDescription": "```yaml\nsectionSurfaces: [base, soft, emphasis]\n```\n\nLists one to three semantic surfaces. Norna cycles through them in section order; omit this field to keep the preset sequence.\n\n[Palette and section surfaces](https://github.com/janga/norna/blob/v0.7.16/docs/theme.md#palette-and-section-surfaces)",
1187
- "examples": [
1188
- [
1189
- "base"
1190
- ],
1191
- [
1192
- "base",
1193
- "soft"
1194
- ],
1195
- [
1196
- "base",
1197
- "soft",
1198
- "emphasis"
1199
- ]
1200
- ]
1480
+ "additionalProperties": false,
1481
+ "description": "Defaults for page section presentation.",
1482
+ "markdownDescription": "```yaml\nsections:\n backgroundPattern: alternating\n```\n\nChooses whether section backgrounds stay uniform, alternate between two surfaces or cycle through three.\n\n[Palette and section surfaces](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md#palette-and-section-surfaces)"
1201
1483
  }
1202
1484
  },
1203
1485
  "additionalProperties": false,
1204
- "description": "Visual settings for a site or route. A route theme replaces the inherited visual theme; site identity remains site-wide.",
1486
+ "description": "Site-wide visual identity and default page presentation. Presets may be selected only in the root theme.",
1205
1487
  "$id": "https://janga.github.io/norna/schemas/theme.schema.json",
1206
1488
  "title": "Norna visual theme",
1207
- "markdownDescription": "```yaml\npreset: documentation\n```\n\nChoose one complete preset first. Add focused overrides only when the site needs to differ from it.\n\n[Theme reference](https://github.com/janga/norna/blob/v0.7.16/docs/theme.md)"
1489
+ "markdownDescription": "```yaml\npreset: documentation\n```\n\nChoose one complete preset first. Add focused overrides only when the site needs to differ from it.\n\n[Theme reference](https://github.com/janga/norna/blob/v0.7.18/docs/theme.md)"
1208
1490
  }