@janga/norna 0.7.24 → 0.7.25

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 (43) hide show
  1. package/README.md +2 -2
  2. package/astro.config.mjs +2 -0
  3. package/package.json +14 -2
  4. package/schemas/category.schema.json +2 -2
  5. package/schemas/config.schema.json +56 -21
  6. package/schemas/content-frontmatter.schema.json +7 -7
  7. package/schemas/page-theme.schema.json +26 -26
  8. package/schemas/sitewide-content.schema.json +18 -18
  9. package/schemas/theme.schema.json +241 -241
  10. package/scripts/check-config.mjs +5 -1
  11. package/scripts/dev-local.mjs +106 -11
  12. package/scripts/init-site.mjs +2 -0
  13. package/scripts/lib/code-fence-metadata.mjs +11 -6
  14. package/scripts/lib/edit-source-link.mjs +53 -0
  15. package/scripts/lib/navigation-model.mjs +1 -1
  16. package/scripts/lib/norna-markdown-blocks.mjs +91 -0
  17. package/scripts/lib/project-config.mjs +42 -12
  18. package/scripts/lib/schema-definitions.mjs +10 -2
  19. package/scripts/lib/schema-editor-metadata.mjs +20 -3
  20. package/scripts/lib/schema-value-definitions.mjs +3 -0
  21. package/scripts/lib/site-paths.mjs +14 -2
  22. package/scripts/lib/table-render-plugin.mjs +33 -0
  23. package/src/components/CardList.astro +1 -0
  24. package/src/components/CodeBlockCopyScript.astro +2 -1
  25. package/src/components/ImageCarousel.astro +4 -1
  26. package/src/components/ImageStack.astro +34 -9
  27. package/src/components/ImageStackEnhancement.astro +331 -0
  28. package/src/components/PageContentsNavigation.astro +2 -3
  29. package/src/components/SectionNavigationScript.astro +45 -7
  30. package/src/components/SiteNavigation.astro +73 -49
  31. package/src/components/SitePage.astro +38 -23
  32. package/src/components/SiteTreeNavigation.astro +3 -0
  33. package/src/components/TableOverflowScript.astro +251 -0
  34. package/src/components/TreeNavigationScript.astro +78 -22
  35. package/src/layouts/BaseLayout.astro +31 -5
  36. package/src/lib/generatedImages.ts +18 -0
  37. package/src/lib/sectionContent.ts +4 -27
  38. package/src/lib/sitePages.ts +6 -3
  39. package/src/styles/content.css +298 -23
  40. package/src/styles/media.css +187 -3
  41. package/src/styles/navigation.css +168 -3
  42. package/src/styles/page-layout.css +48 -16
  43. package/src/styles/responsive.css +67 -20
package/README.md CHANGED
@@ -76,8 +76,8 @@ site/
76
76
  - `theme.yaml` normally selects one complete visual preset.
77
77
  - `sitewide-content.yaml` holds shared logo display settings, banners, and
78
78
  footer content.
79
- - `config.yaml` holds the public URL and optional language, source edit link,
80
- navigation model, static search, and scroll behavior.
79
+ - `config.yaml` holds the public URL and optional language, local and remote
80
+ source links, navigation model, static search, and scroll behavior.
81
81
  - `public/` holds static files copied without processing.
82
82
 
83
83
  Norna validates this structure, processes managed images when needed, and
package/astro.config.mjs CHANGED
@@ -7,6 +7,7 @@ import { satteri } from '@astrojs/markdown-satteri';
7
7
  import { getBasePathRedirectLocation } from './scripts/lib/base-path-redirect.mjs';
8
8
  import { nornaCodeFenceTransformer } from './scripts/lib/code-fence-metadata.mjs';
9
9
  import { nornaMarkdownRenderPlugin } from './scripts/lib/norna-markdown-render-plugin.mjs';
10
+ import { nornaTableRenderPlugin } from './scripts/lib/table-render-plugin.mjs';
10
11
  import {
11
12
  astroCacheDir,
12
13
  astroDistDir,
@@ -150,6 +151,7 @@ export default defineConfig({
150
151
  },
151
152
  },
152
153
  mdastPlugins: [nornaMarkdownRenderPlugin],
154
+ hastPlugins: [nornaTableRenderPlugin],
153
155
  }),
154
156
  },
155
157
  outDir: astroDistDir,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@janga/norna",
3
3
  "description": "An opinionated CLI for building responsive websites from Markdown, images, and theme presets.",
4
4
  "type": "module",
5
- "version": "0.7.24",
5
+ "version": "0.7.25",
6
6
  "license": "GPL-3.0-only",
