@janga/norna 0.7.2 → 0.7.3

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 (145) hide show
  1. package/README.md +16 -16
  2. package/bin/norna-cli.mjs +12 -7
  3. package/docs/README.md +10 -11
  4. package/docs/commands.md +8 -8
  5. package/docs/configuration.md +13 -145
  6. package/docs/content.md +17 -15
  7. package/docs/design/command-organization.md +55 -55
  8. package/docs/design/site-examples-structure.md +2 -2
  9. package/docs/engine-development.md +5 -5
  10. package/docs/getting-started.md +19 -26
  11. package/docs/images-and-metadata.md +1 -1
  12. package/docs/local-development.md +2 -2
  13. package/docs/publishing.md +1 -1
  14. package/docs/routes.md +2 -2
  15. package/docs/site-structure.md +8 -7
  16. package/docs/theme.md +149 -7
  17. package/docs/typography.md +47 -28
  18. package/examples/dog-gallery/.astro/collections/site.schema.json +802 -0
  19. package/examples/dog-gallery/.astro/collections/theme.schema.json +714 -0
  20. package/examples/dog-gallery/.astro/content-assets.mjs +4 -0
  21. package/examples/dog-gallery/.astro/content-modules.mjs +1 -0
  22. package/examples/dog-gallery/.astro/content.d.ts +175 -0
  23. package/examples/dog-gallery/.astro/data-store.json +1 -0
  24. package/examples/dog-gallery/.astro/dev-local.json +8 -0
  25. package/examples/dog-gallery/.astro/dev.json +13 -0
  26. package/examples/dog-gallery/.astro/dev.log +49 -0
  27. package/examples/dog-gallery/.astro/settings.json +5 -0
  28. package/examples/dog-gallery/.astro/types.d.ts +2 -0
  29. package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +1 -0
  30. package/examples/dog-gallery/dist/_astro/SitePage.BFHZm5UG.css +1 -0
  31. package/examples/dog-gallery/dist/dog-care/index.html +15 -0
  32. package/examples/dog-gallery/dist/favicon.svg +7 -0
  33. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
  34. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
  35. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
  36. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
  37. package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
  38. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
  39. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
  40. package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
  41. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
  42. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
  43. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
  44. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
  45. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
  46. package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
  47. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
  48. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
  49. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
  50. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
  51. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
  52. package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
  53. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
  54. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
  55. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
  56. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
  57. package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
  58. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
  59. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
  60. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
  61. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
  62. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
  63. package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
  64. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
  65. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
  66. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
  67. package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
  68. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
  69. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
  70. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
  71. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
  72. package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
  73. package/examples/dog-gallery/dist/index.html +43 -0
  74. package/examples/dog-gallery/dist/robots.txt +2 -0
  75. package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +74 -0
  76. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  77. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  78. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  79. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  80. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  81. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  82. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  83. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  84. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  85. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  86. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  87. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  88. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  89. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  90. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  91. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  92. package/examples/dog-gallery/node_modules/.vite/deps/package.json +3 -0
  93. package/examples/dog-gallery/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  94. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  95. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  96. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  97. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  98. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  99. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  100. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  101. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  102. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  103. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  104. package/examples/dog-gallery/site/config.mjs +12 -42
  105. package/examples/dog-gallery/site/content.md +27 -5
  106. package/examples/dog-gallery/site/routes/dog-care/route-content.md +17 -3
  107. package/examples/dog-gallery/site/theme.md +85 -26
  108. package/fixtures/basic/site/config.mjs +2 -22
  109. package/fixtures/basic/site/content.md +1 -1
  110. package/fixtures/basic/site/theme.md +7 -3
  111. package/package.json +3 -3
  112. package/scripts/check-config.mjs +3 -3
  113. package/scripts/deploy-site.mjs +3 -3
  114. package/scripts/init-site.mjs +10 -8
  115. package/scripts/lib/frontmatter-yaml.mjs +85 -0
  116. package/scripts/lib/presentation.mjs +10 -11
  117. package/scripts/lib/project-config.mjs +91 -45
  118. package/scripts/lib/site-content.mjs +20 -2
  119. package/scripts/lib/theme-config.mjs +34 -0
  120. package/scripts/lib/typography.mjs +100 -20
  121. package/scripts/show-typography.mjs +58 -154
  122. package/scripts/sync-content-sections.mjs +6 -6
  123. package/scripts/test-content-check.mjs +3 -4
  124. package/scripts/test-engine-commands.mjs +2 -2
  125. package/scripts/test-package-check.mjs +17 -16
  126. package/scripts/test-temporary-visibility.mjs +2 -3
  127. package/src/components/SitePage.astro +2 -3
  128. package/src/components/SiteSection.astro +39 -5
  129. package/src/content.config.ts +60 -2
  130. package/src/layouts/BaseLayout.astro +17 -0
  131. package/src/styles/global.css +54 -50
  132. package/starters/basic/README.md +10 -15
  133. package/starters/basic/package.json +2 -2
  134. package/starters/basic/site/config.mjs +3 -24
  135. package/starters/basic/site/content.md +40 -7
  136. package/starters/basic/site/theme.md +110 -17
  137. package/starters/project/.github/workflows/deploy.yml +65 -0
  138. package/starters/project/README.md +72 -0
  139. package/starters/project/package-lock.json +4296 -0
  140. package/starters/project/package.json +35 -0
  141. package/starters/project/site/config.mjs +43 -0
  142. package/starters/project/site/content.md +88 -0
  143. package/starters/project/site/public/robots.txt +2 -0
  144. package/starters/project/site/routes/guide/route-content.md +58 -0
  145. package/starters/project/site/theme.md +15 -0
