@supersoniks/concorde 5.1.0 → 5.1.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 (628) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +153 -0
  2. package/.agents/skills/{concorde-component-docs/template.md → concorde-docs/templates/component.md} +6 -2
  3. package/.agents/skills/concorde-docs/templates/decorator.md +43 -0
  4. package/.agents/skills/concorde-docs/templates/guide.md +25 -0
  5. package/.claude/launch.json +15 -0
  6. package/.claude/vite.http.config.mjs +7 -0
  7. package/.taste-skill/after/desktop-fold.jpg +0 -0
  8. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  9. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  10. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  11. package/.taste-skill/after/mobile-fold.jpg +0 -0
  12. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  13. package/.taste-skill/after/report.json +4103 -0
  14. package/.taste-skill/after/tablet-fold.jpg +0 -0
  15. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  16. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  17. package/.taste-skill/before/desktop-fold.jpg +0 -0
  18. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  19. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  20. package/.taste-skill/before/mobile-fold.jpg +0 -0
  21. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  22. package/.taste-skill/before/report.json +2556 -0
  23. package/.taste-skill/before/tablet-fold.jpg +0 -0
  24. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  25. package/.taste-skill/direction.json +510 -0
  26. package/.taste-skill/notes.md +84 -0
  27. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  28. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  29. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  30. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  31. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  32. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  33. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  34. package/.taste-skill/prod/report.json +1973 -0
  35. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  36. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  37. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  38. package/.tmp-cem/custom-elements.json +2013 -2013
  39. package/AUDIT.md +228 -0
  40. package/PLAN-AMELIORATION.md +220 -0
  41. package/PLAN-DOCS-AGENTS.md +80 -0
  42. package/README.md +3 -3
  43. package/ai/skills/concorde/SKILL.md +1 -1
  44. package/ai/skills/concorde-get-set-dp/SKILL.md +3 -3
  45. package/ai/skills/concorde-theme/SKILL.md +1 -1
  46. package/build-infos.json +1 -1
  47. package/concorde-core.bundle.js +16 -16
  48. package/concorde-core.es.js +235 -233
  49. package/dist/concorde-core.bundle.js +16 -16
  50. package/dist/concorde-core.es.js +235 -233
  51. package/dist/img/archive/concorde-001-2cv.webp +0 -0
  52. package/dist/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  53. package/dist/img/archive/concorde-red-arrows-2002.webm +0 -0
  54. package/dist/img/archive/credits.json +28 -0
  55. package/docs/.htaccess +75 -0
  56. package/docs/404.html +15 -0
  57. package/docs/404.md +5 -0
  58. package/docs/assets/index-BgG6FFPt.js +11765 -0
  59. package/docs/assets/index-x89XINSG.css +1 -0
  60. package/docs/core/components/functional/date/date.html +211 -0
  61. package/docs/core/components/functional/date/date.md +150 -0
  62. package/docs/core/components/functional/fetch/fetch.html +180 -0
  63. package/docs/core/components/functional/fetch/fetch.md +108 -0
  64. package/docs/core/components/functional/if/if.html +65 -0
  65. package/docs/core/components/functional/if/if.md +34 -0
  66. package/docs/core/components/functional/jsonata/jsonata.html +110 -0
  67. package/docs/core/components/functional/jsonata/jsonata.md +61 -0
  68. package/docs/core/components/functional/list/list.html +198 -0
  69. package/docs/core/components/functional/list/list.md +121 -0
  70. package/docs/core/components/functional/mix/mix.html +78 -0
  71. package/docs/core/components/functional/mix/mix.md +46 -0
  72. package/docs/core/components/functional/queue/queue.html +155 -0
  73. package/docs/core/components/functional/queue/queue.md +51 -0
  74. package/docs/core/components/functional/router/router.html +154 -0
  75. package/docs/core/components/functional/router/router.md +93 -0
  76. package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
  77. package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
  78. package/docs/core/components/functional/sdui/sdui.html +397 -0
  79. package/docs/core/components/functional/sdui/sdui.md +307 -0
  80. package/docs/core/components/functional/states/states.html +141 -0
  81. package/docs/core/components/functional/states/states.md +112 -0
  82. package/docs/core/components/functional/submit/submit.html +178 -0
  83. package/docs/core/components/functional/submit/submit.md +106 -0
  84. package/docs/{crawl/core → core}/components/functional/subscriber/subscriber.html +6 -5
  85. package/docs/core/components/functional/subscriber/subscriber.md +91 -0
  86. package/docs/core/components/functional/translation/translation.html +60 -0
  87. package/docs/core/components/functional/translation/translation.md +38 -0
  88. package/docs/core/components/functional/value/value.html +81 -0
  89. package/docs/core/components/functional/value/value.md +47 -0
  90. package/docs/core/components/ui/alert/alert.html +201 -0
  91. package/docs/core/components/ui/alert/alert.md +186 -0
  92. package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
  93. package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
  94. package/docs/core/components/ui/badge/badge.html +197 -0
  95. package/docs/core/components/ui/badge/badge.md +181 -0
  96. package/docs/core/components/ui/button/button.html +309 -0
  97. package/docs/core/components/ui/button/button.md +216 -0
  98. package/docs/core/components/ui/captcha/captcha.html +80 -0
  99. package/docs/core/components/ui/captcha/captcha.md +56 -0
  100. package/docs/core/components/ui/card/card.html +254 -0
  101. package/docs/core/components/ui/card/card.md +215 -0
  102. package/docs/core/components/ui/divider/divider.html +144 -0
  103. package/docs/core/components/ui/divider/divider.md +126 -0
  104. package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
  105. package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
  106. package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
  107. package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
  108. package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
  109. package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
  110. package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
  111. package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
  112. package/docs/core/components/ui/form/input/input.html +235 -0
  113. package/docs/core/components/ui/form/input/input.md +142 -0
  114. package/docs/core/components/ui/form/radio/radio.html +144 -0
  115. package/docs/core/components/ui/form/radio/radio.md +78 -0
  116. package/docs/core/components/ui/form/select/select.html +178 -0
  117. package/docs/core/components/ui/form/select/select.md +86 -0
  118. package/docs/core/components/ui/form/switch/switch.html +146 -0
  119. package/docs/core/components/ui/form/switch/switch.md +80 -0
  120. package/docs/core/components/ui/form/textarea/textarea.html +162 -0
  121. package/docs/core/components/ui/form/textarea/textarea.md +82 -0
  122. package/docs/core/components/ui/group/group.html +113 -0
  123. package/docs/core/components/ui/group/group.md +77 -0
  124. package/docs/core/components/ui/icon/icon.html +223 -0
  125. package/docs/core/components/ui/icon/icon.md +214 -0
  126. package/docs/core/components/ui/image/image.html +194 -0
  127. package/docs/core/components/ui/image/image.md +167 -0
  128. package/docs/core/components/ui/link/link.html +101 -0
  129. package/docs/core/components/ui/link/link.md +81 -0
  130. package/docs/core/components/ui/loader/loader.html +114 -0
  131. package/docs/core/components/ui/loader/loader.md +87 -0
  132. package/docs/{crawl/core → core}/components/ui/menu/menu.html +189 -116
  133. package/docs/core/components/ui/menu/menu.md +370 -0
  134. package/docs/core/components/ui/modal/modal.html +324 -0
  135. package/docs/core/components/ui/modal/modal.md +211 -0
  136. package/docs/core/components/ui/pop/pop.html +250 -0
  137. package/docs/core/components/ui/pop/pop.md +216 -0
  138. package/docs/core/components/ui/progress/progress.html +132 -0
  139. package/docs/core/components/ui/progress/progress.md +109 -0
  140. package/docs/core/components/ui/table/table.html +333 -0
  141. package/docs/core/components/ui/table/table.md +267 -0
  142. package/docs/core/components/ui/theme/theme.html +116 -0
  143. package/docs/core/components/ui/theme/theme.md +97 -0
  144. package/docs/core/components/ui/toast/toast.html +185 -0
  145. package/docs/core/components/ui/toast/toast.md +147 -0
  146. package/docs/core/components/ui/tooltip/tooltip.html +112 -0
  147. package/docs/core/components/ui/tooltip/tooltip.md +89 -0
  148. package/docs/docs/decorators/ancestor-attribute.html +71 -0
  149. package/docs/docs/decorators/ancestor-attribute.md +59 -0
  150. package/docs/docs/decorators/auto-subscribe.html +61 -0
  151. package/docs/docs/decorators/auto-subscribe.md +40 -0
  152. package/docs/docs/decorators/bind.html +86 -0
  153. package/docs/docs/decorators/bind.md +77 -0
  154. package/docs/docs/decorators/get.html +166 -0
  155. package/docs/docs/decorators/get.md +160 -0
  156. package/docs/docs/decorators/handle.html +139 -0
  157. package/docs/docs/decorators/handle.md +119 -0
  158. package/docs/docs/decorators/on-assign.html +72 -0
  159. package/docs/docs/decorators/on-assign.md +63 -0
  160. package/docs/docs/decorators/patch.html +76 -0
  161. package/docs/docs/decorators/patch.md +44 -0
  162. package/docs/docs/decorators/post.html +150 -0
  163. package/docs/docs/decorators/post.md +134 -0
  164. package/docs/docs/decorators/publish.html +74 -0
  165. package/docs/docs/decorators/publish.md +56 -0
  166. package/docs/docs/decorators/put.html +83 -0
  167. package/docs/docs/decorators/put.md +51 -0
  168. package/docs/docs/decorators/subscribe.html +91 -0
  169. package/docs/docs/decorators/subscribe.md +87 -0
  170. package/docs/docs/decorators/wait-for-ancestors.html +82 -0
  171. package/docs/docs/decorators/wait-for-ancestors.md +76 -0
  172. package/docs/docs/directives/sub.html +79 -0
  173. package/docs/docs/directives/sub.md +75 -0
  174. package/docs/docs/directives/t.html +91 -0
  175. package/docs/docs/directives/t.md +73 -0
  176. package/docs/{crawl/docs/_getting-started → docs/getting-started}/ai-agents.html +12 -11
  177. package/{src/docs/_getting-started → docs/docs/getting-started}/ai-agents.md +3 -3
  178. package/docs/docs/getting-started/components.html +27 -0
  179. package/docs/docs/getting-started/components.md +5 -0
  180. package/docs/{crawl/docs/_getting-started → docs/getting-started}/create-a-component.html +11 -14
  181. package/docs/{src/docs/_getting-started → docs/getting-started}/create-a-component.md +3 -6
  182. package/docs/{crawl/docs/_core-concept → docs/getting-started}/dataFlow.html +26 -29
  183. package/docs/{src/docs/_core-concept → docs/getting-started}/dataFlow.md +17 -18
  184. package/docs/docs/getting-started/installation.html +69 -0
  185. package/docs/docs/getting-started/installation.md +36 -0
  186. package/docs/{crawl/docs/_getting-started → docs/getting-started}/my-first-component.html +13 -22
  187. package/docs/{src/docs/_getting-started → docs/getting-started}/my-first-component.md +5 -14
  188. package/docs/docs/getting-started/start.html +47 -0
  189. package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
  190. package/docs/docs/getting-started/theming.html +334 -0
  191. package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +2 -2
  192. package/docs/docs/index.html +99 -0
  193. package/docs/{crawl/docs/_misc → docs/misc}/api-configuration.html +18 -18
  194. package/docs/{src/docs/_misc → docs/misc}/api-configuration.md +10 -12
  195. package/docs/{crawl/docs/_misc → docs/misc}/dataProviderKey.html +12 -11
  196. package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
  197. package/docs/{crawl/docs/_misc → docs/misc}/docs-mock-api.html +25 -28
  198. package/docs/{src/docs/_misc → docs/misc}/docs-mock-api.md +12 -13
  199. package/docs/{crawl/docs/_misc → docs/misc}/dynamic-path.html +16 -15
  200. package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
  201. package/docs/{crawl/docs/_misc → docs/misc}/endpoint.html +16 -15
  202. package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
  203. package/docs/{crawl/docs/_misc → docs/misc}/html-integration.html +12 -15
  204. package/docs/{src/docs/_misc → docs/misc}/html-integration.md +4 -5
  205. package/docs/docs-mock-api-sw.js +60 -223
  206. package/docs/docs-mock-api-sw.js.map +4 -4
  207. package/docs/hubs/decorators.html +443 -0
  208. package/docs/hubs/form-components.html +404 -0
  209. package/docs/hubs/remote-data.html +371 -0
  210. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  211. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  212. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  213. package/docs/img/archive/credits.json +28 -0
  214. package/docs/img/concorde/plane_01.jpg +0 -0
  215. package/docs/img/concorde/plane_02.jpg +0 -0
  216. package/docs/img/concorde/plane_03.jpg +0 -0
  217. package/docs/img/concorde/plane_04.jpg +0 -0
  218. package/docs/img/concorde/plane_05.jpg +0 -0
  219. package/docs/img/concorde/plane_06.jpg +0 -0
  220. package/docs/img/concorde/plane_07.jpg +0 -0
  221. package/docs/img/concorde/plane_08.jpg +0 -0
  222. package/docs/img/concorde/plane_09.jpg +0 -0
  223. package/docs/img/concorde/plane_10.jpg +0 -0
  224. package/docs/img/concorde/plane_11.jpg +0 -0
  225. package/docs/img/concorde/plane_12.jpg +0 -0
  226. package/docs/img/concorde/plane_13.jpg +0 -0
  227. package/docs/index.html +96 -67
  228. package/docs/index.md +22 -0
  229. package/docs/llms-full.txt +3329 -3295
  230. package/docs/llms.txt +94 -92
  231. package/docs/robots.txt +11 -10
  232. package/docs/sitemap.xml +78 -78
  233. package/docs/src/core/components/functional/date/date.md +91 -231
  234. package/docs/src/core/components/functional/fetch/fetch.md +66 -83
  235. package/docs/src/core/components/functional/if/if.md +28 -3
  236. package/docs/src/core/components/functional/jsonata/jsonata.md +42 -37
  237. package/docs/src/core/components/functional/list/list.md +99 -43
  238. package/docs/src/core/components/functional/mix/mix.md +31 -26
  239. package/docs/src/core/components/functional/queue/queue.md +40 -61
  240. package/docs/src/core/components/functional/router/router.md +64 -65
  241. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  242. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  243. package/docs/src/core/components/functional/sdui/example.json +19 -86
  244. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  245. package/docs/src/core/components/functional/sdui/sdui.md +196 -245
  246. package/docs/src/core/components/functional/states/states.md +86 -61
  247. package/docs/src/core/components/functional/submit/submit.md +64 -72
  248. package/docs/src/core/components/functional/translation/translation.md +38 -0
  249. package/docs/src/core/components/functional/value/value.md +34 -22
  250. package/docs/src/core/components/ui/alert/alert.md +139 -74
  251. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  252. package/docs/src/core/components/ui/badge/badge.md +137 -83
  253. package/docs/src/core/components/ui/button/button.md +139 -105
  254. package/docs/src/core/components/ui/captcha/captcha.md +50 -6
  255. package/docs/src/core/components/ui/card/card.md +183 -65
  256. package/docs/src/core/components/ui/divider/divider.md +104 -13
  257. package/docs/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  258. package/docs/src/core/components/ui/form/fieldset/fieldset.md +135 -103
  259. package/docs/src/core/components/ui/form/form-actions/form-actions.md +71 -50
  260. package/docs/src/core/components/ui/form/form-layout/form-layout.md +99 -34
  261. package/docs/src/core/components/ui/form/input/input.md +95 -95
  262. package/docs/src/core/components/ui/form/radio/radio.md +55 -34
  263. package/docs/src/core/components/ui/form/select/select.md +60 -45
  264. package/docs/src/core/components/ui/form/switch/switch.md +57 -34
  265. package/docs/src/core/components/ui/form/textarea/textarea.md +55 -38
  266. package/docs/src/core/components/ui/group/group.md +49 -47
  267. package/docs/src/core/components/ui/icon/icon.md +132 -43
  268. package/docs/src/core/components/ui/image/image.md +132 -72
  269. package/docs/src/core/components/ui/link/link.md +46 -8
  270. package/docs/src/core/components/ui/loader/loader.md +55 -23
  271. package/docs/src/core/components/ui/menu/menu.md +155 -114
  272. package/docs/src/core/components/ui/modal/modal.md +154 -62
  273. package/docs/src/core/components/ui/pop/pop.md +185 -65
  274. package/docs/src/core/components/ui/progress/progress.md +76 -30
  275. package/docs/src/core/components/ui/table/table.md +146 -334
  276. package/docs/src/core/components/ui/theme/theme.md +97 -0
  277. package/docs/src/core/components/ui/toast/toast.md +80 -99
  278. package/docs/src/core/components/ui/tooltip/tooltip.md +52 -45
  279. package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
  280. package/docs/src/docs/decorators/auto-subscribe.md +40 -0
  281. package/docs/src/docs/decorators/bind.md +77 -0
  282. package/docs/src/docs/decorators/get.md +160 -0
  283. package/docs/src/docs/decorators/handle.md +119 -0
  284. package/docs/src/docs/decorators/on-assign.md +63 -0
  285. package/docs/src/docs/decorators/patch.md +44 -0
  286. package/docs/src/docs/decorators/post.md +134 -0
  287. package/docs/src/docs/decorators/publish.md +56 -0
  288. package/docs/src/docs/decorators/put.md +51 -0
  289. package/docs/src/docs/decorators/subscribe.md +87 -0
  290. package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
  291. package/docs/src/docs/directives/sub.md +75 -0
  292. package/docs/src/docs/directives/t.md +73 -0
  293. package/docs/src/docs/{_getting-started → getting-started}/ai-agents.md +3 -3
  294. package/docs/src/docs/getting-started/components.md +5 -0
  295. package/{src/docs/_getting-started → docs/src/docs/getting-started}/create-a-component.md +3 -6
  296. package/{src/docs/_core-concept → docs/src/docs/getting-started}/dataFlow.md +17 -18
  297. package/docs/src/docs/getting-started/installation.md +36 -0
  298. package/{src/docs/_getting-started → docs/src/docs/getting-started}/my-first-component.md +5 -14
  299. package/docs/src/docs/getting-started/start.md +35 -0
  300. package/docs/src/docs/getting-started/theming.md +253 -0
  301. package/{src/docs/_misc → docs/src/docs/misc}/api-configuration.md +10 -12
  302. package/docs/src/docs/{_misc → misc}/dataProviderKey.md +4 -4
  303. package/{src/docs/_misc → docs/src/docs/misc}/docs-mock-api.md +12 -13
  304. package/docs/src/docs/{_misc → misc}/dynamic-path.md +8 -8
  305. package/docs/src/docs/{_misc → misc}/endpoint.md +8 -8
  306. package/{src/docs/_misc → docs/src/docs/misc}/html-integration.md +4 -5
  307. package/docs/src/docs/search/docs-search.json +3729 -2949
  308. package/docs/src/tsconfig.json +176 -5
  309. package/index.html +94 -67
  310. package/package.json +11 -4
  311. package/public/docs-mock-api-sw.js +58 -223
  312. package/public/docs-mock-api-sw.js.map +4 -4
  313. package/public/img/archive/concorde-001-2cv.webp +0 -0
  314. package/public/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  315. package/public/img/archive/concorde-red-arrows-2002.webm +0 -0
  316. package/public/img/archive/credits.json +28 -0
  317. package/public/img/concorde/plane_01.jpg +0 -0
  318. package/public/img/concorde/plane_02.jpg +0 -0
  319. package/public/img/concorde/plane_03.jpg +0 -0
  320. package/public/img/concorde/plane_04.jpg +0 -0
  321. package/public/img/concorde/plane_05.jpg +0 -0
  322. package/public/img/concorde/plane_06.jpg +0 -0
  323. package/public/img/concorde/plane_07.jpg +0 -0
  324. package/public/img/concorde/plane_08.jpg +0 -0
  325. package/public/img/concorde/plane_09.jpg +0 -0
  326. package/public/img/concorde/plane_10.jpg +0 -0
  327. package/public/img/concorde/plane_11.jpg +0 -0
  328. package/public/img/concorde/plane_12.jpg +0 -0
  329. package/public/img/concorde/plane_13.jpg +0 -0
  330. package/public/robots.txt +11 -10
  331. package/scripts/docs-markdown-vite-plugin.ts +37 -0
  332. package/scripts/docs-public-url.mjs +50 -0
  333. package/scripts/docs.htaccess +75 -0
  334. package/scripts/generate-crawl-docs.mjs +207 -116
  335. package/scripts/generate-crawl-docs.test.mjs +124 -0
  336. package/scripts/post-build-docs.js +34 -50
  337. package/scripts/post-build.mjs +0 -0
  338. package/src/core/components/functional/date/date.md +91 -231
  339. package/src/core/components/functional/fetch/fetch.md +66 -83
  340. package/src/core/components/functional/if/if.md +28 -3
  341. package/src/core/components/functional/if/if.ts +0 -0
  342. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  343. package/src/core/components/functional/list/list.demo.ts +0 -0
  344. package/src/core/components/functional/list/list.md +99 -43
  345. package/src/core/components/functional/mix/mix.md +31 -26
  346. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  347. package/src/core/components/functional/queue/queue.md +40 -61
  348. package/src/core/components/functional/router/router.demo.ts +16 -16
  349. package/src/core/components/functional/router/router.md +64 -65
  350. package/src/core/components/functional/router/router.ts +0 -0
  351. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  352. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  353. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  354. package/src/core/components/functional/sdui/example.json +19 -86
  355. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  356. package/src/core/components/functional/sdui/sdui.md +187 -358
  357. package/src/core/components/functional/sdui/types.ts +0 -0
  358. package/src/core/components/functional/states/states.demo.ts +21 -22
  359. package/src/core/components/functional/states/states.md +86 -61
  360. package/src/core/components/functional/states/states.ts +1 -1
  361. package/src/core/components/functional/submit/submit.md +64 -72
  362. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  363. package/src/core/components/functional/translation/translation.md +38 -0
  364. package/src/core/components/functional/value/value.md +34 -22
  365. package/src/core/components/functional/value/value.ts +0 -0
  366. package/src/core/components/ui/_css/size.ts +0 -0
  367. package/src/core/components/ui/alert/alert.md +48 -58
  368. package/src/core/components/ui/badge/badge.md +27 -34
  369. package/src/core/components/ui/button/button.md +139 -106
  370. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  371. package/src/core/components/ui/captcha/captcha.md +17 -32
  372. package/src/core/components/ui/card/card.md +6 -6
  373. package/src/core/components/ui/divider/divider.md +8 -11
  374. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  375. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  376. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  377. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  378. package/src/core/components/ui/form/input/input.md +95 -95
  379. package/src/core/components/ui/form/radio/radio.md +55 -34
  380. package/src/core/components/ui/form/select/select.md +60 -45
  381. package/src/core/components/ui/form/switch/switch.md +57 -34
  382. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  383. package/src/core/components/ui/group/group.md +35 -33
  384. package/src/core/components/ui/icon/icon.md +4 -4
  385. package/src/core/components/ui/image/image.md +41 -107
  386. package/src/core/components/ui/link/link.md +6 -6
  387. package/src/core/components/ui/loader/loader.md +30 -55
  388. package/src/core/components/ui/menu/menu.md +27 -27
  389. package/src/core/components/ui/modal/modal.md +72 -96
  390. package/src/core/components/ui/modal/modal.ts +14 -11
  391. package/src/core/components/ui/pop/pop.md +80 -158
  392. package/src/core/components/ui/progress/progress.md +2 -2
  393. package/src/core/components/ui/table/table.md +91 -255
  394. package/src/core/components/ui/theme/theme.md +11 -36
  395. package/src/core/components/ui/toast/toast.md +48 -117
  396. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  397. package/src/core/mixins/Subscriber.ts +0 -0
  398. package/src/core/utils/DataBindObserver.ts +0 -0
  399. package/src/core/utils/LocationHandler.spec.ts +80 -0
  400. package/src/core/utils/LocationHandler.ts +5 -9
  401. package/src/core/utils/Objects.ts +0 -0
  402. package/src/core/utils/route.ts +0 -0
  403. package/src/docs/code.ts +88 -75
  404. package/src/docs/components/docs-demo-sources.ts +70 -147
  405. package/src/docs/components/docs-lit-demo.ts +20 -40
  406. package/src/docs/components/docs-source-link.ts +0 -82
  407. package/src/docs/decorators/ancestor-attribute.md +59 -0
  408. package/src/docs/decorators/auto-subscribe.md +40 -0
  409. package/src/docs/decorators/bind.md +77 -0
  410. package/src/docs/decorators/get.md +160 -0
  411. package/src/docs/decorators/handle.md +119 -0
  412. package/src/docs/decorators/on-assign.md +63 -0
  413. package/src/docs/decorators/patch.md +44 -0
  414. package/src/docs/decorators/post.md +134 -0
  415. package/src/docs/decorators/publish.md +56 -0
  416. package/src/docs/decorators/put.md +51 -0
  417. package/src/docs/decorators/subscribe.md +87 -0
  418. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  419. package/src/docs/directives/sub.md +75 -0
  420. package/src/docs/directives/t.md +73 -0
  421. package/src/docs/docs-location.spec.ts +46 -0
  422. package/src/docs/docs-location.ts +123 -32
  423. package/src/docs/docs.ts +6 -2
  424. package/src/docs/example/decorators-demo-bind-demos.ts +81 -116
  425. package/src/docs/example/decorators-demo-geo.ts +30 -19
  426. package/src/docs/example/decorators-demo-post.ts +88 -186
  427. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  428. package/src/docs/example/decorators-demo.ts +85 -98
  429. package/src/docs/example/docs-api-config-demos.ts +19 -20
  430. package/src/docs/example/docs-boarding-pass-demo.ts +134 -0
  431. package/src/docs/example/docs-flight-demos.ts +147 -0
  432. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  433. package/src/docs/example/docs-list-demos.ts +43 -123
  434. package/src/docs/example/docs-provider-keys.ts +33 -28
  435. package/src/docs/example/docs-queue-demos.ts +37 -77
  436. package/src/docs/example/docs-router-demos.ts +20 -25
  437. package/src/docs/example/docs-submit-demos.ts +48 -48
  438. package/src/docs/example/docs-toggle-demos.ts +4 -3
  439. package/src/docs/example/users.ts +0 -0
  440. package/src/docs/getting-started/ai-agents.md +76 -0
  441. package/src/docs/getting-started/components.md +5 -0
  442. package/src/docs/getting-started/create-a-component.md +136 -0
  443. package/src/docs/getting-started/dataFlow.md +87 -0
  444. package/src/docs/getting-started/installation.md +36 -0
  445. package/src/docs/getting-started/my-first-component.md +227 -0
  446. package/src/docs/getting-started/start.md +35 -0
  447. package/src/docs/getting-started/theming.md +253 -0
  448. package/src/docs/header/header.ts +240 -71
  449. package/src/docs/home/catalog.ts +44 -0
  450. package/src/docs/home/home.ts +520 -0
  451. package/src/docs/home/mach-stage.ts +389 -0
  452. package/src/docs/layout.ts +12 -11
  453. package/src/docs/misc/api-configuration.md +79 -0
  454. package/src/docs/misc/dataProviderKey.md +168 -0
  455. package/src/docs/misc/docs-mock-api.md +62 -0
  456. package/src/docs/misc/dynamic-path.md +71 -0
  457. package/src/docs/misc/endpoint.md +45 -0
  458. package/src/docs/misc/html-integration.md +14 -0
  459. package/src/docs/mock-api/api-config-mock.ts +5 -0
  460. package/src/docs/mock-api/fixtures.ts +0 -278
  461. package/src/docs/mock-api/flights.ts +89 -0
  462. package/src/docs/mock-api/router.ts +3 -4
  463. package/src/docs/mock-api/urls.ts +1 -2
  464. package/src/docs/navigation/components-index.ts +56 -0
  465. package/src/docs/navigation/navigation.ts +219 -232
  466. package/src/docs/navigation/pager.ts +67 -0
  467. package/src/docs/navigation/toc.ts +101 -0
  468. package/src/docs/search/docs-search.json +2419 -4374
  469. package/src/docs/search/markdown-renderer.ts +33 -7
  470. package/src/docs/search/page.ts +9 -6
  471. package/src/docs/search/search.ts +154 -122
  472. package/src/docs/shiki/index.ts +109 -0
  473. package/src/docs/tailwind/css/base/scrollbar.css +22 -0
  474. package/src/docs/tailwind/css/base/theme.css +96 -0
  475. package/src/docs/tailwind/css/base/typography.css +4 -0
  476. package/src/docs/tailwind/css/docs/boarding-pass.css +65 -0
  477. package/src/docs/tailwind/css/docs/content.css +32 -0
  478. package/src/docs/tailwind/css/docs/page.css +10 -0
  479. package/src/docs/tailwind/css/docs.css +9 -0
  480. package/src/docs/tailwind/css/home/hero.css +210 -0
  481. package/src/docs/tailwind/css/home/motion.css +84 -0
  482. package/src/docs/tailwind/css/home/sections.css +416 -0
  483. package/src/docs/tailwind/css/tailwind.css +7 -185
  484. package/src/tsconfig.json +23 -2
  485. package/src/tsconfig.tsbuildinfo +1 -1
  486. package/tailwind.config.js +8 -4
  487. package/vite.config.mts +11 -2
  488. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  489. package/.github/workflows/ci.yml +0 -21
  490. package/.github-export-ignore +0 -30
  491. package/CONTRIBUTING.md +0 -59
  492. package/DEV.md +0 -54
  493. package/LICENSE +0 -21
  494. package/OPEN_SOURCE_CHECKPOINT.md +0 -133
  495. package/concorde-3d.bundle.js +0 -3960
  496. package/concorde-3d.es.js +0 -33433
  497. package/concorde-hugging-face-infer.bundle.js +0 -32
  498. package/concorde-hugging-face-infer.es.js +0 -2952
  499. package/concorde-interactive.bundle.js +0 -1157
  500. package/concorde-interactive.es.js +0 -10734
  501. package/concorde-shader.bundle.js +0 -116
  502. package/concorde-shader.es.js +0 -8353
  503. package/concorde-webgpu.bundle.js +0 -307
  504. package/concorde-webgpu.es.js +0 -8627
  505. package/docs/assets/index-D8MVWqY6.js +0 -12251
  506. package/docs/assets/index-DiD0qYvE.css +0 -1
  507. package/docs/crawl/core/components/functional/date/date.html +0 -190
  508. package/docs/crawl/core/components/functional/fetch/fetch.html +0 -109
  509. package/docs/crawl/core/components/functional/if/if.html +0 -27
  510. package/docs/crawl/core/components/functional/jsonata/jsonata.html +0 -79
  511. package/docs/crawl/core/components/functional/list/list.html +0 -70
  512. package/docs/crawl/core/components/functional/mix/mix.html +0 -45
  513. package/docs/crawl/core/components/functional/queue/queue.html +0 -96
  514. package/docs/crawl/core/components/functional/router/router.html +0 -106
  515. package/docs/crawl/core/components/functional/sdui/sdui.html +0 -269
  516. package/docs/crawl/core/components/functional/states/states.html +0 -66
  517. package/docs/crawl/core/components/functional/submit/submit.html +0 -160
  518. package/docs/crawl/core/components/functional/value/value.html +0 -51
  519. package/docs/crawl/core/components/ui/alert/alert.html +0 -110
  520. package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +0 -23
  521. package/docs/crawl/core/components/ui/badge/badge.html +0 -119
  522. package/docs/crawl/core/components/ui/button/button.html +0 -149
  523. package/docs/crawl/core/components/ui/captcha/captcha.html +0 -30
  524. package/docs/crawl/core/components/ui/card/card.html +0 -99
  525. package/docs/crawl/core/components/ui/divider/divider.html +0 -58
  526. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +0 -73
  527. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +0 -135
  528. package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +0 -79
  529. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +0 -62
  530. package/docs/crawl/core/components/ui/form/input/input.html +0 -109
  531. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +0 -38
  532. package/docs/crawl/core/components/ui/form/radio/radio.html +0 -56
  533. package/docs/crawl/core/components/ui/form/select/select.html +0 -73
  534. package/docs/crawl/core/components/ui/form/switch/switch.html +0 -56
  535. package/docs/crawl/core/components/ui/form/textarea/textarea.html +0 -59
  536. package/docs/crawl/core/components/ui/group/group.html +0 -82
  537. package/docs/crawl/core/components/ui/icon/icon.html +0 -133
  538. package/docs/crawl/core/components/ui/image/image.html +0 -110
  539. package/docs/crawl/core/components/ui/link/link.html +0 -42
  540. package/docs/crawl/core/components/ui/loader/loader.html +0 -50
  541. package/docs/crawl/core/components/ui/modal/modal.html +0 -117
  542. package/docs/crawl/core/components/ui/pop/pop.html +0 -102
  543. package/docs/crawl/core/components/ui/progress/progress.html +0 -58
  544. package/docs/crawl/core/components/ui/table/table.html +0 -413
  545. package/docs/crawl/core/components/ui/toast/toast.html +0 -122
  546. package/docs/crawl/core/components/ui/tooltip/tooltip.html +0 -79
  547. package/docs/crawl/docs/_core-concept/overview.html +0 -66
  548. package/docs/crawl/docs/_core-concept/subscriber.html +0 -75
  549. package/docs/crawl/docs/_decorators/ancestor-attribute.html +0 -116
  550. package/docs/crawl/docs/_decorators/auto-subscribe.html +0 -202
  551. package/docs/crawl/docs/_decorators/bind.html +0 -141
  552. package/docs/crawl/docs/_decorators/get.html +0 -149
  553. package/docs/crawl/docs/_decorators/handle.html +0 -165
  554. package/docs/crawl/docs/_decorators/on-assign.html +0 -355
  555. package/docs/crawl/docs/_decorators/patch.html +0 -78
  556. package/docs/crawl/docs/_decorators/post.html +0 -139
  557. package/docs/crawl/docs/_decorators/publish.html +0 -61
  558. package/docs/crawl/docs/_decorators/put.html +0 -78
  559. package/docs/crawl/docs/_decorators/subscribe.html +0 -109
  560. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +0 -137
  561. package/docs/crawl/docs/_directives/sub.html +0 -93
  562. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +0 -100
  563. package/docs/crawl/docs/_getting-started/concorde-outside.html +0 -58
  564. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +0 -110
  565. package/docs/crawl/docs/_getting-started/pubsub.html +0 -62
  566. package/docs/crawl/docs/_getting-started/start.html +0 -76
  567. package/docs/crawl/docs/_getting-started/theming.html +0 -85
  568. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +0 -138
  569. package/docs/crawl/hubs/decorators.html +0 -547
  570. package/docs/crawl/hubs/form-components.html +0 -359
  571. package/docs/crawl/hubs/remote-data.html +0 -452
  572. package/docs/crawl/index.html +0 -101
  573. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  574. package/docs/src/docs/_core-concept/overview.md +0 -57
  575. package/docs/src/docs/_core-concept/subscriber.md +0 -75
  576. package/docs/src/docs/_decorators/ancestor-attribute.md +0 -127
  577. package/docs/src/docs/_decorators/auto-subscribe.md +0 -202
  578. package/docs/src/docs/_decorators/bind.md +0 -167
  579. package/docs/src/docs/_decorators/get.md +0 -162
  580. package/docs/src/docs/_decorators/handle.md +0 -175
  581. package/docs/src/docs/_decorators/on-assign.md +0 -390
  582. package/docs/src/docs/_decorators/patch.md +0 -70
  583. package/docs/src/docs/_decorators/post.md +0 -146
  584. package/docs/src/docs/_decorators/publish.md +0 -55
  585. package/docs/src/docs/_decorators/put.md +0 -70
  586. package/docs/src/docs/_decorators/subscribe.md +0 -100
  587. package/docs/src/docs/_decorators/wait-for-ancestors.md +0 -163
  588. package/docs/src/docs/_directives/sub.md +0 -91
  589. package/docs/src/docs/_getting-started/concorde-manual-install.md +0 -133
  590. package/docs/src/docs/_getting-started/concorde-outside.md +0 -33
  591. package/docs/src/docs/_getting-started/my-first-subscriber.md +0 -120
  592. package/docs/src/docs/_getting-started/pubsub.md +0 -37
  593. package/docs/src/docs/_getting-started/start.md +0 -47
  594. package/docs/src/docs/_getting-started/theming.md +0 -91
  595. package/docs/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  596. package/docs/src/tsconfig.declarations.json +0 -22
  597. package/docs/src/tsconfig.emit.json +0 -23
  598. package/gitlab/job_github_mirror.sh +0 -39
  599. package/scripts/github-export.mjs +0 -150
  600. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  601. package/src/css.d.ts +0 -19
  602. package/src/docs/_core-concept/overview.md +0 -57
  603. package/src/docs/_core-concept/subscriber.md +0 -75
  604. package/src/docs/_decorators/ancestor-attribute.md +0 -128
  605. package/src/docs/_decorators/auto-subscribe.md +0 -202
  606. package/src/docs/_decorators/bind.md +0 -167
  607. package/src/docs/_decorators/get.md +0 -162
  608. package/src/docs/_decorators/handle.md +0 -175
  609. package/src/docs/_decorators/on-assign.md +0 -390
  610. package/src/docs/_decorators/patch.md +0 -70
  611. package/src/docs/_decorators/post.md +0 -146
  612. package/src/docs/_decorators/publish.md +0 -55
  613. package/src/docs/_decorators/put.md +0 -70
  614. package/src/docs/_decorators/subscribe.md +0 -100
  615. package/src/docs/_decorators/wait-for-ancestors.md +0 -163
  616. package/src/docs/_directives/sub.md +0 -91
  617. package/src/docs/_getting-started/concorde-manual-install.md +0 -133
  618. package/src/docs/_getting-started/concorde-outside.md +0 -33
  619. package/src/docs/_getting-started/my-first-subscriber.md +0 -120
  620. package/src/docs/_getting-started/pubsub.md +0 -37
  621. package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  622. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  623. package/src/docs/example/docs-joke-demos.ts +0 -297
  624. package/src/docs/prism/index.ts +0 -6
  625. package/src/docs/prism/prism.css +0 -158
  626. package/src/docs/prism/prism.js +0 -1022
  627. package/src/tsconfig.declarations.json +0 -22
  628. package/src/tsconfig.emit.json +0 -23
@@ -0,0 +1,2556 @@
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
+ }