7
7
  "repository": {
8
8
  "type": "git",
@@ -72,6 +72,13 @@
72
72
  "dev:status": "node bin/norna.mjs dev:status",
73
73
  "dev:logs": "node bin/norna.mjs dev:logs",
74
74
  "dev:stop": "node bin/norna.mjs dev:stop",
75
+ "review:start": "node scripts/review-environments.mjs start",
76
+ "review:status": "node scripts/review-environments.mjs status",
77
+ "review:logs": "node scripts/review-environments.mjs logs",
78
+ "review:stop": "node scripts/review-environments.mjs stop",
79
+ "review:test": "node scripts/review-environments.mjs test",
80
+ "review:capture": "node scripts/review-environments.mjs capture",
81
+ "review:scratch": "node scripts/review-environments.mjs scratch",
75
82
  "config:check": "node bin/norna.mjs config:check",
76
83
  "content:check": "node bin/norna.mjs content:check",
77
84
  "content:sync": "node bin/norna.mjs content:sync",
@@ -92,7 +99,7 @@
92
99
  "deploy:watch": "node bin/norna.mjs deploy:watch",
93
100
  "doctor": "node bin/norna.mjs doctor",
94
101
  "demo:build": "node scripts/build-demo.mjs",
95
- "test": "npm run schemas:check && npm run test:dead-code && npm run test:schemas && npm run test:page-model && npm run test:page-markdown && npm run test:site-links && npm run test:page-aliases && npm run test:sitemap && npm run test:not-found-page && npm run test:site-node-commands && npm run test:page-move && npm run test:navigation-review && npm run test:nested-pages && npm run test:heading-ids && npm run test:navigation-model && npm run test:project-config && npm run test:edit-source-link && npm run test:static-search && npm run test:editor-language && npm run test:content-check && npm run test:content-sync-plan && npm run test:content-model && npm run test:theme-presets && npm run test:presentation-contract && npm run test:preset-baselines && npm run test:documentation-preset-review && npm run test:site-public && npm run test:cli-discovery && npm run test:dev-local && npm run test:engine-commands && npm run test:documentation && npm run test:ci-lockfile && npm run test:banner-visibility && npm run test:client-javascript && npm run test:fixture:build && npm run test:examples && npm run package:check",
102
+ "test": "npm run schemas:check && npm run test:dead-code && npm run test:schemas && npm run test:page-model && npm run test:page-markdown && npm run test:site-links && npm run test:page-aliases && npm run test:sitemap && npm run test:not-found-page && npm run test:site-node-commands && npm run test:page-move && npm run test:navigation-review && npm run test:nested-pages && npm run test:heading-ids && npm run test:navigation-model && npm run test:project-config && npm run test:edit-source-link && npm run test:static-search && npm run test:editor-language && npm run test:content-check && npm run test:content-sync-plan && npm run test:content-model && npm run test:theme-presets && npm run test:presentation-contract && npm run test:presentation-review && npm run test:preset-baselines && npm run test:documentation-preset-review && npm run test:site-public && npm run test:cli-discovery && npm run test:dev-local && npm run test:review-environments && npm run test:engine-commands && npm run test:documentation && npm run test:ci-lockfile && npm run test:banner-visibility && npm run test:client-javascript && npm run test:fixture:build && npm run test:examples && npm run package:check",
96
103
  "test:fixture:build": "node scripts/test-basic-fixture-build.mjs",
97
104
  "test:examples": "node scripts/test-examples.mjs",
98
105
  "test:page-model": "node scripts/test-page-model.mjs",
@@ -120,7 +127,10 @@
120
127
  "test:markdown-constructs": "node scripts/test-markdown-constructs.mjs",
121
128
  "test:theme-presets": "node scripts/test-theme-presets.mjs",
122
129
  "test:presentation-contract": "node scripts/test-presentation-contract.mjs",
130
+ "test:presentation-review": "node scripts/test-presentation-review-fixture.mjs",
123
131
  "test:presentation:browser": "node scripts/test-navigation.mjs --site-dir fixtures/preset-baseline/site tests/presentation-contract.spec.ts",
132
+ "test:table-layout:top": "node scripts/test-navigation.mjs --site-dir fixtures/top-navigation/site tests/table-width-top.spec.ts",
133
+ "test:table-context:browser": "node scripts/test-navigation.mjs --site-dir fixtures/presentation-review/site tests/table-responsive-context.spec.ts",
124
134
  "test:navigation-surfaces:browser": "npm run test:navigation-surfaces:top && npm run test:navigation-surfaces:tree",
125
135
  "test:navigation-surfaces:top": "node scripts/test-navigation.mjs --site-dir fixtures/content-model-v2/site tests/navigation-surfaces-top.spec.ts",
126
136
  "test:navigation-surfaces:tree": "node scripts/test-navigation.mjs --site-dir fixtures/preset-baseline/site tests/presentation-contract.spec.ts",
@@ -134,6 +144,8 @@
134
144
  "test:site-public": "node scripts/test-site-public.mjs",
135
145
  "test:cli-discovery": "node scripts/test-cli-discovery.mjs",
136
146
  "test:dev-local": "node scripts/test-dev-local.mjs",
147
+ "test:review-environments": "node scripts/test-review-environments.mjs",
148
+ "test:review-environments:browser": "node scripts/test-review-environments-browser.mjs",
137
149
  "test:engine-commands": "node scripts/test-engine-commands.mjs",
138
150
  "test:editor-language": "node scripts/test-editor-language-service.mjs && npm --prefix editors/vscode run check",
139
151
  "test:editor-integration": "npm --prefix editors/vscode run test:integration",
@@ -6,7 +6,7 @@
6
6
  "type": "string",
7
7
  "minLength": 1,
8
8
  "description": "Navigation label for this non-routable page category.",
9
- "markdownDescription": "```yaml\nlabel: Guides\n```\n\nThe category label shown in global navigation, tree navigation, mobile navigation, and breadcrumbs.\n\n[Navigation category reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation-categories)"
9
+ "markdownDescription": "```yaml\nlabel: Guides\n```\n\nThe category label shown in global navigation, tree navigation, mobile navigation, and breadcrumbs.\n\n[Navigation category reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation-categories)"
10
10
  }
