@janga/norna 0.7.18 → 0.7.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/README.md +22 -12
  2. package/astro.config.mjs +22 -0
  3. package/bin/norna-cli.mjs +6 -0
  4. package/package.json +45 -12
  5. package/schemas/category.schema.json +20 -0
  6. package/schemas/config.schema.json +16 -6
  7. package/schemas/content-frontmatter.schema.json +5 -5
  8. package/schemas/manifest.json +2 -1
  9. package/schemas/page-theme.schema.json +22 -22
  10. package/schemas/sitewide-content.schema.json +18 -18
  11. package/schemas/theme.schema.json +312 -146
  12. package/scripts/add-site-node.mjs +251 -0
  13. package/scripts/check-config.mjs +10 -2
  14. package/scripts/deploy-site.mjs +5 -8
  15. package/scripts/generate-images.mjs +11 -15
  16. package/scripts/generate-schemas.mjs +4 -1
  17. package/scripts/init-site.mjs +35 -0
  18. package/scripts/lib/astro-command.mjs +14 -9
  19. package/scripts/lib/editor-language-service.mjs +28 -177
  20. package/scripts/lib/heading-ids.mjs +3 -1
  21. package/scripts/lib/navigation-model.mjs +23 -17
  22. package/scripts/lib/norna-markdown-blocks.mjs +64 -145
  23. package/scripts/lib/norna-markdown-render-plugin.mjs +37 -0
  24. package/scripts/lib/object.mjs +28 -0
  25. package/scripts/lib/page-markdown.mjs +282 -0
  26. package/scripts/lib/presentation-contract.mjs +266 -0
  27. package/scripts/lib/presentation-palette-metadata.mjs +51 -0
  28. package/scripts/lib/presentation.mjs +526 -79
  29. package/scripts/lib/project-config.mjs +53 -6
  30. package/scripts/lib/schema-definitions.mjs +53 -13
  31. package/scripts/lib/schema-editor-metadata.mjs +107 -18
  32. package/scripts/lib/schema-value-definitions.mjs +24 -10
  33. package/scripts/lib/site-content.mjs +23 -238
  34. package/scripts/lib/site-paths.mjs +2 -3
  35. package/scripts/lib/site-structure.mjs +189 -0
  36. package/scripts/lib/theme-presets.mjs +75 -104
  37. package/scripts/lib/theme-profiles.mjs +221 -0
  38. package/scripts/lib/typography.mjs +220 -35
  39. package/scripts/lib/yaml-config.mjs +46 -6
  40. package/scripts/lib/yaml-indentation.mjs +86 -0
  41. package/scripts/show-typography.mjs +2 -3
  42. package/scripts/sync-content-sections.mjs +87 -76
  43. package/src/components/DisplaySettings.astro +107 -0
  44. package/src/components/ImageCarousel.astro +34 -13
  45. package/src/components/NavigationPageTree.astro +74 -43
  46. package/src/components/SectionNavigationScript.astro +56 -2
  47. package/src/components/SiteBreadcrumbs.astro +15 -12
  48. package/src/components/SiteNavigation.astro +92 -41
  49. package/src/components/SitePage.astro +35 -39
  50. package/src/components/SiteSection.astro +35 -191
  51. package/src/components/SiteTreeNavigation.astro +10 -9
  52. package/src/layouts/BaseLayout.astro +46 -6
  53. package/src/lib/generatedImages.ts +0 -7
  54. package/src/lib/readerPreferencesScript.mjs +141 -0
  55. package/src/lib/sectionContent.ts +119 -201
  56. package/src/lib/siteNavigation.ts +36 -18
  57. package/src/lib/sitePages.ts +91 -20
  58. package/src/pages/[...slug].astro +2 -2
  59. package/src/styles/global.css +759 -296
  60. package/starters/basic/README.md +2 -2
  61. package/docs/README.md +0 -137
  62. package/docs/assets/norna-dog-shelter.jpg +0 -0
  63. package/docs/commands.md +0 -189
  64. package/docs/configuration.md +0 -142
  65. package/docs/content.md +0 -351
  66. package/docs/design/command-organization.md +0 -414
  67. package/docs/design/navigation-and-theme-plan.md +0 -186
  68. package/docs/design/norna-diagram-design.md +0 -159
  69. package/docs/design/site-examples-structure.md +0 -119
  70. package/docs/engine-development.md +0 -215
  71. package/docs/getting-started.md +0 -206
  72. package/docs/how-to/embedded-site.md +0 -35
  73. package/docs/images-and-metadata.md +0 -188
  74. package/docs/local-development.md +0 -82
  75. package/docs/pages.md +0 -190
  76. package/docs/public-files.md +0 -118
  77. package/docs/publishing.md +0 -117
  78. package/docs/requirements.md +0 -54
  79. package/docs/site-files.md +0 -152
  80. package/docs/sitewide-content.md +0 -73
  81. package/docs/theme.md +0 -237
  82. package/docs/typography.md +0 -168
  83. package/examples/README.md +0 -49
  84. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/site.schema.json +0 -35
  85. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/sitewide.schema.json +0 -97
  86. package/examples/complete-sites/dog-shelter-multi-page/.astro/collections/theme.schema.json +0 -852
  87. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-assets.mjs +0 -4
  88. package/examples/complete-sites/dog-shelter-multi-page/.astro/content-modules.mjs +0 -1
  89. package/examples/complete-sites/dog-shelter-multi-page/.astro/content.d.ts +0 -183
  90. package/examples/complete-sites/dog-shelter-multi-page/.astro/data-store.json +0 -1
  91. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev-local.json +0 -8
  92. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.json +0 -13
  93. package/examples/complete-sites/dog-shelter-multi-page/.astro/dev.log +0 -36
  94. package/examples/complete-sites/dog-shelter-multi-page/.astro/settings.json +0 -5
  95. package/examples/complete-sites/dog-shelter-multi-page/.astro/types.d.ts +0 -2
  96. package/examples/complete-sites/dog-shelter-multi-page/README.md +0 -24
  97. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/_metadata.json +0 -74
  98. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  99. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  100. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  101. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  102. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  103. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  104. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  105. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  106. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  107. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  108. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  109. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  110. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  111. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  112. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  113. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  114. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/package.json +0 -3
  115. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  116. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  117. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  118. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  119. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  120. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  121. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  122. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  123. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  124. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  125. package/examples/complete-sites/dog-shelter-multi-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  126. package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +0 -98
  127. package/examples/complete-sites/dog-shelter-multi-page/site/config.yaml +0 -1
  128. package/examples/complete-sites/dog-shelter-multi-page/site/pages/000-home/content.md +0 -23
  129. package/examples/complete-sites/dog-shelter-multi-page/site/pages/000-home/images/shelter-dog.jpg +0 -0
  130. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/content.md +0 -21
  131. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rex.jpg +0 -0
  132. package/examples/complete-sites/dog-shelter-multi-page/site/pages/010-dogs/images/rover.jpg +0 -0
  133. package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/content.md +0 -22
  134. package/examples/complete-sites/dog-shelter-multi-page/site/pages/020-adopt/images/adoption-dog.jpg +0 -0
  135. package/examples/complete-sites/dog-shelter-multi-page/site/public/favicon.svg +0 -10
  136. package/examples/complete-sites/dog-shelter-multi-page/site/public/logo.svg +0 -9
  137. package/examples/complete-sites/dog-shelter-multi-page/site/public/robots.txt +0 -2
  138. package/examples/complete-sites/dog-shelter-multi-page/site/sitewide-content.yaml +0 -4
  139. package/examples/complete-sites/dog-shelter-multi-page/site/theme.yaml +0 -1
  140. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/site.schema.json +0 -35
  141. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/sitewide.schema.json +0 -97
  142. package/examples/complete-sites/dog-shelter-single-page/.astro/collections/theme.schema.json +0 -852
  143. package/examples/complete-sites/dog-shelter-single-page/.astro/content-assets.mjs +0 -4
  144. package/examples/complete-sites/dog-shelter-single-page/.astro/content-modules.mjs +0 -1
  145. package/examples/complete-sites/dog-shelter-single-page/.astro/content.d.ts +0 -183
  146. package/examples/complete-sites/dog-shelter-single-page/.astro/data-store.json +0 -1
  147. package/examples/complete-sites/dog-shelter-single-page/.astro/dev-local.json +0 -8
  148. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.json +0 -13
  149. package/examples/complete-sites/dog-shelter-single-page/.astro/dev.log +0 -18
  150. package/examples/complete-sites/dog-shelter-single-page/.astro/settings.json +0 -5
  151. package/examples/complete-sites/dog-shelter-single-page/.astro/types.d.ts +0 -2
  152. package/examples/complete-sites/dog-shelter-single-page/README.md +0 -24
  153. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/_metadata.json +0 -74
  154. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  155. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  156. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  157. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  158. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  159. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  160. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  161. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  162. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  163. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  164. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  165. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  166. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  167. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  168. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  169. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  170. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/package.json +0 -3
  171. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  172. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  173. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  174. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  175. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  176. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  177. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  178. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  179. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  180. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  181. package/examples/complete-sites/dog-shelter-single-page/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  182. package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +0 -50
  183. package/examples/complete-sites/dog-shelter-single-page/site/config.yaml +0 -1
  184. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/content.md +0 -37
  185. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/images/foster-dog.jpg +0 -0
  186. package/examples/complete-sites/dog-shelter-single-page/site/pages/000-home/images/rescue-dog.jpg +0 -0
  187. package/examples/complete-sites/dog-shelter-single-page/site/public/favicon.svg +0 -10
  188. package/examples/complete-sites/dog-shelter-single-page/site/public/logo.svg +0 -9
  189. package/examples/complete-sites/dog-shelter-single-page/site/public/robots.txt +0 -2
  190. package/examples/complete-sites/dog-shelter-single-page/site/sitewide-content.yaml +0 -4
  191. package/examples/complete-sites/dog-shelter-single-page/site/theme.yaml +0 -1
  192. package/examples/feature-demos/media-and-surfaces/.astro/collections/site.schema.json +0 -35
  193. package/examples/feature-demos/media-and-surfaces/.astro/collections/sitewide.schema.json +0 -97
  194. package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +0 -844
  195. package/examples/feature-demos/media-and-surfaces/.astro/content-assets.mjs +0 -4
  196. package/examples/feature-demos/media-and-surfaces/.astro/content-modules.mjs +0 -1
  197. package/examples/feature-demos/media-and-surfaces/.astro/content.d.ts +0 -183
  198. package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +0 -1
  199. package/examples/feature-demos/media-and-surfaces/.astro/dev.log +0 -14
  200. package/examples/feature-demos/media-and-surfaces/.astro/settings.json +0 -5
  201. package/examples/feature-demos/media-and-surfaces/.astro/types.d.ts +0 -2
  202. package/examples/feature-demos/media-and-surfaces/README.md +0 -21
  203. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/_metadata.json +0 -80
  204. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  205. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  206. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  207. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  208. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  209. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  210. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  211. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  212. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  213. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  214. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  215. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  216. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js +0 -1389
  217. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  218. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  219. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  220. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  221. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  222. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/package.json +0 -3
  223. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  224. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  225. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  226. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  227. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  228. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  229. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  230. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  231. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  232. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  233. package/examples/feature-demos/media-and-surfaces/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  234. package/examples/feature-demos/media-and-surfaces/site/.norna/generated-images.json +0 -66
  235. package/examples/feature-demos/media-and-surfaces/site/config.yaml +0 -1
  236. package/examples/feature-demos/media-and-surfaces/site/pages/000-home/content.md +0 -15
  237. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/content.md +0 -71
  238. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-carousel.svg +0 -11
  239. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-stack.svg +0 -9
  240. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/card-surfaces.svg +0 -8
  241. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-one.svg +0 -8
  242. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-three.svg +0 -13
  243. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/carousel-two.svg +0 -8
  244. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-one.svg +0 -8
  245. package/examples/feature-demos/media-and-surfaces/site/pages/010-media/images/stack-two.svg +0 -9
  246. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/content.md +0 -42
  247. package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +0 -2
  248. package/examples/feature-demos/media-and-surfaces/site/public/robots.txt +0 -2
  249. package/examples/feature-demos/media-and-surfaces/site/sitewide-content.yaml +0 -2
  250. package/examples/feature-demos/media-and-surfaces/site/theme.yaml +0 -1
  251. package/examples/feature-demos/sitewide-content/.astro/collections/site.schema.json +0 -59
  252. package/examples/feature-demos/sitewide-content/.astro/collections/sitewide.schema.json +0 -138
  253. package/examples/feature-demos/sitewide-content/.astro/collections/theme.schema.json +0 -755
  254. package/examples/feature-demos/sitewide-content/.astro/content-assets.mjs +0 -1
  255. package/examples/feature-demos/sitewide-content/.astro/content-modules.mjs +0 -1
  256. package/examples/feature-demos/sitewide-content/.astro/content.d.ts +0 -183
  257. package/examples/feature-demos/sitewide-content/.astro/data-store.json +0 -1
  258. package/examples/feature-demos/sitewide-content/.astro/dev.json +0 -13
  259. package/examples/feature-demos/sitewide-content/.astro/dev.log +0 -18
  260. package/examples/feature-demos/sitewide-content/.astro/settings.json +0 -5
  261. package/examples/feature-demos/sitewide-content/.astro/types.d.ts +0 -2
  262. package/examples/feature-demos/sitewide-content/README.md +0 -26
  263. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/_metadata.json +0 -74
  264. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js +0 -434
  265. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro-B3JHJyiv.js.map +0 -1
  266. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  267. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  268. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  269. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  270. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  271. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  272. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  273. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  274. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js +0 -1534
  275. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/audit-C3SVr7dT.js.map +0 -1
  276. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js +0 -48
  277. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/highlight-BLtvqtzO.js.map +0 -1
  278. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js +0 -42
  279. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/icons-C92i61-2.js.map +0 -1
  280. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/package.json +0 -3
  281. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  282. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js +0 -190
  283. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/settings-v5GgKks_.js.map +0 -1
  284. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js +0 -458
  285. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/toolbar-BFvJVp26.js.map +0 -1
  286. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js +0 -1016
  287. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/ui-library-Cd35oAvo.js.map +0 -1
  288. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js +0 -32
  289. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/window-vo3A6TMn.js.map +0 -1
  290. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js +0 -111
  291. package/examples/feature-demos/sitewide-content/node_modules/.vite/deps/xray-DwhzGckb.js.map +0 -1
  292. package/examples/feature-demos/sitewide-content/site/.norna/generated-images.json +0 -1
  293. package/examples/feature-demos/sitewide-content/site/config.yaml +0 -1
  294. package/examples/feature-demos/sitewide-content/site/pages/000-home/content.md +0 -17
  295. package/examples/feature-demos/sitewide-content/site/pages/010-logo-and-navigation/content.md +0 -17
  296. package/examples/feature-demos/sitewide-content/site/pages/020-notices/content.md +0 -23
  297. package/examples/feature-demos/sitewide-content/site/pages/030-footer/content.md +0 -18
  298. package/examples/feature-demos/sitewide-content/site/public/logo.svg +0 -6
  299. package/examples/feature-demos/sitewide-content/site/public/robots.txt +0 -2
  300. package/examples/feature-demos/sitewide-content/site/sitewide-content.yaml +0 -14
  301. package/examples/feature-demos/sitewide-content/site/theme.yaml +0 -1
  302. package/examples/feature-demos/theme-preset-documentation/README.md +0 -16
  303. package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +0 -74
  304. package/examples/feature-demos/theme-preset-documentation/site/config.yaml +0 -1
  305. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/content.md +0 -30
  306. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/black-schnauzer.jpg +0 -0
  307. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/retriever-portrait.jpg +0 -0
  308. package/examples/feature-demos/theme-preset-documentation/site/pages/000-home/images/schnauzer-portrait.jpg +0 -0
  309. package/examples/feature-demos/theme-preset-documentation/site/public/robots.txt +0 -2
  310. package/examples/feature-demos/theme-preset-documentation/site/sitewide-content.yaml +0 -3
  311. package/examples/feature-demos/theme-preset-documentation/site/theme.yaml +0 -1
  312. package/examples/feature-demos/theme-preset-portfolio/README.md +0 -16
  313. package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +0 -74
  314. package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +0 -1
  315. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/content.md +0 -31
  316. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/puppy-portrait.jpg +0 -0
  317. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/shepherd-portrait.jpg +0 -0
  318. package/examples/feature-demos/theme-preset-portfolio/site/pages/000-home/images/white-puppy.jpg +0 -0
  319. package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +0 -2
  320. package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +0 -3
  321. package/examples/feature-demos/theme-preset-portfolio/site/theme.yaml +0 -1
  322. package/examples/feature-demos/theme-preset-project/.astro/collections/routeTheme.schema.json +0 -746
  323. package/examples/feature-demos/theme-preset-project/.astro/collections/site.schema.json +0 -59
  324. package/examples/feature-demos/theme-preset-project/.astro/collections/sitewide.schema.json +0 -138
  325. package/examples/feature-demos/theme-preset-project/.astro/collections/theme.schema.json +0 -755
  326. package/examples/feature-demos/theme-preset-project/.astro/content-assets.mjs +0 -4
  327. package/examples/feature-demos/theme-preset-project/.astro/content-modules.mjs +0 -1
  328. package/examples/feature-demos/theme-preset-project/.astro/content.d.ts +0 -183
  329. package/examples/feature-demos/theme-preset-project/.astro/data-store.json +0 -1
  330. package/examples/feature-demos/theme-preset-project/.astro/dev-local.json +0 -8
  331. package/examples/feature-demos/theme-preset-project/.astro/dev.json +0 -15
  332. package/examples/feature-demos/theme-preset-project/.astro/dev.log +0 -164
  333. package/examples/feature-demos/theme-preset-project/.astro/settings.json +0 -5
  334. package/examples/feature-demos/theme-preset-project/.astro/types.d.ts +0 -2
  335. package/examples/feature-demos/theme-preset-project/README.md +0 -16
  336. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/_metadata.json +0 -80
  337. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  338. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  339. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  340. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  341. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  342. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  343. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  344. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  345. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  346. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  347. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  348. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  349. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/embla-carousel.js +0 -1389
  350. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  351. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  352. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  353. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  354. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  355. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/package.json +0 -3
  356. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  357. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  358. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  359. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  360. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  361. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  362. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  363. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  364. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  365. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  366. package/examples/feature-demos/theme-preset-project/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  367. package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +0 -74
  368. package/examples/feature-demos/theme-preset-project/site/config.yaml +0 -1
  369. package/examples/feature-demos/theme-preset-project/site/pages/000-home/content.md +0 -31
  370. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/boxer-portrait.jpg +0 -0
  371. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/grass-puppy.jpg +0 -0
  372. package/examples/feature-demos/theme-preset-project/site/pages/000-home/images/grey-street-dog.jpg +0 -0
  373. package/examples/feature-demos/theme-preset-project/site/public/robots.txt +0 -2
  374. package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +0 -3
  375. package/examples/feature-demos/theme-preset-project/site/theme.yaml +0 -1
  376. package/examples/feature-demos/theme-preset-statement/README.md +0 -16
  377. package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +0 -74
  378. package/examples/feature-demos/theme-preset-statement/site/config.yaml +0 -1
  379. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/content.md +0 -31
  380. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/black-pedigree.jpg +0 -0
  381. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/sheepdog-grass.jpg +0 -0
  382. package/examples/feature-demos/theme-preset-statement/site/pages/000-home/images/sheepdog-wide.jpg +0 -0
  383. package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +0 -2
  384. package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +0 -3
  385. package/examples/feature-demos/theme-preset-statement/site/theme.yaml +0 -1
  386. package/fixtures/basic/site/.norna/generated-images.json +0 -1
  387. package/fixtures/basic/site/config.yaml +0 -1
  388. package/fixtures/basic/site/pages/000-home/content.md +0 -14
  389. package/fixtures/basic/site/pages/000-home/images/.gitkeep +0 -1
  390. package/fixtures/basic/site/public/robots.txt +0 -2
  391. package/fixtures/basic/site/sitewide-content.yaml +0 -3
  392. package/fixtures/basic/site/theme.yaml +0 -1
  393. package/fixtures/content-model-v2/.astro/collections/site.schema.json +0 -776
  394. package/fixtures/content-model-v2/.astro/collections/theme.schema.json +0 -668
  395. package/fixtures/content-model-v2/.astro/content-assets.mjs +0 -4
  396. package/fixtures/content-model-v2/.astro/content-modules.mjs +0 -1
  397. package/fixtures/content-model-v2/.astro/content.d.ts +0 -175
  398. package/fixtures/content-model-v2/.astro/data-store.json +0 -1
  399. package/fixtures/content-model-v2/.astro/dev-local.json +0 -8
  400. package/fixtures/content-model-v2/.astro/dev.json +0 -13
  401. package/fixtures/content-model-v2/.astro/dev.log +0 -231
  402. package/fixtures/content-model-v2/.astro/settings.json +0 -5
  403. package/fixtures/content-model-v2/.astro/types.d.ts +0 -2
  404. package/fixtures/content-model-v2/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +0 -1
  405. package/fixtures/content-model-v2/dist/_astro/SitePage.BbfZub4g.css +0 -1
  406. package/fixtures/content-model-v2/dist/guide/index.html +0 -3
  407. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-480.webp +0 -0
  408. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-768.webp +0 -0
  409. package/fixtures/content-model-v2/dist/images/generated/intro/detail-27930b14-971.webp +0 -0
  410. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-480.webp +0 -0
  411. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-768.webp +0 -0
  412. package/fixtures/content-model-v2/dist/images/generated/intro/duplicate-49c98f6c-971.webp +0 -0
  413. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-480.webp +0 -0
  414. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-768.webp +0 -0
  415. package/fixtures/content-model-v2/dist/images/generated/intro/hero-6d588a83-971.webp +0 -0
  416. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1080.webp +0 -0
  417. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1440.webp +0 -0
  418. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-1600.webp +0 -0
  419. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-480.webp +0 -0
  420. package/fixtures/content-model-v2/dist/images/generated/plain/image-3770d763-768.webp +0 -0
  421. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-480.webp +0 -0
  422. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-768.webp +0 -0
  423. package/fixtures/content-model-v2/dist/images/generated/routes/010-guide/images/intro/duplicate-5cf614d2-960.webp +0 -0
  424. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1080.webp +0 -0
  425. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1440.webp +0 -0
  426. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-1600.webp +0 -0
  427. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-480.webp +0 -0
  428. package/fixtures/content-model-v2/dist/images/generated/timed/slide-one-3770d763-768.webp +0 -0
  429. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1080.webp +0 -0
  430. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1440.webp +0 -0
  431. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-1600.webp +0 -0
  432. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-480.webp +0 -0
  433. package/fixtures/content-model-v2/dist/images/generated/timed/slide-three-5bdec65e-768.webp +0 -0
  434. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1080.webp +0 -0
  435. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1440.webp +0 -0
  436. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-1600.webp +0 -0
  437. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-480.webp +0 -0
  438. package/fixtures/content-model-v2/dist/images/generated/timed/slide-two-26c08aee-768.webp +0 -0
  439. package/fixtures/content-model-v2/dist/index.html +0 -8
  440. package/fixtures/content-model-v2/node_modules/.vite/deps/_metadata.json +0 -80
  441. package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  442. package/fixtures/content-model-v2/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  443. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  444. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  445. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  446. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  447. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  448. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  449. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  450. package/fixtures/content-model-v2/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  451. package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  452. package/fixtures/content-model-v2/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  453. package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js +0 -1389
  454. package/fixtures/content-model-v2/node_modules/.vite/deps/embla-carousel.js.map +0 -1
  455. package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  456. package/fixtures/content-model-v2/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  457. package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  458. package/fixtures/content-model-v2/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  459. package/fixtures/content-model-v2/node_modules/.vite/deps/package.json +0 -3
  460. package/fixtures/content-model-v2/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  461. package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  462. package/fixtures/content-model-v2/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  463. package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  464. package/fixtures/content-model-v2/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  465. package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  466. package/fixtures/content-model-v2/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  467. package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  468. package/fixtures/content-model-v2/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  469. package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  470. package/fixtures/content-model-v2/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  471. package/fixtures/content-model-v2/site/.norna/generated-images.json +0 -210
  472. package/fixtures/content-model-v2/site/config.yaml +0 -1
  473. package/fixtures/content-model-v2/site/pages/000-home/content.md +0 -79
  474. package/fixtures/content-model-v2/site/pages/000-home/images/adopt.svg +0 -9
  475. package/fixtures/content-model-v2/site/pages/000-home/images/detail.jpg +0 -0
  476. package/fixtures/content-model-v2/site/pages/000-home/images/duplicate.jpg +0 -0
  477. package/fixtures/content-model-v2/site/pages/000-home/images/foster.svg +0 -12
  478. package/fixtures/content-model-v2/site/pages/000-home/images/hero.jpg +0 -0
  479. package/fixtures/content-model-v2/site/pages/000-home/images/image.jpg +0 -0
  480. package/fixtures/content-model-v2/site/pages/000-home/images/slide-one.jpg +0 -0
  481. package/fixtures/content-model-v2/site/pages/000-home/images/slide-three.jpg +0 -0
  482. package/fixtures/content-model-v2/site/pages/000-home/images/slide-two.jpg +0 -0
  483. package/fixtures/content-model-v2/site/pages/010-guide/content.md +0 -18
  484. package/fixtures/content-model-v2/site/pages/010-guide/images/duplicate.jpg +0 -0
  485. package/fixtures/content-model-v2/site/theme.yaml +0 -4
  486. package/fixtures/nested-pages/.astro/collections/site.schema.json +0 -35
  487. package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +0 -97
  488. package/fixtures/nested-pages/.astro/collections/theme.schema.json +0 -844
  489. package/fixtures/nested-pages/.astro/content-assets.mjs +0 -4
  490. package/fixtures/nested-pages/.astro/content-modules.mjs +0 -1
  491. package/fixtures/nested-pages/.astro/content.d.ts +0 -183
  492. package/fixtures/nested-pages/.astro/data-store.json +0 -1
  493. package/fixtures/nested-pages/.astro/dev-local.json +0 -8
  494. package/fixtures/nested-pages/.astro/dev.log +0 -1128
  495. package/fixtures/nested-pages/.astro/settings.json +0 -5
  496. package/fixtures/nested-pages/.astro/types.d.ts +0 -2
  497. package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +0 -74
  498. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -434
  499. package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -1
  500. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +0 -6390
  501. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -1
  502. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +0 -2702
  503. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -1
  504. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +0 -65
  505. package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -1
  506. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -455
  507. package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -1
  508. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -1534
  509. package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -1
  510. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -48
  511. package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -1
  512. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +0 -42
  513. package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -1
  514. package/fixtures/nested-pages/node_modules/.vite/deps/package.json +0 -3
  515. package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -4
  516. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -190
  517. package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -1
  518. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +0 -458
  519. package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -1
  520. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -1016
  521. package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -1
  522. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +0 -32
  523. package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -1
  524. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -111
  525. package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -1
  526. package/fixtures/nested-pages/site/.norna/generated-images.json +0 -10
  527. package/fixtures/nested-pages/site/config.yaml +0 -3
  528. package/fixtures/nested-pages/site/pages/000-home/content.md +0 -15
  529. package/fixtures/nested-pages/site/pages/010-guides/content.md +0 -15
  530. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/content.md +0 -21
  531. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/images/diagram.svg +0 -21
  532. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +0 -18
  533. package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +0 -2
  534. package/fixtures/nested-pages/site/pages/010-guides/pages/020-workflows/content.md +0 -11
  535. package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +0 -9
  536. package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +0 -3
  537. package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +0 -3
  538. package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +0 -3
  539. package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +0 -3
  540. package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +0 -3
  541. package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +0 -3
  542. package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +0 -3
  543. package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +0 -3
  544. package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +0 -3
  545. package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +0 -3
  546. package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +0 -3
  547. package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +0 -3
  548. package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +0 -3
  549. package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +0 -3
  550. package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +0 -3
  551. package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +0 -3
  552. package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +0 -3
  553. package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +0 -3
  554. package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +0 -7
  555. package/fixtures/nested-pages/site/pages/020-reference/content.md +0 -10
  556. package/fixtures/nested-pages/site/pages/020-reference/pages/010-installation/content.md +0 -11
  557. package/fixtures/nested-pages/site/theme.yaml +0 -1
  558. package/scripts/build-pages.mjs +0 -69
  559. package/scripts/lib/example-sites.mjs +0 -49
  560. package/scripts/lib/frontmatter-yaml.mjs +0 -113
  561. package/scripts/lib/git-status.mjs +0 -7
  562. package/scripts/release.mjs +0 -153
  563. package/scripts/test-banner-visibility.mjs +0 -80
  564. package/scripts/test-ci-lockfile.mjs +0 -65
  565. package/scripts/test-cli-discovery.mjs +0 -124
  566. package/scripts/test-client-javascript.mjs +0 -225
  567. package/scripts/test-content-check.mjs +0 -621
  568. package/scripts/test-content-model-v2.mjs +0 -1693
  569. package/scripts/test-documentation.mjs +0 -189
  570. package/scripts/test-editor-language-service.mjs +0 -305
  571. package/scripts/test-engine-commands.mjs +0 -204
  572. package/scripts/test-examples.mjs +0 -53
  573. package/scripts/test-heading-ids.mjs +0 -68
  574. package/scripts/test-navigation-model.mjs +0 -63
  575. package/scripts/test-navigation-preview.mjs +0 -108
  576. package/scripts/test-navigation.mjs +0 -157
  577. package/scripts/test-nested-pages.mjs +0 -125
  578. package/scripts/test-package-check.mjs +0 -500
  579. package/scripts/test-page-model.mjs +0 -108
  580. package/scripts/test-project-config.mjs +0 -139
  581. package/scripts/test-schemas.mjs +0 -169
  582. package/scripts/test-site-public.mjs +0 -85
  583. package/scripts/test-theme-presets.mjs +0 -188
  584. package/src/components/SiteNotesScript.astro +0 -43
  585. package/starters/project/.github/workflows/deploy.yml +0 -64
  586. package/starters/project/README.md +0 -84
  587. package/starters/project/package-lock.json +0 -4296
  588. package/starters/project/package.json +0 -37
  589. package/starters/project/site/config.yaml +0 -1
  590. package/starters/project/site/pages/000-home/content.md +0 -119
  591. package/starters/project/site/pages/010-guide/content.md +0 -80
  592. package/starters/project/site/public/robots.txt +0 -2
  593. package/starters/project/site/sitewide-content.yaml +0 -3
  594. package/starters/project/site/theme.yaml +0 -1
  595. package/tsconfig.json +0 -5
