wizz-method 1.0.3 → 1.1.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 +318 -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 +47 -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 +257 -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 +145 -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,1055 @@
1
+ <!doctype html>
2
+ <html lang="zh-Hans">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>c2-slides-pptx · 中文版 · v2</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;
19
+ --accent-deep: #B85D3D;
20
+ --cd-bg: #F5F4F0;
21
+ --cd-panel: #FFFFFF;
22
+ --cd-ink: #1A1918;
23
+ --cd-dim: #8B867E;
24
+ --cd-hair: rgba(0,0,0,0.08);
25
+
26
+ --serif-cn: "Noto Serif SC", "Source Han Serif SC", serif;
27
+ --serif-en: "Source Serif 4", Georgia, serif;
28
+ --sans: "Inter", -apple-system, "PingFang SC", system-ui, sans-serif;
29
+ --mono: "JetBrains Mono", "SF Mono", ui-monospace, monospace;
30
+ }
31
+ html, body {
32
+ margin: 0; padding: 0;
33
+ background: #000;
34
+ overflow: hidden;
35
+ font-family: var(--sans);
36
+ color: var(--ink);
37
+ -webkit-font-smoothing: antialiased;
38
+ }
39
+ * { box-sizing: border-box; }
40
+
41
+ .stage {
42
+ position: fixed;
43
+ top: 50%; left: 50%;
44
+ width: 1920px; height: 1080px;
45
+ transform-origin: center center;
46
+ background: var(--bg);
47
+ overflow: hidden;
48
+ }
49
+
50
+ /* Film grain (2% opacity) */
51
+ .stage::after {
52
+ content: '';
53
+ position: absolute; inset: 0;
54
+ background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
55
+ opacity: 0.025;
56
+ pointer-events: none;
57
+ mix-blend-mode: overlay;
58
+ z-index: 200;
59
+ }
60
+
61
+ .watermark-tl {
62
+ position: absolute;
63
+ top: 40px; left: 56px;
64
+ font-family: var(--mono);
65
+ font-size: 14px;
66
+ letter-spacing: 0.2em;
67
+ text-transform: uppercase;
68
+ color: rgba(255,255,255,0.16);
69
+ z-index: 180;
70
+ pointer-events: none;
71
+ }
72
+
73
+ /* ====== Beat 1: browser-fullscreen deck ====== */
74
+ .beat1 {
75
+ position: absolute; inset: 0;
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ opacity: 1;
80
+ }
81
+
82
+ .deck-window {
83
+ width: 1400px;
84
+ height: 788px;
85
+ border-radius: 14px;
86
+ background: #101010;
87
+ border: 1px solid var(--hairline);
88
+ box-shadow: 0 40px 120px -30px rgba(217,119,87,0.18),
89
+ 0 0 0 1px rgba(255,255,255,0.03);
90
+ position: relative;
91
+ will-change: transform, opacity;
92
+ }
93
+ .deck-window .deck-body-wrap {
94
+ position: absolute;
95
+ top: 44px; left: 0; right: 0; bottom: 0;
96
+ border-radius: 0 0 14px 14px;
97
+ overflow: hidden;
98
+ background: #0A0A0A;
99
+ }
100
+ .deck-chrome {
101
+ height: 44px;
102
+ background: #161616;
103
+ border-bottom: 1px solid var(--hairline);
104
+ display: flex;
105
+ align-items: center;
106
+ padding: 0 18px;
107
+ gap: 14px;
108
+ }
109
+ .deck-chrome .traffic {
110
+ display: flex; gap: 8px;
111
+ }
112
+ .deck-chrome .traffic .d {
113
+ width: 11px; height: 11px; border-radius: 50%;
114
+ background: var(--hairline);
115
+ }
116
+ .deck-chrome .url {
117
+ flex: 1;
118
+ text-align: center;
119
+ font-family: var(--mono);
120
+ font-size: 12px;
121
+ color: var(--muted);
122
+ letter-spacing: 0.02em;
123
+ }
124
+ .deck-chrome .page-count {
125
+ font-family: var(--mono);
126
+ font-size: 13px;
127
+ color: var(--accent);
128
+ letter-spacing: 0.08em;
129
+ min-width: 60px;
130
+ text-align: right;
131
+ }
132
+
133
+ .deck-slide {
134
+ position: absolute;
135
+ top: 0; left: 0;
136
+ width: 100%;
137
+ height: 100%;
138
+ background: #0A0A0A;
139
+ display: flex;
140
+ flex-direction: column;
141
+ justify-content: center;
142
+ padding: 96px 120px;
143
+ will-change: transform, opacity;
144
+ }
145
+ .deck-slide .eyebrow {
146
+ font-family: var(--mono);
147
+ font-size: 14px;
148
+ color: var(--accent);
149
+ letter-spacing: 0.24em;
150
+ text-transform: uppercase;
151
+ margin-bottom: 24px;
152
+ }
153
+ .deck-slide h1 {
154
+ font-family: var(--serif-cn);
155
+ font-size: 92px;
156
+ font-weight: 500;
157
+ line-height: 1.08;
158
+ color: var(--ink);
159
+ margin: 0 0 28px 0;
160
+ letter-spacing: -0.01em;
161
+ }
162
+ .deck-slide .sub {
163
+ font-family: var(--sans);
164
+ font-size: 22px;
165
+ color: var(--ink-60);
166
+ line-height: 1.5;
167
+ max-width: 780px;
168
+ }
169
+ .deck-slide .hairline {
170
+ margin-top: 48px;
171
+ width: 80px;
172
+ height: 2px;
173
+ background: var(--accent);
174
+ }
175
+
176
+ /* Key press indicator — sits below the window */
177
+ .key-hint {
178
+ position: absolute;
179
+ top: calc(50% + 440px);
180
+ left: 50%;
181
+ transform: translateX(-50%);
182
+ display: flex;
183
+ align-items: center;
184
+ gap: 14px;
185
+ font-family: var(--mono);
186
+ font-size: 13px;
187
+ color: var(--muted);
188
+ letter-spacing: 0.14em;
189
+ opacity: 0;
190
+ will-change: opacity;
191
+ z-index: 30;
192
+ }
193
+ .key-hint .kbd {
194
+ display: inline-flex;
195
+ align-items: center; justify-content: center;
196
+ width: 36px; height: 36px;
197
+ border: 1px solid var(--hairline);
198
+ border-radius: 6px;
199
+ background: rgba(255,255,255,0.04);
200
+ color: var(--ink-80);
201
+ font-size: 14px;
202
+ will-change: background, color, transform;
203
+ }
204
+
205
+ /* ====== Beat 2: split screen — HTML left, PowerPoint right ====== */
206
+ .beat2 {
207
+ position: absolute; inset: 0;
208
+ display: flex;
209
+ align-items: center;
210
+ justify-content: center;
211
+ gap: 56px;
212
+ opacity: 0;
213
+ padding: 0 96px;
214
+ will-change: opacity;
215
+ }
216
+
217
+ .split-window {
218
+ width: 820px;
219
+ height: 580px;
220
+ border-radius: 12px;
221
+ overflow: hidden;
222
+ position: relative;
223
+ will-change: transform, opacity;
224
+ }
225
+
226
+ /* Left: HTML deck shrunk */
227
+ .split-left {
228
+ background: #0A0A0A;
229
+ border: 1px solid var(--hairline);
230
+ box-shadow: 0 30px 80px -30px rgba(0,0,0,0.6);
231
+ }
232
+ .split-left .mini-chrome {
233
+ height: 30px;
234
+ background: #161616;
235
+ border-bottom: 1px solid var(--hairline);
236
+ display: flex;
237
+ align-items: center;
238
+ padding: 0 12px;
239
+ gap: 8px;
240
+ }
241
+ .split-left .mini-chrome .d {
242
+ width: 8px; height: 8px; border-radius: 50%;
243
+ background: var(--hairline);
244
+ }
245
+ .split-left .mini-chrome .label {
246
+ margin-left: 10px;
247
+ font-family: var(--mono);
248
+ font-size: 11px;
249
+ color: var(--muted);
250
+ letter-spacing: 0.08em;
251
+ }
252
+ .split-left .mini-slide {
253
+ padding: 56px 64px;
254
+ height: calc(100% - 30px);
255
+ display: flex;
256
+ flex-direction: column;
257
+ justify-content: center;
258
+ }
259
+ .split-left .mini-eye {
260
+ font-family: var(--mono);
261
+ font-size: 11px;
262
+ color: var(--accent);
263
+ letter-spacing: 0.22em;
264
+ text-transform: uppercase;
265
+ margin-bottom: 16px;
266
+ }
267
+ .split-left .mini-title {
268
+ font-family: var(--serif-cn);
269
+ font-size: 54px;
270
+ font-weight: 500;
271
+ line-height: 1.1;
272
+ color: var(--ink);
273
+ letter-spacing: -0.01em;
274
+ }
275
+ .split-left .mini-sub {
276
+ margin-top: 20px;
277
+ font-family: var(--sans);
278
+ font-size: 15px;
279
+ color: var(--ink-60);
280
+ line-height: 1.5;
281
+ }
282
+ .split-left .mini-hair {
283
+ margin-top: 28px;
284
+ width: 52px; height: 2px;
285
+ background: var(--accent);
286
+ }
287
+
288
+ /* Right: PowerPoint chrome */
289
+ .split-right {
290
+ background: #F3F2EE;
291
+ border: 1px solid rgba(0,0,0,0.2);
292
+ box-shadow: 0 30px 80px -30px rgba(0,0,0,0.6);
293
+ }
294
+ .ppt-titlebar {
295
+ height: 32px;
296
+ background: #C44A36;
297
+ display: flex;
298
+ align-items: center;
299
+ padding: 0 14px;
300
+ gap: 10px;
301
+ color: #fff;
302
+ font-family: var(--sans);
303
+ font-size: 12px;
304
+ font-weight: 500;
305
+ letter-spacing: 0.02em;
306
+ }
307
+ .ppt-titlebar .pp-logo {
308
+ width: 18px; height: 18px;
309
+ background: #fff;
310
+ border-radius: 2px;
311
+ display: inline-flex;
312
+ align-items: center; justify-content: center;
313
+ color: #C44A36;
314
+ font-weight: 700;
315
+ font-size: 11px;
316
+ font-family: var(--sans);
317
+ }
318
+ .ppt-titlebar .title-text { opacity: 0.92; }
319
+ .ppt-titlebar .win-dots {
320
+ margin-left: auto;
321
+ display: flex; gap: 10px;
322
+ opacity: 0.7;
323
+ }
324
+ .ppt-titlebar .win-dots span {
325
+ width: 10px; height: 10px; border: 1px solid rgba(255,255,255,0.7);
326
+ border-radius: 1px;
327
+ }
328
+
329
+ .ppt-toolbar {
330
+ height: 40px;
331
+ background: #EAE8E3;
332
+ border-bottom: 1px solid rgba(0,0,0,0.08);
333
+ display: flex;
334
+ align-items: center;
335
+ padding: 0 14px;
336
+ gap: 14px;
337
+ font-family: var(--sans);
338
+ font-size: 12px;
339
+ color: #4A4843;
340
+ }
341
+ .ppt-toolbar .tool {
342
+ display: flex; align-items: center; gap: 6px;
343
+ padding: 4px 10px;
344
+ border-radius: 4px;
345
+ }
346
+ .ppt-toolbar .tool.active {
347
+ background: #fff;
348
+ border: 1px solid rgba(0,0,0,0.08);
349
+ color: var(--cd-ink);
350
+ }
351
+ .ppt-toolbar .tool .ico {
352
+ width: 14px; height: 14px;
353
+ border: 1px solid currentColor;
354
+ border-radius: 2px;
355
+ opacity: 0.7;
356
+ }
357
+ .ppt-toolbar .font-name {
358
+ padding: 4px 10px;
359
+ background: #fff;
360
+ border: 1px solid rgba(0,0,0,0.12);
361
+ border-radius: 3px;
362
+ min-width: 140px;
363
+ font-size: 12px;
364
+ color: var(--cd-ink);
365
+ display: flex; align-items: center; justify-content: space-between;
366
+ }
367
+ .ppt-toolbar .divider {
368
+ width: 1px; height: 20px;
369
+ background: rgba(0,0,0,0.08);
370
+ }
371
+
372
+ /* PPT canvas (the actual slide) */
373
+ .ppt-canvas {
374
+ height: calc(100% - 32px - 40px);
375
+ background: #D8D4CB;
376
+ padding: 24px;
377
+ position: relative;
378
+ overflow: hidden;
379
+ }
380
+ .ppt-slide {
381
+ background: #0A0A0A;
382
+ border-radius: 3px;
383
+ width: 100%;
384
+ height: 100%;
385
+ padding: 56px 64px;
386
+ display: flex;
387
+ flex-direction: column;
388
+ justify-content: center;
389
+ position: relative;
390
+ box-shadow: 0 4px 16px rgba(0,0,0,0.18);
391
+ }
392
+ .ppt-slide .ppt-eye {
393
+ font-family: var(--mono);
394
+ font-size: 11px;
395
+ color: var(--accent);
396
+ letter-spacing: 0.22em;
397
+ text-transform: uppercase;
398
+ margin-bottom: 16px;
399
+ }
400
+ .ppt-slide .ppt-title-frame {
401
+ position: relative;
402
+ display: inline-block;
403
+ padding: 6px 10px;
404
+ margin: -6px -10px;
405
+ border-radius: 2px;
406
+ transition: box-shadow 0.12s ease;
407
+ align-self: flex-start;
408
+ max-width: fit-content;
409
+ min-width: 160px;
410
+ }
411
+ .ppt-slide .ppt-title-frame.selected {
412
+ box-shadow:
413
+ 0 0 0 1px rgba(217,119,87,0.0),
414
+ inset 0 0 0 0 rgba(217,119,87,0.0);
415
+ }
416
+ .ppt-slide .ppt-title-frame.editing {
417
+ box-shadow:
418
+ 0 0 0 1.5px var(--accent),
419
+ 0 0 0 3px rgba(217,119,87,0.2);
420
+ }
421
+ .ppt-slide .ppt-title {
422
+ font-family: var(--serif-cn);
423
+ font-size: 54px;
424
+ font-weight: 500;
425
+ line-height: 1.1;
426
+ color: var(--ink);
427
+ letter-spacing: -0.01em;
428
+ display: inline;
429
+ position: relative;
430
+ }
431
+ .ppt-slide .edit-caret {
432
+ display: inline-block;
433
+ width: 2px;
434
+ height: 52px;
435
+ background: var(--accent);
436
+ vertical-align: -8px;
437
+ margin: 0 2px;
438
+ opacity: 0;
439
+ }
440
+ .ppt-slide .ppt-sub {
441
+ margin-top: 20px;
442
+ font-family: var(--sans);
443
+ font-size: 15px;
444
+ color: var(--ink-60);
445
+ line-height: 1.5;
446
+ }
447
+ .ppt-slide .ppt-hair {
448
+ margin-top: 28px;
449
+ width: 52px; height: 2px;
450
+ background: var(--accent);
451
+ }
452
+ /* Selection handles (corners) */
453
+ .ppt-slide .ppt-title-frame .handle {
454
+ position: absolute;
455
+ width: 8px; height: 8px;
456
+ background: var(--accent);
457
+ border: 1.5px solid #fff;
458
+ border-radius: 1px;
459
+ opacity: 0;
460
+ pointer-events: none;
461
+ }
462
+ .ppt-slide .ppt-title-frame .handle.tl { top: -4px; left: -4px; }
463
+ .ppt-slide .ppt-title-frame .handle.tr { top: -4px; right: -4px; }
464
+ .ppt-slide .ppt-title-frame .handle.bl { bottom: -4px; left: -4px; }
465
+ .ppt-slide .ppt-title-frame .handle.br { bottom: -4px; right: -4px; }
466
+ .ppt-slide .ppt-title-frame.selected .handle { opacity: 1; }
467
+ .ppt-slide .ppt-title-frame.editing .handle { opacity: 0; }
468
+
469
+ /* Mouse cursor */
470
+ .cursor {
471
+ position: absolute;
472
+ top: 0; left: 0;
473
+ width: 22px; height: 30px;
474
+ pointer-events: none;
475
+ z-index: 50;
476
+ opacity: 0;
477
+ will-change: transform, opacity;
478
+ filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
479
+ }
480
+ .cursor svg { width: 100%; height: 100%; }
481
+
482
+ /* Double-click ripple */
483
+ .dblclick-ripple {
484
+ position: absolute;
485
+ top: 0; left: 0;
486
+ width: 20px; height: 20px;
487
+ border: 2px solid var(--accent);
488
+ border-radius: 50%;
489
+ pointer-events: none;
490
+ z-index: 45;
491
+ opacity: 0;
492
+ will-change: transform, opacity;
493
+ }
494
+
495
+ /* Connection line between two windows */
496
+ .connector {
497
+ position: absolute;
498
+ top: 50%;
499
+ left: 50%;
500
+ transform: translate(-50%, -50%);
501
+ width: 56px;
502
+ height: 120px;
503
+ display: flex;
504
+ align-items: center;
505
+ justify-content: center;
506
+ opacity: 0;
507
+ will-change: opacity;
508
+ z-index: 10;
509
+ }
510
+ .connector svg { width: 100%; height: 100%; }
511
+ .connector-label {
512
+ position: absolute;
513
+ top: calc(50% + 72px);
514
+ left: 50%;
515
+ transform: translateX(-50%);
516
+ font-family: var(--mono);
517
+ font-size: 12px;
518
+ color: var(--accent);
519
+ letter-spacing: 0.12em;
520
+ white-space: nowrap;
521
+ opacity: 0;
522
+ will-change: opacity;
523
+ }
524
+
525
+ /* Stage labels above windows */
526
+ .split-label {
527
+ position: absolute;
528
+ top: -48px;
529
+ left: 0;
530
+ font-family: var(--mono);
531
+ font-size: 16px;
532
+ color: var(--ink-60);
533
+ letter-spacing: 0.18em;
534
+ text-transform: uppercase;
535
+ opacity: 0;
536
+ will-change: opacity;
537
+ white-space: nowrap;
538
+ }
539
+ .split-label .em { color: var(--accent); }
540
+
541
+ /* ====== Brand Reveal (米色面板 · hero-v10 系列 signature) ====== */
542
+ .brand-panel {
543
+ position: absolute;
544
+ inset: 0;
545
+ background: var(--cd-bg);
546
+ transform: translateY(100%);
547
+ will-change: transform;
548
+ z-index: 80;
549
+ }
550
+ .brand-reveal {
551
+ position: absolute;
552
+ inset: 0;
553
+ z-index: 81;
554
+ display: flex;
555
+ flex-direction: column;
556
+ align-items: center;
557
+ justify-content: center;
558
+ opacity: 0;
559
+ pointer-events: none;
560
+ will-change: opacity;
561
+ }
562
+ .brand-reveal .brand-wordmark {
563
+ font-family: var(--serif-en);
564
+ font-size: 72px;
565
+ font-weight: 100;
566
+ font-variation-settings: "wght" 100;
567
+ letter-spacing: -0.01em;
568
+ color: var(--cd-ink);
569
+ line-height: 1;
570
+ opacity: 0;
571
+ will-change: opacity, transform, font-variation-settings;
572
+ }
573
+ .brand-reveal .brand-wordmark .accent {
574
+ color: var(--accent);
575
+ font-weight: inherit;
576
+ }
577
+ .brand-reveal .brand-line {
578
+ width: 0;
579
+ height: 2px;
580
+ background: var(--accent);
581
+ margin-top: 60px;
582
+ will-change: width;
583
+ }
584
+
585
+ </style>
586
+ </head>
587
+ <body>
588
+
589
+ <div class="stage" id="stage">
590
+ <div class="watermark-tl">HUASHU · DESIGN</div>
591
+
592
+ <!-- ====== Beat 1 ====== -->
593
+ <div class="beat1" id="beat1">
594
+ <div class="deck-window" id="deckWindow">
595
+ <div class="deck-chrome">
596
+ <div class="traffic"><span class="d"></span><span class="d"></span><span class="d"></span></div>
597
+ <div class="url">localhost:8080 / deck · 全屏演讲</div>
598
+ <div class="page-count" id="pageCount">3 / 12</div>
599
+ </div>
600
+
601
+ <div class="deck-body-wrap">
602
+ <div class="deck-slide" id="slideA">
603
+ <div class="eyebrow">AI 心理学 · 第 3 节</div>
604
+ <h1>心智的<br/>可塑性</h1>
605
+ <div class="sub">Agent 不是工具,它有自己的偏好。</div>
606
+ <div class="hairline"></div>
607
+ </div>
608
+
609
+ <div class="deck-slide" id="slideB" style="opacity:0; transform: translateX(60px);">
610
+ <div class="eyebrow">AI 心理学 · 第 4 节</div>
611
+ <h1>注入与引导</h1>
612
+ <div class="sub">参数里藏着一个世界。</div>
613
+ <div class="hairline"></div>
614
+ </div>
615
+ </div>
616
+ </div>
617
+
618
+ <div class="key-hint" id="keyHint">
619
+ <span>键盘翻页</span>
620
+ <span class="kbd" id="kbdKey">→</span>
621
+ </div>
622
+ </div>
623
+
624
+ <!-- ====== Beat 2: Split Screen ====== -->
625
+ <div class="beat2" id="beat2">
626
+ <!-- LEFT: HTML deck -->
627
+ <div class="split-col" style="position: relative;">
628
+ <div class="split-label" id="labelLeft">HTML · <span class="em">只读演示</span></div>
629
+ <div class="split-window split-left" id="splitLeft">
630
+ <div class="mini-chrome">
631
+ <span class="d"></span><span class="d"></span><span class="d"></span>
632
+ <span class="label">localhost:8080/deck</span>
633
+ </div>
634
+ <div class="mini-slide">
635
+ <div class="mini-eye">AI 心理学 · 第 3 节</div>
636
+ <div class="mini-title">心智的<br/>可塑性</div>
637
+ <div class="mini-sub">Agent 不是工具,它有自己的偏好。</div>
638
+ <div class="mini-hair"></div>
639
+ </div>
640
+ </div>
641
+ </div>
642
+
643
+ <!-- Connector -->
644
+ <div class="connector" id="connector">
645
+ <svg viewBox="0 0 56 120" fill="none">
646
+ <line x1="4" y1="60" x2="52" y2="60" stroke="#D97757" stroke-width="1.5" stroke-dasharray="4 4"/>
647
+ <polygon points="44,54 54,60 44,66" fill="#D97757"/>
648
+ </svg>
649
+ </div>
650
+ <div class="connector-label" id="connectorLabel">html2pptx.js</div>
651
+
652
+ <!-- RIGHT: PowerPoint -->
653
+ <div class="split-col" style="position: relative;">
654
+ <div class="split-label" id="labelRight">PowerPoint · <span class="em">真文本框可改</span></div>
655
+ <div class="split-window split-right" id="splitRight">
656
+ <div class="ppt-titlebar">
657
+ <div class="pp-logo">P</div>
658
+ <div class="title-text">AI-心理学-演讲.pptx - PowerPoint</div>
659
+ <div class="win-dots"><span></span><span></span><span></span></div>
660
+ </div>
661
+ <div class="ppt-toolbar">
662
+ <div class="tool">
663
+ <span class="ico"></span>
664
+ <span class="font-name"><span id="fontName">Noto Serif SC</span><span style="opacity:0.5">▾</span></span>
665
+ </div>
666
+ <div class="divider"></div>
667
+ <div class="tool"><span style="font-weight:700">B</span></div>
668
+ <div class="tool" style="font-style:italic">I</div>
669
+ <div class="tool" style="text-decoration:underline">U</div>
670
+ <div class="divider"></div>
671
+ <div class="tool active"><span class="ico" style="background:#D97757;border-color:#D97757"></span></div>
672
+ </div>
673
+
674
+ <div class="ppt-canvas">
675
+ <div class="ppt-slide">
676
+ <div class="ppt-eye">AI 心理学 · 第 3 节</div>
677
+ <div class="ppt-title-frame" id="titleFrame">
678
+ <span class="handle tl"></span>
679
+ <span class="handle tr"></span>
680
+ <span class="handle bl"></span>
681
+ <span class="handle br"></span>
682
+ <span class="ppt-title" id="titleText">心智的可塑性</span><span class="edit-caret" id="caret"></span>
683
+ </div>
684
+ <div class="ppt-sub">Agent 不是工具,它有自己的偏好。</div>
685
+ <div class="ppt-hair"></div>
686
+ </div>
687
+
688
+ <!-- Cursor arrow -->
689
+ <div class="cursor" id="cursor">
690
+ <svg viewBox="0 0 22 30" fill="none">
691
+ <path d="M2 2 L2 22 L8 17 L12 26 L16 24 L12 15 L20 14 Z"
692
+ fill="#1A1918" stroke="#fff" stroke-width="1.2" stroke-linejoin="round"/>
693
+ </svg>
694
+ </div>
695
+ <!-- Double-click ripple -->
696
+ <div class="dblclick-ripple" id="ripple"></div>
697
+ </div>
698
+ </div>
699
+ </div>
700
+ </div>
701
+
702
+ <!-- ====== Brand Reveal (米色面板 · hero-v10 signature) ====== -->
703
+ <div class="brand-panel" id="brandPanel"></div>
704
+ <div class="brand-reveal" id="brandReveal">
705
+ <div class="brand-wordmark" id="wordmark">huashu<span class="accent">-</span>design</div>
706
+ <div class="brand-line" id="brandLine"></div>
707
+ </div>
708
+
709
+ </div>
710
+
711
+ <script>
712
+ (function() {
713
+ // ---------- Fit stage ----------
714
+ const stage = document.getElementById('stage');
715
+ function rescale() {
716
+ const s = Math.min(window.innerWidth / 1920, window.innerHeight / 1080);
717
+ stage.style.transform = `translate(-50%, -50%) scale(${s})`;
718
+ }
719
+ rescale();
720
+ window.addEventListener('resize', rescale);
721
+
722
+ // ---------- Easings ----------
723
+ const clamp = (v, a, b) => Math.max(a, Math.min(b, v));
724
+ const expoOut = t => (t <= 0) ? 0 : (t >= 1) ? 1 : 1 - Math.pow(2, -10 * t);
725
+ const expoIn = t => (t <= 0) ? 0 : (t >= 1) ? 1 : Math.pow(2, 10 * (t - 1));
726
+ const easeOut = t => 1 - Math.pow(1 - t, 3);
727
+ const easeInOut = t => t < 0.5 ? 4*t*t*t : 1 - Math.pow(-2*t+2, 3)/2;
728
+ function lerp(time, start, end, fromV, toV, ease) {
729
+ if (time <= start) return fromV;
730
+ if (time >= end) return toV;
731
+ let p = (time - start) / (end - start);
732
+ if (ease) p = ease(p);
733
+ return fromV + (toV - fromV) * p;
734
+ }
735
+ function clampLerp(time, start, end) {
736
+ if (time <= start) return 0;
737
+ if (time >= end) return 1;
738
+ return (time - start) / (end - start);
739
+ }
740
+
741
+ // ---------- Timeline (10s total) ----------
742
+ const T = {
743
+ DURATION: 10.0,
744
+
745
+ // Beat 1: 0 - 2s
746
+ deckIn: [0.15, 0.9], // browser fade+rise
747
+ keyHintIn: [0.6, 1.1],
748
+ keyPress: [1.25, 1.4], // arrow key highlight
749
+ slideFlip: [1.3, 1.9], // slide A→B
750
+ beat1Out: [2.0, 2.4],
751
+
752
+ // Beat 2: split screen: 2.2 - 8.0s
753
+ beat2In: [2.3, 2.9],
754
+ labelsIn: [3.0, 3.5],
755
+
756
+ cursorIn: [3.1, 3.4], // cursor arrives on right side
757
+ cursorMove1: [3.4, 4.1], // cursor moves to title
758
+ dblclick: [4.1, 4.3], // double click
759
+ frameSelect: [4.15, 4.35], // frame shows handles
760
+ frameEdit: [4.4, 4.55], // frame enters edit mode
761
+ caretShowStart: 4.5,
762
+ textDelete: [4.6, 5.4], // delete original text char by char
763
+ textRetype: [5.5, 7.2], // type new text char by char
764
+ commitEdit: [7.3, 7.5], // exit edit mode
765
+
766
+ connectorIn: [3.3, 3.9],
767
+ beat2Out: [8.0, 8.3], // main scene fades to 0 (0.3s)
768
+
769
+ // Brand Reveal (米色面板 · hero-v10 signature): 8.3 - 10s
770
+ // panelRise 与 beat2Out 微重叠 0.05s,避免黑屏间隙
771
+ panelRise: [8.25, 8.7], // 米色面板 translateY 100%→0 (expoOut)
772
+ wordmarkIn: [8.7, 9.3], // wordmark opacity 0→1 + translateY 20→0 + weight 100→500 (0.6s, expoOut)
773
+ brandLineIn: [9.3, 9.7], // brand-line expand 0→280px (0.4s, cubicOut)
774
+ brandHold: [9.7, 10.0], // hold (0.3s)
775
+ };
776
+
777
+ // ---------- Elements ----------
778
+ const beat1 = document.getElementById('beat1');
779
+ const beat2 = document.getElementById('beat2');
780
+ const brandReveal = document.getElementById('brandReveal');
781
+ const deckWindow = document.getElementById('deckWindow');
782
+ const pageCount = document.getElementById('pageCount');
783
+ const slideA = document.getElementById('slideA');
784
+ const slideB = document.getElementById('slideB');
785
+ const keyHint = document.getElementById('keyHint');
786
+ const kbdKey = document.getElementById('kbdKey');
787
+ const splitLeft = document.getElementById('splitLeft');
788
+ const splitRight = document.getElementById('splitRight');
789
+ const labelLeft = document.getElementById('labelLeft');
790
+ const labelRight = document.getElementById('labelRight');
791
+ const connector = document.getElementById('connector');
792
+ const connectorLabel = document.getElementById('connectorLabel');
793
+ const cursor = document.getElementById('cursor');
794
+ const ripple = document.getElementById('ripple');
795
+ const titleFrame = document.getElementById('titleFrame');
796
+ const titleText = document.getElementById('titleText');
797
+ const caret = document.getElementById('caret');
798
+ const panel = document.getElementById('brandPanel');
799
+ const wordmark = document.getElementById('wordmark');
800
+ const brandLine = document.getElementById('brandLine');
801
+
802
+ // Text to animate
803
+ const ORIG_TEXT = '心智的可塑性';
804
+ const NEW_TEXT = '心智 · 可塑性';
805
+
806
+ // ---------- Render ----------
807
+ function render(t) {
808
+
809
+ /* ======= Beat 1 ======= */
810
+ let beat1Op;
811
+ if (t < T.beat1Out[0]) {
812
+ beat1Op = lerp(t, T.deckIn[0], T.deckIn[1], 0, 1, expoOut);
813
+ } else {
814
+ beat1Op = 1 - clampLerp(t, T.beat1Out[0], T.beat1Out[1]);
815
+ }
816
+ beat1.style.opacity = beat1Op;
817
+ beat1.style.visibility = beat1Op > 0.01 ? 'visible' : 'hidden';
818
+
819
+ // Deck window rise
820
+ const deckRise = lerp(t, T.deckIn[0], T.deckIn[1], 24, 0, expoOut);
821
+ deckWindow.style.transform = `translate3d(0, ${deckRise}px, 0)`;
822
+
823
+ // Key hint appear
824
+ const khOp = clampLerp(t, T.keyHintIn[0], T.keyHintIn[1]);
825
+ keyHint.style.opacity = khOp;
826
+
827
+ // Key press flash
828
+ const kpActive = t >= T.keyPress[0] && t < T.keyPress[1] + 0.2;
829
+ if (kpActive) {
830
+ const kp = clampLerp(t, T.keyPress[0], T.keyPress[1]);
831
+ kbdKey.style.background = `rgba(217,119,87,${0.9 * (1 - kp * 0.4)})`;
832
+ kbdKey.style.color = '#fff';
833
+ kbdKey.style.transform = `scale(${1 - 0.08 * kp})`;
834
+ } else {
835
+ kbdKey.style.background = '';
836
+ kbdKey.style.color = '';
837
+ kbdKey.style.transform = '';
838
+ }
839
+
840
+ // Slide flip A→B
841
+ if (t >= T.slideFlip[0] && t < T.slideFlip[1] + 0.2) {
842
+ const sp = clampLerp(t, T.slideFlip[0], T.slideFlip[1]);
843
+ const eased = expoOut(sp);
844
+ slideA.style.opacity = 1 - eased;
845
+ slideA.style.transform = `translateX(${-60 * eased}px)`;
846
+ slideB.style.opacity = eased;
847
+ slideB.style.transform = `translateX(${60 * (1 - eased)}px)`;
848
+ // Update page count at midway
849
+ if (sp > 0.5) pageCount.textContent = '4 / 12';
850
+ else pageCount.textContent = '3 / 12';
851
+ } else if (t >= T.slideFlip[1]) {
852
+ slideA.style.opacity = 0;
853
+ slideB.style.opacity = 1;
854
+ slideB.style.transform = 'translateX(0)';
855
+ pageCount.textContent = '4 / 12';
856
+ } else {
857
+ slideA.style.opacity = 1;
858
+ slideA.style.transform = 'translateX(0)';
859
+ slideB.style.opacity = 0;
860
+ pageCount.textContent = '3 / 12';
861
+ }
862
+
863
+ /* ======= Beat 2 ======= */
864
+ let beat2Op = 0;
865
+ if (t >= T.beat2In[0] && t < T.beat2Out[1]) {
866
+ if (t < T.beat2In[1]) beat2Op = clampLerp(t, T.beat2In[0], T.beat2In[1]);
867
+ else if (t < T.beat2Out[0]) beat2Op = 1;
868
+ else beat2Op = 1 - clampLerp(t, T.beat2Out[0], T.beat2Out[1]);
869
+ }
870
+ beat2.style.opacity = beat2Op;
871
+ beat2.style.visibility = beat2Op > 0.01 ? 'visible' : 'hidden';
872
+
873
+ // Windows rise in
874
+ const splitInP = clampLerp(t, T.beat2In[0], T.beat2In[1]);
875
+ const splitRise = lerp(t, T.beat2In[0], T.beat2In[1], 28, 0, expoOut);
876
+ splitLeft.style.transform = `translate3d(${-8 * (1 - expoOut(splitInP))}px, ${splitRise}px, 0)`;
877
+ splitRight.style.transform = `translate3d(${8 * (1 - expoOut(splitInP))}px, ${splitRise}px, 0)`;
878
+
879
+ // Labels
880
+ const labelOp = clampLerp(t, T.labelsIn[0], T.labelsIn[1]);
881
+ labelLeft.style.opacity = labelOp * 0.7;
882
+ labelRight.style.opacity = labelOp * 0.85;
883
+
884
+ // Connector
885
+ const connOp = clampLerp(t, T.connectorIn[0], T.connectorIn[1]);
886
+ connector.style.opacity = connOp;
887
+ connectorLabel.style.opacity = connOp * 0.9;
888
+
889
+ /* === Cursor movement === */
890
+ // Cursor positions (relative to .ppt-canvas, which is inside split-right)
891
+ // Canvas starts at (0,0), size ~820 × 508 (580 - 32 - 40)
892
+ // Title sits around x=84 y=110 (inside .ppt-slide padding 56/64)
893
+ // We'll place cursor with absolute positioning inside .ppt-canvas.
894
+
895
+ // Entry point: off to the right bottom of canvas
896
+ const P_ENTER = { x: 720, y: 420 };
897
+ const P_TITLE = { x: 250, y: 170 }; // on the title
898
+
899
+ let cursorOp = 0;
900
+ let cx = P_ENTER.x, cy = P_ENTER.y;
901
+
902
+ if (t >= T.cursorIn[0] && t < T.beat2Out[0]) {
903
+ cursorOp = 1;
904
+ // Phase 1: appear (pop in with slight scale)
905
+ const inP = clampLerp(t, T.cursorIn[0], T.cursorIn[1]);
906
+ cursorOp = expoOut(inP);
907
+
908
+ // Phase 2: move to title
909
+ if (t >= T.cursorMove1[0]) {
910
+ const mp = clampLerp(t, T.cursorMove1[0], T.cursorMove1[1]);
911
+ const e = easeInOut(mp);
912
+ cx = P_ENTER.x + (P_TITLE.x - P_ENTER.x) * e;
913
+ cy = P_ENTER.y + (P_TITLE.y - P_ENTER.y) * e;
914
+ } else {
915
+ cx = P_ENTER.x;
916
+ cy = P_ENTER.y;
917
+ }
918
+
919
+ // After double-click, slight jitter toward caret position during typing
920
+ if (t >= T.textRetype[0] && t < T.textRetype[1]) {
921
+ cx = P_TITLE.x + 6;
922
+ cy = P_TITLE.y - 2;
923
+ }
924
+ } else if (t >= T.beat2Out[0]) {
925
+ cursorOp = 1 - clampLerp(t, T.beat2Out[0], T.beat2Out[1]);
926
+ }
927
+ cursor.style.opacity = cursorOp;
928
+ cursor.style.transform = `translate(${cx}px, ${cy}px)`;
929
+
930
+ /* === Double-click ripple === */
931
+ // Ripple pulses twice at T.dblclick start
932
+ let rippleVisible = false;
933
+ if (t >= T.dblclick[0] && t < T.dblclick[0] + 0.7) {
934
+ const dt = t - T.dblclick[0];
935
+ // Two rapid pulses
936
+ const pulse1 = clamp(dt / 0.25, 0, 1);
937
+ const pulse2 = clamp((dt - 0.15) / 0.25, 0, 1);
938
+ const scale1 = 0.4 + pulse1 * 1.4;
939
+ const scale2 = 0.4 + pulse2 * 1.4;
940
+ const op1 = 1 - pulse1;
941
+ const op2 = dt > 0.15 ? (1 - pulse2) : 0;
942
+ // Render as single element: use larger of the two
943
+ const scale = Math.max(scale1, scale2);
944
+ const op = Math.max(op1, op2);
945
+ ripple.style.opacity = op;
946
+ ripple.style.transform = `translate(-50%, -50%) translate(${P_TITLE.x + 6}px, ${P_TITLE.y + 26}px) scale(${scale})`;
947
+ rippleVisible = true;
948
+ }
949
+ if (!rippleVisible) ripple.style.opacity = 0;
950
+
951
+ /* === Frame states: selected → editing === */
952
+ titleFrame.classList.remove('selected', 'editing');
953
+ if (t >= T.frameSelect[0] && t < T.frameEdit[0]) {
954
+ titleFrame.classList.add('selected');
955
+ } else if (t >= T.frameEdit[0] && t < T.commitEdit[1]) {
956
+ titleFrame.classList.add('editing');
957
+ }
958
+
959
+ /* === Text animation: delete → retype === */
960
+ let displayedText = ORIG_TEXT;
961
+ let caretOp = 0;
962
+
963
+ if (t < T.textDelete[0]) {
964
+ displayedText = ORIG_TEXT;
965
+ caretOp = t >= T.caretShowStart ? 1 : 0;
966
+ } else if (t < T.textDelete[1]) {
967
+ // Delete: remove chars from end
968
+ const dp = clampLerp(t, T.textDelete[0], T.textDelete[1]);
969
+ const charsToRemove = Math.floor(dp * ORIG_TEXT.length);
970
+ displayedText = ORIG_TEXT.slice(0, ORIG_TEXT.length - charsToRemove);
971
+ caretOp = 1;
972
+ } else if (t < T.textRetype[0]) {
973
+ displayedText = '';
974
+ caretOp = 1;
975
+ } else if (t < T.textRetype[1]) {
976
+ // Retype new text
977
+ const rp = clampLerp(t, T.textRetype[0], T.textRetype[1]);
978
+ const charsToShow = Math.floor(rp * NEW_TEXT.length);
979
+ displayedText = NEW_TEXT.slice(0, charsToShow);
980
+ caretOp = 1;
981
+ } else if (t < T.commitEdit[1]) {
982
+ displayedText = NEW_TEXT;
983
+ // Caret blinks while still in edit mode
984
+ caretOp = (Math.floor(t * 2) % 2 === 0) ? 1 : 0.3;
985
+ } else {
986
+ displayedText = NEW_TEXT;
987
+ caretOp = 0;
988
+ }
989
+
990
+ // Blinking during idle-in-edit phases (when not actively typing/deleting)
991
+ if (t >= T.caretShowStart && t < T.textDelete[0]) {
992
+ caretOp = (Math.floor((t - T.caretShowStart) * 3) % 2 === 0) ? 1 : 0.35;
993
+ }
994
+
995
+ titleText.textContent = displayedText;
996
+ caret.style.opacity = caretOp;
997
+
998
+ /* ======= Brand Reveal (米色面板 · hero-v10 signature) ======= */
999
+ // Panel rises from bottom (米色面板 #F5F4F0)
1000
+ const panelP = clampLerp(t, T.panelRise[0], T.panelRise[1]);
1001
+ panel.style.transform = `translateY(${(1 - expoOut(panelP)) * 100}%)`;
1002
+
1003
+ // brand-reveal container visible once panel starts rising
1004
+ brandReveal.style.opacity = panelP > 0.01 ? 1 : 0;
1005
+
1006
+ // Wordmark: opacity 0→1 + translateY 20→0 + weight 100→500 (expoOut)
1007
+ const wmP = clampLerp(t, T.wordmarkIn[0], T.wordmarkIn[1]);
1008
+ const wmEased = expoOut(wmP);
1009
+ wordmark.style.opacity = wmEased;
1010
+ const wmRise = (1 - wmEased) * 20;
1011
+ wordmark.style.transform = `translate3d(0, ${wmRise}px, 0)`;
1012
+ const w = 100 + (500 - 100) * wmEased;
1013
+ wordmark.style.fontVariationSettings = `"wght" ${w.toFixed(0)}`;
1014
+ wordmark.style.fontWeight = Math.round(w);
1015
+
1016
+ // Brand line expand 0→280px (cubicOut)
1017
+ const lineP = clampLerp(t, T.brandLineIn[0], T.brandLineIn[1]);
1018
+ const cubicOut = x => 1 - Math.pow(1 - x, 3);
1019
+ brandLine.style.width = (280 * cubicOut(lineP)) + 'px';
1020
+ }
1021
+
1022
+ // ---------- Driver ----------
1023
+ let manualT = null;
1024
+ let startMs = null;
1025
+ let hasFinished = false;
1026
+ function tick(now) {
1027
+ if (manualT != null) render(manualT);
1028
+ else {
1029
+ if (startMs == null) startMs = now;
1030
+ const elapsed = (now - startMs) / 1000;
1031
+ const recording = window.__recording === true;
1032
+ let t;
1033
+ if (recording) {
1034
+ t = Math.min(elapsed, T.DURATION - 0.001);
1035
+ if (elapsed >= T.DURATION) hasFinished = true;
1036
+ } else {
1037
+ t = elapsed % T.DURATION;
1038
+ }
1039
+ render(t);
1040
+ }
1041
+ requestAnimationFrame(tick);
1042
+ }
1043
+ // Force first-frame render synchronously, THEN set ready
1044
+ render(0);
1045
+ requestAnimationFrame(tick);
1046
+
1047
+ window.__setTime = function(t) { manualT = t; render(t); };
1048
+ window.__resume = function() { manualT = null; startMs = null; };
1049
+ window.__duration = T.DURATION;
1050
+ window.__render = render;
1051
+ window.__ready = true;
1052
+ })();
1053
+ </script>
1054
+ </body>
1055
+ </html>