11
11
  },
12
12
  "required": [
@@ -16,5 +16,5 @@
16
16
  "description": "A non-routable navigation category containing child pages.",
17
17
  "$id": "https://janga.github.io/norna/schemas/category.schema.json",
18
18
  "title": "Norna page category",
19
- "markdownDescription": "```yaml\nlabel: Guides\n```\n\n`category.yaml` creates a navigation-only group for child pages. It has no page content and produces no URL of its own.\n\n[Navigation category reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation-categories)"
19
+ "markdownDescription": "```yaml\nlabel: Guides\n```\n\n`category.yaml` creates a navigation-only group for child pages. It has no page content and produces no URL of its own.\n\n[Navigation category reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation-categories)"
20
20
  }
@@ -6,7 +6,7 @@
6
6
  "type": "string",
7
7
  "format": "uri",
8
8
  "description": "Absolute public URL for the built site.",
9
- "markdownDescription": "```yaml\nurl: https://example.com/\n```\n\nThe absolute public URL. Its path also determines the base path for generated links and assets.\n\n[Public URL reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#url)",
9
+ "markdownDescription": "```yaml\nurl: https://example.com/\n```\n\nThe absolute public URL. Its path also determines the base path for generated links and assets.\n\n[Public URL reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#url)",
10
10
  "examples": [
11
11
  "https://example.com/",
12
12
  "https://owner.github.io/repository-name/"
@@ -28,13 +28,13 @@
28
28
  "const": "en",
29
29
  "title": "English",
30
30
  "description": "Use Norna's built-in English interface text.",
31
- "markdownDescription": "Use Norna's built-in English interface text.\n\n[Language reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#language)"
31
+ "markdownDescription": "Use Norna's built-in English interface text.\n\n[Language reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#language)"
32
32
  },
33
33
  {
34
34
  "const": "sv",
35
35
  "title": "Swedish",
36
36
  "description": "Use Norna's built-in Swedish interface text.",
37
- "markdownDescription": "Use Norna's built-in Swedish interface text.\n\n[Language reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#language)"
37
+ "markdownDescription": "Use Norna's built-in Swedish interface text.\n\n[Language reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#language)"
38
38
  },
39
39
  {
40
40
  "type": "string",
@@ -43,7 +43,7 @@
43
43
  "description": "Use an English or Swedish regional language tag such as en-GB or sv-SE."
44
44
  }
45
45
  ],
46
- "markdownDescription": "```yaml\nlanguage: en-GB\n```\n\nSets the page language and selects Norna's built-in English or Swedish interface text. The default is `en`.\n\n[Language reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#language)"
46
+ "markdownDescription": "```yaml\nlanguage: en-GB\n```\n\nSets the page language and selects Norna's built-in English or Swedish interface text. The default is `en`.\n\n[Language reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#language)"
47
47
  },
48
48
  "editLink": {
49
49
  "type": "object",
@@ -52,18 +52,53 @@
52
52
  "type": "string",
53
53
  "format": "uri",
54
54
  "description": "Absolute edit URL prefix containing the repository, branch, and any repository subdirectory.",
55
- "markdownDescription": "```yaml\neditLink:\n baseUrl: https://github.com/owner/repository/edit/main/\n```\n\nAbsolute edit URL prefix. Include any repository subdirectory and branch in this URL. Norna adds the project-relative path to each page's `content.md` file.\n\n[Edit-link reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#edit-link)",
55
+ "markdownDescription": "```yaml\neditLink:\n baseUrl: https://github.com/owner/repository/edit/main/\n```\n\nOptional absolute remote edit URL prefix. Include any repository subdirectory and branch. Norna adds the project-relative path to each page's `content.md` file. This destination is used by published output and LAN previews.\n\n[Edit-link reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#edit-link)",
56
56
  "examples": [
57
57
  "https://github.com/owner/repository/edit/main/"
58
58
  ]
59
+ },
60
+ "localEditor": {
61
+ "description": "Editor used by source links in a development preview opened through a loopback address.",
62
+ "type": "string",
63
+ "oneOf": [
64
+ {
65
+ "const": "vscode",
66
+ "title": "Visual Studio Code",
67
+ "description": "Open the current page source in the locally installed Visual Studio Code application.",
68
+ "markdownDescription": "Open the current page source in the locally installed Visual Studio Code application.\n\n[Edit-link reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#edit-link)"
69
+ }
70
+ ],
71
+ "markdownDescription": "```yaml\neditLink:\n localEditor: vscode\n```\n\nOptional editor for a development preview opened through localhost or another loopback address. `vscode` opens the absolute page source path through VS Code's registered URL handler. The setting is never emitted as a local path in published output.\n\n[Edit-link reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#edit-link)",
72
+ "examples": [
73
+ "vscode"
74
+ ]
59
75
  }
60
76
  },
