@fulmenhq/tsfulmen 0.1.6

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 (188) hide show
  1. package/CHANGELOG.md +616 -0
  2. package/LICENSE +57 -0
  3. package/README.md +674 -0
  4. package/config/crucible-ts/README.md +38 -0
  5. package/config/crucible-ts/library/foundry/country-codes.yaml +29 -0
  6. package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +351 -0
  7. package/config/crucible-ts/library/foundry/exit-codes.yaml +483 -0
  8. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/invalid-behavior.yaml +45 -0
  9. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/invalid-exit-code.yaml +51 -0
  10. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/malformed.yaml +44 -0
  11. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/missing-required.yaml +36 -0
  12. package/config/crucible-ts/library/foundry/fixtures/signals/parity-snapshot.json +162 -0
  13. package/config/crucible-ts/library/foundry/fixtures/signals/valid/complete.yaml +314 -0
  14. package/config/crucible-ts/library/foundry/fixtures/signals/valid/custom-behavior.yaml +96 -0
  15. package/config/crucible-ts/library/foundry/fixtures/signals/valid/minimal.yaml +55 -0
  16. package/config/crucible-ts/library/foundry/http-statuses.yaml +148 -0
  17. package/config/crucible-ts/library/foundry/mime-types.yaml +39 -0
  18. package/config/crucible-ts/library/foundry/patterns.yaml +185 -0
  19. package/config/crucible-ts/library/foundry/signals.yaml +331 -0
  20. package/config/crucible-ts/library/foundry/similarity-fixtures.yaml +432 -0
  21. package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +117 -0
  22. package/config/crucible-ts/library/fulhash/fixtures.yaml +160 -0
  23. package/config/crucible-ts/library/v1.0.0/module-manifest.yaml +179 -0
  24. package/config/crucible-ts/repository/app-identity/app-identity.example.yaml +42 -0
  25. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-binary-name.yaml +7 -0
  26. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-env-prefix.yaml +7 -0
  27. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-vendor.yaml +7 -0
  28. package/config/crucible-ts/repository/app-identity/fixtures/invalid/malformed-yaml.yaml +8 -0
  29. package/config/crucible-ts/repository/app-identity/fixtures/invalid/missing-required.yaml +6 -0
  30. package/config/crucible-ts/repository/app-identity/fixtures/valid/complete.yaml +20 -0
  31. package/config/crucible-ts/repository/app-identity/fixtures/valid/minimal.yaml +7 -0
  32. package/config/crucible-ts/repository/app-identity/fixtures/valid/monorepo-api.yaml +10 -0
  33. package/config/crucible-ts/repository/app-identity/fixtures/valid/monorepo-worker.yaml +10 -0
  34. package/config/crucible-ts/repository/app-identity/parity-snapshot.json +125 -0
  35. package/config/crucible-ts/server/management/server-management.yaml +141 -0
  36. package/config/crucible-ts/sync/README.md +13 -0
  37. package/config/crucible-ts/sync/sync-keys.yaml +74 -0
  38. package/config/crucible-ts/taxonomy/languages.yaml +33 -0
  39. package/config/crucible-ts/taxonomy/metrics.yaml +115 -0
  40. package/config/crucible-ts/taxonomy/repository-categories.yaml +66 -0
  41. package/config/crucible-ts/terminal/v1.0.0/terminal-overrides-defaults.yaml +38 -0
  42. package/config/crucible-ts/web/branding/site-branding.yaml +21 -0
  43. package/config/crucible-ts/web/styling/site-styling.yaml +104 -0
  44. package/dist/appidentity/index.d.ts +304 -0
  45. package/dist/appidentity/index.js +5519 -0
  46. package/dist/appidentity/index.js.map +1 -0
  47. package/dist/config/index.d.ts +144 -0
  48. package/dist/config/index.js +5752 -0
  49. package/dist/config/index.js.map +1 -0
  50. package/dist/crucible/index.d.ts +78 -0
  51. package/dist/crucible/index.js +6038 -0
  52. package/dist/crucible/index.js.map +1 -0
  53. package/dist/docscribe/index.d.ts +110 -0
  54. package/dist/docscribe/index.js +682 -0
  55. package/dist/docscribe/index.js.map +1 -0
  56. package/dist/errors/index.d.ts +150 -0
  57. package/dist/errors/index.js +5583 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/foundry/index.d.ts +1557 -0
  60. package/dist/foundry/index.js +5474 -0
  61. package/dist/foundry/index.js.map +1 -0
  62. package/dist/foundry/similarity/index.d.ts +17 -0
  63. package/dist/foundry/similarity/index.js +136 -0
  64. package/dist/foundry/similarity/index.js.map +1 -0
  65. package/dist/fulhash/index.d.ts +82 -0
  66. package/dist/fulhash/index.js +374 -0
  67. package/dist/fulhash/index.js.map +1 -0
  68. package/dist/fulmen-error-B_kX8jSC.d.ts +309 -0
  69. package/dist/index.d.ts +14 -0
  70. package/dist/index.js +6197 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/logger-JU2jYitA.d.ts +171 -0
  73. package/dist/logging/index.d.ts +198 -0
  74. package/dist/logging/index.js +578 -0
  75. package/dist/logging/index.js.map +1 -0
  76. package/dist/pathfinder/index.d.ts +532 -0
  77. package/dist/pathfinder/index.js +6750 -0
  78. package/dist/pathfinder/index.js.map +1 -0
  79. package/dist/registry-x1-Qi_Tz.d.ts +349 -0
  80. package/dist/schema/index.d.ts +388 -0
  81. package/dist/schema/index.js +5522 -0
  82. package/dist/schema/index.js.map +1 -0
  83. package/dist/suggest-CLqjLZ5L.d.ts +168 -0
  84. package/dist/telemetry/index.d.ts +161 -0
  85. package/dist/telemetry/index.js +5610 -0
  86. package/dist/telemetry/index.js.map +1 -0
  87. package/dist/types-B_WtvQbS.d.ts +214 -0
  88. package/package.json +130 -0
  89. package/schemas/crucible-ts/api/http/v1.0.0/README.md +22 -0
  90. package/schemas/crucible-ts/api/http/v1.0.0/error-response.schema.json +54 -0
  91. package/schemas/crucible-ts/api/http/v1.0.0/health-response.schema.json +70 -0
  92. package/schemas/crucible-ts/api/http/v1.0.0/success-response.schema.json +51 -0
  93. package/schemas/crucible-ts/api/http/v1.0.0/version-response.schema.json +61 -0
  94. package/schemas/crucible-ts/ascii/v1.0.0/README.md +69 -0
  95. package/schemas/crucible-ts/ascii/v1.0.0/box-chars.schema.json +60 -0
  96. package/schemas/crucible-ts/ascii/v1.0.0/string-analysis.schema.json +45 -0
  97. package/schemas/crucible-ts/assessment/README.md +25 -0
  98. package/schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json +60 -0
  99. package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/README.md +11 -0
  100. package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json +61 -0
  101. package/schemas/crucible-ts/config/goneat/README.md +60 -0
  102. package/schemas/crucible-ts/config/goneat/v1.0.0/dates.yaml +234 -0
  103. package/schemas/crucible-ts/config/goneat/v1.0.0/goneat-config.yaml +344 -0
  104. package/schemas/crucible-ts/config/goneat/v1.0.0/lifecycle-phase.json +20 -0
  105. package/schemas/crucible-ts/config/goneat/v1.0.0/release-phase.json +17 -0
  106. package/schemas/crucible-ts/config/goneat/v1.0.0/security-policy.yaml +178 -0
  107. package/schemas/crucible-ts/config/goneat/v1.0.0/version-policy.schema.yaml +205 -0
  108. package/schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json +143 -0
  109. package/schemas/crucible-ts/config/repository/v1.0.0/lifecycle-phase.json +20 -0
  110. package/schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json +288 -0
  111. package/schemas/crucible-ts/config/standards/v1.0.0/adr-adoption-status.json +60 -0
  112. package/schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json +225 -0
  113. package/schemas/crucible-ts/config/standards/v1.0.0/adr-lifecycle-status.json +62 -0
  114. package/schemas/crucible-ts/config/sync-consumer-config.yaml +51 -0
  115. package/schemas/crucible-ts/config/sync-keys.schema.yaml +37 -0
  116. package/schemas/crucible-ts/content/README.md +19 -0
  117. package/schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/README.md +13 -0
  118. package/schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/binary-embed-manifest.schema.yaml +36 -0
  119. package/schemas/crucible-ts/content/embed-manifest/v1.1.0/README.md +13 -0
  120. package/schemas/crucible-ts/content/embed-manifest/v1.1.0/embed-manifest.schema.yaml +78 -0
  121. package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/README.md +200 -0
  122. package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json +128 -0
  123. package/schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json +75 -0
  124. package/schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json +58 -0
  125. package/schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json +300 -0
  126. package/schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json +74 -0
  127. package/schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json +60 -0
  128. package/schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json +97 -0
  129. package/schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json +457 -0
  130. package/schemas/crucible-ts/library/foundry/v1.0.0/similarity.schema.json +260 -0
  131. package/schemas/crucible-ts/library/foundry/v2.0.0/similarity.schema.json +558 -0
  132. package/schemas/crucible-ts/library/fulhash/v1.0.0/README.md +6 -0
  133. package/schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json +8 -0
  134. package/schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json +100 -0
  135. package/schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json +227 -0
  136. package/schemas/crucible-ts/library/module-manifest/v1.0.0/README.md +31 -0
  137. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +132 -0
  138. package/schemas/crucible-ts/meta/README.md +23 -0
  139. package/schemas/crucible-ts/meta/draft-07/schema.json +245 -0
  140. package/schemas/crucible-ts/meta/draft-2020-12/meta/applicator.json +81 -0
  141. package/schemas/crucible-ts/meta/draft-2020-12/meta/content.json +21 -0
  142. package/schemas/crucible-ts/meta/draft-2020-12/meta/core.json +64 -0
  143. package/schemas/crucible-ts/meta/draft-2020-12/meta/format-annotation.json +15 -0
  144. package/schemas/crucible-ts/meta/draft-2020-12/meta/meta-data.json +35 -0
  145. package/schemas/crucible-ts/meta/draft-2020-12/meta/unevaluated.json +18 -0
  146. package/schemas/crucible-ts/meta/draft-2020-12/meta/validation.json +119 -0
  147. package/schemas/crucible-ts/meta/draft-2020-12/schema.json +80 -0
  148. package/schemas/crucible-ts/observability/logging/v1.0.0/README.md +82 -0
  149. package/schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json +140 -0
  150. package/schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json +179 -0
  151. package/schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json +518 -0
  152. package/schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json +225 -0
  153. package/schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json +181 -0
  154. package/schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json +38 -0
  155. package/schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json +86 -0
  156. package/schemas/crucible-ts/pathfinder/v1.0.0/README.md +104 -0
  157. package/schemas/crucible-ts/pathfinder/v1.0.0/error-response.schema.json +35 -0
  158. package/schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json +49 -0
  159. package/schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json +91 -0
  160. package/schemas/crucible-ts/pathfinder/v1.0.0/metadata.schema.json +61 -0
  161. package/schemas/crucible-ts/pathfinder/v1.0.0/path-constraint.schema.json +50 -0
  162. package/schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json +40 -0
  163. package/schemas/crucible-ts/protocol/http/v1.0.0/README.md +22 -0
  164. package/schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json +54 -0
  165. package/schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json +70 -0
  166. package/schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json +51 -0
  167. package/schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json +61 -0
  168. package/schemas/crucible-ts/schema-validation/v1.0.0/README.md +65 -0
  169. package/schemas/crucible-ts/schema-validation/v1.0.0/schema-registry.schema.json +31 -0
  170. package/schemas/crucible-ts/schema-validation/v1.0.0/validator-config.schema.json +36 -0
  171. package/schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json +199 -0
  172. package/schemas/crucible-ts/taxonomy/language/v1.0.0/README.md +30 -0
  173. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json +17 -0
  174. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json +44 -0
  175. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/README.md +31 -0
  176. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json +19 -0
  177. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json +39 -0
  178. package/schemas/crucible-ts/terminal/v1.0.0/README.md +45 -0
  179. package/schemas/crucible-ts/terminal/v1.0.0/catalog/apple-terminal.yaml +2 -0
  180. package/schemas/crucible-ts/terminal/v1.0.0/catalog/ghostty.yaml +13 -0
  181. package/schemas/crucible-ts/terminal/v1.0.0/catalog/iterm2.yaml +13 -0
  182. package/schemas/crucible-ts/terminal/v1.0.0/schema.json +40 -0
  183. package/schemas/crucible-ts/tooling/external-tools/v1.0.0/README.md +164 -0
  184. package/schemas/crucible-ts/tooling/external-tools/v1.0.0/external-tools-manifest.schema.yaml +83 -0
  185. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/README.md +177 -0
  186. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/goneat-tools-config.schema.yaml +146 -0
  187. package/schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json +79 -0
  188. package/schemas/crucible-ts/web/styling/v1.0.0/site-styling.schema.json +321 -0
