howone 0.1.28 → 0.1.30

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 (224) hide show
  1. package/package.json +1 -1
  2. package/templates/vite/.howone/skills/hallmark/SKILL.md +48 -42
  3. package/templates/vite/.howone/skills/hallmark/references/anti-patterns.md +12 -6
  4. package/templates/vite/.howone/skills/hallmark/references/assets.md +7 -0
  5. package/templates/vite/.howone/skills/hallmark/references/component-cookbook.md +19 -10
  6. package/templates/vite/.howone/skills/hallmark/references/components/f2-sticky-scroll-stack.md +1 -1
  7. package/templates/vite/.howone/skills/hallmark/references/components/ft6-letter-close.md +1 -1
  8. package/templates/vite/.howone/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +1 -1
  9. package/templates/vite/.howone/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +1 -1
  10. package/templates/vite/.howone/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +1 -1
  11. package/templates/vite/.howone/skills/hallmark/references/components/n11-mega-menu.md +40 -0
  12. package/templates/vite/.howone/skills/hallmark/references/components/n12-banner-retract.md +34 -0
  13. package/templates/vite/.howone/skills/hallmark/references/components/n13-inline-cmdk-pill.md +39 -0
  14. package/templates/vite/.howone/skills/hallmark/references/components/n1b-saas-three-section.md +35 -0
  15. package/templates/vite/.howone/skills/hallmark/references/components/n9-edge-aligned-minimal.md +1 -1
  16. package/templates/vite/.howone/skills/hallmark/references/components/s3-sticky-pinned.md +2 -2
  17. package/templates/vite/.howone/skills/hallmark/references/copy.md +8 -8
  18. package/templates/vite/.howone/skills/hallmark/references/custom-craft.md +2 -2
  19. package/templates/vite/.howone/skills/hallmark/references/custom-theme.md +50 -12
  20. package/templates/vite/.howone/skills/hallmark/references/export-formats.md +1 -1
  21. package/templates/vite/.howone/skills/hallmark/references/genres/atmospheric.md +11 -7
  22. package/templates/vite/.howone/skills/hallmark/references/genres/editorial.md +6 -4
  23. package/templates/vite/.howone/skills/hallmark/references/genres/modern-minimal.md +10 -6
  24. package/templates/vite/.howone/skills/hallmark/references/genres/playful.md +15 -10
  25. package/templates/vite/.howone/skills/hallmark/references/hero-enrichment.md +13 -12
  26. package/templates/vite/.howone/skills/hallmark/references/interaction-and-states.md +2 -1
  27. package/templates/vite/.howone/skills/hallmark/references/layout-and-space.md +4 -3
  28. package/templates/vite/.howone/skills/hallmark/references/macrostructures/04-stat-led.md +3 -1
  29. package/templates/vite/.howone/skills/hallmark/references/macrostructures/12-letter.md +1 -1
  30. package/templates/vite/.howone/skills/hallmark/references/macrostructures.md +1 -1
  31. package/templates/vite/.howone/skills/hallmark/references/microinteractions.md +1 -3
  32. package/templates/vite/.howone/skills/hallmark/references/preview-examples.md +12 -12
  33. package/templates/vite/.howone/skills/hallmark/references/responsive.md +8 -8
  34. package/templates/vite/.howone/skills/hallmark/references/slop-test.md +72 -85
  35. package/templates/vite/.howone/skills/hallmark/references/structure.md +9 -13
  36. package/templates/vite/.howone/skills/hallmark/references/study.md +40 -17
  37. package/templates/vite/.howone/skills/hallmark/references/themes/carnival.md +301 -0
  38. package/templates/vite/.howone/skills/hallmark/references/themes/cobalt.md +146 -0
  39. package/templates/vite/.howone/skills/hallmark/references/themes/hum.md +403 -0
  40. package/templates/vite/.howone/skills/hallmark/references/themes/lumen.md +478 -0
  41. package/templates/vite/.howone/skills/hallmark/references/typography.md +3 -3
  42. package/templates/vite/.howone/skills/hallmark/references/verbs/redesign.md +1 -1
  43. package/templates/vite/.howone/skills/howone/03-sdk/07-ai-action-calls.md +28 -86
  44. package/templates/vite/.howone/skills/howone/03-sdk/09-workflow-execute-sse.md +105 -0
  45. package/templates/vite/.howone/skills/howone/04-ai/03-ai-sdk-handoff.md +15 -13
  46. package/templates/vite/.howone/skills/howone/SKILL.md +2 -2
  47. package/templates/vite/package.json +1 -1
  48. package/templates/vite/.howone/skills/hallmark/LICENSE +0 -21
  49. package/templates/vite/.howone/skills/hallmark/README.md +0 -147
  50. package/templates/vite/.howone/skills/hallmark/ROADMAP.md +0 -201
  51. package/templates/vite/.howone/skills/hallmark/docs/recipes.md +0 -186
  52. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-anya.jpg +0 -0
  53. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-bananastudio.jpg +0 -0
  54. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-hyperlane.jpg +0 -0
  55. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-najm.jpg +0 -0
  56. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-slow-pour.jpg +0 -0
  57. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-soroe.jpg +0 -0
  58. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-tally.jpg +0 -0
  59. package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-wayfare.jpg +0 -0
  60. package/templates/vite/.howone/skills/hallmark/docs/study-examples.md +0 -176
  61. package/templates/vite/.howone/skills/hallmark/docs/talk-slides.md +0 -364
  62. package/templates/vite/.howone/skills/hallmark/package.json +0 -36
  63. package/templates/vite/.howone/skills/hallmark/site/OG-hallmark.png +0 -0
  64. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/brief.md +0 -71
  65. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/index.html +0 -64
  66. package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/style.css +0 -240
  67. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/brief.md +0 -65
  68. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/index.html +0 -105
  69. package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/style.css +0 -250
  70. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/brief.md +0 -64
  71. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/index.html +0 -131
  72. package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/style.css +0 -240
  73. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/brief.md +0 -67
  74. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/index.html +0 -86
  75. package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/style.css +0 -262
  76. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/brief.md +0 -63
  77. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/index.html +0 -167
  78. package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/style.css +0 -457
  79. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/brief.md +0 -65
  80. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/index.html +0 -159
  81. package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/style.css +0 -288
  82. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/brief.md +0 -64
  83. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/index.html +0 -146
  84. package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/style.css +0 -484
  85. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/brief.md +0 -64
  86. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/index.html +0 -116
  87. package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/style.css +0 -354
  88. package/templates/vite/.howone/skills/hallmark/site/_tests/09-slow-pour/index.html +0 -638
  89. package/templates/vite/.howone/skills/hallmark/site/_tests/10-owl-hours/index.html +0 -515
  90. package/templates/vite/.howone/skills/hallmark/site/_tests/11-soroe-ceramics/index.html +0 -515
  91. package/templates/vite/.howone/skills/hallmark/site/_tests/12-loafer/index.html +0 -608
  92. package/templates/vite/.howone/skills/hallmark/site/_tests/13-alma/index.html +0 -587
  93. package/templates/vite/.howone/skills/hallmark/site/_tests/README.md +0 -157
  94. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-loop.mp4 +0 -0
  95. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-still.jpg +0 -0
  96. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-example.mp4 +0 -0
  97. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-still.jpg +0 -0
  98. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-loop.mp4 +0 -0
  99. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-still.jpg +0 -0
  100. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Podcast-loop.mp4 +0 -0
  101. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-loop.mp4 +0 -0
  102. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-still.jpg +0 -0
  103. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-loop.mp4 +0 -0
  104. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-still.jpg +0 -0
  105. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/after-quiet-hour.png +0 -0
  106. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-loop.mp4 +0 -0
  107. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-still.jpg +0 -0
  108. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/audit-example.png +0 -0
  109. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/before-quiet-hour.png +0 -0
  110. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/example-redesign-uractivation.png +0 -0
  111. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-loop.mp4 +0 -0
  112. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-still.jpg +0 -0
  113. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/study-example.png +0 -0
  114. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/uractivation-after-loop.mp4 +0 -0
  115. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-loop.mp4 +0 -0
  116. package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-still.jpg +0 -0
  117. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/index.html +0 -77
  118. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/style.css +0 -238
  119. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/index.html +0 -110
  120. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/style.css +0 -326
  121. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/index.html +0 -134
  122. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/style.css +0 -262
  123. package/templates/vite/.howone/skills/hallmark/site/_tests/custom/README.md +0 -30
  124. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/README.md +0 -17
  125. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/audit-report.md +0 -56
  126. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/input.html +0 -160
  127. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/notes.md +0 -29
  128. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/input.html +0 -63
  129. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/notes.md +0 -72
  130. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/output.html +0 -374
  131. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/diagnosis.md +0 -52
  132. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/input-description.md +0 -29
  133. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/notes.md +0 -61
  134. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.css +0 -193
  135. package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.html +0 -66
  136. package/templates/vite/.howone/skills/hallmark/site/css/base.css +0 -194
  137. package/templates/vite/.howone/skills/hallmark/site/css/components.css +0 -4886
  138. package/templates/vite/.howone/skills/hallmark/site/css/sections.css +0 -2072
  139. package/templates/vite/.howone/skills/hallmark/site/css/tokens.css +0 -1129
  140. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/index.html +0 -475
  141. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/styles.css +0 -1584
  142. package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/tokens.css +0 -96
  143. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/index.html +0 -344
  144. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/script.js +0 -103
  145. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/styles.css +0 -1103
  146. package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/tokens.css +0 -83
  147. package/templates/vite/.howone/skills/hallmark/site/examples/najm/index.html +0 -368
  148. package/templates/vite/.howone/skills/hallmark/site/examples/najm/script.js +0 -133
  149. package/templates/vite/.howone/skills/hallmark/site/examples/najm/styles.css +0 -1062
  150. package/templates/vite/.howone/skills/hallmark/site/examples/najm/tokens.css +0 -97
  151. package/templates/vite/.howone/skills/hallmark/site/examples/tally/app.js +0 -84
  152. package/templates/vite/.howone/skills/hallmark/site/examples/tally/index.html +0 -446
  153. package/templates/vite/.howone/skills/hallmark/site/examples/tally/styles.css +0 -1087
  154. package/templates/vite/.howone/skills/hallmark/site/examples/tally/tokens.css +0 -101
  155. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/index.html +0 -359
  156. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/style.css +0 -1168
  157. package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/tokens.css +0 -81
  158. package/templates/vite/.howone/skills/hallmark/site/favicon-dark.svg +0 -5
  159. package/templates/vite/.howone/skills/hallmark/site/favicon-light.svg +0 -5
  160. package/templates/vite/.howone/skills/hallmark/site/index.html +0 -1043
  161. package/templates/vite/.howone/skills/hallmark/site/js/main.js +0 -1175
  162. package/templates/vite/.howone/skills/hallmark/vercel.json +0 -6
  163. package/templates/vite/.howone/skills/impeccable/SKILL.md +0 -168
  164. package/templates/vite/.howone/skills/impeccable/agents/impeccable-asset-producer.md +0 -101
  165. package/templates/vite/.howone/skills/impeccable/reference/adapt.md +0 -190
  166. package/templates/vite/.howone/skills/impeccable/reference/animate.md +0 -175
  167. package/templates/vite/.howone/skills/impeccable/reference/audit.md +0 -133
  168. package/templates/vite/.howone/skills/impeccable/reference/bolder.md +0 -113
  169. package/templates/vite/.howone/skills/impeccable/reference/brand.md +0 -118
  170. package/templates/vite/.howone/skills/impeccable/reference/clarify.md +0 -174
  171. package/templates/vite/.howone/skills/impeccable/reference/codex.md +0 -105
  172. package/templates/vite/.howone/skills/impeccable/reference/cognitive-load.md +0 -106
  173. package/templates/vite/.howone/skills/impeccable/reference/color-and-contrast.md +0 -105
  174. package/templates/vite/.howone/skills/impeccable/reference/colorize.md +0 -154
  175. package/templates/vite/.howone/skills/impeccable/reference/craft.md +0 -123
  176. package/templates/vite/.howone/skills/impeccable/reference/critique.md +0 -273
  177. package/templates/vite/.howone/skills/impeccable/reference/delight.md +0 -302
  178. package/templates/vite/.howone/skills/impeccable/reference/distill.md +0 -111
  179. package/templates/vite/.howone/skills/impeccable/reference/document.md +0 -427
  180. package/templates/vite/.howone/skills/impeccable/reference/extract.md +0 -69
  181. package/templates/vite/.howone/skills/impeccable/reference/harden.md +0 -347
  182. package/templates/vite/.howone/skills/impeccable/reference/heuristics-scoring.md +0 -234
  183. package/templates/vite/.howone/skills/impeccable/reference/interaction-design.md +0 -195
  184. package/templates/vite/.howone/skills/impeccable/reference/layout.md +0 -141
  185. package/templates/vite/.howone/skills/impeccable/reference/live.md +0 -622
  186. package/templates/vite/.howone/skills/impeccable/reference/motion-design.md +0 -109
  187. package/templates/vite/.howone/skills/impeccable/reference/onboard.md +0 -234
  188. package/templates/vite/.howone/skills/impeccable/reference/optimize.md +0 -258
  189. package/templates/vite/.howone/skills/impeccable/reference/overdrive.md +0 -130
  190. package/templates/vite/.howone/skills/impeccable/reference/personas.md +0 -179
  191. package/templates/vite/.howone/skills/impeccable/reference/polish.md +0 -242
  192. package/templates/vite/.howone/skills/impeccable/reference/product.md +0 -62
  193. package/templates/vite/.howone/skills/impeccable/reference/quieter.md +0 -99
  194. package/templates/vite/.howone/skills/impeccable/reference/responsive-design.md +0 -114
  195. package/templates/vite/.howone/skills/impeccable/reference/shape.md +0 -165
  196. package/templates/vite/.howone/skills/impeccable/reference/spatial-design.md +0 -100
  197. package/templates/vite/.howone/skills/impeccable/reference/teach.md +0 -156
  198. package/templates/vite/.howone/skills/impeccable/reference/typeset.md +0 -124
  199. package/templates/vite/.howone/skills/impeccable/reference/typography.md +0 -159
  200. package/templates/vite/.howone/skills/impeccable/reference/ux-writing.md +0 -107
  201. package/templates/vite/.howone/skills/impeccable/scripts/cleanup-deprecated.mjs +0 -284
  202. package/templates/vite/.howone/skills/impeccable/scripts/command-metadata.json +0 -94
  203. package/templates/vite/.howone/skills/impeccable/scripts/critique-storage.mjs +0 -242
  204. package/templates/vite/.howone/skills/impeccable/scripts/design-parser.mjs +0 -820
  205. package/templates/vite/.howone/skills/impeccable/scripts/detect-csp.mjs +0 -198
  206. package/templates/vite/.howone/skills/impeccable/scripts/detect.mjs +0 -21
  207. package/templates/vite/.howone/skills/impeccable/scripts/impeccable-paths.mjs +0 -110
  208. package/templates/vite/.howone/skills/impeccable/scripts/is-generated.mjs +0 -69
  209. package/templates/vite/.howone/skills/impeccable/scripts/live-accept.mjs +0 -595
  210. package/templates/vite/.howone/skills/impeccable/scripts/live-browser-session.js +0 -123
  211. package/templates/vite/.howone/skills/impeccable/scripts/live-browser.js +0 -4860
  212. package/templates/vite/.howone/skills/impeccable/scripts/live-complete.mjs +0 -75
  213. package/templates/vite/.howone/skills/impeccable/scripts/live-completion.mjs +0 -18
  214. package/templates/vite/.howone/skills/impeccable/scripts/live-inject.mjs +0 -446
  215. package/templates/vite/.howone/skills/impeccable/scripts/live-poll.mjs +0 -200
  216. package/templates/vite/.howone/skills/impeccable/scripts/live-resume.mjs +0 -48
  217. package/templates/vite/.howone/skills/impeccable/scripts/live-server.mjs +0 -838
  218. package/templates/vite/.howone/skills/impeccable/scripts/live-session-store.mjs +0 -254
  219. package/templates/vite/.howone/skills/impeccable/scripts/live-status.mjs +0 -47
  220. package/templates/vite/.howone/skills/impeccable/scripts/live-wrap.mjs +0 -632
  221. package/templates/vite/.howone/skills/impeccable/scripts/live.mjs +0 -247
  222. package/templates/vite/.howone/skills/impeccable/scripts/load-context.mjs +0 -141
  223. package/templates/vite/.howone/skills/impeccable/scripts/modern-screenshot.umd.js +0 -14
  224. package/templates/vite/.howone/skills/impeccable/scripts/pin.mjs +0 -214
@@ -1,475 +0,0 @@
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>