61
- "required": [
62
- "baseUrl"
63
- ],
64
77
  "additionalProperties": false,
65
- "description": "Optional base URL for links from rendered pages to their Markdown source files.",
66
- "markdownDescription": "```yaml\neditLink:\n baseUrl: https://github.com/owner/repository/edit/main/\n```\n\nAdds a localized **Edit this page** link from each rendered page to its `content.md` source file. The base URL identifies the repository, branch, and any repository subdirectory; Norna appends the page source path.\n\n[Edit-link reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#edit-link)"
78
+ "description": "Optional local and remote links from rendered pages to their Markdown source files.",
79
+ "markdownDescription": "```yaml\neditLink:\n localEditor: vscode\n baseUrl: https://github.com/owner/repository/edit/main/\n```\n\nLinks each rendered page to its `content.md` source. A loopback development preview uses the explicitly selected local editor; published output and LAN previews use the optional remote base URL. Specify either destination or both.\n\n[Edit-link reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#edit-link)",
80
+ "anyOf": [
81
+ {
82
+ "required": [
83
+ "localEditor"
84
+ ]
85
+ },
86
+ {
87
+ "required": [
88
+ "baseUrl"
89
+ ]
90
+ }
91
+ ],
92
+ "defaultSnippets": [
93
+ {
94
+ "label": "Local and remote source links",
95
+ "markdownDescription": "Open page source in VS Code during same-computer development and on the remote source host elsewhere.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#edit-link)",
96
+ "body": {
97
+ "localEditor": "vscode",
98
+ "baseUrl": "https://github.com/${1:owner}/${2:repository}/edit/${3:main}/"
99
+ }
100
+ }
101
+ ]
67
102
  },
68
103
  "navigation": {
69
104
  "type": "object",
@@ -76,28 +111,28 @@
76
111
  "const": "automatic",
77
112
  "title": "Automatic",
78
113
  "description": "Choose sections for one page, top navigation for a flat multi-page site, and a stable left rail throughout a site with listed child pages or categories.",
79
- "markdownDescription": "Choose sections for one page, top navigation for a flat multi-page site, and a stable left rail throughout a site with listed child pages or categories.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation)"
114
+ "markdownDescription": "Choose sections for one page, top navigation for a flat multi-page site, and a stable left rail throughout a site with listed child pages or categories.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation)"
80
115
  },
81
116
  {
82
117
  "const": "sections",
83
118
  "title": "Sections",
84
119
  "description": "Navigate the sections of the current page.",
85
- "markdownDescription": "Navigate the sections of the current page.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation)"
120
+ "markdownDescription": "Navigate the sections of the current page.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation)"
86
121
  },
87
122
  {
88
123
  "const": "top",
89
124
  "title": "Top",
90
125
  "description": "Use pages in the top navigation and sections below them.",
91
- "markdownDescription": "Use pages in the top navigation and sections below them.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation)"
126
+ "markdownDescription": "Use pages in the top navigation and sections below them.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation)"
92
127
  },
93
128
  {
94
129
  "const": "tree",
95
130
  "title": "Tree",
96
131
  "description": "Use a left page rail and a separate right H2/H3 contents rail where the page has enough headings.",
97
- "markdownDescription": "Use a left page rail and a separate right H2/H3 contents rail where the page has enough headings.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation)"
132
+ "markdownDescription": "Use a left page rail and a separate right H2/H3 contents rail where the page has enough headings.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation)"
98
133
  }
99
134
  ],
100
- "markdownDescription": "```yaml\nnavigation:\n mode: automatic\n```\n\nNavigation model. Omit this to let Norna choose from the site structure.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation)",
135
+ "markdownDescription": "```yaml\nnavigation:\n mode: automatic\n```\n\nNavigation model. Omit this to let Norna choose from the site structure.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation)",
101
136
  "examples": [
102
137
  "automatic",
103
138
  "sections",
@@ -108,13 +143,13 @@
108
143
  },
109
144
  "additionalProperties": false,
110
145
  "description": "Site-wide navigation behavior.",
111
- "markdownDescription": "```yaml\nnavigation:\n mode: automatic\n```\n\nSets the site-wide navigation policy. `automatic` uses sections for one page, top navigation for a flat multi-page site, and a stable left rail throughout a hierarchical site.\n\n[Navigation reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation)"
146
+ "markdownDescription": "```yaml\nnavigation:\n mode: automatic\n```\n\nSets the site-wide navigation policy. `automatic` uses sections for one page, top navigation for a flat multi-page site, and a stable left rail throughout a hierarchical site.\n\n[Navigation reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation)"
112
147
  },
