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,475 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
6
+ <title>BananaStudio — studio-grade headshots, in thirty minutes.</title>
7
+ <meta name="description" content="Upload twelve selfies. Receive one hundred retouched headshots in thirty minutes — your wardrobe, your lighting, your direction." />
8
+ <meta name="theme-color" content="#0a0712" />
9
+
10
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
11
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
12
+ <link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..600;1,9..144,300..600&family=Geist:wght@400;500;600&family=Geist+Mono:wght@400;500&display=swap" rel="stylesheet" />
13
+
14
+ <link rel="stylesheet" href="styles.css" />
15
+ </head>
16
+ <body>
17
+ <a class="sr-only" href="#main">Skip to content</a>
18
+
19
+ <header class="nav">
20
+ <div class="shell nav__inner">
21
+ <a class="wordmark" href="#" aria-label="BananaStudio — home">BananaStudio</a>
22
+ <ul class="nav__links">
23
+ <li><a href="#examples">Work</a></li>
24
+ <li><a href="#pricing">Pricing</a></li>
25
+ <li><a href="#faq">FAQ</a></li>
26
+ <li><a class="btn btn--ghost btn--sm" href="#cta">Start a session<span class="arrow" aria-hidden="true">→</span></a></li>
27
+ </ul>
28
+ </div>
29
+ </header>
30
+
31
+ <main id="main">
32
+
33
+ <!-- ─── Hero — Marquee, huge title left, animated aperture right ─── -->
34
+ <section class="shell hero" aria-labelledby="hero-title">
35
+ <div class="hero__copy reveal" style="--i:0">
36
+ <p class="hero__eyebrow">Open beta · v1.0</p>
37
+ <h1 id="hero-title" class="hero__title">
38
+ Studio-grade<br/>
39
+ headshots,<br/>
40
+ <em>in thirty minutes.</em>
41
+ </h1>
42
+ <p class="hero__lede">
43
+ Upload twelve selfies. Receive one hundred retouched portraits — your wardrobe, your lighting, your direction. No reschedules, no studio lights, no awkward small-talk with a photographer who'd rather be shooting weddings.
44
+ </p>
45
+ <div class="hero__cta">
46
+ <a class="btn" href="#cta">Start a session<span class="arrow" aria-hidden="true">→</span></a>
47
+ <a class="btn btn--ghost" href="#examples">See examples</a>
48
+ </div>
49
+ <div class="hero__meta">
50
+ <span><span class="dot" aria-hidden="true"></span>4K PNG output</span>
51
+ <span><span class="dot" aria-hidden="true"></span>30-min turnaround</span>
52
+ <span><span class="dot" aria-hidden="true"></span>Commercial license</span>
53
+ </div>
54
+ </div>
55
+
56
+ <!-- Interactive before/after slider -->
57
+ <div class="hero__aside reveal" style="--i:1">
58
+ <div class="compare" style="--pos: 50%;">
59
+ <input class="compare__input" type="range" min="0" max="100" value="50" step="0.1"
60
+ aria-label="Drag to compare a phone selfie with the studio result. Use arrow keys to adjust." />
61
+ <figure class="compare__pane compare__pane--after" aria-label="Studio output">
62
+ <div class="portrait portrait--after" aria-hidden="true"></div>
63
+ </figure>
64
+ <figure class="compare__pane compare__pane--before" aria-label="Phone selfie">
65
+ <div class="portrait portrait--before" aria-hidden="true"></div>
66
+ </figure>
67
+ <span class="compare__label compare__label--before">Selfie</span>
68
+ <span class="compare__label compare__label--after">Studio</span>
69
+ <div class="compare__divider" aria-hidden="true">
70
+ <span class="compare__handle">
71
+ <svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true">
72
+ <path d="M9 5 L4 12 L9 19 M15 5 L20 12 L15 19"
73
+ fill="none" stroke="currentColor" stroke-width="2"
74
+ stroke-linecap="round" stroke-linejoin="round" />
75
+ </svg>
76
+ </span>
77
+ </div>
78
+ </div>
79
+ <p class="compare__caption" aria-hidden="true">
80
+ <span>Drag to compare</span>
81
+ <span class="compare__caption-meta">phone-quality input → 4K retouched output</span>
82
+ </p>
83
+ </div>
84
+ </section>
85
+
86
+ <!-- ─── Marquee strip ────────────────────────────────────────────── -->
87
+ <section class="marquee" aria-label="Wardrobe samples">
88
+ <div class="marquee__track" aria-hidden="true">
89
+ <span class="marquee__word">Boardroom</span>
90
+ <span class="marquee__word marquee__word--mute">Editorial</span>
91
+ <span class="marquee__word">Daylight</span>
92
+ <span class="marquee__word marquee__word--mute">On-set</span>
93
+ <span class="marquee__word">Noir</span>
94
+ <span class="marquee__word marquee__word--mute">Press</span>
95
+ <span class="marquee__word">Boardroom</span>
96
+ <span class="marquee__word marquee__word--mute">Editorial</span>
97
+ <span class="marquee__word">Daylight</span>
98
+ <span class="marquee__word marquee__word--mute">On-set</span>
99
+ <span class="marquee__word">Noir</span>
100
+ <span class="marquee__word marquee__word--mute">Press</span>
101
+ </div>
102
+ </section>
103
+
104
+ <!-- ─── Output gallery (six breathing portraits, wide grid) ─────── -->
105
+ <section class="shell section" id="examples" aria-labelledby="ex-title">
106
+ <div class="gallery">
107
+ <header class="gallery__intro">
108
+ <div>
109
+ <p class="section__head">01 · The output</p>
110
+ <h2 id="ex-title" class="section__title">Looks like a photographer made it. <em>The kind your CMO's husband doesn't.</em></h2>
111
+ </div>
112
+ <p class="section__sub">Trained on twelve thousand portrait sessions. Real skin texture, real fall-off, no plastic finish, no extra fingers. 4K PNG and 2048-px social crops, ready for LinkedIn or the back of a book.</p>
113
+ </header>
114
+
115
+ <article class="tile tile--feature reveal" style="--i:0">
116
+ <p class="meta">06 · Direction</p>
117
+ <div>
118
+ <h2>Pick wardrobe, lighting, backdrop, framing. <em>Or write a brief and we'll match it.</em></h2>
119
+ <p style="margin-top: var(--space-md);">Twelve presets ship in every plan. Custom briefs unlock on Studio Plus — drop a reference image and we'll mirror its colour temperature, depth of field, and posture.</p>
120
+ </div>
121
+ <p class="meta">⌗ 4K PNG · 2048 social · retouched</p>
122
+ </article>
123
+
124
+ <article class="tile tile--portrait reveal" style="--i:1" aria-label="Wardrobe sample: boardroom">
125
+ <div class="portrait portrait--boardroom"></div>
126
+ <div class="portrait__caption"><span>Boardroom</span><span class="num">02</span></div>
127
+ </article>
128
+ <article class="tile tile--portrait reveal" style="--i:2" aria-label="Wardrobe sample: editorial">
129
+ <div class="portrait portrait--editorial"></div>
130
+ <div class="portrait__caption"><span>Editorial</span><span class="num">03</span></div>
131
+ </article>
132
+ <article class="tile tile--portrait reveal" style="--i:3" aria-label="Wardrobe sample: daylight">
133
+ <div class="portrait portrait--daylight"></div>
134
+ <div class="portrait__caption"><span>Daylight</span><span class="num">04</span></div>
135
+ </article>
136
+
137
+ <article class="tile tile--portrait reveal" style="--i:4" aria-label="Wardrobe sample: on-set">
138
+ <div class="portrait portrait--onset"></div>
139
+ <div class="portrait__caption"><span>On-set</span><span class="num">05</span></div>
140
+ </article>
141
+ <article class="tile tile--portrait reveal" style="--i:5" aria-label="Wardrobe sample: noir">
142
+ <div class="portrait portrait--noir"></div>
143
+ <div class="portrait__caption"><span>Noir</span><span class="num">06</span></div>
144
+ </article>
145
+ <article class="tile tile--portrait reveal" style="--i:6" aria-label="Wardrobe sample: editorial alt">
146
+ <div class="portrait portrait--editorial" style="filter: hue-rotate(28deg) saturate(1.1);"></div>
147
+ <div class="portrait__caption"><span>Press</span><span class="num">07</span></div>
148
+ </article>
149
+ </div>
150
+ </section>
151
+
152
+ <!-- ─── Stat counter ─────────────────────────────────────────────── -->
153
+ <section class="shell" aria-labelledby="stat-title">
154
+ <div class="stat">
155
+ <p class="stat__figure" id="stat-figure" aria-hidden="true">
156
+ <span class="num" data-counter="100000">100,000</span><span class="plus">+</span>
157
+ </p>
158
+ <div class="stat__copy">
159
+ <h2 id="stat-title">Headshots delivered to founders, recruiters, sales teams, and a surprising number of family lawyers.</h2>
160
+ <p>“100,000 portraits across 11,400 paying customers since beta. Average turnaround: 27 minutes. Re-shoot rate: 4.1%.”</p>
161
+ </div>
162
+ </div>
163
+ </section>
164
+
165
+ <!-- ─── Process — three steps, workbench-style ─────────────────── -->
166
+ <section class="shell section" id="howto" aria-labelledby="howto-title">
167
+ <div class="process">
168
+ <header class="process__head">
169
+ <div>
170
+ <p class="section__head">02 · The process</p>
171
+ <h2 id="howto-title">Three steps. Thirty minutes. <em>No setup.</em></h2>
172
+ </div>
173
+ <p>From the moment you upload to the moment your first edit lands in your inbox.</p>
174
+ </header>
175
+
176
+ <ol class="steps">
177
+ <li class="step reveal" style="--i:0">
178
+ <p class="step__num">01</p>
179
+ <p class="step__stage">Upload</p>
180
+ <h3>Send twelve selfies.</h3>
181
+ <p>Front, side, smile, neutral. Phone-quality is fine — the model is trained on phone cameras, not Hasselblads.</p>
182
+ </li>
183
+ <li class="step reveal" style="--i:1">
184
+ <p class="step__num">02</p>
185
+ <p class="step__stage">Direct</p>
186
+ <h3>Pick a look, or write a brief.</h3>
187
+ <p>Choose from twelve wardrobes and four lighting setups. Or write a sentence — “warm office, navy knit, side-light from the left” — and we'll match it.</p>
188
+ </li>
189
+ <li class="step reveal" style="--i:2">
190
+ <p class="step__num">03</p>
191
+ <p class="step__stage">Receive</p>
192
+ <h3>One hundred edits, in thirty minutes.</h3>
193
+ <p>4K PNG, retouched, with commercial license. Delivered to your inbox and your dashboard. Re-shoot any look free.</p>
194
+ </li>
195
+ </ol>
196
+ </div>
197
+ </section>
198
+
199
+ <!-- ─── Pricing ──────────────────────────────────────────────────── -->
200
+ <section class="shell section" id="pricing" aria-labelledby="pricing-title">
201
+ <div class="pricing">
202
+ <header class="pricing__head">
203
+ <p class="section__head">03 · Pricing</p>
204
+ <h2 id="pricing-title">Pay by output, <em>not by seat.</em></h2>
205
+ <p>Re-shoots are always free. Three plans, no annual lock-in, no surprise upcharges for "premium" presets.</p>
206
+ </header>
207
+
208
+ <div class="tiers">
209
+ <article class="tier reveal" style="--i:0" aria-labelledby="t1">
210
+ <p class="tier__name" id="t1">Studio</p>
211
+ <p class="tier__price">$39<span class="unit">one-off</span></p>
212
+ <p class="tier__sub">For a single round of headshots, on demand.</p>
213
+ <ul class="tier__list">
214
+ <li>100 retouched headshots</li>
215
+ <li>4 wardrobes · 4 lighting presets</li>
216
+ <li>30-minute turnaround</li>
217
+ <li>4K PNG · 2048 social crops</li>
218
+ <li>Commercial license</li>
219
+ </ul>
220
+ <a class="btn btn--ghost" href="#cta">Start a session<span class="arrow" aria-hidden="true">→</span></a>
221
+ </article>
222
+
223
+ <article class="tier tier--rec reveal" style="--i:1" aria-labelledby="t2">
224
+ <p class="tier__name" id="t2">Studio Plus</p>
225
+ <p class="tier__price">$79<span class="unit">one-off</span></p>
226
+ <p class="tier__sub">For founders and execs who reshoot every quarter.</p>
227
+ <ul class="tier__list">
228
+ <li>300 retouched headshots</li>
229
+ <li>Unlimited wardrobes &amp; lighting</li>
230
+ <li>Same-day turnaround, 12 h SLA</li>
231
+ <li>Custom briefs &amp; reference images</li>
232
+ <li>Brand kit · 1 round of revisions</li>
233
+ <li>Commercial license</li>
234
+ </ul>
235
+ <a class="btn" href="#cta">Start a session<span class="arrow" aria-hidden="true">→</span></a>
236
+ </article>
237
+
238
+ <article class="tier reveal" style="--i:2" aria-labelledby="t3">
239
+ <p class="tier__name" id="t3">Editorial</p>
240
+ <p class="tier__price">$199<span class="unit">per shoot</span></p>
241
+ <p class="tier__sub">For press, book covers, and brand work that earns the front page.</p>
242
+ <ul class="tier__list">
243
+ <li>500 retouched headshots</li>
244
+ <li>30-minute creative direction call</li>
245
+ <li>Brand kit upload · LUT match</li>
246
+ <li>3 rounds of revision</li>
247
+ <li>Print-ready 6K TIFF</li>
248
+ <li>Extended commercial license</li>
249
+ </ul>
250
+ <a class="btn btn--ghost" href="#cta">Talk to direction<span class="arrow" aria-hidden="true">→</span></a>
251
+ </article>
252
+ </div>
253
+ </div>
254
+ </section>
255
+
256
+ <!-- ─── FAQ ──────────────────────────────────────────────────────── -->
257
+ <section class="shell section" id="faq" aria-labelledby="faq-title">
258
+ <div class="faq">
259
+ <header class="faq__head">
260
+ <p class="section__head">04 · FAQ</p>
261
+ <h2 id="faq-title">Questions, <em>answered honestly.</em></h2>
262
+ <p>Five we get most often. If yours isn't here, the answer is probably yes — write us.</p>
263
+ </header>
264
+ <div class="faq__list">
265
+ <details class="faq__item">
266
+ <summary class="faq__summary"><span>How long does a session actually take?</span><span class="faq__sign" aria-hidden="true"></span></summary>
267
+ <div class="faq__answer-wrap"><div class="faq__answer-inner">
268
+ <p class="faq__answer">Thirty minutes from the moment your last selfie uploads. Studio Plus same-day SLA is 12 hours; we usually clear it in three.</p>
269
+ </div></div>
270
+ </details>
271
+ <details class="faq__item">
272
+ <summary class="faq__summary"><span>What do my headshots actually look like?</span><span class="faq__sign" aria-hidden="true"></span></summary>
273
+ <div class="faq__answer-wrap"><div class="faq__answer-inner">
274
+ <p class="faq__answer">Studio-grade. Skin texture preserved, freckles intact, real light fall-off. No plastic finish, no over-smoothed faces, no AI fingers. The gallery above is built from real customer outputs — different ethnicity, age, and frame in every wardrobe sample.</p>
275
+ </div></div>
276
+ </details>
277
+ <details class="faq__item">
278
+ <summary class="faq__summary"><span>Can I direct the shot?</span><span class="faq__sign" aria-hidden="true"></span></summary>
279
+ <div class="faq__answer-wrap"><div class="faq__answer-inner">
280
+ <p class="faq__answer">Yes. Pick wardrobe, lighting, backdrop, and framing in the dashboard. On Studio Plus and Editorial, drop a reference image — we mirror its colour temperature, depth of field, and posture inside three retries.</p>
281
+ </div></div>
282
+ </details>
283
+ <details class="faq__item">
284
+ <summary class="faq__summary"><span>Can I use these for LinkedIn, work, or press?</span><span class="faq__sign" aria-hidden="true"></span></summary>
285
+ <div class="faq__answer-wrap"><div class="faq__answer-inner">
286
+ <p class="faq__answer">Yes. Every plan ships with a commercial license. Editorial includes the extended license you need for book jackets, magazine covers, or campaign use above 1 M impressions.</p>
287
+ </div></div>
288
+ </details>
289
+ <details class="faq__item">
290
+ <summary class="faq__summary"><span>Do you keep my photos?</span><span class="faq__sign" aria-hidden="true"></span></summary>
291
+ <div class="faq__answer-wrap"><div class="faq__answer-inner">
292
+ <p class="faq__answer">Selfies and outputs are deleted after thirty days. You can wipe them in one click before that — your dashboard has a "delete everything" button that does exactly what it says.</p>
293
+ </div></div>
294
+ </details>
295
+ </div>
296
+ </div>
297
+ </section>
298
+
299
+ <!-- ─── Final CTA — full-bleed dramatic ─────────────────────────── -->
300
+ <section class="shell" id="cta">
301
+ <div class="final">
302
+ <div>
303
+ <h2>Your headshot, <em>in thirty minutes.</em></h2>
304
+ <p class="final__sub">Twelve selfies in. One hundred edits out. Re-shoot any look free, forever.</p>
305
+ </div>
306
+ <div class="final__cta">
307
+ <a class="btn" href="#cta-form">Start a session<span class="arrow" aria-hidden="true">→</span></a>
308
+ <a class="btn btn--ghost" href="#pricing">See plans</a>
309
+ </div>
310
+ </div>
311
+ </section>
312
+
313
+ </main>
314
+
315
+ <footer class="shell foot">
316
+ <div class="foot__row">
317
+ <a class="wordmark" href="#" aria-label="BananaStudio — home">BananaStudio</a>
318
+ <p class="foot__tagline">Studio-grade headshots, in thirty minutes. Built in Lisbon and Toronto, since 2025.</p>
319
+ </div>
320
+ <ul class="foot__links" aria-label="Footer links">
321
+ <li><a href="#pricing">Pricing</a></li>
322
+ <li><a href="#faq">FAQ</a></li>
323
+ <li><a href="#">Privacy</a></li>
324
+ <li><a href="#">Terms</a></li>
325
+ <li><a href="#">Imprint</a></li>
326
+ <li><a href="mailto:hello@bananastudio.com">hello@bananastudio.com</a></li>
327
+ </ul>
328
+ <div class="foot__credit">
329
+ <span>© 2026 BananaStudio · All portraits used on this page are AI-generated.</span>
330
+ <span>v1.0 · made by hand, finished by machine.</span>
331
+ </div>
332
+ </footer>
333
+
334
+ <script>
335
+ // Nav float morph — toggles .is-floating once user scrolls past the masthead.
336
+ (() => {
337
+ const nav = document.querySelector(".nav");
338
+ if (!nav) return;
339
+ const THRESHOLD = 80;
340
+ let floating = false;
341
+ const update = () => {
342
+ const next = window.scrollY > THRESHOLD;
343
+ if (next !== floating) {
344
+ floating = next;
345
+ nav.classList.toggle("is-floating", floating);
346
+ }
347
+ };
348
+ // rAF-throttled to avoid layout thrash on rapid scroll
349
+ let ticking = false;
350
+ const onScroll = () => {
351
+ if (ticking) return;
352
+ ticking = true;
353
+ requestAnimationFrame(() => { update(); ticking = false; });
354
+ };
355
+ window.addEventListener("scroll", onScroll, { passive: true });
356
+ update();
357
+ })();
358
+
359
+ // Stagger reveal — one-shot, IntersectionObserver only.
360
+ (() => {
361
+ const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
362
+ const targets = document.querySelectorAll(".reveal");
363
+ if (reduce || !("IntersectionObserver" in window)) {
364
+ targets.forEach(el => el.classList.add("is-in"));
365
+ return;
366
+ }
367
+ const io = new IntersectionObserver((entries) => {
368
+ for (const e of entries) {
369
+ if (e.isIntersecting) {
370
+ e.target.classList.add("is-in");
371
+ io.unobserve(e.target);
372
+ }
373
+ }
374
+ }, { rootMargin: "0px 0px -8% 0px", threshold: 0.05 });
375
+ targets.forEach(el => io.observe(el));
376
+ })();
377
+
378
+ // Recommended-tier pulse — fires once when the pricing section enters.
379
+ (() => {
380
+ const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
381
+ const rec = document.querySelector(".tier--rec");
382
+ if (!rec || reduce || !("IntersectionObserver" in window)) return;
383
+ const io = new IntersectionObserver((entries) => {
384
+ for (const e of entries) {
385
+ if (e.isIntersecting) {
386
+ rec.classList.add("rec-pulse");
387
+ io.disconnect();
388
+ }
389
+ }
390
+ }, { threshold: 0.4 });
391
+ io.observe(rec);
392
+ })();
393
+
394
+ // Before/after slider — pointer-event drag with capture; range input
395
+ // is hidden but kept in sync for keyboard a11y (Tab + arrows).
396
+ (() => {
397
+ const compare = document.querySelector(".compare");
398
+ if (!compare) return;
399
+ const input = compare.querySelector(".compare__input");
400
+
401
+ const set = (v) => {
402
+ const clamped = Math.max(0, Math.min(100, v));
403
+ compare.style.setProperty("--pos", clamped + "%");
404
+ input.value = clamped;
405
+ };
406
+
407
+ const posFromEvent = (e) => {
408
+ const r = compare.getBoundingClientRect();
409
+ return ((e.clientX - r.left) / r.width) * 100;
410
+ };
411
+
412
+ let dragging = false;
413
+
414
+ compare.addEventListener("pointerdown", (e) => {
415
+ dragging = true;
416
+ compare.setPointerCapture(e.pointerId);
417
+ compare.classList.add("is-dragging");
418
+ set(posFromEvent(e));
419
+ e.preventDefault();
420
+ });
421
+
422
+ compare.addEventListener("pointermove", (e) => {
423
+ if (!dragging) return;
424
+ set(posFromEvent(e));
425
+ });
426
+
427
+ const endDrag = (e) => {
428
+ if (!dragging) return;
429
+ dragging = false;
430
+ compare.classList.remove("is-dragging");
431
+ try { compare.releasePointerCapture(e.pointerId); } catch {}
432
+ };
433
+ compare.addEventListener("pointerup", endDrag);
434
+ compare.addEventListener("pointercancel", endDrag);
435
+
436
+ // Keyboard a11y — input is hidden but Tab-reachable.
437
+ input.addEventListener("input", (e) =>
438
+ compare.style.setProperty("--pos", e.target.value + "%")
439
+ );
440
+
441
+ set(parseFloat(input.value));
442
+ })();
443
+
444
+ // Animated counter — one-shot, eases into the final value.
445
+ (() => {
446
+ const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
447
+ const el = document.querySelector("[data-counter]");
448
+ if (!el) return;
449
+ const target = parseInt(el.dataset.counter, 10);
450
+ if (reduce || !("IntersectionObserver" in window)) {
451
+ el.textContent = target.toLocaleString("en-US");
452
+ return;
453
+ }
454
+ const fmt = new Intl.NumberFormat("en-US");
455
+ const easeOut = (t) => 1 - Math.pow(1 - t, 3);
456
+ const io = new IntersectionObserver((entries) => {
457
+ for (const e of entries) {
458
+ if (!e.isIntersecting) continue;
459
+ io.disconnect();
460
+ const start = performance.now();
461
+ const dur = 2000;
462
+ const tick = (now) => {
463
+ const t = Math.min(1, (now - start) / dur);
464
+ const v = Math.round(target * easeOut(t));
465
+ el.textContent = fmt.format(v);
466
+ if (t < 1) requestAnimationFrame(tick);
467
+ };
468
+ requestAnimationFrame(tick);
469
+ }
470
+ }, { threshold: 0.4 });
471
+ io.observe(el);
472
+ })();
473
+ </script>
474
+ </body>
475
+ </html>