@@ -1,77 +1,451 @@
1
1
  import {
2
+ assertTypographyContract,
2
3
  defaultTypography,
3
4
  resolveTypographyConfig,
4
5
  } from './typography.mjs';
6
+ import {
7
+ assertPaletteModeContract,
8
+ createSemanticColorRoles,
9
+ deriveSecondaryTextColor,
10
+ } from './presentation-contract.mjs';
11
+ import { presentationPaletteNames } from './presentation-palette-metadata.mjs';
5
12
  import { resolveThemeConfig } from './theme-presets.mjs';
6
13
 
7
- export const presentationPaletteNames = ['dark', 'light', 'paper'];
14
+ export { presentationPaletteNames };
15
+ export const colorModeNames = ['system', 'light', 'dark'];
8
16
  const sectionBackgroundPatterns = Object.freeze({
9
17
  uniform: ['base'],
10
18
  alternating: ['base', 'soft'],
11
- cycling: ['base', 'soft', 'emphasis'],
19
+ accented: ['base', 'soft', 'emphasis', 'soft'],
12
20
  });
13
21
 
22
+ const createPaletteMode = ({ appearance, page, surfaces, frame, css }) => {
23
+ const resolvedSurfaces = Object.fromEntries(Object.entries(surfaces).map(([name, surface]) => [
24
+ name,
25
+ Object.freeze({
26
+ ...surface,
27
+ secondaryTextColor: deriveSecondaryTextColor(surface.textColor, surface.backgroundColor),
28
+ }),
29
+ ]));
30
+
31
+ return Object.freeze({
32
+ page: Object.freeze(page),
33
+ surfaces: Object.freeze(resolvedSurfaces),
34
+ frame: Object.freeze(frame),
35
+ css: Object.freeze(css),
36
+ semantic: createSemanticColorRoles({
37
+ appearance,
38
+ page,
39
+ secondaryText: css.muted,
40
+ linkText: css.accent,
41
+ }),
42
+ });
43
+ };
44
+
14
45
  const presentationPalettes = Object.freeze({
15
- dark: {
16
- colorScheme: 'dark',
17
- page: { backgroundColor: '#000000', textColor: '#f2eee6' },
18
- surfaces: {
19
- base: { backgroundColor: '#000000', textColor: '#f2eee6' },
20
- soft: { backgroundColor: '#171717', textColor: '#f2eee6' },
21
- emphasis: { backgroundColor: '#252525', textColor: '#f2eee6' },
22
- },
23
- frame: { backgroundColor: '#000000', textColor: '#f2eee6' },
24
- css: {
25
- surface: '#101010',
26
- muted: '#aaa49a',
27
- soft: '#302f2c',
28
- accent: '#d8d2c8',
29
- border: 'rgb(255 255 255 / 14%)',
30
- navBackground: 'rgb(0 0 0 / 90%)',
31
- navSeparator: 'rgb(255 255 255 / 28%)',
32
- },
33
- },
34
- light: {
35
- colorScheme: 'light',
36
- page: { backgroundColor: '#ffffff', textColor: '#17201d' },
37
- surfaces: {
38
- base: { backgroundColor: '#ffffff', textColor: '#17201d' },
39
- soft: { backgroundColor: '#f1f4f2', textColor: '#17201d' },
40
- emphasis: { backgroundColor: '#dde7e1', textColor: '#17201d' },
41
- },
42
- frame: { backgroundColor: '#ffffff', textColor: '#17201d' },
43
- css: {
44
- surface: '#f7f8f7',
45
- muted: '#5e655f',
46
- soft: '#d9dfda',
47
- accent: '#38645a',
48
- border: 'rgb(0 0 0 / 14%)',
49
- navBackground: 'rgb(255 255 255 / 92%)',
50
- navSeparator: 'rgb(0 0 0 / 20%)',
51
- },
52
- },
53
- paper: {
54
- colorScheme: 'light',
55
- page: { backgroundColor: '#f8f5ee', textColor: '#272522' },
56
- surfaces: {
57
- base: { backgroundColor: '#f8f5ee', textColor: '#272522' },
58
- soft: { backgroundColor: '#ebe5d9', textColor: '#272522' },
59
- emphasis: { backgroundColor: '#ded4c5', textColor: '#272522' },
60
- },
61
- frame: { backgroundColor: '#f8f5ee', textColor: '#272522' },
62
- css: {
63
- surface: '#f0ebe1',
64
- muted: '#746e63',
65
- soft: '#d8d0c4',
66
- accent: '#685a43',
67
- border: 'rgb(39 37 34 / 18%)',
68
- navBackground: 'rgb(248 245 238 / 92%)',
69
- navSeparator: 'rgb(39 37 34 / 24%)',
70
- },
71
- },
46
+ 'near-monochrome': Object.freeze({
47
+ defaultMode: 'dark',
48
+ modes: Object.freeze({
49
+ light: createPaletteMode({
50
+ appearance: 'light',
51
+ page: { backgroundColor: '#f7f7f5', textColor: '#171717' },
52
+ surfaces: {
53
+ base: { backgroundColor: '#f7f7f5', textColor: '#171717' },
54
+ soft: { backgroundColor: '#ececea', textColor: '#171717' },
55
+ emphasis: { backgroundColor: '#dadad6', textColor: '#171717' },
56
+ },
57
+ frame: { backgroundColor: '#f7f7f5', textColor: '#171717' },
58
+ css: {
59
+ surface: '#eeeeeb',
60
+ muted: '#666660',
61
+ soft: '#d8d8d3',
62
+ accent: '#4b4b46',
63
+ border: 'rgb(23 23 23 / 16%)',
64
+ navBackground: 'rgb(247 247 245 / 92%)',
65
+ navSeparator: 'rgb(23 23 23 / 24%)',
66
+ },
67
+ }),
68
+ dark: createPaletteMode({
69
+ appearance: 'dark',
70
+ page: { backgroundColor: '#000000', textColor: '#f2eee6' },
71
+ surfaces: {
72
+ base: { backgroundColor: '#000000', textColor: '#f2eee6' },
73
+ soft: { backgroundColor: '#171717', textColor: '#f2eee6' },
74
+ emphasis: { backgroundColor: '#252525', textColor: '#f2eee6' },
75
+ },
76
+ frame: { backgroundColor: '#000000', textColor: '#f2eee6' },
77
+ css: {
78
+ surface: '#101010',
79
+ muted: '#aaa49a',
80
+ soft: '#302f2c',
81
+ accent: '#d8d2c8',
82
+ border: 'rgb(255 255 255 / 14%)',
83
+ navBackground: 'rgb(0 0 0 / 90%)',
84
+ navSeparator: 'rgb(255 255 255 / 28%)',
85
+ },
86
+ }),
87
+ }),
88
+ }),
89
+ 'arctic-blue': Object.freeze({
90
+ defaultMode: 'light',
91
+ modes: Object.freeze({
92
+ light: createPaletteMode({
93
+ appearance: 'light',
94
+ page: { backgroundColor: '#f3f6f8', textColor: '#202932' },
95
+ surfaces: {
96
+ base: { backgroundColor: '#f3f6f8', textColor: '#202932' },
97
+ soft: { backgroundColor: '#e4eaf0', textColor: '#202932' },
98
+ emphasis: { backgroundColor: '#d3dee8', textColor: '#202932' },
99
+ },
100
+ frame: { backgroundColor: '#f3f6f8', textColor: '#202932' },
101
+ css: {
102
+ surface: '#e9eef2',
103
+ muted: '#5d6a76',
104
+ soft: '#d5dfe7',
105
+ accent: '#2a5877',
106
+ border: 'rgb(32 41 50 / 16%)',
107
+ navBackground: 'rgb(243 246 248 / 92%)',
108
+ navSeparator: 'rgb(32 41 50 / 24%)',
109
+ },
110
+ }),
111
+ dark: createPaletteMode({
112
+ appearance: 'dark',
113
+ page: { backgroundColor: '#17202a', textColor: '#edf3f7' },
114
+ surfaces: {
115
+ base: { backgroundColor: '#17202a', textColor: '#edf3f7' },
116
+ soft: { backgroundColor: '#202c38', textColor: '#edf3f7' },
117
+ emphasis: { backgroundColor: '#2b3c4b', textColor: '#edf3f7' },
118
+ },
119
+ frame: { backgroundColor: '#17202a', textColor: '#edf3f7' },
120
+ css: {
121
+ surface: '#1d2833',
122
+ muted: '#b2bec8',
123
+ soft: '#354655',
124
+ accent: '#9bc5de',
125
+ border: 'rgb(237 243 247 / 16%)',
126
+ navBackground: 'rgb(23 32 42 / 92%)',
127
+ navSeparator: 'rgb(237 243 247 / 28%)',
128
+ },
129
+ }),
130
+ }),
131
+ }),
132
+ 'mineral-teal': Object.freeze({
133
+ defaultMode: 'light',
134
+ modes: Object.freeze({
135
+ light: createPaletteMode({
136
+ appearance: 'light',
137
+ page: { backgroundColor: '#eef4f1', textColor: '#203631' },
138
+ surfaces: {
139
+ base: { backgroundColor: '#eef4f1', textColor: '#203631' },
140
+ soft: { backgroundColor: '#dce9e4', textColor: '#203631' },
141
+ emphasis: { backgroundColor: '#c8ddd5', textColor: '#203631' },
142
+ },
143
+ frame: { backgroundColor: '#eef4f1', textColor: '#203631' },
144
+ css: {
145
+ surface: '#e3ece8',
146
+ muted: '#536560',
147
+ soft: '#cfdfd9',
148
+ accent: '#155f5a',
149
+ border: 'rgb(32 54 49 / 17%)',
150
+ navBackground: 'rgb(238 244 241 / 92%)',
151
+ navSeparator: 'rgb(32 54 49 / 24%)',
152
+ },
153
+ }),
154
+ dark: createPaletteMode({
155
+ appearance: 'dark',
156
+ page: { backgroundColor: '#102d2c', textColor: '#edf5f1' },
157
+ surfaces: {
158
+ base: { backgroundColor: '#102d2c', textColor: '#edf5f1' },
159
+ soft: { backgroundColor: '#173a37', textColor: '#edf5f1' },
160
+ emphasis: { backgroundColor: '#24504a', textColor: '#edf5f1' },
161
+ },
162
+ frame: { backgroundColor: '#102d2c', textColor: '#edf5f1' },
163
+ css: {
164
+ surface: '#153633',
165
+ muted: '#b2c5bf',
166
+ soft: '#2c554f',
167
+ accent: '#8bd5ca',
168
+ border: 'rgb(237 245 241 / 16%)',
169
+ navBackground: 'rgb(16 45 44 / 92%)',
170
+ navSeparator: 'rgb(237 245 241 / 28%)',
171
+ },
172
+ }),
173
+ }),
174
+ }),
175
+ 'soft-lavender': Object.freeze({
176
+ defaultMode: 'light',
177
+ modes: Object.freeze({
178
+ light: createPaletteMode({
179
+ appearance: 'light',
180
+ page: { backgroundColor: '#f7f3fa', textColor: '#2e2736' },
181
+ surfaces: {
182
+ base: { backgroundColor: '#f7f3fa', textColor: '#2e2736' },
183
+ soft: { backgroundColor: '#ebe4f1', textColor: '#2e2736' },
184
+ emphasis: { backgroundColor: '#ddd3e8', textColor: '#2e2736' },
185
+ },
186
+ frame: { backgroundColor: '#f7f3fa', textColor: '#2e2736' },
187
+ css: {
188
+ surface: '#eee8f3',
189
+ muted: '#6c6273',
190
+ soft: '#ded5e7',
191
+ accent: '#604678',
192
+ border: 'rgb(46 39 54 / 16%)',
193
+ navBackground: 'rgb(247 243 250 / 92%)',
194
+ navSeparator: 'rgb(46 39 54 / 24%)',
195
+ },
196
+ }),
197
+ dark: createPaletteMode({
198
+ appearance: 'dark',
199
+ page: { backgroundColor: '#251f2e', textColor: '#f4edf8' },
200
+ surfaces: {
201
+ base: { backgroundColor: '#251f2e', textColor: '#f4edf8' },
202
+ soft: { backgroundColor: '#31283d', textColor: '#f4edf8' },
203
+ emphasis: { backgroundColor: '#42344f', textColor: '#f4edf8' },
204
+ },
205
+ frame: { backgroundColor: '#251f2e', textColor: '#f4edf8' },
206
+ css: {
207
+ surface: '#2d2538',
208
+ muted: '#c1b4c7',
209
+ soft: '#4b3d57',
210
+ accent: '#d4b7e3',
211
+ border: 'rgb(244 237 248 / 16%)',
212
+ navBackground: 'rgb(37 31 46 / 92%)',
213
+ navSeparator: 'rgb(244 237 248 / 28%)',
214
+ },
215
+ }),
216
+ }),
217
+ }),
218
+ 'warm-paper': Object.freeze({
219
+ defaultMode: 'light',
220
+ modes: Object.freeze({
221
+ light: createPaletteMode({
222
+ appearance: 'light',
223
+ page: { backgroundColor: '#f8f5ee', textColor: '#272522' },
224
+ surfaces: {
225
+ base: { backgroundColor: '#f8f5ee', textColor: '#272522' },
226
+ soft: { backgroundColor: '#ebe5d9', textColor: '#272522' },
227
+ emphasis: { backgroundColor: '#ded4c5', textColor: '#272522' },
228
+ },
229
+ frame: { backgroundColor: '#f8f5ee', textColor: '#272522' },
230
+ css: {
231
+ surface: '#f0ebe1',
232
+ muted: '#6b655b',
233
+ soft: '#d8d0c4',
234
+ accent: '#5f513c',
235
+ border: 'rgb(39 37 34 / 18%)',
236
+ navBackground: 'rgb(248 245 238 / 92%)',
237
+ navSeparator: 'rgb(39 37 34 / 24%)',
238
+ },
239
+ }),
240
+ dark: createPaletteMode({
241
+ appearance: 'dark',
242
+ page: { backgroundColor: '#1b1916', textColor: '#f3ede2' },
243
+ surfaces: {
244
+ base: { backgroundColor: '#1b1916', textColor: '#f3ede2' },
245
+ soft: { backgroundColor: '#25211c', textColor: '#f3ede2' },
246
+ emphasis: { backgroundColor: '#342d25', textColor: '#f3ede2' },
247
+ },
248
+ frame: { backgroundColor: '#1b1916', textColor: '#f3ede2' },
249
+ css: {
250
+ surface: '#211e1a',
251
+ muted: '#b9ad9c',
252
+ soft: '#3b342b',
253
+ accent: '#d5bea0',
254
+ border: 'rgb(243 237 226 / 16%)',
255
+ navBackground: 'rgb(27 25 22 / 92%)',
256
+ navSeparator: 'rgb(243 237 226 / 26%)',
257
+ },
258
+ }),
259
+ }),
260
+ }),
261
+ 'retro-earth': Object.freeze({
262
+ defaultMode: 'light',
263
+ modes: Object.freeze({
264
+ light: createPaletteMode({
265
+ appearance: 'light',
266
+ page: { backgroundColor: '#f7efd9', textColor: '#34291c' },
267
+ surfaces: {
268
+ base: { backgroundColor: '#f7efd9', textColor: '#34291c' },
269
+ soft: { backgroundColor: '#eadbb8', textColor: '#34291c' },
270
+ emphasis: { backgroundColor: '#d8c18c', textColor: '#34291c' },
271
+ },
272
+ frame: { backgroundColor: '#f7efd9', textColor: '#34291c' },
273
+ css: {
274
+ surface: '#efe2c4',
275
+ muted: '#6c5e4c',
276
+ soft: '#deca9c',
277
+ accent: '#5e4514',
278
+ border: 'rgb(52 41 28 / 18%)',
279
+ navBackground: 'rgb(247 239 217 / 92%)',
280
+ navSeparator: 'rgb(52 41 28 / 25%)',
281
+ },
282
+ }),
283
+ dark: createPaletteMode({
284
+ appearance: 'dark',
285
+ page: { backgroundColor: '#282117', textColor: '#f5e8c9' },
286
+ surfaces: {
287
+ base: { backgroundColor: '#282117', textColor: '#f5e8c9' },
288
+ soft: { backgroundColor: '#382c1e', textColor: '#f5e8c9' },
289
+ emphasis: { backgroundColor: '#4b3a24', textColor: '#f5e8c9' },
290
+ },
291
+ frame: { backgroundColor: '#282117', textColor: '#f5e8c9' },
292
+ css: {
293
+ surface: '#33291c',
294
+ muted: '#c6b796',
295
+ soft: '#54422a',
296
+ accent: '#e5c36c',
297
+ border: 'rgb(245 232 201 / 16%)',
298
+ navBackground: 'rgb(40 33 23 / 92%)',
299
+ navSeparator: 'rgb(245 232 201 / 28%)',
300
+ },
301
+ }),
302
+ }),
303
+ }),
304
+ 'clay-rose': Object.freeze({
305
+ defaultMode: 'light',
306
+ modes: Object.freeze({
307
+ light: createPaletteMode({
308
+ appearance: 'light',
309
+ page: { backgroundColor: '#f7efed', textColor: '#3c2929' },
310
+ surfaces: {
311
+ base: { backgroundColor: '#f7efed', textColor: '#3c2929' },
312
+ soft: { backgroundColor: '#ecdeda', textColor: '#3c2929' },
313
+ emphasis: { backgroundColor: '#ddc7c1', textColor: '#3c2929' },
314
+ },
315
+ frame: { backgroundColor: '#f7efed', textColor: '#3c2929' },
316
+ css: {
317
+ surface: '#f0e3e0',
318
+ muted: '#6d5558',
319
+ soft: '#e2cfca',
320
+ accent: '#71313d',
321
+ border: 'rgb(60 41 41 / 17%)',
322
+ navBackground: 'rgb(247 239 237 / 92%)',
323
+ navSeparator: 'rgb(60 41 41 / 25%)',
324
+ },
325
+ }),
326
+ dark: createPaletteMode({
327
+ appearance: 'dark',
328
+ page: { backgroundColor: '#2d1e22', textColor: '#f7ebeb' },
329
+ surfaces: {
330
+ base: { backgroundColor: '#2d1e22', textColor: '#f7ebeb' },
331
+ soft: { backgroundColor: '#3b282e', textColor: '#f7ebeb' },
332
+ emphasis: { backgroundColor: '#50343d', textColor: '#f7ebeb' },
333
+ },
334
+ frame: { backgroundColor: '#2d1e22', textColor: '#f7ebeb' },
335
+ css: {
336
+ surface: '#36252a',
337
+ muted: '#c8b3b7',
338
+ soft: '#58404a',
339
+ accent: '#e6a7b0',
340
+ border: 'rgb(247 235 235 / 16%)',
341
+ navBackground: 'rgb(45 30 34 / 92%)',
342
+ navSeparator: 'rgb(247 235 235 / 28%)',
343
+ },
344
+ }),
345
+ }),
346
+ }),
347
+ 'forest-moss': Object.freeze({
348
+ defaultMode: 'light',
349
+ modes: Object.freeze({
350
+ light: createPaletteMode({
351
+ appearance: 'light',
352
+ page: { backgroundColor: '#f1f3e8', textColor: '#263225' },
353
+ surfaces: {
354
+ base: { backgroundColor: '#f1f3e8', textColor: '#263225' },
355
+ soft: { backgroundColor: '#e1e6d2', textColor: '#263225' },
356
+ emphasis: { backgroundColor: '#cbd5b7', textColor: '#263225' },
357
+ },
358
+ frame: { backgroundColor: '#f1f3e8', textColor: '#263225' },
359
+ css: {
360
+ surface: '#e7eadb',
361
+ muted: '#52604c',
362
+ soft: '#d5ddc5',
363
+ accent: '#324e25',
364
+ border: 'rgb(38 50 37 / 17%)',
365
+ navBackground: 'rgb(241 243 232 / 92%)',
366
+ navSeparator: 'rgb(38 50 37 / 24%)',
367
+ },
368
+ }),
369
+ dark: createPaletteMode({
370
+ appearance: 'dark',
371
+ page: { backgroundColor: '#172218', textColor: '#eef2e6' },
372
+ surfaces: {
373
+ base: { backgroundColor: '#172218', textColor: '#eef2e6' },
374
+ soft: { backgroundColor: '#213022', textColor: '#eef2e6' },
375
+ emphasis: { backgroundColor: '#314531', textColor: '#eef2e6' },
376
+ },
377
+ frame: { backgroundColor: '#172218', textColor: '#eef2e6' },
378
+ css: {
379
+ surface: '#1d2a1e',
380
+ muted: '#b8c3af',
381
+ soft: '#394c37',
382
+ accent: '#add493',
383
+ border: 'rgb(238 242 230 / 16%)',
384
+ navBackground: 'rgb(23 34 24 / 92%)',
385
+ navSeparator: 'rgb(238 242 230 / 28%)',
386
+ },
387
+ }),
388
+ }),
389
+ }),
390
+ 'vivid-night': Object.freeze({
391
+ defaultMode: 'dark',
392
+ modes: Object.freeze({
393
+ light: createPaletteMode({
394
+ appearance: 'light',
395
+ page: { backgroundColor: '#f2f4fb', textColor: '#25243a' },
396
+ surfaces: {
397
+ base: { backgroundColor: '#f2f4fb', textColor: '#25243a' },
398
+ soft: { backgroundColor: '#e2e6f3', textColor: '#25243a' },
399
+ emphasis: { backgroundColor: '#d0d7eb', textColor: '#25243a' },
400
+ },
401
+ frame: { backgroundColor: '#f2f4fb', textColor: '#25243a' },
402
+ css: {
403
+ surface: '#e8eaf5',
404
+ muted: '#62647a',
405
+ soft: '#d5daec',
406
+ accent: '#3b568f',
407
+ border: 'rgb(37 36 58 / 16%)',
408
+ navBackground: 'rgb(242 244 251 / 92%)',
409
+ navSeparator: 'rgb(37 36 58 / 24%)',
410
+ },
411
+ }),
412
+ dark: createPaletteMode({
413
+ appearance: 'dark',
414
+ page: { backgroundColor: '#1d1b2d', textColor: '#f4f1ff' },
415
+ surfaces: {
416
+ base: { backgroundColor: '#1d1b2d', textColor: '#f4f1ff' },
417
+ soft: { backgroundColor: '#29263d', textColor: '#f4f1ff' },
418
+ emphasis: { backgroundColor: '#38334f', textColor: '#f4f1ff' },
419
+ },
420
+ frame: { backgroundColor: '#1d1b2d', textColor: '#f4f1ff' },
421
+ css: {
422
+ surface: '#252238',
423
+ muted: '#bbb7cc',
424
+ soft: '#403a58',
425
+ accent: '#9fe4e8',
426
+ border: 'rgb(244 241 255 / 16%)',
427
+ navBackground: 'rgb(29 27 45 / 92%)',
428
+ navSeparator: 'rgb(244 241 255 / 28%)',
429
+ },
430
+ }),
431
+ }),
432
+ }),
72
433
  });