113
148
  "search": {
114
149
  "default": false,
115
150
  "description": "Generate a static site search page and Pagefind index. The default is false.",
116
151
  "type": "boolean",
117
- "markdownDescription": "```yaml\nsearch: true\n```\n\nGenerates a localized `/search/` page and a static Pagefind index during each build. Search is off by default, and only the search page loads the search JavaScript.\n\n[Search reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#search)",
152
+ "markdownDescription": "```yaml\nsearch: true\n```\n\nGenerates a localized `/search/` page and a static Pagefind index during each build. Search is off by default, and only the search page loads the search JavaScript.\n\n[Search reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#search)",
118
153
  "examples": [
119
154
  true,
120
155
  false
@@ -129,16 +164,16 @@
129
164
  "const": "instant",
130
165
  "title": "Instant",
131
166
  "description": "Jump directly to anchors without animated scrolling. This is the default.",
132
- "markdownDescription": "Jump directly to anchors without animated scrolling. This is the default.\n\n[Scroll behavior reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#scrollbehavior)"
167
+ "markdownDescription": "Jump directly to anchors without animated scrolling. This is the default.\n\n[Scroll behavior reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#scrollbehavior)"
133
168
  },
134
169
  {
135
170
  "const": "smooth",
136
171
  "title": "Browser smooth",
137
172
  "description": "Use the browser's native smooth scrolling for anchor navigation.",
138
- "markdownDescription": "Use the browser's native smooth scrolling for anchor navigation.\n\n[Scroll behavior reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#scrollbehavior)"
173
+ "markdownDescription": "Use the browser's native smooth scrolling for anchor navigation.\n\n[Scroll behavior reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#scrollbehavior)"
139
174
  }
140
175
  ],
141
- "markdownDescription": "```yaml\nscrollBehavior: smooth\n```\n\nControls same-page anchor movement. `instant` is the default; `smooth` uses the browser's native smooth scrolling.\n\n[Scroll behavior reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md#scrollbehavior)",
176
+ "markdownDescription": "```yaml\nscrollBehavior: smooth\n```\n\nControls same-page anchor movement. `instant` is the default; `smooth` uses the browser's native smooth scrolling.\n\n[Scroll behavior reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md#scrollbehavior)",
142
177
  "examples": [
143
178
  "instant",
144
179
  "smooth"
@@ -152,5 +187,5 @@
152
187
  "description": "Technical settings for one Norna site. Additional pages cannot provide technical configuration.",
153
188
  "$id": "https://janga.github.io/norna/schemas/config.schema.json",
154
189
  "title": "Norna site configuration",
155
- "markdownDescription": "```yaml\nurl: https://example.com/\n```\n\n`config.yaml` contains the few technical settings shared by the complete site.\n\n[Configuration reference](https://github.com/janga/norna/blob/v0.7.24/docs/configuration.md)"
190
+ "markdownDescription": "```yaml\nurl: https://example.com/\n```\n\n`config.yaml` contains the few technical settings shared by the complete site.\n\n[Configuration reference](https://github.com/janga/norna/blob/v0.7.25/docs/configuration.md)"
156
191
  }
@@ -9,7 +9,7 @@
9
9
  "description": "Optional page-specific meta description.",
10
10
  "type": "string",
11
11
  "minLength": 1,
12
- "markdownDescription": "```yaml\npage:\n description: About this project.\n```\n\nAn optional page-specific description rendered as `<meta name=\"description\">`. It is not visible in page content.\n\n[Page title and frontmatter reference](https://github.com/janga/norna/blob/v0.7.24/docs/content.md#page-title-and-frontmatter)",
12
+ "markdownDescription": "```yaml\npage:\n description: About this project.\n```\n\nAn optional page-specific description rendered as `<meta name=\"description\">`. It is not visible in page content.\n\n[Page title and frontmatter reference](https://github.com/janga/norna/blob/v0.7.25/docs/content.md#page-title-and-frontmatter)",
13
13
  "examples": [
14
14
  "About this project."
15
15
  ]
@@ -22,12 +22,12 @@
22
22
  "type": "string",
23
23
  "pattern": "^\\/(?:[a-z0-9]+(?:-[a-z0-9]+)*\\/)+$",
24
24
  "description": "Previous site-relative URL that permanently identifies this page.",
25
- "markdownDescription": "```yaml\npage:\n aliases:\n - /old-about/\n```\n\nUse a previous Norna page URL. Start and end with `/`; use lowercase ASCII letters, numbers, and single hyphens; do not include the configured base path, a query string, or a fragment.\n\n[Alias path rules](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#preserve-old-page-urls)",
25
+ "markdownDescription": "```yaml\npage:\n aliases:\n - /old-about/\n```\n\nUse a previous Norna page URL. Start and end with `/`; use lowercase ASCII letters, numbers, and single hyphens; do not include the configured base path, a query string, or a fragment.\n\n[Alias path rules](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#preserve-old-page-urls)",
26
26
  "examples": [
27
27
  "/old-about/"
28
28
  ]
29
29
  },
