@tryvitris/website-harness 0.1.0-beta.6 → 0.1.0-beta.7

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 (458) hide show
  1. package/README.md +4 -4
  2. package/agent/graph.yaml +0 -2
  3. package/agent/refs/components.md +5 -41
  4. package/agent/refs/compose.md +1 -1
  5. package/agent/refs/implement.md +2 -2
  6. package/agent/refs/jev.md +1 -1
  7. package/agent/refs/layout.md +1 -1
  8. package/agent/refs/storyboard.md +1 -1
  9. package/agent/refs/template-adaptation.md +1 -1
  10. package/bin/api/agent/evaluate.js +10 -15
  11. package/bin/api/agent/grade.js +10 -15
  12. package/bin/api/cli/api.js +18 -23
  13. package/bin/api/cli.js +20 -25
  14. package/bin/api/engine.js +11 -16
  15. package/bin/api/hosting.js +12 -17
  16. package/bin/api/index.js +2 -3
  17. package/bin/api/references.js +1 -2
  18. package/bin/api/render.js +2 -4
  19. package/bin/chunks/{chunk-4GZCAWWK.js → chunk-4MFPATAB.js} +2 -4
  20. package/bin/chunks/{chunk-5OOPJNGN.js → chunk-5JTBC6UK.js} +1 -4
  21. package/bin/chunks/{chunk-Z2UNY47A.js → chunk-5YSPWKFF.js} +1 -1
  22. package/bin/chunks/{chunk-FYN4T4SV.js → chunk-7V3OKLKH.js} +15 -26
  23. package/bin/chunks/{chunk-3CTBXY5K.js → chunk-FRABKM65.js} +1936 -1899
  24. package/bin/chunks/{chunk-4DM5TTLG.js → chunk-H7Y72HXC.js} +5 -5
  25. package/bin/chunks/{chunk-R7YELY3C.js → chunk-HL6JVA4A.js} +100 -81
  26. package/bin/chunks/{chunk-54JC5L35.js → chunk-O55LAQ2C.js} +3 -5
  27. package/bin/chunks/{chunk-VH7PM7KJ.js → chunk-P56ZDMX7.js} +4 -6
  28. package/bin/chunks/{chunk-7VLBEAFW.js → chunk-PGFFKPK6.js} +2 -2
  29. package/bin/chunks/{chunk-YQYHROLZ.js → chunk-QRWGFLUU.js} +2 -2
  30. package/bin/chunks/{chunk-CBEJZO4L.js → chunk-TTAUU3AZ.js} +2 -2
  31. package/bin/chunks/{chunk-E5Y46VBX.js → chunk-VTI32UGJ.js} +200 -103
  32. package/bin/chunks/{chunk-DRJQ4OOU.js → chunk-WOORR67N.js} +0 -45
  33. package/bin/chunks/{chunk-B5I45LFD.js → chunk-YZWEXHT4.js} +11 -13
  34. package/bin/chunks/{chunk-YCVGD2CG.js → chunk-ZIROO2U4.js} +1204 -1176
  35. package/bin/chunks/{chunk-42IXFXUD.js → chunk-ZWFG4GPG.js} +11 -15
  36. package/bin/chunks/{design-context-store-IAT2P2OC.js → design-context-store-DCZOAK56.js} +10 -15
  37. package/bin/chunks/{packets-VBMY4SQJ.js → packets-QOLWPRNV.js} +10 -15
  38. package/bin/chunks/{policy-2I37JUU3.js → policy-MP2JZXI3.js} +1 -1
  39. package/bin/chunks/{preparation-S4MG3RPL.js → preparation-T2IOD5SJ.js} +10 -15
  40. package/bin/chunks/{questions-HKELBDFL.js → questions-XK545GCX.js} +1 -11
  41. package/bin/types/src/agent/composition-authoring.d.ts +2 -2
  42. package/bin/types/src/agent/jev/calibration.d.ts +2 -2
  43. package/bin/types/src/agent/jev/config.d.ts +1 -1
  44. package/bin/types/src/agent/jev/questions.d.ts +0 -10
  45. package/bin/types/src/agent/jev/types.d.ts +0 -2
  46. package/bin/types/src/agent/site-inputs.d.ts +9 -1
  47. package/bin/types/src/agent/template-catalog.d.ts +20 -0
  48. package/bin/types/src/agent/theme-selection.d.ts +4 -2
  49. package/bin/types/src/build/archives.d.ts +2 -0
  50. package/bin/vitris-art.js +10 -15
  51. package/bin/vitris-build.js +3 -5
  52. package/bin/vitris-create-site.js +12 -17
  53. package/bin/vitris-cursor-hook.js +10 -15
  54. package/bin/vitris-eval.js +12 -17
  55. package/bin/vitris-go.js +14 -19
  56. package/bin/vitris-harvest.js +11 -16
  57. package/bin/vitris-knowledge.js +11 -16
  58. package/bin/vitris-launch-preflight.js +11 -17
  59. package/bin/vitris-motion-view.js +13 -19
  60. package/bin/vitris-references.js +4 -7
  61. package/bin/vitris-refresh.js +11 -16
  62. package/bin/vitris-stock.js +1 -1
  63. package/bin/vitris-themes.js +10 -15
  64. package/bin/vitris-upgrade.js +11 -16
  65. package/bin/vitris-verify-browser.js +43 -8
  66. package/bin/vitris-verify-performance.js +3 -5
  67. package/bin/vitris.js +20 -25
  68. package/design-system/MASTER.md +2 -2
  69. package/docs/CLI.md +2 -1
  70. package/docs/DISTRIBUTION.md +1 -1
  71. package/package.json +2 -7
  72. package/templates/site/README.md +2 -0
  73. package/templates/site/gitignore +1 -0
  74. package/bin/chunks/chunk-6H3T46F5.js +0 -25
  75. package/bin/chunks/chunk-ANMJRJQ5.js +0 -31
  76. package/bin/chunks/chunk-FOXUQXTV.js +0 -278
  77. package/bin/chunks/chunk-HNORQ74T.js +0 -40
  78. package/bin/chunks/chunk-T7DGRVTP.js +0 -458
  79. package/bin/types/src/agent/jev/block-catalog.d.ts +0 -95
  80. package/bin/types/src/agent/jev/component-select.d.ts +0 -102
  81. package/bin/types/src/blocks/library-profile.d.ts +0 -9
  82. package/bin/types/src/blocks/metadata.d.ts +0 -65
  83. package/bin/vitris-blocks.js +0 -238
  84. package/blocks/CONVENTIONS.md +0 -121
  85. package/blocks/INDEX.md +0 -130
  86. package/blocks/about/about-awards/README.md +0 -36
  87. package/blocks/about/about-awards/styles.css +0 -13
  88. package/blocks/about/about-awards/template.html +0 -1
  89. package/blocks/about/about-credentials/README.md +0 -33
  90. package/blocks/about/about-credentials/block.meta.json +0 -85
  91. package/blocks/about/about-credentials/styles.css +0 -4
  92. package/blocks/about/about-credentials/template.html +0 -1
  93. package/blocks/about/about-founder/README.md +0 -35
  94. package/blocks/about/about-founder/styles.css +0 -9
  95. package/blocks/about/about-founder/template.html +0 -1
  96. package/blocks/about/about-mission/README.md +0 -31
  97. package/blocks/about/about-mission/styles.css +0 -5
  98. package/blocks/about/about-mission/template.html +0 -1
  99. package/blocks/about/about-statement/README.md +0 -28
  100. package/blocks/about/about-statement/styles.css +0 -7
  101. package/blocks/about/about-statement/template.html +0 -1
  102. package/blocks/about/about-story/README.md +0 -35
  103. package/blocks/about/about-story/styles.css +0 -5
  104. package/blocks/about/about-story/template.html +0 -1
  105. package/blocks/about/about-timeline/README.md +0 -33
  106. package/blocks/about/about-timeline/styles.css +0 -8
  107. package/blocks/about/about-timeline/template.html +0 -1
  108. package/blocks/about/about-values/README.md +0 -31
  109. package/blocks/about/about-values/styles.css +0 -3
  110. package/blocks/about/about-values/template.html +0 -1
  111. package/blocks/blog/blog-featured/README.md +0 -39
  112. package/blocks/blog/blog-featured/styles.css +0 -12
  113. package/blocks/blog/blog-featured/template.html +0 -1
  114. package/blocks/blog/blog-index/README.md +0 -34
  115. package/blocks/blog/blog-index/styles.css +0 -6
  116. package/blocks/blog/blog-index/template.html +0 -1
  117. package/blocks/blog/blog-post-header/README.md +0 -31
  118. package/blocks/blog/blog-post-header/styles.css +0 -8
  119. package/blocks/blog/blog-post-header/template.html +0 -1
  120. package/blocks/contact/contact-cards/README.md +0 -32
  121. package/blocks/contact/contact-cards/styles.css +0 -7
  122. package/blocks/contact/contact-cards/template.html +0 -1
  123. package/blocks/contact/contact-chips/README.md +0 -41
  124. package/blocks/contact/contact-chips/styles.css +0 -13
  125. package/blocks/contact/contact-chips/template.html +0 -1
  126. package/blocks/contact/contact-hours/README.md +0 -41
  127. package/blocks/contact/contact-hours/block.meta.json +0 -87
  128. package/blocks/contact/contact-hours/styles.css +0 -8
  129. package/blocks/contact/contact-hours/template.html +0 -1
  130. package/blocks/contact/contact-map/README.md +0 -39
  131. package/blocks/contact/contact-map/styles.css +0 -10
  132. package/blocks/contact/contact-map/template.html +0 -1
  133. package/blocks/contact/contact-offices/README.md +0 -32
  134. package/blocks/contact/contact-offices/styles.css +0 -8
  135. package/blocks/contact/contact-offices/template.html +0 -1
  136. package/blocks/contact/contact-phone-first/README.md +0 -33
  137. package/blocks/contact/contact-phone-first/block.meta.json +0 -86
  138. package/blocks/contact/contact-phone-first/styles.css +0 -11
  139. package/blocks/contact/contact-phone-first/template.html +0 -1
  140. package/blocks/contact/contact-split/README.md +0 -43
  141. package/blocks/contact/contact-split/styles.css +0 -12
  142. package/blocks/contact/contact-split/template.html +0 -1
  143. package/blocks/contact/contact-visit/README.md +0 -36
  144. package/blocks/contact/contact-visit/block.meta.json +0 -88
  145. package/blocks/contact/contact-visit/styles.css +0 -13
  146. package/blocks/contact/contact-visit/template.html +0 -1
  147. package/blocks/contact/service-areas/README.md +0 -32
  148. package/blocks/contact/service-areas/styles.css +0 -9
  149. package/blocks/contact/service-areas/template.html +0 -1
  150. package/blocks/content/glossary/README.md +0 -35
  151. package/blocks/content/glossary/styles.css +0 -6
  152. package/blocks/content/glossary/template.html +0 -1
  153. package/blocks/content/list-split/README.md +0 -33
  154. package/blocks/content/list-split/styles.css +0 -13
  155. package/blocks/content/list-split/template.html +0 -1
  156. package/blocks/content/prose-split/README.md +0 -32
  157. package/blocks/content/prose-split/styles.css +0 -12
  158. package/blocks/content/prose-split/template.html +0 -1
  159. package/blocks/content/specification-ledger/README.md +0 -32
  160. package/blocks/content/specification-ledger/block.meta.json +0 -85
  161. package/blocks/content/specification-ledger/styles.css +0 -10
  162. package/blocks/content/specification-ledger/template.html +0 -1
  163. package/blocks/cta/cta-band/README.md +0 -33
  164. package/blocks/cta/cta-band/styles.css +0 -11
  165. package/blocks/cta/cta-band/template.html +0 -1
  166. package/blocks/cta/cta-card/README.md +0 -35
  167. package/blocks/cta/cta-card/styles.css +0 -8
  168. package/blocks/cta/cta-card/template.html +0 -1
  169. package/blocks/cta/cta-floating-bar/README.md +0 -28
  170. package/blocks/cta/cta-floating-bar/styles.css +0 -8
  171. package/blocks/cta/cta-floating-bar/template.html +0 -1
  172. package/blocks/cta/cta-inline/README.md +0 -30
  173. package/blocks/cta/cta-inline/styles.css +0 -9
  174. package/blocks/cta/cta-inline/template.html +0 -1
  175. package/blocks/cta/cta-newsletter/README.md +0 -34
  176. package/blocks/cta/cta-newsletter/styles.css +0 -8
  177. package/blocks/cta/cta-newsletter/template.html +0 -1
  178. package/blocks/cta/cta-photo-fan/README.md +0 -36
  179. package/blocks/cta/cta-photo-fan/styles.css +0 -14
  180. package/blocks/cta/cta-photo-fan/template.html +0 -1
  181. package/blocks/cta/cta-split/README.md +0 -38
  182. package/blocks/cta/cta-split/styles.css +0 -10
  183. package/blocks/cta/cta-split/template.html +0 -1
  184. package/blocks/faq/faq-accordion/README.md +0 -36
  185. package/blocks/faq/faq-accordion/styles.css +0 -6
  186. package/blocks/faq/faq-accordion/template.html +0 -1
  187. package/blocks/faq/faq-grouped/README.md +0 -40
  188. package/blocks/faq/faq-grouped/styles.css +0 -20
  189. package/blocks/faq/faq-grouped/template.html +0 -1
  190. package/blocks/faq/faq-split/README.md +0 -37
  191. package/blocks/faq/faq-split/styles.css +0 -5
  192. package/blocks/faq/faq-split/template.html +0 -1
  193. package/blocks/faq/faq-tabs/README.md +0 -36
  194. package/blocks/faq/faq-tabs/styles.css +0 -3
  195. package/blocks/faq/faq-tabs/template.html +0 -1
  196. package/blocks/feature/feature-bento/README.md +0 -33
  197. package/blocks/feature/feature-bento/styles.css +0 -7
  198. package/blocks/feature/feature-bento/template.html +0 -1
  199. package/blocks/feature/feature-compare-table/README.md +0 -44
  200. package/blocks/feature/feature-compare-table/styles.css +0 -15
  201. package/blocks/feature/feature-compare-table/template.html +0 -1
  202. package/blocks/feature/feature-comparison/README.md +0 -34
  203. package/blocks/feature/feature-comparison/styles.css +0 -6
  204. package/blocks/feature/feature-comparison/template.html +0 -1
  205. package/blocks/feature/feature-grid-3/README.md +0 -34
  206. package/blocks/feature/feature-grid-3/styles.css +0 -8
  207. package/blocks/feature/feature-grid-3/template.html +0 -1
  208. package/blocks/feature/feature-icon-list/README.md +0 -39
  209. package/blocks/feature/feature-icon-list/styles.css +0 -9
  210. package/blocks/feature/feature-icon-list/template.html +0 -1
  211. package/blocks/feature/feature-spotlight/README.md +0 -39
  212. package/blocks/feature/feature-spotlight/styles.css +0 -5
  213. package/blocks/feature/feature-spotlight/template.html +0 -1
  214. package/blocks/feature/feature-stats-band/README.md +0 -33
  215. package/blocks/feature/feature-stats-band/styles.css +0 -8
  216. package/blocks/feature/feature-stats-band/template.html +0 -1
  217. package/blocks/feature/feature-tabs/README.md +0 -38
  218. package/blocks/feature/feature-tabs/styles.css +0 -7
  219. package/blocks/feature/feature-tabs/template.html +0 -1
  220. package/blocks/feature/feature-thumb-list/README.md +0 -38
  221. package/blocks/feature/feature-thumb-list/styles.css +0 -13
  222. package/blocks/feature/feature-thumb-list/template.html +0 -1
  223. package/blocks/feature/feature-zigzag/README.md +0 -31
  224. package/blocks/feature/feature-zigzag/styles.css +0 -6
  225. package/blocks/feature/feature-zigzag/template.html +0 -1
  226. package/blocks/footer/footer-columns/README.md +0 -39
  227. package/blocks/footer/footer-columns/styles.css +0 -16
  228. package/blocks/footer/footer-columns/template.html +0 -1
  229. package/blocks/footer/footer-compact/README.md +0 -33
  230. package/blocks/footer/footer-compact/styles.css +0 -12
  231. package/blocks/footer/footer-compact/template.html +0 -1
  232. package/blocks/footer/footer-cta/README.md +0 -37
  233. package/blocks/footer/footer-cta/styles.css +0 -18
  234. package/blocks/footer/footer-cta/template.html +0 -1
  235. package/blocks/footer/footer-social/README.md +0 -37
  236. package/blocks/footer/footer-social/styles.css +0 -17
  237. package/blocks/footer/footer-social/template.html +0 -1
  238. package/blocks/footer/footer-wordmark/README.md +0 -40
  239. package/blocks/footer/footer-wordmark/styles.css +0 -19
  240. package/blocks/footer/footer-wordmark/template.html +0 -1
  241. package/blocks/gallery/gallery-before-after/README.md +0 -31
  242. package/blocks/gallery/gallery-before-after/styles.css +0 -6
  243. package/blocks/gallery/gallery-before-after/template.html +0 -1
  244. package/blocks/gallery/gallery-carousel/README.md +0 -32
  245. package/blocks/gallery/gallery-carousel/styles.css +0 -7
  246. package/blocks/gallery/gallery-carousel/template.html +0 -1
  247. package/blocks/gallery/gallery-grid/README.md +0 -39
  248. package/blocks/gallery/gallery-grid/styles.css +0 -13
  249. package/blocks/gallery/gallery-grid/template.html +0 -1
  250. package/blocks/gallery/gallery-masonry/README.md +0 -33
  251. package/blocks/gallery/gallery-masonry/styles.css +0 -4
  252. package/blocks/gallery/gallery-masonry/template.html +0 -1
  253. package/blocks/gallery/gallery-mosaic-split/README.md +0 -40
  254. package/blocks/gallery/gallery-mosaic-split/styles.css +0 -15
  255. package/blocks/gallery/gallery-mosaic-split/template.html +0 -1
  256. package/blocks/hero/hero-asymmetric/README.md +0 -34
  257. package/blocks/hero/hero-asymmetric/styles.css +0 -13
  258. package/blocks/hero/hero-asymmetric/template.html +0 -10
  259. package/blocks/hero/hero-before-after/README.md +0 -38
  260. package/blocks/hero/hero-before-after/styles.css +0 -8
  261. package/blocks/hero/hero-before-after/template.html +0 -19
  262. package/blocks/hero/hero-editorial/README.md +0 -34
  263. package/blocks/hero/hero-editorial/block.meta.json +0 -85
  264. package/blocks/hero/hero-editorial/styles.css +0 -6
  265. package/blocks/hero/hero-editorial/template.html +0 -10
  266. package/blocks/hero/hero-evidence/README.md +0 -32
  267. package/blocks/hero/hero-evidence/block.meta.json +0 -85
  268. package/blocks/hero/hero-evidence/styles.css +0 -13
  269. package/blocks/hero/hero-evidence/template.html +0 -1
  270. package/blocks/hero/hero-form/README.md +0 -46
  271. package/blocks/hero/hero-form/styles.css +0 -11
  272. package/blocks/hero/hero-form/template.html +0 -15
  273. package/blocks/hero/hero-menu/README.md +0 -36
  274. package/blocks/hero/hero-menu/styles.css +0 -7
  275. package/blocks/hero/hero-menu/template.html +0 -10
  276. package/blocks/hero/hero-overlay/README.md +0 -35
  277. package/blocks/hero/hero-overlay/styles.css +0 -14
  278. package/blocks/hero/hero-overlay/template.html +0 -10
  279. package/blocks/hero/hero-page/README.md +0 -35
  280. package/blocks/hero/hero-page/styles.css +0 -19
  281. package/blocks/hero/hero-page/template.html +0 -1
  282. package/blocks/hero/hero-product/README.md +0 -41
  283. package/blocks/hero/hero-product/styles.css +0 -11
  284. package/blocks/hero/hero-product/template.html +0 -14
  285. package/blocks/hero/hero-service/README.md +0 -37
  286. package/blocks/hero/hero-service/block.meta.json +0 -85
  287. package/blocks/hero/hero-service/styles.css +0 -17
  288. package/blocks/hero/hero-service/template.html +0 -1
  289. package/blocks/hero/hero-split/README.md +0 -36
  290. package/blocks/hero/hero-split/styles.css +0 -7
  291. package/blocks/hero/hero-split/template.html +0 -11
  292. package/blocks/hero/hero-statement/README.md +0 -33
  293. package/blocks/hero/hero-statement/styles.css +0 -8
  294. package/blocks/hero/hero-statement/template.html +0 -1
  295. package/blocks/hero/hero-stats/README.md +0 -37
  296. package/blocks/hero/hero-stats/styles.css +0 -10
  297. package/blocks/hero/hero-stats/template.html +0 -10
  298. package/blocks/hero/hero-video-still/README.md +0 -36
  299. package/blocks/hero/hero-video-still/styles.css +0 -9
  300. package/blocks/hero/hero-video-still/template.html +0 -13
  301. package/blocks/icons.md +0 -44
  302. package/blocks/incentives/incentive-banner/README.md +0 -28
  303. package/blocks/incentives/incentive-banner/styles.css +0 -7
  304. package/blocks/incentives/incentive-banner/template.html +0 -1
  305. package/blocks/incentives/incentive-cards/README.md +0 -31
  306. package/blocks/incentives/incentive-cards/styles.css +0 -4
  307. package/blocks/incentives/incentive-cards/template.html +0 -1
  308. package/blocks/navbar/nav-announcement/README.md +0 -35
  309. package/blocks/navbar/nav-announcement/styles.css +0 -10
  310. package/blocks/navbar/nav-announcement/template.html +0 -14
  311. package/blocks/navbar/nav-centered/README.md +0 -35
  312. package/blocks/navbar/nav-centered/styles.css +0 -11
  313. package/blocks/navbar/nav-centered/template.html +0 -12
  314. package/blocks/navbar/nav-minimal/README.md +0 -29
  315. package/blocks/navbar/nav-minimal/styles.css +0 -5
  316. package/blocks/navbar/nav-minimal/template.html +0 -6
  317. package/blocks/navbar/nav-split/README.md +0 -34
  318. package/blocks/navbar/nav-split/styles.css +0 -11
  319. package/blocks/navbar/nav-split/template.html +0 -11
  320. package/blocks/navbar/nav-utility/README.md +0 -37
  321. package/blocks/navbar/nav-utility/styles.css +0 -17
  322. package/blocks/navbar/nav-utility/template.html +0 -12
  323. package/blocks/pricing/menu-featured/README.md +0 -34
  324. package/blocks/pricing/menu-featured/styles.css +0 -4
  325. package/blocks/pricing/menu-featured/template.html +0 -1
  326. package/blocks/pricing/menu-sections/README.md +0 -33
  327. package/blocks/pricing/menu-sections/styles.css +0 -9
  328. package/blocks/pricing/menu-sections/template.html +0 -1
  329. package/blocks/pricing/pricing-table/README.md +0 -40
  330. package/blocks/pricing/pricing-table/styles.css +0 -9
  331. package/blocks/pricing/pricing-table/template.html +0 -1
  332. package/blocks/pricing/pricing-tiers/README.md +0 -34
  333. package/blocks/pricing/pricing-tiers/styles.css +0 -7
  334. package/blocks/pricing/pricing-tiers/template.html +0 -1
  335. package/blocks/pricing/pricing-toggle/README.md +0 -34
  336. package/blocks/pricing/pricing-toggle/styles.css +0 -10
  337. package/blocks/pricing/pricing-toggle/template.html +0 -1
  338. package/blocks/process/process-carousel/README.md +0 -33
  339. package/blocks/process/process-carousel/styles.css +0 -5
  340. package/blocks/process/process-carousel/template.html +0 -1
  341. package/blocks/process/process-split/README.md +0 -35
  342. package/blocks/process/process-split/styles.css +0 -6
  343. package/blocks/process/process-split/template.html +0 -1
  344. package/blocks/process/process-stepper/README.md +0 -40
  345. package/blocks/process/process-stepper/styles.css +0 -11
  346. package/blocks/process/process-stepper/template.html +0 -1
  347. package/blocks/process/process-steps/README.md +0 -35
  348. package/blocks/process/process-steps/styles.css +0 -6
  349. package/blocks/process/process-steps/template.html +0 -1
  350. package/blocks/process/process-sticky/README.md +0 -38
  351. package/blocks/process/process-sticky/styles.css +0 -12
  352. package/blocks/process/process-sticky/template.html +0 -1
  353. package/blocks/process/process-timeline/README.md +0 -35
  354. package/blocks/process/process-timeline/styles.css +0 -10
  355. package/blocks/process/process-timeline/template.html +0 -1
  356. package/blocks/services/services-cards/README.md +0 -34
  357. package/blocks/services/services-cards/styles.css +0 -3
  358. package/blocks/services/services-cards/template.html +0 -1
  359. package/blocks/services/services-carousel/README.md +0 -34
  360. package/blocks/services/services-carousel/styles.css +0 -6
  361. package/blocks/services/services-carousel/template.html +0 -1
  362. package/blocks/services/services-list/README.md +0 -32
  363. package/blocks/services/services-list/block.meta.json +0 -85
  364. package/blocks/services/services-list/styles.css +0 -10
  365. package/blocks/services/services-list/template.html +0 -1
  366. package/blocks/services/services-menu/README.md +0 -39
  367. package/blocks/services/services-menu/styles.css +0 -6
  368. package/blocks/services/services-menu/template.html +0 -1
  369. package/blocks/services/services-packages/README.md +0 -34
  370. package/blocks/services/services-packages/styles.css +0 -6
  371. package/blocks/services/services-packages/template.html +0 -1
  372. package/blocks/services/services-panels/README.md +0 -36
  373. package/blocks/services/services-panels/styles.css +0 -15
  374. package/blocks/services/services-panels/template.html +0 -1
  375. package/blocks/services/services-photo-grid/README.md +0 -39
  376. package/blocks/services/services-photo-grid/styles.css +0 -10
  377. package/blocks/services/services-photo-grid/template.html +0 -1
  378. package/blocks/services/services-priority/README.md +0 -33
  379. package/blocks/services/services-priority/block.meta.json +0 -86
  380. package/blocks/services/services-priority/styles.css +0 -16
  381. package/blocks/services/services-priority/template.html +0 -1
  382. package/blocks/stats/stats-cards/README.md +0 -31
  383. package/blocks/stats/stats-cards/styles.css +0 -4
  384. package/blocks/stats/stats-cards/template.html +0 -1
  385. package/blocks/stats/stats-mosaic/README.md +0 -27
  386. package/blocks/stats/stats-mosaic/styles.css +0 -9
  387. package/blocks/stats/stats-mosaic/template.html +0 -1
  388. package/blocks/stats/stats-row/README.md +0 -29
  389. package/blocks/stats/stats-row/styles.css +0 -8
  390. package/blocks/stats/stats-row/template.html +0 -1
  391. package/blocks/stats/stats-split/README.md +0 -35
  392. package/blocks/stats/stats-split/styles.css +0 -3
  393. package/blocks/stats/stats-split/template.html +0 -1
  394. package/blocks/team/team-featured/README.md +0 -42
  395. package/blocks/team/team-featured/styles.css +0 -9
  396. package/blocks/team/team-featured/template.html +0 -1
  397. package/blocks/team/team-grid/README.md +0 -35
  398. package/blocks/team/team-grid/styles.css +0 -8
  399. package/blocks/team/team-grid/template.html +0 -1
  400. package/blocks/team/team-list/README.md +0 -32
  401. package/blocks/team/team-list/styles.css +0 -7
  402. package/blocks/team/team-list/template.html +0 -1
  403. package/blocks/testimonial/testimonial-carousel/README.md +0 -32
  404. package/blocks/testimonial/testimonial-carousel/styles.css +0 -7
  405. package/blocks/testimonial/testimonial-carousel/template.html +0 -1
  406. package/blocks/testimonial/testimonial-grid/README.md +0 -32
  407. package/blocks/testimonial/testimonial-grid/styles.css +0 -5
  408. package/blocks/testimonial/testimonial-grid/template.html +0 -1
  409. package/blocks/testimonial/testimonial-mosaic/README.md +0 -38
  410. package/blocks/testimonial/testimonial-mosaic/styles.css +0 -14
  411. package/blocks/testimonial/testimonial-mosaic/template.html +0 -1
  412. package/blocks/testimonial/testimonial-platform/README.md +0 -34
  413. package/blocks/testimonial/testimonial-platform/styles.css +0 -17
  414. package/blocks/testimonial/testimonial-platform/template.html +0 -1
  415. package/blocks/testimonial/testimonial-rating/README.md +0 -28
  416. package/blocks/testimonial/testimonial-rating/styles.css +0 -6
  417. package/blocks/testimonial/testimonial-rating/template.html +0 -1
  418. package/blocks/testimonial/testimonial-spotlight/README.md +0 -31
  419. package/blocks/testimonial/testimonial-spotlight/styles.css +0 -9
  420. package/blocks/testimonial/testimonial-spotlight/template.html +0 -1
  421. package/blocks/testimonial/testimonial-switcher/README.md +0 -39
  422. package/blocks/testimonial/testimonial-switcher/styles.css +0 -23
  423. package/blocks/testimonial/testimonial-switcher/template.html +0 -1
  424. package/blocks/testimonial/testimonial-wall/README.md +0 -34
  425. package/blocks/testimonial/testimonial-wall/styles.css +0 -7
  426. package/blocks/testimonial/testimonial-wall/template.html +0 -1
  427. package/blocks/trust-strip/trust-badges/README.md +0 -30
  428. package/blocks/trust-strip/trust-badges/styles.css +0 -5
  429. package/blocks/trust-strip/trust-badges/template.html +0 -1
  430. package/blocks/trust-strip/trust-certs/README.md +0 -31
  431. package/blocks/trust-strip/trust-certs/styles.css +0 -12
  432. package/blocks/trust-strip/trust-certs/template.html +0 -1
  433. package/blocks/trust-strip/trust-logos/README.md +0 -32
  434. package/blocks/trust-strip/trust-logos/styles.css +0 -5
  435. package/blocks/trust-strip/trust-logos/template.html +0 -1
  436. package/blocks/trust-strip/trust-quote/README.md +0 -29
  437. package/blocks/trust-strip/trust-quote/styles.css +0 -5
  438. package/blocks/trust-strip/trust-quote/template.html +0 -1
  439. package/blocks/trust-strip/trust-reviews/README.md +0 -35
  440. package/blocks/trust-strip/trust-reviews/styles.css +0 -9
  441. package/blocks/trust-strip/trust-reviews/template.html +0 -1
  442. package/blocks/work/case-alternating/README.md +0 -34
  443. package/blocks/work/case-alternating/block.meta.json +0 -86
  444. package/blocks/work/case-alternating/styles.css +0 -7
  445. package/blocks/work/case-alternating/template.html +0 -1
  446. package/blocks/work/case-carousel/README.md +0 -26
  447. package/blocks/work/case-carousel/styles.css +0 -7
  448. package/blocks/work/case-carousel/template.html +0 -1
  449. package/blocks/work/case-header/README.md +0 -38
  450. package/blocks/work/case-header/styles.css +0 -18
  451. package/blocks/work/case-header/template.html +0 -1
  452. package/blocks/work/project-evidence/README.md +0 -35
  453. package/blocks/work/project-evidence/block.meta.json +0 -87
  454. package/blocks/work/project-evidence/styles.css +0 -12
  455. package/blocks/work/project-evidence/template.html +0 -1
  456. package/blocks/work/project-grid/README.md +0 -38
  457. package/blocks/work/project-grid/styles.css +0 -9
  458. package/blocks/work/project-grid/template.html +0 -1
