howone 0.1.19 → 0.1.22

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 (293) hide show
  1. package/package.json +1 -1
  2. package/templates/vite/.howone/skills/hallmark/LICENSE +21 -0
  3. package/templates/vite/.howone/skills/hallmark/README.md +147 -0
  4. package/templates/vite/.howone/skills/hallmark/ROADMAP.md +201 -0
  5. package/templates/vite/.howone/skills/hallmark/SKILL.md +551 -0
  6. package/templates/vite/.howone/skills/hallmark/docs/recipes.md +186 -0
  7. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-anya.jpg +0 -0
  8. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-bananastudio.jpg +0 -0
  9. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-hyperlane.jpg +0 -0
  10. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-najm.jpg +0 -0
  11. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-slow-pour.jpg +0 -0
  12. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-soroe.jpg +0 -0
  13. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-tally.jpg +0 -0
  14. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-wayfare.jpg +0 -0
  15. package/templates/vite/.howone/skills/hallmark/docs/study-examples.md +176 -0
  16. package/templates/vite/.howone/skills/hallmark/docs/talk-slides.md +364 -0
  17. package/templates/vite/.howone/skills/hallmark/package.json +36 -0
  18. package/templates/vite/.howone/skills/hallmark/references/anti-patterns.md +412 -0
  19. package/templates/vite/.howone/skills/hallmark/references/assets.md +399 -0
  20. package/templates/vite/.howone/skills/hallmark/references/color.md +95 -0
  21. package/templates/vite/.howone/skills/hallmark/references/component-cookbook.md +256 -0
  22. package/templates/vite/.howone/skills/hallmark/references/components/c1-outlined-chip.md +12 -0
  23. package/templates/vite/.howone/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -0
  24. package/templates/vite/.howone/skills/hallmark/references/components/c3-typographic-link.md +8 -0
  25. package/templates/vite/.howone/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -0
  26. package/templates/vite/.howone/skills/hallmark/references/components/f1-bento-grid.md +20 -0
  27. package/templates/vite/.howone/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -0
  28. package/templates/vite/.howone/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -0
  29. package/templates/vite/.howone/skills/hallmark/references/components/f4-step-sequence.md +11 -0
  30. package/templates/vite/.howone/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -0
  31. package/templates/vite/.howone/skills/hallmark/references/components/f6-product-card-grid.md +41 -0
  32. package/templates/vite/.howone/skills/hallmark/references/components/ft1-mast-headed.md +13 -0
  33. package/templates/vite/.howone/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -0
  34. package/templates/vite/.howone/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -0
  35. package/templates/vite/.howone/skills/hallmark/references/components/ft4-dense-typographic.md +10 -0
  36. package/templates/vite/.howone/skills/hallmark/references/components/ft5-statement.md +21 -0
  37. package/templates/vite/.howone/skills/hallmark/references/components/ft6-letter-close.md +19 -0
  38. package/templates/vite/.howone/skills/hallmark/references/components/ft7-newsletter-first.md +27 -0
  39. package/templates/vite/.howone/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -0
  40. package/templates/vite/.howone/skills/hallmark/references/components/h1-marquee.md +15 -0
  41. package/templates/vite/.howone/skills/hallmark/references/components/h2-split-diptych.md +15 -0
  42. package/templates/vite/.howone/skills/hallmark/references/components/h3-quote-led.md +11 -0
  43. package/templates/vite/.howone/skills/hallmark/references/components/h4-stat-led.md +14 -0
  44. package/templates/vite/.howone/skills/hallmark/references/components/h5-letter-hero.md +11 -0
  45. package/templates/vite/.howone/skills/hallmark/references/components/h6-photographic-fold.md +16 -0
  46. package/templates/vite/.howone/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -0
  47. package/templates/vite/.howone/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -0
  48. package/templates/vite/.howone/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -0
  49. package/templates/vite/.howone/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -0
  50. package/templates/vite/.howone/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -0
  51. package/templates/vite/.howone/skills/hallmark/references/components/n2-floating-chip.md +14 -0
  52. package/templates/vite/.howone/skills/hallmark/references/components/n3-side-rail.md +14 -0
  53. package/templates/vite/.howone/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -0
  54. package/templates/vite/.howone/skills/hallmark/references/components/n5-floating-pill.md +28 -0
  55. package/templates/vite/.howone/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -0
  56. package/templates/vite/.howone/skills/hallmark/references/components/n7-brutal-slab.md +22 -0
  57. package/templates/vite/.howone/skills/hallmark/references/components/n8-terminal-command.md +21 -0
  58. package/templates/vite/.howone/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -0
  59. package/templates/vite/.howone/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -0
  60. package/templates/vite/.howone/skills/hallmark/references/components/s2-hanging.md +13 -0
  61. package/templates/vite/.howone/skills/hallmark/references/components/s3-sticky-pinned.md +19 -0
  62. package/templates/vite/.howone/skills/hallmark/references/components/s4-inline-no-break.md +11 -0
  63. package/templates/vite/.howone/skills/hallmark/references/components/s5-bottom-anchored.md +13 -0
  64. package/templates/vite/.howone/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -0
  65. package/templates/vite/.howone/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -0
  66. package/templates/vite/.howone/skills/hallmark/references/components/t3-single-huge-quote.md +11 -0
  67. package/templates/vite/.howone/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -0
  68. package/templates/vite/.howone/skills/hallmark/references/contract.md +24 -0
  69. package/templates/vite/.howone/skills/hallmark/references/copy.md +182 -0
  70. package/templates/vite/.howone/skills/hallmark/references/custom-craft.md +626 -0
  71. package/templates/vite/.howone/skills/hallmark/references/custom-theme.md +329 -0
  72. package/templates/vite/.howone/skills/hallmark/references/design-md.md +116 -0
  73. package/templates/vite/.howone/skills/hallmark/references/export-formats.md +328 -0
  74. package/templates/vite/.howone/skills/hallmark/references/floating-nav.md +89 -0
  75. package/templates/vite/.howone/skills/hallmark/references/genres/atmospheric.md +65 -0
  76. package/templates/vite/.howone/skills/hallmark/references/genres/editorial.md +70 -0
  77. package/templates/vite/.howone/skills/hallmark/references/genres/modern-minimal.md +67 -0
  78. package/templates/vite/.howone/skills/hallmark/references/genres/playful.md +65 -0
  79. package/templates/vite/.howone/skills/hallmark/references/hero-enrichment.md +474 -0
  80. package/templates/vite/.howone/skills/hallmark/references/imagery-kit.md +170 -0
  81. package/templates/vite/.howone/skills/hallmark/references/interaction-and-states.md +207 -0
  82. package/templates/vite/.howone/skills/hallmark/references/layout-and-space.md +111 -0
  83. package/templates/vite/.howone/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -0
  84. package/templates/vite/.howone/skills/hallmark/references/macrostructures/02-long-document.md +34 -0
  85. package/templates/vite/.howone/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -0
  86. package/templates/vite/.howone/skills/hallmark/references/macrostructures/04-stat-led.md +32 -0
  87. package/templates/vite/.howone/skills/hallmark/references/macrostructures/05-workbench.md +32 -0
  88. package/templates/vite/.howone/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -0
  89. package/templates/vite/.howone/skills/hallmark/references/macrostructures/07-manifesto.md +32 -0
  90. package/templates/vite/.howone/skills/hallmark/references/macrostructures/08-photographic.md +34 -0
  91. package/templates/vite/.howone/skills/hallmark/references/macrostructures/09-quote-led.md +32 -0
  92. package/templates/vite/.howone/skills/hallmark/references/macrostructures/10-specimen.md +32 -0
  93. package/templates/vite/.howone/skills/hallmark/references/macrostructures/11-catalogue.md +23 -0
  94. package/templates/vite/.howone/skills/hallmark/references/macrostructures/12-letter.md +23 -0
  95. package/templates/vite/.howone/skills/hallmark/references/macrostructures/13-index-first.md +23 -0
  96. package/templates/vite/.howone/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -0
  97. package/templates/vite/.howone/skills/hallmark/references/macrostructures/15-split-studio.md +23 -0
  98. package/templates/vite/.howone/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
  99. package/templates/vite/.howone/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -0
  100. package/templates/vite/.howone/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -0
  101. package/templates/vite/.howone/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -0
  102. package/templates/vite/.howone/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -0
  103. package/templates/vite/.howone/skills/hallmark/references/macrostructures/21-component-playground.md +23 -0
  104. package/templates/vite/.howone/skills/hallmark/references/macrostructures.md +89 -0
  105. package/templates/vite/.howone/skills/hallmark/references/microinteractions.md +260 -0
  106. package/templates/vite/.howone/skills/hallmark/references/motion.md +109 -0
  107. package/templates/vite/.howone/skills/hallmark/references/preview-examples.md +49 -0
  108. package/templates/vite/.howone/skills/hallmark/references/responsive.md +138 -0
  109. package/templates/vite/.howone/skills/hallmark/references/slop-test.md +205 -0
  110. package/templates/vite/.howone/skills/hallmark/references/structure.md +164 -0
  111. package/templates/vite/.howone/skills/hallmark/references/study.md +486 -0
  112. package/templates/vite/.howone/skills/hallmark/references/typography.md +243 -0
  113. package/templates/vite/.howone/skills/hallmark/references/verbs/audit.md +25 -0
  114. package/templates/vite/.howone/skills/hallmark/references/verbs/redesign.md +269 -0
  115. package/templates/vite/.howone/skills/hallmark/site/OG-hallmark.png +0 -0
  116. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/brief.md +71 -0
  117. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/index.html +64 -0
  118. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/style.css +240 -0
  119. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/brief.md +65 -0
  120. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/index.html +105 -0
  121. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/style.css +250 -0
  122. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/brief.md +64 -0
  123. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/index.html +131 -0
  124. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/style.css +240 -0
  125. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/brief.md +67 -0
  126. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/index.html +86 -0
  127. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/style.css +262 -0
  128. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/brief.md +63 -0
  129. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/index.html +167 -0
  130. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/style.css +457 -0
  131. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/brief.md +65 -0
  132. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/index.html +159 -0
  133. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/style.css +288 -0
  134. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/brief.md +64 -0
  135. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/index.html +146 -0
  136. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/style.css +484 -0
  137. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/brief.md +64 -0
  138. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/index.html +116 -0
  139. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/style.css +354 -0
  140. package/templates/vite/.howone/skills/hallmark/site/_tests/09-slow-pour/index.html +638 -0
  141. package/templates/vite/.howone/skills/hallmark/site/_tests/10-owl-hours/index.html +515 -0
  142. package/templates/vite/.howone/skills/hallmark/site/_tests/11-soroe-ceramics/index.html +515 -0
  143. package/templates/vite/.howone/skills/hallmark/site/_tests/12-loafer/index.html +608 -0
  144. package/templates/vite/.howone/skills/hallmark/site/_tests/13-alma/index.html +587 -0
  145. package/templates/vite/.howone/skills/hallmark/site/_tests/README.md +157 -0
  146. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-loop.mp4 +0 -0
  147. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-still.jpg +0 -0
  148. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-example.mp4 +0 -0
  149. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-still.jpg +0 -0
  150. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-loop.mp4 +0 -0
  151. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-still.jpg +0 -0
  152. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Podcast-loop.mp4 +0 -0
  153. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-loop.mp4 +0 -0
  154. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-still.jpg +0 -0
  155. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-loop.mp4 +0 -0
  156. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-still.jpg +0 -0
  157. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/after-quiet-hour.png +0 -0
  158. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-loop.mp4 +0 -0
  159. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-still.jpg +0 -0
  160. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/audit-example.png +0 -0
  161. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/before-quiet-hour.png +0 -0
  162. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/example-redesign-uractivation.png +0 -0
  163. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-loop.mp4 +0 -0
  164. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-still.jpg +0 -0
  165. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/study-example.png +0 -0
  166. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/uractivation-after-loop.mp4 +0 -0
  167. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-loop.mp4 +0 -0
  168. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-still.jpg +0 -0
  169. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/index.html +77 -0
  170. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/style.css +238 -0
  171. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/index.html +110 -0
  172. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/style.css +326 -0
  173. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/index.html +134 -0
  174. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/style.css +262 -0
  175. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/README.md +30 -0
  176. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/README.md +17 -0
  177. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/audit-report.md +56 -0
  178. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/input.html +160 -0
  179. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/notes.md +29 -0
  180. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/input.html +63 -0
  181. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/notes.md +72 -0
  182. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/output.html +374 -0
  183. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/diagnosis.md +52 -0
  184. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/input-description.md +29 -0
  185. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/notes.md +61 -0
  186. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.css +193 -0
  187. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.html +66 -0
  188. package/templates/vite/.howone/skills/hallmark/site/css/base.css +194 -0
  189. package/templates/vite/.howone/skills/hallmark/site/css/components.css +4886 -0
  190. package/templates/vite/.howone/skills/hallmark/site/css/sections.css +2072 -0
  191. package/templates/vite/.howone/skills/hallmark/site/css/tokens.css +1129 -0
  192. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/index.html +475 -0
  193. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/styles.css +1584 -0
  194. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/tokens.css +96 -0
  195. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/index.html +344 -0
  196. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/script.js +103 -0
  197. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/styles.css +1103 -0
  198. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/tokens.css +83 -0
  199. package/templates/vite/.howone/skills/hallmark/site/examples/najm/index.html +368 -0
  200. package/templates/vite/.howone/skills/hallmark/site/examples/najm/script.js +133 -0
  201. package/templates/vite/.howone/skills/hallmark/site/examples/najm/styles.css +1062 -0
  202. package/templates/vite/.howone/skills/hallmark/site/examples/najm/tokens.css +97 -0
  203. package/templates/vite/.howone/skills/hallmark/site/examples/tally/app.js +84 -0
  204. package/templates/vite/.howone/skills/hallmark/site/examples/tally/index.html +446 -0
  205. package/templates/vite/.howone/skills/hallmark/site/examples/tally/styles.css +1087 -0
  206. package/templates/vite/.howone/skills/hallmark/site/examples/tally/tokens.css +101 -0
  207. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/index.html +359 -0
  208. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/style.css +1168 -0
  209. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/tokens.css +81 -0
  210. package/templates/vite/.howone/skills/hallmark/site/favicon-dark.svg +5 -0
  211. package/templates/vite/.howone/skills/hallmark/site/favicon-light.svg +5 -0
  212. package/templates/vite/.howone/skills/hallmark/site/index.html +1043 -0
  213. package/templates/vite/.howone/skills/hallmark/site/js/main.js +1175 -0
  214. package/templates/vite/.howone/skills/hallmark/vercel.json +6 -0
  215. package/templates/vite/.howone/skills/howone-sdk/01-architect/01-app-generation.md +101 -0
  216. package/templates/vite/.howone/skills/howone-sdk/02-database/01-schema-design.md +147 -0
  217. package/templates/vite/.howone/skills/howone-sdk/02-database/02-schema-operations.md +96 -0
  218. package/templates/vite/.howone/skills/howone-sdk/02-database/03-data-access-patterns.md +172 -0
  219. package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/01-client-setup.md +3 -3
  220. package/templates/vite/.howone/skills/howone-sdk/{references/04-auth.md → 03-sdk/03-auth.md} +120 -3
  221. package/templates/vite/.howone/skills/howone-sdk/04-ai/.gitkeep +1 -0
  222. package/templates/vite/.howone/skills/howone-sdk/SKILL.md +67 -93
  223. package/templates/vite/.howone/skills/howone-sdk/agents/openai.yaml +3 -3
  224. package/templates/vite/.howone/skills/impeccable/SKILL.md +168 -0
  225. package/templates/vite/.howone/skills/impeccable/agents/impeccable-asset-producer.md +101 -0
  226. package/templates/vite/.howone/skills/impeccable/reference/adapt.md +190 -0
  227. package/templates/vite/.howone/skills/impeccable/reference/animate.md +175 -0
  228. package/templates/vite/.howone/skills/impeccable/reference/audit.md +133 -0
  229. package/templates/vite/.howone/skills/impeccable/reference/bolder.md +113 -0
  230. package/templates/vite/.howone/skills/impeccable/reference/brand.md +118 -0
  231. package/templates/vite/.howone/skills/impeccable/reference/clarify.md +174 -0
  232. package/templates/vite/.howone/skills/impeccable/reference/codex.md +105 -0
  233. package/templates/vite/.howone/skills/impeccable/reference/cognitive-load.md +106 -0
  234. package/templates/vite/.howone/skills/impeccable/reference/color-and-contrast.md +105 -0
  235. package/templates/vite/.howone/skills/impeccable/reference/colorize.md +154 -0
  236. package/templates/vite/.howone/skills/impeccable/reference/craft.md +123 -0
  237. package/templates/vite/.howone/skills/impeccable/reference/critique.md +273 -0
  238. package/templates/vite/.howone/skills/impeccable/reference/delight.md +302 -0
  239. package/templates/vite/.howone/skills/impeccable/reference/distill.md +111 -0
  240. package/templates/vite/.howone/skills/impeccable/reference/document.md +427 -0
  241. package/templates/vite/.howone/skills/impeccable/reference/extract.md +69 -0
  242. package/templates/vite/.howone/skills/impeccable/reference/harden.md +347 -0
  243. package/templates/vite/.howone/skills/impeccable/reference/heuristics-scoring.md +234 -0
  244. package/templates/vite/.howone/skills/impeccable/reference/interaction-design.md +195 -0
  245. package/templates/vite/.howone/skills/impeccable/reference/layout.md +141 -0
  246. package/templates/vite/.howone/skills/impeccable/reference/live.md +622 -0
  247. package/templates/vite/.howone/skills/impeccable/reference/motion-design.md +109 -0
  248. package/templates/vite/.howone/skills/impeccable/reference/onboard.md +234 -0
  249. package/templates/vite/.howone/skills/impeccable/reference/optimize.md +258 -0
  250. package/templates/vite/.howone/skills/impeccable/reference/overdrive.md +130 -0
  251. package/templates/vite/.howone/skills/impeccable/reference/personas.md +179 -0
  252. package/templates/vite/.howone/skills/impeccable/reference/polish.md +242 -0
  253. package/templates/vite/.howone/skills/impeccable/reference/product.md +62 -0
  254. package/templates/vite/.howone/skills/impeccable/reference/quieter.md +99 -0
  255. package/templates/vite/.howone/skills/impeccable/reference/responsive-design.md +114 -0
  256. package/templates/vite/.howone/skills/impeccable/reference/shape.md +165 -0
  257. package/templates/vite/.howone/skills/impeccable/reference/spatial-design.md +100 -0
  258. package/templates/vite/.howone/skills/impeccable/reference/teach.md +156 -0
  259. package/templates/vite/.howone/skills/impeccable/reference/typeset.md +124 -0
  260. package/templates/vite/.howone/skills/impeccable/reference/typography.md +159 -0
  261. package/templates/vite/.howone/skills/impeccable/reference/ux-writing.md +107 -0
  262. package/templates/vite/.howone/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
  263. package/templates/vite/.howone/skills/impeccable/scripts/command-metadata.json +94 -0
  264. package/templates/vite/.howone/skills/impeccable/scripts/critique-storage.mjs +242 -0
  265. package/templates/vite/.howone/skills/impeccable/scripts/design-parser.mjs +820 -0
  266. package/templates/vite/.howone/skills/impeccable/scripts/detect-csp.mjs +198 -0
  267. package/templates/vite/.howone/skills/impeccable/scripts/detect.mjs +21 -0
  268. package/templates/vite/.howone/skills/impeccable/scripts/impeccable-paths.mjs +110 -0
  269. package/templates/vite/.howone/skills/impeccable/scripts/is-generated.mjs +69 -0
  270. package/templates/vite/.howone/skills/impeccable/scripts/live-accept.mjs +595 -0
  271. package/templates/vite/.howone/skills/impeccable/scripts/live-browser-session.js +123 -0
  272. package/templates/vite/.howone/skills/impeccable/scripts/live-browser.js +4860 -0
  273. package/templates/vite/.howone/skills/impeccable/scripts/live-complete.mjs +75 -0
  274. package/templates/vite/.howone/skills/impeccable/scripts/live-completion.mjs +18 -0
  275. package/templates/vite/.howone/skills/impeccable/scripts/live-inject.mjs +446 -0
  276. package/templates/vite/.howone/skills/impeccable/scripts/live-poll.mjs +200 -0
  277. package/templates/vite/.howone/skills/impeccable/scripts/live-resume.mjs +48 -0
  278. package/templates/vite/.howone/skills/impeccable/scripts/live-server.mjs +838 -0
  279. package/templates/vite/.howone/skills/impeccable/scripts/live-session-store.mjs +254 -0
  280. package/templates/vite/.howone/skills/impeccable/scripts/live-status.mjs +47 -0
  281. package/templates/vite/.howone/skills/impeccable/scripts/live-wrap.mjs +632 -0
  282. package/templates/vite/.howone/skills/impeccable/scripts/live.mjs +247 -0
  283. package/templates/vite/.howone/skills/impeccable/scripts/load-context.mjs +141 -0
  284. package/templates/vite/.howone/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  285. package/templates/vite/.howone/skills/impeccable/scripts/pin.mjs +214 -0
  286. package/templates/vite/AGENTS.md +2 -3
  287. package/templates/vite/package.json +1 -1
  288. /package/templates/vite/.howone/skills/howone-sdk/{references/08-manifest-codegen.md → 01-architect/02-manifest-codegen.md} +0 -0
  289. /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/02-entity-operations.md +0 -0
  290. /package/templates/vite/.howone/skills/howone-sdk/{references/06-react-integration.md → 03-sdk/04-react-integration.md} +0 -0
  291. /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/05-file-upload.md +0 -0
  292. /package/templates/vite/.howone/skills/howone-sdk/{references/07-raw-http.md → 03-sdk/06-raw-http.md} +0 -0
  293. /package/templates/vite/.howone/skills/howone-sdk/{references/03-ai-actions.md → 03-sdk/07-ai-action-calls.md} +0 -0