30
- "markdownDescription": "```yaml\npage:\n aliases:\n - /old-about/\n```\n\nLists previous site-relative URLs that permanently identify this page. The page containing the list is always the target. Paths omit the configured base path and are excluded from the sitemap.\n\n[Preserve old page URLs](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#preserve-old-page-urls)",
30
+ "markdownDescription": "```yaml\npage:\n aliases:\n - /old-about/\n```\n\nLists previous site-relative URLs that permanently identify this page. The page containing the list is always the target. Paths omit the configured base path and are excluded from the sitemap.\n\n[Preserve old page URLs](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#preserve-old-page-urls)",
31
31
  "examples": [
32
32
  [
33
33
  "/old-about/"
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "additionalProperties": false,
39
39
  "description": "Optional metadata for this homepage or additional page. The Markdown H1 supplies the page title.",
40
- "markdownDescription": "```yaml\npage:\n description: About this project.\n aliases:\n - /old-about/\n```\n\nContains optional metadata for the current homepage or additional page. The Markdown H1 supplies its title. An alias records an old URL for this same page.\n\n[Page title and frontmatter reference](https://github.com/janga/norna/blob/v0.7.24/docs/content.md#page-title-and-frontmatter)"
40
+ "markdownDescription": "```yaml\npage:\n description: About this project.\n aliases:\n - /old-about/\n```\n\nContains optional metadata for the current homepage or additional page. The Markdown H1 supplies its title. An alias records an old URL for this same page.\n\n[Page title and frontmatter reference](https://github.com/janga/norna/blob/v0.7.25/docs/content.md#page-title-and-frontmatter)"
41
41
  },
42
42
  "navigation": {
43
43
  "description": "Optional navigation metadata for this page.",
@@ -47,7 +47,7 @@
47
47
  "default": true,
48
48
  "description": "List this page in site navigation. The page remains public when false.",
49
49
  "type": "boolean",
50
- "markdownDescription": "```yaml\nnavigation:\n listed: false\n```\n\nList this page in site navigation. The page remains public when false.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation)",
50
+ "markdownDescription": "```yaml\nnavigation:\n listed: false\n```\n\nList this page in site navigation. The page remains public when false.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation)",
51
51
  "examples": [
52
52
  true,
53
53
  false
@@ -55,12 +55,12 @@
55
55
  }
56
56
  },
57
57
  "additionalProperties": false,
58
- "markdownDescription": "```yaml\nnavigation:\n listed: false\n```\n\nOptionally excludes an additional page from site navigation without removing its public URL.\n\n[Site navigation reference](https://github.com/janga/norna/blob/v0.7.24/docs/pages.md#navigation)"
58
+ "markdownDescription": "```yaml\nnavigation:\n listed: false\n```\n\nOptionally excludes an additional page from site navigation without removing its public URL.\n\n[Site navigation reference](https://github.com/janga/norna/blob/v0.7.25/docs/pages.md#navigation)"
59
59
  }
60
60
  },
61
61
  "additionalProperties": false,
62
62
  "description": "Frontmatter for a homepage or additional page content.md file.",
63
63
  "$id": "https://janga.github.io/norna/schemas/content-frontmatter.schema.json",
64
64
  "title": "Norna page frontmatter",
65
- "markdownDescription": "```yaml\n---\npage:\n description: About this project.\n---\n```\n\nContent frontmatter is optional. Write the page title as the single Markdown H1; use frontmatter only for optional metadata or navigation settings.\n\n[Page title and frontmatter reference](https://github.com/janga/norna/blob/v0.7.24/docs/content.md#page-title-and-frontmatter)"
65
+ "markdownDescription": "```yaml\n---\npage:\n description: About this project.\n---\n```\n\nContent frontmatter is optional. Write the page title as the single Markdown H1; use frontmatter only for optional metadata or navigation settings.\n\n[Page title and frontmatter reference](https://github.com/janga/norna/blob/v0.7.25/docs/content.md#page-title-and-frontmatter)"
66
66
  }
@@ -13,22 +13,22 @@
13
13
  "const": "compact",
14
14
  "title": "Compact",
15
15
  "description": "Use restrained spacing between sections and structured blocks.",
16
- "markdownDescription": "Use restrained spacing between sections and structured blocks.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
16
+ "markdownDescription": "Use restrained spacing between sections and structured blocks.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
17
17
  },
18
18
  {
19
19
  "const": "normal",
20
20
  "title": "Normal",
21
21
  "description": "Use balanced content spacing.",
22
- "markdownDescription": "Use balanced content spacing.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
22
+ "markdownDescription": "Use balanced content spacing.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
23
23
  },
24
24
  {
25
25
  "const": "spacious",
26
26
  "title": "Spacious",
27
27
  "description": "Use more expansive spacing between sections and structured blocks.",
28
- "markdownDescription": "Use more expansive spacing between sections and structured blocks.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
28
+ "markdownDescription": "Use more expansive spacing between sections and structured blocks.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
29
29
  }
30
30
  ],
31
- "markdownDescription": "```yaml\nlayout:\n contentSpacing: compact\n```\n\nPage content spacing. Descendant pages inherit this value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)",
31
+ "markdownDescription": "```yaml\nlayout:\n contentSpacing: compact\n```\n\nPage content spacing. Descendant pages inherit this value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)",
32
32
  "examples": [
33
33
  "compact",
34
34
  "normal",
@@ -43,22 +43,22 @@
43
43
  "const": "narrow",
44
44
  "title": "Narrow",
45
45
  "description": "Use a shorter line length suited to reading-focused text.",
46
- "markdownDescription": "Use a shorter line length suited to reading-focused text.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
46
+ "markdownDescription": "Use a shorter line length suited to reading-focused text.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
47
47
  },
48
48
  {
49
49
  "const": "normal",
50
50
  "title": "Normal",
51
51
  "description": "Use the balanced default line length.",
52
- "markdownDescription": "Use the balanced default line length.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
52
+ "markdownDescription": "Use the balanced default line length.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
53
53
  },