@@ -0,0 +1,321 @@
1
+ {
2
+ "$id": "https://schemas.fulmenhq.dev/web/styling/v1.0.0/site-styling.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "title": "Fulmen Site Styling",
6
+ "description": "Standardized styling configuration for Fulmen web templates, including palettes, typography, and icons",
7
+ "properties": {
8
+ "themes": {
9
+ "type": "object",
10
+ "description": "Light and dark mode palettes",
11
+ "properties": {
12
+ "light": {
13
+ "type": "object",
14
+ "description": "Light theme color palette",
15
+ "properties": {
16
+ "background": {
17
+ "type": "string",
18
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
19
+ "description": "Primary background (hex)"
20
+ },
21
+ "foreground": {
22
+ "type": "string",
23
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
24
+ "description": "Primary text (hex)"
25
+ },
26
+ "accent": {
27
+ "type": "string",
28
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
29
+ "description": "Accent color (hex)"
30
+ },
31
+ "success": {
32
+ "type": "string",
33
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
34
+ "description": "Success indicator (green, hex)"
35
+ },
36
+ "failure": {
37
+ "type": "string",
38
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
39
+ "description": "Failure/error (red, hex)"
40
+ },
41
+ "warning": {
42
+ "type": "string",
43
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
44
+ "description": "Warning (yellow/orange, hex)"
45
+ },
46
+ "critical": {
47
+ "type": "string",
48
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
49
+ "description": "Critical/alert (purple, hex)"
50
+ },
51
+ "info": {
52
+ "type": "string",
53
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
54
+ "description": "Info callout (blue, hex, optional)"
55
+ },
56
+ "note": {
57
+ "type": "string",
58
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
59
+ "description": "Note callout (cyan/teal, hex, optional)"
60
+ },
61
+ "caution": {
62
+ "type": "string",
63
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
64
+ "description": "Caution callout (softer orange, hex, optional)"
65
+ },
66
+ "categorical": {
67
+ "type": "array",
68
+ "description": "Categorical colors for charts/graphs (5-12 accessible colors)",
69
+ "items": {
70
+ "type": "string",
71
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"
72
+ },
73
+ "minItems": 5,
74
+ "maxItems": 12,
75
+ "uniqueItems": true
76
+ }
77
+ },
78
+ "required": [
79
+ "background",
80
+ "foreground",
81
+ "accent",
82
+ "success",
83
+ "failure",
84
+ "warning",
85
+ "critical"
86
+ ],
87
+ "additionalProperties": false
88
+ },
89
+ "dark": {
90
+ "$ref": "#/properties/themes/properties/light"
91
+ }
92
+ },
93
+ "required": [
94
+ "light",
95
+ "dark"
96
+ ],
97
+ "additionalProperties": false
98
+ },
99
+ "typography": {
100
+ "type": "object",
101
+ "description": "Font families and embedding options",
102
+ "properties": {
103
+ "fonts": {
104
+ "type": "object",
105
+ "description": "Font family definitions",
106
+ "properties": {
107
+ "body": {
108
+ "type": "object",
109
+ "description": "Body text font",
110
+ "properties": {
111
+ "family": {
112
+ "type": "string",
113
+ "description": "CSS font-family string (e.g., 'Inter, sans-serif')"
114
+ },
115
+ "src": {
116
+ "type": "string",
117
+ "format": "uri-reference",
118
+ "description": "Path/URL to font file (WOFF2 in public/fonts/, or external URL)"
119
+ },
120
+ "weights": {
121
+ "type": "array",
122
+ "items": {
123
+ "type": "number",
124
+ "minimum": 100,
125
+ "maximum": 900
126
+ },
127
+ "description": "Supported weights (e.g., [400, 700])",
128
+ "minItems": 1
129
+ },
130
+ "size": {
131
+ "type": "object",
132
+ "properties": {
133
+ "base": {
134
+ "type": "string",
135
+ "pattern": "^[0-9]+(\\.[0-9]+)?(px|rem|em)$",
136
+ "description": "Base font size"
137
+ }
138
+ },
139
+ "required": [
140
+ "base"
141
+ ],
142
+ "additionalProperties": false
143
+ }
144
+ },
145
+ "required": [
146
+ "family",
147
+ "src"
148
+ ],
149
+ "additionalProperties": false
150
+ },
151
+ "code": {
152
+ "$ref": "#/properties/typography/properties/fonts/properties/body"
153
+ },
154
+ "heading": {
155
+ "$ref": "#/properties/typography/properties/fonts/properties/body"
156
+ }
157
+ },
158
+ "required": [
159
+ "body",
160
+ "code"
161
+ ],
162
+ "additionalProperties": false
163
+ },
164
+ "embed": {
165
+ "type": "boolean",
166
+ "default": true,
167
+ "description": "Embed fonts at build-time (true: WOFF2 from src; false: URL/CDN)"
168
+ },
169
+ "lineHeight": {
170
+ "type": "number",
171
+ "minimum": 1.2,
172
+ "maximum": 2.0,
173
+ "default": 1.5,
174
+ "description": "Base line-height"
175
+ }
176
+ },
177
+ "required": [
178
+ "fonts"
179
+ ],
180
+ "additionalProperties": false
181
+ },
182
+ "icons": {
183
+ "type": "object",
184
+ "description": "Icon configuration",
185
+ "properties": {
186
+ "registry": {
187
+ "type": "string",
188
+ "enum": [
189
+ "mdi",
190
+ "heroicons",
191
+ "lucide",
192
+ "tabler"
193
+ ],
194
+ "default": "mdi",
195
+ "description": "Icon set registry"
196
+ },
197
+ "prefix": {
198
+ "type": "string",
199
+ "default": "codex-",
200
+ "description": "CSS class prefix"
201
+ },
202
+ "size": {
203
+ "type": "number",
204
+ "default": 24,
205
+ "minimum": 16,
206
+ "maximum": 48,
207
+ "description": "Default size (px)"
208
+ },
209
+ "custom": {
210
+ "type": "array",
211
+ "items": {
212
+ "type": "object",
213
+ "properties": {
214
+ "name": {
215
+ "type": "string",
216
+ "description": "Icon name"
217
+ },
218
+ "src": {
219
+ "type": "string",
220
+ "format": "uri-reference",
221
+ "description": "Path to SVG in public/icons/"
222
+ },
223
+ "size": {
224
+ "type": "number",
225
+ "default": 24,
226
+ "description": "Icon size in pixels"
227
+ }
228
+ },
229
+ "required": [
230
+ "name",
231
+ "src"
232
+ ],
233
+ "additionalProperties": false
234
+ },
235
+ "description": "Custom icons"
236
+ },
237
+ "palette": {
238
+ "type": "object",
239
+ "description": "Icon fill colors for light/dark modes",
240
+ "properties": {
241
+ "light": {
242
+ "type": "string",
243
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
244
+ "description": "Fill color for light mode"
245
+ },
246
+ "dark": {
247
+ "type": "string",
248
+ "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
249
+ "description": "Fill color for dark mode"
250
+ }
251
+ },
252
+ "required": [
253
+ "light",
254
+ "dark"
255
+ ],
256
+ "additionalProperties": false
257
+ }
258
+ },
259
+ "required": [
260
+ "registry"
261
+ ],
262
+ "additionalProperties": false
263
+ },
264
+ "a11y": {
265
+ "type": "object",
266
+ "description": "Accessibility constraints for colors (WCAG 2.1 AA baseline; build-time validation)",
267
+ "properties": {
268
+ "minContrast": {
269
+ "type": "object",
270
+ "description": "Minimum contrast ratios for WCAG compliance",
271
+ "properties": {
272
+ "normal": {
273
+ "type": "number",
274
+ "minimum": 3.0,
275
+ "maximum": 21.0,
276
+ "default": 4.5,
277
+ "description": "Min ratio for normal text (AA: 4.5:1)"
278
+ },
279
+ "large": {
280
+ "type": "number",
281
+ "minimum": 2.0,
282
+ "maximum": 21.0,
283
+ "default": 3.0,
284
+ "description": "Min ratio for large text (AA: 3:1)"
285
+ },
286
+ "graphics": {
287
+ "type": "number",
288
+ "minimum": 3.0,
289
+ "maximum": 21.0,
290
+ "default": 3.0,
291
+ "description": "Min ratio for UI components/graphics"
292
+ }
293
+ },
294
+ "required": [
295
+ "normal",
296
+ "large"
297
+ ],
298
+ "additionalProperties": false
299
+ },
300
+ "level": {
301
+ "type": "string",
302
+ "enum": [
303
+ "AA",
304
+ "AAA"
305
+ ],
306
+ "default": "AA",
307
+ "description": "WCAG conformance level (build enforces ratios)"
308
+ }
309
+ },
310
+ "required": [
311
+ "minContrast"
312
+ ],
313
+ "additionalProperties": false
314
+ }
315
+ },
316
+ "required": [
317
+ "themes",
318
+ "typography"
319
+ ],
320
+ "additionalProperties": false
321
+ }