@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,746 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "layout": {
6
+ "type": "object",
7
+ "properties": {
8
+ "density": {
9
+ "type": "string",
10
+ "enum": [
11
+ "compact",
12
+ "normal",
13
+ "airy"
14
+ ]
15
+ },
16
+ "pageWidth": {
17
+ "type": "string",
18
+ "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*\\))$"
19
+ },
20
+ "gutter": {
21
+ "anyOf": [
22
+ {
23
+ "type": "string",
24
+ "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*\\))$"
25
+ },
26
+ {
27
+ "type": "object",
28
+ "properties": {
29
+ "desktop": {
30
+ "type": "string",
31
+ "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*\\))$"
32
+ },
33
+ "mobile": {
34
+ "type": "string",
35
+ "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*\\))$"
36
+ }
37
+ },
38
+ "required": [
39
+ "desktop",
40
+ "mobile"
41
+ ],
42
+ "additionalProperties": false
43
+ }
44
+ ]
45
+ },
46
+ "spacing": {
47
+ "type": "object",
48
+ "properties": {
49
+ "blockGap": {
50
+ "anyOf": [
51
+ {
52
+ "type": "string",
53
+ "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*\\))$"
54
+ },
55
+ {
56
+ "type": "object",
57
+ "properties": {
58
+ "desktop": {
59
+ "type": "string",
60
+ "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*\\))$"
61
+ },
62
+ "mobile": {
63
+ "type": "string",
64
+ "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*\\))$"
65
+ }
66
+ },
67
+ "required": [
68
+ "desktop",
69
+ "mobile"
70
+ ],
71
+ "additionalProperties": false
72
+ }
73
+ ]
74
+ },
75
+ "finalSectionBottom": {
76
+ "anyOf": [
77
+ {
78
+ "type": "string",
79
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$"
80
+ },
81
+ {
82
+ "type": "object",
83
+ "properties": {
84
+ "desktop": {
85
+ "type": "string",
86
+ "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*\\))$"
87
+ },
88
+ "mobile": {
89
+ "type": "string",
90
+ "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*\\))$"
91
+ }
92
+ },
93
+ "required": [
94
+ "desktop",
95
+ "mobile"
96
+ ],
97
+ "additionalProperties": false
98
+ }
99
+ ]
100
+ },
101
+ "firstSectionTop": {
102
+ "anyOf": [
103
+ {
104
+ "type": "string",
105
+ "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*\\))$"
106
+ },
107
+ {
108
+ "type": "object",
109
+ "properties": {
110
+ "desktop": {
111
+ "type": "string",
112
+ "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*\\))$"
113
+ },
114
+ "mobile": {
115
+ "type": "string",
116
+ "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*\\))$"
117
+ }
118
+ },
119
+ "required": [
120
+ "desktop",
121
+ "mobile"
122
+ ],
123
+ "additionalProperties": false
124
+ }
125
+ ]
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
+ },
153
+ "imageGap": {
154
+ "anyOf": [
155
+ {
156
+ "type": "string",
157
+ "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*\\))$"
158
+ },
159
+ {
160
+ "type": "object",
161
+ "properties": {
162
+ "desktop": {
163
+ "type": "string",
164
+ "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*\\))$"
165
+ },
166
+ "mobile": {
167
+ "type": "string",
168
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)|clamp\\(\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*,\\s*(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|vw|vh|vmin|vmax|ch|%)\\s*\\))$"
169
+ }
170
+ },
171
+ "required": [
172
+ "desktop",
173
+ "mobile"
174
+ ],
175
+ "additionalProperties": false
176
+ }
177
+ ]
178
+ },
179
+ "sectionGap": {
180
+ "anyOf": [
181
+ {
182
+ "type": "string",
183
+ "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*\\))$"
184
+ },
185
+ {
186
+ "type": "object",
187
+ "properties": {
188
+ "desktop": {
189
+ "type": "string",
190
+ "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*\\))$"
191
+ },
192
+ "mobile": {
193
+ "type": "string",
194
+ "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*\\))$"
195
+ }
196
+ },
197
+ "required": [
198
+ "desktop",
199
+ "mobile"
200
+ ],
201
+ "additionalProperties": false
202
+ }
203
+ ]
204
+ }
205
+ },
206
+ "additionalProperties": false
207
+ }
208
+ },
209
+ "additionalProperties": false
210
+ },
211
+ "gallery": {
212
+ "type": "object",
213
+ "properties": {
214
+ "width": {
215
+ "type": "string",
216
+ "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*\\))$"
217
+ },
218
+ "maxAvailableWidthPercent": {
219
+ "anyOf": [
220
+ {
221
+ "type": "number",
222
+ "exclusiveMinimum": 0,
223
+ "maximum": 100
224
+ },
225
+ {
226
+ "type": "object",
227
+ "properties": {
228
+ "desktop": {
229
+ "type": "number",
230
+ "exclusiveMinimum": 0,
231
+ "maximum": 100
232
+ },
233
+ "mobile": {
234
+ "type": "number",
235
+ "exclusiveMinimum": 0,
236
+ "maximum": 100
237
+ }
238
+ },
239
+ "required": [
240
+ "desktop",
241
+ "mobile"
242
+ ],
243
+ "additionalProperties": false
244
+ }
245
+ ]
246
+ },
247
+ "maxAvailableHeightPercent": {
248
+ "anyOf": [
249
+ {
250
+ "type": "number",
251
+ "exclusiveMinimum": 0,
252
+ "maximum": 100
253
+ },
254
+ {
255
+ "type": "object",
256
+ "properties": {
257
+ "desktop": {
258
+ "type": "number",
259
+ "exclusiveMinimum": 0,
260
+ "maximum": 100
261
+ },
262
+ "mobile": {
263
+ "type": "number",
264
+ "exclusiveMinimum": 0,
265
+ "maximum": 100
266
+ }
267
+ },
268
+ "required": [
269
+ "desktop",
270
+ "mobile"
271
+ ],
272
+ "additionalProperties": false
273
+ }
274
+ ]
275
+ }
276
+ },
277
+ "additionalProperties": false
278
+ },
279
+ "typography": {
280
+ "type": "object",
281
+ "properties": {
282
+ "fontFamily": {
283
+ "type": "string",
284
+ "minLength": 1
285
+ },
286
+ "preset": {
287
+ "type": "string",
288
+ "enum": [
289
+ "quiet-gallery",
290
+ "compact-gallery",
291
+ "text-forward",
292
+ "statement"
293
+ ]
294
+ },
295
+ "rhythm": {
296
+ "type": "string",
297
+ "enum": [
298
+ "compact",
299
+ "normal",
300
+ "airy"
301
+ ]
302
+ },
303
+ "overrides": {
304
+ "type": "object",
305
+ "properties": {
306
+ "headings": {
307
+ "type": "object",
308
+ "properties": {
309
+ "h1": {
310
+ "type": "object",
311
+ "properties": {
312
+ "align": {
313
+ "type": "object",
314
+ "properties": {
315
+ "desktop": {
316
+ "type": "string",
317
+ "enum": [
318
+ "left",
319
+ "center",
320
+ "right"
321
+ ]
322
+ },
323
+ "mobile": {
324
+ "type": "string",
325
+ "enum": [
326
+ "left",
327
+ "center",
328
+ "right"
329
+ ]
330
+ }
331
+ },
332
+ "additionalProperties": false
333
+ },
334
+ "size": {
335
+ "type": "string",
336
+ "enum": [
337
+ "small",
338
+ "medium",
339
+ "large",
340
+ "xlarge"
341
+ ]
342
+ },
343
+ "lineHeight": {
344
+ "type": "number",
345
+ "minimum": 1,
346
+ "maximum": 3
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
+ },
368
+ "spacingBefore": {
369
+ "type": "string",
370
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
371
+ },
372
+ "spacingAfter": {
373
+ "type": "string",
374
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
375
+ }
376
+ },
377
+ "additionalProperties": false
378
+ },
379
+ "h2": {
380
+ "type": "object",
381
+ "properties": {
382
+ "align": {
383
+ "type": "object",
384
+ "properties": {
385
+ "desktop": {
386
+ "type": "string",
387
+ "enum": [
388
+ "left",
389
+ "center",
390
+ "right"
391
+ ]
392
+ },
393
+ "mobile": {
394
+ "type": "string",
395
+ "enum": [
396
+ "left",
397
+ "center",
398
+ "right"
399
+ ]
400
+ }
401
+ },
402
+ "additionalProperties": false
403
+ },
404
+ "size": {
405
+ "type": "string",
406
+ "enum": [
407
+ "small",
408
+ "medium",
409
+ "large",
410
+ "xlarge"
411
+ ]
412
+ },
413
+ "lineHeight": {
414
+ "type": "number",
415
+ "minimum": 1,
416
+ "maximum": 3
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
+ },
438
+ "spacingBefore": {
439
+ "type": "string",
440
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
441
+ },
442
+ "spacingAfter": {
443
+ "type": "string",
444
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
445
+ }
446
+ },
447
+ "additionalProperties": false
448
+ },
449
+ "h3": {
450
+ "type": "object",
451
+ "properties": {
452
+ "align": {
453
+ "type": "object",
454
+ "properties": {
455
+ "desktop": {
456
+ "type": "string",
457
+ "enum": [
458
+ "left",
459
+ "center",
460
+ "right"
461
+ ]
462
+ },
463
+ "mobile": {
464
+ "type": "string",
465
+ "enum": [
466
+ "left",
467
+ "center",
468
+ "right"
469
+ ]
470
+ }
471
+ },
472
+ "additionalProperties": false
473
+ },
474
+ "size": {
475
+ "type": "string",
476
+ "enum": [
477
+ "small",
478
+ "medium",
479
+ "large",
480
+ "xlarge"
481
+ ]
482
+ },
483
+ "lineHeight": {
484
+ "type": "number",
485
+ "minimum": 1,
486
+ "maximum": 3
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
+ },
508
+ "spacingBefore": {
509
+ "type": "string",
510
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
511
+ },
512
+ "spacingAfter": {
513
+ "type": "string",
514
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
515
+ }
516
+ },
517
+ "additionalProperties": false
518
+ },
519
+ "h4": {
520
+ "type": "object",
521
+ "properties": {
522
+ "align": {
523
+ "type": "object",
524
+ "properties": {
525
+ "desktop": {
526
+ "type": "string",
527
+ "enum": [
528
+ "left",
529
+ "center",
530
+ "right"
531
+ ]
532
+ },
533
+ "mobile": {
534
+ "type": "string",
535
+ "enum": [
536
+ "left",
537
+ "center",
538
+ "right"
539
+ ]
540
+ }
541
+ },
542
+ "additionalProperties": false
543
+ },
544
+ "size": {
545
+ "type": "string",
546
+ "enum": [
547
+ "small",
548
+ "medium",
549
+ "large",
550
+ "xlarge"
551
+ ]
552
+ },
553
+ "lineHeight": {
554
+ "type": "number",
555
+ "minimum": 1,
556
+ "maximum": 3
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
+ },
578
+ "spacingBefore": {
579
+ "type": "string",
580
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
581
+ },
582
+ "spacingAfter": {
583
+ "type": "string",
584
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
585
+ }
586
+ },
587
+ "additionalProperties": false
588
+ }
589
+ },
590
+ "additionalProperties": false
591
+ },
592
+ "body": {
593
+ "type": "object",
594
+ "properties": {
595
+ "align": {
596
+ "type": "object",
597
+ "properties": {
598
+ "desktop": {
599
+ "type": "string",
600
+ "enum": [
601
+ "left",
602
+ "center",
603
+ "right"
604
+ ]
605
+ },
606
+ "mobile": {
607
+ "type": "string",
608
+ "enum": [
609
+ "left",
610
+ "center",
611
+ "right"
612
+ ]
613
+ }
614
+ },
615
+ "additionalProperties": false
616
+ },
617
+ "size": {
618
+ "type": "string",
619
+ "enum": [
620
+ "small",
621
+ "medium",
622
+ "large",
623
+ "xlarge"
624
+ ]
625
+ },
626
+ "lineHeight": {
627
+ "type": "number",
628
+ "minimum": 1,
629
+ "maximum": 3
630
+ },
631
+ "width": {
632
+ "type": "string",
633
+ "enum": [
634
+ "narrow",
635
+ "normal",
636
+ "wide"
637
+ ]
638
+ },
639
+ "paragraphSpacing": {
640
+ "type": "string",
641
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
642
+ }
643
+ },
644
+ "additionalProperties": false
645
+ },
646
+ "caption": {
647
+ "type": "object",
648
+ "properties": {
649
+ "align": {
650
+ "type": "object",
651
+ "properties": {
652
+ "desktop": {
653
+ "type": "string",
654
+ "enum": [
655
+ "left",
656
+ "center",
657
+ "right"
658
+ ]
659
+ },
660
+ "mobile": {
661
+ "type": "string",
662
+ "enum": [
663
+ "left",
664
+ "center",
665
+ "right"
666
+ ]
667
+ }
668
+ },
669
+ "additionalProperties": false
670
+ },
671
+ "size": {
672
+ "type": "string",
673
+ "enum": [
674
+ "small",
675
+ "medium",
676
+ "large",
677
+ "xlarge"
678
+ ]
679
+ },
680
+ "lineHeight": {
681
+ "type": "number",
682
+ "minimum": 1,
683
+ "maximum": 3
684
+ },
685
+ "spacingBefore": {
686
+ "type": "string",
687
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
688
+ }
689
+ },
690
+ "additionalProperties": false
691
+ }
692
+ },
693
+ "additionalProperties": false
694
+ }
695
+ },
696
+ "additionalProperties": false
697
+ },
698
+ "presentation": {
699
+ "type": "object",
700
+ "properties": {
701
+ "palette": {
702
+ "type": "string",
703
+ "enum": [
704
+ "dark",
705
+ "light",
706
+ "paper"
707
+ ]
708
+ },
709
+ "sectionSurfaces": {
710
+ "type": "object",
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": {
724
+ "type": "string",
725
+ "enum": [
726
+ "base",
727
+ "soft",
728
+ "emphasis"
729
+ ]
730
+ }
731
+ }
732
+ },
733
+ "required": [
734
+ "mode"
735
+ ],
736
+ "additionalProperties": false
737
+ }
738
+ },
739
+ "additionalProperties": false
740
+ },
741
+ "$schema": {
742
+ "type": "string"
743
+ }
744
+ },
745
+ "additionalProperties": false
746
+ }