54
54
  {
55
55
  "const": "wide",
56
56
  "title": "Wide",
57
57
  "description": "Allow body text to use more horizontal space.",
58
- "markdownDescription": "Allow body text to use more horizontal space.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
58
+ "markdownDescription": "Allow body text to use more horizontal space.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
59
59
  }
60
60
  ],
61
- "markdownDescription": "```yaml\nlayout:\n textWidth: narrow\n```\n\nBody-text line length. Descendant pages inherit this value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)",
61
+ "markdownDescription": "```yaml\nlayout:\n textWidth: narrow\n```\n\nBody-text line length. Descendant pages inherit this value.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)",
62
62
  "examples": [
63
63
  "narrow",
64
64
  "normal",
@@ -68,7 +68,7 @@
68
68
  },
69
69
  "additionalProperties": false,
70
70
  "description": "Page-local layout settings inherited by descendant pages.",
71
- "markdownDescription": "```yaml\nlayout:\n textWidth: narrow\n contentSpacing: compact\n```\n\nAdjusts body-text line length and vertical content spacing for pages below this directory.\n\n[Page theme reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
71
+ "markdownDescription": "```yaml\nlayout:\n textWidth: narrow\n contentSpacing: compact\n```\n\nAdjusts body-text line length and vertical content spacing for pages below this directory.\n\n[Page theme reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
72
72
  },
73
73
  "images": {
74
74
  "type": "object",
@@ -81,22 +81,22 @@
81
81
  "const": "prose-aligned",
82
82
  "title": "Prose-aligned",
83
83
  "description": "Start managed images and captions at the body-text edge and size them from the page content area.",
84
- "markdownDescription": "Start managed images and captions at the body-text edge and size them from the page content area.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#image-sizing)"
84
+ "markdownDescription": "Start managed images and captions at the body-text edge and size them from the page content area.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#image-sizing)"
85
85
  },
86
86
  {
87
87
  "const": "centered-fit",
88
88
  "title": "Centered fit",
89
89
  "description": "Center managed images and captions in the page media area and constrain them by available width and viewport height.",
90
- "markdownDescription": "Center managed images and captions in the page media area and constrain them by available width and viewport height.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#image-sizing)"
90
+ "markdownDescription": "Center managed images and captions in the page media area and constrain them by available width and viewport height.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#image-sizing)"
91
91
  }
92
92
  ],
93
- "markdownDescription": "```yaml\nimages:\n presentation: prose-aligned\n```\n\nManaged-image presentation method. 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.24/docs/theme.md#image-sizing)"
93
+ "markdownDescription": "```yaml\nimages:\n presentation: prose-aligned\n```\n\nManaged-image presentation method. 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.25/docs/theme.md#image-sizing)"
94
94
  },
95
95
  "width": {
96
96
  "description": "Maximum managed-image width. Omit this to keep the selected preset.",
97
97
  "type": "string",
98
98
  "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*\\))$",
99
- "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.24/docs/theme.md#image-sizing)"
99
+ "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.25/docs/theme.md#image-sizing)"
100
100
  },
101
101
  "maxAvailableWidthPercent": {
102
102
  "description": "Maximum percentage of available horizontal space used by managed images.",
@@ -114,14 +114,14 @@
114
114
  "exclusiveMinimum": 0,
115
115
  "maximum": 100,
116
116
  "description": "Percentage used on wider screens.",
117
- "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.24/docs/theme.md#image-sizing)"
117
+ "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.25/docs/theme.md#image-sizing)"
118
118
  },
119
119
  "mobile": {
120
120
  "type": "number",
121
121
  "exclusiveMinimum": 0,
122
122
  "maximum": 100,
123
123
  "description": "Percentage used on narrow screens.",
124
- "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.24/docs/theme.md#image-sizing)"
124
+ "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.25/docs/theme.md#image-sizing)"
125
125
  }
126
126
  },
127
127
  "required": [
@@ -131,7 +131,7 @@
131
131
  "additionalProperties": false
132
132
  }
133
133
  ],
134
- "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.24/docs/theme.md#image-sizing)"
134
+ "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.25/docs/theme.md#image-sizing)"
135
135
  },
136
136
  "maxAvailableHeightPercent": {
137
137
  "description": "Maximum percentage of viewport height used by centered-fit images. This setting is unavailable with prose-aligned presentation.",
@@ -149,14 +149,14 @@
149
149
  "exclusiveMinimum": 0,
150
150
  "maximum": 100,
151
151
  "description": "Percentage used on wider screens.",
152
- "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.24/docs/theme.md#image-sizing)"
152
+ "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.25/docs/theme.md#image-sizing)"
153
153
  },
154
154
  "mobile": {
155
155
  "type": "number",
156
156
  "exclusiveMinimum": 0,
157
157
  "maximum": 100,
158
158
  "description": "Percentage used on narrow screens.",
159
- "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.24/docs/theme.md#image-sizing)"
159
+ "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.25/docs/theme.md#image-sizing)"
160
160
  }
161
161
  },
162
162
  "required": [
@@ -166,12 +166,12 @@
166
166
  "additionalProperties": false
167
167
  }
168
168
  ],