73
434
 
74
- export const getPresentationPalette = (paletteName = 'dark') => {
435
+ const implementedPaletteNames = Object.keys(presentationPalettes);
436
+ const missingPaletteNames = presentationPaletteNames.filter((name) => !implementedPaletteNames.includes(name));
437
+ const unexpectedPaletteNames = implementedPaletteNames.filter((name) => !presentationPaletteNames.includes(name));
438
+ if (missingPaletteNames.length > 0 || unexpectedPaletteNames.length > 0) {
439
+ throw new Error(`Palette metadata and implementations differ. Missing: ${missingPaletteNames.join(', ') || '(none)'}. Unexpected: ${unexpectedPaletteNames.join(', ') || '(none)'}.`);
440
+ }
441
+
442
+ for (const [paletteName, palette] of Object.entries(presentationPalettes)) {
443
+ for (const [modeName, mode] of Object.entries(palette.modes)) {
444
+ assertPaletteModeContract(paletteName, modeName, mode);
445
+ }
446
+ }
447
+
448
+ export const getPresentationPalette = (paletteName = 'near-monochrome') => {
75
449
  const palette = presentationPalettes[paletteName];
76
450
  if (!palette) {
77
451
  throw new Error(`Unknown presentation palette: ${paletteName}. Use one of: ${presentationPaletteNames.join(', ')}`);
@@ -81,19 +455,29 @@ export const getPresentationPalette = (paletteName = 'dark') => {
81
455
  };
82
456
 
83
457
  export const getPresentationCssVariables = (presentation) => {
84
- const { palette } = presentation;
85
- return {
86
- '--color-page': palette.page.backgroundColor,
87
- '--color-text': palette.page.textColor,
88
- '--color-surface': palette.css.surface,
89
- '--color-muted': palette.css.muted,
90
- '--color-soft': palette.css.soft,
91
- '--color-accent': palette.css.accent,
92
- '--color-border': palette.css.border,
93
- '--color-nav-background': palette.css.navBackground,
94
- '--color-nav-separator': palette.css.navSeparator,
95
- '--color-scheme': palette.colorScheme,
96
- };
458
+ const variables = {};
459
+ for (const [modeName, palette] of Object.entries(presentation.paletteModes)) {
460
+ const prefix = `--palette-${modeName}`;
461
+ variables[`${prefix}-page-background`] = palette.page.backgroundColor;
462
+ variables[`${prefix}-page-text`] = palette.page.textColor;
463
+ variables[`${prefix}-frame-background`] = palette.frame.backgroundColor;
464
+ variables[`${prefix}-frame-text`] = palette.frame.textColor;
465
+ for (const [surfaceName, surface] of Object.entries(palette.surfaces)) {
466
+ variables[`${prefix}-surface-${surfaceName}-background`] = surface.backgroundColor;
467
+ variables[`${prefix}-surface-${surfaceName}-text`] = surface.textColor;
468
+ variables[`${prefix}-surface-${surfaceName}-secondary-text`] = surface.secondaryTextColor;
469
+ }
470
+ for (const [name, value] of Object.entries(palette.css)) {
471
+ const cssName = name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
472
+ variables[`${prefix}-${cssName}`] = value;
473
+ }
474
+ for (const [name, value] of Object.entries(palette.semantic)) {
475
+ const cssName = name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
476
+ variables[`${prefix}-${cssName}`] = value;
477
+ }
478
+ }
479
+
480
+ return variables;
97
481
  };
98
482
 
99
483
  const getSectionSurfaces = (pattern = 'uniform', sourceLabel = 'theme.yaml') => {
@@ -107,24 +491,82 @@ const getSectionSurfaces = (pattern = 'uniform', sourceLabel = 'theme.yaml') =>
107
491
 
108
492
  export const resolveThemePresentation = (theme, sourceLabel = 'theme.yaml') => {
109
493
  const normalizedTheme = resolveThemeConfig(theme, sourceLabel);
110
- const paletteName = normalizedTheme.palette ?? 'dark';
494
+ const paletteName = normalizedTheme.palette ?? 'near-monochrome';
111
495
  const palette = getPresentationPalette(paletteName);
112
- const typography = resolveTypographyConfig(normalizedTheme.typography ?? defaultTypography);
496
+ const colorMode = normalizedTheme.colorMode ?? {};
497
+ const readerControls = normalizedTheme.readerControls ?? {};
498
+ const defaultColorMode = colorMode.default ?? palette.defaultMode;
499
+ if (!colorModeNames.includes(defaultColorMode)) {
500
+ throw new Error(`colorMode.default must be one of ${colorModeNames.join(', ')} in ${sourceLabel}.`);
501
+ }
502
+ const typography = resolveTypographyConfig(normalizedTheme.typography ?? defaultTypography, sourceLabel);
113
503
  const textWidth = normalizedTheme.layout?.textWidth;
114
504
  if (textWidth !== undefined) {
115
505
  typography.values.body.width = textWidth;
116
506
  }
507
+ assertTypographyContract(typography, sourceLabel);
117
508
 
118
509
  return {
119
510
  paletteName,
120
- palette,
511
+ palette: palette.modes[defaultColorMode === 'dark' ? 'dark' : 'light'],
512
+ paletteModes: palette.modes,
513
+ colorMode: {
514
+ default: defaultColorMode,
515
+ },
516
+ readerPreferences: {
517
+ controls: {
518
+ appearance: readerControls.colorMode === true,
519
+ readingWidth: true,
520
+ focusReading: readerControls.focusReading === true,
521
+ },
522
+ defaults: {
523
+ appearance: defaultColorMode,
524
+ readingWidth: textWidth === 'narrow' ? 'narrow' : textWidth === 'wide' ? 'wide' : 'standard',
525
+ focusReading: 'off',
526
+ },
527
+ },
528
+ blocks: {
529
+ cardList: {
530
+ width: normalizedTheme.blocks?.cardList?.width ?? 'normal',
531
+ },
532
+ },
121
533
  sectionSurfaces: getSectionSurfaces(normalizedTheme.sections?.backgroundPattern, sourceLabel),
122
534
  typography,
123
535
  };
124
536
  };
125
537
 
126
- export const resolvePagePresentation = (theme, sourceLabel) => {
538
+ export const assertSectionBackgroundPatternCompatibility = (
539
+ theme,
540
+ sourceLabel = 'theme.yaml',
541
+ navigationMode = 'sections',
542
+ ) => {
543
+ const requestedPattern = theme?.sections?.backgroundPattern;
544
+ if (navigationMode === 'tree' && requestedPattern !== undefined && requestedPattern !== 'uniform') {
545
+ throw new Error([
546
+ `sections.backgroundPattern "${requestedPattern}" cannot be used with tree navigation in ${sourceLabel}.`,
547
+ 'Tree navigation uses one uniform reading surface so the navigation rail and page content remain distinct.',
548
+ 'Remove sections.backgroundPattern or set it to uniform.',
549
+ ].join('\n'));
550
+ }
551
+ };
552
+
553
+ export const resolvePagePresentation = (theme, sourceLabel, { navigationMode = 'sections' } = {}) => {
554
+ assertSectionBackgroundPatternCompatibility(theme, sourceLabel, navigationMode);
555
+
127
556
  const resolvedThemePresentation = resolveThemePresentation(theme, sourceLabel);
557
+ if (navigationMode === 'tree') {
558
+ return {
559
+ ...resolvedThemePresentation,
560
+ readerPreferences: {
561
+ ...resolvedThemePresentation.readerPreferences,
562
+ controls: {
563
+ ...resolvedThemePresentation.readerPreferences.controls,
564
+ focusReading: true,
565
+ },
566
+ },
567
+ sectionSurfaces: getSectionSurfaces('uniform', sourceLabel),
568
+ };
569
+ }
128
570
 
129
571
  return resolvedThemePresentation;
130
572
  };
@@ -142,8 +584,13 @@ export const resolveSectionSurface = (pagePresentation, sectionIndex) => {
142
584
 
143
585
  return {
144
586
  name: surfaceName,
145
- ...pagePresentation.palette.surfaces[surfaceName],
587
+ backgroundColor: `var(--color-surface-${surfaceName}-background)`,
588
+ textColor: `var(--color-surface-${surfaceName}-text)`,
589
+ secondaryTextColor: `var(--color-surface-${surfaceName}-secondary-text)`,
146
590
  };
147
591
  };
148
592
 
149
- export const resolveFrameColors = ({ theme, sourceLabel }) => resolveThemePresentation(theme, sourceLabel).palette.frame;
593
+ export const resolveFrameColors = () => ({
594
+ backgroundColor: 'var(--color-frame-background)',
595
+ textColor: 'var(--color-frame-text)',
596
+ });