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,1584 @@
1
+ /* Hallmark · genre: atmospheric · macrostructure: Marquee Hero
2
+ * H7 Marquee Hero knobs: title=display-italic-mix · alignment=left-bias · counterweight=animated-aperture
3
+ * theme: Bloom · accent: amber-bloom ~75° (radial bloom + ember-warm)
4
+ * enrichment: Tier-A pure-CSS aperture (animated) + breathing portrait silhouettes + scrolling marquee strip
5
+ * tone: cinematic + bold + precise · audience: founders/recruiters/sales/jobseekers · studied: no
6
+ */
7
+
8
+ @import url("./tokens.css");
9
+
10
+ /* ─── Reset · base ─────────────────────────────────────────────────── */
11
+ *, *::before, *::after { box-sizing: border-box; }
12
+ html { overflow-x: clip; scroll-behavior: smooth; }
13
+ body { overflow-x: clip; }
14
+ * { margin: 0; padding: 0; }
15
+
16
+ html {
17
+ font-size: 16px;
18
+ line-height: 1.55;
19
+ -webkit-text-size-adjust: 100%;
20
+ -webkit-font-smoothing: antialiased;
21
+ -moz-osx-font-smoothing: grayscale;
22
+ text-rendering: optimizeLegibility;
23
+ }
24
+
25
+ body {
26
+ font-family: var(--font-body);
27
+ background: var(--color-paper);
28
+ color: var(--color-ink);
29
+ font-feature-settings: "ss01", "cv11";
30
+ font-weight: 400;
31
+ position: relative;
32
+ isolation: isolate;
33
+ }
34
+
35
+ /* Page-wide ambient bloom — fixed, behind everything */
36
+ body::before {
37
+ content: "";
38
+ position: fixed;
39
+ inset: -20%;
40
+ z-index: -1;
41
+ pointer-events: none;
42
+ background:
43
+ radial-gradient(40% 30% at 80% 0%, var(--color-glow) 0%, transparent 60%),
44
+ radial-gradient(45% 35% at 10% 110%, oklch(60% 0.18 30 / 0.25) 0%, transparent 60%),
45
+ radial-gradient(60% 50% at 50% 50%, oklch(20% 0.025 285 / 0.6) 0%, transparent 70%);
46
+ }
47
+
48
+ img, svg { display: block; max-width: 100%; }
49
+ a { color: inherit; text-decoration: none; }
50
+ button { font: inherit; background: none; border: 0; color: inherit; cursor: pointer; }
51
+
52
+ ::selection { background: var(--color-accent); color: oklch(15% 0.020 60); }
53
+
54
+ /* ─── Page container ──────────────────────────────────────────────── */
55
+ .shell {
56
+ width: 100%;
57
+ max-width: var(--page-max);
58
+ margin-inline: auto;
59
+ padding-inline: var(--page-gutter);
60
+ }
61
+ .section { padding-block: var(--space-3xl); }
62
+ .section--tight { padding-block: var(--space-2xl); }
63
+
64
+ /* ─── Nav — morphs from full-width bar to floating pill on scroll ─── */
65
+ .nav {
66
+ position: sticky;
67
+ top: 0;
68
+ z-index: var(--z-sticky);
69
+
70
+ /* Default state: full-width bar, edge-to-edge, with backdrop blur */
71
+ padding-block: 0;
72
+ background: oklch(10% 0.018 285 / 0.62);
73
+ border-block-end: var(--rule-hair) solid var(--color-rule);
74
+ -webkit-backdrop-filter: saturate(1.4) blur(14px);
75
+ backdrop-filter: saturate(1.4) blur(14px);
76
+
77
+ transition:
78
+ padding-block var(--dur-mid) var(--ease-out),
79
+ background-color var(--dur-mid) var(--ease-out),
80
+ border-block-end-color var(--dur-mid) var(--ease-out),
81
+ -webkit-backdrop-filter var(--dur-mid) var(--ease-out),
82
+ backdrop-filter var(--dur-mid) var(--ease-out);
83
+ }
84
+
85
+ /* Floating state: outer .nav goes transparent AND drops the blur — so
86
+ only the pill carries the glass effect, no wide blurred strip across
87
+ the viewport. Padding-block keeps total nav height at 60px (no jitter).
88
+ The visible top breathing room is delivered via transform on .nav__inner
89
+ (see below) — that way it doesn't push content below. */
90
+ .nav.is-floating {
91
+ padding-block: var(--space-2xs);
92
+ background-color: transparent;
93
+ border-block-end-color: transparent;
94
+ -webkit-backdrop-filter: blur(0);
95
+ backdrop-filter: blur(0);
96
+ }
97
+
98
+ .nav__inner {
99
+ display: flex;
100
+ align-items: center;
101
+ justify-content: space-between;
102
+ gap: var(--space-md);
103
+ padding-block: var(--space-sm);
104
+ min-height: 60px;
105
+
106
+ /* Default: invisible — the bar visual lives on .nav above */
107
+ background: oklch(10% 0.020 285 / 0);
108
+ border: 1px solid transparent;
109
+ border-radius: 0;
110
+ box-shadow: 0 0 0 0 transparent, 0 0 0 0 transparent;
111
+ -webkit-backdrop-filter: blur(0);
112
+ backdrop-filter: blur(0);
113
+ transform: translateY(0);
114
+
115
+ transition:
116
+ max-width var(--dur-mid) var(--ease-out),
117
+ padding var(--dur-mid) var(--ease-out),
118
+ min-height var(--dur-mid) var(--ease-out),
119
+ border-radius var(--dur-mid) var(--ease-out),
120
+ border-color var(--dur-mid) var(--ease-out),
121
+ background-color var(--dur-mid) var(--ease-out),
122
+ box-shadow var(--dur-mid) var(--ease-out),
123
+ -webkit-backdrop-filter var(--dur-mid) var(--ease-out),
124
+ backdrop-filter var(--dur-mid) var(--ease-out),
125
+ transform var(--dur-mid) var(--ease-out);
126
+ }
127
+
128
+ .nav.is-floating .nav__inner {
129
+ /* Pill — overrides .shell's max-width; .shell still provides margin-inline: auto */
130
+ max-width: 58rem;
131
+ min-height: 52px;
132
+ padding-block: var(--space-2xs);
133
+ padding-inline: var(--space-md) var(--space-2xs);
134
+
135
+ border-radius: var(--radius-pill);
136
+ border-color: oklch(48% 0.022 285 / 0.45);
137
+ background: oklch(8% 0.020 285 / 0.82);
138
+ -webkit-backdrop-filter: saturate(1.5) blur(18px);
139
+ backdrop-filter: saturate(1.5) blur(18px);
140
+
141
+ box-shadow:
142
+ 0 18px 50px -18px oklch(0% 0 0 / 0.6),
143
+ 0 4px 14px -4px oklch(0% 0 0 / 0.35),
144
+ inset 0 0 0 1px oklch(98% 0.005 80 / 0.05),
145
+ 0 0 36px -8px var(--color-glow-soft);
146
+
147
+ /* Visible breathing room from the viewport top — pure transform,
148
+ so it doesn't change layout / shift content below. The pill ends
149
+ up sitting ~16px from the top edge while the page underneath
150
+ scrolls cleanly past the rest of the (now-transparent) .nav. */
151
+ transform: translateY(12px);
152
+ }
153
+ .wordmark {
154
+ font-family: var(--font-display);
155
+ font-size: var(--text-md);
156
+ font-weight: 600;
157
+ letter-spacing: -0.02em;
158
+ font-style: italic;
159
+ color: var(--color-ink);
160
+ display: inline-flex;
161
+ align-items: center;
162
+ gap: 0.6ch;
163
+ line-height: 1;
164
+ }
165
+ .wordmark::before {
166
+ content: "";
167
+ display: inline-block;
168
+ width: 10px; height: 10px;
169
+ background: var(--color-accent);
170
+ border-radius: 50%;
171
+ box-shadow: 0 0 16px 2px var(--color-glow);
172
+ animation: pulse-soft var(--dur-breath) var(--ease-in-out) infinite;
173
+ transform: translateY(-1px);
174
+ }
175
+ @keyframes pulse-soft {
176
+ 0%, 100% { transform: translateY(-1px) scale(1); opacity: 1; }
177
+ 50% { transform: translateY(-1px) scale(0.85); opacity: 0.78; }
178
+ }
179
+ .nav__links {
180
+ display: flex;
181
+ align-items: center;
182
+ gap: var(--space-lg);
183
+ list-style: none;
184
+ }
185
+ .nav__links a:not(.btn) {
186
+ font-family: var(--font-body);
187
+ font-size: var(--text-sm);
188
+ color: var(--color-ink-2);
189
+ line-height: 1;
190
+ padding: var(--space-xs) var(--space-2xs);
191
+ position: relative;
192
+ transition: color var(--dur-short) var(--ease-out);
193
+ }
194
+ .nav__links > li:not(:last-child) > a::after {
195
+ content: "";
196
+ position: absolute;
197
+ left: var(--space-2xs);
198
+ right: var(--space-2xs);
199
+ bottom: calc(var(--space-xs) - 2px);
200
+ height: 1px;
201
+ background: var(--color-accent);
202
+ transform: scaleX(0);
203
+ transform-origin: 0 50%;
204
+ transition: transform var(--dur-short) var(--ease-out);
205
+ }
206
+ .nav__links a:not(.btn):hover { color: var(--color-ink); }
207
+ .nav__links > li:not(:last-child) > a:hover::after { transform: scaleX(1); }
208
+ .nav__links a:not(.btn):focus-visible {
209
+ outline: 2px solid var(--color-focus);
210
+ outline-offset: 4px;
211
+ border-radius: 2px;
212
+ }
213
+
214
+ /* ─── Buttons ─────────────────────────────────────────────────────── */
215
+ .btn {
216
+ --btn-bg: var(--color-accent);
217
+ --btn-fg: oklch(14% 0.020 60);
218
+ display: inline-flex;
219
+ align-items: center;
220
+ gap: 0.6ch;
221
+ min-height: 48px;
222
+ padding: 0 var(--space-lg);
223
+ border-radius: var(--radius-pill);
224
+ background: var(--btn-bg);
225
+ color: var(--btn-fg);
226
+ font-family: var(--font-body);
227
+ font-size: var(--text-sm);
228
+ font-weight: 600;
229
+ letter-spacing: -0.005em;
230
+ line-height: 1;
231
+ position: relative;
232
+ isolation: isolate;
233
+ overflow: hidden;
234
+ box-shadow: 0 8px 30px -10px var(--color-glow);
235
+ transition:
236
+ transform var(--dur-micro) var(--ease-out),
237
+ box-shadow var(--dur-short) var(--ease-out),
238
+ background-color var(--dur-short) var(--ease-out);
239
+ white-space: nowrap;
240
+ }
241
+ .btn::before {
242
+ content: "";
243
+ position: absolute;
244
+ inset: 0;
245
+ z-index: -1;
246
+ background: linear-gradient(105deg,
247
+ transparent 0%, transparent 35%,
248
+ oklch(98% 0.04 80 / 0.55) 50%,
249
+ transparent 65%, transparent 100%);
250
+ transform: translateX(-100%);
251
+ transition: transform 700ms var(--ease-out);
252
+ }
253
+ .btn:hover {
254
+ transform: translateY(-2px);
255
+ box-shadow: 0 14px 40px -8px var(--color-glow);
256
+ background: var(--color-accent-2);
257
+ }
258
+ .btn:hover::before { transform: translateX(100%); }
259
+ .btn:active { transform: translateY(0); transition-duration: 60ms; }
260
+ .btn:focus-visible {
261
+ outline: 2px solid var(--color-focus);
262
+ outline-offset: 3px;
263
+ }
264
+ .btn:disabled, .btn[aria-disabled="true"] {
265
+ opacity: 0.55;
266
+ cursor: not-allowed;
267
+ pointer-events: none;
268
+ }
269
+
270
+ .btn--ghost {
271
+ --btn-bg: transparent;
272
+ --btn-fg: var(--color-ink);
273
+ border: var(--rule-hair) solid var(--color-rule-2);
274
+ box-shadow: none;
275
+ }
276
+ .btn--ghost:hover {
277
+ background: var(--color-paper-2);
278
+ border-color: var(--color-accent);
279
+ box-shadow: 0 0 0 1px var(--color-accent);
280
+ }
281
+ .btn--ghost::before { display: none; }
282
+ .btn--sm {
283
+ min-height: 40px;
284
+ padding: 0 var(--space-md);
285
+ font-size: var(--text-xs);
286
+ letter-spacing: 0.02em;
287
+ }
288
+ .btn .arrow { transition: transform var(--dur-short) var(--ease-out); }
289
+ .btn:hover .arrow { transform: translateX(3px); }
290
+
291
+ /* ─── Hero — Marquee (huge title left, animated aperture right) ──── */
292
+ .hero {
293
+ position: relative;
294
+ padding-block: clamp(var(--space-2xl), 8vw, var(--space-4xl)) var(--space-3xl);
295
+ display: grid;
296
+ grid-template-columns: minmax(0, 1.45fr) minmax(0, 1fr);
297
+ gap: var(--space-2xl);
298
+ align-items: center;
299
+ }
300
+ .hero__copy {
301
+ display: grid;
302
+ gap: var(--space-lg);
303
+ position: relative;
304
+ z-index: 2;
305
+ }
306
+ .hero__eyebrow {
307
+ font-family: var(--font-outlier);
308
+ font-size: var(--text-xs);
309
+ font-weight: 500;
310
+ letter-spacing: 0.16em;
311
+ text-transform: uppercase;
312
+ color: var(--color-accent);
313
+ display: inline-flex;
314
+ align-items: center;
315
+ gap: 0.6ch;
316
+ line-height: 1;
317
+ }
318
+ .hero__eyebrow::before {
319
+ content: "";
320
+ width: 24px;
321
+ height: 1px;
322
+ background: currentColor;
323
+ }
324
+ .hero__title {
325
+ font-family: var(--font-display);
326
+ font-size: clamp(2.25rem, 4.5vw + 0.75rem, 5rem);
327
+ font-weight: 500;
328
+ letter-spacing: -0.04em;
329
+ line-height: 1.0;
330
+ text-wrap: balance;
331
+ color: var(--color-ink);
332
+ max-width: 14ch;
333
+ }
334
+ .hero__title em {
335
+ font-style: italic;
336
+ font-weight: 300;
337
+ color: var(--color-accent-2);
338
+ background: linear-gradient(180deg,
339
+ var(--color-accent-2) 0%,
340
+ var(--color-accent) 60%,
341
+ var(--color-accent-deep) 100%);
342
+ -webkit-background-clip: text;
343
+ background-clip: text;
344
+ -webkit-text-fill-color: transparent;
345
+ }
346
+ .hero__lede {
347
+ max-width: 46ch;
348
+ font-size: var(--text-md);
349
+ color: var(--color-ink-2);
350
+ text-wrap: pretty;
351
+ line-height: 1.55;
352
+ }
353
+ .hero__cta {
354
+ display: flex;
355
+ align-items: center;
356
+ gap: var(--space-sm);
357
+ margin-top: var(--space-xs);
358
+ flex-wrap: wrap;
359
+ }
360
+ .hero__meta {
361
+ font-family: var(--font-outlier);
362
+ font-size: var(--text-xs);
363
+ letter-spacing: 0.06em;
364
+ color: var(--color-muted);
365
+ display: flex;
366
+ align-items: center;
367
+ gap: var(--space-md);
368
+ flex-wrap: wrap;
369
+ padding-block-start: var(--space-md);
370
+ border-block-start: var(--rule-hair) solid var(--color-rule);
371
+ margin-top: var(--space-sm);
372
+ }
373
+ .hero__meta span { display: inline-flex; align-items: center; gap: 0.5ch; }
374
+ .hero__meta .dot {
375
+ width: 6px; height: 6px;
376
+ border-radius: 50%;
377
+ background: var(--color-accent);
378
+ display: inline-block;
379
+ }
380
+
381
+ /* ─── Hero illustration — animated aperture + halo ────────────────── */
382
+ .hero__aside {
383
+ position: relative;
384
+ aspect-ratio: 1;
385
+ max-width: 30rem;
386
+ justify-self: end;
387
+ width: 100%;
388
+ display: grid;
389
+ place-items: center;
390
+ }
391
+ .aperture {
392
+ position: relative;
393
+ width: 78%;
394
+ aspect-ratio: 1;
395
+ border-radius: 50%;
396
+ background:
397
+ radial-gradient(circle at 50% 50%,
398
+ oklch(20% 0.025 285) 0%,
399
+ oklch(12% 0.022 285) 60%,
400
+ oklch(10% 0.018 285) 100%);
401
+ box-shadow:
402
+ inset 0 0 0 1px var(--color-rule-2),
403
+ inset 0 0 80px 4px oklch(8% 0.018 285),
404
+ 0 0 0 1px var(--color-rule),
405
+ 0 30px 80px -20px oklch(0% 0 0 / 0.7);
406
+ overflow: hidden;
407
+ isolation: isolate;
408
+ }
409
+ .aperture__halo {
410
+ position: absolute;
411
+ inset: -22%;
412
+ border-radius: 50%;
413
+ background: conic-gradient(
414
+ from 0deg,
415
+ transparent 0deg,
416
+ var(--color-glow-soft) 30deg,
417
+ transparent 90deg,
418
+ var(--color-glow) 200deg,
419
+ transparent 260deg,
420
+ var(--color-glow-soft) 320deg,
421
+ transparent 360deg);
422
+ filter: blur(28px);
423
+ z-index: -1;
424
+ animation: spin var(--dur-aperture) linear infinite;
425
+ }
426
+ @keyframes spin {
427
+ to { transform: rotate(360deg); }
428
+ }
429
+ .aperture__pupil {
430
+ position: absolute;
431
+ inset: 28%;
432
+ border-radius: 50%;
433
+ background:
434
+ radial-gradient(circle at 35% 35%, oklch(98% 0.04 80 / 0.55) 0%, transparent 28%),
435
+ radial-gradient(circle at 50% 50%,
436
+ var(--color-accent) 0%,
437
+ var(--color-accent-deep) 50%,
438
+ oklch(35% 0.16 40) 90%);
439
+ box-shadow:
440
+ inset 0 0 30px 4px oklch(45% 0.18 40 / 0.7),
441
+ 0 0 60px 6px var(--color-glow);
442
+ animation: aperture-breath var(--dur-aperture) var(--ease-in-out) infinite;
443
+ }
444
+ @keyframes aperture-breath {
445
+ 0%, 100% { inset: 28%; }
446
+ 50% { inset: 36%; }
447
+ }
448
+ .aperture__blade {
449
+ position: absolute;
450
+ inset: 0;
451
+ transform-origin: 50% 50%;
452
+ }
453
+ .aperture__blade::before {
454
+ content: "";
455
+ position: absolute;
456
+ inset: 8% 8% 50% 8%;
457
+ background:
458
+ linear-gradient(180deg,
459
+ oklch(28% 0.030 285) 0%,
460
+ oklch(18% 0.026 285) 60%,
461
+ oklch(13% 0.022 285) 100%);
462
+ clip-path: polygon(0 0, 100% 0, 60% 100%, 40% 100%);
463
+ border-radius: 50% 50% 0 0;
464
+ box-shadow:
465
+ inset 1px 1px 0 oklch(40% 0.030 285 / 0.6),
466
+ inset 0 -10px 20px oklch(8% 0.020 285 / 0.5);
467
+ }
468
+ .aperture__blade:nth-child(1) { transform: rotate(0deg); }
469
+ .aperture__blade:nth-child(2) { transform: rotate(60deg); }
470
+ .aperture__blade:nth-child(3) { transform: rotate(120deg); }
471
+ .aperture__blade:nth-child(4) { transform: rotate(180deg); }
472
+ .aperture__blade:nth-child(5) { transform: rotate(240deg); }
473
+ .aperture__blade:nth-child(6) { transform: rotate(300deg); }
474
+
475
+ .aperture__ticks {
476
+ position: absolute;
477
+ inset: -4%;
478
+ border-radius: 50%;
479
+ border: 1px dashed oklch(38% 0.020 285 / 0.6);
480
+ animation: spin-slow calc(var(--dur-aperture) * 4) linear infinite reverse;
481
+ }
482
+ @keyframes spin-slow {
483
+ to { transform: rotate(360deg); }
484
+ }
485
+ .aperture__label {
486
+ position: absolute;
487
+ font-family: var(--font-outlier);
488
+ font-size: 11px;
489
+ letter-spacing: 0.18em;
490
+ color: var(--color-muted);
491
+ text-transform: uppercase;
492
+ z-index: 2;
493
+ }
494
+ .aperture__label--top { top: -8px; left: 50%; transform: translateX(-50%); }
495
+ .aperture__label--right { right: -8px; top: 50%; transform: translateY(-50%) rotate(90deg); transform-origin: 100% 50%; }
496
+ .aperture__label--btm { bottom: -8px; left: 50%; transform: translateX(-50%); }
497
+ .aperture__label--left { left: -8px; top: 50%; transform: translateY(-50%) rotate(-90deg); transform-origin: 0 50%; }
498
+
499
+ /* ─── Hero before/after slider ────────────────────────────────────── */
500
+ .hero__aside:has(.compare) {
501
+ aspect-ratio: auto;
502
+ max-width: 26rem;
503
+ display: grid;
504
+ gap: var(--space-md);
505
+ align-content: center;
506
+ }
507
+
508
+ .compare {
509
+ position: relative;
510
+ width: 100%;
511
+ aspect-ratio: 4 / 5;
512
+ border-radius: var(--radius-lg);
513
+ border: var(--rule-hair) solid var(--color-rule-2);
514
+ overflow: hidden;
515
+ isolation: isolate;
516
+ user-select: none;
517
+ -webkit-user-select: none;
518
+ touch-action: none;
519
+ cursor: ew-resize;
520
+ background: var(--color-paper-2);
521
+ box-shadow:
522
+ 0 30px 70px -28px oklch(0% 0 0 / 0.7),
523
+ 0 0 0 1px oklch(50% 0.18 70 / 0.18),
524
+ 0 0 60px -8px var(--color-glow-soft);
525
+ }
526
+ .compare.is-dragging { cursor: ew-resize; }
527
+ .compare.is-dragging .compare__handle {
528
+ transform: translate(-50%, -50%) scale(1.12);
529
+ box-shadow:
530
+ 0 0 0 4px oklch(8% 0.018 285 / 0.55),
531
+ 0 8px 22px oklch(0% 0 0 / 0.55),
532
+ 0 0 32px var(--color-glow);
533
+ }
534
+ .compare__pane {
535
+ position: absolute;
536
+ inset: 0;
537
+ margin: 0;
538
+ pointer-events: none;
539
+ }
540
+ .compare__pane .portrait {
541
+ position: absolute;
542
+ inset: 0;
543
+ width: 100%;
544
+ height: 100%;
545
+ }
546
+ .compare__pane--after { z-index: 1; }
547
+ .compare__pane--before {
548
+ z-index: 2;
549
+ clip-path: inset(0 calc(100% - var(--pos)) 0 0);
550
+ }
551
+
552
+ .compare__label {
553
+ position: absolute;
554
+ top: var(--space-md);
555
+ z-index: 4;
556
+ font-family: var(--font-outlier);
557
+ font-size: var(--text-xs);
558
+ font-weight: 500;
559
+ letter-spacing: 0.16em;
560
+ text-transform: uppercase;
561
+ color: oklch(98% 0.005 80);
562
+ line-height: 1;
563
+ padding: var(--space-2xs) var(--space-sm);
564
+ border-radius: var(--radius-pill);
565
+ background: oklch(8% 0.018 285 / 0.55);
566
+ -webkit-backdrop-filter: blur(8px);
567
+ backdrop-filter: blur(8px);
568
+ border: 1px solid oklch(98% 0.005 80 / 0.12);
569
+ pointer-events: none;
570
+ }
571
+ .compare__label--before { left: var(--space-md); }
572
+ .compare__label--after { right: var(--space-md); color: oklch(14% 0.020 60); background: var(--color-accent); border-color: transparent; box-shadow: 0 0 14px var(--color-glow-soft); }
573
+
574
+ .compare__divider {
575
+ position: absolute;
576
+ top: 0;
577
+ bottom: 0;
578
+ left: var(--pos);
579
+ width: 2px;
580
+ margin-left: -1px;
581
+ z-index: 3;
582
+ background: linear-gradient(180deg,
583
+ oklch(98% 0.005 80 / 0.0) 0%,
584
+ oklch(98% 0.005 80 / 0.95) 50%,
585
+ oklch(98% 0.005 80 / 0.0) 100%);
586
+ box-shadow:
587
+ 0 0 12px var(--color-glow),
588
+ 0 0 24px var(--color-glow-soft);
589
+ pointer-events: none;
590
+ }
591
+ .compare__handle {
592
+ position: absolute;
593
+ top: 50%;
594
+ left: 50%;
595
+ transform: translate(-50%, -50%);
596
+ width: 44px;
597
+ height: 44px;
598
+ border-radius: 50%;
599
+ background: oklch(98% 0.010 80);
600
+ color: oklch(15% 0.020 60);
601
+ display: grid;
602
+ place-items: center;
603
+ box-shadow:
604
+ 0 0 0 4px oklch(8% 0.018 285 / 0.45),
605
+ 0 8px 22px oklch(0% 0 0 / 0.45),
606
+ 0 0 24px var(--color-glow);
607
+ transition: transform var(--dur-short) var(--ease-out);
608
+ pointer-events: none;
609
+ }
610
+ .compare:hover .compare__handle {
611
+ transform: translate(-50%, -50%) scale(1.07);
612
+ }
613
+ /* (handle scale on focus / drag is handled below) */
614
+
615
+ /* Hidden range input — Tab-reachable for keyboard a11y. Pointer
616
+ events go to the .compare canvas, where the JS drag loop runs. */
617
+ .compare__input {
618
+ position: absolute;
619
+ inset: 50% auto auto 0;
620
+ width: 100%;
621
+ height: 1px;
622
+ margin: 0;
623
+ appearance: none;
624
+ -webkit-appearance: none;
625
+ background: transparent;
626
+ pointer-events: none;
627
+ opacity: 0;
628
+ z-index: 0;
629
+ }
630
+ .compare__input:focus-visible ~ .compare__divider {
631
+ outline: 2px solid var(--color-focus);
632
+ outline-offset: 2px;
633
+ border-radius: 2px;
634
+ }
635
+ .compare__input:focus-visible ~ .compare__divider .compare__handle {
636
+ transform: translate(-50%, -50%) scale(1.1);
637
+ }
638
+
639
+ .compare__caption {
640
+ display: flex;
641
+ align-items: center;
642
+ justify-content: space-between;
643
+ gap: var(--space-sm);
644
+ font-family: var(--font-outlier);
645
+ font-size: var(--text-xs);
646
+ letter-spacing: 0.10em;
647
+ color: var(--color-muted);
648
+ line-height: 1;
649
+ text-transform: uppercase;
650
+ flex-wrap: wrap;
651
+ }
652
+ .compare__caption-meta {
653
+ color: var(--color-muted-2);
654
+ text-transform: none;
655
+ letter-spacing: 0.04em;
656
+ font-style: italic;
657
+ font-family: var(--font-display);
658
+ font-size: var(--text-xs);
659
+ }
660
+
661
+ /* Before/after portrait variants — selfie register vs. studio register */
662
+ .portrait--before {
663
+ --bg-1: oklch(34% 0.020 240);
664
+ --bg-2: oklch(20% 0.012 250);
665
+ --skin: oklch(70% 0.04 50);
666
+ --shirt: oklch(38% 0.06 250);
667
+ --rim: oklch(80% 0.02 240);
668
+ filter: saturate(0.55) contrast(0.92) brightness(0.94);
669
+ }
670
+ .portrait--after {
671
+ --bg-1: oklch(50% 0.14 35);
672
+ --bg-2: oklch(16% 0.06 30);
673
+ --skin: oklch(74% 0.08 45);
674
+ --shirt: oklch(20% 0.012 60);
675
+ --rim: oklch(88% 0.14 70);
676
+ }
677
+ /* Lock the head still inside the comparator — the breathing loop
678
+ would otherwise drift the two halves out of register at the seam. */
679
+ .compare .portrait::before {
680
+ animation: none;
681
+ transform: translateX(-50%);
682
+ }
683
+
684
+ /* ─── Marquee strip ───────────────────────────────────────────────── */
685
+ .marquee {
686
+ position: relative;
687
+ border-block: var(--rule-hair) solid var(--color-rule);
688
+ padding-block: var(--space-lg);
689
+ background:
690
+ linear-gradient(180deg,
691
+ transparent 0%,
692
+ oklch(8% 0.018 285 / 0.6) 100%);
693
+ overflow: hidden;
694
+ }
695
+ .marquee::before, .marquee::after {
696
+ content: "";
697
+ position: absolute;
698
+ top: 0; bottom: 0;
699
+ width: clamp(80px, 12vw, 200px);
700
+ z-index: 2;
701
+ pointer-events: none;
702
+ }
703
+ .marquee::before {
704
+ left: 0;
705
+ background: linear-gradient(90deg, var(--color-paper) 10%, transparent 100%);
706
+ }
707
+ .marquee::after {
708
+ right: 0;
709
+ background: linear-gradient(270deg, var(--color-paper) 10%, transparent 100%);
710
+ }
711
+ .marquee__track {
712
+ display: flex;
713
+ align-items: center;
714
+ gap: var(--space-2xl);
715
+ width: max-content;
716
+ animation: marquee var(--dur-marquee) linear infinite;
717
+ }
718
+ .marquee__track:hover { animation-play-state: paused; }
719
+ @keyframes marquee {
720
+ to { transform: translateX(-50%); }
721
+ }
722
+ .marquee__word {
723
+ font-family: var(--font-display);
724
+ font-style: italic;
725
+ font-weight: 400;
726
+ font-size: var(--text-marquee);
727
+ letter-spacing: -0.04em;
728
+ line-height: 1;
729
+ color: var(--color-ink);
730
+ white-space: nowrap;
731
+ display: inline-flex;
732
+ align-items: center;
733
+ gap: var(--space-md);
734
+ }
735
+ .marquee__word::after {
736
+ content: "";
737
+ width: 12px; height: 12px;
738
+ border-radius: 50%;
739
+ background: var(--color-accent);
740
+ box-shadow: 0 0 18px 2px var(--color-glow);
741
+ display: inline-block;
742
+ }
743
+ .marquee__word--mute { color: var(--color-muted-2); }
744
+ .marquee__word--mute::after {
745
+ background: transparent;
746
+ border: 1px solid var(--color-rule-2);
747
+ box-shadow: none;
748
+ }
749
+
750
+ /* ─── Output gallery (six breathing portraits, wide grid) ─────────── */
751
+ .gallery {
752
+ display: grid;
753
+ grid-template-columns: 1.1fr repeat(3, 1fr);
754
+ gap: var(--space-md);
755
+ }
756
+ .gallery__intro {
757
+ grid-column: 1 / -1;
758
+ display: grid;
759
+ grid-template-columns: 1fr auto;
760
+ align-items: end;
761
+ gap: var(--space-lg);
762
+ margin-bottom: var(--space-md);
763
+ border-block-end: var(--rule-hair) solid var(--color-rule);
764
+ padding-block-end: var(--space-lg);
765
+ }
766
+ .section__head {
767
+ font-family: var(--font-outlier);
768
+ font-size: var(--text-xs);
769
+ letter-spacing: 0.16em;
770
+ color: var(--color-accent);
771
+ text-transform: uppercase;
772
+ line-height: 1;
773
+ display: inline-flex;
774
+ align-items: center;
775
+ gap: 0.6ch;
776
+ margin-bottom: var(--space-md);
777
+ }
778
+ .section__head::before {
779
+ content: "";
780
+ width: 24px; height: 1px;
781
+ background: currentColor;
782
+ }
783
+ .section__title {
784
+ font-family: var(--font-display);
785
+ font-size: clamp(2rem, 4vw + 0.5rem, 3.5rem);
786
+ font-weight: 400;
787
+ letter-spacing: -0.035em;
788
+ line-height: 1.02;
789
+ text-wrap: balance;
790
+ max-width: 22ch;
791
+ color: var(--color-ink);
792
+ }
793
+ .section__title em {
794
+ font-style: italic;
795
+ font-weight: 300;
796
+ color: var(--color-accent-2);
797
+ }
798
+ .section__sub {
799
+ font-size: var(--text-sm);
800
+ color: var(--color-muted);
801
+ max-width: 36ch;
802
+ text-align: end;
803
+ line-height: 1.5;
804
+ }
805
+
806
+ .tile {
807
+ position: relative;
808
+ border: var(--rule-hair) solid var(--color-rule);
809
+ border-radius: var(--radius-lg);
810
+ background: var(--color-paper-2);
811
+ overflow: hidden;
812
+ isolation: isolate;
813
+ transition:
814
+ transform var(--dur-short) var(--ease-out),
815
+ border-color var(--dur-short) var(--ease-out);
816
+ }
817
+ .tile:hover {
818
+ transform: translateY(-4px);
819
+ border-color: var(--color-rule-2);
820
+ }
821
+ .tile--feature {
822
+ grid-column: span 1;
823
+ grid-row: span 2;
824
+ display: grid;
825
+ grid-template-rows: auto 1fr auto;
826
+ padding: var(--space-lg);
827
+ gap: var(--space-md);
828
+ background:
829
+ radial-gradient(120% 80% at 0% 100%, oklch(20% 0.03 50 / 0.5), transparent 70%),
830
+ var(--color-paper-2);
831
+ }
832
+ .tile--feature h2 {
833
+ font-family: var(--font-display);
834
+ font-size: var(--text-2xl);
835
+ font-weight: 400;
836
+ letter-spacing: -0.025em;
837
+ line-height: 1.05;
838
+ color: var(--color-ink);
839
+ text-wrap: balance;
840
+ }
841
+ .tile--feature h2 em {
842
+ font-style: italic;
843
+ color: var(--color-accent-2);
844
+ }
845
+ .tile--feature p {
846
+ color: var(--color-ink-2);
847
+ font-size: var(--text-sm);
848
+ line-height: 1.55;
849
+ max-width: 32ch;
850
+ }
851
+ .tile--feature .meta {
852
+ font-family: var(--font-outlier);
853
+ font-size: var(--text-xs);
854
+ letter-spacing: 0.10em;
855
+ color: var(--color-muted);
856
+ text-transform: uppercase;
857
+ line-height: 1.4;
858
+ }
859
+
860
+ .tile--portrait {
861
+ aspect-ratio: 1;
862
+ cursor: default;
863
+ }
864
+ .tile--portrait .portrait { width: 100%; height: 100%; }
865
+ .tile--portrait .portrait__caption {
866
+ position: absolute;
867
+ inset: auto var(--space-sm) var(--space-sm) var(--space-sm);
868
+ display: flex;
869
+ align-items: center;
870
+ justify-content: space-between;
871
+ font-family: var(--font-outlier);
872
+ font-weight: 500;
873
+ font-size: var(--text-xs);
874
+ text-transform: uppercase;
875
+ letter-spacing: 0.12em;
876
+ color: oklch(96% 0.005 80);
877
+ line-height: 1;
878
+ pointer-events: none;
879
+ z-index: 2;
880
+ text-shadow: 0 1px 12px oklch(0% 0 0 / 0.7);
881
+ }
882
+ .tile--portrait .portrait__caption .num { opacity: 0.65; }
883
+ .tile--portrait::after {
884
+ /* gradient floor for caption legibility */
885
+ content: "";
886
+ position: absolute;
887
+ inset: 50% 0 0 0;
888
+ background: linear-gradient(180deg, transparent 0%, oklch(0% 0 0 / 0.55) 100%);
889
+ pointer-events: none;
890
+ z-index: 1;
891
+ }
892
+
893
+ /* ─── Pure-CSS portrait silhouette + breathing animation ──────────── */
894
+ .portrait {
895
+ --bg-1: oklch(40% 0.10 65);
896
+ --bg-2: oklch(15% 0.04 280);
897
+ --skin: oklch(72% 0.06 55);
898
+ --shirt: oklch(22% 0.012 60);
899
+ --rim: oklch(82% 0.14 70);
900
+
901
+ position: relative;
902
+ background:
903
+ radial-gradient(120% 80% at 30% 0%, oklch(95% 0.02 80 / 0.20), transparent 60%),
904
+ linear-gradient(160deg, var(--bg-1), var(--bg-2));
905
+ }
906
+ .portrait::before {
907
+ /* head */
908
+ content: "";
909
+ position: absolute;
910
+ left: 50%;
911
+ top: 26%;
912
+ width: 38%;
913
+ aspect-ratio: 4 / 5;
914
+ background:
915
+ radial-gradient(60% 50% at 35% 35%, oklch(96% 0.04 70 / 0.45), transparent 70%),
916
+ var(--skin);
917
+ border-radius: 50% 50% 46% 46% / 55% 55% 45% 45%;
918
+ transform: translateX(-50%);
919
+ box-shadow:
920
+ inset -6px -10px 22px oklch(15% 0.05 30 / 0.45),
921
+ inset 4px 4px 12px oklch(96% 0.05 80 / 0.18),
922
+ -2px 0 0 var(--rim);
923
+ transform-origin: 50% 100%;
924
+ animation: portrait-breath var(--dur-breath) var(--ease-in-out) infinite;
925
+ }
926
+ .portrait::after {
927
+ /* shoulders */
928
+ content: "";
929
+ position: absolute;
930
+ left: 50%;
931
+ bottom: -8%;
932
+ width: 130%;
933
+ aspect-ratio: 3 / 1;
934
+ background: var(--shirt);
935
+ border-radius: 50% 50% 0 0 / 60% 60% 0 0;
936
+ transform: translateX(-50%);
937
+ box-shadow:
938
+ inset 0 8px 0 oklch(40% 0.012 60 / 0.5),
939
+ inset 0 -2px 14px oklch(10% 0 0 / 0.6);
940
+ }
941
+ @keyframes portrait-breath {
942
+ 0%, 100% { transform: translateX(-50%) translateY(0) scale(1); }
943
+ 50% { transform: translateX(-50%) translateY(-2px) scale(1.012); }
944
+ }
945
+
946
+ .portrait--boardroom {
947
+ --bg-1: oklch(34% 0.08 250);
948
+ --bg-2: oklch(14% 0.040 240);
949
+ --skin: oklch(72% 0.06 50);
950
+ --shirt: oklch(94% 0.005 80);
951
+ --rim: oklch(78% 0.15 70);
952
+ }
953
+ .portrait--editorial {
954
+ --bg-1: oklch(50% 0.12 35);
955
+ --bg-2: oklch(18% 0.06 30);
956
+ --skin: oklch(70% 0.07 45);
957
+ --shirt: oklch(20% 0.010 60);
958
+ --rim: oklch(86% 0.10 60);
959
+ }
960
+ .portrait--daylight {
961
+ --bg-1: oklch(58% 0.10 80);
962
+ --bg-2: oklch(28% 0.06 70);
963
+ --skin: oklch(76% 0.05 60);
964
+ --shirt: oklch(46% 0.10 240);
965
+ --rim: oklch(96% 0.020 80);
966
+ }
967
+ .portrait--onset {
968
+ --bg-1: oklch(28% 0.02 60);
969
+ --bg-2: oklch(10% 0.005 60);
970
+ --skin: oklch(64% 0.020 60);
971
+ --shirt: oklch(18% 0.005 60);
972
+ --rim: oklch(84% 0.03 60);
973
+ filter: saturate(0.4) contrast(1.05);
974
+ }
975
+ .portrait--noir {
976
+ --bg-1: oklch(20% 0.018 285);
977
+ --bg-2: oklch(8% 0.008 285);
978
+ --skin: oklch(64% 0.04 50);
979
+ --shirt: oklch(94% 0.005 80);
980
+ --rim: oklch(78% 0.16 70);
981
+ }
982
+
983
+ /* ─── Stat counter ────────────────────────────────────────────────── */
984
+ .stat {
985
+ padding-block: var(--space-3xl);
986
+ display: grid;
987
+ grid-template-columns: 1.4fr 1fr;
988
+ gap: var(--space-2xl);
989
+ align-items: end;
990
+ border-block-end: var(--rule-hair) solid var(--color-rule);
991
+ }
992
+ .stat__figure {
993
+ font-family: var(--font-display);
994
+ font-size: var(--text-figure);
995
+ font-weight: 300;
996
+ font-style: italic;
997
+ letter-spacing: -0.05em;
998
+ line-height: 0.9;
999
+ font-variant-numeric: tabular-nums;
1000
+ color: var(--color-ink);
1001
+ display: inline-flex;
1002
+ align-items: baseline;
1003
+ gap: 0.1ch;
1004
+ }
1005
+ .stat__figure .num {
1006
+ background: linear-gradient(180deg,
1007
+ var(--color-ink) 0%,
1008
+ var(--color-accent-2) 70%,
1009
+ var(--color-accent) 100%);
1010
+ -webkit-background-clip: text;
1011
+ background-clip: text;
1012
+ -webkit-text-fill-color: transparent;
1013
+ /* Italic + tight tracking + background-clip:text crops the rightmost
1014
+ glyph in some browsers; reserve ~10% em of trailing room. */
1015
+ padding-inline-end: 0.1em;
1016
+ letter-spacing: -0.04em;
1017
+ }
1018
+ .stat__figure .plus {
1019
+ font-style: normal;
1020
+ font-weight: 200;
1021
+ color: var(--color-accent);
1022
+ font-size: 0.5em;
1023
+ align-self: start;
1024
+ margin-top: 0.2em;
1025
+ }
1026
+ .stat__copy {
1027
+ display: grid;
1028
+ gap: var(--space-md);
1029
+ }
1030
+ .stat__copy h2 {
1031
+ font-family: var(--font-display);
1032
+ font-size: var(--text-xl);
1033
+ font-weight: 400;
1034
+ font-style: italic;
1035
+ letter-spacing: -0.02em;
1036
+ line-height: 1.2;
1037
+ color: var(--color-ink);
1038
+ max-width: 28ch;
1039
+ }
1040
+ .stat__copy p {
1041
+ font-size: var(--text-sm);
1042
+ color: var(--color-muted);
1043
+ max-width: 32ch;
1044
+ line-height: 1.55;
1045
+ }
1046
+
1047
+ /* ─── Process — three large stages, workbench-style ───────────────── */
1048
+ .process {
1049
+ display: grid;
1050
+ gap: var(--space-2xl);
1051
+ }
1052
+ .process__head {
1053
+ display: grid;
1054
+ grid-template-columns: 1fr auto;
1055
+ gap: var(--space-lg);
1056
+ align-items: end;
1057
+ border-block-end: var(--rule-hair) solid var(--color-rule);
1058
+ padding-block-end: var(--space-md);
1059
+ }
1060
+ .process__head h2 {
1061
+ font-family: var(--font-display);
1062
+ font-size: clamp(2rem, 4vw + 0.5rem, 3.5rem);
1063
+ font-weight: 400;
1064
+ letter-spacing: -0.035em;
1065
+ line-height: 1.0;
1066
+ text-wrap: balance;
1067
+ max-width: 18ch;
1068
+ }
1069
+ .process__head h2 em {
1070
+ font-style: italic;
1071
+ font-weight: 300;
1072
+ color: var(--color-accent-2);
1073
+ }
1074
+ .process__head p {
1075
+ font-size: var(--text-sm);
1076
+ color: var(--color-muted);
1077
+ max-width: 32ch;
1078
+ text-align: end;
1079
+ }
1080
+ .steps {
1081
+ display: grid;
1082
+ grid-template-columns: repeat(3, 1fr);
1083
+ gap: var(--space-lg);
1084
+ list-style: none;
1085
+ }
1086
+ .step {
1087
+ position: relative;
1088
+ display: grid;
1089
+ gap: var(--space-md);
1090
+ padding: var(--space-xl);
1091
+ border: var(--rule-hair) solid var(--color-rule);
1092
+ border-radius: var(--radius-lg);
1093
+ background:
1094
+ linear-gradient(180deg,
1095
+ oklch(14% 0.020 285 / 0.6) 0%,
1096
+ oklch(11% 0.018 285 / 0.6) 100%);
1097
+ transition:
1098
+ border-color var(--dur-short) var(--ease-out),
1099
+ transform var(--dur-short) var(--ease-out);
1100
+ }
1101
+ .step:hover {
1102
+ transform: translateY(-3px);
1103
+ border-color: var(--color-rule-2);
1104
+ }
1105
+ .step__num {
1106
+ font-family: var(--font-display);
1107
+ font-size: var(--text-3xl);
1108
+ font-style: italic;
1109
+ font-weight: 300;
1110
+ color: var(--color-accent-2);
1111
+ line-height: 1;
1112
+ letter-spacing: -0.05em;
1113
+ font-variant-numeric: tabular-nums;
1114
+ display: flex;
1115
+ align-items: baseline;
1116
+ gap: 0.4ch;
1117
+ }
1118
+ .step__num::after {
1119
+ content: "";
1120
+ display: inline-block;
1121
+ flex: 1;
1122
+ height: 1px;
1123
+ background: linear-gradient(90deg, var(--color-rule-2) 0%, transparent 100%);
1124
+ align-self: center;
1125
+ margin-left: var(--space-sm);
1126
+ }
1127
+ .step__stage {
1128
+ font-family: var(--font-outlier);
1129
+ font-size: var(--text-xs);
1130
+ letter-spacing: 0.14em;
1131
+ color: var(--color-accent);
1132
+ text-transform: uppercase;
1133
+ line-height: 1;
1134
+ }
1135
+ .step h3 {
1136
+ font-family: var(--font-display);
1137
+ font-size: var(--text-lg);
1138
+ font-weight: 500;
1139
+ letter-spacing: -0.02em;
1140
+ line-height: 1.15;
1141
+ color: var(--color-ink);
1142
+ }
1143
+ .step p {
1144
+ color: var(--color-ink-2);
1145
+ font-size: var(--text-sm);
1146
+ line-height: 1.55;
1147
+ }
1148
+
1149
+ /* ─── Pricing ─────────────────────────────────────────────────────── */
1150
+ .pricing {
1151
+ display: grid;
1152
+ gap: var(--space-2xl);
1153
+ }
1154
+ .pricing__head {
1155
+ display: grid;
1156
+ gap: var(--space-md);
1157
+ max-width: 38ch;
1158
+ }
1159
+ .pricing__head h2 {
1160
+ font-family: var(--font-display);
1161
+ font-size: clamp(2rem, 4vw + 0.5rem, 3.5rem);
1162
+ font-weight: 400;
1163
+ letter-spacing: -0.035em;
1164
+ line-height: 1.0;
1165
+ }
1166
+ .pricing__head h2 em {
1167
+ font-style: italic;
1168
+ font-weight: 300;
1169
+ color: var(--color-accent-2);
1170
+ }
1171
+ .pricing__head p {
1172
+ color: var(--color-ink-2);
1173
+ font-size: var(--text-md);
1174
+ max-width: 40ch;
1175
+ }
1176
+
1177
+ .tiers {
1178
+ display: grid;
1179
+ grid-template-columns: repeat(3, 1fr);
1180
+ gap: var(--space-md);
1181
+ }
1182
+ .tier {
1183
+ position: relative;
1184
+ border: var(--rule-hair) solid var(--color-rule);
1185
+ border-radius: var(--radius-lg);
1186
+ padding: var(--space-xl);
1187
+ background:
1188
+ linear-gradient(180deg,
1189
+ oklch(14% 0.020 285 / 0.5) 0%,
1190
+ oklch(10% 0.018 285 / 0.6) 100%);
1191
+ display: grid;
1192
+ gap: var(--space-md);
1193
+ align-content: start;
1194
+ transition:
1195
+ transform var(--dur-short) var(--ease-out),
1196
+ border-color var(--dur-short) var(--ease-out),
1197
+ box-shadow var(--dur-short) var(--ease-out);
1198
+ }
1199
+ .tier:hover {
1200
+ transform: translateY(-4px);
1201
+ border-color: var(--color-rule-2);
1202
+ }
1203
+ .tier__name {
1204
+ font-family: var(--font-outlier);
1205
+ font-weight: 500;
1206
+ font-size: var(--text-xs);
1207
+ text-transform: uppercase;
1208
+ letter-spacing: 0.16em;
1209
+ color: var(--color-accent);
1210
+ line-height: 1;
1211
+ }
1212
+ .tier__price {
1213
+ font-family: var(--font-display);
1214
+ font-size: var(--text-3xl);
1215
+ font-style: italic;
1216
+ font-weight: 400;
1217
+ letter-spacing: -0.04em;
1218
+ line-height: 1;
1219
+ color: var(--color-ink);
1220
+ font-variant-numeric: tabular-nums;
1221
+ display: inline-flex;
1222
+ align-items: baseline;
1223
+ gap: 0.4ch;
1224
+ }
1225
+ .tier__price .unit {
1226
+ font-family: var(--font-outlier);
1227
+ font-style: normal;
1228
+ font-size: var(--text-sm);
1229
+ font-weight: 400;
1230
+ color: var(--color-muted);
1231
+ letter-spacing: 0;
1232
+ line-height: 1;
1233
+ }
1234
+ .tier__sub {
1235
+ color: var(--color-ink-2);
1236
+ font-size: var(--text-sm);
1237
+ line-height: 1.5;
1238
+ max-width: 28ch;
1239
+ }
1240
+ .tier__list {
1241
+ list-style: none;
1242
+ display: grid;
1243
+ gap: var(--space-sm);
1244
+ margin-block: var(--space-md);
1245
+ padding-block-start: var(--space-md);
1246
+ border-block-start: var(--rule-hair) solid var(--color-rule);
1247
+ }
1248
+ .tier__list li {
1249
+ display: grid;
1250
+ grid-template-columns: 16px 1fr;
1251
+ gap: var(--space-sm);
1252
+ align-items: start;
1253
+ font-size: var(--text-sm);
1254
+ color: var(--color-ink-2);
1255
+ line-height: 1.45;
1256
+ }
1257
+ .tier__list li::before {
1258
+ content: "";
1259
+ width: 12px;
1260
+ height: 12px;
1261
+ border-radius: 50%;
1262
+ background: var(--color-accent);
1263
+ box-shadow: 0 0 10px 1px var(--color-glow-soft);
1264
+ margin-top: 4px;
1265
+ }
1266
+ .tier .btn { justify-content: center; width: 100%; }
1267
+
1268
+ .tier--rec {
1269
+ border-color: var(--color-accent);
1270
+ background:
1271
+ radial-gradient(80% 60% at 50% 0%, oklch(50% 0.18 50 / 0.18), transparent 70%),
1272
+ linear-gradient(180deg,
1273
+ oklch(16% 0.030 60 / 0.6) 0%,
1274
+ oklch(11% 0.020 285 / 0.6) 100%);
1275
+ box-shadow: 0 0 0 1px var(--color-accent), 0 24px 60px -24px var(--color-glow);
1276
+ }
1277
+ .tier--rec::after {
1278
+ content: "Recommended";
1279
+ position: absolute;
1280
+ top: -12px;
1281
+ left: var(--space-xl);
1282
+ font-family: var(--font-outlier);
1283
+ font-weight: 500;
1284
+ font-size: var(--text-xs);
1285
+ letter-spacing: 0.14em;
1286
+ text-transform: uppercase;
1287
+ color: oklch(14% 0.020 60);
1288
+ background: var(--color-accent);
1289
+ padding: var(--space-2xs) var(--space-sm);
1290
+ border-radius: var(--radius-pill);
1291
+ line-height: 1;
1292
+ box-shadow: 0 0 16px 2px var(--color-glow);
1293
+ }
1294
+ .tier--rec.rec-pulse {
1295
+ animation: rec-pulse 2400ms var(--ease-in-out) 1 forwards;
1296
+ }
1297
+ @keyframes rec-pulse {
1298
+ 0% { box-shadow: 0 0 0 1px var(--color-accent), 0 24px 60px -24px var(--color-glow), 0 0 0 0 oklch(80% 0.18 75 / 0.0); }
1299
+ 35% { box-shadow: 0 0 0 1px var(--color-accent), 0 24px 60px -24px var(--color-glow), 0 0 0 10px oklch(80% 0.18 75 / 0.18); }
1300
+ 100% { box-shadow: 0 0 0 1px var(--color-accent), 0 24px 60px -24px var(--color-glow), 0 0 0 0 oklch(80% 0.18 75 / 0.0); }
1301
+ }
1302
+
1303
+ /* ─── FAQ ─────────────────────────────────────────────────────────── */
1304
+ .faq {
1305
+ display: grid;
1306
+ grid-template-columns: 1fr 2fr;
1307
+ gap: var(--space-2xl);
1308
+ align-items: start;
1309
+ }
1310
+ .faq__head h2 {
1311
+ font-family: var(--font-display);
1312
+ font-size: clamp(2rem, 4vw + 0.5rem, 3.25rem);
1313
+ font-weight: 400;
1314
+ letter-spacing: -0.035em;
1315
+ line-height: 1.0;
1316
+ max-width: 14ch;
1317
+ }
1318
+ .faq__head h2 em {
1319
+ font-style: italic;
1320
+ font-weight: 300;
1321
+ color: var(--color-accent-2);
1322
+ }
1323
+ .faq__head p {
1324
+ margin-top: var(--space-md);
1325
+ color: var(--color-ink-2);
1326
+ font-size: var(--text-sm);
1327
+ max-width: 32ch;
1328
+ }
1329
+ .faq__list { display: grid; }
1330
+ .faq__item {
1331
+ border-block-end: var(--rule-hair) solid var(--color-rule);
1332
+ }
1333
+ .faq__item:first-child { border-block-start: var(--rule-hair) solid var(--color-rule); }
1334
+ .faq__summary {
1335
+ list-style: none;
1336
+ display: grid;
1337
+ grid-template-columns: 1fr auto;
1338
+ align-items: center;
1339
+ gap: var(--space-md);
1340
+ padding-block: var(--space-md);
1341
+ cursor: pointer;
1342
+ min-height: 48px;
1343
+ font-family: var(--font-display);
1344
+ font-size: var(--text-md);
1345
+ font-weight: 500;
1346
+ letter-spacing: -0.02em;
1347
+ color: var(--color-ink);
1348
+ line-height: 1.3;
1349
+ transition: color var(--dur-short) var(--ease-out);
1350
+ }
1351
+ .faq__summary::-webkit-details-marker { display: none; }
1352
+ .faq__summary:hover { color: var(--color-accent); }
1353
+ .faq__summary:focus-visible {
1354
+ outline: 2px solid var(--color-focus);
1355
+ outline-offset: 4px;
1356
+ border-radius: 4px;
1357
+ }
1358
+ .faq__sign {
1359
+ position: relative;
1360
+ width: 20px; height: 20px;
1361
+ flex: 0 0 20px;
1362
+ color: var(--color-accent);
1363
+ }
1364
+ .faq__sign::before, .faq__sign::after {
1365
+ content: "";
1366
+ position: absolute;
1367
+ inset: 0;
1368
+ margin: auto;
1369
+ background: currentColor;
1370
+ }
1371
+ .faq__sign::before { width: 14px; height: 1.5px; }
1372
+ .faq__sign::after { width: 1.5px; height: 14px; transition: transform var(--dur-short) var(--ease-out); }
1373
+ details[open] .faq__sign::after { transform: rotate(90deg); }
1374
+
1375
+ .faq__answer-wrap {
1376
+ display: grid;
1377
+ grid-template-rows: 0fr;
1378
+ transition: grid-template-rows var(--dur-long) var(--ease-in-out);
1379
+ }
1380
+ details[open] .faq__answer-wrap { grid-template-rows: 1fr; }
1381
+ .faq__answer-inner { overflow: hidden; }
1382
+ .faq__answer {
1383
+ padding-block: 0 var(--space-md);
1384
+ color: var(--color-ink-2);
1385
+ font-size: var(--text-sm);
1386
+ max-width: 60ch;
1387
+ line-height: 1.6;
1388
+ }
1389
+
1390
+ /* ─── Final CTA — full-bleed dramatic ─────────────────────────────── */
1391
+ .final {
1392
+ position: relative;
1393
+ margin-block: var(--space-3xl) var(--space-2xl);
1394
+ border-radius: var(--radius-xl);
1395
+ border: var(--rule-hair) solid var(--color-rule-2);
1396
+ padding: clamp(var(--space-2xl), 8vw, var(--space-4xl)) clamp(var(--space-lg), 6vw, var(--space-3xl));
1397
+ background:
1398
+ radial-gradient(60% 80% at 80% 50%, oklch(30% 0.14 50 / 0.4) 0%, transparent 70%),
1399
+ radial-gradient(60% 100% at 0% 100%, oklch(20% 0.10 60 / 0.5) 0%, transparent 70%),
1400
+ linear-gradient(180deg, oklch(15% 0.030 60 / 0.6) 0%, oklch(11% 0.020 285 / 0.6) 100%);
1401
+ display: grid;
1402
+ grid-template-columns: 1fr auto;
1403
+ gap: var(--space-xl);
1404
+ align-items: center;
1405
+ overflow: hidden;
1406
+ isolation: isolate;
1407
+ }
1408
+ .final::before {
1409
+ /* slow drifting halo */
1410
+ content: "";
1411
+ position: absolute;
1412
+ inset: -30%;
1413
+ background: radial-gradient(35% 25% at 30% 40%, var(--color-glow) 0%, transparent 70%);
1414
+ z-index: -1;
1415
+ animation: drift 22s var(--ease-in-out) infinite alternate;
1416
+ }
1417
+ @keyframes drift {
1418
+ to { transform: translate(40%, 20%); }
1419
+ }
1420
+ .final h2 {
1421
+ font-family: var(--font-display);
1422
+ font-size: clamp(2rem, 5vw + 0.5rem, 4rem);
1423
+ font-weight: 400;
1424
+ letter-spacing: -0.04em;
1425
+ line-height: 0.98;
1426
+ max-width: 22ch;
1427
+ text-wrap: balance;
1428
+ }
1429
+ .final h2 em {
1430
+ font-style: italic;
1431
+ font-weight: 300;
1432
+ color: var(--color-accent-2);
1433
+ }
1434
+ .final__sub {
1435
+ margin-top: var(--space-md);
1436
+ color: var(--color-ink-2);
1437
+ font-size: var(--text-md);
1438
+ max-width: 38ch;
1439
+ line-height: 1.55;
1440
+ }
1441
+ .final__cta {
1442
+ display: flex;
1443
+ align-items: center;
1444
+ gap: var(--space-sm);
1445
+ flex-wrap: wrap;
1446
+ }
1447
+
1448
+ /* ─── Footer ──────────────────────────────────────────────────────── */
1449
+ .foot {
1450
+ padding-block: var(--space-2xl);
1451
+ display: grid;
1452
+ gap: var(--space-md);
1453
+ border-block-start: var(--rule-hair) solid var(--color-rule);
1454
+ }
1455
+ .foot__row {
1456
+ display: flex;
1457
+ align-items: center;
1458
+ justify-content: space-between;
1459
+ gap: var(--space-md);
1460
+ flex-wrap: wrap;
1461
+ }
1462
+ .foot__tagline {
1463
+ color: var(--color-muted);
1464
+ font-size: var(--text-sm);
1465
+ max-width: 38ch;
1466
+ line-height: 1.5;
1467
+ }
1468
+ .foot__links {
1469
+ display: flex;
1470
+ align-items: center;
1471
+ gap: var(--space-md);
1472
+ list-style: none;
1473
+ flex-wrap: wrap;
1474
+ }
1475
+ .foot__links a {
1476
+ color: var(--color-ink-2);
1477
+ font-size: var(--text-sm);
1478
+ line-height: 1;
1479
+ transition: color var(--dur-short) var(--ease-out);
1480
+ }
1481
+ .foot__links a:hover { color: var(--color-accent); }
1482
+ .foot__links a:focus-visible {
1483
+ outline: 2px solid var(--color-focus);
1484
+ outline-offset: 4px;
1485
+ border-radius: 2px;
1486
+ }
1487
+ .foot__credit {
1488
+ font-family: var(--font-outlier);
1489
+ font-size: var(--text-xs);
1490
+ color: var(--color-muted);
1491
+ letter-spacing: 0.04em;
1492
+ border-block-start: var(--rule-hair) solid var(--color-rule);
1493
+ padding-block-start: var(--space-md);
1494
+ display: flex;
1495
+ align-items: center;
1496
+ justify-content: space-between;
1497
+ gap: var(--space-md);
1498
+ flex-wrap: wrap;
1499
+ line-height: 1.5;
1500
+ }
1501
+
1502
+ /* ─── Reveal (one-shot, IntersectionObserver-driven) ──────────────── */
1503
+ .reveal {
1504
+ opacity: 0;
1505
+ transform: translateY(14px);
1506
+ transition:
1507
+ opacity var(--dur-long) var(--ease-out),
1508
+ transform var(--dur-long) var(--ease-out);
1509
+ transition-delay: calc(var(--i, 0) * 80ms);
1510
+ }
1511
+ .reveal.is-in {
1512
+ opacity: 1;
1513
+ transform: none;
1514
+ }
1515
+
1516
+ /* ─── Responsive ──────────────────────────────────────────────────── */
1517
+ @media (max-width: 64rem) {
1518
+ .hero {
1519
+ grid-template-columns: 1fr;
1520
+ gap: var(--space-xl);
1521
+ }
1522
+ .hero__aside {
1523
+ justify-self: center;
1524
+ max-width: 22rem;
1525
+ }
1526
+ .gallery {
1527
+ grid-template-columns: repeat(3, 1fr);
1528
+ }
1529
+ .gallery .tile--feature {
1530
+ grid-column: 1 / -1;
1531
+ grid-row: auto;
1532
+ }
1533
+ .stat {
1534
+ grid-template-columns: 1fr;
1535
+ gap: var(--space-lg);
1536
+ }
1537
+ .steps { grid-template-columns: 1fr; gap: var(--space-md); }
1538
+ .tiers { grid-template-columns: 1fr; }
1539
+ .faq { grid-template-columns: 1fr; }
1540
+ .final { grid-template-columns: 1fr; }
1541
+ .gallery__intro,
1542
+ .process__head { grid-template-columns: 1fr; }
1543
+ .gallery__intro .section__sub,
1544
+ .process__head p { text-align: start; }
1545
+ }
1546
+ @media (max-width: 40rem) {
1547
+ .section { padding-block: var(--space-2xl); }
1548
+ .nav__links { gap: var(--space-md); }
1549
+ .nav__links li:nth-child(1),
1550
+ .nav__links li:nth-child(2) { display: none; }
1551
+ .hero__cta { flex-direction: column; align-items: stretch; width: 100%; }
1552
+ .hero__cta .btn { justify-content: center; }
1553
+ .gallery { grid-template-columns: repeat(2, 1fr); }
1554
+ .gallery .tile--feature { grid-column: 1 / -1; }
1555
+ .marquee__track { gap: var(--space-xl); }
1556
+ }
1557
+
1558
+ @media (pointer: coarse) {
1559
+ .btn { min-height: 52px; }
1560
+ .nav__links a { padding: var(--space-sm) var(--space-2xs); }
1561
+ }
1562
+
1563
+ /* ─── Reduced motion ──────────────────────────────────────────────── */
1564
+ @media (prefers-reduced-motion: reduce) {
1565
+ *, *::before, *::after {
1566
+ animation-duration: 1ms !important;
1567
+ animation-iteration-count: 1 !important;
1568
+ transition-duration: 1ms !important;
1569
+ scroll-behavior: auto !important;
1570
+ }
1571
+ .reveal { opacity: 1; transform: none; }
1572
+ .marquee__track { animation: none; transform: none; }
1573
+ .aperture__halo, .aperture__pupil, .aperture__ticks,
1574
+ .portrait::before, .wordmark::before, .final::before { animation: none !important; }
1575
+ .btn:hover, .tier:hover, .step:hover, .tile:hover { transform: none; }
1576
+ }
1577
+
1578
+ /* ─── Visually-hidden (a11y) ──────────────────────────────────────── */
1579
+ .sr-only {
1580
+ position: absolute;
1581
+ width: 1px; height: 1px;
1582
+ padding: 0; margin: -1px; overflow: hidden;
1583
+ clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
1584
+ }