@supersoniks/concorde 5.1.2 → 5.1.3-immutable.2

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 (497) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +1 -1
  2. package/.claude/skills +1 -0
  3. package/.github/workflows/ci.yml +21 -0
  4. package/.github-export-ignore +30 -0
  5. package/CONTRIBUTING.md +59 -0
  6. package/DEV.md +54 -0
  7. package/LICENSE +21 -0
  8. package/OPEN_SOURCE_CHECKPOINT.md +133 -0
  9. package/README.md +1 -1
  10. package/ai/README.md +29 -41
  11. package/ai/skills/concorde/SKILL.md +54 -324
  12. package/ai/skills/concorde/rules/composition.md +32 -0
  13. package/ai/skills/concorde/rules/data.md +47 -0
  14. package/ai/skills/concorde/rules/http.md +25 -0
  15. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  16. package/ai/skills/concorde/rules/styling.md +46 -0
  17. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  18. package/build-infos.json +1 -1
  19. package/concorde-core.bundle.js +177 -177
  20. package/concorde-core.es.js +5183 -5018
  21. package/custom-elements-manifest.public.config.mjs +8 -0
  22. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11722 -8868
  23. package/dist/concorde-core.bundle.js +177 -177
  24. package/dist/concorde-core.es.js +5183 -5018
  25. package/dist/docs-mock-api-sw.js +58 -223
  26. package/dist/docs-mock-api-sw.js.map +4 -4
  27. package/dist/img/og-concorde.jpg +0 -0
  28. package/dist/robots.txt +11 -10
  29. package/docs/assets/index-CD4WyL6o.css +1 -0
  30. package/docs/assets/index-D_alEsng.js +12122 -0
  31. package/docs/crawl/core/components/functional/date/date.html +190 -0
  32. package/docs/crawl/core/components/functional/fetch/fetch.html +109 -0
  33. package/docs/crawl/core/components/functional/if/if.html +27 -0
  34. package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
  35. package/docs/crawl/core/components/functional/list/list.html +70 -0
  36. package/docs/crawl/core/components/functional/mix/mix.html +45 -0
  37. package/docs/crawl/core/components/functional/queue/queue.html +96 -0
  38. package/docs/crawl/core/components/functional/router/router.html +106 -0
  39. package/docs/{core → crawl/core}/components/functional/sdui/sdui-extension-points.html +8 -9
  40. package/docs/crawl/core/components/functional/sdui/sdui.html +368 -0
  41. package/docs/crawl/core/components/functional/states/states.html +66 -0
  42. package/docs/crawl/core/components/functional/submit/submit.html +160 -0
  43. package/docs/{core → crawl/core}/components/functional/subscriber/subscriber.html +5 -6
  44. package/docs/crawl/core/components/functional/value/value.html +51 -0
  45. package/docs/{core → crawl/core}/components/ui/alert/alert.html +63 -53
  46. package/docs/{core → crawl/core}/components/ui/alert-messages/alert-messages.html +5 -6
  47. package/docs/{core → crawl/core}/components/ui/badge/badge.html +33 -33
  48. package/docs/crawl/core/components/ui/button/button.html +150 -0
  49. package/docs/crawl/core/components/ui/captcha/captcha.html +112 -0
  50. package/docs/{core → crawl/core}/components/ui/card/card.html +11 -12
  51. package/docs/{core → crawl/core}/components/ui/divider/divider.html +14 -14
  52. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +73 -0
  53. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +266 -0
  54. package/docs/{core → crawl/core}/components/ui/form/form-actions/form-actions.html +23 -23
  55. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +121 -0
  56. package/docs/crawl/core/components/ui/form/input/input.html +109 -0
  57. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +38 -0
  58. package/docs/crawl/core/components/ui/form/radio/radio.html +56 -0
  59. package/docs/crawl/core/components/ui/form/select/select.html +73 -0
  60. package/docs/crawl/core/components/ui/form/switch/switch.html +56 -0
  61. package/docs/crawl/core/components/ui/form/textarea/textarea.html +59 -0
  62. package/docs/crawl/core/components/ui/group/group.html +104 -0
  63. package/docs/{core → crawl/core}/components/ui/icon/icon.html +9 -10
  64. package/docs/crawl/core/components/ui/image/image.html +298 -0
  65. package/docs/{core → crawl/core}/components/ui/link/link.html +11 -12
  66. package/docs/crawl/core/components/ui/loader/loader.html +124 -0
  67. package/docs/{core → crawl/core}/components/ui/menu/menu.html +33 -34
  68. package/docs/crawl/core/components/ui/modal/modal.html +342 -0
  69. package/docs/crawl/core/components/ui/pop/pop.html +296 -0
  70. package/docs/{core → crawl/core}/components/ui/progress/progress.html +7 -8
  71. package/docs/crawl/core/components/ui/table/table.html +545 -0
  72. package/docs/crawl/core/components/ui/theme/theme.html +131 -0
  73. package/docs/crawl/core/components/ui/toast/toast.html +233 -0
  74. package/docs/crawl/core/components/ui/tooltip/tooltip.html +140 -0
  75. package/docs/{docs/getting-started → crawl/docs/_core-concept}/dataFlow.html +29 -26
  76. package/docs/crawl/docs/_core-concept/overview.html +66 -0
  77. package/docs/crawl/docs/_core-concept/subscriber.html +75 -0
  78. package/docs/crawl/docs/_decorators/ancestor-attribute.html +117 -0
  79. package/docs/crawl/docs/_decorators/auto-subscribe.html +202 -0
  80. package/docs/crawl/docs/_decorators/bind.html +141 -0
  81. package/docs/crawl/docs/_decorators/get.html +149 -0
  82. package/docs/crawl/docs/_decorators/handle.html +165 -0
  83. package/docs/crawl/docs/_decorators/on-assign.html +355 -0
  84. package/docs/crawl/docs/_decorators/patch.html +78 -0
  85. package/docs/crawl/docs/_decorators/post.html +139 -0
  86. package/docs/crawl/docs/_decorators/publish.html +61 -0
  87. package/docs/crawl/docs/_decorators/put.html +78 -0
  88. package/docs/crawl/docs/_decorators/subscribe.html +109 -0
  89. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +137 -0
  90. package/docs/crawl/docs/_directives/sub.html +93 -0
  91. package/docs/{docs/getting-started → crawl/docs/_getting-started}/ai-agents.html +11 -12
  92. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +100 -0
  93. package/docs/crawl/docs/_getting-started/concorde-outside.html +58 -0
  94. package/docs/{docs/getting-started → crawl/docs/_getting-started}/create-a-component.html +14 -11
  95. package/docs/{docs/getting-started → crawl/docs/_getting-started}/my-first-component.html +22 -13
  96. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +110 -0
  97. package/docs/crawl/docs/_getting-started/pubsub.html +62 -0
  98. package/docs/crawl/docs/_getting-started/start.html +76 -0
  99. package/docs/{docs/getting-started → crawl/docs/_getting-started}/theming.html +9 -10
  100. package/docs/{docs/misc → crawl/docs/_misc}/api-configuration.html +18 -18
  101. package/docs/{docs/misc → crawl/docs/_misc}/dataProviderKey.html +11 -12
  102. package/docs/{docs/misc → crawl/docs/_misc}/docs-mock-api.html +28 -25
  103. package/docs/{docs/misc → crawl/docs/_misc}/dynamic-path.html +15 -16
  104. package/docs/{docs/misc → crawl/docs/_misc}/endpoint.html +15 -16
  105. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
  106. package/docs/{docs/misc → crawl/docs/_misc}/html-integration.html +15 -12
  107. package/docs/crawl/hubs/decorators.html +547 -0
  108. package/docs/crawl/hubs/form-components.html +381 -0
  109. package/docs/crawl/hubs/remote-data.html +452 -0
  110. package/docs/crawl/index.html +103 -0
  111. package/docs/docs-mock-api-sw.js +223 -58
  112. package/docs/docs-mock-api-sw.js.map +4 -4
  113. package/docs/index.html +68 -95
  114. package/docs/llms-full.txt +3610 -2231
  115. package/docs/llms.txt +86 -94
  116. package/docs/robots.txt +10 -11
  117. package/docs/sitemap.xml +84 -78
  118. package/docs/src/core/components/functional/date/date.md +231 -91
  119. package/docs/src/core/components/functional/fetch/fetch.md +83 -66
  120. package/docs/src/core/components/functional/if/if.md +3 -28
  121. package/docs/src/core/components/functional/jsonata/jsonata.md +37 -42
  122. package/docs/src/core/components/functional/list/list.md +43 -99
  123. package/docs/src/core/components/functional/mix/mix.md +26 -31
  124. package/docs/src/core/components/functional/queue/queue.md +61 -40
  125. package/docs/src/core/components/functional/router/router.md +65 -64
  126. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  127. package/docs/src/core/components/functional/sdui/component-catalog.json +1 -1
  128. package/docs/src/core/components/functional/sdui/example.json +86 -19
  129. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  130. package/docs/src/core/components/functional/sdui/sdui.md +358 -187
  131. package/docs/src/core/components/functional/states/states.md +61 -86
  132. package/docs/src/core/components/functional/submit/submit.md +72 -64
  133. package/docs/src/core/components/functional/value/value.md +22 -34
  134. package/docs/src/core/components/ui/alert/alert.md +58 -48
  135. package/docs/src/core/components/ui/badge/badge.md +34 -27
  136. package/docs/src/core/components/ui/button/button.md +106 -139
  137. package/docs/src/core/components/ui/captcha/captcha.md +32 -17
  138. package/docs/src/core/components/ui/card/card.md +6 -6
  139. package/docs/src/core/components/ui/divider/divider.md +11 -8
  140. package/docs/src/core/components/ui/form/checkbox/checkbox.md +42 -90
  141. package/docs/src/core/components/ui/form/fieldset/fieldset.md +75 -31
  142. package/docs/src/core/components/ui/form/form-actions/form-actions.md +16 -14
  143. package/docs/src/core/components/ui/form/form-layout/form-layout.md +29 -19
  144. package/docs/src/core/components/ui/form/input/input.md +95 -95
  145. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +29 -0
  146. package/docs/src/core/components/ui/form/radio/radio.md +34 -55
  147. package/docs/src/core/components/ui/form/select/select.md +45 -60
  148. package/docs/src/core/components/ui/form/switch/switch.md +34 -57
  149. package/docs/src/core/components/ui/form/textarea/textarea.md +38 -55
  150. package/docs/src/core/components/ui/group/group.md +33 -35
  151. package/docs/src/core/components/ui/icon/icon.md +4 -4
  152. package/docs/src/core/components/ui/image/image.md +107 -41
  153. package/docs/src/core/components/ui/link/link.md +6 -6
  154. package/docs/src/core/components/ui/loader/loader.md +55 -30
  155. package/docs/src/core/components/ui/menu/menu.md +27 -27
  156. package/docs/src/core/components/ui/modal/modal.md +96 -72
  157. package/docs/src/core/components/ui/pop/pop.md +158 -80
  158. package/docs/src/core/components/ui/progress/progress.md +2 -2
  159. package/docs/src/core/components/ui/table/table.md +255 -91
  160. package/docs/src/core/components/ui/theme/theme.md +36 -11
  161. package/docs/src/core/components/ui/toast/toast.md +117 -48
  162. package/docs/src/core/components/ui/tooltip/tooltip.md +62 -27
  163. package/docs/{docs/getting-started → src/docs/_core-concept}/dataFlow.md +18 -17
  164. package/docs/src/docs/_core-concept/overview.md +57 -0
  165. package/docs/src/docs/_core-concept/subscriber.md +75 -0
  166. package/docs/src/docs/_decorators/ancestor-attribute.md +128 -0
  167. package/docs/src/docs/_decorators/auto-subscribe.md +202 -0
  168. package/docs/src/docs/_decorators/bind.md +167 -0
  169. package/docs/src/docs/_decorators/get.md +162 -0
  170. package/docs/src/docs/_decorators/handle.md +175 -0
  171. package/docs/src/docs/_decorators/on-assign.md +390 -0
  172. package/docs/src/docs/_decorators/patch.md +70 -0
  173. package/docs/src/docs/_decorators/post.md +146 -0
  174. package/docs/src/docs/_decorators/publish.md +55 -0
  175. package/docs/src/docs/_decorators/put.md +70 -0
  176. package/docs/src/docs/_decorators/subscribe.md +100 -0
  177. package/docs/src/docs/_decorators/wait-for-ancestors.md +163 -0
  178. package/docs/src/docs/_directives/sub.md +91 -0
  179. package/docs/src/docs/{getting-started → _getting-started}/ai-agents.md +3 -3
  180. package/docs/src/docs/_getting-started/concorde-manual-install.md +133 -0
  181. package/docs/src/docs/_getting-started/concorde-outside.md +33 -0
  182. package/docs/{docs/getting-started → src/docs/_getting-started}/create-a-component.md +6 -3
  183. package/docs/src/docs/{getting-started → _getting-started}/my-first-component.md +14 -5
  184. package/docs/src/docs/_getting-started/my-first-subscriber.md +120 -0
  185. package/docs/src/docs/_getting-started/pubsub.md +37 -0
  186. package/docs/src/docs/{getting-started → _getting-started}/start.md +13 -1
  187. package/docs/src/docs/{getting-started → _getting-started}/theming.md +2 -2
  188. package/docs/src/docs/{misc → _misc}/api-configuration.md +12 -10
  189. package/docs/src/docs/{misc → _misc}/dataProviderKey.md +4 -4
  190. package/docs/{docs/misc → src/docs/_misc}/docs-mock-api.md +13 -12
  191. package/docs/{docs/misc → src/docs/_misc}/dynamic-path.md +8 -8
  192. package/docs/{docs/misc → src/docs/_misc}/endpoint.md +8 -8
  193. package/docs/src/docs/_misc/formelement-subscriber-removal.md +115 -0
  194. package/docs/{docs/misc → src/docs/_misc}/html-integration.md +5 -4
  195. package/docs/src/docs/search/docs-search.json +4375 -2420
  196. package/docs/src/tsconfig.declarations.json +22 -0
  197. package/docs/src/tsconfig.emit.json +23 -0
  198. package/docs/src/tsconfig.json +2 -23
  199. package/gitlab/job_github_mirror.sh +39 -0
  200. package/index.html +89 -0
  201. package/package.json +22 -4
  202. package/public/img/og-concorde.jpg +0 -0
  203. package/scripts/ai-init.mjs +104 -379
  204. package/scripts/ai-init.test.mjs +81 -239
  205. package/scripts/docs-markdown-vite-plugin.ts +11 -5
  206. package/scripts/docs-public-url.mjs +6 -0
  207. package/scripts/docs.htaccess +7 -0
  208. package/scripts/generate-cem.mjs +244 -0
  209. package/scripts/generate-cem.test.mjs +122 -0
  210. package/scripts/generate-crawl-docs.mjs +29 -5
  211. package/scripts/generate-sdui-catalog.mjs +11 -10
  212. package/scripts/github-export.mjs +150 -0
  213. package/scripts/post-build-docs.js +3 -0
  214. package/scripts/post-build.mjs +0 -0
  215. package/scripts/pre-publish.mjs +2 -1
  216. package/scripts/site-pages.mjs +212 -0
  217. package/scripts/site-pages.test.mjs +116 -0
  218. package/site-pages/about.md +22 -0
  219. package/site-pages/privacy.md +32 -0
  220. package/src/core/components/functional/date/date.md +1 -1
  221. package/src/core/components/functional/example/example.ts +3 -1
  222. package/src/core/components/functional/if/if.ts +0 -0
  223. package/src/core/components/functional/list/list.demo.ts +0 -0
  224. package/src/core/components/functional/list/list.md +6 -2
  225. package/src/core/components/functional/list/list.ts +17 -4
  226. package/src/core/components/functional/mix/mix.md +0 -0
  227. package/src/core/components/functional/router/router.demo.ts +0 -0
  228. package/src/core/components/functional/router/router.ts +0 -0
  229. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  230. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  231. package/src/core/components/functional/sdui/component-catalog.json +2 -2
  232. package/src/core/components/functional/sdui/example.json +0 -0
  233. package/src/core/components/functional/sdui/sdui-immutable.spec.ts +74 -0
  234. package/src/core/components/functional/sdui/sdui.ts +33 -8
  235. package/src/core/components/functional/sdui/types.ts +0 -0
  236. package/src/core/components/functional/states/states.ts +0 -0
  237. package/src/core/components/functional/submit/submit.spec.ts +60 -0
  238. package/src/core/components/functional/submit/submit.ts +6 -3
  239. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  240. package/src/core/components/functional/value/value.md +0 -0
  241. package/src/core/components/functional/value/value.ts +0 -0
  242. package/src/core/components/ui/_css/size.ts +0 -0
  243. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  244. package/src/core/components/ui/card/card.md +1 -1
  245. package/src/core/components/ui/form/input/input.md +19 -1
  246. package/src/core/components/ui/form/input/input.ts +8 -2
  247. package/src/core/components/ui/form/radio/radio.md +14 -0
  248. package/src/core/components/ui/image/image.md +17 -17
  249. package/src/core/components/ui/modal/modal.md +2 -2
  250. package/src/core/decorators/subscriber/bind.ts +9 -14
  251. package/src/core/decorators/subscriber/subscribe.ts +15 -9
  252. package/src/core/decorators/subscriber/subscribe.type-test.ts +14 -5
  253. package/src/core/mixins/Subscriber.ts +0 -0
  254. package/src/core/utils/DataBindObserver.ts +0 -0
  255. package/src/core/utils/Objects.ts +0 -0
  256. package/src/core/utils/PublisherProxy.ts +166 -125
  257. package/src/core/utils/deepReadonly.spec.ts +66 -0
  258. package/src/core/utils/deepReadonly.ts +71 -0
  259. package/src/core/utils/immutableValue.spec.ts +58 -0
  260. package/src/core/utils/immutableValue.ts +116 -0
  261. package/src/core/utils/nestedDotForm.spec.ts +88 -0
  262. package/src/core/utils/publisherImmutable.spec.ts +127 -0
  263. package/src/core/utils/route.ts +0 -0
  264. package/src/core/utils/strictGet.spec.ts +61 -0
  265. package/src/core/utils/strictGet.ts +102 -0
  266. package/src/css.d.ts +19 -0
  267. package/src/docs/components/docs-demo-sources.ts +3 -3
  268. package/src/docs/decorators/bind.md +23 -24
  269. package/src/docs/docs-location.spec.ts +10 -0
  270. package/src/docs/docs-location.ts +10 -0
  271. package/src/docs/example/decorators-demo-bind-demos.ts +11 -28
  272. package/src/docs/example/docs-toggle-demos.ts +1 -1
  273. package/src/docs/example/users.ts +0 -0
  274. package/src/docs/getting-started/ai-agents.md +51 -51
  275. package/src/docs/getting-started/dataFlow.md +2 -2
  276. package/src/docs/home/home.ts +3 -1
  277. package/src/docs/misc/publisher-get-immutability-docs-crawl.json +902 -0
  278. package/src/docs/misc/publisher-get-immutability-docs-recheck.json +13 -0
  279. package/src/docs/misc/publisher-get-immutability-study.md +229 -0
  280. package/src/docs/navigation/navigation.ts +5 -1
  281. package/src/docs/search/docs-search.json +358 -58
  282. package/src/docs/search/markdown-renderer.ts +6 -1
  283. package/src/docs/tailwind/css/docs/content.css +4 -5
  284. package/src/tsconfig.declarations.json +22 -0
  285. package/src/tsconfig.emit.json +23 -0
  286. package/src/tsconfig.json +53 -5
  287. package/src/tsconfig.tsbuildinfo +1 -1
  288. package/.taste-skill/after/desktop-fold.jpg +0 -0
  289. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  290. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  291. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  292. package/.taste-skill/after/mobile-fold.jpg +0 -0
  293. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  294. package/.taste-skill/after/report.json +0 -4103
  295. package/.taste-skill/after/tablet-fold.jpg +0 -0
  296. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  297. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  298. package/.taste-skill/before/desktop-fold.jpg +0 -0
  299. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  300. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  301. package/.taste-skill/before/mobile-fold.jpg +0 -0
  302. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  303. package/.taste-skill/before/report.json +0 -2556
  304. package/.taste-skill/before/tablet-fold.jpg +0 -0
  305. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  306. package/.taste-skill/direction.json +0 -510
  307. package/.taste-skill/notes.md +0 -84
  308. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  309. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  310. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  311. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  312. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  313. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  314. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  315. package/.taste-skill/prod/report.json +0 -1973
  316. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  317. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  318. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  319. package/AUDIT.md +0 -228
  320. package/PLAN-AMELIORATION.md +0 -220
  321. package/PLAN-DOCS-AGENTS.md +0 -80
  322. package/ai/AGENTS.md +0 -56
  323. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  324. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  325. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  326. package/ai/cursor/rules/concorde.mdc +0 -66
  327. package/ai/jetbrains/rules/concorde.md +0 -53
  328. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  329. package/ai/skills/concorde-imports/SKILL.md +0 -78
  330. package/ai/skills/concorde-menu/SKILL.md +0 -74
  331. package/ai/skills/concorde-scope/SKILL.md +0 -70
  332. package/ai/skills/concorde-theme/SKILL.md +0 -57
  333. package/docs/.htaccess +0 -75
  334. package/docs/404.html +0 -15
  335. package/docs/404.md +0 -5
  336. package/docs/assets/index-BgG6FFPt.js +0 -11765
  337. package/docs/assets/index-x89XINSG.css +0 -1
  338. package/docs/core/components/functional/date/date.html +0 -211
  339. package/docs/core/components/functional/date/date.md +0 -150
  340. package/docs/core/components/functional/fetch/fetch.html +0 -180
  341. package/docs/core/components/functional/fetch/fetch.md +0 -108
  342. package/docs/core/components/functional/if/if.html +0 -65
  343. package/docs/core/components/functional/if/if.md +0 -34
  344. package/docs/core/components/functional/jsonata/jsonata.html +0 -110
  345. package/docs/core/components/functional/jsonata/jsonata.md +0 -61
  346. package/docs/core/components/functional/list/list.html +0 -198
  347. package/docs/core/components/functional/list/list.md +0 -121
  348. package/docs/core/components/functional/mix/mix.html +0 -78
  349. package/docs/core/components/functional/mix/mix.md +0 -46
  350. package/docs/core/components/functional/queue/queue.html +0 -155
  351. package/docs/core/components/functional/queue/queue.md +0 -51
  352. package/docs/core/components/functional/router/router.html +0 -154
  353. package/docs/core/components/functional/router/router.md +0 -93
  354. package/docs/core/components/functional/sdui/sdui-extension-points.md +0 -94
  355. package/docs/core/components/functional/sdui/sdui.html +0 -397
  356. package/docs/core/components/functional/sdui/sdui.md +0 -307
  357. package/docs/core/components/functional/states/states.html +0 -141
  358. package/docs/core/components/functional/states/states.md +0 -112
  359. package/docs/core/components/functional/submit/submit.html +0 -178
  360. package/docs/core/components/functional/submit/submit.md +0 -106
  361. package/docs/core/components/functional/subscriber/subscriber.md +0 -91
  362. package/docs/core/components/functional/translation/translation.html +0 -60
  363. package/docs/core/components/functional/translation/translation.md +0 -38
  364. package/docs/core/components/functional/value/value.html +0 -81
  365. package/docs/core/components/functional/value/value.md +0 -47
  366. package/docs/core/components/ui/alert/alert.md +0 -186
  367. package/docs/core/components/ui/alert-messages/alert-messages.md +0 -85
  368. package/docs/core/components/ui/badge/badge.md +0 -181
  369. package/docs/core/components/ui/button/button.html +0 -309
  370. package/docs/core/components/ui/button/button.md +0 -216
  371. package/docs/core/components/ui/captcha/captcha.html +0 -80
  372. package/docs/core/components/ui/captcha/captcha.md +0 -56
  373. package/docs/core/components/ui/card/card.md +0 -215
  374. package/docs/core/components/ui/divider/divider.md +0 -126
  375. package/docs/core/components/ui/form/checkbox/checkbox.html +0 -200
  376. package/docs/core/components/ui/form/checkbox/checkbox.md +0 -125
  377. package/docs/core/components/ui/form/fieldset/fieldset.html +0 -238
  378. package/docs/core/components/ui/form/fieldset/fieldset.md +0 -161
  379. package/docs/core/components/ui/form/form-actions/form-actions.md +0 -98
  380. package/docs/core/components/ui/form/form-layout/form-layout.html +0 -115
  381. package/docs/core/components/ui/form/form-layout/form-layout.md +0 -109
  382. package/docs/core/components/ui/form/input/input.html +0 -235
  383. package/docs/core/components/ui/form/input/input.md +0 -142
  384. package/docs/core/components/ui/form/radio/radio.html +0 -144
  385. package/docs/core/components/ui/form/radio/radio.md +0 -78
  386. package/docs/core/components/ui/form/select/select.html +0 -178
  387. package/docs/core/components/ui/form/select/select.md +0 -86
  388. package/docs/core/components/ui/form/switch/switch.html +0 -146
  389. package/docs/core/components/ui/form/switch/switch.md +0 -80
  390. package/docs/core/components/ui/form/textarea/textarea.html +0 -162
  391. package/docs/core/components/ui/form/textarea/textarea.md +0 -82
  392. package/docs/core/components/ui/group/group.html +0 -113
  393. package/docs/core/components/ui/group/group.md +0 -77
  394. package/docs/core/components/ui/icon/icon.md +0 -214
  395. package/docs/core/components/ui/image/image.html +0 -194
  396. package/docs/core/components/ui/image/image.md +0 -167
  397. package/docs/core/components/ui/link/link.md +0 -81
  398. package/docs/core/components/ui/loader/loader.html +0 -114
  399. package/docs/core/components/ui/loader/loader.md +0 -87
  400. package/docs/core/components/ui/menu/menu.md +0 -370
  401. package/docs/core/components/ui/modal/modal.html +0 -324
  402. package/docs/core/components/ui/modal/modal.md +0 -211
  403. package/docs/core/components/ui/pop/pop.html +0 -250
  404. package/docs/core/components/ui/pop/pop.md +0 -216
  405. package/docs/core/components/ui/progress/progress.md +0 -109
  406. package/docs/core/components/ui/table/table.html +0 -333
  407. package/docs/core/components/ui/table/table.md +0 -267
  408. package/docs/core/components/ui/theme/theme.html +0 -116
  409. package/docs/core/components/ui/theme/theme.md +0 -97
  410. package/docs/core/components/ui/toast/toast.html +0 -185
  411. package/docs/core/components/ui/toast/toast.md +0 -147
  412. package/docs/core/components/ui/tooltip/tooltip.html +0 -112
  413. package/docs/core/components/ui/tooltip/tooltip.md +0 -89
  414. package/docs/docs/decorators/ancestor-attribute.html +0 -71
  415. package/docs/docs/decorators/ancestor-attribute.md +0 -59
  416. package/docs/docs/decorators/auto-subscribe.html +0 -61
  417. package/docs/docs/decorators/auto-subscribe.md +0 -40
  418. package/docs/docs/decorators/bind.html +0 -86
  419. package/docs/docs/decorators/bind.md +0 -77
  420. package/docs/docs/decorators/get.html +0 -166
  421. package/docs/docs/decorators/get.md +0 -160
  422. package/docs/docs/decorators/handle.html +0 -139
  423. package/docs/docs/decorators/handle.md +0 -119
  424. package/docs/docs/decorators/on-assign.html +0 -72
  425. package/docs/docs/decorators/on-assign.md +0 -63
  426. package/docs/docs/decorators/patch.html +0 -76
  427. package/docs/docs/decorators/patch.md +0 -44
  428. package/docs/docs/decorators/post.html +0 -150
  429. package/docs/docs/decorators/post.md +0 -134
  430. package/docs/docs/decorators/publish.html +0 -74
  431. package/docs/docs/decorators/publish.md +0 -56
  432. package/docs/docs/decorators/put.html +0 -83
  433. package/docs/docs/decorators/put.md +0 -51
  434. package/docs/docs/decorators/subscribe.html +0 -91
  435. package/docs/docs/decorators/subscribe.md +0 -87
  436. package/docs/docs/decorators/wait-for-ancestors.html +0 -82
  437. package/docs/docs/decorators/wait-for-ancestors.md +0 -76
  438. package/docs/docs/directives/sub.html +0 -79
  439. package/docs/docs/directives/sub.md +0 -75
  440. package/docs/docs/directives/t.html +0 -91
  441. package/docs/docs/directives/t.md +0 -73
  442. package/docs/docs/getting-started/ai-agents.md +0 -76
  443. package/docs/docs/getting-started/components.html +0 -27
  444. package/docs/docs/getting-started/components.md +0 -5
  445. package/docs/docs/getting-started/installation.html +0 -69
  446. package/docs/docs/getting-started/installation.md +0 -36
  447. package/docs/docs/getting-started/my-first-component.md +0 -227
  448. package/docs/docs/getting-started/start.html +0 -47
  449. package/docs/docs/getting-started/start.md +0 -35
  450. package/docs/docs/getting-started/theming.md +0 -253
  451. package/docs/docs/index.html +0 -99
  452. package/docs/docs/misc/api-configuration.md +0 -79
  453. package/docs/docs/misc/dataProviderKey.md +0 -168
  454. package/docs/hubs/decorators.html +0 -443
  455. package/docs/hubs/form-components.html +0 -404
  456. package/docs/hubs/remote-data.html +0 -371
  457. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  458. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  459. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  460. package/docs/img/archive/credits.json +0 -28
  461. package/docs/index.md +0 -22
  462. package/docs/src/core/components/functional/translation/translation.md +0 -38
  463. package/docs/src/docs/decorators/ancestor-attribute.md +0 -59
  464. package/docs/src/docs/decorators/auto-subscribe.md +0 -40
  465. package/docs/src/docs/decorators/bind.md +0 -77
  466. package/docs/src/docs/decorators/get.md +0 -160
  467. package/docs/src/docs/decorators/handle.md +0 -119
  468. package/docs/src/docs/decorators/on-assign.md +0 -63
  469. package/docs/src/docs/decorators/patch.md +0 -44
  470. package/docs/src/docs/decorators/post.md +0 -134
  471. package/docs/src/docs/decorators/publish.md +0 -56
  472. package/docs/src/docs/decorators/put.md +0 -51
  473. package/docs/src/docs/decorators/subscribe.md +0 -87
  474. package/docs/src/docs/decorators/wait-for-ancestors.md +0 -76
  475. package/docs/src/docs/directives/sub.md +0 -75
  476. package/docs/src/docs/directives/t.md +0 -73
  477. package/docs/src/docs/getting-started/components.md +0 -5
  478. package/docs/src/docs/getting-started/create-a-component.md +0 -136
  479. package/docs/src/docs/getting-started/dataFlow.md +0 -87
  480. package/docs/src/docs/getting-started/installation.md +0 -36
  481. package/docs/src/docs/misc/docs-mock-api.md +0 -62
  482. package/docs/src/docs/misc/dynamic-path.md +0 -71
  483. package/docs/src/docs/misc/endpoint.md +0 -45
  484. package/docs/src/docs/misc/html-integration.md +0 -14
  485. /package/{docs → dist}/img/concorde/plane_01.jpg +0 -0
  486. /package/{docs → dist}/img/concorde/plane_02.jpg +0 -0
  487. /package/{docs → dist}/img/concorde/plane_03.jpg +0 -0
  488. /package/{docs → dist}/img/concorde/plane_04.jpg +0 -0
  489. /package/{docs → dist}/img/concorde/plane_05.jpg +0 -0
  490. /package/{docs → dist}/img/concorde/plane_06.jpg +0 -0
  491. /package/{docs → dist}/img/concorde/plane_07.jpg +0 -0
  492. /package/{docs → dist}/img/concorde/plane_08.jpg +0 -0
  493. /package/{docs → dist}/img/concorde/plane_09.jpg +0 -0
  494. /package/{docs → dist}/img/concorde/plane_10.jpg +0 -0
  495. /package/{docs → dist}/img/concorde/plane_11.jpg +0 -0
  496. /package/{docs → dist}/img/concorde/plane_12.jpg +0 -0
  497. /package/{docs → dist}/img/concorde/plane_13.jpg +0 -0
