wizz-method 1.0.3 → 1.2.0

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 (630) hide show
  1. package/package.json +4 -2
  2. package/skills-registry.yaml +352 -0
  3. package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +7 -0
  4. package/src/core-skills/wizz-editorial-review-prose/SKILL.md +20 -45
  5. package/src/core-skills/wizz-party-mode/customize.toml +894 -0
  6. package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
  7. package/src/core-skills/wizz-review-adversarial-general/SKILL.md +23 -12
  8. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +48 -23
  9. package/src/skills-lib/ab-test-setup/SKILL.md +266 -0
  10. package/src/skills-lib/ab-test-setup/evals/evals.json +105 -0
  11. package/src/skills-lib/ab-test-setup/references/sample-size-guide.md +263 -0
  12. package/src/skills-lib/ab-test-setup/references/test-templates.md +277 -0
  13. package/src/skills-lib/ad-creative/SKILL.md +362 -0
  14. package/src/skills-lib/ad-creative/evals/evals.json +90 -0
  15. package/src/skills-lib/ad-creative/references/generative-tools.md +637 -0
  16. package/src/skills-lib/ad-creative/references/platform-specs.md +213 -0
  17. package/src/skills-lib/adversarial-reviewer/SKILL.md +122 -0
  18. package/src/skills-lib/agent-browser/SKILL.md +139 -0
  19. package/src/skills-lib/ai-seo/SKILL.md +398 -0
  20. package/src/skills-lib/ai-seo/evals/evals.json +90 -0
  21. package/src/skills-lib/ai-seo/references/content-patterns.md +285 -0
  22. package/src/skills-lib/ai-seo/references/platform-ranking-factors.md +152 -0
  23. package/src/skills-lib/analytics-tracking/SKILL.md +309 -0
  24. package/src/skills-lib/analytics-tracking/evals/evals.json +90 -0
  25. package/src/skills-lib/analytics-tracking/references/event-library.md +260 -0
  26. package/src/skills-lib/analytics-tracking/references/ga4-implementation.md +300 -0
  27. package/src/skills-lib/analytics-tracking/references/gtm-implementation.md +390 -0
  28. package/src/skills-lib/auth-and-secrets/SKILL.md +82 -0
  29. package/src/skills-lib/caching-and-queues/SKILL.md +58 -0
  30. package/src/skills-lib/cerebro/SKILL.md +368 -0
  31. package/src/skills-lib/churn-prevention/SKILL.md +424 -0
  32. package/src/skills-lib/churn-prevention/evals/evals.json +93 -0
  33. package/src/skills-lib/churn-prevention/references/cancel-flow-patterns.md +316 -0
  34. package/src/skills-lib/churn-prevention/references/dunning-playbook.md +408 -0
  35. package/src/skills-lib/cloud-and-infra/SKILL.md +36 -0
  36. package/src/skills-lib/cold-email/SKILL.md +158 -0
  37. package/src/skills-lib/cold-email/evals/evals.json +94 -0
  38. package/src/skills-lib/cold-email/references/benchmarks.md +83 -0
  39. package/src/skills-lib/cold-email/references/follow-up-sequences.md +81 -0
  40. package/src/skills-lib/cold-email/references/frameworks.md +90 -0
  41. package/src/skills-lib/cold-email/references/personalization.md +79 -0
  42. package/src/skills-lib/cold-email/references/subject-lines.md +53 -0
  43. package/src/skills-lib/competitor-alternatives/SKILL.md +256 -0
  44. package/src/skills-lib/competitor-alternatives/evals/evals.json +93 -0
  45. package/src/skills-lib/competitor-alternatives/references/content-architecture.md +271 -0
  46. package/src/skills-lib/competitor-alternatives/references/templates.md +223 -0
  47. package/src/skills-lib/content-strategy/SKILL.md +359 -0
  48. package/src/skills-lib/content-strategy/evals/evals.json +90 -0
  49. package/src/skills-lib/copy-editing/SKILL.md +447 -0
  50. package/src/skills-lib/copy-editing/evals/evals.json +89 -0
  51. package/src/skills-lib/copy-editing/references/plain-english-alternatives.md +394 -0
  52. package/src/skills-lib/copywriting/SKILL.md +252 -0
  53. package/src/skills-lib/copywriting/evals/evals.json +111 -0
  54. package/src/skills-lib/copywriting/references/copy-frameworks.md +344 -0
  55. package/src/skills-lib/copywriting/references/natural-transitions.md +272 -0
  56. package/src/skills-lib/database-and-deps/SKILL.md +80 -0
  57. package/src/skills-lib/database-scaling/SKILL.md +44 -0
  58. package/src/skills-lib/decision-maker/SKILL.md +534 -0
  59. package/src/skills-lib/desktop-security/SKILL.md +43 -0
  60. package/src/skills-lib/email-sequence/SKILL.md +309 -0
  61. package/src/skills-lib/email-sequence/evals/evals.json +93 -0
  62. package/src/skills-lib/email-sequence/references/copy-guidelines.md +113 -0
  63. package/src/skills-lib/email-sequence/references/email-types.md +515 -0
  64. package/src/skills-lib/email-sequence/references/sequence-templates.md +168 -0
  65. package/src/skills-lib/enhance-prompt/README.md +34 -0
  66. package/src/skills-lib/enhance-prompt/SKILL.md +204 -0
  67. package/src/skills-lib/enhance-prompt/references/KEYWORDS.md +114 -0
  68. package/src/skills-lib/find-skills/SKILL.md +181 -0
  69. package/src/skills-lib/form-cro/SKILL.md +429 -0
  70. package/src/skills-lib/form-cro/evals/evals.json +90 -0
  71. package/src/skills-lib/free-tool-strategy/SKILL.md +178 -0
  72. package/src/skills-lib/free-tool-strategy/evals/evals.json +90 -0
  73. package/src/skills-lib/free-tool-strategy/references/tool-types.md +217 -0
  74. package/src/skills-lib/graphify/.graphify_version +1 -0
  75. package/src/skills-lib/graphify/SKILL.md +1217 -0
  76. package/src/skills-lib/huashu-design/LICENSE +21 -0
  77. package/src/skills-lib/huashu-design/README.en.md +309 -0
  78. package/src/skills-lib/huashu-design/README.md +348 -0
  79. package/src/skills-lib/huashu-design/SKILL.md +631 -0
  80. package/src/skills-lib/huashu-design/assets/android_frame.jsx +175 -0
  81. package/src/skills-lib/huashu-design/assets/animations.jsx +348 -0
  82. package/src/skills-lib/huashu-design/assets/banner.svg +198 -0
  83. package/src/skills-lib/huashu-design/assets/bgm-ad.mp3 +0 -0
  84. package/src/skills-lib/huashu-design/assets/bgm-educational-alt.mp3 +0 -0
  85. package/src/skills-lib/huashu-design/assets/bgm-educational.mp3 +0 -0
  86. package/src/skills-lib/huashu-design/assets/bgm-tech.mp3 +0 -0
  87. package/src/skills-lib/huashu-design/assets/bgm-tutorial-alt.mp3 +0 -0
  88. package/src/skills-lib/huashu-design/assets/bgm-tutorial.mp3 +0 -0
  89. package/src/skills-lib/huashu-design/assets/browser_window.jsx +166 -0
  90. package/src/skills-lib/huashu-design/assets/deck_index.html +348 -0
  91. package/src/skills-lib/huashu-design/assets/deck_stage.js +420 -0
  92. package/src/skills-lib/huashu-design/assets/design_canvas.jsx +205 -0
  93. package/src/skills-lib/huashu-design/assets/director-notes-samples/launch-film-30s-sample.md +1713 -0
  94. package/src/skills-lib/huashu-design/assets/ios_frame.jsx +192 -0
  95. package/src/skills-lib/huashu-design/assets/macos_window.jsx +96 -0
  96. package/src/skills-lib/huashu-design/assets/narration_stage.jsx +476 -0
  97. package/src/skills-lib/huashu-design/assets/personal-asset-index.example.json +71 -0
  98. package/src/skills-lib/huashu-design/assets/sfx/container/card-flip.mp3 +0 -0
  99. package/src/skills-lib/huashu-design/assets/sfx/container/card-snap.mp3 +0 -0
  100. package/src/skills-lib/huashu-design/assets/sfx/container/modal-open.mp3 +0 -0
  101. package/src/skills-lib/huashu-design/assets/sfx/container/stack-collapse.mp3 +0 -0
  102. package/src/skills-lib/huashu-design/assets/sfx/feedback/achievement.mp3 +0 -0
  103. package/src/skills-lib/huashu-design/assets/sfx/feedback/error-tone.mp3 +0 -0
  104. package/src/skills-lib/huashu-design/assets/sfx/feedback/notification-pop.mp3 +0 -0
  105. package/src/skills-lib/huashu-design/assets/sfx/feedback/success-chime.mp3 +0 -0
  106. package/src/skills-lib/huashu-design/assets/sfx/impact/brand-stamp.mp3 +0 -0
  107. package/src/skills-lib/huashu-design/assets/sfx/impact/drop-thud.mp3 +0 -0
  108. package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal-v2.mp3 +0 -0
  109. package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal.mp3 +0 -0
  110. package/src/skills-lib/huashu-design/assets/sfx/keyboard/delete-key.mp3 +0 -0
  111. package/src/skills-lib/huashu-design/assets/sfx/keyboard/enter.mp3 +0 -0
  112. package/src/skills-lib/huashu-design/assets/sfx/keyboard/space-tap.mp3 +0 -0
  113. package/src/skills-lib/huashu-design/assets/sfx/keyboard/type-fast.mp3 +0 -0
  114. package/src/skills-lib/huashu-design/assets/sfx/keyboard/type.mp3 +0 -0
  115. package/src/skills-lib/huashu-design/assets/sfx/magic/ai-process.mp3 +0 -0
  116. package/src/skills-lib/huashu-design/assets/sfx/magic/sparkle.mp3 +0 -0
  117. package/src/skills-lib/huashu-design/assets/sfx/magic/transform.mp3 +0 -0
  118. package/src/skills-lib/huashu-design/assets/sfx/progress/complete-done.mp3 +0 -0
  119. package/src/skills-lib/huashu-design/assets/sfx/progress/generate-start.mp3 +0 -0
  120. package/src/skills-lib/huashu-design/assets/sfx/progress/loading-tick.mp3 +0 -0
  121. package/src/skills-lib/huashu-design/assets/sfx/terminal/command-execute.mp3 +0 -0
  122. package/src/skills-lib/huashu-design/assets/sfx/terminal/cursor-blink.mp3 +0 -0
  123. package/src/skills-lib/huashu-design/assets/sfx/terminal/output-appear.mp3 +0 -0
  124. package/src/skills-lib/huashu-design/assets/sfx/transition/dissolve.mp3 +0 -0
  125. package/src/skills-lib/huashu-design/assets/sfx/transition/slide-in.mp3 +0 -0
  126. package/src/skills-lib/huashu-design/assets/sfx/transition/swipe-horizontal.mp3 +0 -0
  127. package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh-fast.mp3 +0 -0
  128. package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh.mp3 +0 -0
  129. package/src/skills-lib/huashu-design/assets/sfx/ui/click-soft.mp3 +0 -0
  130. package/src/skills-lib/huashu-design/assets/sfx/ui/click.mp3 +0 -0
  131. package/src/skills-lib/huashu-design/assets/sfx/ui/focus.mp3 +0 -0
  132. package/src/skills-lib/huashu-design/assets/sfx/ui/hover-subtle.mp3 +0 -0
  133. package/src/skills-lib/huashu-design/assets/sfx/ui/tap-finger.mp3 +0 -0
  134. package/src/skills-lib/huashu-design/assets/sfx/ui/toggle-on.mp3 +0 -0
  135. package/src/skills-lib/huashu-design/assets/showcases/INDEX.md +115 -0
  136. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.html +235 -0
  137. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.png +0 -0
  138. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.html +229 -0
  139. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.png +0 -0
  140. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.html +288 -0
  141. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.png +0 -0
  142. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.html +503 -0
  143. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.png +0 -0
  144. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.html +600 -0
  145. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.png +0 -0
  146. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.html +670 -0
  147. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.png +0 -0
  148. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.html +382 -0
  149. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.png +0 -0
  150. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.html +536 -0
  151. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.png +0 -0
  152. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.html +497 -0
  153. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.png +0 -0
  154. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.html +385 -0
  155. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.png +0 -0
  156. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.html +422 -0
  157. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.png +0 -0
  158. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.html +499 -0
  159. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.png +0 -0
  160. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.html +562 -0
  161. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.png +0 -0
  162. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.html +548 -0
  163. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.png +0 -0
  164. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.html +696 -0
  165. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.png +0 -0
  166. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.html +372 -0
  167. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.png +0 -0
  168. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.html +460 -0
  169. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.png +0 -0
  170. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.html +494 -0
  171. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.png +0 -0
  172. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.html +367 -0
  173. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.png +0 -0
  174. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.html +368 -0
  175. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.png +0 -0
  176. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.html +459 -0
  177. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.png +0 -0
  178. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.html +493 -0
  179. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.png +0 -0
  180. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.html +556 -0
  181. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.png +0 -0
  182. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.html +604 -0
  183. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.png +0 -0
  184. package/src/skills-lib/huashu-design/demos/c1-ios-prototype-en.html +1145 -0
  185. package/src/skills-lib/huashu-design/demos/c1-ios-prototype.html +1142 -0
  186. package/src/skills-lib/huashu-design/demos/c2-slides-pptx-en.html +1055 -0
  187. package/src/skills-lib/huashu-design/demos/c2-slides-pptx.html +1055 -0
  188. package/src/skills-lib/huashu-design/demos/c3-motion-design-en.html +1134 -0
  189. package/src/skills-lib/huashu-design/demos/c3-motion-design.html +1134 -0
  190. package/src/skills-lib/huashu-design/demos/c4-tweaks-en.html +989 -0
  191. package/src/skills-lib/huashu-design/demos/c4-tweaks.html +989 -0
  192. package/src/skills-lib/huashu-design/demos/c5-infographic-en.html +816 -0
  193. package/src/skills-lib/huashu-design/demos/c5-infographic.html +813 -0
  194. package/src/skills-lib/huashu-design/demos/c6-expert-review-en.html +885 -0
  195. package/src/skills-lib/huashu-design/demos/c6-expert-review.html +894 -0
  196. package/src/skills-lib/huashu-design/demos/hero-animation-v10-en.html +1498 -0
  197. package/src/skills-lib/huashu-design/demos/md-html-narration/md-html-demo.html +615 -0
  198. package/src/skills-lib/huashu-design/demos/md-html-narration/script.md +69 -0
  199. package/src/skills-lib/huashu-design/demos/voiceover-demo/script.md +17 -0
  200. package/src/skills-lib/huashu-design/demos/voiceover-demo//344/273/200/344/271/210/346/230/257token.html +201 -0
  201. package/src/skills-lib/huashu-design/demos/w1-brand-protocol-en.html +684 -0
  202. package/src/skills-lib/huashu-design/demos/w1-brand-protocol.html +696 -0
  203. package/src/skills-lib/huashu-design/demos/w2-junior-designer-en.html +983 -0
  204. package/src/skills-lib/huashu-design/demos/w2-junior-designer.html +994 -0
  205. package/src/skills-lib/huashu-design/demos/w3-fallback-advisor-en.html +647 -0
  206. package/src/skills-lib/huashu-design/demos/w3-fallback-advisor.html +704 -0
  207. package/src/skills-lib/huashu-design/package-lock.json +846 -0
  208. package/src/skills-lib/huashu-design/package.json +8 -0
  209. package/src/skills-lib/huashu-design/references/animation-best-practices.md +506 -0
  210. package/src/skills-lib/huashu-design/references/animation-pitfalls.md +402 -0
  211. package/src/skills-lib/huashu-design/references/animations.md +249 -0
  212. package/src/skills-lib/huashu-design/references/apple-gallery-showcase.md +338 -0
  213. package/src/skills-lib/huashu-design/references/audio-design-rules.md +260 -0
  214. package/src/skills-lib/huashu-design/references/brand-asset-protocol.md +250 -0
  215. package/src/skills-lib/huashu-design/references/cinematic-patterns.md +264 -0
  216. package/src/skills-lib/huashu-design/references/content-guidelines.md +260 -0
  217. package/src/skills-lib/huashu-design/references/critique-guide.md +199 -0
  218. package/src/skills-lib/huashu-design/references/design-context.md +213 -0
  219. package/src/skills-lib/huashu-design/references/design-styles.md +370 -0
  220. package/src/skills-lib/huashu-design/references/editable-pptx.md +334 -0
  221. package/src/skills-lib/huashu-design/references/hero-animation-case-study.md +250 -0
  222. package/src/skills-lib/huashu-design/references/launch-film-director-notes.md +293 -0
  223. package/src/skills-lib/huashu-design/references/multi-perspective-parallel-case-study.md +267 -0
  224. package/src/skills-lib/huashu-design/references/react-setup.md +276 -0
  225. package/src/skills-lib/huashu-design/references/scene-templates.md +262 -0
  226. package/src/skills-lib/huashu-design/references/sfx-library.md +226 -0
  227. package/src/skills-lib/huashu-design/references/slide-decks.md +745 -0
  228. package/src/skills-lib/huashu-design/references/tweaks-system.md +313 -0
  229. package/src/skills-lib/huashu-design/references/verification.md +183 -0
  230. package/src/skills-lib/huashu-design/references/video-export.md +232 -0
  231. package/src/skills-lib/huashu-design/references/voiceover-pipeline.md +397 -0
  232. package/src/skills-lib/huashu-design/references/workflow.md +216 -0
  233. package/src/skills-lib/huashu-design/scripts/add-music.sh +108 -0
  234. package/src/skills-lib/huashu-design/scripts/convert-formats.sh +83 -0
  235. package/src/skills-lib/huashu-design/scripts/export_deck_pdf.mjs +98 -0
  236. package/src/skills-lib/huashu-design/scripts/export_deck_pptx.mjs +107 -0
  237. package/src/skills-lib/huashu-design/scripts/export_deck_stage_pdf.mjs +130 -0
  238. package/src/skills-lib/huashu-design/scripts/fetch_images.py +94 -0
  239. package/src/skills-lib/huashu-design/scripts/gen_deck_thumbs.mjs +55 -0
  240. package/src/skills-lib/huashu-design/scripts/html2pptx.js +1178 -0
  241. package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +127 -0
  242. package/src/skills-lib/huashu-design/scripts/narrate-pipeline.mjs +315 -0
  243. package/src/skills-lib/huashu-design/scripts/render-narration.sh +151 -0
  244. package/src/skills-lib/huashu-design/scripts/render-video-seek.js +238 -0
  245. package/src/skills-lib/huashu-design/scripts/render-video.js +289 -0
  246. package/src/skills-lib/huashu-design/scripts/tts-doubao.mjs +184 -0
  247. package/src/skills-lib/huashu-design/scripts/verify.py +154 -0
  248. package/src/skills-lib/huashu-design/test-prompts.json +38 -0
  249. package/src/skills-lib/humanizer/LICENSE +21 -0
  250. package/src/skills-lib/humanizer/README.md +145 -0
  251. package/src/skills-lib/humanizer/SKILL.md +474 -0
  252. package/src/skills-lib/humanizer/WARP.md +53 -0
  253. package/src/skills-lib/impeccable/SKILL.md +186 -0
  254. package/src/skills-lib/implementation-planner/SKILL.md +630 -0
  255. package/src/skills-lib/infrastructure/SKILL.md +34 -0
  256. package/src/skills-lib/inicio-de-projeto/SKILL.md +313 -0
  257. package/src/skills-lib/launch-strategy/SKILL.md +353 -0
  258. package/src/skills-lib/launch-strategy/evals/evals.json +91 -0
  259. package/src/skills-lib/marketing-ideas/SKILL.md +167 -0
  260. package/src/skills-lib/marketing-ideas/evals/evals.json +90 -0
  261. package/src/skills-lib/marketing-ideas/references/ideas-by-category.md +366 -0
  262. package/src/skills-lib/marketing-psychology/SKILL.md +455 -0
  263. package/src/skills-lib/marketing-psychology/evals/evals.json +88 -0
  264. package/src/skills-lib/motion-3d-director/SKILL.md +485 -0
  265. package/src/skills-lib/onboarding-cro/SKILL.md +220 -0
  266. package/src/skills-lib/onboarding-cro/evals/evals.json +92 -0
  267. package/src/skills-lib/onboarding-cro/references/experiments.md +258 -0
  268. package/src/skills-lib/page-cro/SKILL.md +182 -0
  269. package/src/skills-lib/page-cro/evals/evals.json +111 -0
  270. package/src/skills-lib/page-cro/references/experiments.md +248 -0
  271. package/src/skills-lib/paid-ads/SKILL.md +315 -0
  272. package/src/skills-lib/paid-ads/evals/evals.json +90 -0
  273. package/src/skills-lib/paid-ads/references/ad-copy-templates.md +207 -0
  274. package/src/skills-lib/paid-ads/references/audience-targeting.md +243 -0
  275. package/src/skills-lib/paid-ads/references/platform-setup-checklists.md +277 -0
  276. package/src/skills-lib/paywall-upgrade-cro/SKILL.md +227 -0
  277. package/src/skills-lib/paywall-upgrade-cro/evals/evals.json +93 -0
  278. package/src/skills-lib/paywall-upgrade-cro/references/experiments.md +164 -0
  279. package/src/skills-lib/popup-cro/SKILL.md +453 -0
  280. package/src/skills-lib/popup-cro/evals/evals.json +94 -0
  281. package/src/skills-lib/premium-landing-ui-researcher/SKILL.md +2090 -0
  282. package/src/skills-lib/pricing-strategy/SKILL.md +231 -0
  283. package/src/skills-lib/pricing-strategy/evals/evals.json +90 -0
  284. package/src/skills-lib/pricing-strategy/references/research-methods.md +152 -0
  285. package/src/skills-lib/pricing-strategy/references/tier-structure.md +232 -0
  286. package/src/skills-lib/product-marketing-context/SKILL.md +241 -0
  287. package/src/skills-lib/product-marketing-context/evals/evals.json +85 -0
  288. package/src/skills-lib/programmatic-seo/SKILL.md +238 -0
  289. package/src/skills-lib/programmatic-seo/evals/evals.json +94 -0
  290. package/src/skills-lib/programmatic-seo/references/playbooks.md +308 -0
  291. package/src/skills-lib/react-components/README.md +36 -0
  292. package/src/skills-lib/react-components/SKILL.md +51 -0
  293. package/src/skills-lib/react-components/examples/gold-standard-card.tsx +80 -0
  294. package/src/skills-lib/react-components/package-lock.json +231 -0
  295. package/src/skills-lib/react-components/package.json +16 -0
  296. package/src/skills-lib/react-components/resources/architecture-checklist.md +15 -0
  297. package/src/skills-lib/react-components/resources/component-template.tsx +37 -0
  298. package/src/skills-lib/react-components/resources/stitch-api-reference.md +14 -0
  299. package/src/skills-lib/react-components/resources/style-guide.json +27 -0
  300. package/src/skills-lib/react-components/scripts/fetch-stitch.sh +30 -0
  301. package/src/skills-lib/react-components/scripts/validate.js +70 -0
  302. package/src/skills-lib/references/premium-agency-rules.md +79 -0
  303. package/src/skills-lib/referral-program/SKILL.md +255 -0
  304. package/src/skills-lib/referral-program/evals/evals.json +89 -0
  305. package/src/skills-lib/referral-program/references/affiliate-programs.md +164 -0
  306. package/src/skills-lib/referral-program/references/program-examples.md +143 -0
  307. package/src/skills-lib/remotion-best-practices/SKILL.md +61 -0
  308. package/src/skills-lib/remotion-best-practices/rules/3d.md +86 -0
  309. package/src/skills-lib/remotion-best-practices/rules/animations.md +27 -0
  310. package/src/skills-lib/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  311. package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  312. package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  313. package/src/skills-lib/remotion-best-practices/rules/assets.md +78 -0
  314. package/src/skills-lib/remotion-best-practices/rules/audio-visualization.md +198 -0
  315. package/src/skills-lib/remotion-best-practices/rules/audio.md +169 -0
  316. package/src/skills-lib/remotion-best-practices/rules/calculate-metadata.md +134 -0
  317. package/src/skills-lib/remotion-best-practices/rules/can-decode.md +75 -0
  318. package/src/skills-lib/remotion-best-practices/rules/charts.md +120 -0
  319. package/src/skills-lib/remotion-best-practices/rules/compositions.md +154 -0
  320. package/src/skills-lib/remotion-best-practices/rules/display-captions.md +184 -0
  321. package/src/skills-lib/remotion-best-practices/rules/extract-frames.md +229 -0
  322. package/src/skills-lib/remotion-best-practices/rules/ffmpeg.md +38 -0
  323. package/src/skills-lib/remotion-best-practices/rules/fonts.md +152 -0
  324. package/src/skills-lib/remotion-best-practices/rules/get-audio-duration.md +58 -0
  325. package/src/skills-lib/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  326. package/src/skills-lib/remotion-best-practices/rules/get-video-duration.md +60 -0
  327. package/src/skills-lib/remotion-best-practices/rules/gifs.md +141 -0
  328. package/src/skills-lib/remotion-best-practices/rules/images.md +134 -0
  329. package/src/skills-lib/remotion-best-practices/rules/import-srt-captions.md +69 -0
  330. package/src/skills-lib/remotion-best-practices/rules/light-leaks.md +73 -0
  331. package/src/skills-lib/remotion-best-practices/rules/lottie.md +70 -0
  332. package/src/skills-lib/remotion-best-practices/rules/maps.md +412 -0
  333. package/src/skills-lib/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  334. package/src/skills-lib/remotion-best-practices/rules/measuring-text.md +140 -0
  335. package/src/skills-lib/remotion-best-practices/rules/parameters.md +109 -0
  336. package/src/skills-lib/remotion-best-practices/rules/sequencing.md +118 -0
  337. package/src/skills-lib/remotion-best-practices/rules/sfx.md +26 -0
  338. package/src/skills-lib/remotion-best-practices/rules/subtitles.md +36 -0
  339. package/src/skills-lib/remotion-best-practices/rules/tailwind.md +11 -0
  340. package/src/skills-lib/remotion-best-practices/rules/text-animations.md +20 -0
  341. package/src/skills-lib/remotion-best-practices/rules/timing.md +179 -0
  342. package/src/skills-lib/remotion-best-practices/rules/transcribe-captions.md +70 -0
  343. package/src/skills-lib/remotion-best-practices/rules/transitions.md +197 -0
  344. package/src/skills-lib/remotion-best-practices/rules/transparent-videos.md +106 -0
  345. package/src/skills-lib/remotion-best-practices/rules/trimming.md +51 -0
  346. package/src/skills-lib/remotion-best-practices/rules/videos.md +171 -0
  347. package/src/skills-lib/remotion-best-practices/rules/voiceover.md +99 -0
  348. package/src/skills-lib/revops/SKILL.md +343 -0
  349. package/src/skills-lib/revops/evals/evals.json +91 -0
  350. package/src/skills-lib/revops/references/automation-playbooks.md +290 -0
  351. package/src/skills-lib/revops/references/lifecycle-definitions.md +278 -0
  352. package/src/skills-lib/revops/references/routing-rules.md +203 -0
  353. package/src/skills-lib/revops/references/scoring-models.md +247 -0
  354. package/src/skills-lib/sales-enablement/SKILL.md +349 -0
  355. package/src/skills-lib/sales-enablement/evals/evals.json +91 -0
  356. package/src/skills-lib/sales-enablement/references/deck-frameworks.md +263 -0
  357. package/src/skills-lib/sales-enablement/references/demo-scripts.md +355 -0
  358. package/src/skills-lib/sales-enablement/references/objection-library.md +270 -0
  359. package/src/skills-lib/sales-enablement/references/one-pager-templates.md +208 -0
  360. package/src/skills-lib/schema-markup/SKILL.md +179 -0
  361. package/src/skills-lib/schema-markup/evals/evals.json +87 -0
  362. package/src/skills-lib/schema-markup/references/schema-examples.md +398 -0
  363. package/src/skills-lib/seo-audit/SKILL.md +412 -0
  364. package/src/skills-lib/seo-audit/evals/evals.json +136 -0
  365. package/src/skills-lib/seo-audit/references/ai-writing-detection.md +200 -0
  366. package/src/skills-lib/signup-flow-cro/SKILL.md +359 -0
  367. package/src/skills-lib/signup-flow-cro/evals/evals.json +88 -0
  368. package/src/skills-lib/site-architecture/SKILL.md +357 -0
  369. package/src/skills-lib/site-architecture/evals/evals.json +88 -0
  370. package/src/skills-lib/site-architecture/references/mermaid-templates.md +216 -0
  371. package/src/skills-lib/site-architecture/references/navigation-patterns.md +305 -0
  372. package/src/skills-lib/site-architecture/references/site-type-templates.md +293 -0
  373. package/src/skills-lib/social-content/SKILL.md +278 -0
  374. package/src/skills-lib/social-content/evals/evals.json +92 -0
  375. package/src/skills-lib/social-content/references/platforms.md +170 -0
  376. package/src/skills-lib/social-content/references/post-templates.md +177 -0
  377. package/src/skills-lib/social-content/references/reverse-engineering.md +195 -0
  378. package/src/skills-lib/supabase-postgres-best-practices/AGENTS.md +68 -0
  379. package/src/skills-lib/supabase-postgres-best-practices/CLAUDE.md +68 -0
  380. package/src/skills-lib/supabase-postgres-best-practices/README.md +116 -0
  381. package/src/skills-lib/supabase-postgres-best-practices/SKILL.md +64 -0
  382. package/src/skills-lib/supabase-postgres-best-practices/references/_contributing.md +171 -0
  383. package/src/skills-lib/supabase-postgres-best-practices/references/_sections.md +39 -0
  384. package/src/skills-lib/supabase-postgres-best-practices/references/_template.md +34 -0
  385. package/src/skills-lib/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  386. package/src/skills-lib/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  387. package/src/skills-lib/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  388. package/src/skills-lib/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  389. package/src/skills-lib/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  390. package/src/skills-lib/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  391. package/src/skills-lib/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  392. package/src/skills-lib/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  393. package/src/skills-lib/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  394. package/src/skills-lib/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  395. package/src/skills-lib/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  396. package/src/skills-lib/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  397. package/src/skills-lib/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  398. package/src/skills-lib/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  399. package/src/skills-lib/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  400. package/src/skills-lib/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  401. package/src/skills-lib/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  402. package/src/skills-lib/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  403. package/src/skills-lib/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  404. package/src/skills-lib/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  405. package/src/skills-lib/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  406. package/src/skills-lib/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  407. package/src/skills-lib/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  408. package/src/skills-lib/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  409. package/src/skills-lib/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  410. package/src/skills-lib/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  411. package/src/skills-lib/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  412. package/src/skills-lib/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  413. package/src/skills-lib/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  414. package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  415. package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
  416. package/src/skills-lib/taste-redesign/SKILL.md +178 -0
  417. package/src/skills-lib/taste-skill/SKILL.md +1206 -0
  418. package/src/skills-lib/ui-component-curator/SKILL.md +102 -0
  419. package/src/skills-lib/ui-ux-pro-max/SKILL.md +377 -0
  420. package/src/skills-lib/ui-ux-pro-max/data/charts.csv +26 -0
  421. package/src/skills-lib/ui-ux-pro-max/data/colors.csv +97 -0
  422. package/src/skills-lib/ui-ux-pro-max/data/icons.csv +101 -0
  423. package/src/skills-lib/ui-ux-pro-max/data/landing.csv +31 -0
  424. package/src/skills-lib/ui-ux-pro-max/data/products.csv +97 -0
  425. package/src/skills-lib/ui-ux-pro-max/data/react-performance.csv +45 -0
  426. package/src/skills-lib/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  427. package/src/skills-lib/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  428. package/src/skills-lib/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  429. package/src/skills-lib/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  430. package/src/skills-lib/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  431. package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  432. package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  433. package/src/skills-lib/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  434. package/src/skills-lib/ui-ux-pro-max/data/stacks/react.csv +54 -0
  435. package/src/skills-lib/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  436. package/src/skills-lib/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  437. package/src/skills-lib/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  438. package/src/skills-lib/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  439. package/src/skills-lib/ui-ux-pro-max/data/styles.csv +68 -0
  440. package/src/skills-lib/ui-ux-pro-max/data/typography.csv +58 -0
  441. package/src/skills-lib/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  442. package/src/skills-lib/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  443. package/src/skills-lib/ui-ux-pro-max/data/web-interface.csv +31 -0
  444. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
  445. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
  446. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +0 -0
  447. package/src/skills-lib/ui-ux-pro-max/scripts/core.py +253 -0
  448. package/src/skills-lib/ui-ux-pro-max/scripts/design_system.py +1067 -0
  449. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/0964cef300f753b5cee0cc49777ca97035c85d45c212099405d9ee4da36e523f.json +1 -0
  450. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/21a40f6810c3a6f17acc3580f106171daf78c7b41bbd066bc80448a821ea0adf.json +1 -0
  451. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/69ea15a020ac81b8459e37ef63654398a50c1035fc01c43d8069df217389f7f3.json +1 -0
  452. package/src/skills-lib/ui-ux-pro-max/scripts/search.py +114 -0
  453. package/src/skills-lib/web-security/SKILL.md +147 -0
  454. package/src/skills-lib/wizz-router/SKILL.md +262 -0
  455. package/src/squads/README.md +39 -0
  456. package/src/squads/advisory-board/README.md +34 -0
  457. package/src/squads/advisory-board/agents/board-chair.md +161 -0
  458. package/src/squads/advisory-board/agents/brene-brown.md +296 -0
  459. package/src/squads/advisory-board/agents/charlie-munger.md +590 -0
  460. package/src/squads/advisory-board/agents/derek-sivers.md +268 -0
  461. package/src/squads/advisory-board/agents/naval-ravikant.md +251 -0
  462. package/src/squads/advisory-board/agents/patrick-lencioni.md +394 -0
  463. package/src/squads/advisory-board/agents/peter-thiel.md +269 -0
  464. package/src/squads/advisory-board/agents/ray-dalio.md +587 -0
  465. package/src/squads/advisory-board/agents/reid-hoffman.md +278 -0
  466. package/src/squads/advisory-board/agents/simon-sinek.md +291 -0
  467. package/src/squads/advisory-board/agents/yvon-chouinard.md +275 -0
  468. package/src/squads/advisory-board/squad.yaml +50 -0
  469. package/src/squads/brand-squad/README.md +60 -0
  470. package/src/squads/brand-squad/agents/al-ries.md +175 -0
  471. package/src/squads/brand-squad/agents/alina-wheeler.md +184 -0
  472. package/src/squads/brand-squad/agents/archetype-consultant.md +215 -0
  473. package/src/squads/brand-squad/agents/brand-chief.md +158 -0
  474. package/src/squads/brand-squad/agents/byron-sharp.md +169 -0
  475. package/src/squads/brand-squad/agents/david-aaker.md +166 -0
  476. package/src/squads/brand-squad/agents/denise-yohn.md +172 -0
  477. package/src/squads/brand-squad/agents/domain-scout.md +135 -0
  478. package/src/squads/brand-squad/agents/donald-miller.md +179 -0
  479. package/src/squads/brand-squad/agents/emily-heyward.md +147 -0
  480. package/src/squads/brand-squad/agents/jean-noel-kapferer.md +189 -0
  481. package/src/squads/brand-squad/agents/kevin-keller.md +199 -0
  482. package/src/squads/brand-squad/agents/marty-neumeier.md +170 -0
  483. package/src/squads/brand-squad/agents/miller-sticky-brand.md +180 -0
  484. package/src/squads/brand-squad/agents/naming-strategist.md +171 -0
  485. package/src/squads/brand-squad/squad.yaml +117 -0
  486. package/src/squads/c-level-squad/README.md +29 -0
  487. package/src/squads/c-level-squad/agents/caio-architect.md +235 -0
  488. package/src/squads/c-level-squad/agents/cio-engineer.md +209 -0
  489. package/src/squads/c-level-squad/agents/cmo-architect.md +208 -0
  490. package/src/squads/c-level-squad/agents/coo-orchestrator.md +193 -0
  491. package/src/squads/c-level-squad/agents/cto-architect.md +194 -0
  492. package/src/squads/c-level-squad/agents/vision-chief.md +201 -0
  493. package/src/squads/c-level-squad/squad.yaml +45 -0
  494. package/src/squads/claude-code-mastery/README.md +146 -0
  495. package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +554 -0
  496. package/src/squads/claude-code-mastery/agents/config-engineer.md +865 -0
  497. package/src/squads/claude-code-mastery/agents/hooks-architect.md +1013 -0
  498. package/src/squads/claude-code-mastery/agents/mcp-integrator.md +791 -0
  499. package/src/squads/claude-code-mastery/agents/project-integrator.md +1196 -0
  500. package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +931 -0
  501. package/src/squads/claude-code-mastery/agents/skill-craftsman.md +1250 -0
  502. package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +1008 -0
  503. package/src/squads/copy-squad/README.md +65 -0
  504. package/src/squads/copy-squad/agents/andre-chaperon.md +206 -0
  505. package/src/squads/copy-squad/agents/ben-settle.md +194 -0
  506. package/src/squads/copy-squad/agents/claude-hopkins.md +182 -0
  507. package/src/squads/copy-squad/agents/clayton-makepeace.md +225 -0
  508. package/src/squads/copy-squad/agents/copy-chief.md +166 -0
  509. package/src/squads/copy-squad/agents/dan-kennedy.md +202 -0
  510. package/src/squads/copy-squad/agents/dan-koe.md +223 -0
  511. package/src/squads/copy-squad/agents/david-deutsch.md +197 -0
  512. package/src/squads/copy-squad/agents/david-ogilvy.md +198 -0
  513. package/src/squads/copy-squad/agents/eugene-schwartz.md +238 -0
  514. package/src/squads/copy-squad/agents/frank-kern.md +195 -0
  515. package/src/squads/copy-squad/agents/gary-bencivenga.md +197 -0
  516. package/src/squads/copy-squad/agents/gary-halbert.md +219 -0
  517. package/src/squads/copy-squad/agents/jim-rutz.md +193 -0
  518. package/src/squads/copy-squad/agents/joe-sugarman.md +234 -0
  519. package/src/squads/copy-squad/agents/john-carlton.md +203 -0
  520. package/src/squads/copy-squad/agents/jon-benson.md +196 -0
  521. package/src/squads/copy-squad/agents/parris-lampropoulos.md +188 -0
  522. package/src/squads/copy-squad/agents/robert-collier.md +183 -0
  523. package/src/squads/copy-squad/agents/russell-brunson.md +229 -0
  524. package/src/squads/copy-squad/agents/ry-schwartz.md +185 -0
  525. package/src/squads/copy-squad/agents/stefan-georgi.md +188 -0
  526. package/src/squads/copy-squad/agents/todd-brown.md +171 -0
  527. package/src/squads/copy-squad/squad.yaml +87 -0
  528. package/src/squads/cybersecurity/README.md +38 -0
  529. package/src/squads/cybersecurity/agents/busterer.md +108 -0
  530. package/src/squads/cybersecurity/agents/cartographer.md +114 -0
  531. package/src/squads/cybersecurity/agents/chris-sanders.md +205 -0
  532. package/src/squads/cybersecurity/agents/command-generator.md +121 -0
  533. package/src/squads/cybersecurity/agents/cyber-chief.md +120 -0
  534. package/src/squads/cybersecurity/agents/dirber.md +111 -0
  535. package/src/squads/cybersecurity/agents/fuzzer.md +121 -0
  536. package/src/squads/cybersecurity/agents/georgia-weidman.md +178 -0
  537. package/src/squads/cybersecurity/agents/jim-manico.md +182 -0
  538. package/src/squads/cybersecurity/agents/marcus-carey.md +200 -0
  539. package/src/squads/cybersecurity/agents/omar-santos.md +206 -0
  540. package/src/squads/cybersecurity/agents/peter-kim.md +179 -0
  541. package/src/squads/cybersecurity/agents/ripper.md +121 -0
  542. package/src/squads/cybersecurity/agents/rogue.md +116 -0
  543. package/src/squads/cybersecurity/agents/shannon-runner.md +108 -0
  544. package/src/squads/cybersecurity/squad.yaml +56 -0
  545. package/src/squads/data-squad/README.md +30 -0
  546. package/src/squads/data-squad/agents/avinash-kaushik.md +268 -0
  547. package/src/squads/data-squad/agents/data-chief.md +167 -0
  548. package/src/squads/data-squad/agents/david-spinks.md +277 -0
  549. package/src/squads/data-squad/agents/nick-mehta.md +294 -0
  550. package/src/squads/data-squad/agents/peter-fader.md +246 -0
  551. package/src/squads/data-squad/agents/sean-ellis.md +303 -0
  552. package/src/squads/data-squad/agents/wes-kao.md +268 -0
  553. package/src/squads/data-squad/squad.yaml +46 -0
  554. package/src/squads/design-squad/README.md +31 -0
  555. package/src/squads/design-squad/agents/brad-frost.md +185 -0
  556. package/src/squads/design-squad/agents/dan-mall.md +178 -0
  557. package/src/squads/design-squad/agents/dave-malouf.md +198 -0
  558. package/src/squads/design-squad/agents/design-chief.md +109 -0
  559. package/src/squads/design-squad/agents/design-system-architect.md +109 -0
  560. package/src/squads/design-squad/agents/ui-engineer.md +102 -0
  561. package/src/squads/design-squad/agents/ux-designer.md +105 -0
  562. package/src/squads/design-squad/agents/visual-generator.md +108 -0
  563. package/src/squads/design-squad/squad.yaml +48 -0
  564. package/src/squads/hormozi-squad/README.md +39 -0
  565. package/src/squads/hormozi-squad/agents/hormozi-ads.md +159 -0
  566. package/src/squads/hormozi-squad/agents/hormozi-advisor.md +178 -0
  567. package/src/squads/hormozi-squad/agents/hormozi-audit.md +178 -0
  568. package/src/squads/hormozi-squad/agents/hormozi-chief.md +111 -0
  569. package/src/squads/hormozi-squad/agents/hormozi-closer.md +179 -0
  570. package/src/squads/hormozi-squad/agents/hormozi-content.md +166 -0
  571. package/src/squads/hormozi-squad/agents/hormozi-copy.md +152 -0
  572. package/src/squads/hormozi-squad/agents/hormozi-hooks.md +177 -0
  573. package/src/squads/hormozi-squad/agents/hormozi-launch.md +160 -0
  574. package/src/squads/hormozi-squad/agents/hormozi-leads.md +198 -0
  575. package/src/squads/hormozi-squad/agents/hormozi-models.md +191 -0
  576. package/src/squads/hormozi-squad/agents/hormozi-offers.md +197 -0
  577. package/src/squads/hormozi-squad/agents/hormozi-pricing.md +151 -0
  578. package/src/squads/hormozi-squad/agents/hormozi-retention.md +166 -0
  579. package/src/squads/hormozi-squad/agents/hormozi-scale.md +175 -0
  580. package/src/squads/hormozi-squad/agents/hormozi-workshop.md +160 -0
  581. package/src/squads/hormozi-squad/squad.yaml +60 -0
  582. package/src/squads/movement/README.md +29 -0
  583. package/src/squads/movement/agents/analista-de-impacto.md +350 -0
  584. package/src/squads/movement/agents/estrategista-de-ciclo.md +301 -0
  585. package/src/squads/movement/agents/fenomenologo.md +169 -0
  586. package/src/squads/movement/agents/identitario.md +265 -0
  587. package/src/squads/movement/agents/manifestador.md +279 -0
  588. package/src/squads/movement/agents/movement-architect.md +210 -0
  589. package/src/squads/movement/agents/movement-chief.md +135 -0
  590. package/src/squads/movement/squad.yaml +45 -0
  591. package/src/squads/storytelling/README.md +35 -0
  592. package/src/squads/storytelling/agents/blake-snyder.md +225 -0
  593. package/src/squads/storytelling/agents/dan-harmon.md +167 -0
  594. package/src/squads/storytelling/agents/joseph-campbell.md +184 -0
  595. package/src/squads/storytelling/agents/keith-johnstone.md +157 -0
  596. package/src/squads/storytelling/agents/kindra-hall.md +162 -0
  597. package/src/squads/storytelling/agents/marshall-ganz.md +167 -0
  598. package/src/squads/storytelling/agents/matthew-dicks.md +152 -0
  599. package/src/squads/storytelling/agents/nancy-duarte.md +154 -0
  600. package/src/squads/storytelling/agents/oren-klaff.md +166 -0
  601. package/src/squads/storytelling/agents/park-howell.md +152 -0
  602. package/src/squads/storytelling/agents/shawn-coyne.md +208 -0
  603. package/src/squads/storytelling/agents/story-chief.md +155 -0
  604. package/src/squads/storytelling/squad.yaml +52 -0
  605. package/src/squads/traffic-masters/README.md +39 -0
  606. package/src/squads/traffic-masters/agents/ad-midas.md +149 -0
  607. package/src/squads/traffic-masters/agents/ads-analyst.md +135 -0
  608. package/src/squads/traffic-masters/agents/creative-analyst.md +142 -0
  609. package/src/squads/traffic-masters/agents/depesh-mandalia.md +174 -0
  610. package/src/squads/traffic-masters/agents/fiscal.md +144 -0
  611. package/src/squads/traffic-masters/agents/kasim-aslam.md +158 -0
  612. package/src/squads/traffic-masters/agents/media-buyer.md +159 -0
  613. package/src/squads/traffic-masters/agents/molly-pittman.md +185 -0
  614. package/src/squads/traffic-masters/agents/nicholas-kusmich.md +157 -0
  615. package/src/squads/traffic-masters/agents/pedro-sobral.md +158 -0
  616. package/src/squads/traffic-masters/agents/performance-analyst.md +135 -0
  617. package/src/squads/traffic-masters/agents/pixel-specialist.md +144 -0
  618. package/src/squads/traffic-masters/agents/ralph-burns.md +163 -0
  619. package/src/squads/traffic-masters/agents/scale-optimizer.md +144 -0
  620. package/src/squads/traffic-masters/agents/tom-breeze.md +175 -0
  621. package/src/squads/traffic-masters/agents/traffic-chief.md +97 -0
  622. package/src/squads/traffic-masters/squad.yaml +59 -0
  623. package/tools/installer/commands/install.js +12 -0
  624. package/tools/installer/core/config.js +20 -0
  625. package/tools/installer/core/installer.js +100 -0
  626. package/tools/installer/core/manifest-generator.js +14 -3
  627. package/tools/installer/modules/cli-config.js +175 -0
  628. package/tools/installer/modules/mcp-config.js +137 -0
  629. package/tools/installer/modules/skills-lib.js +135 -0
  630. package/tools/installer/ui.js +210 -0
