@janga/norna 0.7.2 → 0.7.4

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 (88) hide show
  1. package/README.md +16 -16
  2. package/bin/norna-cli.mjs +12 -7
  3. package/docs/README.md +11 -12
  4. package/docs/commands.md +9 -9
  5. package/docs/configuration.md +14 -145
  6. package/docs/content.md +17 -15
  7. package/docs/design/command-organization.md +58 -57
  8. package/docs/design/site-examples-structure.md +6 -5
  9. package/docs/engine-development.md +5 -5
  10. package/docs/getting-started.md +20 -26
  11. package/docs/images-and-metadata.md +1 -1
  12. package/docs/local-development.md +2 -2
  13. package/docs/publishing.md +1 -1
  14. package/docs/routes.md +2 -2
  15. package/docs/site-structure.md +8 -7
  16. package/docs/theme.md +133 -7
  17. package/docs/typography.md +78 -43
  18. package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +74 -0
  19. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  20. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  21. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  22. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  23. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  24. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  25. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  26. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  27. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  28. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  29. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  30. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  31. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  32. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  33. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  34. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  35. package/examples/dog-gallery/node_modules/.vite/deps/package.json +3 -0
  36. package/examples/dog-gallery/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  37. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  38. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  39. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  40. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  41. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  42. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  43. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  44. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  45. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  46. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  47. package/examples/dog-gallery/site/config.mjs +12 -42
  48. package/examples/dog-gallery/site/content.md +28 -6
  49. package/examples/dog-gallery/site/routes/dog-care/route-content.md +17 -3
  50. package/examples/dog-gallery/site/theme.md +83 -26
  51. package/fixtures/basic/site/config.mjs +2 -22
  52. package/fixtures/basic/site/content.md +1 -1
  53. package/fixtures/basic/site/theme.md +7 -3
  54. package/package.json +3 -3
  55. package/scripts/check-config.mjs +4 -3
  56. package/scripts/deploy-site.mjs +3 -3
  57. package/scripts/init-site.mjs +10 -8
  58. package/scripts/lib/frontmatter-yaml.mjs +85 -0
  59. package/scripts/lib/presentation.mjs +10 -11
  60. package/scripts/lib/project-config.mjs +146 -45
  61. package/scripts/lib/site-content.mjs +21 -3
  62. package/scripts/lib/theme-config.mjs +34 -0
  63. package/scripts/lib/typography.mjs +155 -35
  64. package/scripts/show-typography.mjs +127 -159
  65. package/scripts/sync-content-sections.mjs +6 -6
  66. package/scripts/test-content-check.mjs +3 -4
  67. package/scripts/test-engine-commands.mjs +21 -3
  68. package/scripts/test-package-check.mjs +34 -17
  69. package/scripts/test-temporary-visibility.mjs +2 -3
  70. package/src/components/SitePage.astro +2 -3
  71. package/src/components/SiteSection.astro +115 -19
  72. package/src/content.config.ts +66 -6
  73. package/src/layouts/BaseLayout.astro +11 -0
  74. package/src/styles/global.css +83 -52
  75. package/starters/basic/README.md +11 -15
  76. package/starters/basic/package.json +2 -2
  77. package/starters/basic/site/config.mjs +3 -24
  78. package/starters/basic/site/content.md +40 -7
  79. package/starters/basic/site/theme.md +84 -18
  80. package/starters/project/.github/workflows/deploy.yml +65 -0
  81. package/starters/project/README.md +72 -0
  82. package/starters/project/package-lock.json +4296 -0
  83. package/starters/project/package.json +35 -0
  84. package/starters/project/site/config.mjs +43 -0
  85. package/starters/project/site/content.md +128 -0
  86. package/starters/project/site/public/robots.txt +2 -0
  87. package/starters/project/site/routes/guide/route-content.md +85 -0
  88. package/starters/project/site/theme.md +43 -0
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # norna
2
2
 
3
- `norna` is a reusable command-line toolchain for small static gallery
4
- sites. It provides the CLI, Astro renderer, validation scripts, image pipeline,
3
+ `norna` is a reusable command-line toolchain for small static websites.
4
+ It provides the CLI, Astro renderer, validation scripts, image pipeline,
5
5
  starter project, fixtures, and deploy helpers used by site repositories such as
6
6
  `www.walde.se`.
7
7
 