169
- "markdownDescription": "```yaml\nimages:\n maxAvailableHeightPercent:\n desktop: 74\n mobile: 68\n```\n\nMaximum percentage of viewport height used by centered-fit images. This setting is unavailable with prose-aligned presentation.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#image-sizing)"
169
+ "markdownDescription": "```yaml\nimages:\n maxAvailableHeightPercent:\n desktop: 74\n mobile: 68\n```\n\nMaximum percentage of viewport height used by centered-fit images. This setting is unavailable with prose-aligned presentation.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#image-sizing)"
170
170
  }
171
171
  },
172
172
  "additionalProperties": false,
173
173
  "description": "Optional defaults for placing managed images inside the page content area. Persistent navigation remains outside this area.",
174
- "markdownDescription": "```yaml\nimages:\n presentation: prose-aligned\n width: 900px\n```\n\nAdjusts managed-image presentation and sizing inside the content area for pages below this directory. Persistent navigation remains outside this area.\n\n[Image sizing reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#image-sizing)"
174
+ "markdownDescription": "```yaml\nimages:\n presentation: prose-aligned\n width: 900px\n```\n\nAdjusts managed-image presentation and sizing inside the content area for pages below this directory. Persistent navigation remains outside this area.\n\n[Image sizing reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#image-sizing)"
175
175
  },
176
176
  "sections": {
177
177
  "type": "object",
@@ -184,22 +184,22 @@
184
184
  "const": "uniform",
185
185
  "title": "Uniform",
186
186
  "description": "Use the normal page background for every H2 section. Tree navigation requires this pattern.",
187
- "markdownDescription": "Use the normal page background for every H2 section. Tree navigation requires this pattern.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
187
+ "markdownDescription": "Use the normal page background for every H2 section. Tree navigation requires this pattern.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
188
188
  },
189
189
  {
190
190
  "const": "alternating",
191
191
  "title": "Alternating",
192
192
  "description": "Alternate normal and subtly contrasting full-width section backgrounds. Available with sections and top navigation.",
193
- "markdownDescription": "Alternate normal and subtly contrasting full-width section backgrounds. Available with sections and top navigation.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
193
+ "markdownDescription": "Alternate normal and subtly contrasting full-width section backgrounds. Available with sections and top navigation.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
194
194
  },
195
195
  {
196
196
  "const": "accented",
197
197
  "title": "Accented",
198
198
  "description": "Move through base, soft, emphasis and soft full-width section backgrounds before repeating. Available with sections and top navigation.",
199
- "markdownDescription": "Move through base, soft, emphasis and soft full-width section backgrounds before repeating. Available with sections and top navigation.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
199
+ "markdownDescription": "Move through base, soft, emphasis and soft full-width section backgrounds before repeating. Available with sections and top navigation.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
200
200
  }
201
201
  ],
202
- "markdownDescription": "```yaml\nsections:\n backgroundPattern: alternating\n```\n\nSection background sequence inherited by descendant pages. Non-uniform patterns are invalid with tree navigation.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)",
202
+ "markdownDescription": "```yaml\nsections:\n backgroundPattern: alternating\n```\n\nSection background sequence inherited by descendant pages. Non-uniform patterns are invalid with tree navigation.\n\n[Read the relevant reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)",
203
203
  "examples": [
204
204
  "uniform",
205
205
  "alternating",
@@ -209,12 +209,12 @@
209
209
  },
210
210
  "additionalProperties": false,
211
211
  "description": "Page-local section presentation inherited by descendant pages.",
212
- "markdownDescription": "```yaml\nsections:\n backgroundPattern: alternating\n```\n\nAdjusts the H2 section background pattern for pages below this directory. Alternating and accented create full-width bands but are invalid when navigation resolves to tree.\n\n[Page theme reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
212
+ "markdownDescription": "```yaml\nsections:\n backgroundPattern: alternating\n```\n\nAdjusts the H2 section background pattern for pages below this directory. Alternating and accented create full-width bands but are invalid when navigation resolves to tree.\n\n[Page theme reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
213
213
  }
214
214
  },
215
215
  "additionalProperties": false,
216
216
  "description": "Limited page presentation overrides inherited by descendant pages. Site colors, corners, typography, content-block defaults and navigation remain global.",
217
217
  "$id": "https://janga.github.io/norna/schemas/page-theme.schema.json",
218
218
  "title": "Norna page theme",
219
- "markdownDescription": "```yaml\nlayout:\n textWidth: narrow\n contentSpacing: compact\n```\n\nA limited theme in a page or category directory may adjust only page layout, managed-image sizing and the section background pattern. Descendant pages inherit these values. Tree navigation requires a uniform section background. Site colors, corners, typography, content-block defaults and navigation stay consistent.\n\n[Page theme reference](https://github.com/janga/norna/blob/v0.7.24/docs/theme.md#page-themes)"
219
+ "markdownDescription": "```yaml\nlayout:\n textWidth: narrow\n contentSpacing: compact\n```\n\nA limited theme in a page or category directory may adjust only page layout, managed-image sizing and the section background pattern. Descendant pages inherit these values. Tree navigation requires a uniform section background. Site colors, corners, typography, content-block defaults and navigation stay consistent.\n\n[Page theme reference](https://github.com/janga/norna/blob/v0.7.25/docs/theme.md#page-themes)"
220
220
  }