@@ -0,0 +1,1498 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Huashu Design · Here's to the Agents (v10)</title>
6
+ <link rel="preconnect" href="https://fonts.googleapis.com">
7
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
8
+ <link href="https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,300..700;1,8..60,300..700&family=Noto+Serif+SC:wght@300;400;500;600&family=Inter:wght@100;200;300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
9
+ <style>
10
+ :root {
11
+ --bg: #000000;
12
+ --ink: #FFFFFF;
13
+ --ink-80: rgba(255,255,255,0.82);
14
+ --ink-60: rgba(255,255,255,0.58);
15
+ --muted: rgba(255,255,255,0.40);
16
+ --dim: rgba(255,255,255,0.18);
17
+ --hairline: rgba(255,255,255,0.12);
18
+ --accent: #D97757; /* terracotta — 致敬 Anthropic 血统 */
19
+ --accent-deep: #B85D3D;
20
+
21
+ /* Claude Design palette — Act 0 专用 */
22
+ --cd-bg: #F5F4F0;
23
+ --cd-panel: #FFFFFF;
24
+ --cd-ink: #1A1918;
25
+ --cd-dim: #8B867E;
26
+ --cd-hair: rgba(0,0,0,0.08);
27
+ --cd-hair-strong: rgba(0,0,0,0.16);
28
+ --cd-green: #2D4A3A;
29
+ --cd-green-deep: #1E3428;
30
+ --cd-green-soft: #3F5E4D;
31
+
32
+ --serif-en: "Source Serif 4", "Tiempos Headline", Georgia, serif;
33
+ --sans: "Inter", -apple-system, "PingFang SC", "HarmonyOS Sans SC", system-ui, sans-serif;
34
+ --mono: "JetBrains Mono", "SF Mono", ui-monospace, monospace;
35
+ }
36
+ html, body {
37
+ margin: 0; padding: 0;
38
+ background: #000;
39
+ overflow: hidden;
40
+ font-family: var(--sans);
41
+ color: var(--ink);
42
+ -webkit-font-smoothing: antialiased;
43
+ }
44
+ * { box-sizing: border-box; }
45
+
46
+ .stage {
47
+ position: fixed;
48
+ top: 50%; left: 50%;
49
+ width: 1920px; height: 1080px;
50
+ transform-origin: center center;
51
+ background: var(--bg);
52
+ overflow: hidden;
53
+ }
54
+
55
+ .scene {
56
+ position: absolute; inset: 0;
57
+ display: flex; align-items: center; justify-content: center;
58
+ opacity: 0;
59
+ visibility: hidden;
60
+ will-change: opacity, transform;
61
+ }
62
+ .scene.visible { visibility: visible; }
63
+
64
+ /* ============ Act 1 ============ */
65
+ .act1 {
66
+ flex-direction: column;
67
+ gap: 40px;
68
+ }
69
+ .hero-line {
70
+ font-family: var(--sans);
71
+ font-size: 132px;
72
+ font-weight: 200;
73
+ letter-spacing: -0.045em;
74
+ color: var(--ink);
75
+ text-align: center;
76
+ line-height: 1.02;
77
+ will-change: transform, opacity, font-variation-settings;
78
+ }
79
+ .hero-line .accent { color: var(--accent); font-weight: inherit; }
80
+
81
+ .not-line {
82
+ font-family: var(--sans);
83
+ font-size: 96px;
84
+ font-weight: 200;
85
+ letter-spacing: -0.035em;
86
+ color: var(--ink);
87
+ text-align: center;
88
+ line-height: 1.08;
89
+ }
90
+ .not-line .strike {
91
+ color: var(--muted);
92
+ text-decoration: line-through;
93
+ text-decoration-thickness: 3px;
94
+ text-decoration-color: var(--accent);
95
+ }
96
+
97
+ /* ============ Abstract GUI icons (no real product screenshots) ============ */
98
+ .gui-glyph {
99
+ position: absolute;
100
+ opacity: 0;
101
+ will-change: opacity, transform, filter;
102
+ }
103
+ .gui-glyph.click {
104
+ /* Mouse cursor arrow */
105
+ width: 120px; height: 120px;
106
+ display: flex; align-items: center; justify-content: center;
107
+ }
108
+ .gui-glyph.click::before {
109
+ content: '';
110
+ width: 40px; height: 40px;
111
+ border: 2px solid var(--muted);
112
+ border-radius: 50%;
113
+ position: absolute;
114
+ animation: clickring 0.8s ease-out forwards;
115
+ animation-play-state: paused;
116
+ }
117
+ @keyframes clickring {
118
+ 0% { transform: scale(0.5); opacity: 0.8; }
119
+ 100% { transform: scale(2.2); opacity: 0; }
120
+ }
121
+ .gui-glyph.click svg { width: 56px; height: 56px; position: relative; z-index: 2; }
122
+
123
+ .gui-glyph.drag {
124
+ /* Slider */
125
+ width: 400px; height: 48px;
126
+ display: flex; align-items: center;
127
+ gap: 0;
128
+ }
129
+ .gui-glyph.drag .track {
130
+ flex: 1;
131
+ height: 3px;
132
+ background: var(--hairline);
133
+ border-radius: 2px;
134
+ position: relative;
135
+ }
136
+ .gui-glyph.drag .fill {
137
+ position: absolute;
138
+ height: 100%;
139
+ background: var(--muted);
140
+ width: 30%;
141
+ border-radius: 2px;
142
+ }
143
+ .gui-glyph.drag .thumb {
144
+ position: absolute;
145
+ width: 24px; height: 24px;
146
+ background: var(--ink);
147
+ border: 1px solid var(--muted);
148
+ border-radius: 50%;
149
+ top: 50%;
150
+ left: 30%;
151
+ transform: translate(-50%, -50%);
152
+ }
153
+
154
+ .gui-glyph.folder {
155
+ /* Window frame w/ file list */
156
+ width: 420px; height: 260px;
157
+ background: rgba(255,255,255,0.02);
158
+ border: 1px solid var(--hairline);
159
+ border-radius: 10px;
160
+ overflow: hidden;
161
+ }
162
+ .gui-glyph.folder .head {
163
+ padding: 12px 16px;
164
+ border-bottom: 1px solid var(--hairline);
165
+ display: flex; gap: 8px;
166
+ }
167
+ .gui-glyph.folder .head .dot {
168
+ width: 9px; height: 9px; border-radius: 50%;
169
+ background: var(--hairline);
170
+ }
171
+ .gui-glyph.folder .row {
172
+ padding: 10px 16px;
173
+ font-family: var(--mono);
174
+ font-size: 13px;
175
+ color: var(--muted);
176
+ display: flex;
177
+ justify-content: space-between;
178
+ border-bottom: 1px solid var(--hairline);
179
+ }
180
+ .gui-glyph.folder .row:last-child { border-bottom: none; }
181
+ .gui-glyph.folder .row .meta {
182
+ color: var(--dim);
183
+ }
184
+
185
+ /* ============ Act 2 ============ */
186
+ .act2 {
187
+ flex-direction: column;
188
+ }
189
+
190
+ .terminal {
191
+ width: 1180px;
192
+ border-radius: 16px;
193
+ background: rgba(20, 20, 20, 1);
194
+ border: 1px solid var(--hairline);
195
+ overflow: hidden;
196
+ box-shadow:
197
+ 0 0 0 1px rgba(255,255,255,0.02),
198
+ 0 60px 120px -30px rgba(217,119,87,0.15);
199
+ }
200
+ .tty-head {
201
+ display: flex; align-items: center; gap: 9px;
202
+ padding: 18px 22px;
203
+ background: rgba(255,255,255,0.02);
204
+ border-bottom: 1px solid var(--hairline);
205
+ }
206
+ .tty-head .d {
207
+ width: 13px; height: 13px; border-radius: 50%;
208
+ background: var(--hairline);
209
+ }
210
+ .tty-head .d.red { background: #5a2a2a; }
211
+ .tty-head .d.yellow { background: #5a4a2a; }
212
+ .tty-head .d.green { background: #2a5a35; }
213
+ .tty-title {
214
+ margin-left: 16px;
215
+ color: var(--muted);
216
+ font-size: 14px;
217
+ font-family: var(--mono);
218
+ letter-spacing: 0.02em;
219
+ }
220
+ .tty-body {
221
+ padding: 44px 36px;
222
+ font-family: var(--mono);
223
+ font-size: 26px;
224
+ line-height: 1.6;
225
+ color: rgba(255,255,255,0.86);
226
+ min-height: 160px;
227
+ }
228
+ .prompt { color: var(--accent); margin-right: 12px; }
229
+ .typed { white-space: pre; }
230
+ .cursor {
231
+ display: inline-block;
232
+ width: 12px; height: 28px;
233
+ background: var(--accent);
234
+ vertical-align: -5px;
235
+ margin-left: 3px;
236
+ }
237
+
238
+ /* Gallery (v6 structure, dark theme) */
239
+ .gallery-viewport {
240
+ position: absolute;
241
+ inset: 0;
242
+ overflow: hidden;
243
+ perspective: 2400px;
244
+ perspective-origin: 50% 45%;
245
+ }
246
+ .gallery-canvas {
247
+ position: absolute;
248
+ top: 50%; left: 50%;
249
+ width: 4320px;
250
+ height: 2520px;
251
+ transform-origin: center center;
252
+ transform-style: preserve-3d;
253
+ will-change: transform;
254
+ display: grid;
255
+ grid-template-columns: repeat(8, 1fr);
256
+ gap: 40px;
257
+ padding: 60px;
258
+ }
259
+ .gallery-card {
260
+ background: #1a1a1a;
261
+ border-radius: 14px;
262
+ padding: 6px;
263
+ overflow: hidden;
264
+ border: 1px solid var(--hairline);
265
+ box-shadow:
266
+ 0 20px 60px -20px rgba(0, 0, 0, 0.6),
267
+ 0 6px 18px -6px rgba(0, 0, 0, 0.4);
268
+ aspect-ratio: 16 / 9;
269
+ will-change: opacity, filter;
270
+ }
271
+ .gallery-card.depth-near {
272
+ box-shadow:
273
+ 0 32px 80px -22px rgba(0, 0, 0, 0.8),
274
+ 0 10px 24px -8px rgba(217, 119, 87, 0.12);
275
+ }
276
+ .gallery-card.depth-far {
277
+ box-shadow:
278
+ 0 14px 40px -16px rgba(0, 0, 0, 0.4),
279
+ 0 4px 12px -4px rgba(0, 0, 0, 0.25);
280
+ }
281
+ .gallery-card img {
282
+ width: 100%; height: 100%;
283
+ object-fit: cover;
284
+ display: block;
285
+ border-radius: 9px;
286
+ }
287
+
288
+ /* Overlay statements (on top of gallery) */
289
+ .over-statement {
290
+ position: absolute;
291
+ inset: 0;
292
+ display: flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ pointer-events: none;
296
+ z-index: 50;
297
+ opacity: 0;
298
+ }
299
+ .over-statement .text {
300
+ font-family: var(--sans);
301
+ font-size: 84px;
302
+ font-weight: 200;
303
+ letter-spacing: -0.035em;
304
+ color: var(--ink);
305
+ text-align: center;
306
+ line-height: 1.08;
307
+ text-shadow: 0 8px 40px rgba(0,0,0,0.8);
308
+ padding: 0 40px;
309
+ max-width: 1400px;
310
+ }
311
+ .over-statement .text .accent { color: var(--accent); }
312
+
313
+ /* ============ Act 3 ============ */
314
+ .act3 {
315
+ flex-direction: column;
316
+ gap: 0;
317
+ }
318
+ .statement-big {
319
+ font-family: var(--sans);
320
+ font-size: 160px;
321
+ font-weight: 100;
322
+ letter-spacing: -0.05em;
323
+ color: var(--ink);
324
+ text-align: center;
325
+ line-height: 1;
326
+ will-change: opacity, transform, font-variation-settings;
327
+ }
328
+ .statement-big .accent { color: var(--accent); font-weight: inherit; }
329
+
330
+ .brand-wordmark {
331
+ font-family: var(--sans);
332
+ font-size: 140px;
333
+ font-weight: 100;
334
+ font-variation-settings: "wght" 100;
335
+ letter-spacing: -0.045em;
336
+ color: var(--ink);
337
+ text-align: center;
338
+ line-height: 1;
339
+ will-change: font-variation-settings, opacity, transform;
340
+ }
341
+ .brand-wordmark .accent { color: var(--accent); font-weight: inherit; }
342
+
343
+ .farewell-quote {
344
+ margin-top: 44px;
345
+ font-family: var(--serif-en);
346
+ font-style: italic;
347
+ font-weight: 300;
348
+ font-size: 36px;
349
+ color: var(--accent);
350
+ letter-spacing: 0.005em;
351
+ text-align: center;
352
+ will-change: opacity, transform;
353
+ }
354
+
355
+ .farewell-cn {
356
+ margin-top: 18px;
357
+ font-family: var(--serif-en);
358
+ font-weight: 300;
359
+ font-size: 18px;
360
+ color: var(--muted);
361
+ letter-spacing: 0.24em;
362
+ text-align: center;
363
+ }
364
+
365
+ .brand-url {
366
+ margin-top: 48px;
367
+ font-size: 14px;
368
+ color: var(--muted);
369
+ font-family: var(--mono);
370
+ letter-spacing: 0.16em;
371
+ text-align: center;
372
+ }
373
+
374
+ /* Watermark (subtle, always on during Act 2/3) */
375
+ .watermark {
376
+ position: absolute;
377
+ bottom: 28px;
378
+ right: 36px;
379
+ font-family: var(--mono);
380
+ font-size: 10px;
381
+ letter-spacing: 0.24em;
382
+ text-transform: uppercase;
383
+ color: rgba(255,255,255,0.22);
384
+ z-index: 100;
385
+ opacity: 0;
386
+ transition: opacity 0.6s;
387
+ pointer-events: none;
388
+ }
389
+ .watermark.visible { opacity: 1; }
390
+
391
+ /* ============ Act 0 — Claude Design 致敬(+讽刺) ============ */
392
+ .act0 {
393
+ background: #0a0a0a;
394
+ }
395
+ .cd-browser {
396
+ position: absolute;
397
+ top: 50%; left: 50%;
398
+ width: 1640px;
399
+ height: 920px;
400
+ transform: translate(-50%, -50%);
401
+ background: var(--cd-bg);
402
+ border-radius: 14px;
403
+ overflow: hidden;
404
+ box-shadow:
405
+ 0 0 0 1px rgba(255,255,255,0.04),
406
+ 0 60px 160px -40px rgba(0,0,0,0.8),
407
+ 0 24px 60px -20px rgba(0,0,0,0.6);
408
+ will-change: transform, opacity, filter;
409
+ }
410
+ .cd-chrome {
411
+ display: flex; align-items: center;
412
+ height: 48px;
413
+ padding: 0 18px;
414
+ background: #EDEBE5;
415
+ border-bottom: 1px solid var(--cd-hair);
416
+ gap: 14px;
417
+ }
418
+ .cd-traffic { display: flex; gap: 8px; }
419
+ .cd-traffic .d {
420
+ width: 12px; height: 12px; border-radius: 50%;
421
+ background: #D9D4CB;
422
+ }
423
+ .cd-traffic .d.r { background: #E8A5A0; }
424
+ .cd-traffic .d.y { background: #E8D0A0; }
425
+ .cd-traffic .d.g { background: #A5D0B0; }
426
+ .cd-urlbar {
427
+ flex: 1;
428
+ max-width: 520px;
429
+ margin: 0 auto;
430
+ height: 28px;
431
+ background: #F9F7F2;
432
+ border: 1px solid var(--cd-hair);
433
+ border-radius: 6px;
434
+ display: flex; align-items: center; justify-content: center;
435
+ font-family: var(--sans);
436
+ font-size: 13px;
437
+ color: var(--cd-dim);
438
+ letter-spacing: 0;
439
+ }
440
+ .cd-urlbar .lock {
441
+ width: 10px; height: 10px;
442
+ margin-right: 8px;
443
+ border: 1.5px solid var(--cd-dim);
444
+ border-radius: 2px;
445
+ position: relative;
446
+ }
447
+ .cd-urlbar .lock::before {
448
+ content: '';
449
+ position: absolute;
450
+ top: -5px; left: 50%;
451
+ transform: translateX(-50%);
452
+ width: 6px; height: 6px;
453
+ border: 1.5px solid var(--cd-dim);
454
+ border-bottom: none;
455
+ border-radius: 3px 3px 0 0;
456
+ }
457
+ .cd-tabs-row {
458
+ display: flex;
459
+ height: 42px;
460
+ padding: 0 24px;
461
+ background: var(--cd-bg);
462
+ border-bottom: 1px solid var(--cd-hair);
463
+ align-items: center;
464
+ gap: 6px;
465
+ }
466
+ .cd-tab {
467
+ height: 28px;
468
+ padding: 0 14px;
469
+ display: flex; align-items: center;
470
+ font-family: var(--sans);
471
+ font-size: 12px;
472
+ color: var(--cd-dim);
473
+ border-radius: 6px;
474
+ gap: 8px;
475
+ white-space: nowrap;
476
+ }
477
+ .cd-tab.active {
478
+ background: #FFFFFF;
479
+ color: var(--cd-ink);
480
+ font-weight: 500;
481
+ box-shadow: 0 1px 2px rgba(0,0,0,0.04);
482
+ }
483
+ .cd-tab .dot {
484
+ width: 6px; height: 6px; border-radius: 50%;
485
+ background: var(--cd-green);
486
+ }
487
+ .cd-topbar-right {
488
+ margin-left: auto;
489
+ display: flex; align-items: center; gap: 12px;
490
+ font-family: var(--sans);
491
+ font-size: 12px;
492
+ color: var(--cd-dim);
493
+ }
494
+ .cd-topbar-right .btn {
495
+ padding: 6px 12px;
496
+ background: var(--cd-ink);
497
+ color: #FFFFFF;
498
+ border-radius: 6px;
499
+ font-weight: 500;
500
+ }
501
+ .cd-topbar-right .btn.ghost {
502
+ background: transparent;
503
+ color: var(--cd-ink);
504
+ border: 1px solid var(--cd-hair-strong);
505
+ }
506
+
507
+ .cd-body {
508
+ display: grid;
509
+ grid-template-columns: 440px 1fr;
510
+ height: calc(920px - 48px - 42px);
511
+ }
512
+
513
+ /* Chat panel */
514
+ .cd-chat {
515
+ background: var(--cd-bg);
516
+ border-right: 1px solid var(--cd-hair);
517
+ padding: 28px 24px;
518
+ display: flex;
519
+ flex-direction: column;
520
+ gap: 18px;
521
+ overflow: hidden;
522
+ }
523
+ .cd-msg { display: flex; gap: 10px; align-items: flex-start; }
524
+ .cd-avatar {
525
+ width: 26px; height: 26px;
526
+ border-radius: 50%;
527
+ display: flex; align-items: center; justify-content: center;
528
+ font-family: var(--sans);
529
+ font-size: 11px;
530
+ font-weight: 600;
531
+ flex-shrink: 0;
532
+ }
533
+ .cd-avatar.user {
534
+ background: #E8E4DC;
535
+ color: var(--cd-ink);
536
+ }
537
+ .cd-avatar.claude {
538
+ background: var(--cd-ink);
539
+ color: #FFFFFF;
540
+ }
541
+ .cd-bubble {
542
+ font-family: var(--sans);
543
+ font-size: 13px;
544
+ line-height: 1.55;
545
+ color: var(--cd-ink);
546
+ max-width: 100%;
547
+ }
548
+ .cd-bubble .dim { color: var(--cd-dim); }
549
+
550
+ .cd-tweaks {
551
+ margin-top: auto;
552
+ padding: 16px 18px;
553
+ background: #FFFFFF;
554
+ border: 1px solid var(--cd-hair);
555
+ border-radius: 10px;
556
+ }
557
+ .cd-tweaks-title {
558
+ font-family: var(--sans);
559
+ font-size: 11px;
560
+ font-weight: 600;
561
+ letter-spacing: 0.08em;
562
+ text-transform: uppercase;
563
+ color: var(--cd-dim);
564
+ margin-bottom: 14px;
565
+ }
566
+ .cd-tweak-row {
567
+ display: flex; align-items: center;
568
+ gap: 12px;
569
+ margin-bottom: 12px;
570
+ }
571
+ .cd-tweak-row:last-child { margin-bottom: 0; }
572
+ .cd-tweak-label {
573
+ font-family: var(--sans);
574
+ font-size: 12px;
575
+ color: var(--cd-ink);
576
+ width: 72px;
577
+ flex-shrink: 0;
578
+ }
579
+ .cd-tweak-track {
580
+ flex: 1;
581
+ height: 4px;
582
+ background: #E8E4DC;
583
+ border-radius: 2px;
584
+ position: relative;
585
+ }
586
+ .cd-tweak-thumb {
587
+ position: absolute;
588
+ top: 50%;
589
+ width: 16px; height: 16px;
590
+ background: #FFFFFF;
591
+ border: 1.5px solid var(--cd-ink);
592
+ border-radius: 50%;
593
+ transform: translate(-50%, -50%);
594
+ will-change: left;
595
+ }
596
+ .cd-color-dots {
597
+ display: flex; gap: 6px;
598
+ }
599
+ .cd-color-dot {
600
+ width: 16px; height: 16px;
601
+ border-radius: 50%;
602
+ border: 1.5px solid transparent;
603
+ cursor: default;
604
+ }
605
+ .cd-color-dot.active {
606
+ border-color: var(--cd-ink);
607
+ }
608
+
609
+ .cd-input {
610
+ margin-top: 14px;
611
+ height: 40px;
612
+ padding: 0 14px;
613
+ background: #FFFFFF;
614
+ border: 1px solid var(--cd-hair);
615
+ border-radius: 8px;
616
+ display: flex; align-items: center;
617
+ font-family: var(--sans);
618
+ font-size: 12px;
619
+ color: var(--cd-dim);
620
+ }
621
+
622
+ /* Canvas panel */
623
+ .cd-canvas {
624
+ background: #FAF9F5;
625
+ padding: 40px;
626
+ overflow: hidden;
627
+ display: flex; align-items: center; justify-content: center;
628
+ position: relative;
629
+ }
630
+ .cd-poster {
631
+ width: 780px;
632
+ aspect-ratio: 4 / 3;
633
+ background: var(--cd-green);
634
+ border-radius: 8px;
635
+ padding: 48px 56px;
636
+ color: #F5F2E8;
637
+ display: grid;
638
+ grid-template-columns: 1.2fr 1fr;
639
+ gap: 48px;
640
+ box-shadow: 0 40px 80px -30px rgba(0,0,0,0.4);
641
+ position: relative;
642
+ overflow: hidden;
643
+ }
644
+ .cd-poster::before {
645
+ content: '';
646
+ position: absolute;
647
+ top: -60px; right: -60px;
648
+ width: 220px; height: 220px;
649
+ background: radial-gradient(circle, rgba(245,242,232,0.10), transparent 70%);
650
+ }
651
+ .cd-poster-left { position: relative; z-index: 2; }
652
+ .cd-poster-eyebrow {
653
+ font-family: var(--sans);
654
+ font-size: 11px;
655
+ font-weight: 500;
656
+ letter-spacing: 0.22em;
657
+ text-transform: uppercase;
658
+ opacity: 0.65;
659
+ margin-bottom: 28px;
660
+ }
661
+ .cd-poster-title {
662
+ font-family: var(--serif-en);
663
+ font-size: 76px;
664
+ font-weight: 500;
665
+ line-height: 0.95;
666
+ letter-spacing: -0.02em;
667
+ margin-bottom: 20px;
668
+ }
669
+ .cd-poster-sub {
670
+ font-family: var(--sans);
671
+ font-size: 14px;
672
+ opacity: 0.75;
673
+ line-height: 1.5;
674
+ margin-bottom: 40px;
675
+ }
676
+ .cd-poster-pines {
677
+ display: flex; gap: 10px;
678
+ opacity: 0.35;
679
+ }
680
+ .cd-pine {
681
+ width: 0; height: 0;
682
+ border-left: 10px solid transparent;
683
+ border-right: 10px solid transparent;
684
+ border-bottom: 20px solid #F5F2E8;
685
+ position: relative;
686
+ }
687
+ .cd-pine::after {
688
+ content: '';
689
+ position: absolute;
690
+ bottom: -24px; left: 50%;
691
+ transform: translateX(-50%);
692
+ width: 3px; height: 6px;
693
+ background: #F5F2E8;
694
+ }
695
+ .cd-schedule {
696
+ background: rgba(245,242,232,0.08);
697
+ border: 1px solid rgba(245,242,232,0.15);
698
+ border-radius: 6px;
699
+ padding: 20px 22px;
700
+ position: relative;
701
+ z-index: 2;
702
+ }
703
+ .cd-schedule-title {
704
+ font-family: var(--sans);
705
+ font-size: 10px;
706
+ font-weight: 600;
707
+ letter-spacing: 0.18em;
708
+ text-transform: uppercase;
709
+ opacity: 0.6;
710
+ margin-bottom: 14px;
711
+ }
712
+ .cd-schedule-row {
713
+ display: flex; justify-content: space-between;
714
+ font-family: var(--sans);
715
+ font-size: 12px;
716
+ padding: 8px 0;
717
+ border-bottom: 1px solid rgba(245,242,232,0.10);
718
+ }
719
+ .cd-schedule-row:last-child { border-bottom: none; }
720
+ .cd-schedule-row .time { opacity: 0.65; font-variant-numeric: tabular-nums; }
721
+
722
+ /* Caption for Act 0 */
723
+ .cd-caption {
724
+ position: absolute;
725
+ bottom: 100px;
726
+ left: 50%;
727
+ transform: translateX(-50%);
728
+ font-family: var(--sans);
729
+ font-size: 88px;
730
+ font-weight: 200;
731
+ letter-spacing: -0.035em;
732
+ color: var(--ink);
733
+ text-align: center;
734
+ opacity: 0;
735
+ z-index: 60;
736
+ text-shadow: 0 10px 50px rgba(0,0,0,0.9);
737
+ will-change: opacity, transform;
738
+ }
739
+ .cd-caption .period { color: var(--accent); }
740
+
741
+ /* Act 0.5 — pivot */
742
+ .act05 {
743
+ flex-direction: column;
744
+ }
745
+ .pivot-line {
746
+ font-family: var(--sans);
747
+ font-size: 112px;
748
+ font-weight: 200;
749
+ letter-spacing: -0.04em;
750
+ color: var(--ink);
751
+ text-align: center;
752
+ line-height: 1.05;
753
+ will-change: opacity, transform, font-variation-settings;
754
+ }
755
+ .pivot-line .accent { color: var(--accent); font-weight: inherit; }
756
+ .pivot-line .faint { color: var(--muted); }
757
+ </style>
758
+ </head>
759
+ <body>
760
+
761
+ <div class="stage" id="stage">
762
+
763
+ <div class="watermark" id="watermark">Created by Huashu-Design</div>
764
+
765
+ <!-- ========== Act 0: Claude Design 致敬 ========== -->
766
+ <div class="scene act0" id="act0ClaudeDesign">
767
+ <div class="cd-browser" id="cdBrowser">
768
+ <!-- Chrome bar -->
769
+ <div class="cd-chrome">
770
+ <div class="cd-traffic">
771
+ <span class="d r"></span><span class="d y"></span><span class="d g"></span>
772
+ </div>
773
+ <div class="cd-urlbar"><span class="lock"></span>claude.ai/design</div>
774
+ <div style="width: 56px;"></div>
775
+ </div>
776
+ <!-- Tabs row -->
777
+ <div class="cd-tabs-row">
778
+ <div class="cd-tab active"><span class="dot"></span>Company offsite html</div>
779
+ <div class="cd-tab">Dashboard exploration</div>
780
+ <div class="cd-tab">Landing v2</div>
781
+ <div class="cd-topbar-right">
782
+ <span>100%</span>
783
+ <span class="btn ghost">Export</span>
784
+ <span class="btn">Share</span>
785
+ </div>
786
+ </div>
787
+ <!-- Body: split chat + canvas -->
788
+ <div class="cd-body">
789
+ <div class="cd-chat">
790
+ <div class="cd-msg">
791
+ <div class="cd-avatar user">Y</div>
792
+ <div class="cd-bubble">Make a welcome guide for our company retreat.</div>
793
+ </div>
794
+ <div class="cd-msg">
795
+ <div class="cd-avatar claude">C</div>
796
+ <div class="cd-bubble">I've designed a 1-page landscape welcome guide for your planning day. It includes a branded cover with pine trees, a two-column schedule, and activity cards.<br/><br/><span class="dim">Toggle the Tweaks to adjust accent color, headline size, and density.</span></div>
797
+ </div>
798
+ <div class="cd-tweaks">
799
+ <div class="cd-tweaks-title">Tweaks</div>
800
+ <div class="cd-tweak-row">
801
+ <div class="cd-tweak-label">Accent</div>
802
+ <div class="cd-color-dots">
803
+ <div class="cd-color-dot" style="background:#2D4A3A;" id="cdDot1"></div>
804
+ <div class="cd-color-dot active" style="background:#D97757;" id="cdDot2"></div>
805
+ <div class="cd-color-dot" style="background:#3F5E8A;" id="cdDot3"></div>
806
+ <div class="cd-color-dot" style="background:#8B6F4A;" id="cdDot4"></div>
807
+ </div>
808
+ </div>
809
+ <div class="cd-tweak-row">
810
+ <div class="cd-tweak-label">Headline</div>
811
+ <div class="cd-tweak-track"><div class="cd-tweak-thumb" id="cdThumb1" style="left: 58%;"></div></div>
812
+ </div>
813
+ <div class="cd-tweak-row">
814
+ <div class="cd-tweak-label">Density</div>
815
+ <div class="cd-tweak-track"><div class="cd-tweak-thumb" id="cdThumb2" style="left: 40%;"></div></div>
816
+ </div>
817
+ </div>
818
+ <div class="cd-input">Describe what you want next…</div>
819
+ </div>
820
+ <div class="cd-canvas">
821
+ <div class="cd-poster" id="cdPoster">
822
+ <div class="cd-poster-left">
823
+ <div class="cd-poster-eyebrow">Anthropic Labs · Planning Day</div>
824
+ <div class="cd-poster-title">HEMLARK<br/>RETREAT '26</div>
825
+ <div class="cd-poster-sub">June 14 · Full Day<br/>Pine Valley Lodge</div>
826
+ <div class="cd-poster-pines">
827
+ <div class="cd-pine"></div>
828
+ <div class="cd-pine"></div>
829
+ <div class="cd-pine"></div>
830
+ <div class="cd-pine"></div>
831
+ </div>
832
+ </div>
833
+ <div class="cd-schedule">
834
+ <div class="cd-schedule-title">Schedule</div>
835
+ <div class="cd-schedule-row"><span>Breakfast</span><span class="time">9:00</span></div>
836
+ <div class="cd-schedule-row"><span>Kickoff</span><span class="time">10:00</span></div>
837
+ <div class="cd-schedule-row"><span>Workshops</span><span class="time">10:30</span></div>
838
+ <div class="cd-schedule-row"><span>Lunch</span><span class="time">12:30</span></div>
839
+ <div class="cd-schedule-row"><span>Hike</span><span class="time">14:00</span></div>
840
+ <div class="cd-schedule-row"><span>Dinner</span><span class="time">18:00</span></div>
841
+ </div>
842
+ </div>
843
+ </div>
844
+ </div>
845
+ </div>
846
+ <div class="cd-caption" id="cdCaption">It's beautiful<span class="period">.</span></div>
847
+ </div>
848
+
849
+ <!-- ========== Act 0.5: Pivot ========== -->
850
+ <div class="scene act05" id="act05Pivot">
851
+ <div class="pivot-line" id="pivotLine">
852
+ But it isn't the <span class="accent">future</span>.
853
+ </div>
854
+ </div>
855
+
856
+ <!-- ========== Act 1 ========== -->
857
+ <div class="scene act1" id="act1a">
858
+ <div class="hero-line" id="heroLine">
859
+ Here's to the <span class="accent">Agents</span>.
860
+ </div>
861
+ </div>
862
+
863
+ <div class="scene act1" id="act1b">
864
+ <!-- "Not the ones who click." + abstract mouse -->
865
+ <div class="gui-glyph click" id="glyphClick" style="left: 50%; top: 62%; transform: translate(-50%, -50%);">
866
+ <svg viewBox="0 0 24 24" fill="none">
867
+ <path d="M4 2l6 18 3-8 8-3L4 2z" stroke="rgba(255,255,255,0.55)" stroke-width="1.4" fill="rgba(255,255,255,0.12)" stroke-linejoin="round"/>
868
+ </svg>
869
+ </div>
870
+ <div class="not-line" id="notLine1" style="position: absolute; top: 28%; left: 50%; transform: translateX(-50%); white-space: nowrap;">
871
+ Not the ones who <span class="strike">click</span>.
872
+ </div>
873
+ </div>
874
+
875
+ <div class="scene act1" id="act1c">
876
+ <!-- "Not the ones who drag." + slider -->
877
+ <div class="gui-glyph drag" id="glyphDrag" style="left: 50%; top: 62%; transform: translate(-50%, -50%);">
878
+ <div class="track">
879
+ <div class="fill"></div>
880
+ <div class="thumb" id="sliderThumb"></div>
881
+ </div>
882
+ </div>
883
+ <div class="not-line" id="notLine2" style="position: absolute; top: 28%; left: 50%; transform: translateX(-50%); white-space: nowrap;">
884
+ Not the ones who <span class="strike">drag</span>.
885
+ </div>
886
+ </div>
887
+
888
+ <div class="scene act1" id="act1d">
889
+ <!-- "Not the ones who wait..." + folder window -->
890
+ <div class="gui-glyph folder" id="glyphFolder" style="left: 50%; top: 62%; transform: translate(-50%, -50%);">
891
+ <div class="head">
892
+ <span class="d"></span><span class="d"></span><span class="d"></span>
893
+ </div>
894
+ <div class="row"><span>design-v1.fig</span><span class="meta">42 KB</span></div>
895
+ <div class="row"><span>design-v2-final.fig</span><span class="meta">58 KB</span></div>
896
+ <div class="row"><span>design-v2-FINAL-final.fig</span><span class="meta">61 KB</span></div>
897
+ <div class="row"><span>design-v3.fig</span><span class="meta">65 KB</span></div>
898
+ </div>
899
+ <div class="not-line" id="notLine3" style="position: absolute; top: 22%; left: 50%; transform: translateX(-50%); white-space: nowrap; font-size: 72px;">
900
+ Not the ones who <span class="strike">wait for you to open the file</span>.
901
+ </div>
902
+ </div>
903
+
904
+ <!-- ========== Act 2 ========== -->
905
+ <div class="scene act2" id="act2Terminal">
906
+ <div class="terminal" id="terminal">
907
+ <div class="tty-head">
908
+ <span class="d red"></span>
909
+ <span class="d yellow"></span>
910
+ <span class="d green"></span>
911
+ <span class="tty-title">huashu — claude code</span>
912
+ </div>
913
+ <div class="tty-body">
914
+ <span class="prompt">$</span><span class="typed" id="typed"></span><span class="cursor" id="cursor"></span>
915
+ </div>
916
+ </div>
917
+ </div>
918
+
919
+ <div class="scene" id="act2Gallery">
920
+ <div class="gallery-viewport">
921
+ <div class="gallery-canvas" id="galleryCanvas"></div>
922
+ </div>
923
+ </div>
924
+
925
+ <div class="over-statement" id="overStmt1">
926
+ <div class="text">The ones who design<br/>while you <span class="accent">sleep</span>.</div>
927
+ </div>
928
+
929
+ <div class="over-statement" id="overStmt2">
930
+ <div class="text">The ones who ship<br/>while you're in a <span class="accent">meeting</span>.</div>
931
+ </div>
932
+
933
+ <!-- ========== Act 3 ========== -->
934
+ <div class="scene act3" id="act3Medium">
935
+ <div class="statement-big" id="stmtMedium">
936
+ <span class="accent">Agent</span> is the<br/>new medium.
937
+ </div>
938
+ </div>
939
+
940
+ <div class="scene act3" id="act3Brand">
941
+ <div class="brand-wordmark" id="wordmark">huashu<span class="accent">-</span>design</div>
942
+ <div class="farewell-quote" id="farewell">For them, we built this.</div>
943
+ <div class="farewell-cn" id="farewellCn">· 为 他 们 · 我 们 造 了 这 个 ·</div>
944
+ <div class="brand-url" id="url">huasheng.ai/huashu-design-hero</div>
945
+ </div>
946
+
947
+ </div>
948
+
949
+ <script>
950
+ (function() {
951
+ // ---------- Fit stage ----------
952
+ const stage = document.getElementById('stage');
953
+ function rescale() {
954
+ const s = Math.min(window.innerWidth / 1920, window.innerHeight / 1080);
955
+ stage.style.transform = `translate(-50%, -50%) scale(${s})`;
956
+ }
957
+ rescale();
958
+ window.addEventListener('resize', rescale);
959
+
960
+ const SLIDE_FILES = [
961
+ 'preview-01-cover.png','preview-02-quote.png','preview-03-intro.png','preview-04-toc.png',
962
+ 'preview-05-divider-1.png','preview-06-seldon.png','preview-07-human-psych-limit.png','preview-08-ai-vs-human.png',
963
+ 'preview-09-divider-2.png','preview-10-personas.png','preview-11-four-puzzles.png','preview-12-phenomena-1-2.png',
964
+ 'preview-13-phenomena-3-4.png','preview-14-five-voices.png','preview-15-divider-3.png','preview-16-persona-selection.png',
965
+ 'preview-17-persona-space.png','preview-18-emergent-misalignment.png','preview-19-inoculation.png','preview-20-emotion.png',
966
+ 'preview-21-dosage.png','preview-22-steering.png','preview-23-expression-vs-impact.png','preview-24-concept-injection.png',
967
+ 'preview-25-consciousness-prob.png','preview-26-divider-4.png','preview-27-cot-faithfulness.png','preview-28-alignment-faking.png',
968
+ 'preview-29-divider-5.png','preview-30-open-questions.png','preview-31-giving-back.png','preview-32-closing.png',
969
+ ];
970
+ const BASE = '../../../2026.04-AI心理学/演讲PPT-北大/';
971
+
972
+ // ---------- Build gallery ----------
973
+ const COLS = 8, ROWS = 6, COUNT = COLS * ROWS;
974
+ const galleryCanvas = document.getElementById('galleryCanvas');
975
+ const galleryCards = [];
976
+ for (let i = 0; i < COUNT; i++) {
977
+ const slideIdx = i % 32;
978
+ const card = document.createElement('div');
979
+ card.className = 'gallery-card';
980
+ const zIdx = Math.sin(i * 1.7) * 22 + Math.cos(i * 0.73) * 14;
981
+ if (zIdx > 12) card.classList.add('depth-near');
982
+ else if (zIdx < -12) card.classList.add('depth-far');
983
+ const img = document.createElement('img');
984
+ img.src = BASE + SLIDE_FILES[slideIdx];
985
+ img.onerror = () => { img.src = BASE + 'preview-01-cover.png'; };
986
+ card.appendChild(img);
987
+ galleryCanvas.appendChild(card);
988
+ galleryCards.push(card);
989
+ }
990
+ for (let i = 0; i < 32; i++) {
991
+ const im = new Image();
992
+ im.src = BASE + SLIDE_FILES[i];
993
+ }
994
+
995
+ // ---------- Easings ----------
996
+ const easeOut = t => 1 - Math.pow(1 - t, 3);
997
+ const expoOut = t => (t <= 0) ? 0 : (t >= 1) ? 1 : 1 - Math.pow(2, -10 * t);
998
+ const easeInOut = t => t < 0.5 ? 4*t*t*t : 1 - Math.pow(-2*t+2, 3)/2;
999
+ function lerp(time, start, end, fromV, toV, easing) {
1000
+ if (time <= start) return fromV;
1001
+ if (time >= end) return toV;
1002
+ let p = (time - start) / (end - start);
1003
+ if (easing) p = easing(p);
1004
+ return fromV + (toV - fromV) * p;
1005
+ }
1006
+ function clampLerp(time, start, end) {
1007
+ if (time <= start) return 0;
1008
+ if (time >= end) return 1;
1009
+ return (time - start) / (end - start);
1010
+ }
1011
+
1012
+ // ---------- Timeline (30s) ----------
1013
+ const T = {
1014
+ DURATION: 30.0,
1015
+
1016
+ // ===== Act 0: Claude Design 致敬 (0 - 4s) =====
1017
+ a0_in: [0.3, 1.2], // browser fade + scale in
1018
+ a0_hold: [1.2, 3.4], // tweaks 自动动
1019
+ a0_out: [3.4, 4.0], // browser 退场
1020
+
1021
+ cd_tweak_anim: [1.4, 3.3], // tweaks thumb 自动拖动窗口
1022
+ cd_accent_switch: [2.1, 2.5], // accent color dot 切换到深绿
1023
+
1024
+ cd_caption_in: [1.6, 2.2],
1025
+ cd_caption_hold:[2.2, 3.3],
1026
+ cd_caption_out: [3.3, 3.8],
1027
+
1028
+ // ===== Act 0.5: Pivot (3.9 - 5.2s) =====
1029
+ a05_in: [3.9, 4.6],
1030
+ a05_hold: [4.6, 4.9],
1031
+ a05_out: [4.9, 5.3],
1032
+
1033
+ // ===== Act 1 (shifted +5s) =====
1034
+ a1a_in: [5.3, 6.3], // "Here's to the Agents."
1035
+ a1a_hold:[6.3, 7.8],
1036
+ a1a_out: [7.8, 8.3],
1037
+
1038
+ a1b_in: [8.2, 8.9], // "Not the ones who click."
1039
+ a1b_hold:[8.9, 10.3],
1040
+ a1b_out: [10.3, 10.8],
1041
+
1042
+ a1c_in: [10.7, 11.3], // "Not the ones who drag."
1043
+ a1c_hold:[11.3, 12.5],
1044
+ a1c_out: [12.5, 13.0],
1045
+
1046
+ a1d_in: [12.9, 13.5], // "Not the ones who wait..."
1047
+ a1d_hold:[13.5, 15.2],
1048
+ a1d_out: [15.2, 15.7],
1049
+
1050
+ // ===== Act 2 (shifted +5s) =====
1051
+ a2tty_in: [15.6, 16.2], // terminal in
1052
+ a2type: [16.4, 18.6],
1053
+ a2tty_out:[18.9, 19.4],
1054
+
1055
+ a2gal_in: [19.1, 19.9], // gallery ripple start
1056
+ ripple: [19.9, 21.6],
1057
+ panStart: 20.2,
1058
+ a2gal_out:[25.5, 26.2],
1059
+
1060
+ // Overlay statements on gallery
1061
+ stmt1: [21.7, 23.4], // "design while you sleep"
1062
+ stmt2: [23.7, 25.4], // "ship while you're in a meeting"
1063
+
1064
+ // ===== Act 3 (shifted +5s) =====
1065
+ a3med_in: [26.1, 27.0], // "Agent is the new medium"
1066
+ a3med_hold:[27.0, 28.0],
1067
+ a3med_out:[28.0, 28.4],
1068
+
1069
+ a3brand_in: [28.3, 29.0],
1070
+ brand_morph: [28.7, 29.4],
1071
+ a3farewell_in: [29.0, 29.6],
1072
+ a3cn_in: [29.3, 29.8],
1073
+ a3url_in: [29.5, 30.0],
1074
+ };
1075
+
1076
+ // ---------- Elements ----------
1077
+ const scenes = {
1078
+ a0: document.getElementById('act0ClaudeDesign'),
1079
+ a05: document.getElementById('act05Pivot'),
1080
+ a1a: document.getElementById('act1a'),
1081
+ a1b: document.getElementById('act1b'),
1082
+ a1c: document.getElementById('act1c'),
1083
+ a1d: document.getElementById('act1d'),
1084
+ a2tty: document.getElementById('act2Terminal'),
1085
+ a2gal: document.getElementById('act2Gallery'),
1086
+ a3med: document.getElementById('act3Medium'),
1087
+ a3brand: document.getElementById('act3Brand'),
1088
+ };
1089
+ const cdBrowser = document.getElementById('cdBrowser');
1090
+ const cdCaption = document.getElementById('cdCaption');
1091
+ const cdThumb1 = document.getElementById('cdThumb1');
1092
+ const cdThumb2 = document.getElementById('cdThumb2');
1093
+ const cdDot1 = document.getElementById('cdDot1');
1094
+ const cdDot2 = document.getElementById('cdDot2');
1095
+ const cdPoster = document.getElementById('cdPoster');
1096
+ const pivotLine = document.getElementById('pivotLine');
1097
+ const overs = {
1098
+ stmt1: document.getElementById('overStmt1'),
1099
+ stmt2: document.getElementById('overStmt2'),
1100
+ };
1101
+ const heroLine = document.getElementById('heroLine');
1102
+ const notLine1 = document.getElementById('notLine1');
1103
+ const notLine2 = document.getElementById('notLine2');
1104
+ const notLine3 = document.getElementById('notLine3');
1105
+ const glyphClick = document.getElementById('glyphClick');
1106
+ const glyphDrag = document.getElementById('glyphDrag');
1107
+ const sliderThumb = document.getElementById('sliderThumb');
1108
+ const glyphFolder = document.getElementById('glyphFolder');
1109
+ const terminal = document.getElementById('terminal');
1110
+ const typed = document.getElementById('typed');
1111
+ const cursor = document.getElementById('cursor');
1112
+ const stmtMedium = document.getElementById('stmtMedium');
1113
+ const wordmark = document.getElementById('wordmark');
1114
+ const farewell = document.getElementById('farewell');
1115
+ const farewellCn = document.getElementById('farewellCn');
1116
+ const urlEl = document.getElementById('url');
1117
+ const watermark = document.getElementById('watermark');
1118
+
1119
+ const COMMAND = '/huashu-design 做一份发布会PPT';
1120
+
1121
+ // ---------- Gallery transforms ----------
1122
+ const GALLERY_TILT = 'perspective(2400px) rotateX(14deg) rotateY(-10deg) rotateZ(-2deg)';
1123
+ const GALLERY_SCALE = 0.94;
1124
+ function galleryTransform(dx, dy, extraScale = 1) {
1125
+ return `translate(-50%, -50%) translate(${dx}px, ${dy}px) scale(${GALLERY_SCALE * extraScale}) ${GALLERY_TILT}`;
1126
+ }
1127
+
1128
+ // ---------- Helpers to show/hide scenes ----------
1129
+ function showScene(key, opacity) {
1130
+ const el = scenes[key];
1131
+ if (opacity > 0.001) el.classList.add('visible');
1132
+ else el.classList.remove('visible');
1133
+ el.style.opacity = opacity;
1134
+ }
1135
+
1136
+ function showOver(key, opacity) {
1137
+ const el = overs[key];
1138
+ el.style.opacity = opacity;
1139
+ }
1140
+
1141
+ // ---------- Render ----------
1142
+ function render(t) {
1143
+ // ============ Act 0: Claude Design 致敬 ============
1144
+ if (t < T.a0_out[1]) {
1145
+ let op;
1146
+ if (t < T.a0_in[1]) op = lerp(t, T.a0_in[0], T.a0_in[1], 0, 1, expoOut);
1147
+ else if (t < T.a0_out[0]) op = 1;
1148
+ else op = lerp(t, T.a0_out[0], T.a0_out[1], 1, 0, easeOut);
1149
+ showScene('a0', op);
1150
+
1151
+ // Browser: subtle breathing scale + exit shrink
1152
+ const scaleIn = lerp(t, T.a0_in[0], T.a0_in[1], 0.94, 1.0, expoOut);
1153
+ let scaleOut = 1.0;
1154
+ let blurOut = 0;
1155
+ if (t >= T.a0_out[0]) {
1156
+ const p = clampLerp(t, T.a0_out[0], T.a0_out[1]);
1157
+ scaleOut = 1.0 - 0.08 * p;
1158
+ blurOut = 6 * p;
1159
+ }
1160
+ const finalScale = Math.min(scaleIn, scaleOut);
1161
+ cdBrowser.style.transform = `translate(-50%, -50%) scale(${finalScale})`;
1162
+ cdBrowser.style.filter = blurOut > 0.1 ? `blur(${blurOut}px)` : '';
1163
+
1164
+ // Tweaks thumb 自动拖动(模拟用户在调节)
1165
+ const tw = clampLerp(t, T.cd_tweak_anim[0], T.cd_tweak_anim[1]);
1166
+ // Headline slider: 58% → 72% → 62%
1167
+ let headlinePct;
1168
+ if (tw < 0.5) headlinePct = 58 + (72 - 58) * easeInOut(tw * 2);
1169
+ else headlinePct = 72 + (62 - 72) * easeInOut((tw - 0.5) * 2);
1170
+ cdThumb1.style.left = headlinePct + '%';
1171
+ // Density slider: 40% → 55%
1172
+ const densityPct = 40 + 15 * easeInOut(tw);
1173
+ cdThumb2.style.left = densityPct + '%';
1174
+
1175
+ // Accent 从橙切换到深绿(模拟用户在选色)
1176
+ const switched = t >= T.cd_accent_switch[0];
1177
+ if (switched) {
1178
+ cdDot1.classList.add('active');
1179
+ cdDot2.classList.remove('active');
1180
+ // Poster 颜色跟着变
1181
+ cdPoster.style.background = 'var(--cd-green)';
1182
+ } else {
1183
+ cdDot1.classList.remove('active');
1184
+ cdDot2.classList.add('active');
1185
+ cdPoster.style.background = '#B85D3D';
1186
+ }
1187
+
1188
+ // Caption "It's beautiful."
1189
+ let capOp = 0;
1190
+ if (t >= T.cd_caption_in[0] && t < T.cd_caption_out[1]) {
1191
+ if (t < T.cd_caption_in[1]) capOp = clampLerp(t, T.cd_caption_in[0], T.cd_caption_in[1]);
1192
+ else if (t < T.cd_caption_out[0]) capOp = 1;
1193
+ else capOp = 1 - clampLerp(t, T.cd_caption_out[0], T.cd_caption_out[1]);
1194
+ }
1195
+ const capRise = lerp(t, T.cd_caption_in[0], T.cd_caption_in[1], 14, 0, expoOut);
1196
+ cdCaption.style.opacity = capOp;
1197
+ cdCaption.style.transform = `translateX(-50%) translateY(${capRise}px)`;
1198
+ } else {
1199
+ showScene('a0', 0);
1200
+ }
1201
+
1202
+ // ============ Act 0.5: Pivot — "But it isn't the future." ============
1203
+ if (t >= T.a05_in[0] - 0.1 && t < T.a05_out[1]) {
1204
+ let op;
1205
+ if (t < T.a05_in[1]) op = lerp(t, T.a05_in[0], T.a05_in[1], 0, 1, expoOut);
1206
+ else if (t < T.a05_out[0]) op = 1;
1207
+ else op = lerp(t, T.a05_out[0], T.a05_out[1], 1, 0, easeOut);
1208
+ showScene('a05', op);
1209
+
1210
+ const rise = lerp(t, T.a05_in[0], T.a05_in[1], 16, 0, expoOut);
1211
+ pivotLine.style.transform = `translate3d(0, ${rise}px, 0)`;
1212
+
1213
+ // Subtle weight morph on "But it isn't the future."
1214
+ const morph = expoOut(clampLerp(t, T.a05_in[0], T.a05_in[1] + 0.3));
1215
+ const w = 120 + (300 - 120) * morph;
1216
+ pivotLine.style.fontVariationSettings = `"wght" ${w.toFixed(0)}`;
1217
+ pivotLine.style.fontWeight = Math.round(w);
1218
+ } else {
1219
+ showScene('a05', 0);
1220
+ }
1221
+
1222
+ // ============ Act 1a: "Here's to the Agents." ============
1223
+ if (t >= T.a1a_in[0] - 0.1 && t < T.a1a_out[1]) {
1224
+ let op;
1225
+ if (t < T.a1a_in[1]) op = lerp(t, T.a1a_in[0], T.a1a_in[1], 0, 1, expoOut);
1226
+ else if (t < T.a1a_out[0]) op = 1;
1227
+ else op = lerp(t, T.a1a_out[0], T.a1a_out[1], 1, 0, easeOut);
1228
+ showScene('a1a', op);
1229
+
1230
+ // Weight morph 100 → 400 on "Here's to the Agents."
1231
+ const morph = expoOut(clampLerp(t, T.a1a_in[0], T.a1a_in[1] + 0.6));
1232
+ const w = 100 + (400 - 100) * morph;
1233
+ heroLine.style.fontVariationSettings = `"wght" ${w.toFixed(0)}`;
1234
+ heroLine.style.fontWeight = Math.round(w);
1235
+
1236
+ // Subtle rise
1237
+ const rise = lerp(t, T.a1a_in[0], T.a1a_in[1], 18, 0, expoOut);
1238
+ heroLine.style.transform = `translate3d(0, ${rise}px, 0)`;
1239
+ } else {
1240
+ showScene('a1a', 0);
1241
+ }
1242
+
1243
+ // ============ Act 1b: Not the ones who click. ============
1244
+ if (t >= T.a1b_in[0] - 0.1 && t < T.a1b_out[1]) {
1245
+ let op;
1246
+ if (t < T.a1b_in[1]) op = lerp(t, T.a1b_in[0], T.a1b_in[1], 0, 1, expoOut);
1247
+ else if (t < T.a1b_out[0]) op = 1;
1248
+ else op = lerp(t, T.a1b_out[0], T.a1b_out[1], 1, 0, easeOut);
1249
+ showScene('a1b', op);
1250
+
1251
+ // Animate the click glyph: appear, then trigger click ring + shake
1252
+ const glyphIn = clampLerp(t, T.a1b_in[0] + 0.15, T.a1b_in[1]);
1253
+ glyphClick.style.opacity = expoOut(glyphIn);
1254
+
1255
+ // Shake at mid-hold
1256
+ const clickT = t - (T.a1b_in[1] + 0.3);
1257
+ if (clickT > 0 && clickT < 0.4) {
1258
+ glyphClick.style.transform = `translate(-50%, -50%) translate(${Math.sin(clickT * 60) * 3}px, 0)`;
1259
+ } else {
1260
+ glyphClick.style.transform = `translate(-50%, -50%)`;
1261
+ }
1262
+
1263
+ // Strike the word "click" at halfway through hold
1264
+ const strikeOn = t >= T.a1b_in[1] + 0.5;
1265
+ notLine1.classList.toggle('struck', strikeOn);
1266
+ } else {
1267
+ showScene('a1b', 0);
1268
+ glyphClick.style.opacity = 0;
1269
+ }
1270
+
1271
+ // ============ Act 1c: Not the ones who drag. ============
1272
+ if (t >= T.a1c_in[0] - 0.1 && t < T.a1c_out[1]) {
1273
+ let op;
1274
+ if (t < T.a1c_in[1]) op = lerp(t, T.a1c_in[0], T.a1c_in[1], 0, 1, expoOut);
1275
+ else if (t < T.a1c_out[0]) op = 1;
1276
+ else op = lerp(t, T.a1c_out[0], T.a1c_out[1], 1, 0, easeOut);
1277
+ showScene('a1c', op);
1278
+
1279
+ const glyphIn = clampLerp(t, T.a1c_in[0] + 0.15, T.a1c_in[1]);
1280
+ glyphDrag.style.opacity = expoOut(glyphIn);
1281
+
1282
+ // Animate slider thumb 30% → 70% position during hold
1283
+ const dragT = clampLerp(t, T.a1c_hold[0], T.a1c_hold[1] - 0.2);
1284
+ const leftPct = 30 + 40 * easeInOut(dragT);
1285
+ sliderThumb.style.left = leftPct + '%';
1286
+ const fillEl = glyphDrag.querySelector('.fill');
1287
+ if (fillEl) fillEl.style.width = leftPct + '%';
1288
+ } else {
1289
+ showScene('a1c', 0);
1290
+ glyphDrag.style.opacity = 0;
1291
+ }
1292
+
1293
+ // ============ Act 1d: Not the ones who wait for you to open the file. ============
1294
+ if (t >= T.a1d_in[0] - 0.1 && t < T.a1d_out[1]) {
1295
+ let op;
1296
+ if (t < T.a1d_in[1]) op = lerp(t, T.a1d_in[0], T.a1d_in[1], 0, 1, expoOut);
1297
+ else if (t < T.a1d_out[0]) op = 1;
1298
+ else op = lerp(t, T.a1d_out[0], T.a1d_out[1], 1, 0, easeOut);
1299
+ showScene('a1d', op);
1300
+
1301
+ const glyphIn = clampLerp(t, T.a1d_in[0] + 0.15, T.a1d_in[1]);
1302
+ glyphFolder.style.opacity = expoOut(glyphIn);
1303
+ } else {
1304
+ showScene('a1d', 0);
1305
+ glyphFolder.style.opacity = 0;
1306
+ }
1307
+
1308
+ // ============ Act 2 Terminal ============
1309
+ if (t >= T.a2tty_in[0] - 0.1 && t < T.a2tty_out[1]) {
1310
+ let op;
1311
+ if (t < T.a2tty_in[1]) op = lerp(t, T.a2tty_in[0], T.a2tty_in[1], 0, 1, expoOut);
1312
+ else if (t < T.a2tty_out[0]) op = 1;
1313
+ else op = lerp(t, T.a2tty_out[0], T.a2tty_out[1], 1, 0, easeOut);
1314
+ showScene('a2tty', op);
1315
+
1316
+ const rise = lerp(t, T.a2tty_in[0], T.a2tty_in[1], 28, 0, expoOut);
1317
+ terminal.style.transform = `translate3d(0, ${rise}px, 0)`;
1318
+
1319
+ // Typing
1320
+ if (t < T.a2type[0]) typed.textContent = '';
1321
+ else if (t < T.a2type[1]) {
1322
+ const p = (t - T.a2type[0]) / (T.a2type[1] - T.a2type[0]);
1323
+ const n = Math.floor(p * COMMAND.length);
1324
+ typed.textContent = COMMAND.slice(0, n);
1325
+ } else typed.textContent = COMMAND;
1326
+
1327
+ cursor.style.opacity = (Math.floor(t * 2.5) % 2 === 0) ? 1 : 0.25;
1328
+ } else {
1329
+ showScene('a2tty', 0);
1330
+ }
1331
+
1332
+ // ============ Act 2 Gallery + statements ============
1333
+ if (t >= T.a2gal_in[0] - 0.1 && t < T.a2gal_out[1]) {
1334
+ let op;
1335
+ if (t < T.a2gal_in[1]) op = lerp(t, T.a2gal_in[0], T.a2gal_in[1], 0, 1, expoOut);
1336
+ else if (t < T.a2gal_out[0]) op = 1;
1337
+ else op = lerp(t, T.a2gal_out[0], T.a2gal_out[1], 1, 0, easeOut);
1338
+ showScene('a2gal', op);
1339
+
1340
+ // Pan
1341
+ const panT = Math.max(0, t - T.panStart);
1342
+ const panX = Math.sin(panT * 0.12) * 180 - panT * 6;
1343
+ const panY = Math.cos(panT * 0.09) * 100 - panT * 4;
1344
+ const cX = Math.max(-600, Math.min(600, panX));
1345
+ const cY = Math.max(-400, Math.min(400, panY));
1346
+
1347
+ // Ripple
1348
+ const inRipple = t < T.ripple[1];
1349
+ const rippleP = clampLerp(t, T.ripple[0], T.ripple[1]);
1350
+ const galScale = inRipple ? (1.25 - 0.31 * expoOut(rippleP)) : 1.0;
1351
+ galleryCanvas.style.transform = galleryTransform(cX, cY, galScale);
1352
+
1353
+ // Per-card ripple entry
1354
+ galleryCards.forEach((card, i) => {
1355
+ let entryOp = 1;
1356
+ if (inRipple) {
1357
+ const col = i % COLS, row = Math.floor(i / COLS);
1358
+ const dc = col - (COLS - 1) / 2, dr = row - (ROWS - 1) / 2;
1359
+ const dist = Math.sqrt(dc * dc + dr * dr);
1360
+ const maxDist = Math.sqrt(((COLS - 1) / 2) ** 2 + ((ROWS - 1) / 2) ** 2);
1361
+ const delay = (dist / maxDist) * 0.8;
1362
+ const localT = Math.max(0, (t - T.ripple[0] - delay) / 0.7);
1363
+ entryOp = expoOut(Math.min(1, localT));
1364
+ }
1365
+
1366
+ // Dim when statements are active
1367
+ const stmt1Active = t >= T.stmt1[0] && t < T.stmt1[1];
1368
+ const stmt2Active = t >= T.stmt2[0] && t < T.stmt2[1];
1369
+ const dimAmount = stmt1Active || stmt2Active ? 0.55 : 0;
1370
+
1371
+ if (dimAmount > 0) {
1372
+ card.style.opacity = entryOp * (1 - dimAmount);
1373
+ card.style.filter = `brightness(${1 - 0.3 * dimAmount}) saturate(${1 - 0.4 * dimAmount})`;
1374
+ } else {
1375
+ card.style.opacity = entryOp < 1 ? entryOp : '';
1376
+ card.style.filter = '';
1377
+ }
1378
+ });
1379
+ } else {
1380
+ showScene('a2gal', 0);
1381
+ }
1382
+
1383
+ // Overlay statement 1: "design while you sleep"
1384
+ {
1385
+ let op = 0;
1386
+ if (t >= T.stmt1[0] && t < T.stmt1[1]) {
1387
+ const inP = expoOut(clampLerp(t, T.stmt1[0], T.stmt1[0] + 0.4));
1388
+ const outP = easeOut(clampLerp(t, T.stmt1[1] - 0.4, T.stmt1[1]));
1389
+ op = inP * (1 - outP);
1390
+ }
1391
+ showOver('stmt1', op);
1392
+ }
1393
+ // Overlay statement 2: "ship while meeting"
1394
+ {
1395
+ let op = 0;
1396
+ if (t >= T.stmt2[0] && t < T.stmt2[1]) {
1397
+ const inP = expoOut(clampLerp(t, T.stmt2[0], T.stmt2[0] + 0.4));
1398
+ const outP = easeOut(clampLerp(t, T.stmt2[1] - 0.4, T.stmt2[1]));
1399
+ op = inP * (1 - outP);
1400
+ }
1401
+ showOver('stmt2', op);
1402
+ }
1403
+
1404
+ // ============ Act 3 Medium ============
1405
+ if (t >= T.a3med_in[0] - 0.1 && t < T.a3med_out[1]) {
1406
+ let op;
1407
+ if (t < T.a3med_in[1]) op = lerp(t, T.a3med_in[0], T.a3med_in[1], 0, 1, expoOut);
1408
+ else if (t < T.a3med_out[0]) op = 1;
1409
+ else op = lerp(t, T.a3med_out[0], T.a3med_out[1], 1, 0, easeOut);
1410
+ showScene('a3med', op);
1411
+
1412
+ const morph = expoOut(clampLerp(t, T.a3med_in[0], T.a3med_in[1] + 0.4));
1413
+ const w = 100 + (300 - 100) * morph;
1414
+ stmtMedium.style.fontVariationSettings = `"wght" ${w.toFixed(0)}`;
1415
+ stmtMedium.style.fontWeight = Math.round(w);
1416
+
1417
+ const rise = lerp(t, T.a3med_in[0], T.a3med_in[1], 24, 0, expoOut);
1418
+ stmtMedium.style.transform = `translate3d(0, ${rise}px, 0)`;
1419
+ } else {
1420
+ showScene('a3med', 0);
1421
+ }
1422
+
1423
+ // ============ Act 3 Brand ============
1424
+ if (t >= T.a3brand_in[0] - 0.1) {
1425
+ const op = clampLerp(t, T.a3brand_in[0], T.a3brand_in[1]);
1426
+ showScene('a3brand', op);
1427
+
1428
+ // Wordmark weight morph
1429
+ const morphP = expoOut(clampLerp(t, T.brand_morph[0], T.brand_morph[1]));
1430
+ const wght = 100 + (700 - 100) * morphP;
1431
+ wordmark.style.fontVariationSettings = `"wght" ${wght.toFixed(0)}`;
1432
+ wordmark.style.fontWeight = Math.round(wght);
1433
+
1434
+ const wRise = lerp(t, T.a3brand_in[0], T.a3brand_in[1], 20, 0, expoOut);
1435
+ wordmark.style.transform = `translate3d(0, ${wRise}px, 0)`;
1436
+
1437
+ // Farewell quote
1438
+ const fOp = clampLerp(t, T.a3farewell_in[0], T.a3farewell_in[1]);
1439
+ const fRise = lerp(t, T.a3farewell_in[0], T.a3farewell_in[1], 12, 0, expoOut);
1440
+ farewell.style.opacity = fOp;
1441
+ farewell.style.transform = `translate3d(0, ${fRise}px, 0)`;
1442
+
1443
+ // CN subtitle
1444
+ const cnOp = clampLerp(t, T.a3cn_in[0], T.a3cn_in[1]);
1445
+ farewellCn.style.opacity = cnOp;
1446
+
1447
+ // URL
1448
+ const uOp = clampLerp(t, T.a3url_in[0], T.a3url_in[1]);
1449
+ urlEl.style.opacity = uOp;
1450
+ } else {
1451
+ showScene('a3brand', 0);
1452
+ }
1453
+
1454
+ // Watermark: visible during Act 2-3
1455
+ if (t >= T.a2tty_in[0] && t < T.DURATION - 0.2) {
1456
+ watermark.classList.add('visible');
1457
+ } else {
1458
+ watermark.classList.remove('visible');
1459
+ }
1460
+ }
1461
+
1462
+ // ---------- Driver ----------
1463
+ let manualT = null;
1464
+ let startMs = null;
1465
+ let hasFinishedOnce = false;
1466
+ function tick(now) {
1467
+ if (manualT != null) render(manualT);
1468
+ else {
1469
+ if (startMs == null) startMs = now;
1470
+ const elapsed = (now - startMs) / 1000;
1471
+ const recording = window.__recording === true;
1472
+ let t;
1473
+ if (recording) {
1474
+ // Non-looping: clamp at DURATION, hold on final frame
1475
+ t = Math.min(elapsed, T.DURATION - 0.001);
1476
+ if (elapsed >= T.DURATION && !hasFinishedOnce) hasFinishedOnce = true;
1477
+ } else {
1478
+ t = elapsed % T.DURATION;
1479
+ }
1480
+ render(t);
1481
+ }
1482
+ requestAnimationFrame(tick);
1483
+ }
1484
+ requestAnimationFrame(tick);
1485
+
1486
+ // For frame-accurate rendering
1487
+ window.__setTime = function(t) {
1488
+ manualT = t;
1489
+ render(t);
1490
+ };
1491
+ window.__resume = function() { manualT = null; startMs = null; };
1492
+ window.__duration = T.DURATION;
1493
+ window.__render = render;
1494
+ window.__ready = true;
1495
+ })();
1496
+ </script>
1497
+ </body>
1498
+ </html>