@@ -21,11 +21,11 @@ belong in each site repository. For example, Karin Walde's site lives in
21
21
  A `norna` site is file-driven:
22
22
 
23
23
  1. A site repository depends on this package.
24
- 2. The site keeps technical settings, including page width, gallery width, and
25
- the global font family, public URL, and optional URL base path in
26
- `site/config.mjs`.
27
- 3. The site can keep site-wide visual theme defaults in `site/theme.md`.
28
- 4. The site keeps homepage content, section order, gallery rows, alt text, and
24
+ 2. The site keeps technical settings, including public URL and optional URL
25
+ base path, in `site/config.mjs`.
26
+ 3. The site keeps site-wide visual theme defaults, including layout, image
27
+ sizing, font, typography, colors, and frame colors, in `site/theme.md`.
28
+ 4. The site keeps homepage content, section order, image rows, alt text, and
29
29
  captions in `site/content.md`.
30
30
  5. Optional route pages live under
31
31
  `site/routes/<route-folder>/route-content.md`.
@@ -56,10 +56,10 @@ For a new site repository:
56
56
 
57
57
  ```sh
58
58
  cd ../
59
- npx @janga/norna@latest init my-gallery
60
- cd my-gallery
59
+ npx @janga/norna@latest init my-site
60
+ cd my-site
61
61
  npm install
62
- npm run norna:dev
62
+ npm run dev
63
63
  ```
64
64
 
65
65
  Run `init` before `npm install`. A new site directory is not a Node project
@@ -75,18 +75,18 @@ Actions use the same engine version.
75
75
 
76
76
  - Create a site: [Getting Started](docs/getting-started.md)
77
77
  - Understand required site files: [Site Structure](docs/site-structure.md)
78
- - Edit sections and galleries: [Content](docs/content.md)
78
+ - Edit sections and image rows: [Content](docs/content.md)
79
79
  - Configure a site: [Configuration](docs/configuration.md)
80
80
  - Publish under a GitHub Pages project path:
81
81
  [`site.basePath`](docs/configuration.md#sitebasepath)
82
82
  - Configure site-wide theme: [Theme](docs/theme.md)
83
83
  - Add route pages: [Routes](docs/routes.md)
84
- - Set page width: [`layout.pageWidth`](docs/configuration.md#layoutpagewidth)
85
- - Set side gutters: [`layout.gutter`](docs/configuration.md#layoutgutter)
86
- - Set gallery width: [`gallery.width`](docs/configuration.md#gallerywidth)
84
+ - Set page width: [`layout.pageWidth`](docs/theme.md#layout)
85
+ - Set side gutters: [`layout.gutter`](docs/theme.md#layout)
86
+ - Set image area width: [`gallery.width`](docs/theme.md#image-sizing)
87
87
  - Keep images within viewport height:
88
- [`gallery.maxAvailableHeightPercent`](docs/configuration.md#gallerymaxavailableheightpercent)
89
- - Set the site font: [`typography.fontFamily`](docs/configuration.md#typographyfontfamily)
88
+ [`gallery.maxAvailableHeightPercent`](docs/theme.md#image-sizing)
89
+ - Set the site font: [`typography.fontFamily`](docs/theme.md#typography)
90
90
  - Choose typography presets and overrides: [Typography](docs/typography.md)
91
91
  - Look up CLI and npm scripts: [Commands](docs/commands.md)
92
92
  - Understand generated images: [Images And Metadata](docs/images-and-metadata.md)
package/bin/norna-cli.mjs CHANGED
@@ -15,10 +15,10 @@ Commands:
15
15
  dev:logs Show local dev server logs
16
16
  dev:stop Stop local dev server
17
17
  config:check Validate site/config.mjs
18
- content:check Validate site/content.md and gallery references
18
+ content:check Validate site/content.md and image references
19
19
  content:sync Rewrite section order and move misplaced images
20
- typography:presets Show built-in typography preset values
21
- typography:show Show resolved typography for the selected site
20
+ typography presets Show built-in typography preset values
21
+ typography show Show resolved typography for the selected site
22
22
  site:public Sync site/public/ to public/
23
23
  images Generate optimized image variants
24
24
  engine:update Update @janga/norna in a site repository
@@ -86,6 +86,7 @@ if (siteDir) {
86
86
  }
87
87
 
88
88
  const [command = 'help', ...rest] = commandArgs;
89
+ const [subcommand, ...subcommandRest] = rest;
89
90
 
90
91
  if (command === '-h' || command === '--help' || command === 'help') {
91
92
  console.log(usage);
@@ -130,10 +131,14 @@ try {
130
131
  await runAstroInherit(['sync']);
131
132
  } else if (command === 'content:sync') {
132
133
  await runScript('scripts/sync-content-sections.mjs', ['--write', ...rest]);
133
- } else if (command === 'typography:presets') {
134
- await runScript('scripts/show-typography.mjs', ['presets', ...rest]);
135
- } else if (command === 'typography:show') {
136
- await runScript('scripts/show-typography.mjs', ['show', ...rest]);
134
+ } else if (command === 'typography:presets' || (command === 'typography' && subcommand === 'presets')) {
135
+ const scriptArgs = command === 'typography' ? subcommandRest : rest;
136
+ await runScript('scripts/show-typography.mjs', ['presets', ...scriptArgs]);
137
+ } else if (command === 'typography:show' || (command === 'typography' && subcommand === 'show')) {
138
+ const scriptArgs = command === 'typography' ? subcommandRest : rest;
139
+ await runScript('scripts/show-typography.mjs', ['show', ...scriptArgs]);
140
+ } else if (command === 'typography') {
141
+ throw new Error(`Unknown typography command: ${subcommand ?? ''}\n${usage}`);
137
142
  } else if (command === 'site:public') {
138
143
  await runScript('scripts/sync-site-public.mjs', rest);
139
144
  } else if (command === 'images') {
package/docs/README.md CHANGED
@@ -9,9 +9,9 @@ For a site maintainer:
9
9
 
10
10
  1. [Getting Started](getting-started.md)
11
11
  2. [Site Structure](site-structure.md)
12
- 3. [Configuration](configuration.md)
13
- 4. [Content](content.md)
14
- 5. [Theme](theme.md)
12
+ 3. [Theme](theme.md)
13
+ 4. [Configuration](configuration.md)
14
+ 5. [Content](content.md)
15
15
  6. [Typography](typography.md)
16
16
  7. [Routes](routes.md)
17
17
  8. [Images And Metadata](images-and-metadata.md)
@@ -35,16 +35,15 @@ For design and naming principles:
35
35
 
36
36
  For a quick reference:
37
37
 
38
- - [Configuration](configuration.md) describes every supported
39
- `site/config.mjs` field, including `layout.pageWidth`, `layout.gutter`,
40
- gallery viewport limits, `typography.fontFamily`, validation rule, and
41
- default.
38
+ - [Configuration](configuration.md) describes technical `site/config.mjs`
39
+ fields such as URL, base path, locale labels, footer, GitHub, and deploy
40
+ settings.
42
41
  - [Content](content.md) describes page frontmatter, section frontmatter,
43
- galleries, carousels, temporary sections, Markdown section matching, and
42
+ image rows, carousels, temporary sections, Markdown section matching, and
44
43
  content validation.
45
- - [Theme](theme.md) describes site-wide presentation, page and section
46
- presentation overrides, frame colors, and inline styles.
47
- - [Typography](typography.md) describes presets, roles, overrides,
44
+ - [Theme](theme.md) describes site-wide layout, layout density, image sizing,
45
+ font, typography rhythm, presentation colors, frame colors, and inline styles.
46
+ - [Typography](typography.md) describes presets, rhythms, roles, overrides,
48
47
  inheritance, and inspection commands.
49
48
  - [Routes](routes.md) describes route files, slugs, route navigation, and
50
49
  route image directories.
@@ -55,7 +54,7 @@ For a quick reference:
55
54
  Design documents are intentionally separate from the user reference:
56
55
 
57
56
  - [Command Organization](design/command-organization.md) defines command
58
- namespaces for pure gallery projects, mixed projects, and engine development.
57
+ namespaces for standalone sites, mixed projects, and engine development.
59
58
  - [Site Examples Structure](design/site-examples-structure.md) defines the
60
59
  intended vocabulary for starters, examples, documentation sites, reference
61
60
  docs, and fixtures.
package/docs/commands.md CHANGED
@@ -25,8 +25,8 @@ norna dev:stop
25
25
  norna config:check
26
26
  norna content:check
27
27
  norna content:sync
28
- norna typography:presets
29
- norna typography:show
28
+ norna typography presets
29
+ norna typography show
30
30
  norna site:public
31
31
  norna images
32
32
  norna engine:update [version|latest]
@@ -55,7 +55,7 @@ norna --help
55
55
  ## Starter npm Scripts
56
56
 
57
57
  The starter uses `norna:*` for norna-specific work. This avoids collisions
58
- when a `norna` presentation is embedded inside a larger GitHub project
58
+ when a Norna site is embedded inside a larger GitHub project
59
59
  whose own `build`, `test`, or deploy scripts mean something different.
60
60
 
61
61
  The starter defines:
@@ -90,7 +90,7 @@ npm run build
90
90
 
91
91
  `npm run dev` calls `npm run norna:dev`. In the pure starter,
92
92
  `npm run build` aliases `npm run norna:build`. In mixed repositories, such as
93
- a GitHub project that embeds a gallery presentation next to an app, `build`
93
+ a GitHub project that embeds a Norna site next to an app, `build`
94
94
  should normally mean the repository's complete publishable artifact, while
95
95
  `norna:build` builds only the `norna` part.
96
96
 
@@ -101,13 +101,13 @@ should normally mean the repository's complete publishable artifact, while
101
101
  cache path.
102
102
  - `config:check`: validates `site/config.mjs` against the runtime config
103
103
  reader.
104
- - `content:check`: validates section structure and gallery references, then
104
+ - `content:check`: validates section structure and image references, then
105
105
  runs `astro sync`.
106
106
  - `content:sync` / `norna:sync`: rewrites Markdown section order and moves misplaced referenced
107
107
  image files after confirmation.
108
- - `typography:presets`: prints the exact built-in values for every typography
109
- preset.
110
- - `typography:show`: prints the selected site's resolved typography for the
108
+ - `typography presets`: prints the exact built-in values for typography
109
+ presets and rhythms.
110
+ - `typography show`: prints the selected site's resolved typography for the
111
111
  theme, every page route, and every section. Each value includes its source,
112
112
  and inherited page or section values are marked with `inherited: true`.
113
113
  - `site:public`: copies `site/public/` into `site/.norna/public/` and
@@ -125,7 +125,7 @@ should normally mean the repository's complete publishable artifact, while
125
125
  engine version, engine root, Astro dependency, and installed Astro version.
126
126
  With `--latest`, it also asks npm for the latest published engine version.
127
127
  - `init <target-dir> [--type pure|embedded] [--site-dir <path>]`: creates a
128
- pure gallery project from the packaged starter, or adds a gallery source
128
+ standalone site project from the packaged starter, or adds a Norna site
129
129
  directory plus `norna:*` scripts to an existing project in embedded mode.
130
130
  Pure setup pins `@janga/norna` to the version that created it.
131
131
  - `build`: runs config check, content check, public sync, image generation, and
@@ -58,152 +58,21 @@ site: {
58
58
  }
59
59
  ```
60
60
 
61
- ## Layout
61
+ ## Visual Theme
62
62
 
63
- ### `layout.pageWidth`
63
+ Visual configuration lives in `site/theme.md`, not `site/config.mjs`.
64
64
 
65
- - Purpose: maximum width of the main page content area, including section
66
- headings, section text, galleries, sticky-navigation alignment, and footer.
67
- - Type: string containing a simple positive CSS length.
68
- - Required: no.
69
- - Default: `1180px`.
70
- - Validation: if set, it must be a positive number followed by one of `px`,
71
- `rem`, `em`, `vw`, `vh`, `vmin`, `vmax`, `ch`, or `%`.
72
- - Consequence: the value overrides the global `--page-width` CSS variable.
73
- It is the outer width limit for content that is centered on the page.
74
- `gallery.width` cannot render wider than this page width or the available
75
- viewport width after responsive gutters.
76
-
77
- Example:
78
-
79
- ```js
80
- layout: {
81
- pageWidth: '1180px',
82
- }
83
- ```
84
-
85
- ### `layout.gutter`
86
-
87
- - Purpose: side margin removed from the viewport before the available content
88
- width is calculated.
89
- - Type: either a CSS length string used on all viewports, or an object with
90
- `desktop` and `mobile` CSS length strings.
91
- - Required: no.
92
- - Default: desktop `clamp(1.25rem, 4vw, 3rem)`, mobile `1rem`.
93
- - Validation: if set, each value must be a positive CSS length such as `16px`,
94
- `3rem`, or `4vw`. `clamp()` with those simple lengths is also accepted.
95
- - Consequence: wider gutters leave more side margin and reduce the maximum
96
- available width for galleries and aligned text.
97
-
98
- Example:
99
-
100
- ```js
101
- layout: {
102
- gutter: {
103
- desktop: '48px',
104
- mobile: '16px',
105
- },
106
- }
107
- ```
108
-
109
- ## Gallery
110
-
111
- ### `gallery.width`
112
-
113
- - Purpose: maximum rendered width for gallery images, gallery captions, and
114
- left- or right-aligned section text that is intended to line up with gallery
115
- edges.
116
- - Type: string containing a simple positive CSS length.
117
- - Required: no.
118
- - Default: `900px`.
119
- - Validation: if set, it must be a positive number followed by one of `px`,
120
- `rem`, `em`, `vw`, `vh`, `vmin`, `vmax`, `ch`, or `%`.
121
- - Consequence: the value overrides the global `--gallery-width` CSS variable.
122
- Images and aligned text cannot render wider than this value, but the
123
- effective width is also limited by `layout.pageWidth`, `layout.gutter`, and
124
- `gallery.maxAvailableWidthPercent`.
125
-
126
- Example:
127
-
128
- ```js
129
- gallery: {
130
- width: '900px',
131
- }
132
- ```
133
-
134
- ### `gallery.maxAvailableWidthPercent`
65
+ Use [Theme](theme.md) for:
135
66
 
136
- - Purpose: maximum share of the available width, after gutters, that gallery
137
- images, gallery captions, and aligned section text may use.
138
- - Type: either a number used on all viewports, or an object with `desktop` and
139
- `mobile` numbers.
140
- - Required: no.
141
- - Default: desktop `100`, mobile `100`.
142
- - Validation: each value must be greater than `0` and less than or equal to
143
- `100`.
144
- - Consequence: `100` allows the gallery to use the full available width. A
145
- smaller value keeps galleries narrower without changing the page width or
146
- gutters.
147
-
148
- Example:
149
-
150
- ```js
151
- gallery: {
152
- maxAvailableWidthPercent: {
153
- desktop: 100,
154
- mobile: 100,
155
- },
156
- }
157
- ```
158
-
159
- ### `gallery.maxAvailableHeightPercent`
160
-
161
- - Purpose: maximum share of viewport height that gallery images may use.
162
- - Type: either a number used on all viewports, or an object with `desktop` and
163
- `mobile` numbers.
164
- - Required: no.
165
- - Default: desktop `74`, mobile `68`.
166
- - Validation: each value must be greater than `0` and less than or equal to
167
- `100`.
168
- - Consequence: images keep their proportions and are scaled down when filling
169
- the available width would make them taller than this limit. This applies to
170
- both landscape and portrait images.
171
-
172
- Example:
173
-
174
- ```js
175
- gallery: {
176
- maxAvailableHeightPercent: {
177
- desktop: 74,
178
- mobile: 68,
179
- },
180
- }
181
- ```
182
-
183
- ## Typography
184
-
185
- ### `typography.fontFamily`
186
-
187
- - Purpose: global CSS `font-family` stack used by site text and sticky
188
- navigation.
189
- - Type: string containing a CSS font-family value.
190
- - Required: no.
191
- - Default: `Arial, 'Helvetica Neue', Helvetica, sans-serif`, matching the
192
- engine's existing sticky-navigation font stack.
193
- - Validation: if set, it must be a non-empty string and must not contain
194
- semicolons, braces, or line breaks.
195
- - Consequence: the value overrides the global `--font-sans` CSS variable for
196
- the whole page. Section headings, body text, gallery captions, footer text,
197
- and sticky navigation all inherit from that variable unless engine CSS gives a
198
- more specific rule.
199
-
200
- Example:
201
-
202
- ```js
203
- typography: {
204
- fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
205
- }
206
- ```
67
+ - `layout.pageWidth`
68
+ - `layout.gutter`
69
+ - `layout.density`
70
+ - `gallery.width`
71
+ - `gallery.maxAvailableWidthPercent`
72
+ - `gallery.maxAvailableHeightPercent`
73
+ - `typography.fontFamily`
74
+ - typography presets, rhythm, and overrides
75
+ - presentation colors, inline styles, and frame colors
207
76
 
208
77
  ## Navigation
209
78
 
@@ -272,7 +141,7 @@ Fields:
272
141
  `Sections`.
273
142
  - `locale.labels.menu`: mobile menu summary text, default `Menu`.
274
143
  - `locale.labels.closeMenu`: reserved close-menu label, default `Close menu`.
275
- - `locale.labels.gallery`: gallery ARIA label prefix, default `Gallery`.
144
+ - `locale.labels.gallery`: image row ARIA label prefix, default `Images`.
276
145
 
277
146
  Example:
278
147
 
@@ -285,7 +154,7 @@ locale: {
285
154
  pageNavigation: 'På denna sida',
286
155
  sectionNavigation: 'Sektioner',
287
156
  menu: 'Meny',
288
- gallery: 'Galleri',
157
+ gallery: 'Bilder',
289
158
  },
290
159
  }
291
160
  ```
package/docs/content.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Content
2
2
 
3
3
  `site/content.md` is the homepage page file for a `norna` site. It defines the
4
- page metadata, section order, section ids, gallery rows, and Markdown text for
4
+ page metadata, section order, section ids, image rows, and Markdown text for
5
5
  the homepage.
6
6
 
7
7
  Route pages use the same page and section model in
@@ -25,14 +25,14 @@ The Astro content schema validates these top-level fields in page files:
25
25
  [Theme](theme.md) and [Typography](typography.md).
26
26
  - `frame`: optional page-level frame color source. See [Theme](theme.md).
27
27
  - `sections`: required non-empty array. Defines section order, ids,
28
- presentation overrides, and gallery rows.
28
+ presentation overrides, and image rows.
29
29
 
30
30
  Minimal homepage:
31
31
 
32
32
  ```md
33
33
  ---
34
- title: My Gallery
35
- description: A small gallery site.
34
+ title: My Site
35
+ description: A small Norna site.
36
36
  sections:
37
37
  - id: intro
38
38
  ---
@@ -81,9 +81,9 @@ Keep these values aligned:
81
81
  The visible section navigation label comes from the Markdown heading text, not
82
82
  from the frontmatter id.
83
83
 
84
- ## Galleries
84
+ ## Image Rows
85
85
 
86
- Each gallery row can contain a single image:
86
+ Each image row can contain a single image:
87
87
 
88
88
  ```yaml
89
89
  gallery:
@@ -105,7 +105,7 @@ images from `site/routes/<route-folder>/images/<section-id>/`.
105
105
 
106
106
  ## Carousels
107
107
 
108
- A gallery row can contain a carousel instead of a single image:
108
+ An image row can contain a carousel instead of a single image:
109
109
 
110
110
  ```yaml
111
111
  gallery:
@@ -147,7 +147,7 @@ Both `from` and `until` use `YYYY-MM-DD`. Either value may be omitted, but a
147
147
 
148
148
  Hidden sections are omitted from the rendered HTML and sticky navigation. They
149
149
  remain in the page file, and `content:check` still validates their matching
150
- Markdown headings and gallery image references.
150
+ Markdown headings and image references.
151
151
 
152
152
  The current date is evaluated at dev/build time. Set `NORNA_TODAY` to preview
153
153
  or test a specific date:
@@ -187,21 +187,23 @@ npm run norna:content:check
187
187
  ```
188
188
 
189
189
  This checks section order and heading ids, duplicate image names, missing image
190
- files, misplaced referenced images, duplicate gallery references, invalid image
190
+ files, misplaced referenced images, duplicate image references, invalid image
191
191
  references, unreferenced images, undefined inline styles, and common
192
192
  frontmatter indentation and structure mistakes.
193
193
 
194
194
  Frontmatter uses YAML indentation. Use ordinary spaces, not tabs or
195
195
  non-breaking spaces. `content:check` reports a focused error when indentation is
196
196
  invalid, when a key is indented under a line that already has a value, or when a
197
- known nested key such as `gallery` appears at the top level:
197
+ known nested key such as `gallery` or section-specific `typography` appears at
198
+ the top level:
198
199
 
199
200
  ```yaml
200
- typography:
201
- preset: quiet-gallery
202
- overrides:
203
- body:
204
- paragraphSpacing: 0.8em
201
+ presentation:
202
+ typography:
203
+ preset: quiet-gallery
204
+ overrides:
205
+ body:
206
+ paragraphSpacing: 0.8em
205
207
  ```
206
208
 
207
209
  Top-level page frontmatter may contain only `title`, `description`, `slug`,