@@ -0,0 +1,626 @@
1
+ # Custom craft — how to hand-build hero artwork
2
+
3
+ This file is loaded only when an enrichment archetype requires construction (Tier A or B in [`hero-enrichment.md`](hero-enrichment.md)). It tells you *which technique* to reach for at *which complexity tier* — and what each looks like done well.
4
+
5
+ **The principle.** Custom-built artwork is the design. Library-picked artwork is a shortcut, and a good audience reads it as one. The skill's job is to make custom-build the path of least resistance — by knowing when CSS alone suffices, when SVG is right, when JS-driven animation earns its bundle cost, and when (rarely) Three.js is justified.
6
+
7
+ The 2026 canon is set by Lynn Fisher (*A Single Div*), Diana Smith (*Pure CSS Francine* / *Lace*), Rauno Freiberg, Paco Coursey, Jhey Tompkins, and Adam Argyle. The thread: constraint-driven, hand-crafted, performance-respecting, accessibility-embedded. Use the platform; don't fight it.
8
+
9
+ ---
10
+
11
+ ## Tier A · Pure CSS art
12
+
13
+ **When.** Geometric forms, gradient compositions, glyph-style decoration. Bars, dots, badges, icons, simple loaves, sliced spheres, abstract logos. Anything that's *shapes plus colour*.
14
+
15
+ **Effort:** high (mastering `clip-path` + `conic-gradient` takes practice).
16
+ **Payoff:** very high (zero bytes, browser-native, infinitely scalable).
17
+ **Bundle cost:** zero.
18
+
19
+ ### The CSS-art toolkit (2026)
20
+
21
+ | Feature | Use for | Browser support |
22
+ | --- | --- | --- |
23
+ | `clip-path: polygon(…)` | Multi-sided shapes (chevrons, hexagons, custom blobs) | 96 %+ |
24
+ | `clip-path: path("M …")` | Curved hand-drawn outlines from an SVG path | 88 %+ (use feature query for fallback) |
25
+ | `conic-gradient()` | Pie segments, radial dividers, mandalas, rotating colour wheels | 96 %+ |
26
+ | `radial-gradient()` | Spheres, glow points, sun-burst centres | 100 % |
27
+ | `linear-gradient()` (multi-stop) | Composite shapes via stacked stops | 100 % |
28
+ | `mask-image: url(…)` | Layered transparency, morphing shapes, text-clip effects | 95 %+ |
29
+ | `mix-blend-mode` | Compositional depth (multiply, overlay, screen) | 95 %+ |
30
+ | `filter` (drop-shadow, blur, hue-rotate) | Soft shadows on irregular shapes (uses the alpha channel) | 100 % |
31
+ | `@property` | Smoothly-interpolated custom properties (colour, length, angle) | 88 %+ |
32
+ | `animation-timeline: scroll() / view()` | Declarative scroll-linked motion, hardware-composited | Baseline 2025 (88 %) |
33
+
34
+ ### A worked example — the bakery loaf as a single div
35
+
36
+ ```html
37
+ <div class="loaf" aria-label="A loaf of bread"></div>
38
+ ```
39
+
40
+ ```css
41
+ @property --rise {
42
+ syntax: "<length>";
43
+ initial-value: 0px;
44
+ inherits: false;
45
+ }
46
+
47
+ .loaf {
48
+ width: 12rem;
49
+ height: 7rem;
50
+ background:
51
+ /* crust ridges */
52
+ radial-gradient(ellipse at 30% 70%, transparent 1.2rem, var(--color-ink-2) 1.21rem 1.3rem, transparent 1.31rem),
53
+ radial-gradient(ellipse at 50% 70%, transparent 1.2rem, var(--color-ink-2) 1.21rem 1.3rem, transparent 1.31rem),
54
+ radial-gradient(ellipse at 70% 70%, transparent 1.2rem, var(--color-ink-2) 1.21rem 1.3rem, transparent 1.31rem),
55
+ /* loaf body */
56
+ linear-gradient(180deg, oklch(78% 0.12 60), oklch(64% 0.16 50));
57
+ border-radius: 50% 50% 14% 14% / 70% 70% 30% 30%;
58
+ transform: translateY(var(--rise));
59
+ animation: rise 6s ease-in-out infinite alternate;
60
+ box-shadow: 0 1.2rem 1.5rem -0.8rem oklch(20% 0.02 60 / 0.18);
61
+ }
62
+
63
+ @keyframes rise {
64
+ to { --rise: -4px; } /* the breath: 4px over 6s, the loaf is alive */
65
+ }
66
+
67
+ @media (prefers-reduced-motion: reduce) {
68
+ .loaf { animation: none; --rise: 0px; }
69
+ }
70
+ ```
71
+
72
+ That's a hand-built bakery centerpiece in about 25 lines, no asset, animated, accessible. The next bakery brief Hallmark touches gets a *different* loaf because the variation knobs change (rise distance, loaf curvature, crust-ridge spacing, colour stop).
73
+
74
+ ### Anti-patterns of CSS art
75
+
76
+ - **Recalculating `clip-path` on every scroll.** Tanks framerate. Animate `transform` instead, or use `animation-timeline` (which composites off-thread).
77
+ - **Over-nested wrapper divs.** A pure-CSS illustration should fit in one to three elements. Eight nested wrappers reads as "I gave up structuring this".
78
+ - **No reduced-motion fallback.** Every animation must have a `@media (prefers-reduced-motion: reduce)` block.
79
+ - **Random gradient noise.** If the gradient looks generated rather than designed, redo it. Three stops max for any single gradient layer.
80
+
81
+ ---
82
+
83
+ ## Tier B · Hand-built SVG illustration
84
+
85
+ **When.** Complex illustrations CSS can't express cleanly — characters, articulated figures, organic curves, multi-element scenes. The bakery's full storefront, the studio mascot, the workflow diagram with seven labelled paths.
86
+
87
+ **Effort:** medium (designing in Figma + cleaning the export).
88
+ **Payoff:** very high (scales infinitely, compresses to < 10 KB, animatable).
89
+ **Bundle cost:** the file size of the SVG — typically 4–15 KB inline.
90
+
91
+ ### Pipeline
92
+
93
+ 1. **Design in Figma.** Use a component system (constraints, variants). Keep paths as paths — don't rasterise. Name layers; the export honours them.
94
+ 2. **Export as SVG.** Figma's export is decent. Set "Outline strokes" only if you need stroke-as-fill animation; otherwise keep them strokes.
95
+ 3. **Run through [SVGOMG](https://jakearchibald.github.io/svgomg/)** — removes Figma metadata, unnecessary `<defs>`, redundant transforms. 30–60 % size reduction is typical.
96
+ 4. **Inline the result in HTML** for animation, or save as `static.svg` and reference via `<img>` or CSS `background-image` for caching.
97
+ 5. **Animate declaratively** — CSS keyframes on `<path d="">` (Chrome, Edge, Safari support the `d` property), `@property`-driven attribute interpolation, or [Motion](https://motion.dev) for orchestrated sequences.
98
+
99
+ ### A hand-built SVG with declarative animation
100
+
101
+ ```html
102
+ <svg viewBox="0 0 200 100" class="loaf-svg" aria-label="A loaf of bread">
103
+ <path class="loaf-body" d="M 20 70 Q 100 10 180 70 L 180 90 L 20 90 Z" />
104
+ <path class="loaf-score" d="M 60 50 L 90 30 M 100 45 L 130 25 M 140 50 L 165 35" />
105
+ </svg>
106
+ ```
107
+
108
+ ```css
109
+ @property --bake {
110
+ syntax: "<percentage>";
111
+ initial-value: 0%;
112
+ inherits: false;
113
+ }
114
+
115
+ .loaf-body {
116
+ fill: oklch(72% 0.14 50);
117
+ filter: drop-shadow(0 4px 8px oklch(20% 0.02 60 / 0.16));
118
+ transform-origin: 100px 90px;
119
+ animation: bake 6s ease-in-out infinite alternate;
120
+ }
121
+
122
+ .loaf-score {
123
+ stroke: oklch(38% 0.1 35);
124
+ stroke-width: 2;
125
+ stroke-linecap: round;
126
+ fill: none;
127
+ stroke-dasharray: 0 200;
128
+ animation: score 1.6s 0.8s var(--ease-out) forwards;
129
+ }
130
+
131
+ @keyframes bake { to { transform: scaleY(calc(1 + var(--bake) * 0.005)); --bake: 1%; } }
132
+ @keyframes score { to { stroke-dasharray: 200 200; } }
133
+
134
+ @media (prefers-reduced-motion: reduce) {
135
+ .loaf-body, .loaf-score { animation: none; }
136
+ .loaf-score { stroke-dasharray: 200 200; }
137
+ }
138
+ ```
139
+
140
+ The breath comes from `@property --bake` interpolating a percentage; the score-marks draw themselves once on load via `stroke-dasharray`. No JS. 18 lines of CSS. Reduced-motion-safe.
141
+
142
+ ### Animation choices for SVG in 2026
143
+
144
+ | Method | When | Verdict |
145
+ | --- | --- | --- |
146
+ | **CSS keyframes on `<path d>`** | Path-morphing where shapes have matching anchor counts | Use this. Composable with the rest of CSS, GPU-friendly. |
147
+ | **`@property` + animated CSS variables** | Smoothly interpolated colour, length, angle, percentage | Use this. Declarative, predictable. |
148
+ | **CSS keyframes on `transform` / `opacity`** | Position, rotation, fade | Always. Hardware-accelerated, no layout thrash. |
149
+ | **`stroke-dasharray` draw-on** | Hand-drawn line illustrations that build themselves | Yes. Cheap and effective. |
150
+ | **SMIL `<animate>`** | Legacy SVG-only attribute animation | Acceptable in 2026 but deprioritised — CSS is composable, SMIL isn't. Use only if CSS can't express it. |
151
+ | **JS via Motion / GSAP** | Multi-element orchestrated entrances, scroll-scrubbing, complex timelines | Use when CSS isn't enough — see Tier C below. |
152
+
153
+ ### Anti-patterns of hand-built SVG
154
+
155
+ - **Shipping the raw Figma export.** Always run SVGOMG. Untouched exports carry hundreds of bytes of metadata, unused `<defs>`, doubled transforms.
156
+ - **A 300-KB SVG.** Anything over 30 KB is suspicious. Most well-built illustrations sit at 4–15 KB. If yours is 100 KB+, you have hidden raster embeds or thousands of unnecessary path commands.
157
+ - **`viewBox` cruft.** A `viewBox="0 0 24 24"` for an icon, or `viewBox="0 0 1920 1080"` for a hero illustration. Match the box to the design's bounds, no padding, no extra space.
158
+ - **Animation with linear easing on everything.** Add ease-out (or a cubic-bezier specified to two decimals); the difference is the difference between "moving" and "alive".
159
+ - **Path morphing between shapes with mismatched anchor counts.** Browsers will interpolate, but the result jitters. Either match anchor counts, or use `clip-path` instead.
160
+
161
+ ---
162
+
163
+ ## Tier C · Declarative animation (CSS-first, JS-when-needed)
164
+
165
+ The 2026 declarative animation canon. Use the platform first; reach for JS only when the platform can't express the orchestration.
166
+
167
+ ### CSS keyframes + `@property`
168
+
169
+ `@property` (Baseline 2024, ~88 % support by 2026) lets you define typed custom properties — `<color>`, `<length>`, `<angle>`, `<number>`, `<percentage>` — that the browser knows how to interpolate smoothly. Without `@property`, animating a custom property steps from start to end with no in-between values.
170
+
171
+ ```css
172
+ @property --hue {
173
+ syntax: "<angle>";
174
+ initial-value: 0deg;
175
+ inherits: false;
176
+ }
177
+
178
+ @keyframes spin-hue { to { --hue: 360deg; } }
179
+
180
+ .gradient-loop {
181
+ background: conic-gradient(from var(--hue),
182
+ oklch(70% 0.2 var(--hue)),
183
+ oklch(70% 0.2 calc(var(--hue) + 120deg)),
184
+ oklch(70% 0.2 calc(var(--hue) + 240deg)));
185
+ animation: spin-hue 8s linear infinite;
186
+ }
187
+ ```
188
+
189
+ That's a smoothly hue-rotating conic gradient. No JS, no library, GPU-composited.
190
+
191
+ ### Scroll-driven animations
192
+
193
+ `animation-timeline: scroll()` and `view()` reached **Baseline October 2025** — production-ready in Chromium, Edge, Safari Tech Preview, Firefox behind a flag. The rule: progressive enhancement.
194
+
195
+ ```css
196
+ @supports (animation-timeline: view()) {
197
+ .reveal {
198
+ animation: fade-up linear both;
199
+ animation-timeline: view();
200
+ animation-range: entry 0% cover 30%;
201
+ }
202
+ }
203
+
204
+ @keyframes fade-up {
205
+ from { opacity: 0; transform: translateY(24px); }
206
+ to { opacity: 1; transform: translateY(0); }
207
+ }
208
+ ```
209
+
210
+ If the browser supports it, the element animates as it enters the viewport. If not, the element is just there — no JavaScript, no library, no IntersectionObserver. The CSS Scroll-Driven Animations community is the canonical reference: [scroll-driven-animations.style](https://scroll-driven-animations.style/).
211
+
212
+ ### View Transitions API
213
+
214
+ Production-ready in 2026 (Baseline October 2025 for same-document; Chromium 126+, Safari 18.2+ for cross-document). The Hallmark landing page already uses it for theme transitions:
215
+
216
+ ```js
217
+ function applyTheme(theme) {
218
+ const apply = () => { /* mutate the DOM */ };
219
+ if (!reduced && document.startViewTransition) {
220
+ document.startViewTransition(apply);
221
+ } else {
222
+ apply();
223
+ }
224
+ }
225
+ ```
226
+
227
+ The browser handles the cross-fade. No animation libraries needed for state changes.
228
+
229
+ ### Motion / GSAP / friends — when each earns its bundle
230
+
231
+ | Library | When | Bundle | Verdict |
232
+ | --- | --- | --- | --- |
233
+ | **[Motion](https://motion.dev)** (`motion/react`, `motion`) | Orchestrated multi-element entrances in React (variants, `AnimatePresence`, viewport hooks). The default for React heroes in 2026. | 4 KB base + 2 KB React = 6 KB. Web Animations API–backed. | First reach for React. |
234
+ | **[GSAP](https://gsap.com)** (free since the Webflow partnership) | Ambitious timelines, scrub-on-scroll, SVG path-morphing across mismatched anchors. Hero sequences with 20+ elements, multi-step narratives. | ~50 KB core; 100 KB+ with plugins (ScrollTrigger, Draggable). | Worth it when timelines are core. Overkill for a fade-in. |
235
+ | **AutoAnimate** | Trivial layout transitions in React (a list reflows, an element appears). | 2 KB. | Fine for what it does. |
236
+ | **Anime.js v4** | Lightweight stagger, simple animations, vanilla JS. | ~15 KB. | Acceptable; less common than Motion in 2026. |
237
+ | **Theatre.js** | Visual editor + code API for ambitious orchestration. Niche but powerful. | Heavy (~80 KB+). | Single-page interactive art only. |
238
+
239
+ **The decision rule:**
240
+
241
+ ```
242
+ Single element, simple motion → CSS keyframes / @property
243
+ Multiple elements, orchestrated entrance → Motion (React) or GSAP (vanilla / complex)
244
+ Scroll-progress-linked → animation-timeline (CSS) — or GSAP ScrollTrigger if complex
245
+ State change between two layouts → View Transitions API
246
+ A list reflows in React → AutoAnimate
247
+ A complex hero narrative with scrubbing → GSAP timeline + ScrollTrigger
248
+ ```
249
+
250
+ Reaching for Motion for a single fade-in (4 KB for nothing) is the bundle-bloat tell. Reaching for GSAP for a list reflow (50 KB for nothing) is the same tell, louder.
251
+
252
+ ### Anti-patterns of declarative animation
253
+
254
+ - **Animating `width`, `height`, `top`, `left`, `margin`, or `padding`** (causes layout thrash). Animate `transform` and `opacity` only — they composite on the GPU.
255
+ - **Linear easing on UI** (no subtlety; reads as "demo from a tutorial").
256
+ - **Bouncy elastic on hero entrances** (`cubic-bezier(0.34, 1.56, …)` and friends) — reserved for genuine physical interactions like drag-release.
257
+ - **Importing Motion or GSAP for one fade-in.** 50 KB for what `transition: opacity 400ms var(--ease-out)` does in zero bytes.
258
+ - **Scroll-fade-everything.** Every section fading in on scroll. The page never settles. Pick one orchestrated entrance on first load and let the rest *be there*.
259
+ - **Reveal animations with no `prefers-reduced-motion` fallback.** Every transform / animation must be guarded.
260
+
261
+ ---
262
+
263
+ ## Tier D · Three.js / WebGL / shaders
264
+
265
+ **When justified.** The 3D *is* the hero value — a rotating product the user can interact with, an interactive 3D playground, a generative art piece. Examples: Apple's product pages with interactive bottles / iPhones, Bruno Simon's portfolio, Vercel's WebGL hero galleries.
266
+
267
+ **When not.** A static spinning thing the user can't interact with. A bloom-overdosed shader background that "looks premium". A 5-MB model loaded eagerly on a marketing page.
268
+
269
+ **Performance budget.**
270
+ - < 100 draw calls
271
+ - < 2 MB JS + assets total
272
+ - < 6 s load time
273
+ - 60 fps target on mid-range mobile
274
+
275
+ **Stack.**
276
+ - React Three Fiber (R3F) for React projects — ergonomic, ~30 KB on top of Three.js
277
+ - Vanilla [Three.js](https://threejs.org) otherwise (~100–300 KB depending on features)
278
+ - Models: glTF 2.0 with Draco compression (20–50 % size reduction)
279
+ - Textures: KTX2 / Basis (much smaller than PNG/JPEG)
280
+
281
+ **Always include a non-WebGL fallback.** If the canvas fails to initialise (no WebGL2, GPU blacklisted, low-power mode), show a static poster image so the page still renders.
282
+
283
+ ### Anti-patterns of Three.js / WebGL
284
+
285
+ - **Three.js for a stationary product.** No interaction = no justification. Use SVG or a still photograph.
286
+ - **Bloom + glow overdose.** Three or four post-processing passes that just make everything blurry. Pick one effect, dial it down to "barely visible".
287
+ - **5-MB models loaded eagerly.** Always lazy-load the geometry, show a poster while it streams in.
288
+ - **No fallback.** WebGL fails on ~5 % of devices; if the page is unusable for them, you've failed accessibility.
289
+ - **Generic procedural-noise shaders.** Looks like every other Three.js demo on the internet. Custom shaders earn their place; off-the-shelf Perlin noise rarely does.
290
+
291
+ ---
292
+
293
+ ## Tier E · Generated stills (Nanobanana / Recraft V4 / Midjourney)
294
+
295
+ When characters or specific scenes are needed and hand-build is uneconomical (the brief calls for a small mascot in five poses; the agency is selling a thing that needs an evocative atmospheric still).
296
+
297
+ | Model | Cost | Best for | Output |
298
+ | --- | --- | --- | --- |
299
+ | **[Nanobanana 2 / Gemini 2.5 Flash Image](https://ai.google.dev/gemini-api/docs/image-generation)** | $0.039 / image | Character consistency across multiple panels, fast iteration, brand-style adherence via reference images, infographics with text | PNG (transparent supported); no SVG, no animation |
300
+ | **[Recraft V4](https://www.recraft.ai/)** | ~$0.04 / image | **The only mainstream model with production-grade SVG output.** Logos, icons, illustrations that need to live in code and scale. | SVG + PNG |
301
+ | **[Midjourney v8](https://www.midjourney.com)** | ~$0.14 / image | Aesthetic beauty, artistic direction, atmospheric stills | PNG |
302
+ | **[Flux 2](https://blackforestlabs.ai/)** | ~$0.03 / image | Photorealism, skin / fabric / product detail | PNG |
303
+
304
+ ### Discipline when generating
305
+
306
+ - **Always post-process.** Add grain, asymmetric crop, hand-drawn overlays, colour grading. Raw model output reads as AI 100 % of the time. The post-process is what makes it ours.
307
+ - **Use reference images** for brand consistency. Nanobanana's character-consistency feature is the differentiator vs. Midjourney; feed it your existing brand assets so generations stay on-style.
308
+ - **Stamp the model in the macrostructure comment** (`generated: nanobanana-2 · post-processed`). Future audits need to know provenance.
309
+ - **Verify the SynthID watermark** is present (Google's invisible AI-provenance marker).
310
+ - **Multi-frame animation isn't supported** by any of these models. Don't try to assemble keyframes into a Lottie loop — that's Tier F territory and almost always a worse outcome than a single still.
311
+
312
+ ### Anti-patterns of generated stills
313
+
314
+ - **Symmetrical compositions.** Algorithmic; reads as AI. Crop asymmetrically.
315
+ - **Smooth-mesh-blob faces.** The 2024 "generic AI character" look. Avoid character-led stills if you can't get past this; or use Nanobanana's character-consistency feature with reference images and prompt heavily for asymmetry / imperfection.
316
+ - **Default lighting + blue-tinted backgrounds.** The generic AI tell. Specify brand-anchored colour and unusual lighting in the prompt.
317
+ - **Six fingers, doubled furniture, impossible rooms.** Less common than 2023, but still lurking. Always inspect.
318
+
319
+ ---
320
+
321
+ ## Tier F · Library illustrations + Lottie (last resort)
322
+
323
+ When budget and timeline force a shortcut. The catalogue is in [`assets.md`](assets.md) — Storyset, Humaaans, unDraw, IRA Design, LottieFiles. Even at this tier:
324
+
325
+ - **Customise.** Colour-swap to brand anchor hue. Crop or recompose. Don't ship the unmodified library look.
326
+ - **Avoid the giveaway poses.** Every team has seen "guy on laptop with floating speech bubble" a hundred times. Anything that screams "stock illustration" loses.
327
+
328
+ ### Lottie specifically — last resort
329
+
330
+ **Use Lottie only when:**
331
+ - The motion is character-articulated (a five-frame mascot wave, a multi-joint walking cycle) and CSS / SVG can't reasonably express it
332
+ - You have a custom-commissioned Lottie that matches your brand
333
+ - File is < 2 MB
334
+ - Pause / resume support is wired
335
+ - `prefers-reduced-motion` fallback is a static keyframe
336
+
337
+ **Don't use Lottie for:**
338
+ - Spinning logo loops — use CSS `@keyframes rotate`
339
+ - Checkmark-draw confirmations — use SVG `stroke-dasharray`
340
+ - Loading spinners — use CSS conic-gradient + rotate
341
+ - Hover micro-interactions — use CSS transitions
342
+ - Hero centerpieces that could be hand-built — use Tier A or B
343
+
344
+ The Lottie Tell, version 2026: a generic LottieFiles pull where pure CSS would have built it stronger and lighter. The audit verb catches this.
345
+
346
+ ---
347
+
348
+ ## The bakery worked example, end-to-end
349
+
350
+ **Brief:** "Build a landing page for a small bakery in Lisbon."
351
+
352
+ **Step 2 (macrostructure):** Long Document — the bakery is a story-led brand, not a SaaS product.
353
+ **Step 3 (theme):** Linen — warm-paper, prose-led, intimate.
354
+ **Step 4 (enrichment):** E5 Custom Illustration Centerpiece. Tier B (hand-built SVG).
355
+
356
+ **The output:**
357
+
358
+ A 60-line SVG of a single loaf, three paths (crust + crumb + scoring marks), positioned to the right of the headline at 40 % column width. Animation: `@property --rise` interpolates a 4 px vertical lift over 6 s, ease-in-out, alternate. The score-marks draw themselves on first paint via `stroke-dasharray`. Reduced-motion: static loaf, no animation.
359
+
360
+ ```css
361
+ /* Hallmark · macrostructure: Long Document
362
+ * H5 hero: Letter (intimate salutation + 2-paragraph body)
363
+ * enrichment: E5 Custom Illustration · craft: tier-B SVG (60 lines)
364
+ * animation: @property --rise (6s, alternate) + stroke-dasharray draw-on
365
+ * theme: Linen · accent: warm-amber ~3% · studied: no
366
+ */
367
+ ```
368
+
369
+ The next bakery brief Hallmark touches gets a *different* loaf — different curvature, different rise distance, different score pattern, possibly a different illustration entirely (a sourdough boule vs. a baguette vs. a flatbread). The variation knobs in [`hero-enrichment.md`](hero-enrichment.md) make sure of it.
370
+
371
+ ---
372
+
373
+ ## Recipe library
374
+
375
+ The bakery loaf above is one worked example. This library catalogues four more — each a small, complete, copy-paste-able recipe at Tier A or Tier B. Use them when the brief calls for the named subject; otherwise treat them as *technique references* (the workflow diagram's `stroke-dashoffset` flow is reusable; the mascot's blink-loop is reusable; etc.).
376
+
377
+ Each recipe ships with: a one-line description, full code, a "use when / avoid when" note, a `prefers-reduced-motion` fallback block, and a real-world inspiration line.
378
+
379
+ ### Recipe 1 · Workflow / process diagram
380
+
381
+ Three labelled boxes connected by curved arrows. Slight asymmetric rotation (-1° on box one, +0.5° on box three) for hand-drawn feel. One arrow has an animated `stroke-dashoffset` flow suggesting data movement. Use case: feature page showing data flow, decision tree, or user journey steps.
382
+
383
+ ```html
384
+ <svg class="flow" viewBox="0 0 720 200" role="img" aria-label="Data flow: input, process, output">
385
+ <defs>
386
+ <marker id="flow-arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto">
387
+ <path d="M0,0 L8,3 L0,6" fill="currentColor" />
388
+ </marker>
389
+ </defs>
390
+
391
+ <g class="flow__step flow__step--a">
392
+ <rect class="flow__box" x="20" y="55" width="160" height="90" rx="0" />
393
+ <text class="flow__label" x="100" y="105" text-anchor="middle">Input</text>
394
+ </g>
395
+
396
+ <path class="flow__arrow flow__arrow--live" d="M 180 100 Q 220 80 260 100" marker-end="url(#flow-arrow)" />
397
+
398
+ <g class="flow__step">
399
+ <rect class="flow__box" x="260" y="55" width="200" height="90" rx="0" />
400
+ <text class="flow__label" x="360" y="100" text-anchor="middle">Parse + Filter</text>
401
+ <text class="flow__sub" x="360" y="118" text-anchor="middle">small predicate language</text>
402
+ </g>
403
+
404
+ <path class="flow__arrow" d="M 460 100 Q 500 120 540 100" marker-end="url(#flow-arrow)" />
405
+
406
+ <g class="flow__step flow__step--c">
407
+ <rect class="flow__box" x="540" y="55" width="160" height="90" rx="0" />
408
+ <text class="flow__label" x="620" y="105" text-anchor="middle">Output</text>
409
+ </g>
410
+ </svg>
411
+ ```
412
+
413
+ ```css
414
+ @property --flow-dash {
415
+ syntax: "<length>";
416
+ initial-value: 0px;
417
+ inherits: false;
418
+ }
419
+
420
+ .flow { width: 100%; max-width: 48rem; height: auto; display: block; margin: 0 auto; color: var(--color-ink); }
421
+ .flow__box { fill: none; stroke: currentColor; stroke-width: 1.5; }
422
+ .flow__label { font-family: var(--font-display); font-size: 16px; fill: var(--color-ink); }
423
+ .flow__sub { font-family: var(--font-mono); font-size: 11px; fill: var(--color-muted); }
424
+ .flow__step--a { transform: rotate(-1deg); transform-origin: 100px 100px; }
425
+ .flow__step--c { transform: rotate(0.5deg); transform-origin: 620px 100px; }
426
+ .flow__arrow { fill: none; stroke: var(--color-muted); stroke-width: 1.5; stroke-linecap: round; }
427
+ .flow__arrow--live {
428
+ stroke: var(--color-accent);
429
+ stroke-dasharray: 6 6;
430
+ animation: flow 2.4s linear infinite;
431
+ }
432
+ @keyframes flow { to { stroke-dashoffset: -24; } }
433
+
434
+ @media (prefers-reduced-motion: reduce) {
435
+ .flow__arrow--live { animation: none; stroke-dasharray: 0; }
436
+ }
437
+ ```
438
+
439
+ **Use when** the brief is "show the user how data flows" — feature page, docs landing, technical-narrative section. **Avoid when** the diagram has more than five nodes (use Mermaid or a real graph layout) or when relationships are non-linear (this recipe assumes left-to-right flow).
440
+
441
+ *Inspiration:* Lynn Fisher's `lynnandtonic.com` `<rect>`-rotation experiments; Rauno Freiberg's `stroke-dashoffset` flows on rauno.me.
442
+
443
+ ### Recipe 2 · Minimal-line mascot
444
+
445
+ A small SVG character — face only, ~120 × 120 px — that has personality without anthropomorphic uncanny-valley risk. Two ellipse eyes (with `@keyframes blink` 3s loop), a single quadratic-curve mouth, and two stem accents (hair / hat / horns / antennae). Pairs beside text.
446
+
447
+ ```html
448
+ <figure class="mascot" aria-label="The Hallmark mascot — a face with two eyes and a small smile">
449
+ <svg viewBox="0 0 120 130" class="mascot__svg">
450
+ <circle class="mascot__head" cx="60" cy="60" r="42" />
451
+
452
+ <ellipse class="mascot__eye mascot__eye--l" cx="46" cy="56" rx="4" ry="6" />
453
+ <ellipse class="mascot__eye mascot__eye--r" cx="74" cy="56" rx="4" ry="6" />
454
+
455
+ <path class="mascot__mouth" d="M 50 76 Q 60 84 70 76" />
456
+
457
+ <path class="mascot__accent" d="M 32 22 Q 40 12 52 18" />
458
+ <path class="mascot__accent" d="M 88 22 Q 80 12 68 18" />
459
+ </svg>
460
+ </figure>
461
+ ```
462
+
463
+ ```css
464
+ .mascot { display: inline-block; width: 80px; height: 86px; margin: 0; vertical-align: -8px; }
465
+ .mascot__svg { width: 100%; height: 100%; color: var(--color-ink); }
466
+ .mascot__head { fill: color-mix(in oklch, var(--color-paper-2) 100%, var(--color-accent) 6%); stroke: var(--color-ink); stroke-width: 2; }
467
+ .mascot__eye { fill: var(--color-ink); animation: blink 5s ease-in-out infinite; }
468
+ .mascot__eye--r { animation-delay: 80ms; } /* one eye lags slightly — feels organic */
469
+ @keyframes blink {
470
+ 0%, 8%, 92%, 100% { ry: 6px; }
471
+ 12%, 14% { ry: 0.8px; }
472
+ }
473
+ .mascot__mouth { fill: none; stroke: var(--color-ink); stroke-width: 1.6; stroke-linecap: round; }
474
+ .mascot__accent { fill: none; stroke: var(--color-accent); stroke-width: 1.2; opacity: 0.6; stroke-linecap: round; }
475
+
476
+ @media (hover: hover) and (pointer: fine) {
477
+ .mascot:hover .mascot__head { fill: color-mix(in oklch, var(--color-paper-2) 100%, var(--color-accent) 12%); transition: fill 240ms cubic-bezier(0.16, 1, 0.3, 1); }
478
+ }
479
+
480
+ @media (prefers-reduced-motion: reduce) {
481
+ .mascot__eye { animation: none; }
482
+ }
483
+ ```
484
+
485
+ **Use when** a small product / studio / indie brand needs personality without the uncanny-valley risk of a generated character. **Avoid when** the mascot needs to be expressive across many states (use Rive instead — the @property route is for simple loops, not articulated emotion).
486
+
487
+ *Inspiration:* Are.na's reductive-aesthetic site mark; the Mailchimp Freddie family (single-colour confidence); Diana Smith's CSS-art portrait constraints.
488
+
489
+ ### Recipe 3 · Three-tier architectural diagram
490
+
491
+ Browser → API → Database, drawn at ~16/9 with three labelled boxes and animated `stroke-dasharray` flow lines using `@property --flow-offset`. The data-flow lines pulse to suggest live traffic. Use case: a developer-tool landing page showing where the product fits in the stack.
492
+
493
+ ```html
494
+ <svg class="arch" viewBox="0 0 320 180" role="img" aria-label="Three-tier architecture: browser, API, database">
495
+ <g class="arch__tier">
496
+ <rect x="14" y="50" width="76" height="80" />
497
+ <text x="52" y="86" text-anchor="middle" class="arch__name">Browser</text>
498
+ <text x="52" y="104" text-anchor="middle" class="arch__sub">React / Next</text>
499
+ </g>
500
+
501
+ <line class="arch__flow" x1="90" y1="90" x2="120" y2="90" />
502
+ <text class="arch__hop" x="105" y="80" text-anchor="middle">HTTPS · OTLP</text>
503
+
504
+ <g class="arch__tier arch__tier--mid">
505
+ <rect x="120" y="50" width="80" height="80" />
506
+ <text x="160" y="86" text-anchor="middle" class="arch__name">API</text>
507
+ <text x="160" y="104" text-anchor="middle" class="arch__sub">Edge runtime</text>
508
+ </g>
509
+
510
+ <line class="arch__flow arch__flow--reverse" x1="200" y1="90" x2="230" y2="90" />
511
+ <text class="arch__hop" x="215" y="80" text-anchor="middle">SQL · gRPC</text>
512
+
513
+ <g class="arch__tier">
514
+ <rect x="230" y="50" width="76" height="80" />
515
+ <text x="268" y="86" text-anchor="middle" class="arch__name">Database</text>
516
+ <text x="268" y="104" text-anchor="middle" class="arch__sub">Postgres + vec</text>
517
+ </g>
518
+ </svg>
519
+ ```
520
+
521
+ ```css
522
+ @property --flow-offset {
523
+ syntax: "<number>";
524
+ initial-value: 0;
525
+ inherits: false;
526
+ }
527
+
528
+ .arch { width: 100%; max-width: 48rem; height: auto; color: var(--color-ink); display: block; margin: 0 auto; }
529
+
530
+ .arch__tier rect {
531
+ fill: var(--color-paper-2);
532
+ stroke: var(--color-ink);
533
+ stroke-width: 1.5;
534
+ }
535
+ .arch__tier--mid rect {
536
+ fill: color-mix(in oklch, var(--color-paper-2) 100%, var(--color-accent) 8%);
537
+ stroke: color-mix(in oklch, var(--color-accent) 60%, var(--color-ink));
538
+ }
539
+
540
+ .arch__name { font-family: var(--font-display); font-size: 11px; font-weight: 500; fill: var(--color-ink); }
541
+ .arch__sub { font-family: var(--font-mono); font-size: 8px; fill: var(--color-muted); }
542
+ .arch__hop { font-family: var(--font-mono); font-size: 7px; fill: var(--color-muted); letter-spacing: 0.04em; }
543
+
544
+ .arch__flow {
545
+ stroke: var(--color-accent);
546
+ stroke-width: 1.4;
547
+ stroke-linecap: round;
548
+ stroke-dasharray: 4 4;
549
+ animation: arch-flow 1.6s linear infinite;
550
+ }
551
+ .arch__flow--reverse { animation-direction: reverse; }
552
+ @keyframes arch-flow { to { stroke-dashoffset: -8; } }
553
+
554
+ @media (prefers-reduced-motion: reduce) {
555
+ .arch__flow { animation: none; stroke-dasharray: 0; }
556
+ }
557
+ ```
558
+
559
+ **Use when** the brief is a developer-facing product that needs to show its position in a stack — observability tools, edge functions, ORMs, ingestion services. **Avoid when** the architecture has more than five tiers or non-linear topology (this recipe is for the "three-box flow" model only; for graph-like topologies, use a real diagram tool and embed an SVG export).
560
+
561
+ *Inspiration:* Vercel's network/edge diagrams; Diana Smith's structural precision in placing geometry.
562
+
563
+ ### Recipe 4 · Botanical leaf flourish
564
+
565
+ A small (~40 × 80 px) hand-drawn sprig with two asymmetric leaves at +25° and -30° rotations. Leaf veins at 0.6 opacity. Sized to sit beside a headline as an inline accent. Pure SVG, no animation by default (the design is the stillness).
566
+
567
+ ```html
568
+ <svg class="sprig" viewBox="0 0 40 80" aria-hidden="true">
569
+ <path class="sprig__stem" d="M 20 76 Q 18 56 21 36 Q 22 22 20 8" />
570
+
571
+ <g transform="translate(8 38) rotate(-25)">
572
+ <ellipse class="sprig__leaf" cx="0" cy="0" rx="6" ry="11" />
573
+ <path class="sprig__vein" d="M 0 -10 Q 1 0 0 10" />
574
+ </g>
575
+
576
+ <g transform="translate(28 52) rotate(30)">
577
+ <ellipse class="sprig__leaf" cx="0" cy="0" rx="6" ry="11" />
578
+ <path class="sprig__vein" d="M 0 -10 Q -1 0 0 10" />
579
+ </g>
580
+
581
+ <path class="sprig__stem" d="M 20 22 Q 16 19 13 22" />
582
+ </svg>
583
+ ```
584
+
585
+ ```css
586
+ .sprig {
587
+ width: 32px;
588
+ height: 64px;
589
+ display: inline-block;
590
+ vertical-align: -0.6em;
591
+ margin-inline-end: 0.4em;
592
+ color: var(--color-accent);
593
+ }
594
+
595
+ .sprig__stem { fill: none; stroke: currentColor; stroke-width: 1.4; stroke-linecap: round; }
596
+ .sprig__leaf { fill: none; stroke: currentColor; stroke-width: 1.4; }
597
+ .sprig__vein { fill: none; stroke: currentColor; stroke-width: 0.9; opacity: 0.6; stroke-linecap: round; }
598
+
599
+ /* Use beside a headline */
600
+ h1.has-flourish { display: flex; align-items: baseline; gap: 0.4em; }
601
+ ```
602
+
603
+ **Use when** the brief is a bakery, restaurant, café, boutique, herbalist, florist, atelier — anything where a hand-drawn signal of *care* fits the brand. **Avoid when** the brand is technical, brutalist, or quietly austere (the sprig adds warmth where the page wants restraint).
604
+
605
+ *Inspiration:* hand-drawn botanical assets in old broadsheet papers; restaurant menus from Lisbon and Tokyo; Lynn Fisher's constraint-driven simplicity (this recipe could have been *A Single Div* with cleverer clip-paths, but SVG is more legible at small scale).
606
+
607
+ ---
608
+
609
+ ### Cross-recipe techniques
610
+
611
+ What all four recipes share — the four habits of hand-built CSS/SVG illustration in 2026:
612
+
613
+ 1. **`@property` for declarative interpolation.** Animating a typed custom property (`<length>`, `<number>`, `<angle>`, `<color>`) gives you GPU-composited animation with zero JS. The bakery loaf, the workflow flow line, the architectural data-flow, and the mascot's blink — all use it.
614
+ 2. **Asymmetric `transform: rotate()` for hand-drawn feel.** The workflow boxes rotate at ±1°, the mascot's eyes have an 80 ms delay between them, the sprig's leaves rotate +25° / -30°. Symmetry reads as algorithmic; controlled asymmetry reads as drawn.
615
+ 3. **Opacity layering for pencil/secondary detail.** The workflow's reverse arrow is `var(--color-muted)`; the architectural sub-labels are 60% opacity; the sprig veins are 0.6 opacity. The hierarchy of opacity is the hierarchy of attention.
616
+ 4. **Mono labels grounding decorative work in function.** The architectural diagram's `arch__sub` text uses `var(--font-mono)` at 8 px. The workflow's "small predicate language" uses mono. Decorative work earns its place by being legible and accurate; mono signals that.
617
+
618
+ Use these recipes verbatim when they fit, or strip them for technique when the brief calls for something different. The point is that *every illustration on a Hallmark page is built, not picked.*
619
+
620
+ - **Reaching for Lottie when CSS would do.** The new tell. Build the loaf in pure CSS or hand-built SVG; the Lottie is the shortcut that costs you.
621
+ - **Importing 50 KB of GSAP for a single fade-in.** Use `transition: opacity 400ms var(--ease-out)`. Zero bytes.
622
+ - **Animating `width` or `height` for a "smooth resize".** Reflows the layout; use `transform: scale(...)` and `transform-origin`.
623
+ - **Three.js for a non-interactive rotation.** No interaction = no justification. Use SVG with `transform: rotate()` animated.
624
+ - **Untouched Figma export.** Run SVGOMG. Always.
625
+ - **Generated raster shipped raw.** Post-process. Grain, crop, colour grade. The raw output reads as AI.
626
+ - **Linear easing.** Add ease-out at minimum. The difference between "moving" and "alive".