@janga/norna 0.7.9 → 0.7.10

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 (198) hide show
  1. package/README.md +1 -1
  2. package/docs/README.md +14 -11
  3. package/docs/configuration.md +9 -54
  4. package/docs/content.md +6 -7
  5. package/docs/design/norna-diagram-design.md +2 -0
  6. package/docs/getting-started.md +18 -16
  7. package/docs/routes.md +7 -6
  8. package/docs/site-structure.md +4 -2
  9. package/docs/sitewide-content.md +74 -0
  10. package/docs/theme.md +61 -128
  11. package/docs/typography.md +45 -33
  12. package/examples/001-dog-shelter-single-page/README.md +9 -0
  13. package/examples/001-dog-shelter-single-page/site/config.mjs +27 -0
  14. package/examples/001-dog-shelter-single-page/site/content.md +38 -0
  15. package/examples/001-dog-shelter-single-page/site/images/what-we-do/dog-house.svg +25 -0
  16. package/examples/001-dog-shelter-single-page/site/images/you-can-help/heart.svg +13 -0
  17. package/examples/001-dog-shelter-single-page/site/public/favicon.svg +10 -0
  18. package/examples/001-dog-shelter-single-page/site/public/robots.txt +2 -0
  19. package/examples/001-dog-shelter-single-page/site/sitewide-content.md +6 -0
  20. package/examples/001-dog-shelter-single-page/site/theme.md +25 -0
  21. package/examples/002-dog-shelter-multi-page/README.md +9 -0
  22. package/examples/002-dog-shelter-multi-page/site/config.mjs +27 -0
  23. package/examples/002-dog-shelter-multi-page/site/content.md +12 -0
  24. package/examples/002-dog-shelter-multi-page/site/public/favicon.svg +10 -0
  25. package/examples/002-dog-shelter-multi-page/site/public/robots.txt +2 -0
  26. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rex.svg +19 -0
  27. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/images/dogs/rover.svg +19 -0
  28. package/examples/002-dog-shelter-multi-page/site/routes/010-dogs/route-content.md +30 -0
  29. package/examples/002-dog-shelter-multi-page/site/routes/020-adopt/route-content.md +12 -0
  30. package/examples/002-dog-shelter-multi-page/site/sitewide-content.md +6 -0
  31. package/examples/002-dog-shelter-multi-page/site/theme.md +25 -0
  32. package/examples/dog-gallery/.astro/collections/site.schema.json +776 -0
  33. package/examples/dog-gallery/.astro/collections/theme.schema.json +672 -0
  34. package/examples/dog-gallery/.astro/content-assets.mjs +4 -0
  35. package/examples/dog-gallery/.astro/content-modules.mjs +1 -0
  36. package/examples/dog-gallery/.astro/content.d.ts +175 -0
  37. package/examples/dog-gallery/.astro/data-store.json +1 -0
  38. package/examples/dog-gallery/.astro/dev-local.json +8 -0
  39. package/examples/dog-gallery/.astro/dev.json +13 -0
  40. package/examples/dog-gallery/.astro/dev.log +95 -0
  41. package/examples/dog-gallery/.astro/settings.json +5 -0
  42. package/examples/dog-gallery/.astro/types.d.ts +2 -0
  43. package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +1 -0
  44. package/examples/dog-gallery/dist/_astro/SitePage.DicGh_5N.css +1 -0
  45. package/examples/dog-gallery/dist/dog-care/index.html +15 -0
  46. package/examples/dog-gallery/dist/dog-shelter-logo.svg +14 -0
  47. package/examples/dog-gallery/dist/favicon.svg +7 -0
  48. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
  49. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
  50. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
  51. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
  52. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
  53. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
  54. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
  55. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
  56. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
  57. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
  58. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
  59. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
  60. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
  61. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
  62. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
  63. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
  64. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
  65. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
  66. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
  67. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
  68. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
  69. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
  70. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
  71. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
  72. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
  73. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
  74. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
  75. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
  76. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
  77. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
  78. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
  79. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
  80. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
  81. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
  82. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
  83. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
  84. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
  85. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
  86. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
  87. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
  88. package/examples/dog-gallery/dist/index.html +45 -0
  89. package/examples/dog-gallery/dist/robots.txt +2 -0
  90. package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +7 -7
  91. package/examples/dog-gallery/site/.norna/generated-images.json +8 -8
  92. package/examples/dog-gallery/site/config.mjs +0 -20
  93. package/examples/dog-gallery/site/content.md +4 -5
  94. package/examples/dog-gallery/site/public/logo.svg +14 -0
  95. package/examples/dog-gallery/site/sitewide-content.md +16 -0
  96. package/examples/dog-gallery/site/theme.md +13 -24
  97. package/examples/presentation/README.md +15 -0
  98. package/examples/presentation/site/.norna/generated-images.json +66 -0
  99. package/examples/presentation/site/config.mjs +29 -0
  100. package/examples/presentation/site/content.md +67 -0
  101. package/examples/presentation/site/public/robots.txt +2 -0
  102. package/examples/presentation/site/routes/010-presets/route-content.md +63 -0
  103. package/examples/presentation/site/routes/010-presets/theme.md +4 -0
  104. package/examples/presentation/site/routes/020-media/images/cards/card-carousel.svg +11 -0
  105. package/examples/presentation/site/routes/020-media/images/cards/card-stack.svg +9 -0
  106. package/examples/presentation/site/routes/020-media/images/cards/card-surfaces.svg +8 -0
  107. package/examples/presentation/site/routes/020-media/images/carousel/carousel-one.svg +8 -0
  108. package/examples/presentation/site/routes/020-media/images/carousel/carousel-three.svg +13 -0
  109. package/examples/presentation/site/routes/020-media/images/carousel/carousel-two.svg +8 -0
  110. package/examples/presentation/site/routes/020-media/images/stack/stack-one.svg +8 -0
  111. package/examples/presentation/site/routes/020-media/images/stack/stack-two.svg +9 -0
  112. package/examples/presentation/site/routes/020-media/route-content.md +77 -0
  113. package/examples/presentation/site/routes/020-media/theme.md +4 -0
  114. package/examples/presentation/site/routes/030-surfaces/route-content.md +44 -0
  115. package/examples/presentation/site/routes/030-surfaces/theme.md +7 -0
  116. package/examples/presentation/site/sitewide-content.md +6 -0
  117. package/examples/presentation/site/theme.md +43 -0
  118. package/examples/typography-presets/.astro/collections/routeTheme.schema.json +746 -0
  119. package/examples/typography-presets/.astro/collections/site.schema.json +0 -717
  120. package/examples/typography-presets/.astro/collections/sitewide.schema.json +114 -0
  121. package/examples/typography-presets/.astro/collections/theme.schema.json +161 -59
  122. package/examples/typography-presets/.astro/content.d.ts +8 -0
  123. package/examples/typography-presets/.astro/data-store.json +1 -1
  124. package/examples/typography-presets/.astro/dev-local.json +2 -2
  125. package/examples/typography-presets/.astro/dev.json +2 -2
  126. package/examples/typography-presets/.astro/dev.log +37 -16
  127. package/examples/typography-presets/site/.norna/generated-images.json +76 -76
  128. package/examples/typography-presets/site/config.mjs +0 -13
  129. package/examples/typography-presets/site/content.md +8 -126
  130. package/examples/typography-presets/site/routes/010-quiet-gallery/route-content.md +34 -0
  131. package/examples/typography-presets/site/routes/010-quiet-gallery/theme.md +4 -0
  132. package/examples/typography-presets/site/routes/020-compact-gallery/route-content.md +33 -0
  133. package/examples/typography-presets/site/routes/020-compact-gallery/theme.md +4 -0
  134. package/examples/typography-presets/site/routes/030-text-forward/route-content.md +34 -0
  135. package/examples/typography-presets/site/routes/030-text-forward/theme.md +4 -0
  136. package/examples/typography-presets/site/routes/040-statement/route-content.md +34 -0
  137. package/examples/typography-presets/site/routes/040-statement/theme.md +4 -0
  138. package/examples/typography-presets/site/sitewide-content.md +14 -0
  139. package/examples/typography-presets/site/theme.md +9 -9
  140. package/fixtures/basic/site/config.mjs +0 -13
  141. package/fixtures/basic/site/sitewide-content.md +12 -0
  142. package/fixtures/basic/site/theme.md +2 -2
  143. package/fixtures/content-model-v2/site/content.md +2 -5
  144. package/fixtures/content-model-v2/site/theme.md +1 -3
  145. package/package.json +3 -2
  146. package/scripts/check-config.mjs +22 -1
  147. package/scripts/lib/frontmatter-yaml.mjs +28 -0
  148. package/scripts/lib/logo-assets.mjs +35 -0
  149. package/scripts/lib/norna-markdown-blocks.mjs +166 -0
  150. package/scripts/lib/presentation.mjs +104 -46
  151. package/scripts/lib/project-config.mjs +67 -105
  152. package/scripts/lib/site-content.mjs +26 -118
  153. package/scripts/lib/site-paths.mjs +2 -0
  154. package/scripts/lib/sitewide-config.mjs +34 -0
  155. package/scripts/lib/theme-config.mjs +72 -8
  156. package/scripts/lib/typography.mjs +20 -26
  157. package/scripts/show-typography.mjs +40 -147
  158. package/scripts/sync-content-sections.mjs +19 -17
  159. package/scripts/test-content-check.mjs +59 -27
  160. package/scripts/test-content-model-v2.mjs +154 -0
  161. package/scripts/test-engine-commands.mjs +3 -1
  162. package/scripts/test-package-check.mjs +66 -24
  163. package/scripts/test-temporary-visibility.mjs +19 -2
  164. package/src/components/CardList.astro +5 -2
  165. package/src/components/GalleryGrid.astro +37 -16
  166. package/src/components/SiteBanners.astro +100 -0
  167. package/src/components/SiteNavigation.astro +48 -31
  168. package/src/components/SitePage.astro +55 -13
  169. package/src/components/SiteSection.astro +193 -35
  170. package/src/content.config.ts +78 -48
  171. package/src/layouts/BaseLayout.astro +64 -14
  172. package/src/lib/routeThemes.ts +61 -0
  173. package/src/lib/sectionContent.ts +235 -51
  174. package/src/lib/sitePublicAssets.ts +1 -0
  175. package/src/styles/global.css +282 -93
  176. package/starters/basic/.github/workflows/deploy.yml +1 -1
  177. package/starters/basic/README.md +7 -6
  178. package/starters/basic/site/config.mjs +0 -13
  179. package/starters/basic/site/content.md +1 -1
  180. package/starters/basic/site/sitewide-content.md +14 -0
  181. package/starters/basic/site/theme.md +13 -24
  182. package/starters/project/.github/workflows/deploy.yml +1 -1
  183. package/starters/project/README.md +10 -8
  184. package/starters/project/site/config.mjs +0 -13
  185. package/starters/project/site/sitewide-content.md +14 -0
  186. package/starters/project/site/theme.md +3 -11
  187. /package/examples/typography-presets/site/{images → routes/010-quiet-gallery/images}/quiet-gallery/puppy-portrait.jpg +0 -0
  188. /package/examples/typography-presets/site/{images → routes/010-quiet-gallery/images}/quiet-gallery/shepherd-portrait.jpg +0 -0
  189. /package/examples/typography-presets/site/{images → routes/010-quiet-gallery/images}/quiet-gallery/white-puppy.jpg +0 -0
  190. /package/examples/typography-presets/site/{images → routes/020-compact-gallery/images}/compact-gallery/black-schnauzer.jpg +0 -0
  191. /package/examples/typography-presets/site/{images → routes/020-compact-gallery/images}/compact-gallery/retriever-portrait.jpg +0 -0
  192. /package/examples/typography-presets/site/{images → routes/020-compact-gallery/images}/compact-gallery/schnauzer-portrait.jpg +0 -0
  193. /package/examples/typography-presets/site/{images → routes/030-text-forward/images}/text-forward/boxer-portrait.jpg +0 -0
  194. /package/examples/typography-presets/site/{images → routes/030-text-forward/images}/text-forward/grass-puppy.jpg +0 -0
  195. /package/examples/typography-presets/site/{images → routes/030-text-forward/images}/text-forward/grey-street-dog.jpg +0 -0
  196. /package/examples/typography-presets/site/{images → routes/040-statement/images}/statement/black-pedigree.jpg +0 -0
  197. /package/examples/typography-presets/site/{images → routes/040-statement/images}/statement/sheepdog-grass.jpg +0 -0
  198. /package/examples/typography-presets/site/{images → routes/040-statement/images}/statement/sheepdog-wide.jpg +0 -0