@@ -1 +0,0 @@
1
- <section class="c-feature-bento section"><div class="wrap"><div class="section__head"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="bento c-feature-bento__grid"><slot name="tiles"></slot></div></div></section>
@@ -1,44 +0,0 @@
1
- # feature-compare-table
2
-
3
- "Why us" comparison table with a highlighted column.
4
-
5
- - **Category:** feature
6
- - **Media:** none
7
- - **Registers:** trade, b2b, professional
8
- - **Variants:** dark
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `eyebrow` | Optional `<p class="eyebrow">` |
15
- | `heading` | `<h2>` |
16
- | `lede` | Optional `<p class="lede">` (one sentence) |
17
- | `columns` | `<th>` cells: an empty first `<th>` (criteria), then one `<th class="is-us">` and 2–3 competitor `<th>` |
18
- | `rows` | 4–7 `<tr><th scope="row">Criterion</th><td class="is-us">…</td><td>…</td></tr>` |
19
- | `note` | Optional `<p>` footnote under the table |
20
-
21
- ## Example
22
-
23
- ```html
24
- <feature-compare-table>
25
- <p slot="eyebrow" class="eyebrow eyebrow--accent">Why Harbor</p>
26
- <h2 slot="heading">Compare before you sign.</h2>
27
- <p slot="lede" class="lede">Every roofer says they're the best. Here is what actually changes for you.</p>
28
- <th slot="columns"><span class="visually-hidden">Criteria</span></th>
29
- <th slot="columns" class="is-us">Harbor</th>
30
- <th slot="columns">DIY</th>
31
- <th slot="columns">General contractor</th>
32
- <th slot="columns">Big-box franchise</th>
33
- <tr slot="rows"><th scope="row">Cost</th><td class="is-us"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>$$</td><td>$</td><td>$$$</td><td>$$$$</td></tr>
34
- <tr slot="rows"><th scope="row">Turnaround</th><td class="is-us"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>1–2 days</td><td>Weeks</td><td>2–3 weeks</td><td>4–6 weeks</td></tr>
35
- <tr slot="rows"><th scope="row">Warranty</th><td class="is-us"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>25-year, transferable</td><td><span aria-label="Not included">—</span></td><td>1 year</td><td>Limited</td></tr>
36
- <tr slot="rows"><th scope="row">Who shows up</th><td class="is-us"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>Our own crew</td><td>You</td><td>Subcontractors</td><td>Whoever's free</td></tr>
37
- <tr slot="rows"><th scope="row">Scheduling</th><td class="is-us"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>Around you</td><td>Weekends</td><td>Their backlog</td><td>Fixed slots</td></tr>
38
- <p slot="note">Based on written quotes our customers shared with us in 2025. Your numbers will vary — ask for ours in writing.</p>
39
- </feature-compare-table>
40
- ```
41
-
42
- Variants: `<feature-compare-table variant="dark">`.
43
-
44
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,15 +0,0 @@
1
- .c-feature-compare-table__card{max-width:60rem;margin-inline:auto}
2
- .c-feature-compare-table__table{min-width:44rem}
3
- .c-feature-compare-table__table th,.c-feature-compare-table__table td{text-align:center;vertical-align:middle;white-space:nowrap}
4
- .c-feature-compare-table__table th:first-child,.c-feature-compare-table__table tbody th{text-align:left;font-weight:500;color:var(--color-text);letter-spacing:0;text-transform:none;font-size:var(--step-0)}
5
- .c-feature-compare-table__table thead th{padding-block:var(--space-4);white-space:nowrap}
6
- .c-feature-compare-table__table td{color:var(--color-muted)}
7
- .c-feature-compare-table__table .is-us{background:color-mix(in srgb,var(--color-accent) 9%,transparent);color:var(--color-text);font-weight:600}
8
- .c-feature-compare-table__table thead .is-us{color:var(--color-accent);font-weight:700}
9
- .c-feature-compare-table__table tbody tr:last-child td,.c-feature-compare-table__table tbody tr:last-child th{border-bottom:0}
10
- .c-feature-compare-table__table .icon{width:1rem;height:1rem;vertical-align:-.15em;margin-right:.3rem}
11
- .c-feature-compare-table__table .is-us .icon{color:var(--color-accent)}
12
- .c-feature-compare-table__note{max-width:42rem;margin:var(--space-4) auto 0;text-align:center;font-size:var(--step-0);color:var(--color-muted)}
13
- .c-feature-compare-table__note:empty{display:none}
14
- .c-feature-compare-table__note p{margin:0}
15
- .c-feature-compare-table--dark{--color-bg:#141210;--color-text:#F7F4EF;--color-muted:#B8B0A4;--color-surface:#1E1B18;--color-surface-2:#2A2622;--color-border:#3A342E;--color-focus:#F7F4EF;background:var(--color-bg);color:var(--color-text)}
@@ -1 +0,0 @@
1
- <section class="c-feature-compare-table section"><div class="wrap"><div class="section__head section__head--center"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="card c-feature-compare-table__card"><div class="table-wrap"><table class="table c-feature-compare-table__table"><thead><tr><slot name="columns"></slot></tr></thead><tbody><slot name="rows"></slot></tbody></table></div></div><div class="c-feature-compare-table__note"><slot name="note"></slot></div></div></section>
@@ -1,34 +0,0 @@
1
- # feature-comparison
2
-
3
- Simple two-column compare cards.
4
-
5
- - **Category:** feature
6
- - **Media:** optional
7
- - **Registers:** b2b, trade, professional
8
- - **Variants:** (none)
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `eyebrow` | Optional `<p class="eyebrow">` |
15
- | `heading` | `<h2>` |
16
- | `lede` | Optional `<p class="lede">` (one sentence) |
17
- | `us` | `<h3>` + `<ul class="list-check">` for your approach |
18
- | `them` | `<h3>` + `<ul class="list-check">` for the typical alternative (use the x icon) |
19
-
20
- ## Example
21
-
22
- ```html
23
- <feature-comparison>
24
- <p slot="eyebrow" class="eyebrow eyebrow--accent">The difference</p>
25
- <h2 slot="heading">What you get with us vs. the low bid</h2>
26
- <p slot="lede" class="lede">Both roofs look the same the day they're finished. Ask again in five winters.</p>
27
- <h3 slot="us">Harbor Roofing</h3>
28
- <ul slot="us" class="list-check"><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>Full tear-off, deck inspected and repaired</li><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>Ice-and-water shield 6 ft at eaves</li><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>New flashing, drip edge, and ridge vent</li><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>10-year workmanship warranty in writing</li><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>Employees, not subcontractors</li></ul>
29
- <h3 slot="them">Typical low bid</h3>
30
- <ul slot="them" class="list-check"><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m4 4 16 16M20 4 4 20"/></svg>Shingles layered over the old roof</li><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m4 4 16 16M20 4 4 20"/></svg>Minimum-code underlayment</li><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m4 4 16 16M20 4 4 20"/></svg>Flashing reused where "it looks fine"</li><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m4 4 16 16M20 4 4 20"/></svg>1-year warranty, verbal</li><li><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m4 4 16 16M20 4 4 20"/></svg>Whichever sub is free that week</li></ul>
31
- </feature-comparison>
32
- ```
33
-
34
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,6 +0,0 @@
1
- .c-feature-comparison__grid{max-width:56rem;margin-inline:auto}
2
- .c-feature-comparison .card__body{padding:var(--space-6);gap:var(--space-4)}
3
- .c-feature-comparison .card__body > h3{padding-bottom:var(--space-3);border-bottom:1px solid var(--color-border)}
4
- .c-feature-comparison .list-check{gap:var(--space-3)}
5
- .c-feature-comparison__them{color:var(--color-muted)}
6
- .c-feature-comparison__them .list-check li > .icon{color:var(--color-muted)}
@@ -1 +0,0 @@
1
- <section class="c-feature-comparison section"><div class="wrap"><div class="section__head section__head--center"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="grid grid--2 c-feature-comparison__grid"><div class="card card--accent c-feature-comparison__us"><div class="card__body"><slot name="us"></slot></div></div><div class="card card--flat c-feature-comparison__them"><div class="card__body"><slot name="them"></slot></div></div></div></div></section>
@@ -1,34 +0,0 @@
1
- # feature-grid-3
2
-
3
- Three icon+title+blurb pillars.
4
-
5
- - **Category:** feature
6
- - **Media:** icons or small media
7
- - **Registers:** all
8
- - **Variants:** center, cards
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `eyebrow` | Optional `<p class="eyebrow">` |
15
- | `heading` | `<h2>` |
16
- | `lede` | Optional `<p class="lede">` (one sentence) |
17
- | `items` | 3 or 6 items: each `<div>` with `.icon-tile`, `<h3>`, `<p>` |
18
-
19
- ## Example
20
-
21
- ```html
22
- <feature-grid-3>
23
- <p slot="eyebrow" class="eyebrow eyebrow--accent">Why homeowners call us first</p>
24
- <h2 slot="heading">Built for Maine weather, priced for Maine budgets.</h2>
25
- <p slot="lede" class="lede">Three things every crew member signs up for on day one.</p>
26
- <div slot="items"><span class="icon-tile"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3 4 6v6c0 5 3.5 8.5 8 9 4.5-.5 8-4 8-9V6l-8-3z"/><path d="m9 12 2 2 4-4"/></svg></span><h3>Licensed &amp; insured</h3><p>State-licensed, fully insured, and OSHA-trained. Certificates are in the estimate packet, not on request.</p></div>
27
- <div slot="items"><span class="icon-tile"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg></span><h3>Written estimate in 48 hours</h3><p>Line-item pricing with the materials named. If it changes, you sign off before we proceed.</p></div>
28
- <div slot="items"><span class="icon-tile"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="9" r="6"/><path d="m8.5 14-1.5 7 5-3 5 3-1.5-7"/></svg></span><h3>Ten-year workmanship warranty</h3><p>On top of the manufacturer's. If a seam we made leaks, we come back — no argument.</p></div>
29
- </feature-grid-3>
30
- ```
31
-
32
- Variants: `<feature-grid-3 variant="center">` (also: `cards`).
33
-
34
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,8 +0,0 @@
1
- .c-feature-grid-3__grid{--gap:var(--space-6)}
2
- .c-feature-grid-3__grid > *{display:grid;gap:var(--space-3);align-content:start}
3
- .c-feature-grid-3__grid > * > p{margin:0;color:var(--color-muted)}
4
- .c-feature-grid-3__grid > * > .icon-tile{margin-bottom:var(--space-2)}
5
- .c-feature-grid-3--center .section__head{margin-inline:auto;text-align:center;justify-items:center}
6
- .c-feature-grid-3--center .c-feature-grid-3__grid > *{text-align:center;justify-items:center}
7
- .c-feature-grid-3--cards .c-feature-grid-3__grid{--gap:var(--space-5)}
8
- .c-feature-grid-3--cards .c-feature-grid-3__grid > *{padding:var(--space-5);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg)}
@@ -1 +0,0 @@
1
- <section class="c-feature-grid-3 section"><div class="wrap"><div class="section__head"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="grid grid--3 c-feature-grid-3__grid"><slot name="items"></slot></div></div></section>
@@ -1,39 +0,0 @@
1
- # feature-icon-list
2
-
3
- Dense checklist of capabilities.
4
-
5
- - **Category:** feature
6
- - **Media:** icons
7
- - **Registers:** trade, b2b, professional
8
- - **Variants:** two-col
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `eyebrow` | Optional `<p class="eyebrow">` |
15
- | `heading` | `<h2>` |
16
- | `lede` | Optional `<p class="lede">` (one sentence) |
17
- | `actions` | Optional 1–2 buttons under the copy |
18
- | `items` | 6–10 `<li>` with a check icon then text (`<strong>` for the lead phrase) |
19
-
20
- ## Example
21
-
22
- ```html
23
- <feature-icon-list>
24
- <p slot="eyebrow" class="eyebrow eyebrow--accent">Everything included</p>
25
- <h2 slot="heading">What's in every roofing estimate</h2>
26
- <p slot="lede" class="lede">No add-on fees for the things that make a roof last.</p>
27
- <a slot="actions" class="btn" href="/contact">Get a free estimate</a>
28
- <li slot="items"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg><span><strong>Full tear-off and disposal</strong><span>We never layer new shingles over old.</span></span></li>
29
- <li slot="items"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg><span><strong>Ice-and-water shield to code</strong><span>Six feet at eaves and every valley.</span></span></li>
30
- <li slot="items"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg><span><strong>Ridge and soffit ventilation check</strong><span>Corrected if it isn't balanced.</span></span></li>
31
- <li slot="items"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg><span><strong>Drip edge and step flashing</strong><span>New aluminum, not reused.</span></span></li>
32
- <li slot="items"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg><span><strong>Magnetic nail sweep</strong><span>Lawn, driveway, and beds — twice.</span></span></li>
33
- <li slot="items"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg><span><strong>Photos of the finished deck and underlayment</strong><span>Sent before shingles go on.</span></span></li>
34
- </feature-icon-list>
35
- ```
36
-
37
- Variants: `<feature-icon-list variant="two-col">`.
38
-
39
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,9 +0,0 @@
1
- .c-feature-icon-list__copy .section__head{margin-bottom:var(--space-5)}
2
- .c-feature-icon-list__list{gap:var(--space-4);font-size:var(--step-1)}
3
- .c-feature-icon-list__list li{padding-bottom:var(--space-4);border-bottom:1px solid var(--color-border)}
4
- .c-feature-icon-list__list li:last-child{border-bottom:0;padding-bottom:0}
5
- .c-feature-icon-list__list li > .icon{width:1.35rem;height:1.35rem}
6
- .c-feature-icon-list__list strong{display:block;font-weight:600}
7
- .c-feature-icon-list__list span{color:var(--color-muted)}
8
- @media(min-width:720px){.c-feature-icon-list .split{grid-template-columns:2fr 3fr}}
9
- @media(min-width:900px){.c-feature-icon-list--two-col .c-feature-icon-list__list{grid-template-columns:1fr 1fr;column-gap:var(--space-6)}}
@@ -1 +0,0 @@
1
- <section class="c-feature-icon-list section section--muted"><div class="wrap split split--top"><div class="c-feature-icon-list__copy"><div class="section__head"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="btn-group"><slot name="actions"></slot></div></div><ul class="list-check c-feature-icon-list__list"><slot name="items"></slot></ul></div></section>
@@ -1,39 +0,0 @@
1
- # feature-spotlight
2
-
3
- One large feature with side bullets.
4
-
5
- - **Category:** feature
6
- - **Media:** hero media
7
- - **Registers:** beauty, food, b2b
8
- - **Variants:** reverse
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `media` | `<img>` 4:3 |
15
- | `eyebrow` | Optional `<p class="eyebrow">` |
16
- | `heading` | `<h2>` |
17
- | `lede` | Optional `<p class="lede">` (one sentence) |
18
- | `bullets` | 3–4 `<li>` with check icon |
19
- | `actions` | 1–2 buttons |
20
-
21
- ## Example
22
-
23
- ```html
24
- <feature-spotlight>
25
- <img src="/media/harvest/color-bar.jpg" alt="Stylist mixing color at the bar" width="1600" height="1200" slot="media" loading="lazy">
26
- <p slot="eyebrow" class="eyebrow eyebrow--accent">Our color bar</p>
27
- <h2 slot="heading">Formulas written down, so your color is repeatable.</h2>
28
- <p slot="lede" class="lede">Every session ends with your exact mix in your file — any stylist here can match it next time.</p>
29
- <li slot="bullets"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>Ammonia-free lines for sensitive scalps</li>
30
- <li slot="bullets"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>Bond-builder included in every lightening service</li>
31
- <li slot="bullets"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>Free 15-minute consult before your first appointment</li>
32
- <a slot="actions" class="btn" href="/book">Book a color consult</a>
33
- <a slot="actions" class="btn-arrow" href="/services#color">Color pricing</a>
34
- </feature-spotlight>
35
- ```
36
-
37
- Variants: `<feature-spotlight variant="reverse">`.
38
-
39
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,5 +0,0 @@
1
- .c-feature-spotlight__copy{display:grid;gap:var(--space-5)}
2
- .c-feature-spotlight__copy .section__head{margin-bottom:0}
3
- .c-feature-spotlight__list{color:var(--color-text)}
4
- .c-feature-spotlight__list:empty{display:none}
5
- .c-feature-spotlight--reverse .split > :first-child{order:2}
@@ -1 +0,0 @@
1
- <section class="c-feature-spotlight section"><div class="wrap split"><div class="frame ratio-4x3 c-feature-spotlight__media"><slot name="media"></slot></div><div class="c-feature-spotlight__copy"><div class="section__head"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><ul class="list-check c-feature-spotlight__list"><slot name="bullets"></slot></ul><div class="btn-group"><slot name="actions"></slot></div></div></div></section>
@@ -1,33 +0,0 @@
1
- # feature-stats-band
2
-
3
- Four stats with optional count-up.
4
-
5
- - **Category:** feature
6
- - **Media:** none
7
- - **Registers:** trade, b2b, professional
8
- - **Variants:** dark
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `eyebrow` | Optional `<p class="eyebrow">` |
15
- | `heading` | `<h2>` |
16
- | `lede` | Optional `<p class="lede">` (one sentence) |
17
- | `stats` | 3–4 `.stat` blocks; add `data-count-to` on `.stat__value` for count-up |
18
-
19
- ## Example
20
-
21
- ```html
22
- <feature-stats-band>
23
- <h2 slot="heading">Fifteen years, one zip code at a time.</h2>
24
- <div slot="stats" class="stat"><p class="stat__value" data-count-to="1200" data-count-suffix="+">1200+</p><p class="stat__label">Roofs replaced</p></div>
25
- <div slot="stats" class="stat"><p class="stat__value" data-count-to="15">15</p><p class="stat__label">Years in Portland</p></div>
26
- <div slot="stats" class="stat"><p class="stat__value" data-count-to="98" data-count-suffix="%">98%</p><p class="stat__label">Would hire again</p></div>
27
- <div slot="stats" class="stat"><p class="stat__value" data-count-to="0">0</p><p class="stat__label">Subcontractors</p></div>
28
- </feature-stats-band>
29
- ```
30
-
31
- Variants: `<feature-stats-band variant="dark">`.
32
-
33
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,8 +0,0 @@
1
- .c-feature-stats-band__row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-6) var(--space-5)}
2
- .c-feature-stats-band__row .stat{text-align:center;justify-items:center;padding-inline:var(--space-4)}
3
- .c-feature-stats-band__row .stat__value{font-size:var(--step-5)}
4
- @media(min-width:720px){
5
- .c-feature-stats-band__row{grid-template-columns:repeat(auto-fit,minmax(11rem,1fr))}
6
- .c-feature-stats-band__row .stat + .stat{border-left:1px solid var(--color-border)}
7
- }
8
- .c-feature-stats-band--dark{--color-bg:#141210;--color-text:#F7F4EF;--color-muted:#B8B0A4;--color-surface:#1E1B18;--color-surface-2:#2A2622;--color-border:#3A342E;--color-focus:#F7F4EF;background:var(--color-bg);color:var(--color-text)}
@@ -1 +0,0 @@
1
- <section class="c-feature-stats-band section section--muted" data-island="counter"><div class="wrap"><div class="section__head section__head--center"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="c-feature-stats-band__row"><slot name="stats"></slot></div></div></section>
@@ -1,38 +0,0 @@
1
- # feature-tabs
2
-
3
- Tabbed feature panels.
4
-
5
- - **Category:** feature
6
- - **Media:** optional per-panel media
7
- - **Registers:** b2b, professional
8
- - **Variants:** pill
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `eyebrow` | Optional `<p class="eyebrow">` |
15
- | `heading` | `<h2>` |
16
- | `lede` | Optional `<p class="lede">` (one sentence) |
17
- | `tabs` | A `.tabs__list[role=tablist]` of `button.tabs__tab[role=tab]`, then one `.tabs__panel[role=tabpanel]` per tab (`hidden` on all but the first). Panels can use `.split`. |
18
-
19
- ## Example
20
-
21
- ```html
22
- <feature-tabs>
23
- <p slot="eyebrow" class="eyebrow eyebrow--accent">Services</p>
24
- <h2 slot="heading">Pick the plan that fits how you run the building.</h2>
25
- <div slot="tabs" class="tabs__list" role="tablist">
26
- <button type="button" class="tabs__tab" role="tab" id="ft-1" aria-controls="ft-p1" aria-selected="true">Preventive</button>
27
- <button type="button" class="tabs__tab" role="tab" id="ft-2" aria-controls="ft-p2" aria-selected="false">On-call</button>
28
- <button type="button" class="tabs__tab" role="tab" id="ft-3" aria-controls="ft-p3" aria-selected="false">Retrofit</button>
29
- </div>
30
- <div slot="tabs" class="tabs__panel split" role="tabpanel" id="ft-p1" aria-labelledby="ft-1"><div><h3>Quarterly visits, zero surprises</h3><p>Filters, belts, coils, and refrigerant checked on a schedule. You get a report with photos after every visit.</p><a class="btn-arrow" href="/plans">Plan details</a></div><div class="frame ratio-4x3"><img src="/media/harvest/rooftop-unit.jpg" alt="Technician servicing a rooftop unit" width="1200" height="900" loading="lazy"></div></div>
31
- <div slot="tabs" class="tabs__panel split" role="tabpanel" id="ft-p2" aria-labelledby="ft-2" hidden><div><h3>Four-hour response, 24/7</h3><p>A dispatcher who knows your buildings and a truck stocked for your equipment.</p><a class="btn-arrow" href="/plans#on-call">How dispatch works</a></div><div class="frame ratio-4x3"><img src="/media/harvest/van-night.jpg" alt="Service van at night" width="1200" height="900" loading="lazy"></div></div>
32
- <div slot="tabs" class="tabs__panel split" role="tabpanel" id="ft-p3" aria-labelledby="ft-3" hidden><div><h3>Replace before it fails</h3><p>Lifecycle planning for units past 15 years, with rebate paperwork handled for you.</p><a class="btn-arrow" href="/plans#retrofit">Retrofit process</a></div><div class="frame ratio-4x3"><img src="/media/harvest/new-unit.jpg" alt="New condenser install" width="1200" height="900" loading="lazy"></div></div>
33
- </feature-tabs>
34
- ```
35
-
36
- Variants: `<feature-tabs variant="pill">`.
37
-
38
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,7 +0,0 @@
1
- .c-feature-tabs__tabs .tabs__panel{padding-top:var(--space-4)}
2
- .c-feature-tabs__tabs .tabs__panel > div{display:grid;gap:var(--space-3);align-content:center}
3
- .c-feature-tabs__tabs .tabs__panel h3{font-size:var(--step-3)}
4
- .c-feature-tabs__tabs .tabs__panel p{color:var(--color-muted)}
5
- .c-feature-tabs--pill .tabs__list{border-bottom:0;gap:var(--space-1);padding:var(--space-1);background:var(--color-surface-2);border-radius:var(--radius-pill);width:fit-content}
6
- .c-feature-tabs--pill .tabs__tab{border:0;margin:0;min-height:2.5rem;padding:var(--space-2) var(--space-4);border-radius:var(--radius-pill)}
7
- .c-feature-tabs--pill .tabs__tab[aria-selected="true"]{background:var(--color-surface);box-shadow:var(--shadow-1)}
@@ -1 +0,0 @@
1
- <section class="c-feature-tabs section"><div class="wrap"><div class="section__head"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="tabs c-feature-tabs__tabs" data-island="tabs"><slot name="tabs"></slot></div></div></section>
@@ -1,38 +0,0 @@
1
- # feature-thumb-list
2
-
3
- Copy + large photo beside a stack of thumbnail cards.
4
-
5
- - **Category:** feature
6
- - **Media:** one hero photo + 3–4 thumbnails
7
- - **Registers:** trade, b2b, beauty
8
- - **Variants:** dark, reverse
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `eyebrow` | Optional `<p class="eyebrow">` |
15
- | `heading` | `<h2>` |
16
- | `lede` | Optional `<p class="lede">` (one sentence) |
17
- | `actions` | Optional 1–2 buttons / `.btn-arrow` links |
18
- | `media` | Optional `<img>` (4:3) shown under the copy |
19
- | `items` | 3–4 `<article class="card"><img> <div class="card__body"><h3>…</h3><p>…</p></div></article>` |
20
-
21
- ## Example
22
-
23
- ```html
24
- <feature-thumb-list>
25
- <p slot="eyebrow" class="eyebrow eyebrow--accent">What you're buying</p>
26
- <h2 slot="heading">More than shingles. It's a system.</h2>
27
- <p slot="lede" class="lede">Every roof we build is engineered as a whole — decking, underlayment, flashing, and ventilation — so it holds up for decades, not a few years.</p>
28
- <a slot="actions" class="btn-arrow" href="/process">How we build it <svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></a>
29
- <img src="/media/harvest/roof-layers.jpg" alt="Cross-section of roof layers on a job site" width="1200" height="900" slot="media" loading="lazy">
30
- <article slot="items" class="card"><img src="/media/harvest/thumb-shingle.jpg" alt="" width="240" height="240" loading="lazy"><div class="card__body"><h3>Built to last</h3><p>Thick, impact-rated shingles built to take hail and high wind.</p></div></article>
31
- <article slot="items" class="card"><img src="/media/harvest/thumb-flashing.jpg" alt="" width="240" height="240" loading="lazy"><div class="card__body"><h3>Locked down tight</h3><p>Metal flashing seals every roof-to-wall seam against wind and rain.</p></div></article>
32
- <article slot="items" class="card"><img src="/media/harvest/thumb-ridge.jpg" alt="" width="240" height="240" loading="lazy"><div class="card__body"><h3>Holds its line</h3><p>A crisp, dead-straight ridge line — true from the road and true up close.</p></div></article>
33
- </feature-thumb-list>
34
- ```
35
-
36
- Variants: `<feature-thumb-list variant="dark">` (also: `reverse`).
37
-
38
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,13 +0,0 @@
1
- .c-feature-thumb-list__grid{display:grid;gap:var(--space-6)}
2
- .c-feature-thumb-list__copy{display:grid;gap:var(--space-5);align-content:start}
3
- .c-feature-thumb-list__copy .section__head{margin-bottom:0}
4
- .c-feature-thumb-list__copy .btn-group:empty{display:none}
5
- .c-feature-thumb-list__media:empty{display:none}
6
- .c-feature-thumb-list__items{display:grid;gap:var(--space-3);align-content:center}
7
- .c-feature-thumb-list__items .card{flex-direction:row;align-items:center;gap:var(--space-4);padding:var(--space-3) var(--space-4) var(--space-3) var(--space-3)}
8
- .c-feature-thumb-list__items .card > img{flex:none;width:5.5rem;height:5.5rem;object-fit:cover;border-radius:var(--radius-md)}
9
- .c-feature-thumb-list__items .card__body{padding:0;gap:var(--space-1)}
10
- .c-feature-thumb-list__items .card__body h3{font-size:var(--step-1)}
11
- .c-feature-thumb-list__items .card__body p{font-size:var(--step-0)}
12
- @media(min-width:900px){.c-feature-thumb-list__grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-8);align-items:center}.c-feature-thumb-list--reverse .c-feature-thumb-list__copy{order:2}}
13
- .c-feature-thumb-list--dark{--color-bg:#141210;--color-text:#F7F4EF;--color-muted:#B8B0A4;--color-surface:#1E1B18;--color-surface-2:#2A2622;--color-border:#3A342E;--color-focus:#F7F4EF;background:var(--color-bg);color:var(--color-text)}
@@ -1 +0,0 @@
1
- <section class="c-feature-thumb-list section"><div class="wrap c-feature-thumb-list__grid"><div class="c-feature-thumb-list__copy"><div class="section__head"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="btn-group"><slot name="actions"></slot></div><div class="frame ratio-4x3 c-feature-thumb-list__media"><slot name="media"></slot></div></div><div class="c-feature-thumb-list__items"><slot name="items"></slot></div></div></section>
@@ -1,31 +0,0 @@
1
- # feature-zigzag
2
-
3
- Alternating copy/media story rows.
4
-
5
- - **Category:** feature
6
- - **Media:** media per row
7
- - **Registers:** trade, beauty, professional
8
- - **Variants:** (none)
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `eyebrow` | Optional `<p class="eyebrow">` |
15
- | `heading` | `<h2>` |
16
- | `lede` | Optional `<p class="lede">` (one sentence) |
17
- | `rows` | 2–4 rows: each `<div class="split">` with a `.frame.ratio-4x3` media div and a copy div (`<h3>`, `<p>`, optional `.btn-arrow`). Rows alternate automatically. |
18
-
19
- ## Example
20
-
21
- ```html
22
- <feature-zigzag>
23
- <p slot="eyebrow" class="eyebrow eyebrow--accent">The process</p>
24
- <h2 slot="heading">Three visits. One clear price. No surprises.</h2>
25
- <div slot="rows" class="split"><div class="frame ratio-4x3"><img src="/media/harvest/inspection.jpg" alt="Roof inspection with a drone" width="1200" height="900" loading="lazy"></div><div><p class="eyebrow eyebrow--accent">01 · Inspection</p><h3>We look at the whole roof, not the leak.</h3><p>Drone photos of every slope, a moisture reading in the attic, and a straight answer about repair vs. replace.</p><a class="btn-arrow" href="/process#inspection">What we check</a></div></div>
26
- <div slot="rows" class="split"><div class="frame ratio-4x3"><img src="/media/harvest/estimate.jpg" alt="Reviewing an estimate at a kitchen table" width="1200" height="900" loading="lazy"></div><div><p class="eyebrow eyebrow--accent">02 · Estimate</p><h3>Line items you can compare.</h3><p>Materials by brand, labor by day, and the permit fee shown separately. Valid for 60 days.</p><a class="btn-arrow" href="/process#estimate">Sample estimate</a></div></div>
27
- <div slot="rows" class="split"><div class="frame ratio-4x3"><img src="/media/harvest/install.jpg" alt="Crew installing shingles" width="1200" height="900" loading="lazy"></div><div><p class="eyebrow eyebrow--accent">03 · Install</p><h3>Most roofs done in two days.</h3><p>Tarps on the landscaping, a magnet sweep at the end of each day, and a walkthrough with the foreman before we invoice.</p><a class="btn-arrow" href="/process#install">Install day checklist</a></div></div>
28
- </feature-zigzag>
29
- ```
30
-
31
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,6 +0,0 @@
1
- .c-feature-zigzag__stack{display:grid;gap:var(--space-8)}
2
- .c-feature-zigzag__stack > .split > div:not([class*="ratio"]):not(.frame){display:grid;gap:var(--space-4);align-content:center}
3
- .c-feature-zigzag__stack h3{font-size:var(--step-3)}
4
- .c-feature-zigzag__stack p{color:var(--color-muted);max-width:36rem}
5
- .c-feature-zigzag__stack .eyebrow{margin-bottom:calc(var(--space-2) * -1)}
6
- @media(min-width:720px){.c-feature-zigzag__stack > .split:nth-child(even) > :first-child{order:2}}
@@ -1 +0,0 @@
1
- <section class="c-feature-zigzag section"><div class="wrap"><div class="section__head"><slot name="eyebrow"></slot><slot name="heading"></slot><slot name="lede"></slot></div><div class="c-feature-zigzag__stack"><slot name="rows"></slot></div></div></section>
@@ -1,39 +0,0 @@
1
- # footer-columns
2
-
3
- Multi-column directory footer.
4
-
5
- - **Category:** footer
6
- - **Media:** logo optional
7
- - **Registers:** all
8
- - **Variants:** dark
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `brand` | Business name or logo |
15
- | `tagline` | `<p>` one line about the business + location |
16
- | `social` | Icon links (`<a aria-label>` with `.icon`) |
17
- | `columns` | 2–4 `<div>`: `<h3>` heading then `<a>` links |
18
- | `legal` | `<a>` links + a trailing `<span>` copyright |
19
-
20
- ## Example
21
-
22
- ```html
23
- <footer-columns>
24
- <span slot="brand">Harbor Roofing</span>
25
- <p slot="tagline">Residential roofing for Greater Portland since 2009. Licensed, insured, and local.</p>
26
- <a slot="social" href="https://instagram.com/example" aria-label="Instagram" rel="noopener"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="5"/><circle cx="12" cy="12" r="4"/><circle cx="17.5" cy="6.5" r=".8"/></svg></a>
27
- <a slot="social" href="https://facebook.com/example" aria-label="Facebook" rel="noopener"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M14 8h3V4h-3a4 4 0 0 0-4 4v3H7v4h3v6h4v-6h3l1-4h-4V8z"/></svg></a>
28
- <div slot="columns"><h3>Services</h3><a href="/services/replacement">Roof replacement</a><a href="/services/repair">Leak repair</a><a href="/services/gutters">Gutters</a><a href="/services/metal">Metal roofing</a></div>
29
- <div slot="columns"><h3>Company</h3><a href="/about">About</a><a href="/team">Crew</a><a href="/work">Projects</a><a href="/blog">Guides</a></div>
30
- <div slot="columns"><h3>Contact</h3><a href="tel:+15550102000">(555) 010-2000</a><a href="mailto:hello@harborroofing.example">hello@harborroofing.example</a><a href="https://maps.example/harbor" rel="noopener">12 Harbor St, Portland</a></div>
31
- <a slot="legal" href="/privacy">Privacy</a>
32
- <a slot="legal" href="/cookie-compliance">Cookie compliance</a>
33
- <span slot="legal">© 2026 Harbor Roofing LLC · Maine license #RC-20419</span>
34
- </footer-columns>
35
- ```
36
-
37
- Variants: `<footer-columns variant="dark">`.
38
-
39
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,16 +0,0 @@
1
- .c-footer-columns{border-top:1px solid var(--color-border);font-size:var(--step-0);color:var(--color-muted)}
2
- .c-footer-columns a:not([class*="btn"]){color:var(--color-muted);text-decoration:none}
3
- .c-footer-columns a:not([class*="btn"]):hover{color:var(--color-text)}
4
- .c-footer-columns .brand{color:var(--color-text)}
5
- .c-footer-columns__legal{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-5);align-items:center;padding-block:var(--space-4);border-top:1px solid var(--color-border)}
6
- .c-footer-columns__legal > span{margin-inline-start:auto}
7
- .c-footer-columns__social{display:flex;gap:var(--space-2)}
8
- .c-footer-columns__social a{display:inline-grid;place-items:center;width:2.25rem;height:2.25rem;border-radius:var(--radius-pill);border:1px solid var(--color-border)}
9
- .c-footer-columns__social a:hover{border-color:var(--color-text)}
10
- .c-footer-columns__grid{display:flex;flex-wrap:wrap;gap:var(--space-7) var(--space-6);padding-block:var(--space-8) var(--space-7)}
11
- .c-footer-columns__brand{display:grid;gap:var(--space-4);align-content:start;flex:1 1 100%;max-width:22rem}
12
- .c-footer-columns__brand p{margin:0}
13
- .c-footer-columns__grid > div:not(.c-footer-columns__brand){display:grid;gap:var(--space-2);align-content:start;flex:1 1 9rem}
14
- @media(min-width:900px){.c-footer-columns__brand{flex:0 1 22rem;margin-inline-end:auto}}
15
- .c-footer-columns__grid h3{font-family:var(--font-body);font-size:var(--step-0);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text);margin-bottom:var(--space-2)}
16
- .c-footer-columns--dark{--color-bg:#141210;--color-text:#F7F4EF;--color-muted:#B8B0A4;--color-surface:#1E1B18;--color-surface-2:#2A2622;--color-border:#3A342E;--color-focus:#F7F4EF;background:var(--color-bg);color:var(--color-text)}
@@ -1 +0,0 @@
1
- <footer class="c-footer-columns"><div class="wrap"><div class="c-footer-columns__grid"><div class="c-footer-columns__brand"><a class="brand" href="/"><slot name="brand"></slot></a><slot name="tagline"></slot><div class="c-footer-columns__social"><slot name="social"></slot></div></div><slot name="columns"></slot></div><div class="c-footer-columns__legal"><slot name="legal"></slot></div></div></footer>
@@ -1,33 +0,0 @@
1
- # footer-compact
2
-
3
- Brand + legal + cookie link.
4
-
5
- - **Category:** footer
6
- - **Media:** logo optional
7
- - **Registers:** all
8
- - **Variants:** (none)
9
-
10
- ## Slots
11
-
12
- | Slot | Content |
13
- |------|---------|
14
- | `brand` | Business name or logo |
15
- | `links` | Optional 3–5 `<a>` nav links |
16
- | `legal` | `<a>` links + trailing `<span>` copyright |
17
-
18
- ## Example
19
-
20
- ```html
21
- <footer-compact>
22
- <span slot="brand">Harbor Roofing</span>
23
- <a slot="links" href="/services">Services</a>
24
- <a slot="links" href="/work">Our work</a>
25
- <a slot="links" href="/about">About</a>
26
- <a slot="links" href="/contact">Contact</a>
27
- <a slot="legal" href="/privacy">Privacy</a>
28
- <a slot="legal" href="/cookie-compliance">Cookie compliance</a>
29
- <span slot="legal">© 2026 Harbor Roofing LLC · Maine license #RC-20419</span>
30
- </footer-compact>
31
- ```
32
-
33
- Copy this folder into the site repo as `components/<your-name>/`, rename the root class to `c-<your-name>`, and adapt slots, copy, and media.
@@ -1,12 +0,0 @@
1
- .c-footer-compact{border-top:1px solid var(--color-border);font-size:var(--step-0);color:var(--color-muted)}
2
- .c-footer-compact a:not([class*="btn"]){color:var(--color-muted);text-decoration:none}
3
- .c-footer-compact a:not([class*="btn"]):hover{color:var(--color-text)}
4
- .c-footer-compact .brand{color:var(--color-text)}
5
- .c-footer-compact__legal{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-5);align-items:center;padding-block:var(--space-4);border-top:1px solid var(--color-border)}
6
- .c-footer-compact__legal > span{margin-inline-start:auto}
7
- .c-footer-compact__social{display:flex;gap:var(--space-2)}
8
- .c-footer-compact__social a{display:inline-grid;place-items:center;width:2.25rem;height:2.25rem;border-radius:var(--radius-pill);border:1px solid var(--color-border)}
9
- .c-footer-compact__social a:hover{border-color:var(--color-text)}
10
- .c-footer-compact__row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-4);padding-block:var(--space-6)}
11
- .c-footer-compact__links{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-5)}
12
- .c-footer-compact__links:empty{display:none}
@@ -1 +0,0 @@
1
- <footer class="c-footer-compact"><div class="wrap"><div class="c-footer-compact__row"><a class="brand" href="/"><slot name="brand"></slot></a><nav class="c-footer-compact__links" aria-label="Footer"><slot name="links"></slot></nav></div><div class="c-footer-compact__legal"><slot name="legal"></slot></div></div></footer>