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,260 @@
1
+ # Microinteractions
2
+
3
+ The single biggest gap in 2026's anti-slop canon. Most skills correct typography and colour; very few correct *the small, repeated moments where an interface either feels designed or feels generated.* This file is the correction.
4
+
5
+ A microinteraction is one event with four parts: trigger → rules → feedback → loops/modes (Saffer). Get any of those wrong and the interface feels uncrafted. Ship them all right and the interface feels *made* — even when nothing else is unusual.
6
+
7
+ ## Principles
8
+
9
+ - **Motion has intent or motion is cut.** Every animation must clarify, guide, or confirm. If you cannot name what a transition communicates, it is decoration. Decoration is slop.
10
+ - **Silent success.** A successful action does *not* deserve a "Done!" toast. If the user sees the result, they don't need a confirmation. Reserve toasts for failures and for actions that hide their own effect.
11
+ - **Optimism with rollback.** Update the UI immediately on user action. Send the request in the background. If it fails, animate the rollback and offer Undo. Round-trip latency is a perception killer.
12
+ - **Restraint, not restraint-as-personality.** Hallmark is not "no motion." Hallmark is *the right motion in the right place.* A drag handle that springs into focus on grab is good. A page where every card pulses on hover is slop.
13
+ - **Reduced motion is a first-class state, not an afterthought.** Every interaction defines its reduced-motion behaviour explicitly. Default is: collapse spatial motion to opacity crossfade, keep duration ≤ 150ms, preserve functional state changes.
14
+ - **Keyboard first, hover second.** Every hover affordance has a focus equivalent. No interaction is hover-only.
15
+
16
+ ## When to ship motion by default
17
+
18
+ The skill biases toward motion-cut. But certain archetypes feel **broken without** motion — they're so visually busy (or so number-led) that complete stillness reads as a screenshot rather than an interface. For these archetypes, ship 2–3 small purposeful microinteractions automatically, without waiting for the user to ask.
19
+
20
+ **Default-on archetypes:** Bento Grid · Stat-Led · Workbench · Marquee Hero · Conversational FAQ
21
+
22
+ **Default-off archetypes:** Editorial · Manifesto · Letter · Quote-Led · Type Specimen · Long Document · Index-First · Letter
23
+
24
+ For default-on, pick **two or three** from this menu (never more than three primitives per page):
25
+
26
+ | Microinteraction | When to ship | Recipe |
27
+ | --- | --- | --- |
28
+ | **Number reveal** | Stat-Led hero, headline numbers anywhere | IntersectionObserver fires on viewport entry; `requestAnimationFrame` counts from 0 to target over 1.2–1.6 s with `--ease-out`. Reduced-motion: skip animation, render final value. |
29
+ | **Pricing card lift** | Pricing tier cards | `translateY(-3px)` + shadow upgrade on `:hover`, 180 ms `--ease-out`. Active state: drop back to `translateY(0)` over 60 ms (the press). |
30
+ | **CTA hover lift** | Primary CTA buttons | `translateY(-1.5px)` + background-fade. 200 ms `--ease-out`. Active state at 60 ms. |
31
+ | **Marquee scroll** | Marquee Hero, customer-logo strip | `@keyframes marquee` `translateX(-100%)` over 40–60 s, infinite. Pauses on hover. Reduced-motion: stops the scroll, shows the first three items. |
32
+ | **Stagger reveal** | Testimonials, feature cards, gallery | IntersectionObserver fires on each card; 100 ms stagger; opacity 0 → 1 + `translateY(8px → 0)`; `--ease-out` 400 ms. **One-shot only — never re-fires on scroll.** |
33
+ | **Recommended-tier pulse** | The middle pricing tier | One-shot `@keyframes pulse-border` 2 s, runs once on viewport entry. Subtle: opacity 0.4 → 1 → 0.4 on the border. Don't loop. |
34
+ | **Caret blink** | *Inside* a typed command (install code, terminal nav, code mockup) — never as standalone decoration | `@keyframes blink` 1 s steps(2) infinite on a 1ch-wide block, placed at the end of a typed command line so it reads as a "you'd type next" affordance. Reduced-motion: solid block, no blink. **Hard rule:** the caret must sit inside `<pre class="code">…▮</pre>` or an N8 Terminal nav line — never as a standalone `<span>` floating in a hero. |
35
+ | **Number tick on data update** | Dashboard live values | See *Number tick* recipe below. |
36
+
37
+ ### Hard rules for default-on motion
38
+
39
+ 1. Every animation respects `prefers-reduced-motion: reduce` — either skip entirely or run at 0.01 s.
40
+ 2. **No more than three distinct animation primitives per page.** A counter + a hover-lift + a marquee = three. Don't add a fourth. The temptation to layer "just one more" is the slop pull.
41
+ 3. No scroll-linked animations on viewports below 40 rem (existing mobile rule, [`component-cookbook.md` § Mobile collapse](component-cookbook.md)).
42
+ 4. No animation longer than 2 s except continuous loops (marquee, ambient breathing, caret blink).
43
+ 5. The "if I removed this animation, would anyone notice?" test still applies — but for the default-on set, the answer is "yes, the page would feel screenshot-stiff and the brand would feel thin."
44
+
45
+ ### What never gets default motion
46
+
47
+ - Body text reveals on scroll. Reading is not a cinematic experience.
48
+ - Background gradient shifts. Distracting.
49
+ - Cursor followers. Always slop.
50
+ - Section-by-section fade-up-stagger. Pick one orchestrated entrance, not twelve.
51
+ - Tab content sliding sideways. Crossfade only (see Tab change recipe below).
52
+
53
+ When the page is default-off (Editorial, Manifesto, etc.), motion is *opt-in* — the user must ask. Stillness is the brand on those pages.
54
+
55
+ ## The timing canon
56
+
57
+ Pick from these durations. Do not invent new ones.
58
+
59
+ | Bucket | Use for |
60
+ | --- | --- |
61
+ | **80–120 ms** | Instant feedback (button press tick, checkbox state, keystroke echo). The brain reads anything in this window as immediate. |
62
+ | **150–200 ms** | Hover state transitions, focus rings appearing, single-property fades, tooltip appears (with delay before — see below). |
63
+ | **250–300 ms** | Modal / dropdown / sheet opens, content fades in, validation icon scales in, tab content crossfade. |
64
+ | **400–500 ms** | Toast slides in, page-load section reveal, complex multi-property transitions, accordion open. |
65
+ | **0 ms** | The right answer surprisingly often. Focus state, keyboard navigation, error appearance — many things should not animate at all. |
66
+
67
+ Exit durations are 60–75% of the corresponding entrance. A 300ms enter pairs with a 200ms exit. Never the reverse.
68
+
69
+ ## The easing canon
70
+
71
+ Three curves cover ~90% of UI motion. Tokenise them and never freestyle.
72
+
73
+ ```css
74
+ :root {
75
+ /* Entering elements — decelerate into place */
76
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
77
+
78
+ /* Exiting elements — accelerate away */
79
+ --ease-in: cubic-bezier(0.7, 0, 0.84, 0);
80
+
81
+ /* State toggles — symmetrical */
82
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
83
+
84
+ /* Material 3 standard alternative — slightly less aggressive */
85
+ --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
86
+ }
87
+ ```
88
+
89
+ Spring physics replaces eases for **physical** interactions only — drag-and-drop release, swipe-to-dismiss, picker wheel snap, satisfying button press scale-bounce. Otherwise: ease.
90
+
91
+ | Spring config | Feel | Use for |
92
+ | --- | --- | --- |
93
+ | `stiffness: 50, damping: 20` | Gentle, no overshoot | Calm reveals; almost an ease |
94
+ | `stiffness: 180, damping: 22` | Snappy, slight overshoot | Drag release; toggle handle |
95
+ | `stiffness: 280, damping: 26` | Stiff, minimal bounce | Picker snap; haptic-like button press |
96
+ | `stiffness: 400, damping: 40` | Very stiff, no bounce | Position corrections; not a spring per se |
97
+
98
+ **Banned curves:** `ease` (the browser default — flat and uncrafted), `linear` except for progress bars and infinite loaders, anything with overshoot above ~110% (`cubic-bezier(0.34, 1.56, 0.64, 1)` and friends). Bounce is dated and signals templated work.
99
+
100
+ ## Recipes
101
+
102
+ Each recipe: trigger, what changes, duration, easing, accessibility note. If a recipe is missing here, return to the principles and derive it from them.
103
+
104
+ ### Button press
105
+
106
+ Trigger: pointer down. Changes: `transform: scale(0.98)` on press, base styling on release. Duration: 100ms in, 150ms out. Easing: in `--ease-in`, out `--ease-out`. A11y: focus ring stays visible; never animate the focus ring's existence.
107
+
108
+ ```css
109
+ .btn {
110
+ transition: background-color var(--dur-short) var(--ease-out),
111
+ transform 100ms var(--ease-out);
112
+ }
113
+ .btn:hover { background: var(--color-ink); color: var(--color-paper); }
114
+ .btn:active { transform: translateY(1px); }
115
+ .btn:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 3px; }
116
+ ```
117
+
118
+ ### Input focus + label float
119
+
120
+ Trigger: focus event. Changes: border-bottom colour, label slides up + shrinks, optional subtle background tint. Duration: 200ms. Easing: `--ease-out`. **Critical:** the change happens *before* the user types — Stripe / Linear use this to confirm the field is alive. A11y: `:focus-visible` only, not `:focus`; respect reduced-motion by removing the slide and keeping only the colour change.
121
+
122
+ ### Form validation
123
+
124
+ Trigger: blur after the field has been touched once (the "touched" pattern), then re-validate on every input. Never validate on every keystroke from the start — it's hostile. Changes: icon scales in (200ms `--ease-out`), border tints, helper text replaces. Three-part error message: what broke, why, how to fix.
125
+
126
+ ### Toast notification
127
+
128
+ Trigger: action completes (or fails). Stack at one viewport corner; new toasts push existing ones in one direction; existing toasts do **not** reposition when a new one arrives. Duration: 400ms slide-in `--ease-out`, 4–6s dwell, 300ms slide-out `--ease-in`. Pause auto-dismiss on hover/focus. **Use sparingly:** if the action's effect is visible (a row was deleted; you can see the row is gone), no toast. Errors *always* get a toast with retry/undo.
129
+
130
+ ### Modal open / close
131
+
132
+ Trigger: explicit user action (click, key shortcut). Backdrop fades 300ms `--ease-out`. Content scales 0.96 → 1.0 + opacity 0 → 1, 300ms `--ease-out`. Close: 220ms `--ease-in`, scale 1.0 → 0.98, opacity → 0. Use the native `<dialog>` element — it handles focus trap and `::backdrop` for free. `inert` on background. First focus to first interactive element, not the close button. Reduced motion: opacity-only crossfade, 150ms.
133
+
134
+ ### Dropdown / menu
135
+
136
+ Trigger: click or key shortcut. Open: 180ms `--ease-out`, optional 30ms-stagger items if there are ≤ 8 of them. Close: 140ms `--ease-in`. Light-dismiss on outside click and Escape. Use the Popover API where available. Anchor positioning: flip when within 16px of viewport edge.
137
+
138
+ ### Tooltip
139
+
140
+ Trigger: mouse hover (with **800–1000ms delay** to prevent flash on casual movement) OR keyboard focus (with **0ms delay** — keyboard users reached this deliberately, never delay them). Animation: 150ms `--ease-out` opacity. WCAG 1.4.13: tooltip must be hoverable (you can move pointer onto it without it disappearing), persistent (doesn't disappear on accidental movement), and dismissible (Escape).
141
+
142
+ ### Tab change
143
+
144
+ Trigger: click or arrow-key. Underline slides `transform: translateX()` + width transition, 250ms `--ease-out`. Outgoing content fades 100ms `--ease-in`, incoming fades 150ms `--ease-out` with a 50ms delay. **Never animate the tab content's height** — animate `grid-template-rows: 0fr → 1fr` if the tabs change height.
145
+
146
+ ### Number tick
147
+
148
+ Trigger: data loaded. Counter increments from 0 to value over 400ms with `--ease-out` applied to the *value*, not the element. Use `Intl.NumberFormat` for locale-correct separators. A11y: announce the final value with `aria-live="polite"`, *not* every tick. Reduced motion: skip the tick, show the final value.
149
+
150
+ ### Copy-to-clipboard
151
+
152
+ Trigger: click. Changes: button label swaps to "Copied" with a check icon; revert after 2.5s. **No toast.** The label change *is* the feedback. Restore on `mouseleave` if user moves away sooner.
153
+
154
+ ```js
155
+ btn.addEventListener("click", async () => {
156
+ await navigator.clipboard.writeText(value);
157
+ btn.dataset.state = "copied";
158
+ setTimeout(() => delete btn.dataset.state, 2500);
159
+ });
160
+ ```
161
+
162
+ ```css
163
+ .copy-btn[data-state="copied"] .copy-btn__label::after { content: " ✓ Copied"; }
164
+ .copy-btn[data-state="copied"] .copy-btn__label > * { opacity: 0; }
165
+ ```
166
+
167
+ ### Drag handle
168
+
169
+ Trigger: hover (after **1–2s delay** — Notion's pattern). Changes: handle reveals via opacity transition, cursor switches to `grab`. On grab: cursor `grabbing`, ghost element at 50% opacity follows pointer, drop indicator (1px line, accent colour) tracks the nearest valid drop target. Spring stiffness 280 / damping 26 on release-snap. A11y: arrow-key reorder when the row is focused; announce drag state with `aria-live`.
170
+
171
+ ### Optimistic update with rollback
172
+
173
+ Trigger: any action with a known-correct local prediction (toggle, like, archive, reorder). Changes: state mutates immediately; the row visibly updates. Async request fires. On success: nothing happens — silent success is the marker of taste. On failure: 200ms colour rollback animation + a toast with one Undo button. The toast does not auto-dismiss while the user might still want it.
174
+
175
+ ```js
176
+ const prevState = item.completed;
177
+ item.completed = !prevState; render();
178
+ try {
179
+ await api.update(item);
180
+ } catch {
181
+ item.completed = prevState; render();
182
+ toast({ tone: "error", message: "Couldn't save.", action: { label: "Try again", run: retry } });
183
+ }
184
+ ```
185
+
186
+ ### Search-as-you-type
187
+
188
+ Trigger: input event. Debounce by 250ms before requesting; while debouncing, show a subtle indicator (border opacity or label colour shift). Highlight matches in results with `<mark>`. A11y: announce result count with `aria-live="polite"` after debounce settles, never per keystroke.
189
+
190
+ ### Command palette navigation
191
+
192
+ Trigger: ⌘K or `/`. Open: instant, no animation. Arrow-keys move selection — **the indicator transitions** between rows (120ms `--ease-out` on the highlight's `transform: translateY()`), but the items themselves don't move. Enter selects. Escape closes. Items stagger-fade in on first open only, never on filter change. The text input stays focused throughout. This is the Linear / Raycast / Vercel pattern.
193
+
194
+ ### Page-load reveals
195
+
196
+ One orchestrated entrance. Stagger by DOM index, capped at ~500ms total. Use `IntersectionObserver`, never scroll listeners. After first reveal, no more on-scroll animations — let the page just *be there*. Theme-specific themes (Atelier, Salon, Newsprint) skip reveals entirely; that is correct, not a bug.
197
+
198
+ ## The named tells (what AI defaults produce)
199
+
200
+ These are the microinteraction signatures of generated code. The slop test in [`SKILL.md`](../SKILL.md) checks for them; treat any one as a critical finding.
201
+
202
+ 1. **`transition-all`.** Every property animating, including ones that should be instant (visibility, display, focus rings). Always specify the properties. The class is banned in Hallmark output.
203
+ 2. **Universal `hover:scale-105`.** Every card lifts on hover, with no shadow change, no easing specified, no purpose. AI's reflexive "make it interactive" gesture.
204
+ 3. **Bouncy overshoot easings.** `cubic-bezier(0.34, 1.56, 0.64, 1)` and friends on UI elements. Tasteless 2018-throwback. Reserve overshoots for genuine physical interactions (drag release).
205
+ 4. **Multiple simultaneous hover effects.** A card that translates, scales, shadows, colour-shifts, and rotates on hover. Pick *one* signal.
206
+ 5. **Animated gradient backgrounds on hover.** The gradient slides through colour space. Distracting, expensive, communicates nothing.
207
+ 6. **Glow halos on text.** Heavy `text-shadow` for "neon" — destroys contrast, hurts legibility.
208
+ 7. **Cursor-follower dots.** A trailing dot that lags behind the pointer. Adds nothing; triggers vestibular issues.
209
+ 8. **Custom cursors on every interactive element.** Conflicts with OS conventions; users learn nothing about what's clickable.
210
+ 9. **Auto-rotating carousels with no controls.** WCAG 2.2.2 violation. Always.
211
+ 10. **Parallax on scroll.** Different layers moving at different speeds. Vestibular trigger; rarely serves the content.
212
+ 11. **`transition` applied to layout properties.** Animating `width`, `height`, `padding`, `margin`, `top`, `left`. Triggers reflow on every frame. Use `transform` or `grid-template-rows: 0fr → 1fr`.
213
+ 12. **Universal scroll-triggered fade-up-stagger.** Every section fades in on intersection. Page never settles. Pick *one* orchestrated entrance.
214
+ 13. **Celebratory success toasts.** "Done!" when the user just saved a thing they can see was saved. Silent success is taste.
215
+ 14. **Confirmation dialogs for reversible actions.** "Are you sure you want to delete this?" Replace with optimistic delete + Undo toast.
216
+ 15. **Spinners with no minimum visible time.** Spinner flashes on/off when the action completes in 80ms. Either delay showing it (150ms) or set a minimum visible duration (300ms).
217
+ 16. **Tooltips with the same delay on hover and focus.** Hover should delay 800–1000ms; focus should appear immediately. They are different intents.
218
+ 17. **Focus rings that animate in.** The ring fades in over 200ms, leaving keyboard users without an indicator at the start of the transition. Focus rings appear instantly. Always.
219
+ 18. **Color-only state change.** A field turns red on error with no icon, no text, no border style change. Fails WCAG 1.4.1 and is unreadable for ~8% of men.
220
+ 19. **Toasts that move existing content.** New toast pushes the page down; dismissed toast lets it spring back. Stack toasts; don't shift layout.
221
+ 20. **Hover delays on touch.** A `:hover` state that the touch user can never reach because there's no equivalent focus / tap behaviour.
222
+
223
+ ## Theme-aware microinteractions
224
+
225
+ Microinteractions adapt to the theme. The same button press is louder in Brutal than in Atelier. Apply a multiplier per theme:
226
+
227
+ | Theme | Duration scale | Easing flavour | Notes |
228
+ | --- | --- | --- | --- |
229
+ | Specimen | 1.0× | `--ease-out` | Default. Restrained. |
230
+ | Midnight | 0.9× | `--ease-out` | Snappy, technical. |
231
+ | Brutal | 0.75× | `--ease-out` (sharper) | Fast, decisive. No spring. |
232
+ | Garden | 1.2× | `--ease-out` | Calm. Springs welcome. |
233
+ | Atelier | 1.3× | `--ease-out` (very gentle) | Generous; almost no movement. |
234
+ | Newsprint | 0× | none | Static. Print metaphor. |
235
+ | Terminal | 0× | none, except caret blink *inside* a typed command (N8 nav, install code) | Print + monospace metaphor. **No standalone blinking cursor** — see the Caret blink row above. The caret only blinks where the user would type. |
236
+ | Manifesto | 0.7× | `--ease-out` (sharp) | Snap into place. |
237
+ | Salon | 1.4× | `--ease-out` (very gentle) | Softest. |
238
+ | Linen | 1.2× | `--ease-out` | Calm. |
239
+ | Almanac | 0.85× | `--ease-out` | Functional, like a reference book. |
240
+ | Sport | 0.7× | `--ease-out` (sharp) | Quick, italic-energy. |
241
+
242
+ If the theme has duration scale `0×`, you do not animate. The page does not move. That is a deliberate design choice; it is not broken.
243
+
244
+ ## Accessibility ground truth
245
+
246
+ Every recipe in this file must pass these checks before shipping.
247
+
248
+ - **`prefers-reduced-motion: reduce`** is honoured. Spatial motion collapses to opacity crossfade ≤ 150ms. Functional state changes (progress bars, spinners) slow but remain.
249
+ - **Focus rings** are 2–3 px, ≥ 3:1 contrast, never animated in/out, present on every interactive element via `:focus-visible`.
250
+ - **Hit targets** ≥ 44 × 44 CSS px on touch surfaces.
251
+ - **No reliance on colour alone** for state. Pair with icon, text, or pattern.
252
+ - **No flashing** above 3 Hz. Even subtle pulse animations need rate caps.
253
+ - **Keyboard equivalents** for every hover affordance. No exceptions.
254
+ - **`aria-live`** on async state updates, but `polite` not `assertive` unless safety-critical.
255
+
256
+ ## When in doubt, cut
257
+
258
+ Most pages have too much motion, not too little. Before shipping, walk through every animation in your output and ask: *what would happen if this animation were instant?* If the answer is "nothing — the user wouldn't notice", remove the animation. If the answer is "the user would lose information about what changed", keep it.
259
+
260
+ Reaching for a static answer is a sign of taste. Reaching for more motion is the AI default.
@@ -0,0 +1,109 @@
1
+ # Motion
2
+
3
+ Most AI-generated motion is scattered — hover lifts on every card, fade-in on every scroll, bouncing icons. Quiet it. One orchestrated moment beats ten small ones.
4
+
5
+ > For per-interaction recipes (button press, focus, modal, toast, optimistic update, command palette, drag handle, etc.), see [`microinteractions.md`](microinteractions.md). This file is the *language* of motion; that file is the *vocabulary*.
6
+
7
+ ## Principles
8
+
9
+ - **Animate only `transform` and `opacity`.** These are GPU-composited; they don't trigger layout. Anything else is a performance bug waiting.
10
+ - **Duration is three buckets.** Micro (100–150ms), minor (200–300ms), major (300–500ms). Exits are ~75% of the enter.
11
+ - **Easing is exponential ease-out.** Elements coming in slow down into place. Elements leaving accelerate away.
12
+ - **Motion serves perception.** If you can't explain what a transition communicates, cut it.
13
+ - **Reduced motion is non-optional.** `@media (prefers-reduced-motion: reduce)` collapses all spatial motion to opacity crossfade.
14
+
15
+ ## Easings
16
+
17
+ Use these three. Name them as tokens.
18
+
19
+ ```css
20
+ :root {
21
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* elements entering */
22
+ --ease-in: cubic-bezier(0.7, 0, 0.84, 0); /* elements leaving */
23
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* state toggles */
24
+ }
25
+ ```
26
+
27
+ `ease`, `ease-in-out` (default), `cubic-bezier(0.25, 0.1, 0.25, 1)` — these are the browser defaults and they read as uncrafted.
28
+
29
+ ## Durations
30
+
31
+ ```css
32
+ :root {
33
+ --dur-micro: 120ms; /* button press, toggle tick, color shift */
34
+ --dur-short: 220ms; /* hover lift, tooltip, menu open */
35
+ --dur-long: 420ms; /* modal, drawer, accordion, page reveal */
36
+ }
37
+ ```
38
+
39
+ Exits use roughly 75% of the enter:
40
+
41
+ ```css
42
+ .menu.is-open { transition: transform var(--dur-short) var(--ease-out); }
43
+ .menu.is-close { transition: transform calc(var(--dur-short) * 0.75) var(--ease-in); }
44
+ ```
45
+
46
+ ## Page-load orchestration
47
+
48
+ One sequence on page load. Stagger by DOM index using a CSS custom property, not by JS.
49
+
50
+ ```html
51
+ <section style="--i: 0">…</section>
52
+ <section style="--i: 1">…</section>
53
+ <section style="--i: 2">…</section>
54
+ ```
55
+
56
+ ```css
57
+ .reveal {
58
+ opacity: 0;
59
+ transform: translateY(8px);
60
+ animation: reveal var(--dur-long) var(--ease-out) forwards;
61
+ animation-delay: calc(var(--i, 0) * 60ms);
62
+ }
63
+ @keyframes reveal {
64
+ to { opacity: 1; transform: none; }
65
+ }
66
+ ```
67
+
68
+ Cap total stagger at ~500ms. Beyond that the page feels slow to settle.
69
+
70
+ ## Scroll-linked motion
71
+
72
+ - Use IntersectionObserver, **never** `scroll` event listeners.
73
+ - Use it only for *reveal once* effects. No parallax. No scroll-scrubbed animations unless there is a specific reason.
74
+ - Every scroll-triggered motion must have a reduced-motion fallback.
75
+
76
+ ## State transitions
77
+
78
+ - Button hover / active: micro duration, `--ease-out`, `transform: translateY(-1px)` on hover, `translateY(0)` on active. Never a `box-shadow` transition on hover on a dark background (glow effect).
79
+ - Menu / tooltip / dropdown: short duration, `--ease-out` on open, `--ease-in` on close. Use the popover API or `inert` to manage focus.
80
+ - Modal: long duration, scale-in (0.96 → 1) + opacity crossfade. Backdrop fades in at the same duration.
81
+ - Accordion: animate `grid-template-rows: 0fr` → `grid-template-rows: 1fr` (not `height`). With `--ease-in-out`.
82
+
83
+ ## Reduced motion
84
+
85
+ ```css
86
+ @media (prefers-reduced-motion: reduce) {
87
+ *, *::before, *::after {
88
+ animation-duration: 150ms !important;
89
+ animation-iteration-count: 1 !important;
90
+ transition-duration: 150ms !important;
91
+ }
92
+ .reveal { animation: reveal-reduced 150ms linear forwards; }
93
+ @keyframes reveal-reduced { to { opacity: 1; transform: none; } }
94
+ }
95
+ ```
96
+
97
+ Functional motion (progress bars, loading spinners, skeletons) still runs — just slower.
98
+
99
+ ## Bans
100
+
101
+ - `ease` (browser default, mediocre).
102
+ - `linear` on anything except progress bars and ticking loaders.
103
+ - Bounce / elastic / overshoot on UI elements. Dated; signals "template".
104
+ - Animating `width`, `height`, `top`, `left`, `margin`, `padding`.
105
+ - `will-change` set preemptively across a whole class. Only on the element, only while it's animating.
106
+ - Parallax.
107
+ - Custom cursors.
108
+ - Scroll-driven animations without a reduced-motion fallback.
109
+ - Infinite loops (other than functional loaders) — they pull the eye and never let go.
@@ -0,0 +1,49 @@
1
+ # Preview-block worked examples
2
+
3
+ Four sample Step 5 preview blocks for the model to imitate, varied across macrostructure types. Load this file only when picking an unusual macrostructure or custom theme and the bullet-list spec in `SKILL.md § 5. Preview` doesn't give enough scaffolding on its own. Most builds don't need to read this file.
4
+
5
+ ---
6
+
7
+ *Long Document (editorial, motion-cut):*
8
+ > **Hallmark · v1.0.0**
9
+ >
10
+ > - **Macrostructure** · Long Document
11
+ > - **Theme** · Linen (cool slate paper · steel-blue accent · geometric sans)
12
+ > - **Enrichment** · Tier-B hand-built SVG (a 60-line coffee bean with `@property --rise` 6 s breathing-loop)
13
+ > - **Sections** · Masthead · Letter · Three Notes · Visit · Colophon
14
+ > - **Motion** · breathing-loop on bean only (respects `prefers-reduced-motion`)
15
+ > - **Slop test** · 69 / 69 ✓
16
+ > - **Diversification** · first run for this project
17
+
18
+ *Bento Grid (SaaS, motion-on):*
19
+ > **Hallmark · v1.0.0**
20
+ >
21
+ > - **Macrostructure** · Bento Grid
22
+ > - **Theme** · Linen (cool slate paper · steel-blue accent · geometric sans)
23
+ > - **Enrichment** · E1 Clipped-Edge Demo Video, Tier-A CSS-art trace waterfall
24
+ > - **Sections** · Hero · 6-tile Bento (stat · sparkline · quote · code · integrations · spotlight) · Index Footer
25
+ > - **Motion** · counter · pricing-lift · CSS marquee on integrations strip
26
+ > - **Slop test** · 69 / 69 ✓
27
+ > - **Diversification** · differs from Plain on paper hue (light-cool vs pure-white) + accent (indigo vs ink-blue)
28
+
29
+ *Manifesto (declarative, no enrichment):*
30
+ > **Hallmark · v1.0.0**
31
+ >
32
+ > - **Macrostructure** · Manifesto
33
+ > - **Theme** · Manifesto (dark · Inter Tight 900 · single red bleed)
34
+ > - **Enrichment** · none (typography only — voice carries the brand)
35
+ > - **Sections** · Masthead · Title · Five Declarations · Bleed Band · What We Refuse · Working Rules · Practice · Reading · Colophon
36
+ > - **Motion** · none — typography only
37
+ > - **Slop test** · 69 / 69 ✓
38
+ > - **Diversification** · differs from Linen on paper band (dark vs light) + display style (display-heavy vs geometric-sans)
39
+
40
+ *Custom (Coffeebox archival café):*
41
+ > **Hallmark · v1.0.0**
42
+ >
43
+ > - **Macrostructure** · Long Document
44
+ > - **Theme** · custom (vibe: "archival warmth, hand-set, no varnish" · paper oklch(94% 0.020 65) · accent oklch(58% 0.16 35) terracotta · Fraunces italic display + Source Serif 4 body)
45
+ > - **Enrichment** · Tier-A pure-CSS coffee bean (60-line SVG, breathing-loop optional)
46
+ > - **Sections** · Masthead · Letter · Three Notes · Visit · Colophon
47
+ > - **Motion** · breathing-loop on bean (with reduced-motion fallback)
48
+ > - **Slop test** · 69 / 69 ✓
49
+ > - **Diversification** · custom axes: light / italic-serif / chromatic-terracotta — differs from previous catalog Linen on accent hue + display style
@@ -0,0 +1,138 @@
1
+ # Responsive
2
+
3
+ Mobile-first. Content-driven breakpoints. No desktop-only interactions.
4
+
5
+ ## Mobile — non-negotiable
6
+
7
+ Every Hallmark output must render flawlessly at **320 px, 375 px, 414 px, and 768 px** CSS-pixel widths. Eyeball each viewport before marking the output complete:
8
+
9
+ - No horizontal scroll (slop-test gate 36)
10
+ - No clickable text wrapping to two lines (gate 59)
11
+ - No image-bearing grid pushing the layout past viewport — use `minmax(0, 1fr)`, never bare `1fr`, on tracks containing images (gate 61)
12
+ - Root carries `overflow-x: clip` on both `html` and `body` — never `hidden` (gate 62)
13
+ - Display headers wrap inside long words via `overflow-wrap: anywhere; min-width: 0` (gate 63)
14
+ - Section heads collapse to one column on mobile across every theme variant — per-theme overrides need a matching mobile rule (gate 64)
15
+ - No scroll-jump on radio-tab clicks — radios in normal flow OR JS guard with `focus({ preventScroll: true })` (gate 65)
16
+
17
+ This is a hard floor, not a wish list. A page that fails any of these on any of those four widths is not done. The slop-test gates listed run automatically — keep this checklist near the screen while building.
18
+
19
+ ## Principles
20
+
21
+ - Base styles are for the smallest viewport. `min-width` media queries add as you go up. Never `max-width` as the primary direction.
22
+ - Breakpoints are where the *content* breaks, not where a device sits. If the headline reflows awkwardly at 720px, that's a breakpoint — regardless of what the Tailwind defaults say.
23
+ - Use `pointer` and `hover` media queries instead of width to detect *interaction capability*.
24
+
25
+ ## Breakpoints
26
+
27
+ Three or four, content-driven. As a default:
28
+
29
+ ```css
30
+ @media (min-width: 40rem) { /* ~640px — tablet, small laptop */ }
31
+ @media (min-width: 60rem) { /* ~960px — desktop baseline */ }
32
+ @media (min-width: 90rem) { /* ~1440px — wide */ }
33
+ ```
34
+
35
+ Use `rem` so the breakpoints respect the user's font size.
36
+
37
+ ## Fluid scaling
38
+
39
+ Prefer `clamp()` for sizes that change continuously; use media queries for layouts that change discretely.
40
+
41
+ ```css
42
+ h1 { font-size: clamp(2.5rem, 4vw + 1rem, 6rem); }
43
+ .container { padding-inline: clamp(1rem, 4vw, 4rem); }
44
+ ```
45
+
46
+ ## Pointer and hover queries
47
+
48
+ ```css
49
+ @media (hover: hover) and (pointer: fine) {
50
+ .card:hover { transform: translateY(-2px); }
51
+ }
52
+ @media (pointer: coarse) {
53
+ .btn { min-height: 48px; }
54
+ }
55
+ ```
56
+
57
+ Never build a mouse-hover interaction that has no touch equivalent.
58
+
59
+ ## Clickable text — never wraps
60
+
61
+ Buttons, primary nav links, footer links, tab labels, breadcrumbs, and CTAs must read as **single-line affordances at every viewport between 320 px and 1920 px**. A button or nav link wrapping to two lines looks broken — visitors read it as a styling error, not as intentional. The shortest fix is almost always to shorten the label.
62
+
63
+ ```css
64
+ /* Affordances are single-line — let the parent reflow, not the label. */
65
+ .btn,
66
+ .nav__link,
67
+ .foot__link,
68
+ .cta {
69
+ white-space: nowrap;
70
+ }
71
+ ```
72
+
73
+ ```css
74
+ /* When the row can't fit, collapse the row, not the labels. */
75
+ @media (max-width: 40rem) {
76
+ .nav__rail { display: none; } /* desktop nav hides */
77
+ .nav__sheet-toggle { display: grid; } /* mobile menu shows */
78
+ }
79
+ ```
80
+
81
+ **Order of fixes**, when something does wrap:
82
+
83
+ 1. **Shorten the label.** *"Get started free"* → *"Start free"*. *"Read the documentation"* → *"Read docs"*. *"Schedule a demo"* → *"Book demo"*. Most CTA labels are 30–40 % longer than they need to be.
84
+ 2. **`white-space: nowrap`** on the affordance, let the parent flex/grid reflow.
85
+ 3. **`hidden=until-found`** the lowest-priority nav item at narrow widths (it remains in DOM for find-in-page and SEO).
86
+ 4. **Collapse the nav** into a sheet / off-canvas / disclosure menu below a content-driven breakpoint.
87
+
88
+ **Never:** let a primary CTA or top-level nav link wrap. Long footer-link labels can wrap *only* in a footer column where wrapping is part of the column's rhythm — not in the inline footer link strip (Ft2).
89
+
90
+ This is gate **59** in [`slop-test.md`](slop-test.md). Audit any output that ships interactive affordances and confirm none wrap at the breakpoints listed above.
91
+
92
+ ## Viewport units
93
+
94
+ - Use `dvh` / `svh` / `lvh` instead of `vh` for heights that interact with mobile chrome.
95
+ - Never `width: 100vw`. Use `width: 100%` with padding; `100vw` includes the scrollbar on desktop and causes overflow.
96
+
97
+ ## Safe areas
98
+
99
+ For iOS notch / Android navigation bars:
100
+
101
+ ```html
102
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
103
+ ```
104
+
105
+ ```css
106
+ body {
107
+ padding-inline: max(1rem, env(safe-area-inset-left));
108
+ padding-bottom: max(1rem, env(safe-area-inset-bottom));
109
+ }
110
+ ```
111
+
112
+ ## Tables on small screens
113
+
114
+ Tables of data that won't fit: collapse to cards. Use `display: block` on `<tr>` and `data-label` attributes keyed from `<th>`, rendered via `::before`. Or, the better option: redesign the data for small screens — tables are rarely the right mobile representation.
115
+
116
+ ## Images
117
+
118
+ - `srcset` with width descriptors for responsive sizing.
119
+ - `<picture>` for art direction (different crop at different widths).
120
+ - `loading="lazy"` on anything below the fold.
121
+ - `width` and `height` attributes on every image, always, to avoid CLS.
122
+
123
+ ## Internationalisation
124
+
125
+ - Reserve 30–40% extra horizontal space for German, Russian, and Finnish translations.
126
+ - Use logical properties: `margin-inline-start`, `padding-block`, `border-inline-end`. Not `margin-left` etc. RTL comes for free.
127
+ - Don't hard-code language-specific punctuation or date formats.
128
+
129
+ ## Bans
130
+
131
+ - Desktop-first media queries (`max-width: 768px` as the primary direction).
132
+ - `vh` on full-height layouts (use `dvh`).
133
+ - `100vw` widths.
134
+ - Device-sniffing UA strings instead of feature queries.
135
+ - Hover-only interactions.
136
+ - Ignoring `prefers-color-scheme` when the app claims to support dark mode.
137
+ - Fixed pixel breakpoints that don't respect `rem`.
138
+ - Tables of 10+ columns on mobile without a redesign.