@@ -1,2556 +0,0 @@
1
- {
2
- "url": "http://localhost:3010/",
3
- "at": "2026-10-25T15:52:24.371Z",
4
- "allow": [],
5
- "viewports": [
6
- {
7
- "width": 1440,
8
- "height": 900,
9
- "load": "load",
10
- "screens": 5,
11
- "filled": [
12
- 0.38,
13
- 0.13,
14
- 0.11,
15
- 0.13,
16
- 0.04
17
- ],
18
- "motion": {
19
- "elements": 33,
20
- "css": 19,
21
- "transitions": 14,
22
- "scripted": 0,
23
- "videos": 0,
24
- "playingVideos": 0
25
- },
26
- "metrics": {
27
- "viewport": {
28
- "w": 1440,
29
- "h": 900
30
- },
31
- "page": {
32
- "height": 4570,
33
- "screens": 5.1,
34
- "words": 366,
35
- "img": 0,
36
- "video": 0,
37
- "canvas": 0,
38
- "svg": 0,
39
- "sections": 6,
40
- "horizontalOverflow": 0,
41
- "overflowCulprits": [],
42
- "uiFragments": 0,
43
- "uiAbuse": false,
44
- "realPictures": 0,
45
- "videoCount": 0,
46
- "uiPictures": 0,
47
- "pictureSamples": [],
48
- "blendText": 0,
49
- "sideScrollers": 0,
50
- "brokenImages": [],
51
- "emoji": [
52
- "✓"
53
- ],
54
- "videosNoPoster": 0
55
- },
56
- "hero": {
57
- "text": "2.04",
58
- "words": 1,
59
- "chars": 4,
60
- "lines": 1,
61
- "size": 120,
62
- "vw": 8.3,
63
- "font": "ClashGrotesk-Variable",
64
- "weight": 500,
65
- "tracking": -0.04,
66
- "leading": 0.8,
67
- "upper": false,
68
- "italic": false,
69
- "mono": false,
70
- "align": "left",
71
- "position": "right",
72
- "widthRatio": 0.16,
73
- "top": 607,
74
- "tag": "div",
75
- "kind": "heading"
76
- },
77
- "h1": {
78
- "text": "webcomponents for scoped consistent shareable user interfaces",
79
- "words": 7,
80
- "lines": 3,
81
- "size": 72,
82
- "font": "ClashGrotesk-Variable"
83
- },
84
- "headings": [
85
- {
86
- "text": "webcomponents for scoped consistent shareable user interfaces",
87
- "words": 7,
88
- "chars": 61,
89
- "lines": 3,
90
- "size": 72,
91
- "vw": 5,
92
- "font": "ClashGrotesk-Variable",
93
- "weight": 400,
94
- "tracking": 0,
95
- "leading": 1.02,
96
- "upper": false,
97
- "italic": false,
98
- "mono": false,
99
- "align": "left",
100
- "position": "left",
101
- "widthRatio": 0.49,
102
- "top": 208,
103
- "tag": "h1",
104
- "kind": "heading"
105
- },
106
- {
107
- "text": "2.04",
108
- "words": 1,
109
- "chars": 4,
110
- "lines": 1,
111
- "size": 120,
112
- "vw": 8.3,
113
- "font": "ClashGrotesk-Variable",
114
- "weight": 500,
115
- "tracking": -0.04,
116
- "leading": 0.8,
117
- "upper": false,
118
- "italic": false,
119
- "mono": false,
120
- "align": "left",
121
- "position": "right",
122
- "widthRatio": 0.16,
123
- "top": 607,
124
- "tag": "div",
125
- "kind": "heading"
126
- },
127
- {
128
- "text": "Write HTML. Get an app.",
129
- "words": 5,
130
- "chars": 23,
131
- "lines": 1,
132
- "size": 60,
133
- "vw": 4.2,
134
- "font": "ClashGrotesk-Variable",
135
- "weight": 400,
136
- "tracking": 0,
137
- "leading": 1,
138
- "upper": false,
139
- "italic": false,
140
- "mono": false,
141
- "align": "left",
142
- "position": "left",
143
- "widthRatio": 0.53,
144
- "top": 1026,
145
- "tag": "h2",
146
- "kind": "heading"
147
- },
148
- {
149
- "text": "State that flows through markup",
150
- "words": 5,
151
- "chars": 31,
152
- "lines": 2,
153
- "size": 48,
154
- "vw": 3.3,
155
- "font": "ClashGrotesk-Variable",
156
- "weight": 400,
157
- "tracking": 0,
158
- "leading": 1,
159
- "upper": false,
160
- "italic": false,
161
- "mono": false,
162
- "align": "left",
163
- "position": "left",
164
- "widthRatio": 0.4,
165
- "top": 2570,
166
- "tag": "h2",
167
- "kind": "heading"
168
- },
169
- {
170
- "text": "Built for 100 ticketing sites at once",
171
- "words": 7,
172
- "chars": 37,
173
- "lines": 2,
174
- "size": 48,
175
- "vw": 3.3,
176
- "font": "ClashGrotesk-Variable",
177
- "weight": 400,
178
- "tracking": 0,
179
- "leading": 1,
180
- "upper": false,
181
- "italic": false,
182
- "mono": false,
183
- "align": "left",
184
- "position": "left",
185
- "widthRatio": 0.46,
186
- "top": 3266,
187
- "tag": "h2",
188
- "kind": "heading"
189
- },
190
- {
191
- "text": "100",
192
- "words": 1,
193
- "chars": 3,
194
- "lines": 1,
195
- "size": 60,
196
- "vw": 4.2,
197
- "font": "ClashGrotesk-Variable",
198
- "weight": 400,
199
- "tracking": 0,
200
- "leading": 1,
201
- "upper": false,
202
- "italic": false,
203
- "mono": false,
204
- "align": "center",
205
- "position": "right",
206
- "widthRatio": 0.11,
207
- "top": 3318,
208
- "tag": "div",
209
- "kind": "heading"
210
- },
211
- {
212
- "text": "35+",
213
- "words": 1,
214
- "chars": 3,
215
- "lines": 1,
216
- "size": 60,
217
- "vw": 4.2,
218
- "font": "ClashGrotesk-Variable",
219
- "weight": 400,
220
- "tracking": 0,
221
- "leading": 1,
222
- "upper": false,
223
- "italic": false,
224
- "mono": false,
225
- "align": "center",
226
- "position": "right",
227
- "widthRatio": 0.11,
228
- "top": 3318,
229
- "tag": "div",
230
- "kind": "heading"
231
- },
232
- {
233
- "text": "0",
234
- "words": 1,
235
- "chars": 1,
236
- "lines": 1,
237
- "size": 60,
238
- "vw": 4.2,
239
- "font": "ClashGrotesk-Variable",
240
- "weight": 400,
241
- "tracking": 0,
242
- "leading": 1,
243
- "upper": false,
244
- "italic": false,
245
- "mono": false,
246
- "align": "center",
247
- "position": "right",
248
- "widthRatio": 0.11,
249
- "top": 3318,
250
- "tag": "div",
251
- "kind": "heading"
252
- },
253
- {
254
- "text": "Ready for take-off?",
255
- "words": 3,
256
- "chars": 19,
257
- "lines": 1,
258
- "size": 60,
259
- "vw": 4.2,
260
- "font": "ClashGrotesk-Variable",
261
- "weight": 400,
262
- "tracking": 0,
263
- "leading": 1,
264
- "upper": false,
265
- "italic": false,
266
- "mono": false,
267
- "align": "center",
268
- "position": "center",
269
- "widthRatio": 0.94,
270
- "top": 3628,
271
- "tag": "h2",
272
- "kind": "heading"
273
- }
274
- ],
275
- "headingSummary": {
276
- "count": 9,
277
- "maxLines": 3,
278
- "over2Lines": 1,
279
- "statements": 0,
280
- "centered": 4,
281
- "medianWords": 5,
282
- "mixedFontHeadings": 0
283
- },
284
- "type": {
285
- "families": [
286
- {
287
- "family": "Arial",
288
- "share": 0.48,
289
- "mono": false
290
- },
291
- {
292
- "family": "ClashGrotesk-Variable",
293
- "share": 0.43,
294
- "mono": false
295
- },
296
- {
297
- "family": "ui-monospace",
298
- "share": 0.09,
299
- "mono": false
300
- }
301
- ],
302
- "familyCount": 3,
303
- "sizes": [
304
- 11,
305
- 13,
306
- 14,
307
- 16,
308
- 18,
309
- 20,
310
- 24,
311
- 48,
312
- 60,
313
- 72,
314
- 120
315
- ],
316
- "sizeCount": 11,
317
- "notLoaded": [],
318
- "body": {
319
- "font": "Arial",
320
- "size": 18,
321
- "leading": 1.5,
322
- "weight": 400,
323
- "tracking": 0,
324
- "contrast": 6.8
325
- },
326
- "measureChars": 71,
327
- "max": {
328
- "size": 120,
329
- "vw": 8.3,
330
- "font": "ClashGrotesk-Variable",
331
- "text": "2.04"
332
- },
333
- "monoShare": 0.09,
334
- "monoProseShare": 0.09,
335
- "monoFamilies": [
336
- "ui-monospace"
337
- ],
338
- "monoSamples": [
339
- "Mach",
340
- "CDG — JFK",
341
- "FL 600",
342
- "3 h 30",
343
- "> add a newsletter signup",
344
- "+ <div formDataProvider=\"newsletter\">"
345
- ],
346
- "microLabels": 4,
347
- "microLabelShare": 0.011,
348
- "microSamples": [
349
- "Mach",
350
- "CDG — JFK",
351
- "FL 600",
352
- "3 h 30"
353
- ],
354
- "upperShare": 0.02,
355
- "centerShare": 0.06,
356
- "smallText": 5
357
- },
358
- "eyebrows": [
359
- {
360
- "text": "v5.1",
361
- "above": "webcomponents for scoped consistent shar",
362
- "upper": false,
363
- "tracked": false,
364
- "mono": false,
365
- "pill": true,
366
- "size": 14,
367
- "top": 156
368
- },
369
- {
370
- "text": "FL 600",
371
- "above": "2.04",
372
- "upper": true,
373
- "tracked": true,
374
- "mono": true,
375
- "pill": false,
376
- "size": 11.2,
377
- "top": 528
378
- }
379
- ],
380
- "numbered": [],
381
- "color": {
382
- "bodyBg": "#fffcf0",
383
- "bodyBgHsl": {
384
- "h": 48,
385
- "s": 1,
386
- "l": 0.97
387
- },
388
- "dark": false,
389
- "sectionBgs": [],
390
- "textColors": [
391
- {
392
- "color": "#111111",
393
- "share": 0.49
394
- },
395
- {
396
- "color": "#fffcf0",
397
- "share": 0.28
398
- },
399
- {
400
- "color": "#5a5956",
401
- "share": 0.21
402
- },
403
- {
404
- "color": "#10b981",
405
- "share": 0.01
406
- },
407
- {
408
- "color": "#ffffff",
409
- "share": 0
410
- }
411
- ],
412
- "button": null,
413
- "lowContrast": [
414
- {
415
- "text": "AI-agent ready",
416
- "ratio": 1,
417
- "need": 3,
418
- "size": 24,
419
- "fg": "#fffcf0",
420
- "bg": "#fffcf0"
421
- },
422
- {
423
- "text": "Skills and AGENTS.md teach coding agents",
424
- "ratio": 1,
425
- "need": 4.5,
426
- "size": 16,
427
- "fg": "#fffcf0",
428
- "bg": "#fffcf0"
429
- },
430
- {
431
- "text": "> add a newsletter signup",
432
- "ratio": 1,
433
- "need": 4.5,
434
- "size": 12.8,
435
- "fg": "#fffcf0",
436
- "bg": "#fffcf0"
437
- },
438
- {
439
- "text": "+ <div formDataProvider=\"newsletter\">",
440
- "ratio": 1,
441
- "need": 4.5,
442
- "size": 12.8,
443
- "fg": "#fffcf0",
444
- "bg": "#fffcf0"
445
- },
446
- {
447
- "text": "+ <sonic-input name=\"email\" type=\"email\"",
448
- "ratio": 1,
449
- "need": 4.5,
450
- "size": 12.8,
451
- "fg": "#fffcf0",
452
- "bg": "#fffcf0"
453
- },
454
- {
455
- "text": "+ <sonic-submit endPoint=\"newsletter\">",
456
- "ratio": 1,
457
- "need": 4.5,
458
- "size": 12.8,
459
- "fg": "#fffcf0",
460
- "bg": "#fffcf0"
461
- }
462
- ]
463
- },
464
- "buttons": {
465
- "count": 0,
466
- "inHero": 0,
467
- "withShadow": 0,
468
- "withGradient": 0,
469
- "mono": 0,
470
- "upper": 0,
471
- "heroLabels": []
472
- },
473
- "surfaces": {
474
- "shadowStatic": 0,
475
- "shadowOverlay": 0,
476
- "shadowSamples": [],
477
- "gradients": 1,
478
- "scrims": 2,
479
- "gradientSamples": [
480
- "div.hero-glow → radial-gradient(closest-side, rgb(251, 146, 60), rgba(0, 0, 0, 0)), radial-gradient(closest-side, rgb(59, 130,"
481
- ],
482
- "gradientText": 0,
483
- "hairlines": 0,
484
- "hairlineSamples": [],
485
- "outlinedBoxes": 1,
486
- "dashed": 0,
487
- "blurred": 0,
488
- "roundedBoxes": 2,
489
- "boxRadius": 50,
490
- "squareMedia": 0,
491
- "roundedMedia": 0,
492
- "mediaRadius": 0,
493
- "textShadow": 0,
494
- "cardRows": []
495
- },
496
- "heroMedia": [],
497
- "nav": null,
498
- "fontsLoaded": [
499
- "clashgrotesk-variable"
500
- ]
501
- },
502
- "layout": {
503
- "viewport": {
504
- "w": 1440,
505
- "h": 900
506
- },
507
- "pageH": 4570,
508
- "margins": {
509
- "left": 40,
510
- "right": 91
511
- },
512
- "sections": [
513
- {
514
- "sel": "section.relative.grid",
515
- "tag": "section",
516
- "top": 66,
517
- "height": 760,
518
- "words": 52,
519
- "media": 0,
520
- "middle": 217,
521
- "heading": {
522
- "text": "webcomponents for",
523
- "size": 72,
524
- "tag": "h1"
525
- },
526
- "left": 40,
527
- "right": 132,
528
- "textLeft": 40,
529
- "textRight": 132,
530
- "fullBleed": false,
531
- "footer": false,
532
- "hero": true,
533
- "continues": false,
534
- "pinned": false
535
- },
536
- {
537
- "sel": "section.py-20.md:py-28",
538
- "tag": "section",
539
- "top": 914,
540
- "height": 1540,
541
- "words": 158,
542
- "media": 0,
543
- "middle": 0,
544
- "heading": {
545
- "text": "Write HTML. Get an app.",
546
- "size": 60,
547
- "tag": "h2"
548
- },
549
- "left": 40,
550
- "right": 86,
551
- "textLeft": 40,
552
- "textRight": 86,
553
- "fullBleed": false,
554
- "footer": false,
555
- "hero": false,
556
- "continues": false,
557
- "pinned": false
558
- },
559
- {
560
- "sel": "section.py-16.md:py-24",
561
- "tag": "section",
562
- "top": 2454,
563
- "height": 682,
564
- "words": 36,
565
- "media": 0,
566
- "middle": 0,
567
- "heading": {
568
- "text": "State that flows through markup",
569
- "size": 48,
570
- "tag": "h2"
571
- },
572
- "left": 40,
573
- "right": 818,
574
- "textLeft": 40,
575
- "textRight": 818,
576
- "fullBleed": false,
577
- "footer": false,
578
- "hero": false,
579
- "continues": false,
580
- "pinned": false
581
- },
582
- {
583
- "sel": "section.py-12.md:py-20",
584
- "tag": "section",
585
- "top": 3137,
586
- "height": 451,
587
- "words": 47,
588
- "media": 0,
589
- "middle": 106,
590
- "heading": {
591
- "text": "100",
592
- "size": 60,
593
- "tag": "span"
594
- },
595
- "left": 89,
596
- "right": 114,
597
- "textLeft": 89,
598
- "textRight": 114,
599
- "fullBleed": false,
600
- "footer": false,
601
- "hero": false,
602
- "continues": false,
603
- "pinned": false
604
- },
605
- {
606
- "sel": "section.relative.pt-10",
607
- "tag": "section",
608
- "top": 3588,
609
- "height": 982,
610
- "words": 11,
611
- "media": 0,
612
- "middle": 0,
613
- "heading": {
614
- "text": "Ready for take-off?",
615
- "size": 60,
616
- "tag": "h2"
617
- },
618
- "left": 479,
619
- "right": 479,
620
- "textLeft": 479,
621
- "textRight": 479,
622
- "fullBleed": false,
623
- "footer": true,
624
- "hero": false,
625
- "continues": false,
626
- "pinned": false
627
- }
628
- ],
629
- "gaps": [],
630
- "h1s": [
631
- {
632
- "text": "webcomponents for scoped consistent shareable user interfaces",
633
- "size": 72,
634
- "top": 208,
635
- "firstScreen": true
636
- }
637
- ],
638
- "edgeText": [],
639
- "edges": [
640
- {
641
- "x": 40,
642
- "n": 8
643
- },
644
- {
645
- "x": 67,
646
- "n": 6
647
- },
648
- {
649
- "x": 89,
650
- "n": 2
651
- },
652
- {
653
- "x": 520,
654
- "n": 2
655
- },
656
- {
657
- "x": 746,
658
- "n": 1
659
- },
660
- {
661
- "x": 972,
662
- "n": 1
663
- }
664
- ],
665
- "leftBlocks": 20,
666
- "bodySize": 18,
667
- "stage": false,
668
- "explains": true,
669
- "slivers": [],
670
- "voidShare": 0.17,
671
- "voidBox": {
672
- "x": 720,
673
- "y": 180,
674
- "w": 720,
675
- "h": 300
676
- }
677
- },
678
- "app": null,
679
- "consoleErrors": []
680
- },
681
- {
682
- "width": 768,
683
- "height": 1024,
684
- "load": "load",
685
- "screens": 6,
686
- "filled": [
687
- 0.38,
688
- 0.21,
689
- 0.21,
690
- 0.18,
691
- 0.24,
692
- 0.14
693
- ],
694
- "motion": {
695
- "elements": 33,
696
- "css": 19,
697
- "transitions": 14,
698
- "scripted": 0,
699
- "videos": 0,
700
- "playingVideos": 0
701
- },
702
- "metrics": {
703
- "viewport": {
704
- "w": 768,
705
- "h": 1024
706
- },
707
- "page": {
708
- "height": 5720,
709
- "screens": 5.6,
710
- "words": 366,
711
- "img": 0,
712
- "video": 0,
713
- "canvas": 0,
714
- "svg": 0,
715
- "sections": 6,
716
- "horizontalOverflow": 0,
717
- "overflowCulprits": [],
718
- "uiFragments": 0,
719
- "uiAbuse": false,
720
- "realPictures": 0,
721
- "videoCount": 0,
722
- "uiPictures": 0,
723
- "pictureSamples": [],
724
- "blendText": 0,
725
- "sideScrollers": 0,
726
- "brokenImages": [],
727
- "emoji": [
728
- "✓"
729
- ],
730
- "videosNoPoster": 0
731
- },
732
- "hero": {
733
- "text": "webcomponents for scoped consistent shareable user interfaces",
734
- "words": 7,
735
- "chars": 61,
736
- "lines": 3,
737
- "size": 60,
738
- "vw": 7.8,
739
- "font": "ClashGrotesk-Variable",
740
- "weight": 400,
741
- "tracking": 0,
742
- "leading": 1.02,
743
- "upper": false,
744
- "italic": false,
745
- "mono": false,
746
- "align": "left",
747
- "position": "center",
748
- "widthRatio": 0.94,
749
- "top": 182,
750
- "tag": "h1",
751
- "kind": "heading"
752
- },
753
- "h1": {
754
- "text": "webcomponents for scoped consistent shareable user interfaces",
755
- "words": 7,
756
- "lines": 3,
757
- "size": 60,
758
- "font": "ClashGrotesk-Variable"
759
- },
760
- "headings": [
761
- {
762
- "text": "webcomponents for scoped consistent shareable user interfaces",
763
- "words": 7,
764
- "chars": 61,
765
- "lines": 3,
766
- "size": 60,
767
- "vw": 7.8,
768
- "font": "ClashGrotesk-Variable",
769
- "weight": 400,
770
- "tracking": 0,
771
- "leading": 1.02,
772
- "upper": false,
773
- "italic": false,
774
- "mono": false,
775
- "align": "left",
776
- "position": "center",
777
- "widthRatio": 0.94,
778
- "top": 182,
779
- "tag": "h1",
780
- "kind": "heading"
781
- },
782
- {
783
- "text": "2.04",
784
- "words": 1,
785
- "chars": 4,
786
- "lines": 1,
787
- "size": 84.5,
788
- "vw": 11,
789
- "font": "ClashGrotesk-Variable",
790
- "weight": 500,
791
- "tracking": -0.04,
792
- "leading": 0.8,
793
- "upper": false,
794
- "italic": false,
795
- "mono": false,
796
- "align": "left",
797
- "position": "left",
798
- "widthRatio": 0.22,
799
- "top": 1194,
800
- "tag": "div",
801
- "kind": "heading"
802
- },
803
- {
804
- "text": "Write HTML. Get an app.",
805
- "words": 5,
806
- "chars": 23,
807
- "lines": 1,
808
- "size": 48,
809
- "vw": 6.3,
810
- "font": "ClashGrotesk-Variable",
811
- "weight": 400,
812
- "tracking": 0,
813
- "leading": 1,
814
- "upper": false,
815
- "italic": false,
816
- "mono": false,
817
- "align": "left",
818
- "position": "center",
819
- "widthRatio": 0.94,
820
- "top": 1553,
821
- "tag": "h2",
822
- "kind": "heading"
823
- },
824
- {
825
- "text": "State that flows through markup",
826
- "words": 5,
827
- "chars": 31,
828
- "lines": 1,
829
- "size": 48,
830
- "vw": 6.3,
831
- "font": "ClashGrotesk-Variable",
832
- "weight": 400,
833
- "tracking": 0,
834
- "leading": 1,
835
- "upper": false,
836
- "italic": false,
837
- "mono": false,
838
- "align": "left",
839
- "position": "center",
840
- "widthRatio": 0.94,
841
- "top": 3431,
842
- "tag": "h2",
843
- "kind": "heading"
844
- },
845
- {
846
- "text": "Built for 100 ticketing sites at once",
847
- "words": 7,
848
- "chars": 37,
849
- "lines": 2,
850
- "size": 48,
851
- "vw": 6.3,
852
- "font": "ClashGrotesk-Variable",
853
- "weight": 400,
854
- "tracking": 0,
855
- "leading": 1,
856
- "upper": false,
857
- "italic": false,
858
- "mono": false,
859
- "align": "left",
860
- "position": "center",
861
- "widthRatio": 0.81,
862
- "top": 4561,
863
- "tag": "h2",
864
- "kind": "heading"
865
- },
866
- {
867
- "text": "100",
868
- "words": 1,
869
- "chars": 3,
870
- "lines": 1,
871
- "size": 60,
872
- "vw": 7.8,
873
- "font": "ClashGrotesk-Variable",
874
- "weight": 400,
875
- "tracking": 0,
876
- "leading": 1,
877
- "upper": false,
878
- "italic": false,
879
- "mono": false,
880
- "align": "center",
881
- "position": "left",
882
- "widthRatio": 0.24,
883
- "top": 4794,
884
- "tag": "div",
885
- "kind": "heading"
886
- },
887
- {
888
- "text": "35+",
889
- "words": 1,
890
- "chars": 3,
891
- "lines": 1,
892
- "size": 60,
893
- "vw": 7.8,
894
- "font": "ClashGrotesk-Variable",
895
- "weight": 400,
896
- "tracking": 0,
897
- "leading": 1,
898
- "upper": false,
899
- "italic": false,
900
- "mono": false,
901
- "align": "center",
902
- "position": "center",
903
- "widthRatio": 0.24,
904
- "top": 4794,
905
- "tag": "div",
906
- "kind": "heading"
907
- },
908
- {
909
- "text": "0",
910
- "words": 1,
911
- "chars": 1,
912
- "lines": 1,
913
- "size": 60,
914
- "vw": 7.8,
915
- "font": "ClashGrotesk-Variable",
916
- "weight": 400,
917
- "tracking": 0,
918
- "leading": 1,
919
- "upper": false,
920
- "italic": false,
921
- "mono": false,
922
- "align": "center",
923
- "position": "right",
924
- "widthRatio": 0.24,
925
- "top": 4794,
926
- "tag": "div",
927
- "kind": "heading"
928
- },
929
- {
930
- "text": "Ready for take-off?",
931
- "words": 3,
932
- "chars": 19,
933
- "lines": 1,
934
- "size": 60,
935
- "vw": 7.8,
936
- "font": "ClashGrotesk-Variable",
937
- "weight": 400,
938
- "tracking": 0,
939
- "leading": 1,
940
- "upper": false,
941
- "italic": false,
942
- "mono": false,
943
- "align": "center",
944
- "position": "center",
945
- "widthRatio": 0.94,
946
- "top": 5052,
947
- "tag": "h2",
948
- "kind": "heading"
949
- }
950
- ],
951
- "headingSummary": {
952
- "count": 9,
953
- "maxLines": 3,
954
- "over2Lines": 1,
955
- "statements": 0,
956
- "centered": 4,
957
- "medianWords": 3,
958
- "mixedFontHeadings": 0
959
- },
960
- "type": {
961
- "families": [
962
- {
963
- "family": "Arial",
964
- "share": 0.48,
965
- "mono": false
966
- },
967
- {
968
- "family": "ClashGrotesk-Variable",
969
- "share": 0.43,
970
- "mono": false
971
- },
972
- {
973
- "family": "ui-monospace",
974
- "share": 0.09,
975
- "mono": false
976
- }
977
- ],
978
- "familyCount": 3,
979
- "sizes": [
980
- 11,
981
- 13,
982
- 14,
983
- 16,
984
- 18,
985
- 20,
986
- 24,
987
- 48,
988
- 60,
989
- 85
990
- ],
991
- "sizeCount": 10,
992
- "notLoaded": [],
993
- "body": {
994
- "font": "Arial",
995
- "size": 18,
996
- "leading": 1.5,
997
- "weight": 400,
998
- "tracking": 0,
999
- "contrast": 6.8
1000
- },
1001
- "measureChars": 69,
1002
- "max": {
1003
- "size": 84.5,
1004
- "vw": 11,
1005
- "font": "ClashGrotesk-Variable",
1006
- "text": "2.04"
1007
- },
1008
- "monoShare": 0.09,
1009
- "monoProseShare": 0.09,
1010
- "monoFamilies": [
1011
- "ui-monospace"
1012
- ],
1013
- "monoSamples": [
1014
- "Mach",
1015
- "CDG — JFK",
1016
- "FL 600",
1017
- "3 h 30",
1018
- "> add a newsletter signup",
1019
- "+ <div formDataProvider=\"newsletter\">"
1020
- ],
1021
- "microLabels": 4,
1022
- "microLabelShare": 0.011,
1023
- "microSamples": [
1024
- "Mach",
1025
- "CDG — JFK",
1026
- "FL 600",
1027
- "3 h 30"
1028
- ],
1029
- "upperShare": 0.02,
1030
- "centerShare": 0.06,
1031
- "smallText": 5
1032
- },
1033
- "eyebrows": [
1034
- {
1035
- "text": "v5.1",
1036
- "above": "webcomponents for scoped consistent shar",
1037
- "upper": false,
1038
- "tracked": false,
1039
- "mono": false,
1040
- "pill": true,
1041
- "size": 14,
1042
- "top": 130
1043
- },
1044
- {
1045
- "text": "FL 600",
1046
- "above": "2.04",
1047
- "upper": true,
1048
- "tracked": true,
1049
- "mono": true,
1050
- "pill": false,
1051
- "size": 11.2,
1052
- "top": 1086
1053
- }
1054
- ],
1055
- "numbered": [],
1056
- "color": {
1057
- "bodyBg": "#fffcf0",
1058
- "bodyBgHsl": {
1059
- "h": 48,
1060
- "s": 1,
1061
- "l": 0.97
1062
- },
1063
- "dark": false,
1064
- "sectionBgs": [
1065
- {
1066
- "color": "#fffcf0",
1067
- "top": 689,
1068
- "hsl": {
1069
- "h": 48,
1070
- "s": 1,
1071
- "l": 0.97
1072
- }
1073
- }
1074
- ],
1075
- "textColors": [
1076
- {
1077
- "color": "#111111",
1078
- "share": 0.49
1079
- },
1080
- {
1081
- "color": "#fffcf0",
1082
- "share": 0.28
1083
- },
1084
- {
1085
- "color": "#5a5956",
1086
- "share": 0.21
1087
- },
1088
- {
1089
- "color": "#10b981",
1090
- "share": 0.01
1091
- },
1092
- {
1093
- "color": "#ffffff",
1094
- "share": 0
1095
- }
1096
- ],
1097
- "button": null,
1098
- "lowContrast": [
1099
- {
1100
- "text": "AI-agent ready",
1101
- "ratio": 1,
1102
- "need": 3,
1103
- "size": 24,
1104
- "fg": "#fffcf0",
1105
- "bg": "#fffcf0"
1106
- },
1107
- {
1108
- "text": "Skills and AGENTS.md teach coding agents",
1109
- "ratio": 1,
1110
- "need": 4.5,
1111
- "size": 16,
1112
- "fg": "#fffcf0",
1113
- "bg": "#fffcf0"
1114
- },
1115
- {
1116
- "text": "> add a newsletter signup",
1117
- "ratio": 1,
1118
- "need": 4.5,
1119
- "size": 12.8,
1120
- "fg": "#fffcf0",
1121
- "bg": "#fffcf0"
1122
- },
1123
- {
1124
- "text": "+ <div formDataProvider=\"newsletter\">",
1125
- "ratio": 1,
1126
- "need": 4.5,
1127
- "size": 12.8,
1128
- "fg": "#fffcf0",
1129
- "bg": "#fffcf0"
1130
- },
1131
- {
1132
- "text": "+ <sonic-input name=\"email\" type=\"email\"",
1133
- "ratio": 1,
1134
- "need": 4.5,
1135
- "size": 12.8,
1136
- "fg": "#fffcf0",
1137
- "bg": "#fffcf0"
1138
- },
1139
- {
1140
- "text": "+ <sonic-submit endPoint=\"newsletter\">",
1141
- "ratio": 1,
1142
- "need": 4.5,
1143
- "size": 12.8,
1144
- "fg": "#fffcf0",
1145
- "bg": "#fffcf0"
1146
- }
1147
- ]
1148
- },
1149
- "buttons": {
1150
- "count": 0,
1151
- "inHero": 0,
1152
- "withShadow": 0,
1153
- "withGradient": 0,
1154
- "mono": 0,
1155
- "upper": 0,
1156
- "heroLabels": []
1157
- },
1158
- "surfaces": {
1159
- "shadowStatic": 0,
1160
- "shadowOverlay": 0,
1161
- "shadowSamples": [],
1162
- "gradients": 1,
1163
- "scrims": 2,
1164
- "gradientSamples": [
1165
- "div.hero-glow → radial-gradient(closest-side, rgb(251, 146, 60), rgba(0, 0, 0, 0)), radial-gradient(closest-side, rgb(59, 130,"
1166
- ],
1167
- "gradientText": 0,
1168
- "hairlines": 0,
1169
- "hairlineSamples": [],
1170
- "outlinedBoxes": 1,
1171
- "dashed": 0,
1172
- "blurred": 0,
1173
- "roundedBoxes": 2,
1174
- "boxRadius": 50,
1175
- "squareMedia": 0,
1176
- "roundedMedia": 0,
1177
- "mediaRadius": 0,
1178
- "textShadow": 0,
1179
- "cardRows": []
1180
- },
1181
- "heroMedia": [],
1182
- "nav": null,
1183
- "fontsLoaded": [
1184
- "clashgrotesk-variable"
1185
- ]
1186
- },
1187
- "layout": {
1188
- "viewport": {
1189
- "w": 768,
1190
- "h": 1024
1191
- },
1192
- "pageH": 5720,
1193
- "margins": {
1194
- "left": 24,
1195
- "right": 34
1196
- },
1197
- "sections": [
1198
- {
1199
- "sel": "section.relative.grid",
1200
- "tag": "section",
1201
- "top": 66,
1202
- "height": 1287,
1203
- "words": 52,
1204
- "media": 0,
1205
- "middle": 0,
1206
- "heading": {
1207
- "text": "webcomponents for",
1208
- "size": 60,
1209
- "tag": "h1"
1210
- },
1211
- "left": 24,
1212
- "right": 147,
1213
- "textLeft": 24,
1214
- "textRight": 147,
1215
- "fullBleed": false,
1216
- "footer": false,
1217
- "hero": true,
1218
- "continues": false,
1219
- "pinned": false
1220
- },
1221
- {
1222
- "sel": "section.py-20.md:py-28",
1223
- "tag": "section",
1224
- "top": 1441,
1225
- "height": 1894,
1226
- "words": 158,
1227
- "media": 0,
1228
- "middle": 0,
1229
- "heading": {
1230
- "text": "Write HTML. Get an app.",
1231
- "size": 48,
1232
- "tag": "h2"
1233
- },
1234
- "left": 24,
1235
- "right": 51,
1236
- "textLeft": 24,
1237
- "textRight": 51,
1238
- "fullBleed": false,
1239
- "footer": false,
1240
- "hero": false,
1241
- "continues": false,
1242
- "pinned": false
1243
- },
1244
- {
1245
- "sel": "section.py-16.md:py-24",
1246
- "tag": "section",
1247
- "top": 3335,
1248
- "height": 1097,
1249
- "words": 36,
1250
- "media": 0,
1251
- "middle": 0,
1252
- "heading": {
1253
- "text": "State that flows through markup",
1254
- "size": 48,
1255
- "tag": "h2"
1256
- },
1257
- "left": 24,
1258
- "right": 26,
1259
- "textLeft": 24,
1260
- "textRight": 26,
1261
- "fullBleed": false,
1262
- "footer": false,
1263
- "hero": false,
1264
- "continues": false,
1265
- "pinned": false
1266
- },
1267
- {
1268
- "sel": "section.py-12.md:py-20",
1269
- "tag": "section",
1270
- "top": 4432,
1271
- "height": 580,
1272
- "words": 47,
1273
- "media": 0,
1274
- "middle": 0,
1275
- "heading": {
1276
- "text": "100",
1277
- "size": 60,
1278
- "tag": "span"
1279
- },
1280
- "left": 73,
1281
- "right": 108,
1282
- "textLeft": 73,
1283
- "textRight": 108,
1284
- "fullBleed": false,
1285
- "footer": false,
1286
- "hero": false,
1287
- "continues": false,
1288
- "pinned": false
1289
- },
1290
- {
1291
- "sel": "section.relative.pt-10",
1292
- "tag": "section",
1293
- "top": 5012,
1294
- "height": 707,
1295
- "words": 11,
1296
- "media": 0,
1297
- "middle": 0,
1298
- "heading": {
1299
- "text": "Ready for take-off?",
1300
- "size": 60,
1301
- "tag": "h2"
1302
- },
1303
- "left": 143,
1304
- "right": 143,
1305
- "textLeft": 143,
1306
- "textRight": 143,
1307
- "fullBleed": false,
1308
- "footer": true,
1309
- "hero": false,
1310
- "continues": false,
1311
- "pinned": false
1312
- }
1313
- ],
1314
- "gaps": [
1315
- {
1316
- "top": 732,
1317
- "height": 352
1318
- },
1319
- {
1320
- "top": 3796,
1321
- "height": 760
1322
- }
1323
- ],
1324
- "h1s": [
1325
- {
1326
- "text": "webcomponents for scoped consistent shareable user interfaces",
1327
- "size": 60,
1328
- "top": 182,
1329
- "firstScreen": true
1330
- }
1331
- ],
1332
- "edgeText": [],
1333
- "edges": [
1334
- {
1335
- "x": 24,
1336
- "n": 8
1337
- },
1338
- {
1339
- "x": 51,
1340
- "n": 7
1341
- },
1342
- {
1343
- "x": 410,
1344
- "n": 3
1345
- },
1346
- {
1347
- "x": 73,
1348
- "n": 2
1349
- }
1350
- ],
1351
- "leftBlocks": 20,
1352
- "bodySize": 18,
1353
- "stage": false,
1354
- "explains": true,
1355
- "slivers": [],
1356
- "voidShare": 0,
1357
- "voidBox": null
1358
- },
1359
- "app": null,
1360
- "consoleErrors": []
1361
- },
1362
- {
1363
- "width": 390,
1364
- "height": 844,
1365
- "load": "load",
1366
- "screens": 8,
1367
- "filled": [
1368
- 0.4,
1369
- 0.48,
1370
- 0.19,
1371
- 0.2,
1372
- 0.16,
1373
- 0.19,
1374
- 0.21,
1375
- 0.26
1376
- ],
1377
- "motion": {
1378
- "elements": 35,
1379
- "css": 20,
1380
- "transitions": 15,
1381
- "scripted": 0,
1382
- "videos": 0,
1383
- "playingVideos": 0
1384
- },
1385
- "metrics": {
1386
- "viewport": {
1387
- "w": 390,
1388
- "h": 844
1389
- },
1390
- "page": {
1391
- "height": 6435,
1392
- "screens": 7.6,
1393
- "words": 366,
1394
- "img": 0,
1395
- "video": 0,
1396
- "canvas": 0,
1397
- "svg": 0,
1398
- "sections": 6,
1399
- "horizontalOverflow": 0,
1400
- "overflowCulprits": [],
1401
- "uiFragments": 0,
1402
- "uiAbuse": false,
1403
- "realPictures": 0,
1404
- "videoCount": 0,
1405
- "uiPictures": 0,
1406
- "pictureSamples": [],
1407
- "blendText": 0,
1408
- "sideScrollers": 0,
1409
- "brokenImages": [],
1410
- "emoji": [
1411
- "✓"
1412
- ],
1413
- "videosNoPoster": 0
1414
- },
1415
- "hero": {
1416
- "text": "webcomponents for scoped consistent shareable user interfaces",
1417
- "words": 7,
1418
- "chars": 61,
1419
- "lines": 4,
1420
- "size": 41.6,
1421
- "vw": 10.7,
1422
- "font": "ClashGrotesk-Variable",
1423
- "weight": 400,
1424
- "tracking": 0,
1425
- "leading": 1.02,
1426
- "upper": false,
1427
- "italic": false,
1428
- "mono": false,
1429
- "align": "left",
1430
- "position": "center",
1431
- "widthRatio": 0.92,
1432
- "top": 158,
1433
- "tag": "h1",
1434
- "kind": "heading"
1435
- },
1436
- "h1": {
1437
- "text": "webcomponents for scoped consistent shareable user interfaces",
1438
- "words": 7,
1439
- "lines": 4,
1440
- "size": 41.6,
1441
- "font": "ClashGrotesk-Variable"
1442
- },
1443
- "headings": [
1444
- {
1445
- "text": "webcomponents for scoped consistent shareable user interfaces",
1446
- "words": 7,
1447
- "chars": 61,
1448
- "lines": 4,
1449
- "size": 41.6,
1450
- "vw": 10.7,
1451
- "font": "ClashGrotesk-Variable",
1452
- "weight": 400,
1453
- "tracking": 0,
1454
- "leading": 1.02,
1455
- "upper": false,
1456
- "italic": false,
1457
- "mono": false,
1458
- "align": "left",
1459
- "position": "center",
1460
- "widthRatio": 0.92,
1461
- "top": 158,
1462
- "tag": "h1",
1463
- "kind": "heading"
1464
- },
1465
- {
1466
- "text": "2.04",
1467
- "words": 1,
1468
- "chars": 4,
1469
- "lines": 1,
1470
- "size": 56,
1471
- "vw": 14.4,
1472
- "font": "ClashGrotesk-Variable",
1473
- "weight": 500,
1474
- "tracking": -0.04,
1475
- "leading": 0.8,
1476
- "upper": false,
1477
- "italic": false,
1478
- "mono": false,
1479
- "align": "left",
1480
- "position": "left",
1481
- "widthRatio": 0.28,
1482
- "top": 1113,
1483
- "tag": "div",
1484
- "kind": "heading"
1485
- },
1486
- {
1487
- "text": "Write HTML. Get an app.",
1488
- "words": 5,
1489
- "chars": 23,
1490
- "lines": 2,
1491
- "size": 36,
1492
- "vw": 9.2,
1493
- "font": "ClashGrotesk-Variable",
1494
- "weight": 400,
1495
- "tracking": 0,
1496
- "leading": 1,
1497
- "upper": false,
1498
- "italic": false,
1499
- "mono": false,
1500
- "align": "left",
1501
- "position": "center",
1502
- "widthRatio": 0.92,
1503
- "top": 1410,
1504
- "tag": "h2",
1505
- "kind": "heading"
1506
- },
1507
- {
1508
- "text": "Data binding, zero glue",
1509
- "words": 4,
1510
- "chars": 23,
1511
- "lines": 1,
1512
- "size": 24,
1513
- "vw": 6.2,
1514
- "font": "ClashGrotesk-Variable",
1515
- "weight": 400,
1516
- "tracking": 0,
1517
- "leading": 1.1,
1518
- "upper": false,
1519
- "italic": false,
1520
- "mono": false,
1521
- "align": "left",
1522
- "position": "center",
1523
- "widthRatio": 0.78,
1524
- "top": 1681,
1525
- "tag": "h3",
1526
- "kind": "heading"
1527
- },
1528
- {
1529
- "text": "Framework-agnostic",
1530
- "words": 1,
1531
- "chars": 18,
1532
- "lines": 1,
1533
- "size": 24,
1534
- "vw": 6.2,
1535
- "font": "ClashGrotesk-Variable",
1536
- "weight": 400,
1537
- "tracking": 0,
1538
- "leading": 1.1,
1539
- "upper": false,
1540
- "italic": false,
1541
- "mono": false,
1542
- "align": "left",
1543
- "position": "center",
1544
- "widthRatio": 0.78,
1545
- "top": 2000,
1546
- "tag": "h3",
1547
- "kind": "heading"
1548
- },
1549
- {
1550
- "text": "Themed by a few variables",
1551
- "words": 5,
1552
- "chars": 25,
1553
- "lines": 1,
1554
- "size": 24,
1555
- "vw": 6.2,
1556
- "font": "ClashGrotesk-Variable",
1557
- "weight": 400,
1558
- "tracking": 0,
1559
- "leading": 1.1,
1560
- "upper": false,
1561
- "italic": false,
1562
- "mono": false,
1563
- "align": "left",
1564
- "position": "center",
1565
- "widthRatio": 0.78,
1566
- "top": 2462,
1567
- "tag": "h3",
1568
- "kind": "heading"
1569
- },
1570
- {
1571
- "text": "Server-driven UI",
1572
- "words": 2,
1573
- "chars": 16,
1574
- "lines": 1,
1575
- "size": 24,
1576
- "vw": 6.2,
1577
- "font": "ClashGrotesk-Variable",
1578
- "weight": 400,
1579
- "tracking": 0,
1580
- "leading": 1.1,
1581
- "upper": false,
1582
- "italic": false,
1583
- "mono": false,
1584
- "align": "left",
1585
- "position": "center",
1586
- "widthRatio": 0.78,
1587
- "top": 2923,
1588
- "tag": "h3",
1589
- "kind": "heading"
1590
- },
1591
- {
1592
- "text": "Declarative APIs",
1593
- "words": 2,
1594
- "chars": 16,
1595
- "lines": 1,
1596
- "size": 24,
1597
- "vw": 6.2,
1598
- "font": "ClashGrotesk-Variable",
1599
- "weight": 400,
1600
- "tracking": 0,
1601
- "leading": 1.1,
1602
- "upper": false,
1603
- "italic": false,
1604
- "mono": false,
1605
- "align": "left",
1606
- "position": "center",
1607
- "widthRatio": 0.78,
1608
- "top": 3513,
1609
- "tag": "h3",
1610
- "kind": "heading"
1611
- },
1612
- {
1613
- "text": "AI-agent ready",
1614
- "words": 2,
1615
- "chars": 14,
1616
- "lines": 1,
1617
- "size": 24,
1618
- "vw": 6.2,
1619
- "font": "ClashGrotesk-Variable",
1620
- "weight": 400,
1621
- "tracking": 0,
1622
- "leading": 1.1,
1623
- "upper": false,
1624
- "italic": false,
1625
- "mono": false,
1626
- "align": "left",
1627
- "position": "center",
1628
- "widthRatio": 0.78,
1629
- "top": 3793,
1630
- "tag": "h3",
1631
- "kind": "heading"
1632
- },
1633
- {
1634
- "text": "State that flows through markup",
1635
- "words": 5,
1636
- "chars": 31,
1637
- "lines": 2,
1638
- "size": 36,
1639
- "vw": 9.2,
1640
- "font": "ClashGrotesk-Variable",
1641
- "weight": 400,
1642
- "tracking": 0,
1643
- "leading": 1,
1644
- "upper": false,
1645
- "italic": false,
1646
- "mono": false,
1647
- "align": "left",
1648
- "position": "center",
1649
- "widthRatio": 0.92,
1650
- "top": 4212,
1651
- "tag": "h2",
1652
- "kind": "heading"
1653
- },
1654
- {
1655
- "text": "Built for 100 ticketing sites at once",
1656
- "words": 7,
1657
- "chars": 37,
1658
- "lines": 2,
1659
- "size": 30,
1660
- "vw": 7.7,
1661
- "font": "ClashGrotesk-Variable",
1662
- "weight": 400,
1663
- "tracking": 0,
1664
- "leading": 1,
1665
- "upper": false,
1666
- "italic": false,
1667
- "mono": false,
1668
- "align": "left",
1669
- "position": "center",
1670
- "widthRatio": 0.75,
1671
- "top": 5455,
1672
- "tag": "h2",
1673
- "kind": "heading"
1674
- },
1675
- {
1676
- "text": "100",
1677
- "words": 1,
1678
- "chars": 3,
1679
- "lines": 1,
1680
- "size": 36,
1681
- "vw": 9.2,
1682
- "font": "ClashGrotesk-Variable",
1683
- "weight": 400,
1684
- "tracking": 0,
1685
- "leading": 1,
1686
- "upper": false,
1687
- "italic": false,
1688
- "mono": false,
1689
- "align": "center",
1690
- "position": "left",
1691
- "widthRatio": 0.21,
1692
- "top": 5733,
1693
- "tag": "div",
1694
- "kind": "heading"
1695
- },
1696
- {
1697
- "text": "35+",
1698
- "words": 1,
1699
- "chars": 3,
1700
- "lines": 1,
1701
- "size": 36,
1702
- "vw": 9.2,
1703
- "font": "ClashGrotesk-Variable",
1704
- "weight": 400,
1705
- "tracking": 0,
1706
- "leading": 1,
1707
- "upper": false,
1708
- "italic": false,
1709
- "mono": false,
1710
- "align": "center",
1711
- "position": "center",
1712
- "widthRatio": 0.21,
1713
- "top": 5733,
1714
- "tag": "div",
1715
- "kind": "heading"
1716
- },
1717
- {
1718
- "text": "0",
1719
- "words": 1,
1720
- "chars": 1,
1721
- "lines": 1,
1722
- "size": 36,
1723
- "vw": 9.2,
1724
- "font": "ClashGrotesk-Variable",
1725
- "weight": 400,
1726
- "tracking": 0,
1727
- "leading": 1,
1728
- "upper": false,
1729
- "italic": false,
1730
- "mono": false,
1731
- "align": "center",
1732
- "position": "right",
1733
- "widthRatio": 0.21,
1734
- "top": 5733,
1735
- "tag": "div",
1736
- "kind": "heading"
1737
- },
1738
- {
1739
- "text": "Ready for take-off?",
1740
- "words": 3,
1741
- "chars": 19,
1742
- "lines": 1,
1743
- "size": 36,
1744
- "vw": 9.2,
1745
- "font": "ClashGrotesk-Variable",
1746
- "weight": 400,
1747
- "tracking": 0,
1748
- "leading": 1,
1749
- "upper": false,
1750
- "italic": false,
1751
- "mono": false,
1752
- "align": "center",
1753
- "position": "center",
1754
- "widthRatio": 0.92,
1755
- "top": 5934,
1756
- "tag": "h2",
1757
- "kind": "heading"
1758
- }
1759
- ],
1760
- "headingSummary": {
1761
- "count": 15,
1762
- "maxLines": 4,
1763
- "over2Lines": 1,
1764
- "statements": 0,
1765
- "centered": 4,
1766
- "medianWords": 2,
1767
- "mixedFontHeadings": 0
1768
- },
1769
- "type": {
1770
- "families": [
1771
- {
1772
- "family": "Arial",
1773
- "share": 0.48,
1774
- "mono": false
1775
- },
1776
- {
1777
- "family": "ClashGrotesk-Variable",
1778
- "share": 0.43,
1779
- "mono": false
1780
- },
1781
- {
1782
- "family": "ui-monospace",
1783
- "share": 0.09,
1784
- "mono": false
1785
- }
1786
- ],
1787
- "familyCount": 3,
1788
- "sizes": [
1789
- 11,
1790
- 12,
1791
- 13,
1792
- 14,
1793
- 16,
1794
- 18,
1795
- 20,
1796
- 24,
1797
- 30,
1798
- 36,
1799
- 42,
1800
- 56
1801
- ],
1802
- "sizeCount": 12,
1803
- "notLoaded": [],
1804
- "body": {
1805
- "font": "Arial",
1806
- "size": 18,
1807
- "leading": 1.5,
1808
- "weight": 400,
1809
- "tracking": 0,
1810
- "contrast": 6.8
1811
- },
1812
- "measureChars": 32,
1813
- "max": {
1814
- "size": 56,
1815
- "vw": 14.4,
1816
- "font": "ClashGrotesk-Variable",
1817
- "text": "2.04"
1818
- },
1819
- "monoShare": 0.09,
1820
- "monoProseShare": 0.09,
1821
- "monoFamilies": [
1822
- "ui-monospace"
1823
- ],
1824
- "monoSamples": [
1825
- "Mach",
1826
- "CDG — JFK",
1827
- "FL 600",
1828
- "3 h 30",
1829
- "> add a newsletter signup",
1830
- "+ <div formDataProvider=\"newsletter\">"
1831
- ],
1832
- "microLabels": 4,
1833
- "microLabelShare": 0.011,
1834
- "microSamples": [
1835
- "Mach",
1836
- "CDG — JFK",
1837
- "FL 600",
1838
- "3 h 30"
1839
- ],
1840
- "upperShare": 0.02,
1841
- "centerShare": 0.06,
1842
- "smallText": 8
1843
- },
1844
- "eyebrows": [
1845
- {
1846
- "text": "v5.1",
1847
- "above": "webcomponents for scoped consistent shar",
1848
- "upper": false,
1849
- "tracked": false,
1850
- "mono": false,
1851
- "pill": true,
1852
- "size": 14,
1853
- "top": 106
1854
- },
1855
- {
1856
- "text": "FL 600",
1857
- "above": "2.04",
1858
- "upper": true,
1859
- "tracked": true,
1860
- "mono": true,
1861
- "pill": false,
1862
- "size": 11.2,
1863
- "top": 1031
1864
- }
1865
- ],
1866
- "numbered": [],
1867
- "color": {
1868
- "bodyBg": "#fffcf0",
1869
- "bodyBgHsl": {
1870
- "h": 48,
1871
- "s": 1,
1872
- "l": 0.97
1873
- },
1874
- "dark": false,
1875
- "sectionBgs": [
1876
- {
1877
- "color": "#fffcf0",
1878
- "top": 731,
1879
- "hsl": {
1880
- "h": 48,
1881
- "s": 1,
1882
- "l": 0.97
1883
- }
1884
- }
1885
- ],
1886
- "textColors": [
1887
- {
1888
- "color": "#111111",
1889
- "share": 0.49
1890
- },
1891
- {
1892
- "color": "#fffcf0",
1893
- "share": 0.28
1894
- },
1895
- {
1896
- "color": "#5a5956",
1897
- "share": 0.21
1898
- },
1899
- {
1900
- "color": "#10b981",
1901
- "share": 0.01
1902
- },
1903
- {
1904
- "color": "#ffffff",
1905
- "share": 0
1906
- }
1907
- ],
1908
- "button": null,
1909
- "lowContrast": [
1910
- {
1911
- "text": "AI-agent ready",
1912
- "ratio": 1,
1913
- "need": 3,
1914
- "size": 24,
1915
- "fg": "#fffcf0",
1916
- "bg": "#fffcf0"
1917
- },
1918
- {
1919
- "text": "Skills and AGENTS.md teach coding agents",
1920
- "ratio": 1,
1921
- "need": 4.5,
1922
- "size": 16,
1923
- "fg": "#fffcf0",
1924
- "bg": "#fffcf0"
1925
- },
1926
- {
1927
- "text": "> add a newsletter signup",
1928
- "ratio": 1,
1929
- "need": 4.5,
1930
- "size": 12.8,
1931
- "fg": "#fffcf0",
1932
- "bg": "#fffcf0"
1933
- },
1934
- {
1935
- "text": "+ <div formDataProvider=\"newsletter\">",
1936
- "ratio": 1,
1937
- "need": 4.5,
1938
- "size": 12.8,
1939
- "fg": "#fffcf0",
1940
- "bg": "#fffcf0"
1941
- },
1942
- {
1943
- "text": "+ <sonic-input name=\"email\" type=\"email\"",
1944
- "ratio": 1,
1945
- "need": 4.5,
1946
- "size": 12.8,
1947
- "fg": "#fffcf0",
1948
- "bg": "#fffcf0"
1949
- },
1950
- {
1951
- "text": "+ <sonic-submit endPoint=\"newsletter\">",
1952
- "ratio": 1,
1953
- "need": 4.5,
1954
- "size": 12.8,
1955
- "fg": "#fffcf0",
1956
- "bg": "#fffcf0"
1957
- }
1958
- ]
1959
- },
1960
- "buttons": {
1961
- "count": 0,
1962
- "inHero": 0,
1963
- "withShadow": 0,
1964
- "withGradient": 0,
1965
- "mono": 0,
1966
- "upper": 0,
1967
- "heroLabels": []
1968
- },
1969
- "surfaces": {
1970
- "shadowStatic": 0,
1971
- "shadowOverlay": 0,
1972
- "shadowSamples": [],
1973
- "gradients": 1,
1974
- "scrims": 2,
1975
- "gradientSamples": [
1976
- "div.hero-glow → radial-gradient(closest-side, rgb(251, 146, 60), rgba(0, 0, 0, 0)), radial-gradient(closest-side, rgb(59, 130,"
1977
- ],
1978
- "gradientText": 0,
1979
- "hairlines": 0,
1980
- "hairlineSamples": [],
1981
- "outlinedBoxes": 1,
1982
- "dashed": 0,
1983
- "blurred": 0,
1984
- "roundedBoxes": 2,
1985
- "boxRadius": 50,
1986
- "squareMedia": 0,
1987
- "roundedMedia": 0,
1988
- "mediaRadius": 0,
1989
- "textShadow": 0,
1990
- "cardRows": []
1991
- },
1992
- "heroMedia": [],
1993
- "nav": null,
1994
- "fontsLoaded": [
1995
- "clashgrotesk-variable"
1996
- ]
1997
- },
1998
- "layout": {
1999
- "viewport": {
2000
- "w": 390,
2001
- "h": 844
2002
- },
2003
- "pageH": 6435,
2004
- "margins": {
2005
- "left": 16,
2006
- "right": 16
2007
- },
2008
- "sections": [
2009
- {
2010
- "sel": "section.relative.grid",
2011
- "tag": "section",
2012
- "top": 66,
2013
- "height": 1176,
2014
- "words": 52,
2015
- "media": 0,
2016
- "middle": 0,
2017
- "heading": {
2018
- "text": "webcomponents for",
2019
- "size": 42,
2020
- "tag": "h1"
2021
- },
2022
- "left": 16,
2023
- "right": 24,
2024
- "textLeft": 16,
2025
- "textRight": 24,
2026
- "fullBleed": false,
2027
- "footer": false,
2028
- "hero": true,
2029
- "continues": false,
2030
- "pinned": false
2031
- },
2032
- {
2033
- "sel": "div.max-w-3xl.mb-12",
2034
- "tag": "div",
2035
- "top": 1410,
2036
- "height": 196,
2037
- "words": 26,
2038
- "media": 0,
2039
- "middle": 0,
2040
- "heading": null,
2041
- "left": 16,
2042
- "right": 18,
2043
- "textLeft": 16,
2044
- "textRight": 18,
2045
- "fullBleed": false,
2046
- "footer": false,
2047
- "hero": false,
2048
- "continues": true,
2049
- "pinned": false
2050
- },
2051
- {
2052
- "sel": "sonic-card.grid.bento-a",
2053
- "tag": "sonic-card",
2054
- "top": 1656,
2055
- "height": 318,
2056
- "words": 16,
2057
- "media": 0,
2058
- "middle": 0,
2059
- "heading": {
2060
- "text": "Data binding, zero glue",
2061
- "size": 24,
2062
- "tag": "h3"
2063
- },
2064
- "left": 43,
2065
- "right": 67,
2066
- "textLeft": 43,
2067
- "textRight": 67,
2068
- "fullBleed": false,
2069
- "footer": false,
2070
- "hero": false,
2071
- "continues": true,
2072
- "pinned": false
2073
- },
2074
- {
2075
- "sel": "sonic-card.grid.bento-b",
2076
- "tag": "sonic-card",
2077
- "top": 1975,
2078
- "height": 463,
2079
- "words": 18,
2080
- "media": 0,
2081
- "middle": 0,
2082
- "heading": {
2083
- "text": "Framework-agnostic",
2084
- "size": 24,
2085
- "tag": "h3"
2086
- },
2087
- "left": 43,
2088
- "right": 62,
2089
- "textLeft": 43,
2090
- "textRight": 62,
2091
- "fullBleed": false,
2092
- "footer": false,
2093
- "hero": false,
2094
- "continues": true,
2095
- "pinned": false
2096
- },
2097
- {
2098
- "sel": "sonic-card.grid.bento-c",
2099
- "tag": "sonic-card",
2100
- "top": 2437,
2101
- "height": 460,
2102
- "words": 26,
2103
- "media": 0,
2104
- "middle": 0,
2105
- "heading": {
2106
- "text": "Themed by a few variables",
2107
- "size": 24,
2108
- "tag": "h3"
2109
- },
2110
- "left": 43,
2111
- "right": 71,
2112
- "textLeft": 43,
2113
- "textRight": 71,
2114
- "fullBleed": false,
2115
- "footer": false,
2116
- "hero": false,
2117
- "continues": true,
2118
- "pinned": false
2119
- },
2120
- {
2121
- "sel": "sonic-card.grid.bento-d",
2122
- "tag": "sonic-card",
2123
- "top": 2898,
2124
- "height": 590,
2125
- "words": 21,
2126
- "media": 0,
2127
- "middle": 0,
2128
- "heading": {
2129
- "text": "Server-driven UI",
2130
- "size": 24,
2131
- "tag": "h3"
2132
- },
2133
- "left": 43,
2134
- "right": 48,
2135
- "textLeft": 43,
2136
- "textRight": 48,
2137
- "fullBleed": false,
2138
- "footer": false,
2139
- "hero": false,
2140
- "continues": true,
2141
- "pinned": false
2142
- },
2143
- {
2144
- "sel": "sonic-card.grid.bento-e",
2145
- "tag": "sonic-card",
2146
- "top": 3488,
2147
- "height": 280,
2148
- "words": 15,
2149
- "media": 0,
2150
- "middle": 0,
2151
- "heading": {
2152
- "text": "Declarative APIs",
2153
- "size": 24,
2154
- "tag": "h3"
2155
- },
2156
- "left": 43,
2157
- "right": 89,
2158
- "textLeft": 43,
2159
- "textRight": 89,
2160
- "fullBleed": false,
2161
- "footer": false,
2162
- "hero": false,
2163
- "continues": true,
2164
- "pinned": false
2165
- },
2166
- {
2167
- "sel": "sonic-card.grid.bento-f",
2168
- "tag": "sonic-card",
2169
- "top": 3768,
2170
- "height": 300,
2171
- "words": 31,
2172
- "media": 0,
2173
- "middle": 0,
2174
- "heading": {
2175
- "text": "AI-agent ready",
2176
- "size": 24,
2177
- "tag": "h3"
2178
- },
2179
- "left": 43,
2180
- "right": 43,
2181
- "textLeft": 43,
2182
- "textRight": 43,
2183
- "fullBleed": false,
2184
- "footer": false,
2185
- "hero": false,
2186
- "continues": true,
2187
- "pinned": false
2188
- },
2189
- {
2190
- "sel": "section.py-16.md:py-24",
2191
- "tag": "section",
2192
- "top": 4148,
2193
- "height": 1225,
2194
- "words": 36,
2195
- "media": 0,
2196
- "middle": 0,
2197
- "heading": {
2198
- "text": "State that flows through markup",
2199
- "size": 36,
2200
- "tag": "h2"
2201
- },
2202
- "left": 16,
2203
- "right": 16,
2204
- "textLeft": 16,
2205
- "textRight": 16,
2206
- "fullBleed": false,
2207
- "footer": false,
2208
- "hero": false,
2209
- "continues": false,
2210
- "pinned": false
2211
- },
2212
- {
2213
- "sel": "section.py-12.md:py-20",
2214
- "tag": "section",
2215
- "top": 5374,
2216
- "height": 520,
2217
- "words": 47,
2218
- "media": 0,
2219
- "middle": 0,
2220
- "heading": {
2221
- "text": "100",
2222
- "size": 36,
2223
- "tag": "span"
2224
- },
2225
- "left": 49,
2226
- "right": 58,
2227
- "textLeft": 49,
2228
- "textRight": 58,
2229
- "fullBleed": false,
2230
- "footer": false,
2231
- "hero": false,
2232
- "continues": false,
2233
- "pinned": false
2234
- },
2235
- {
2236
- "sel": "section.relative.pt-10",
2237
- "tag": "section",
2238
- "top": 5894,
2239
- "height": 542,
2240
- "words": 11,
2241
- "media": 0,
2242
- "middle": 0,
2243
- "heading": {
2244
- "text": "Ready for take-off?",
2245
- "size": 36,
2246
- "tag": "h2"
2247
- },
2248
- "left": 50,
2249
- "right": 50,
2250
- "textLeft": 50,
2251
- "textRight": 50,
2252
- "fullBleed": false,
2253
- "footer": true,
2254
- "hero": false,
2255
- "continues": false,
2256
- "pinned": false
2257
- }
2258
- ],
2259
- "gaps": [
2260
- {
2261
- "top": 768,
2262
- "height": 260
2263
- },
2264
- {
2265
- "top": 3060,
2266
- "height": 372
2267
- },
2268
- {
2269
- "top": 4656,
2270
- "height": 792
2271
- }
2272
- ],
2273
- "h1s": [
2274
- {
2275
- "text": "webcomponents for scoped consistent shareable user interfaces",
2276
- "size": 42,
2277
- "top": 158,
2278
- "firstScreen": true
2279
- }
2280
- ],
2281
- "edgeText": [],
2282
- "edges": [
2283
- {
2284
- "x": 43,
2285
- "n": 12
2286
- },
2287
- {
2288
- "x": 16,
2289
- "n": 8
2290
- }
2291
- ],
2292
- "leftBlocks": 20,
2293
- "bodySize": 18,
2294
- "stage": false,
2295
- "explains": true,
2296
- "slivers": [],
2297
- "voidShare": 0,
2298
- "voidBox": null
2299
- },
2300
- "app": null,
2301
- "consoleErrors": []
2302
- }
2303
- ],
2304
- "findings": [
2305
- {
2306
- "level": "FAIL",
2307
- "id": "headline-lines",
2308
- "width": 1440,
2309
- "message": "1 headline(s) wrap past two lines at 1440px: \"webcomponents for scoped consistent shareable us\" → 3 lines (7 words, 72px)",
2310
- "fix": "Cut words first (a headline is a title, not a sentence). Then give it a wider measure. Lower the size only as a last resort and never below the scale you chose. A real statement paragraph belongs in a <p> or <blockquote> at 36px or less."
2311
- },
2312
- {
2313
- "level": "FAIL",
2314
- "id": "eyebrow",
2315
- "width": 1440,
2316
- "message": "2 eyebrow/kicker label(s) above headings: \"v5.1\" (pill) above \"webcomponents for scoped consistent shar\"; \"FL 600\" above \"2.04\"",
2317
- "fix": "Delete them. If the label carried real information, fold it into the headline or the supporting sentence.",
2318
- "alsoAt": [
2319
- 768,
2320
- 390
2321
- ]
2322
- },
2323
- {
2324
- "level": "FAIL",
2325
- "id": "mono",
2326
- "width": 1440,
2327
- "message": "Monospace type outside code: ui-monospace — e.g. \"Mach\", \"CDG — JFK\", \"FL 600\", \"3 h 30\"",
2328
- "fix": "Set it in the text face. Monospace is for literal code inside <pre>/<code> only.",
2329
- "alsoAt": [
2330
- 768,
2331
- 390
2332
- ]
2333
- },
2334
- {
2335
- "level": "FAIL",
2336
- "id": "micro-label",
2337
- "width": 1440,
2338
- "message": "4 tiny uppercase letter-spaced labels (e.g. \"Mach\", \"CDG — JFK\", \"FL 600\", \"3 h 30\").",
2339
- "fix": "Use sentence-case text at a readable size, or delete the label.",
2340
- "alsoAt": [
2341
- 768,
2342
- 390
2343
- ]
2344
- },
2345
- {
2346
- "level": "FAIL",
2347
- "id": "emoji",
2348
- "width": 1440,
2349
- "message": "Emoji in the page: ✓",
2350
- "fix": "Remove. Use words or real imagery.",
2351
- "alsoAt": [
2352
- 768,
2353
- 390
2354
- ]
2355
- },
2356
- {
2357
- "level": "FAIL",
2358
- "id": "gradient",
2359
- "width": 1440,
2360
- "message": "1 gradient fill(s): div.hero-glow → radial-gradient(closest-side, rgb(251, 146, 60), rgba(0, 0, 0, 0)), radial-gradient(closest-side, rgb(59, 130,",
2361
- "fix": "Use a flat colour or a real image. The only gradient allowed by default is a neutral scrim over a photo for legibility.",
2362
- "alsoAt": [
2363
- 768,
2364
- 390
2365
- ]
2366
- },
2367
- {
2368
- "level": "WARN",
2369
- "id": "outlined-box",
2370
- "width": 1440,
2371
- "message": "1 box(es) drawn with a 1px outline.",
2372
- "fix": "Prefer a filled surface or no box.",
2373
- "alsoAt": [
2374
- 768,
2375
- 390
2376
- ]
2377
- },
2378
- {
2379
- "level": "WARN",
2380
- "id": "palette-cream",
2381
- "width": 1440,
2382
- "message": "Yellow-cream background (page background #fffcf0, text #fffcf0).",
2383
- "fix": "Use the drawn palette. If you want warmth, take a low-chroma stone or bone, not a yellow cream.",
2384
- "alsoAt": [
2385
- 768,
2386
- 390
2387
- ]
2388
- },
2389
- {
2390
- "level": "FAIL",
2391
- "id": "contrast",
2392
- "width": 1440,
2393
- "message": "Unreadable text: \"AI-agent ready\" 1:1 (#fffcf0 on #fffcf0); \"Skills and AGENTS.md teach coding agents\" 1:1 (#fffcf0 on #fffcf0); \"> add a newsletter signup\" 1:1 (#fffcf0 on #fffcf0); \"+ <div formDataProvider=\"newsletter\">\" 1:1 (#fffcf0 on #fffcf0)",
2394
- "fix": "Raise contrast to at least 4.5:1 for text, 3:1 for large display.",
2395
- "alsoAt": [
2396
- 768,
2397
- 390
2398
- ]
2399
- },
2400
- {
2401
- "level": "WARN",
2402
- "id": "font-count",
2403
- "width": 1440,
2404
- "message": "3 typefaces in use (Arial, ClashGrotesk-Variable, ui-monospace).",
2405
- "fix": "Two at most.",
2406
- "alsoAt": [
2407
- 768,
2408
- 390
2409
- ]
2410
- },
2411
- {
2412
- "level": "WARN",
2413
- "id": "size-count",
2414
- "width": 1440,
2415
- "message": "11 different font sizes (11, 13, 14, 16, 18, 20, 24, 48, 60, 72, 120).",
2416
- "fix": "A page needs about five: display, heading, lead, body, small.",
2417
- "alsoAt": [
2418
- 768,
2419
- 390
2420
- ]
2421
- },
2422
- {
2423
- "level": "WARN",
2424
- "id": "grey-body",
2425
- "width": 1440,
2426
- "message": "The running text is a soft grey on its ground (6.8:1).",
2427
- "fix": "Set body copy in the full ink (7:1 or more). Keep the muted ink for secondary notes; pages read thin and unfinished when everything is grey.",
2428
- "alsoAt": [
2429
- 768,
2430
- 390
2431
- ]
2432
- },
2433
- {
2434
- "level": "WARN",
2435
- "id": "first-action",
2436
- "width": 1440,
2437
- "message": "No visible button in the first screen.",
2438
- "fix": "Give the one primary action a real button in the first screen (a filled or solid-bordered control, 44px or taller), not only a link in the navigation.",
2439
- "alsoAt": [
2440
- 768,
2441
- 390
2442
- ]
2443
- },
2444
- {
2445
- "level": "FAIL",
2446
- "id": "few-pictures",
2447
- "width": 1440,
2448
- "message": "Only 0 picture(s) on the page (0 photographs, footage or raster images, 0 interface fragments). Drawings in SVG do not count.",
2449
- "fix": "Find real pictures of the subject's world with scripts/assets.mjs (photographs, archival images, maps, engravings, footage), download them to assets/ and give them room: a hero picture, one per section that has a subject, a full-width band. At least four, usually six to twelve."
2450
- },
2451
- {
2452
- "level": "WARN",
2453
- "id": "no-footage",
2454
- "width": 1440,
2455
- "message": "No video anywhere on the page.",
2456
- "fix": "Look for one honest clip with scripts/assets.mjs --video (the place, the material, the process) and use it as a muted loop with a poster frame. Defend its absence only if no clip fits the subject."
2457
- },
2458
- {
2459
- "level": "FAIL",
2460
- "id": "small-text",
2461
- "width": 1440,
2462
- "message": "5 text blocks under 13px.",
2463
- "fix": "Nothing meant to be read goes below 13px.",
2464
- "alsoAt": [
2465
- 768,
2466
- 390
2467
- ]
2468
- },
2469
- {
2470
- "level": "WARN",
2471
- "id": "dev-server",
2472
- "width": 1440,
2473
- "message": "This page is served by a development server (Vite, webpack or Next in dev mode).",
2474
- "fix": "Run the last gate on the production build too (vite build && vite preview, next build && next start, or the built index.html): minifiers and bundlers change the CSS a visitor receives.",
2475
- "alsoAt": [
2476
- 768,
2477
- 390
2478
- ]
2479
- },
2480
- {
2481
- "level": "WARN",
2482
- "id": "off-centre",
2483
- "width": 1440,
2484
- "message": "The margins differ: 40px on the left, 91px on the right, at 1440px.",
2485
- "fix": "Put the navigation and the content on one pair of margins; check for padding on one side only, a scrollbar gutter, or a header on another inset than the page."
2486
- },
2487
- {
2488
- "level": "WARN",
2489
- "id": "lopsided",
2490
- "width": 1440,
2491
- "message": "A section keeps its content on one side and leaves 818px of the width empty: \"State that flows through markup\".",
2492
- "fix": "Fill the other side with what the section has (its picture, a second column, the figure), or defend the void in one sentence."
2493
- },
2494
- {
2495
- "level": "FAIL",
2496
- "id": "empty-screens",
2497
- "width": 1440,
2498
- "message": "4 of 5 desktop screens are almost empty ground (under 20% of the screen holds text, a picture or a colour field): screens 2, 3, 4, 5.",
2499
- "fix": "An empty screen is a rest only once per page. Elsewhere it means the section is underbuilt: set its content larger, give it the full information, put it on a colour field, or cut it."
2500
- },
2501
- {
2502
- "level": "FAIL",
2503
- "id": "headline-lines",
2504
- "width": 768,
2505
- "message": "1 headline(s) wrap past two lines at 768px: \"webcomponents for scoped consistent shareable us\" → 3 lines (7 words, 60px)",
2506
- "fix": "Cut words first (a headline is a title, not a sentence). Then give it a wider measure. Lower the size only as a last resort and never below the scale you chose. A real statement paragraph belongs in a <p> or <blockquote> at 32px or less."
2507
- },
2508
- {
2509
- "level": "FAIL",
2510
- "id": "blank-gap",
2511
- "width": 768,
2512
- "message": "1 stretch(es) of the page hold nothing at all: 760px at 3796px (the screen is 1024px tall).",
2513
- "fix": "Close the gap: a section gap is 120–240px on desktop and 72–112px on a phone. Look for a min-height: 100vh on a short section, an empty grid row, a hidden element still holding its space, or a reveal that never fired. A deliberate rest is a placed picture or colour field, not nothing.",
2514
- "alsoAt": [
2515
- 390
2516
- ]
2517
- },
2518
- {
2519
- "level": "FAIL",
2520
- "id": "headline-lines",
2521
- "width": 390,
2522
- "message": "1 headline(s) wrap past two lines at 390px: \"webcomponents for scoped consistent shareable us\" → 4 lines (7 words, 41.6px)",
2523
- "fix": "Cut words first (a headline is a title, not a sentence). Then give it a wider measure. Lower the size only as a last resort and never below the scale you chose. A real statement paragraph belongs in a <p> or <blockquote> at 24px or less."
2524
- }
2525
- ],
2526
- "images": [
2527
- {
2528
- "viewport": "desktop",
2529
- "width": 1440,
2530
- "fold": "/usr2/sites/concorde/.taste-skill/before/desktop-fold.jpg",
2531
- "pages": [
2532
- "/usr2/sites/concorde/.taste-skill/before/desktop-page-01.jpg",
2533
- "/usr2/sites/concorde/.taste-skill/before/desktop-page-02.jpg"
2534
- ],
2535
- "film": []
2536
- },
2537
- {
2538
- "viewport": "tablet",
2539
- "width": 768,
2540
- "fold": "/usr2/sites/concorde/.taste-skill/before/tablet-fold.jpg",
2541
- "pages": [
2542
- "/usr2/sites/concorde/.taste-skill/before/tablet-page-01.jpg"
2543
- ],
2544
- "film": []
2545
- },
2546
- {
2547
- "viewport": "mobile",
2548
- "width": 390,
2549
- "fold": "/usr2/sites/concorde/.taste-skill/before/mobile-fold.jpg",
2550
- "pages": [
2551
- "/usr2/sites/concorde/.taste-skill/before/mobile-page-01.jpg"
2552
- ],
2553
- "film": []
2554
- }
2555
- ]
2556
- }