@@ -0,0 +1,714 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "navigation": {
6
+ "type": "object",
7
+ "properties": {
8
+ "brand": {
9
+ "type": "string",
10
+ "minLength": 1
11
+ }
12
+ },
13
+ "additionalProperties": false
14
+ },
15
+ "layout": {
16
+ "type": "object",
17
+ "properties": {
18
+ "pageWidth": {
19
+ "type": "string",
20
+ "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*\\))$"
21
+ },
22
+ "gutter": {
23
+ "anyOf": [
24
+ {
25
+ "type": "string",
26
+ "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*\\))$"
27
+ },
28
+ {
29
+ "type": "object",
30
+ "properties": {
31
+ "desktop": {
32
+ "type": "string",
33
+ "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*\\))$"
34
+ },
35
+ "mobile": {
36
+ "type": "string",
37
+ "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*\\))$"
38
+ }
39
+ },
40
+ "required": [
41
+ "desktop",
42
+ "mobile"
43
+ ],
44
+ "additionalProperties": false
45
+ }
46
+ ]
47
+ },
48
+ "spacing": {
49
+ "type": "object",
50
+ "properties": {
51
+ "bodyToImages": {
52
+ "anyOf": [
53
+ {
54
+ "type": "string",
55
+ "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*\\))$"
56
+ },
57
+ {
58
+ "type": "object",
59
+ "properties": {
60
+ "desktop": {
61
+ "type": "string",
62
+ "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*\\))$"
63
+ },
64
+ "mobile": {
65
+ "type": "string",
66
+ "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*\\))$"
67
+ }
68
+ },
69
+ "required": [
70
+ "desktop",
71
+ "mobile"
72
+ ],
73
+ "additionalProperties": false
74
+ }
75
+ ]
76
+ },
77
+ "finalSectionBottom": {
78
+ "anyOf": [
79
+ {
80
+ "type": "string",
81
+ "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*\\))$"
82
+ },
83
+ {
84
+ "type": "object",
85
+ "properties": {
86
+ "desktop": {
87
+ "type": "string",
88
+ "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*\\))$"
89
+ },
90
+ "mobile": {
91
+ "type": "string",
92
+ "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*\\))$"
93
+ }
94
+ },
95
+ "required": [
96
+ "desktop",
97
+ "mobile"
98
+ ],
99
+ "additionalProperties": false
100
+ }
101
+ ]
102
+ },
103
+ "firstSectionTop": {
104
+ "anyOf": [
105
+ {
106
+ "type": "string",
107
+ "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*\\))$"
108
+ },
109
+ {
110
+ "type": "object",
111
+ "properties": {
112
+ "desktop": {
113
+ "type": "string",
114
+ "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*\\))$"
115
+ },
116
+ "mobile": {
117
+ "type": "string",
118
+ "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*\\))$"
119
+ }
120
+ },
121
+ "required": [
122
+ "desktop",
123
+ "mobile"
124
+ ],
125
+ "additionalProperties": false
126
+ }
127
+ ]
128
+ },
129
+ "imageGap": {
130
+ "anyOf": [
131
+ {
132
+ "type": "string",
133
+ "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*\\))$"
134
+ },
135
+ {
136
+ "type": "object",
137
+ "properties": {
138
+ "desktop": {
139
+ "type": "string",
140
+ "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*\\))$"
141
+ },
142
+ "mobile": {
143
+ "type": "string",
144
+ "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*\\))$"
145
+ }
146
+ },
147
+ "required": [
148
+ "desktop",
149
+ "mobile"
150
+ ],
151
+ "additionalProperties": false
152
+ }
153
+ ]
154
+ },
155
+ "sectionGap": {
156
+ "anyOf": [
157
+ {
158
+ "type": "string",
159
+ "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*\\))$"
160
+ },
161
+ {
162
+ "type": "object",
163
+ "properties": {
164
+ "desktop": {
165
+ "type": "string",
166
+ "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*\\))$"
167
+ },
168
+ "mobile": {
169
+ "type": "string",
170
+ "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*\\))$"
171
+ }
172
+ },
173
+ "required": [
174
+ "desktop",
175
+ "mobile"
176
+ ],
177
+ "additionalProperties": false
178
+ }
179
+ ]
180
+ },
181
+ "sectionHeadingToBody": {
182
+ "anyOf": [
183
+ {
184
+ "type": "string",
185
+ "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*\\))$"
186
+ },
187
+ {
188
+ "type": "object",
189
+ "properties": {
190
+ "desktop": {
191
+ "type": "string",
192
+ "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*\\))$"
193
+ },
194
+ "mobile": {
195
+ "type": "string",
196
+ "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*\\))$"
197
+ }
198
+ },
199
+ "required": [
200
+ "desktop",
201
+ "mobile"
202
+ ],
203
+ "additionalProperties": false
204
+ }
205
+ ]
206
+ },
207
+ "subheadingRuleTop": {
208
+ "anyOf": [
209
+ {
210
+ "type": "string",
211
+ "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*\\))$"
212
+ },
213
+ {
214
+ "type": "object",
215
+ "properties": {
216
+ "desktop": {
217
+ "type": "string",
218
+ "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*\\))$"
219
+ },
220
+ "mobile": {
221
+ "type": "string",
222
+ "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*\\))$"
223
+ }
224
+ },
225
+ "required": [
226
+ "desktop",
227
+ "mobile"
228
+ ],
229
+ "additionalProperties": false
230
+ }
231
+ ]
232
+ },
233
+ "subheadingTop": {
234
+ "anyOf": [
235
+ {
236
+ "type": "string",
237
+ "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*\\))$"
238
+ },
239
+ {
240
+ "type": "object",
241
+ "properties": {
242
+ "desktop": {
243
+ "type": "string",
244
+ "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*\\))$"
245
+ },
246
+ "mobile": {
247
+ "type": "string",
248
+ "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*\\))$"
249
+ }
250
+ },
251
+ "required": [
252
+ "desktop",
253
+ "mobile"
254
+ ],
255
+ "additionalProperties": false
256
+ }
257
+ ]
258
+ }
259
+ },
260
+ "additionalProperties": false
261
+ }
262
+ },
263
+ "additionalProperties": false
264
+ },
265
+ "gallery": {
266
+ "type": "object",
267
+ "properties": {
268
+ "width": {
269
+ "type": "string",
270
+ "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*\\))$"
271
+ },
272
+ "maxAvailableWidthPercent": {
273
+ "anyOf": [
274
+ {
275
+ "type": "number",
276
+ "exclusiveMinimum": 0,
277
+ "maximum": 100
278
+ },
279
+ {
280
+ "type": "object",
281
+ "properties": {
282
+ "desktop": {
283
+ "type": "number",
284
+ "exclusiveMinimum": 0,
285
+ "maximum": 100
286
+ },
287
+ "mobile": {
288
+ "type": "number",
289
+ "exclusiveMinimum": 0,
290
+ "maximum": 100
291
+ }
292
+ },
293
+ "required": [
294
+ "desktop",
295
+ "mobile"
296
+ ],
297
+ "additionalProperties": false
298
+ }
299
+ ]
300
+ },
301
+ "maxAvailableHeightPercent": {
302
+ "anyOf": [
303
+ {
304
+ "type": "number",
305
+ "exclusiveMinimum": 0,
306
+ "maximum": 100
307
+ },
308
+ {
309
+ "type": "object",
310
+ "properties": {
311
+ "desktop": {
312
+ "type": "number",
313
+ "exclusiveMinimum": 0,
314
+ "maximum": 100
315
+ },
316
+ "mobile": {
317
+ "type": "number",
318
+ "exclusiveMinimum": 0,
319
+ "maximum": 100
320
+ }
321
+ },
322
+ "required": [
323
+ "desktop",
324
+ "mobile"
325
+ ],
326
+ "additionalProperties": false
327
+ }
328
+ ]
329
+ }
330
+ },
331
+ "additionalProperties": false
332
+ },
333
+ "typography": {
334
+ "type": "object",
335
+ "properties": {
336
+ "fontFamily": {
337
+ "type": "string",
338
+ "minLength": 1
339
+ },
340
+ "preset": {
341
+ "type": "string",
342
+ "enum": [
343
+ "quiet-gallery",
344
+ "compact-gallery",
345
+ "text-forward",
346
+ "statement"
347
+ ]
348
+ },
349
+ "overrides": {
350
+ "type": "object",
351
+ "properties": {
352
+ "headings": {
353
+ "type": "object",
354
+ "properties": {
355
+ "h1": {
356
+ "type": "object",
357
+ "properties": {
358
+ "align": {
359
+ "type": "object",
360
+ "properties": {
361
+ "desktop": {
362
+ "type": "string",
363
+ "enum": [
364
+ "left",
365
+ "center",
366
+ "right"
367
+ ]
368
+ },
369
+ "mobile": {
370
+ "type": "string",
371
+ "enum": [
372
+ "left",
373
+ "center",
374
+ "right"
375
+ ]
376
+ }
377
+ },
378
+ "additionalProperties": false
379
+ },
380
+ "size": {
381
+ "type": "string",
382
+ "enum": [
383
+ "small",
384
+ "medium",
385
+ "large",
386
+ "xlarge"
387
+ ]
388
+ },
389
+ "lineHeight": {
390
+ "type": "number",
391
+ "minimum": 1,
392
+ "maximum": 3
393
+ },
394
+ "spacing": {
395
+ "type": "string",
396
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
397
+ }
398
+ },
399
+ "additionalProperties": false
400
+ },
401
+ "h2": {
402
+ "type": "object",
403
+ "properties": {
404
+ "align": {
405
+ "type": "object",
406
+ "properties": {
407
+ "desktop": {
408
+ "type": "string",
409
+ "enum": [
410
+ "left",
411
+ "center",
412
+ "right"
413
+ ]
414
+ },
415
+ "mobile": {
416
+ "type": "string",
417
+ "enum": [
418
+ "left",
419
+ "center",
420
+ "right"
421
+ ]
422
+ }
423
+ },
424
+ "additionalProperties": false
425
+ },
426
+ "size": {
427
+ "type": "string",
428
+ "enum": [
429
+ "small",
430
+ "medium",
431
+ "large",
432
+ "xlarge"
433
+ ]
434
+ },
435
+ "lineHeight": {
436
+ "type": "number",
437
+ "minimum": 1,
438
+ "maximum": 3
439
+ },
440
+ "spacing": {
441
+ "type": "string",
442
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
443
+ }
444
+ },
445
+ "additionalProperties": false
446
+ },
447
+ "h3": {
448
+ "type": "object",
449
+ "properties": {
450
+ "align": {
451
+ "type": "object",
452
+ "properties": {
453
+ "desktop": {
454
+ "type": "string",
455
+ "enum": [
456
+ "left",
457
+ "center",
458
+ "right"
459
+ ]
460
+ },
461
+ "mobile": {
462
+ "type": "string",
463
+ "enum": [
464
+ "left",
465
+ "center",
466
+ "right"
467
+ ]
468
+ }
469
+ },
470
+ "additionalProperties": false
471
+ },
472
+ "size": {
473
+ "type": "string",
474
+ "enum": [
475
+ "small",
476
+ "medium",
477
+ "large",
478
+ "xlarge"
479
+ ]
480
+ },
481
+ "lineHeight": {
482
+ "type": "number",
483
+ "minimum": 1,
484
+ "maximum": 3
485
+ },
486
+ "spacing": {
487
+ "type": "string",
488
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
489
+ }
490
+ },
491
+ "additionalProperties": false
492
+ },
493
+ "h4": {
494
+ "type": "object",
495
+ "properties": {
496
+ "align": {
497
+ "type": "object",
498
+ "properties": {
499
+ "desktop": {
500
+ "type": "string",
501
+ "enum": [
502
+ "left",
503
+ "center",
504
+ "right"
505
+ ]
506
+ },
507
+ "mobile": {
508
+ "type": "string",
509
+ "enum": [
510
+ "left",
511
+ "center",
512
+ "right"
513
+ ]
514
+ }
515
+ },
516
+ "additionalProperties": false
517
+ },
518
+ "size": {
519
+ "type": "string",
520
+ "enum": [
521
+ "small",
522
+ "medium",
523
+ "large",
524
+ "xlarge"
525
+ ]
526
+ },
527
+ "lineHeight": {
528
+ "type": "number",
529
+ "minimum": 1,
530
+ "maximum": 3
531
+ },
532
+ "spacing": {
533
+ "type": "string",
534
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
535
+ }
536
+ },
537
+ "additionalProperties": false
538
+ }
539
+ },
540
+ "additionalProperties": false
541
+ },
542
+ "body": {
543
+ "type": "object",
544
+ "properties": {
545
+ "align": {
546
+ "type": "object",
547
+ "properties": {
548
+ "desktop": {
549
+ "type": "string",
550
+ "enum": [
551
+ "left",
552
+ "center",
553
+ "right"
554
+ ]
555
+ },
556
+ "mobile": {
557
+ "type": "string",
558
+ "enum": [
559
+ "left",
560
+ "center",
561
+ "right"
562
+ ]
563
+ }
564
+ },
565
+ "additionalProperties": false
566
+ },
567
+ "size": {
568
+ "type": "string",
569
+ "enum": [
570
+ "small",
571
+ "medium",
572
+ "large",
573
+ "xlarge"
574
+ ]
575
+ },
576
+ "lineHeight": {
577
+ "type": "number",
578
+ "minimum": 1,
579
+ "maximum": 3
580
+ },
581
+ "paragraphSpacing": {
582
+ "type": "string",
583
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
584
+ }
585
+ },
586
+ "additionalProperties": false
587
+ },
588
+ "caption": {
589
+ "type": "object",
590
+ "properties": {
591
+ "align": {
592
+ "type": "object",
593
+ "properties": {
594
+ "desktop": {
595
+ "type": "string",
596
+ "enum": [
597
+ "left",
598
+ "center",
599
+ "right"
600
+ ]
601
+ },
602
+ "mobile": {
603
+ "type": "string",
604
+ "enum": [
605
+ "left",
606
+ "center",
607
+ "right"
608
+ ]
609
+ }
610
+ },
611
+ "additionalProperties": false
612
+ },
613
+ "size": {
614
+ "type": "string",
615
+ "enum": [
616
+ "small",
617
+ "medium",
618
+ "large",
619
+ "xlarge"
620
+ ]
621
+ },
622
+ "lineHeight": {
623
+ "type": "number",
624
+ "minimum": 1,
625
+ "maximum": 3
626
+ },
627
+ "spacing": {
628
+ "type": "string",
629
+ "pattern": "^(?:0|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|ch|lh))$"
630
+ }
631
+ },
632
+ "additionalProperties": false
633
+ }
634
+ },
635
+ "additionalProperties": false
636
+ }
637
+ },
638
+ "additionalProperties": false
639
+ },
640
+ "presentation": {
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
+ "inlineStyles": {
652
+ "type": "object",
653
+ "propertyNames": {
654
+ "type": "string",
655
+ "pattern": "^[a-z][a-z0-9-]*$"
656
+ },
657
+ "additionalProperties": {
658
+ "type": "object",
659
+ "properties": {
660
+ "color": {
661
+ "type": "string",
662
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
663
+ }
664
+ },
665
+ "required": [
666
+ "color"
667
+ ],
668
+ "additionalProperties": false
669
+ }
670
+ }
671
+ },
672
+ "additionalProperties": false
673
+ },
674
+ "frame": {
675
+ "type": "object",
676
+ "properties": {
677
+ "colors": {
678
+ "anyOf": [
679
+ {
680
+ "type": "string",
681
+ "enum": [
682
+ "theme",
683
+ "presentation"
684
+ ]
685
+ },
686
+ {
687
+ "type": "object",
688
+ "properties": {
689
+ "backgroundColor": {
690
+ "type": "string",
691
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
692
+ },
693
+ "textColor": {
694
+ "type": "string",
695
+ "pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
696
+ }
697
+ },
698
+ "required": [
699
+ "backgroundColor",
700
+ "textColor"
701
+ ],
702
+ "additionalProperties": false
703
+ }
704
+ ]
705
+ }
706
+ },
707
+ "additionalProperties": false
708
+ },
709
+ "$schema": {
710
+ "type": "string"
711
+ }
712
+ },
713
+ "additionalProperties": false
714
+ }