@@ -0,0 +1,114 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "banners": {
6
+ "default": [],
7
+ "type": "array",
8
+ "items": {
9
+ "type": "object",
10
+ "properties": {
11
+ "id": {
12
+ "type": "string",
13
+ "pattern": "^[a-z0-9-]+$"
14
+ },
15
+ "tone": {
16
+ "default": "warning",
17
+ "type": "string",
18
+ "enum": [
19
+ "warning"
20
+ ]
21
+ },
22
+ "visible": {
23
+ "type": "object",
24
+ "properties": {
25
+ "from": {
26
+ "type": "string",
27
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
28
+ },
29
+ "until": {
30
+ "type": "string",
31
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
32
+ }
33
+ },
34
+ "additionalProperties": false
35
+ },
36
+ "title": {
37
+ "type": "string",
38
+ "minLength": 1
39
+ },
40
+ "text": {
41
+ "type": "string",
42
+ "minLength": 1
43
+ }
44
+ },
45
+ "required": [
46
+ "id",
47
+ "title",
48
+ "text"
49
+ ],
50
+ "additionalProperties": false
51
+ }
52
+ },
53
+ "footer": {
54
+ "type": "object",
55
+ "properties": {
56
+ "copyrightMessage": {
57
+ "type": "string",
58
+ "minLength": 1
59
+ },
60
+ "buildInfo": {
61
+ "type": "object",
62
+ "properties": {
63
+ "enabled": {
64
+ "default": true,
65
+ "type": "boolean"
66
+ },
67
+ "text": {
68
+ "type": "string",
69
+ "minLength": 1
70
+ },
71
+ "dateTimeFormat": {
72
+ "type": "object",
73
+ "properties": {
74
+ "locale": {
75
+ "type": "string",
76
+ "minLength": 1
77
+ },
78
+ "timeZone": {
79
+ "type": "string",
80
+ "minLength": 1
81
+ },
82
+ "dateStyle": {
83
+ "type": "string",
84
+ "minLength": 1
85
+ },
86
+ "timeStyle": {
87
+ "type": "string",
88
+ "minLength": 1
89
+ }
90
+ },
91
+ "required": [
92
+ "locale",
93
+ "timeZone",
94
+ "dateStyle",
95
+ "timeStyle"
96
+ ],
97
+ "additionalProperties": false
98
+ }
99
+ },
100
+ "required": [
101
+ "text",
102
+ "dateTimeFormat"
103
+ ],
104
+ "additionalProperties": false
105
+ }
106
+ },
107
+ "additionalProperties": false
108
+ },
109
+ "$schema": {
110
+ "type": "string"
111
+ }
112
+ },
113
+ "additionalProperties": false
114
+ }
@@ -2,16 +2,6 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "type": "object",
4
4
  "properties": {
5
- "navigation": {
6
- "type": "object",
7
- "properties": {
8
- "brand": {
9
- "type": "string",
10
- "minLength": 1
11
- }
12
- },
13
- "additionalProperties": false
14
- },
15
5
  "layout": {
16
6
  "type": "object",
17
7
  "properties": {
@@ -56,7 +46,7 @@
56
46
  "spacing": {
57
47
  "type": "object",
58
48
  "properties": {
59
- "bodyToImages": {
49
+ "blockGap": {
60
50
  "anyOf": [
61
51
  {
62
52
  "type": "string",
@@ -134,6 +124,32 @@
134
124
  }
135
125
  ]
136
126
  },
127
+ "headingToBlock": {
128
+ "anyOf": [
129
+ {
130
+ "type": "string",
131
+ "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*\\))$"
132
+ },
133
+ {
134
+ "type": "object",
135
+ "properties": {
136
+ "desktop": {
137
+ "type": "string",
138
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$"
139
+ },
140
+ "mobile": {
141
+ "type": "string",
142
+ "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*\\))$"
143
+ }
144
+ },
145
+ "required": [
146
+ "desktop",
147
+ "mobile"
148
+ ],
149
+ "additionalProperties": false
150
+ }
151
+ ]
152
+ },
137
153
  "imageGap": {
138
154
  "anyOf": [
139
155
  {
@@ -329,6 +345,26 @@
329
345
  "minimum": 1,
330
346
  "maximum": 3
331
347
  },
348
+ "weight": {
349
+ "anyOf": [
350
+ {
351
+ "type": "number",
352
+ "const": 400
353
+ },
354
+ {
355
+ "type": "number",
356
+ "const": 500
357
+ },
358
+ {
359
+ "type": "number",
360
+ "const": 600
361
+ },
362
+ {
363
+ "type": "number",
364
+ "const": 700
365
+ }
366
+ ]
367
+ },
332
368
  "spacingBefore": {
333
369
  "type": "string",
334
370
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
@@ -379,6 +415,26 @@
379
415
  "minimum": 1,
380
416
  "maximum": 3
381
417
  },
418
+ "weight": {
419
+ "anyOf": [
420
+ {
421
+ "type": "number",
422
+ "const": 400
423
+ },
424
+ {
425
+ "type": "number",
426
+ "const": 500
427
+ },
428
+ {
429
+ "type": "number",
430
+ "const": 600
431
+ },
432
+ {
433
+ "type": "number",
434
+ "const": 700
435
+ }
436
+ ]
437
+ },
382
438
  "spacingBefore": {
383
439
  "type": "string",
384
440
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
@@ -429,6 +485,26 @@
429
485
  "minimum": 1,
430
486
  "maximum": 3
431
487
  },
488
+ "weight": {
489
+ "anyOf": [
490
+ {
491
+ "type": "number",
492
+ "const": 400
493
+ },
494
+ {
495
+ "type": "number",
496
+ "const": 500
497
+ },
498
+ {
499
+ "type": "number",
500
+ "const": 600
501
+ },
502
+ {
503
+ "type": "number",
504
+ "const": 700
505
+ }
506
+ ]
507
+ },
432
508
  "spacingBefore": {
433
509
  "type": "string",
434
510
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
@@ -479,6 +555,26 @@
479
555
  "minimum": 1,
480
556
  "maximum": 3
481
557
  },
558
+ "weight": {
559
+ "anyOf": [
560
+ {
561
+ "type": "number",
562
+ "const": 400
563
+ },
564
+ {
565
+ "type": "number",
566
+ "const": 500
567
+ },
568
+ {
569
+ "type": "number",
570
+ "const": 600
571
+ },
572
+ {
573
+ "type": "number",
574
+ "const": 700
575
+ }
576
+ ]
577
+ },
482
578
  "spacingBefore": {
483
579
  "type": "string",
484
580
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
@@ -532,6 +628,14 @@
532
628
  "minimum": 1,
533
629
  "maximum": 3
534
630
  },
631
+ "width": {
632
+ "type": "string",
633
+ "enum": [
634
+ "narrow",
635
+ "normal",
636
+ "wide"
637
+ ]
638
+ },
535
639
  "paragraphSpacing": {
536
640
  "type": "string",
537
641
  "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
@@ -594,68 +698,66 @@
594
698
  "presentation": {
595
699
  "type": "object",
596
700
  "properties": {
597
- "backgroundColor": {
598
- "type": "string",
599
- "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
600
- },
601
- "textColor": {
701
+ "palette": {
602
702
  "type": "string",
603
- "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
703
+ "enum": [
704
+ "dark",
705
+ "light",
706
+ "paper"
707
+ ]
604
708
  },
605
- "inlineStyles": {
709
+ "sectionSurfaces": {
606
710
  "type": "object",
607
- "propertyNames": {
608
- "type": "string",
609
- "pattern": "^[a-z][a-z0-9-]*$"
610
- },
611
- "additionalProperties": {
612
- "type": "object",
613
- "properties": {
614
- "color": {
711
+ "properties": {
712
+ "mode": {
713
+ "type": "string",
714
+ "enum": [
715
+ "none",
716
+ "cycle"
717
+ ]
718
+ },
719
+ "sequence": {
720
+ "minItems": 1,
721
+ "maxItems": 3,
722
+ "type": "array",
723
+ "items": {
615
724
  "type": "string",
616
- "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
725
+ "enum": [
726
+ "base",
727
+ "soft",
728
+ "emphasis"
729
+ ]
617
730
  }
618
- },
619
- "required": [
620
- "color"
621
- ],
622
- "additionalProperties": false
623
- }
731
+ }
732
+ },
733
+ "required": [
734
+ "mode"
735
+ ],
736
+ "additionalProperties": false
624
737
  }
625
738
  },
626
739
  "additionalProperties": false
627
740
  },
628
- "frame": {
741
+ "navigation": {
629
742
  "type": "object",
630
743
  "properties": {
631
- "colors": {
632
- "anyOf": [
633
- {
744
+ "brand": {
745
+ "type": "string",
746
+ "minLength": 1
747
+ },
748
+ "logo": {
749
+ "type": "object",
750
+ "properties": {
751
+ "alt": {
634
752
  "type": "string",
635
- "enum": [
636
- "theme",
637
- "presentation"
638
- ]
753
+ "minLength": 1
639
754
  },
640
- {
641
- "type": "object",
642
- "properties": {
643
- "backgroundColor": {
644
- "type": "string",
645
- "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
646
- },
647
- "textColor": {
648
- "type": "string",
649
- "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
650
- }
651
- },
652
- "required": [
653
- "backgroundColor",
654
- "textColor"
655
- ],
656
- "additionalProperties": false
755
+ "height": {
756
+ "type": "string",
757
+ "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*\\))$"
657
758
  }
658
- ]
759
+ },
760
+ "additionalProperties": false
659
761
  }
660
762
  },
661
763
  "additionalProperties": false
@@ -132,6 +132,14 @@ declare module 'astro:content' {
132
132
  rendered?: RenderedContent;
133
133
  filePath?: string;
134
134
  }>;
135
+ "sitewide": Record<string, {
136
+ id: string;
137
+ body?: string;
138
+ collection: "sitewide";
139
+ data: InferEntrySchema<"sitewide">;
140
+ rendered?: RenderedContent;
141
+ filePath?: string;
142
+ }>;
135
143
  "theme": Record<string, {
136
144
  id: string;
137
145
  body?: string;
@@ -1 +1 @@
1
- [["Map",1,2,9,10,86,87],"meta::meta",["Map",3,4,5,6,7,8],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":\"jsx\",\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":\"0.0.0.0\",\"port\":4321,\"allowedHosts\":[\"0.0.0.0\",\"0.0.0.0\",\"0.0.0.0\",\"0.0.0.0\"]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"dangerouslyProcessSVG\":false,\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"processor\":{\"name\":\"satteri\",\"options\":{\"mdastPlugins\":[],\"hastPlugins\":[],\"features\":{}}}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"fetchFile\":\"fetch\",\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"collectionStorage\":\"single-file\"},\"legacy\":{\"collectionsBackwardsCompat\":false}}","astro-version","7.1.3","content-config-digest","ccc39d7fb56a7431","site",["Map",11,12],"site-content",{"id":11,"data":13,"body":35,"filePath":36,"digest":37,"rendered":38},{"title":14,"description":15,"navigation":16,"sections":18},"Typography Presets","A Norna example page showing every built-in typography preset.",{"label":17},"Presets",{"quiet-gallery":19,"compact-gallery":23,"text-forward":27,"statement":31},{"presentation":20},{"typography":21},{"preset":22},"quiet-gallery",{"presentation":24},{"typography":25},{"preset":26},"compact-gallery",{"presentation":28},{"typography":29},{"preset":30},"text-forward",{"presentation":32},{"typography":33},{"preset":34},"statement","## Quiet Gallery {#quiet-gallery}\n\nThis section uses the `quiet-gallery` preset. Its purpose is to keep text\nrestrained so images can carry much of the page without the typography\ncompeting for attention.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a\nante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis\ninterdum. Donec ullamcorper nulla non metus auctor fringilla.\n\n### Reading rhythm\n\nCurabitur blandit tempus porttitor. Praesent commodo cursus magna, vel\nscelerisque nisl consectetur et. Vestibulum id ligula porta felis euismod\nsemper.\n\n```norna-image-stack\n- image: puppy-portrait.jpg\n alt: A puppy sitting outdoors and looking toward the camera.\n caption: Puppy portrait. Photo by Bicanski, CC0, via Pixnio.\n- image: shepherd-portrait.jpg\n alt: A shepherd dog standing outdoors and looking toward the camera.\n caption: Shepherd dog portrait. Photo by Bicanski, CC0, via Pixnio.\n- image: white-puppy.jpg\n alt: A white puppy outdoors in winter.\n caption: White puppy outdoors. Photo by Bicanski, CC0, via Pixnio.\n```\n\n## Compact Gallery {#compact-gallery}\n\nThis section uses the `compact-gallery` preset. Its purpose is to make denser\nimage-led pages easier to scan when a site contains many sections, many images\nor short information blocks.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lacinia\nbibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod.\n\n### Dense sections\n\nNullam id dolor id nibh ultricies vehicula ut id elit. Fusce dapibus, tellus ac\ncursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit\namet risus.\n\n```norna-image-stack\n- image: schnauzer-portrait.jpg\n alt: A schnauzer-type dog sitting outdoors.\n caption: Schnauzer portrait. Photo by Bicanski, CC0, via Pixnio.\n- image: black-schnauzer.jpg\n alt: A black schnauzer-type dog standing on grass.\n caption: Black hunting dog portrait. Photo by Bicanski, CC0, via Pixnio.\n- image: retriever-portrait.jpg\n alt: A retriever-type dog sitting outdoors.\n caption: Retriever portrait. Photo by Bicanski, CC0, via Pixnio.\n```\n\n## Text Forward {#text-forward}\n\nThis section uses the `text-forward` preset. Its purpose is to give longer\nexplanatory text more presence while still supporting image captions and\nimage-led sections.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere\nconsectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.\nVivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.\n\n### Longer explanations\n\nMorbi leo risus, porta ac consectetur ac, vestibulum at eros. Donec sed odio\ndui. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget\nlacinia odio sem nec elit.\n\n```norna-image-stack\n- image: grass-puppy.jpg\n alt: A puppy standing in green grass.\n caption: Puppy in grass. Photo by Bicanski, CC0, via Pixnio.\n- image: grey-street-dog.jpg\n alt: A grey dog standing on a paved street.\n caption: Grey dog on pavement. Photo by Bicanski, CC0, via Pixnio.\n- image: boxer-portrait.jpg\n alt: A brown boxer-type dog looking at the camera.\n caption: Brown dog portrait. Photo by Bicanski, CC0, via Pixnio.\n```\n\n## Statement {#statement}\n\nThis section uses the `statement` preset. Its purpose is to make short,\ndeclarative sections feel more direct and programmatic. It is intentionally\nstronger than the other presets and should usually be used sparingly.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id elit non mi\nporta gravida at eget metus. Integer posuere erat a ante venenatis dapibus\nposuere velit aliquet.\n\n### Short emphasis\n\nPraesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean\nlacinia bibendum nulla sed consectetur. Maecenas sed diam eget risus varius\nblandit sit amet non magna.\n\n```norna-image-stack\n- image: sheepdog-grass.jpg\n alt: A sheepdog puppy sitting in green grass.\n caption: Sheepdog puppy in grass. Photo by Bicanski, CC0, via Pixnio.\n- image: sheepdog-wide.jpg\n alt: A sheepdog puppy lying outdoors.\n caption: Sheepdog puppy outdoors. Photo by Bicanski, CC0, via Pixnio.\n- image: black-pedigree.jpg\n alt: A black dog standing in grass.\n caption: Black pedigree dog portrait. Photo by Bicanski, CC0, via Pixnio.\n```","site/content.md","a68e5ee7be3be768",{"html":39,"metadata":40},"\u003Ch2 id=\"quiet-gallery-quiet-gallery\">Quiet Gallery {#quiet-gallery}\u003C/h2>\n\u003Cp>This section uses the \u003Ccode>quiet-gallery\u003C/code> preset. Its purpose is to keep text\nrestrained so images can carry much of the page without the typography\ncompeting for attention.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a\nante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis\ninterdum. Donec ullamcorper nulla non metus auctor fringilla.\u003C/p>\n\u003Ch3 id=\"reading-rhythm\">Reading rhythm\u003C/h3>\n\u003Cp>Curabitur blandit tempus porttitor. Praesent commodo cursus magna, vel\nscelerisque nisl consectetur et. Vestibulum id ligula porta felis euismod\nsemper.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>- image: puppy-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A puppy sitting outdoors and looking toward the camera.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Puppy portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: shepherd-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A shepherd dog standing outdoors and looking toward the camera.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Shepherd dog portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: white-puppy.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A white puppy outdoors in winter.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: White puppy outdoors. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch2 id=\"compact-gallery-compact-gallery\">Compact Gallery {#compact-gallery}\u003C/h2>\n\u003Cp>This section uses the \u003Ccode>compact-gallery\u003C/code> preset. Its purpose is to make denser\nimage-led pages easier to scan when a site contains many sections, many images\nor short information blocks.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lacinia\nbibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod.\u003C/p>\n\u003Ch3 id=\"dense-sections\">Dense sections\u003C/h3>\n\u003Cp>Nullam id dolor id nibh ultricies vehicula ut id elit. Fusce dapibus, tellus ac\ncursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit\namet risus.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>- image: schnauzer-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A schnauzer-type dog sitting outdoors.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Schnauzer portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: black-schnauzer.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A black schnauzer-type dog standing on grass.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Black hunting dog portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: retriever-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A retriever-type dog sitting outdoors.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Retriever portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch2 id=\"text-forward-text-forward\">Text Forward {#text-forward}\u003C/h2>\n\u003Cp>This section uses the \u003Ccode>text-forward\u003C/code> preset. Its purpose is to give longer\nexplanatory text more presence while still supporting image captions and\nimage-led sections.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere\nconsectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.\nVivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.\u003C/p>\n\u003Ch3 id=\"longer-explanations\">Longer explanations\u003C/h3>\n\u003Cp>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Donec sed odio\ndui. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget\nlacinia odio sem nec elit.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>- image: grass-puppy.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A puppy standing in green grass.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Puppy in grass. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: grey-street-dog.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A grey dog standing on a paved street.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Grey dog on pavement. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: boxer-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A brown boxer-type dog looking at the camera.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Brown dog portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch2 id=\"statement-statement\">Statement {#statement}\u003C/h2>\n\u003Cp>This section uses the \u003Ccode>statement\u003C/code> preset. Its purpose is to make short,\ndeclarative sections feel more direct and programmatic. It is intentionally\nstronger than the other presets and should usually be used sparingly.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id elit non mi\nporta gravida at eget metus. Integer posuere erat a ante venenatis dapibus\nposuere velit aliquet.\u003C/p>\n\u003Ch3 id=\"short-emphasis\">Short emphasis\u003C/h3>\n\u003Cp>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean\nlacinia bibendum nulla sed consectetur. Maecenas sed diam eget risus varius\nblandit sit amet non magna.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>- image: sheepdog-grass.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A sheepdog puppy sitting in green grass.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Sheepdog puppy in grass. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: sheepdog-wide.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A sheepdog puppy lying outdoors.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Sheepdog puppy outdoors. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: black-pedigree.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A black dog standing in grass.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Black pedigree dog portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n",{"headings":41,"localImagePaths":68,"remoteImagePaths":69,"frontmatter":70,"imagePaths":85},[42,46,50,53,56,59,62,65],{"depth":43,"slug":44,"text":45},2,"quiet-gallery-quiet-gallery","Quiet Gallery {#quiet-gallery}",{"depth":47,"slug":48,"text":49},3,"reading-rhythm","Reading rhythm",{"depth":43,"slug":51,"text":52},"compact-gallery-compact-gallery","Compact Gallery {#compact-gallery}",{"depth":47,"slug":54,"text":55},"dense-sections","Dense sections",{"depth":43,"slug":57,"text":58},"text-forward-text-forward","Text Forward {#text-forward}",{"depth":47,"slug":60,"text":61},"longer-explanations","Longer explanations",{"depth":43,"slug":63,"text":64},"statement-statement","Statement {#statement}",{"depth":47,"slug":66,"text":67},"short-emphasis","Short emphasis",[],[],{"title":14,"description":15,"navigation":71,"sections":72},{"label":17},{"quiet-gallery":73,"compact-gallery":76,"text-forward":79,"statement":82},{"presentation":74},{"typography":75},{"preset":22},{"presentation":77},{"typography":78},{"preset":26},{"presentation":80},{"typography":81},{"preset":30},{"presentation":83},{"typography":84},{"preset":34},[],"theme",["Map",88,89],"site-theme",{"id":88,"data":90,"filePath":124,"digest":125,"rendered":126},{"navigation":91,"layout":92,"gallery":110,"typography":117,"presentation":119,"frame":122},{"brand":14},{"density":93,"pageWidth":94,"gutter":95,"spacing":98},"normal","1320px",{"desktop":96,"mobile":97},"clamp(1.25rem, 4vw, 3rem)","1rem",{"bodyToImages":99,"finalSectionBottom":101,"firstSectionTop":104,"imageGap":106,"sectionGap":109},{"desktop":100,"mobile":97},"1.25rem",{"desktop":102,"mobile":103},"clamp(2rem, 4vw, 3.5rem)","2rem",{"desktop":105,"mobile":97},"clamp(1.5rem, 3vw, 2.5rem)",{"desktop":107,"mobile":108},"clamp(1.25rem, 3vw, 2.25rem)","1.5rem",{"desktop":102,"mobile":103},{"width":111,"maxAvailableWidthPercent":112,"maxAvailableHeightPercent":114},"70vw",{"desktop":113,"mobile":113},100,{"desktop":115,"mobile":116},72,68,{"fontFamily":118,"preset":22,"rhythm":93},"Arial, 'Helvetica Neue', Helvetica, sans-serif",{"backgroundColor":120,"textColor":121},"#f8f5ee","#17201d",{"colors":123},"presentation","site/theme.md","0309eb6531ccc823",{"html":127,"metadata":128},"",{"headings":129,"localImagePaths":130,"remoteImagePaths":131,"frontmatter":132,"imagePaths":148},[],[],[],{"navigation":133,"layout":134,"gallery":142,"typography":145,"presentation":146,"frame":147},{"brand":14},{"density":93,"pageWidth":94,"gutter":135,"spacing":136},{"desktop":96,"mobile":97},{"firstSectionTop":137,"sectionGap":138,"finalSectionBottom":139,"bodyToImages":140,"imageGap":141},{"desktop":105,"mobile":97},{"desktop":102,"mobile":103},{"desktop":102,"mobile":103},{"desktop":100,"mobile":97},{"desktop":107,"mobile":108},{"width":111,"maxAvailableWidthPercent":143,"maxAvailableHeightPercent":144},{"desktop":113,"mobile":113},{"desktop":115,"mobile":116},{"fontFamily":118,"preset":22,"rhythm":93},{"backgroundColor":120,"textColor":121},{"colors":123},[]]
1
+ [["Map",1,2,9,10,136,137,164,165],"meta::meta",["Map",3,4,5,6,7,8],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":\"jsx\",\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":\"0.0.0.0\",\"port\":4321,\"allowedHosts\":[\"0.0.0.0\",\"0.0.0.0\",\"0.0.0.0\",\"0.0.0.0\"]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"dangerouslyProcessSVG\":false,\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"processor\":{\"name\":\"satteri\",\"options\":{\"mdastPlugins\":[],\"hastPlugins\":[],\"features\":{}}}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"fetchFile\":\"fetch\",\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"collectionStorage\":\"single-file\"},\"legacy\":{\"collectionsBackwardsCompat\":false}}","astro-version","7.1.3","content-config-digest","dc925ef2224eac7b","site",["Map",11,12,35,36,61,62,86,87,111,112],"site-content",{"id":11,"data":13,"body":19,"filePath":20,"digest":21,"rendered":22},{"title":14,"description":15,"navigation":16,"sections":18},"Typography Presets","Compare Norna's built-in typography presets across separate routes.",{"label":17},"Presets",{},"## Typography presets {#typography-presets}\n\nEach preset belongs to a complete route theme. This keeps one page visually\nconsistent while making the differences easy to compare:\n\n* [Quiet Gallery](/quiet-gallery/)\n* [Compact Gallery](/compact-gallery/)\n* [Text Forward](/text-forward/)\n* [Statement](/statement/)","site/content.md","0dcfe96b793f3f74",{"html":23,"metadata":24},"\u003Ch2 id=\"typography-presets-typography-presets\">Typography presets {#typography-presets}\u003C/h2>\n\u003Cp>Each preset belongs to a complete route theme. This keeps one page visually\nconsistent while making the differences easy to compare:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ca href=\"/quiet-gallery/\">Quiet Gallery\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/compact-gallery/\">Compact Gallery\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/text-forward/\">Text Forward\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/statement/\">Statement\u003C/a>\u003C/li>\n\u003C/ul>\n",{"headings":25,"localImagePaths":30,"remoteImagePaths":31,"frontmatter":32,"imagePaths":34},[26],{"depth":27,"slug":28,"text":29},2,"typography-presets-typography-presets","Typography presets {#typography-presets}",[],[],{"title":14,"description":15,"navigation":33},{"label":17},[],"site-route-010-quiet-gallery",{"id":35,"data":37,"body":42,"filePath":43,"digest":44,"rendered":45},{"title":38,"description":39,"navigation":40,"sections":41},"Quiet Gallery","A restrained typography preset for image-led pages.",{"label":38},{},"## Quiet Gallery {#quiet-gallery}\n\nThis route uses the `quiet-gallery` preset. Its purpose is to keep text\nrestrained so images can carry much of the page without the typography\ncompeting for attention.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a\nante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis\ninterdum. Donec ullamcorper nulla non metus auctor fringilla.\n\n### Reading rhythm\n\nCurabitur blandit tempus porttitor. Praesent commodo cursus magna, vel\nscelerisque nisl consectetur et. Vestibulum id ligula porta felis euismod\nsemper.\n\n```norna-image-stack\n- image: puppy-portrait.jpg\n alt: A puppy sitting outdoors and looking toward the camera.\n caption: Puppy portrait. Photo by Bicanski, CC0, via Pixnio.\n- image: shepherd-portrait.jpg\n alt: A shepherd dog standing outdoors and looking toward the camera.\n caption: Shepherd dog portrait. Photo by Bicanski, CC0, via Pixnio.\n- image: white-puppy.jpg\n alt: A white puppy outdoors in winter.\n caption: White puppy outdoors. Photo by Bicanski, CC0, via Pixnio.\n```","site/routes/010-quiet-gallery/route-content.md","74389d7237b9a4c0",{"html":46,"metadata":47},"\u003Ch2 id=\"quiet-gallery-quiet-gallery\">Quiet Gallery {#quiet-gallery}\u003C/h2>\n\u003Cp>This route uses the \u003Ccode>quiet-gallery\u003C/code> preset. Its purpose is to keep text\nrestrained so images can carry much of the page without the typography\ncompeting for attention.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a\nante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis\ninterdum. Donec ullamcorper nulla non metus auctor fringilla.\u003C/p>\n\u003Ch3 id=\"reading-rhythm\">Reading rhythm\u003C/h3>\n\u003Cp>Curabitur blandit tempus porttitor. Praesent commodo cursus magna, vel\nscelerisque nisl consectetur et. Vestibulum id ligula porta felis euismod\nsemper.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>- image: puppy-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A puppy sitting outdoors and looking toward the camera.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Puppy portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: shepherd-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A shepherd dog standing outdoors and looking toward the camera.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Shepherd dog portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: white-puppy.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A white puppy outdoors in winter.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: White puppy outdoors. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n",{"headings":48,"localImagePaths":56,"remoteImagePaths":57,"frontmatter":58,"imagePaths":60},[49,52],{"depth":27,"slug":50,"text":51},"quiet-gallery-quiet-gallery","Quiet Gallery {#quiet-gallery}",{"depth":53,"slug":54,"text":55},3,"reading-rhythm","Reading rhythm",[],[],{"title":38,"description":39,"navigation":59},{"label":38},[],"site-route-020-compact-gallery",{"id":61,"data":63,"body":68,"filePath":69,"digest":70,"rendered":71},{"title":64,"description":65,"navigation":66,"sections":67},"Compact Gallery","A compact typography preset for dense image-led pages.",{"label":64},{},"## Compact Gallery {#compact-gallery}\n\nThis route uses the `compact-gallery` preset. Its purpose is to make denser\nimage-led pages easier to scan when a site contains many sections, many images\nor short information blocks.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lacinia\nbibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod.\n\n### Dense sections\n\nNullam id dolor id nibh ultricies vehicula ut id elit. Fusce dapibus, tellus ac\ncursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit\namet risus.\n\n```norna-image-stack\n- image: schnauzer-portrait.jpg\n alt: A schnauzer-type dog sitting outdoors.\n caption: Schnauzer portrait. Photo by Bicanski, CC0, via Pixnio.\n- image: black-schnauzer.jpg\n alt: A black schnauzer-type dog standing on grass.\n caption: Black hunting dog portrait. Photo by Bicanski, CC0, via Pixnio.\n- image: retriever-portrait.jpg\n alt: A retriever-type dog sitting outdoors.\n caption: Retriever portrait. Photo by Bicanski, CC0, via Pixnio.\n```","site/routes/020-compact-gallery/route-content.md","30ac7f3a4acbc632",{"html":72,"metadata":73},"\u003Ch2 id=\"compact-gallery-compact-gallery\">Compact Gallery {#compact-gallery}\u003C/h2>\n\u003Cp>This route uses the \u003Ccode>compact-gallery\u003C/code> preset. Its purpose is to make denser\nimage-led pages easier to scan when a site contains many sections, many images\nor short information blocks.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lacinia\nbibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod.\u003C/p>\n\u003Ch3 id=\"dense-sections\">Dense sections\u003C/h3>\n\u003Cp>Nullam id dolor id nibh ultricies vehicula ut id elit. Fusce dapibus, tellus ac\ncursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit\namet risus.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>- image: schnauzer-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A schnauzer-type dog sitting outdoors.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Schnauzer portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: black-schnauzer.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A black schnauzer-type dog standing on grass.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Black hunting dog portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: retriever-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A retriever-type dog sitting outdoors.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Retriever portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n",{"headings":74,"localImagePaths":81,"remoteImagePaths":82,"frontmatter":83,"imagePaths":85},[75,78],{"depth":27,"slug":76,"text":77},"compact-gallery-compact-gallery","Compact Gallery {#compact-gallery}",{"depth":53,"slug":79,"text":80},"dense-sections","Dense sections",[],[],{"title":64,"description":65,"navigation":84},{"label":64},[],"site-route-030-text-forward",{"id":86,"data":88,"body":93,"filePath":94,"digest":95,"rendered":96},{"title":89,"description":90,"navigation":91,"sections":92},"Text Forward","A typography preset for explanatory writing.",{"label":89},{},"## Text Forward {#text-forward}\n\nThis route uses the `text-forward` preset. Its purpose is to give longer\nexplanatory text more presence while still supporting image captions and\nimage-led sections.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere\nconsectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.\nVivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.\n\n### Longer explanations\n\nMorbi leo risus, porta ac consectetur ac, vestibulum at eros. Donec sed odio\ndui. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget\nlacinia odio sem nec elit.\n\n```norna-image-stack\n- image: grass-puppy.jpg\n alt: A puppy standing in green grass.\n caption: Puppy in grass. Photo by Bicanski, CC0, via Pixnio.\n- image: grey-street-dog.jpg\n alt: A grey dog standing on a paved street.\n caption: Grey dog on pavement. Photo by Bicanski, CC0, via Pixnio.\n- image: boxer-portrait.jpg\n alt: A brown boxer-type dog looking at the camera.\n caption: Brown dog portrait. Photo by Bicanski, CC0, via Pixnio.\n```","site/routes/030-text-forward/route-content.md","e4b0947da73ac83b",{"html":97,"metadata":98},"\u003Ch2 id=\"text-forward-text-forward\">Text Forward {#text-forward}\u003C/h2>\n\u003Cp>This route uses the \u003Ccode>text-forward\u003C/code> preset. Its purpose is to give longer\nexplanatory text more presence while still supporting image captions and\nimage-led sections.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere\nconsectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.\nVivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.\u003C/p>\n\u003Ch3 id=\"longer-explanations\">Longer explanations\u003C/h3>\n\u003Cp>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Donec sed odio\ndui. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget\nlacinia odio sem nec elit.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>- image: grass-puppy.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A puppy standing in green grass.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Puppy in grass. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: grey-street-dog.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A grey dog standing on a paved street.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Grey dog on pavement. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: boxer-portrait.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A brown boxer-type dog looking at the camera.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Brown dog portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n",{"headings":99,"localImagePaths":106,"remoteImagePaths":107,"frontmatter":108,"imagePaths":110},[100,103],{"depth":27,"slug":101,"text":102},"text-forward-text-forward","Text Forward {#text-forward}",{"depth":53,"slug":104,"text":105},"longer-explanations","Longer explanations",[],[],{"title":89,"description":90,"navigation":109},{"label":89},[],"site-route-040-statement",{"id":111,"data":113,"body":118,"filePath":119,"digest":120,"rendered":121},{"title":114,"description":115,"navigation":116,"sections":117},"Statement","A stronger typography preset for short declarative content.",{"label":114},{},"## Statement {#statement}\n\nThis route uses the `statement` preset. Its purpose is to make short,\ndeclarative sections feel more direct and programmatic. It is intentionally\nstronger than the other presets and should usually be used sparingly.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id elit non mi\nporta gravida at eget metus. Integer posuere erat a ante venenatis dapibus\nposuere velit aliquet.\n\n### Short emphasis\n\nPraesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean\nlacinia bibendum nulla sed consectetur. Maecenas sed diam eget risus varius\nblandit sit amet non magna.\n\n```norna-image-stack\n- image: sheepdog-grass.jpg\n alt: A sheepdog puppy sitting in green grass.\n caption: Sheepdog puppy in grass. Photo by Bicanski, CC0, via Pixnio.\n- image: sheepdog-wide.jpg\n alt: A sheepdog puppy lying outdoors.\n caption: Sheepdog puppy outdoors. Photo by Bicanski, CC0, via Pixnio.\n- image: black-pedigree.jpg\n alt: A black dog standing in grass.\n caption: Black pedigree dog portrait. Photo by Bicanski, CC0, via Pixnio.\n```","site/routes/040-statement/route-content.md","216d2020555c7c45",{"html":122,"metadata":123},"\u003Ch2 id=\"statement-statement\">Statement {#statement}\u003C/h2>\n\u003Cp>This route uses the \u003Ccode>statement\u003C/code> preset. Its purpose is to make short,\ndeclarative sections feel more direct and programmatic. It is intentionally\nstronger than the other presets and should usually be used sparingly.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id elit non mi\nporta gravida at eget metus. Integer posuere erat a ante venenatis dapibus\nposuere velit aliquet.\u003C/p>\n\u003Ch3 id=\"short-emphasis\">Short emphasis\u003C/h3>\n\u003Cp>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean\nlacinia bibendum nulla sed consectetur. Maecenas sed diam eget risus varius\nblandit sit amet non magna.\u003C/p>\n\u003Cpre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"plaintext\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>- image: sheepdog-grass.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A sheepdog puppy sitting in green grass.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Sheepdog puppy in grass. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: sheepdog-wide.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A sheepdog puppy lying outdoors.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Sheepdog puppy outdoors. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan>- image: black-pedigree.jpg\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> alt: A black dog standing in grass.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan> caption: Black pedigree dog portrait. Photo by Bicanski, CC0, via Pixnio.\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n",{"headings":124,"localImagePaths":131,"remoteImagePaths":132,"frontmatter":133,"imagePaths":135},[125,128],{"depth":27,"slug":126,"text":127},"statement-statement","Statement {#statement}",{"depth":53,"slug":129,"text":130},"short-emphasis","Short emphasis",[],[],{"title":114,"description":115,"navigation":134},{"label":114},[],"sitewide",["Map",138,139],"site-sitewide",{"id":138,"data":140,"filePath":151,"digest":152,"rendered":153},{"banners":141,"footer":142},[],{"copyrightMessage":143,"buildInfo":144},"Dog photos by Bicanski, CC0, via Pixnio.",{"enabled":145,"text":146,"dateTimeFormat":147},true,"Built",{"locale":148,"timeZone":149,"dateStyle":150,"timeStyle":150},"en-GB","UTC","short","site/sitewide-content.md","9c18371cff73ae4d",{"html":154,"metadata":155},"",{"headings":156,"localImagePaths":157,"remoteImagePaths":158,"frontmatter":159,"imagePaths":163},[],[],[],{"footer":160},{"copyrightMessage":143,"buildInfo":161},{"enabled":145,"text":146,"dateTimeFormat":162},{"locale":148,"timeZone":149,"dateStyle":150,"timeStyle":150},[],"theme",["Map",166,167],"theme.md",{"id":166,"data":168,"filePath":206,"digest":207,"rendered":208},{"layout":169,"gallery":191,"typography":198,"presentation":201,"navigation":205},{"density":170,"pageWidth":171,"gutter":172,"spacing":175},"normal","1320px",{"desktop":173,"mobile":174},"clamp(1.25rem, 4vw, 3rem)","1rem",{"blockGap":176,"finalSectionBottom":179,"firstSectionTop":182,"headingToBlock":184,"imageGap":187,"sectionGap":190},{"desktop":177,"mobile":178},"1.5em","1.25em",{"desktop":180,"mobile":181},"clamp(2rem, 4vw, 3.5rem)","2rem",{"desktop":183,"mobile":174},"clamp(1.5rem, 3vw, 2.5rem)",{"desktop":185,"mobile":186},"0.75em","0.7em",{"desktop":188,"mobile":189},"clamp(1.25rem, 3vw, 2.25rem)","1.5rem",{"desktop":180,"mobile":181},{"width":192,"maxAvailableWidthPercent":193,"maxAvailableHeightPercent":195},"70vw",{"desktop":194,"mobile":194},100,{"desktop":196,"mobile":197},72,68,{"fontFamily":199,"preset":200,"rhythm":170},"Arial, 'Helvetica Neue', Helvetica, sans-serif","quiet-gallery",{"palette":202,"sectionSurfaces":203},"paper",{"mode":204},"cycle",{"brand":14},"site/theme.md","54c1f2517b628e5f",{"html":154,"metadata":209},{"headings":210,"localImagePaths":211,"remoteImagePaths":212,"frontmatter":213,"imagePaths":230},[],[],[],{"navigation":214,"layout":215,"gallery":224,"typography":227,"presentation":228},{"brand":14},{"density":170,"pageWidth":171,"gutter":216,"spacing":217},{"desktop":173,"mobile":174},{"firstSectionTop":218,"sectionGap":219,"finalSectionBottom":220,"headingToBlock":221,"blockGap":222,"imageGap":223},{"desktop":183,"mobile":174},{"desktop":180,"mobile":181},{"desktop":180,"mobile":181},{"desktop":185,"mobile":186},{"desktop":177,"mobile":178},{"desktop":188,"mobile":189},{"width":192,"maxAvailableWidthPercent":225,"maxAvailableHeightPercent":226},{"desktop":194,"mobile":194},{"desktop":196,"mobile":197},{"fontFamily":199,"preset":200,"rhythm":170},{"palette":202,"sectionSurfaces":229},{"mode":204},[]]
@@ -1,8 +1,8 @@
1
1
  {
2
- "pid": 30816,
2
+ "pid": 6298,
3
3
  "port": 4321,
4
4
  "host": "0.0.0.0",
5
5
  "mode": "lan",
6
6
  "url": "http://127.0.0.1:4321/",
7
- "startedAt": "2026-08-16T09:11:02.562Z"
7
+ "startedAt": "2026-08-19T19:41:41.296Z"
8
8
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "pid": 30816,
2
+ "pid": 6298,
3
3
  "port": 4321,
4
4
  "url": "http://localhost:4321",
5
5
  "urls": {
@@ -11,5 +11,5 @@
11
11
  ]
12
12
  },
13
13
  "background": true,
14
- "startedAt": "2026-08-16T09:11:02.237Z"
14
+ "startedAt": "2026-08-19T19:41:40.916Z"
15
15
  }
@@ -1,24 +1,45 @@
1
- 11:11:01 [vite] connected.
2
- 11:11:01 [types] Generated 0ms
3
- 11:11:01 [vite] connected.
4
- 11:11:02 [content] Syncing content
5
- 11:11:02 [content] Astro config changed
6
- 11:11:02 [content] Clearing content store
1
+ 21:41:39 [vite] connected.
2
+ 21:41:40 [types] Generated 1ms
3
+ 21:41:40 [vite] connected.
4
+ 21:41:40 [content] Syncing content
5
+ 21:41:40 [content] Content config changed
6
+ 21:41:40 [content] Clearing content store
7
7
  [Shiki] The language "norna-image-stack" doesn't exist, falling back to "plaintext".
8
8
  [Shiki] The language "norna-image-stack" doesn't exist, falling back to "plaintext".
9
9
  [Shiki] The language "norna-image-stack" doesn't exist, falling back to "plaintext".
10
10
  [Shiki] The language "norna-image-stack" doesn't exist, falling back to "plaintext".
11
- 11:11:02 [content] Synced content
12
- astro v7.1.3 ready in 1095 ms
11
+ 21:41:40 [content] Synced content
12
+ astro v7.1.3 ready in 1280 ms
13
13
  ┃ Local http://localhost:4321/
14
14
  ┃ Network http://192.168.1.102:4321/
15
- 11:11:02 watching for file changes...
16
- 11:11:02 [200] / 50ms
17
- 11:11:02 [200] / 6ms
18
- 11:11:02 [200] / 7ms
19
- 11:12:06 [200] / 9ms
20
- 11:12:06 [WARN] [router] A `getStaticPaths()` route pattern was matched, but no matching static path was found for requested path `/favicon.ico`.
15
+ 21:41:40 watching for file changes...
16
+ 21:41:41 [200] / 52ms
17
+ 21:41:41 [200] / 10ms
18
+ 21:41:41 [200] / 7ms
19
+ 21:41:52 [200] /quiet-gallery/ 24ms
20
+ 21:41:53 [200] /compact-gallery/ 11ms
21
+ 21:41:54 [200] /text-forward/ 10ms
22
+ 21:41:55 [200] /statement/ 9ms
23
+ 21:42:03 [200] / 10ms
24
+ 21:42:53 [200] /quiet-gallery/ 10ms
25
+ 21:43:00 [200] /compact-gallery/ 9ms
26
+ 21:43:24 [200] /statement/ 9ms
27
+ 21:43:26 [WARN] [router] A `getStaticPaths()` route pattern was matched, but no matching static path was found for requested path `/presets/`.
21
28
 
22
29
  Possible dynamic routes being matched: ../../src/pages/[slug].astro.
23
- 11:16:24 [200] / 10ms
24
- 11:21:16 [200] / 8ms
30
+ 21:43:26 [404] /presets/ 2ms
31
+ 21:43:28 [WARN] [router] A `getStaticPaths()` route pattern was matched, but no matching static path was found for requested path `/presets/`.
32
+
33
+ Possible dynamic routes being matched: ../../src/pages/[slug].astro.
34
+ 21:43:28 [404] /presets/ 1ms
35
+ 21:43:32 [200] / 6ms
36
+ 21:43:42 [404] /norna/links/ 1ms
37
+ 21:45:40 [200] /quiet-gallery/ 12ms
38
+ 21:45:44 [200] / 9ms
39
+ 21:45:47 [200] /quiet-gallery/ 9ms
40
+ 21:45:48 [200] /compact-gallery/ 9ms
41
+ 21:45:50 [200] / 8ms
42
+ 21:45:52 [200] /quiet-gallery/ 8ms
43
+ 21:45:54 [200] /compact-gallery/ 9ms
44
+ 21:45:57 [200] /text-forward/ 9ms
45
+ 21:45:58 [200] /statement/ 9ms