takomi 2.1.45 → 2.5.4

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 (679) hide show
  1. package/.pi/README.md +5 -5
  2. package/.pi/agents/architect.md +2 -2
  3. package/.pi/agents/designer.md +2 -2
  4. package/.pi/agents/worker.md +32 -0
  5. package/.pi/extensions/oauth-router/README.md +3 -3
  6. package/.pi/extensions/oauth-router/config.ts +34 -34
  7. package/.pi/extensions/oauth-router/report-ui.ts +205 -205
  8. package/.pi/extensions/oauth-router/scripts/vibe-verify.py +5 -5
  9. package/.pi/extensions/takomi-context-manager/diagnostics.ts +560 -560
  10. package/.pi/extensions/takomi-context-manager/model-policy-gate.ts +15 -103
  11. package/.pi/extensions/takomi-context-manager/policy-tools.ts +93 -93
  12. package/.pi/extensions/takomi-context-manager/skill-categories.d.ts +11 -11
  13. package/.pi/extensions/takomi-context-manager/skill-tools.ts +208 -208
  14. package/.pi/extensions/takomi-context-manager/tool-renderers.ts +112 -112
  15. package/.pi/extensions/takomi-runtime/command-text.ts +5 -4
  16. package/.pi/extensions/takomi-runtime/commands.ts +17 -17
  17. package/.pi/extensions/takomi-runtime/gate-provenance.ts +24 -24
  18. package/.pi/extensions/takomi-runtime/index.ts +278 -86
  19. package/.pi/extensions/takomi-runtime/model-routing-defaults.ts +168 -232
  20. package/.pi/extensions/takomi-runtime/profile.ts +9 -8
  21. package/.pi/extensions/takomi-runtime/routing-policy.ts +84 -65
  22. package/.pi/extensions/takomi-runtime/shared.ts +7 -30
  23. package/.pi/extensions/takomi-runtime/tool-renderers.ts +234 -234
  24. package/.pi/extensions/takomi-runtime/workflow-catalog.ts +54 -54
  25. package/.pi/extensions/takomi-subagents/agents.ts +5 -0
  26. package/.pi/extensions/takomi-subagents/async-lifecycle.ts +401 -401
  27. package/.pi/extensions/takomi-subagents/detached-results.ts +940 -940
  28. package/.pi/extensions/takomi-subagents/index.ts +4 -0
  29. package/.pi/extensions/takomi-subagents/native-render.ts +253 -250
  30. package/.pi/extensions/takomi-subagents/pi-subagents-engine.ts +7 -1
  31. package/.pi/extensions/takomi-subagents/result-heartbeat.ts +55 -55
  32. package/.pi/extensions/takomi-subagents/subagent-ux.ts +162 -162
  33. package/.pi/extensions/takomi-subagents/tool-runner.ts +65 -1
  34. package/.pi/settings.json +39 -36
  35. package/.pi/takomi/model-routing.md +6 -0
  36. package/.pi/takomi-profile.json +8 -4
  37. package/README.md +1 -1
  38. package/assets/.agent/skills/embedded-captions/CATALOG.md +93 -93
  39. package/assets/.agent/skills/embedded-captions/SKILL.md +286 -286
  40. package/assets/.agent/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -35
  41. package/assets/.agent/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -115
  42. package/assets/.agent/skills/embedded-captions/assets/fonts/char-widths.json +2211 -2211
  43. package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +241 -241
  44. package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +241 -241
  45. package/assets/.agent/skills/embedded-captions/dna/README.md +148 -148
  46. package/assets/.agent/skills/embedded-captions/dna/chrome.json +68 -68
  47. package/assets/.agent/skills/embedded-captions/dna/cream.json +69 -69
  48. package/assets/.agent/skills/embedded-captions/dna/documentary.json +62 -62
  49. package/assets/.agent/skills/embedded-captions/dna/editorial.json +70 -70
  50. package/assets/.agent/skills/embedded-captions/dna/glitch.json +82 -82
  51. package/assets/.agent/skills/embedded-captions/dna/ink.json +65 -65
  52. package/assets/.agent/skills/embedded-captions/dna/keynote.json +62 -62
  53. package/assets/.agent/skills/embedded-captions/dna/loud.json +75 -75
  54. package/assets/.agent/skills/embedded-captions/dna/neon.json +58 -58
  55. package/assets/.agent/skills/embedded-captions/dna/velocity.json +89 -89
  56. package/assets/.agent/skills/embedded-captions/modes/cinematic/README.md +48 -48
  57. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -98
  58. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -188
  59. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -134
  60. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -179
  61. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -81
  62. package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -170
  63. package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -16
  64. package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -226
  65. package/assets/.agent/skills/embedded-captions/modes/cinematic/engine.html +355 -355
  66. package/assets/.agent/skills/embedded-captions/modes/standard/_anatomy.md +233 -233
  67. package/assets/.agent/skills/embedded-captions/modes/standard/_motion.md +192 -192
  68. package/assets/.agent/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -97
  69. package/assets/.agent/skills/embedded-captions/references/aesthetic-principles.md +168 -168
  70. package/assets/.agent/skills/embedded-captions/references/anti-patterns.md +188 -188
  71. package/assets/.agent/skills/embedded-captions/references/bespoke-vs-presets.md +178 -178
  72. package/assets/.agent/skills/embedded-captions/references/caption-grouping.md +130 -130
  73. package/assets/.agent/skills/embedded-captions/references/composition-craft.md +522 -522
  74. package/assets/.agent/skills/embedded-captions/references/direction-catalog.md +138 -138
  75. package/assets/.agent/skills/embedded-captions/references/example-renders/champion.html +371 -371
  76. package/assets/.agent/skills/embedded-captions/references/example-renders/memory-wall.html +334 -334
  77. package/assets/.agent/skills/embedded-captions/references/failure-modes.md +145 -145
  78. package/assets/.agent/skills/embedded-captions/references/layout-heuristics.md +238 -238
  79. package/assets/.agent/skills/embedded-captions/references/motion-vocabulary.md +148 -148
  80. package/assets/.agent/skills/embedded-captions/references/rail.md +68 -68
  81. package/assets/.agent/skills/embedded-captions/references/reference-bar.md +47 -47
  82. package/assets/.agent/skills/embedded-captions/references/scene-types.md +94 -94
  83. package/assets/.agent/skills/embedded-captions/references/test-set.md +66 -66
  84. package/assets/.agent/skills/embedded-captions/references/typographic-moves.md +266 -266
  85. package/assets/.agent/skills/embedded-captions/references/typography-presets.md +63 -63
  86. package/assets/.agent/skills/embedded-captions/scripts/audio-envelope.cjs +95 -95
  87. package/assets/.agent/skills/embedded-captions/scripts/check-occlusion.cjs +250 -250
  88. package/assets/.agent/skills/embedded-captions/scripts/check-overflow.cjs +194 -194
  89. package/assets/.agent/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -233
  90. package/assets/.agent/skills/embedded-captions/scripts/check-timing.cjs +173 -173
  91. package/assets/.agent/skills/embedded-captions/scripts/fill-timings.cjs +124 -124
  92. package/assets/.agent/skills/embedded-captions/scripts/fit-fonts.cjs +158 -158
  93. package/assets/.agent/skills/embedded-captions/scripts/gen-stroke-path.py +46 -46
  94. package/assets/.agent/skills/embedded-captions/scripts/inject-fonts.cjs +169 -169
  95. package/assets/.agent/skills/embedded-captions/scripts/lib-dna.cjs +201 -201
  96. package/assets/.agent/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -1205
  97. package/assets/.agent/skills/embedded-captions/scripts/make-composition.cjs +404 -404
  98. package/assets/.agent/skills/embedded-captions/scripts/make-theme.cjs +8781 -8781
  99. package/assets/.agent/skills/embedded-captions/scripts/matte.cjs +279 -279
  100. package/assets/.agent/skills/embedded-captions/scripts/measure-layout.cjs +293 -293
  101. package/assets/.agent/skills/embedded-captions/scripts/prepare.sh +39 -39
  102. package/assets/.agent/skills/embedded-captions/scripts/preview-frames.cjs +268 -268
  103. package/assets/.agent/skills/embedded-captions/scripts/render-and-composite.sh +469 -469
  104. package/assets/.agent/skills/embedded-captions/scripts/render-theme.sh +34 -34
  105. package/assets/.agent/skills/embedded-captions/scripts/safe-zones.cjs +813 -813
  106. package/assets/.agent/skills/embedded-captions/scripts/transcribe.cjs +332 -332
  107. package/assets/.agent/skills/embedded-captions/themes/PORTING.md +49 -49
  108. package/assets/.agent/skills/embedded-captions/themes/README.md +244 -244
  109. package/assets/.agent/skills/embedded-captions/themes/anchor.json +27 -27
  110. package/assets/.agent/skills/embedded-captions/themes/arcade.json +51 -51
  111. package/assets/.agent/skills/embedded-captions/themes/aurora.json +41 -41
  112. package/assets/.agent/skills/embedded-captions/themes/biolume.json +35 -35
  113. package/assets/.agent/skills/embedded-captions/themes/brush.json +74 -74
  114. package/assets/.agent/skills/embedded-captions/themes/chalkboard.json +52 -52
  115. package/assets/.agent/skills/embedded-captions/themes/dossier.json +56 -56
  116. package/assets/.agent/skills/embedded-captions/themes/graffiti.json +62 -62
  117. package/assets/.agent/skills/embedded-captions/themes/hologram.json +41 -41
  118. package/assets/.agent/skills/embedded-captions/themes/inkwater.json +43 -43
  119. package/assets/.agent/skills/embedded-captions/themes/laser.json +46 -46
  120. package/assets/.agent/skills/embedded-captions/themes/lastpage.json +33 -33
  121. package/assets/.agent/skills/embedded-captions/themes/neonsign.json +53 -53
  122. package/assets/.agent/skills/embedded-captions/themes/nightcity.json +56 -56
  123. package/assets/.agent/skills/embedded-captions/themes/ordnance.json +54 -54
  124. package/assets/.agent/skills/embedded-captions/themes/papercut.json +37 -37
  125. package/assets/.agent/skills/embedded-captions/themes/popup.json +46 -46
  126. package/assets/.agent/skills/embedded-captions/themes/ransom.json +62 -62
  127. package/assets/.agent/skills/embedded-captions/themes/scoreboard.json +54 -54
  128. package/assets/.agent/skills/embedded-captions/themes/spectrum.json +46 -46
  129. package/assets/.agent/skills/embedded-captions/themes/stardust.json +29 -29
  130. package/assets/.agent/skills/embedded-captions/themes/stomp.json +43 -43
  131. package/assets/.agent/skills/embedded-captions/themes/terminal.json +49 -49
  132. package/assets/.agent/skills/embedded-captions/themes/thunder.json +44 -44
  133. package/assets/.agent/skills/embedded-captions/themes/transit.json +44 -44
  134. package/assets/.agent/skills/embedded-captions/themes/vhs.json +47 -47
  135. package/assets/.agent/skills/faceless-explainer/SKILL.md +209 -209
  136. package/assets/.agent/skills/faceless-explainer/references/cut-catalog.md +215 -215
  137. package/assets/.agent/skills/faceless-explainer/references/motion-language.md +156 -156
  138. package/assets/.agent/skills/faceless-explainer/references/story-design.md +248 -248
  139. package/assets/.agent/skills/faceless-explainer/references/visual-design.md +146 -146
  140. package/assets/.agent/skills/faceless-explainer/scripts/assemble-index.mjs +570 -570
  141. package/assets/.agent/skills/faceless-explainer/scripts/audio.mjs +253 -253
  142. package/assets/.agent/skills/faceless-explainer/scripts/build-frame.mjs +536 -536
  143. package/assets/.agent/skills/faceless-explainer/scripts/captions.mjs +508 -508
  144. package/assets/.agent/skills/faceless-explainer/scripts/lib/assets.mjs +55 -55
  145. package/assets/.agent/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -45
  146. package/assets/.agent/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -249
  147. package/assets/.agent/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -204
  148. package/assets/.agent/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -38
  149. package/assets/.agent/skills/faceless-explainer/scripts/lib/transitions.json +71 -71
  150. package/assets/.agent/skills/faceless-explainer/scripts/transitions.mjs +320 -320
  151. package/assets/.agent/skills/faceless-explainer/sub-agents/frame-worker.md +75 -75
  152. package/assets/.agent/skills/figma/SKILL.md +121 -121
  153. package/assets/.agent/skills/general-video/SKILL.md +143 -143
  154. package/assets/.agent/skills/hyperframes/SKILL.md +164 -164
  155. package/assets/.agent/skills/hyperframes-animation/SKILL.md +84 -84
  156. package/assets/.agent/skills/hyperframes-animation/adapters/animate-text.md +64 -64
  157. package/assets/.agent/skills/hyperframes-animation/adapters/animejs.md +114 -114
  158. package/assets/.agent/skills/hyperframes-animation/adapters/css-animations.md +143 -143
  159. package/assets/.agent/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -118
  160. package/assets/.agent/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -96
  161. package/assets/.agent/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -96
  162. package/assets/.agent/skills/hyperframes-animation/adapters/gsap.md +105 -105
  163. package/assets/.agent/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -507
  164. package/assets/.agent/skills/hyperframes-animation/adapters/lottie.md +117 -117
  165. package/assets/.agent/skills/hyperframes-animation/adapters/three.md +131 -131
  166. package/assets/.agent/skills/hyperframes-animation/adapters/typegpu.md +178 -178
  167. package/assets/.agent/skills/hyperframes-animation/adapters/waapi.md +101 -101
  168. package/assets/.agent/skills/hyperframes-animation/blueprints/comparison-split.md +27 -27
  169. package/assets/.agent/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -44
  170. package/assets/.agent/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -28
  171. package/assets/.agent/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -57
  172. package/assets/.agent/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -46
  173. package/assets/.agent/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -53
  174. package/assets/.agent/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -66
  175. package/assets/.agent/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -78
  176. package/assets/.agent/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -69
  177. package/assets/.agent/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -28
  178. package/assets/.agent/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -37
  179. package/assets/.agent/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -29
  180. package/assets/.agent/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -42
  181. package/assets/.agent/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -51
  182. package/assets/.agent/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -30
  183. package/assets/.agent/skills/hyperframes-animation/blueprints-index.md +146 -146
  184. package/assets/.agent/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -382
  185. package/assets/.agent/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -649
  186. package/assets/.agent/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -520
  187. package/assets/.agent/skills/hyperframes-animation/examples/cta-morph-press.html +468 -468
  188. package/assets/.agent/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -1298
  189. package/assets/.agent/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -759
  190. package/assets/.agent/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -729
  191. package/assets/.agent/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -352
  192. package/assets/.agent/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -779
  193. package/assets/.agent/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -1374
  194. package/assets/.agent/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -861
  195. package/assets/.agent/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -347
  196. package/assets/.agent/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -606
  197. package/assets/.agent/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -227
  198. package/assets/.agent/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -297
  199. package/assets/.agent/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -382
  200. package/assets/.agent/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -305
  201. package/assets/.agent/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -286
  202. package/assets/.agent/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -371
  203. package/assets/.agent/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -246
  204. package/assets/.agent/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -267
  205. package/assets/.agent/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -227
  206. package/assets/.agent/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -257
  207. package/assets/.agent/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -332
  208. package/assets/.agent/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -283
  209. package/assets/.agent/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -373
  210. package/assets/.agent/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -262
  211. package/assets/.agent/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -313
  212. package/assets/.agent/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -303
  213. package/assets/.agent/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -273
  214. package/assets/.agent/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -307
  215. package/assets/.agent/skills/hyperframes-animation/rules/gsap-effects.md +299 -299
  216. package/assets/.agent/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -223
  217. package/assets/.agent/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -183
  218. package/assets/.agent/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -328
  219. package/assets/.agent/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -273
  220. package/assets/.agent/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -301
  221. package/assets/.agent/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -350
  222. package/assets/.agent/skills/hyperframes-animation/rules/press-release-spring.md +296 -296
  223. package/assets/.agent/skills/hyperframes-animation/rules/reactive-displacement.md +277 -277
  224. package/assets/.agent/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -298
  225. package/assets/.agent/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -278
  226. package/assets/.agent/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -277
  227. package/assets/.agent/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -273
  228. package/assets/.agent/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -156
  229. package/assets/.agent/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -329
  230. package/assets/.agent/skills/hyperframes-animation/rules/svg-path-draw.md +274 -274
  231. package/assets/.agent/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -239
  232. package/assets/.agent/skills/hyperframes-animation/rules/viewport-change.md +349 -349
  233. package/assets/.agent/skills/hyperframes-animation/rules-index.md +86 -86
  234. package/assets/.agent/skills/hyperframes-animation/scripts/animation-map.mjs +606 -606
  235. package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.mjs +288 -288
  236. package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -62
  237. package/assets/.agent/skills/hyperframes-animation/techniques.md +507 -507
  238. package/assets/.agent/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -167
  239. package/assets/.agent/skills/hyperframes-animation/transitions/catalog.md +127 -127
  240. package/assets/.agent/skills/hyperframes-animation/transitions/css-3d.md +12 -12
  241. package/assets/.agent/skills/hyperframes-animation/transitions/css-blur.md +51 -51
  242. package/assets/.agent/skills/hyperframes-animation/transitions/css-cover.md +43 -43
  243. package/assets/.agent/skills/hyperframes-animation/transitions/css-destruction.md +95 -95
  244. package/assets/.agent/skills/hyperframes-animation/transitions/css-dissolve.md +66 -66
  245. package/assets/.agent/skills/hyperframes-animation/transitions/css-distortion.md +45 -45
  246. package/assets/.agent/skills/hyperframes-animation/transitions/css-grid.md +10 -10
  247. package/assets/.agent/skills/hyperframes-animation/transitions/css-light.md +49 -49
  248. package/assets/.agent/skills/hyperframes-animation/transitions/css-mechanical.md +30 -30
  249. package/assets/.agent/skills/hyperframes-animation/transitions/css-other.md +25 -25
  250. package/assets/.agent/skills/hyperframes-animation/transitions/css-push.md +41 -41
  251. package/assets/.agent/skills/hyperframes-animation/transitions/css-radial.md +37 -37
  252. package/assets/.agent/skills/hyperframes-animation/transitions/css-scale.md +24 -24
  253. package/assets/.agent/skills/hyperframes-animation/transitions/overview.md +153 -153
  254. package/assets/.agent/skills/hyperframes-cli/SKILL.md +113 -113
  255. package/assets/.agent/skills/hyperframes-cli/references/doctor-browser.md +45 -45
  256. package/assets/.agent/skills/hyperframes-cli/references/init-and-scaffold.md +51 -51
  257. package/assets/.agent/skills/hyperframes-cli/references/lambda.md +132 -132
  258. package/assets/.agent/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -121
  259. package/assets/.agent/skills/hyperframes-cli/references/preview-render.md +164 -164
  260. package/assets/.agent/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -75
  261. package/assets/.agent/skills/hyperframes-core/SKILL.md +78 -78
  262. package/assets/.agent/skills/hyperframes-core/references/composition-patterns.md +263 -263
  263. package/assets/.agent/skills/hyperframes-core/references/data-attributes.md +70 -70
  264. package/assets/.agent/skills/hyperframes-core/references/determinism-rules.md +68 -68
  265. package/assets/.agent/skills/hyperframes-core/references/full-screen-motion.md +62 -62
  266. package/assets/.agent/skills/hyperframes-core/references/minimal-composition.md +66 -66
  267. package/assets/.agent/skills/hyperframes-core/references/script-format.md +49 -49
  268. package/assets/.agent/skills/hyperframes-core/references/storyboard-format.md +95 -95
  269. package/assets/.agent/skills/hyperframes-core/references/sub-compositions.md +237 -237
  270. package/assets/.agent/skills/hyperframes-core/references/subagent-dispatch.md +41 -41
  271. package/assets/.agent/skills/hyperframes-core/references/tailwind.md +125 -125
  272. package/assets/.agent/skills/hyperframes-core/references/tracks-and-clips.md +76 -76
  273. package/assets/.agent/skills/hyperframes-core/references/variables-and-media.md +90 -90
  274. package/assets/.agent/skills/hyperframes-creative/SKILL.md +70 -70
  275. package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -289
  276. package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -221
  277. package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -1214
  278. package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -275
  279. package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -224
  280. package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -1347
  281. package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -307
  282. package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -223
  283. package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -1372
  284. package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -275
  285. package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -230
  286. package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -1140
  287. package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -284
  288. package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -225
  289. package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -1166
  290. package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -284
  291. package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -224
  292. package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -1465
  293. package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -278
  294. package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -222
  295. package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -1263
  296. package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -277
  297. package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -224
  298. package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -1439
  299. package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -265
  300. package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -238
  301. package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -1468
  302. package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -314
  303. package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -226
  304. package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -1268
  305. package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -333
  306. package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -227
  307. package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -1330
  308. package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -274
  309. package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -230
  310. package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -1444
  311. package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -265
  312. package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -223
  313. package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -1273
  314. package/assets/.agent/skills/hyperframes-creative/palettes/bold-energetic.md +14 -14
  315. package/assets/.agent/skills/hyperframes-creative/palettes/clean-corporate.md +14 -14
  316. package/assets/.agent/skills/hyperframes-creative/palettes/dark-premium.md +14 -14
  317. package/assets/.agent/skills/hyperframes-creative/palettes/jewel-rich.md +14 -14
  318. package/assets/.agent/skills/hyperframes-creative/palettes/monochrome.md +14 -14
  319. package/assets/.agent/skills/hyperframes-creative/palettes/nature-earth.md +14 -14
  320. package/assets/.agent/skills/hyperframes-creative/palettes/neon-electric.md +14 -14
  321. package/assets/.agent/skills/hyperframes-creative/palettes/pastel-soft.md +14 -14
  322. package/assets/.agent/skills/hyperframes-creative/palettes/warm-editorial.md +14 -14
  323. package/assets/.agent/skills/hyperframes-creative/references/audio-reactive.md +76 -76
  324. package/assets/.agent/skills/hyperframes-creative/references/beat-direction.md +164 -164
  325. package/assets/.agent/skills/hyperframes-creative/references/composition-patterns.md +199 -199
  326. package/assets/.agent/skills/hyperframes-creative/references/data-in-motion.md +19 -19
  327. package/assets/.agent/skills/hyperframes-creative/references/design-adherence.md +19 -19
  328. package/assets/.agent/skills/hyperframes-creative/references/design-picker.md +123 -123
  329. package/assets/.agent/skills/hyperframes-creative/references/design-spec.md +55 -55
  330. package/assets/.agent/skills/hyperframes-creative/references/house-style.md +73 -73
  331. package/assets/.agent/skills/hyperframes-creative/references/motion-principles.md +150 -150
  332. package/assets/.agent/skills/hyperframes-creative/references/narration.md +92 -92
  333. package/assets/.agent/skills/hyperframes-creative/references/prompt-expansion.md +68 -68
  334. package/assets/.agent/skills/hyperframes-creative/references/typography.md +218 -218
  335. package/assets/.agent/skills/hyperframes-creative/references/video-composition.md +63 -63
  336. package/assets/.agent/skills/hyperframes-creative/references/visual-styles.md +457 -457
  337. package/assets/.agent/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -353
  338. package/assets/.agent/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -188
  339. package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.mjs +288 -288
  340. package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -62
  341. package/assets/.agent/skills/hyperframes-creative/templates/design-picker.html +1432 -1432
  342. package/assets/.agent/skills/hyperframes-keyframes/SKILL.md +237 -237
  343. package/assets/.agent/skills/hyperframes-keyframes/agents/openai.yaml +4 -4
  344. package/assets/.agent/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -106
  345. package/assets/.agent/skills/hyperframes-media/SKILL.md +97 -97
  346. package/assets/.agent/skills/hyperframes-media/assets/sfx/CREDITS.md +35 -35
  347. package/assets/.agent/skills/hyperframes-media/assets/sfx/manifest.json +97 -97
  348. package/assets/.agent/skills/hyperframes-media/references/bgm.md +72 -72
  349. package/assets/.agent/skills/hyperframes-media/references/captions/authoring.md +159 -159
  350. package/assets/.agent/skills/hyperframes-media/references/captions/motion.md +87 -87
  351. package/assets/.agent/skills/hyperframes-media/references/captions/transcript-handling.md +97 -97
  352. package/assets/.agent/skills/hyperframes-media/references/remove-background.md +143 -143
  353. package/assets/.agent/skills/hyperframes-media/references/requirements.md +29 -29
  354. package/assets/.agent/skills/hyperframes-media/references/sfx.md +42 -42
  355. package/assets/.agent/skills/hyperframes-media/references/transcribe.md +52 -52
  356. package/assets/.agent/skills/hyperframes-media/references/tts-to-captions.md +24 -24
  357. package/assets/.agent/skills/hyperframes-media/references/tts.md +135 -135
  358. package/assets/.agent/skills/hyperframes-media/scripts/audio.mjs +293 -293
  359. package/assets/.agent/skills/hyperframes-media/scripts/heygen-tts.mjs +121 -121
  360. package/assets/.agent/skills/hyperframes-media/scripts/lib/bgm.mjs +235 -235
  361. package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.mjs +14 -14
  362. package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.test.mjs +41 -41
  363. package/assets/.agent/skills/hyperframes-media/scripts/lib/heygen.mjs +131 -131
  364. package/assets/.agent/skills/hyperframes-media/scripts/lib/sfx.mjs +128 -128
  365. package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.mjs +298 -298
  366. package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.spawn.test.mjs +97 -97
  367. package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.test.mjs +66 -66
  368. package/assets/.agent/skills/hyperframes-media/scripts/lyria-recipe.py +128 -128
  369. package/assets/.agent/skills/hyperframes-media/scripts/wait-bgm.mjs +167 -167
  370. package/assets/.agent/skills/hyperframes-registry/SKILL.md +101 -101
  371. package/assets/.agent/skills/hyperframes-registry/examples/add-block.md +51 -51
  372. package/assets/.agent/skills/hyperframes-registry/examples/add-component.md +73 -73
  373. package/assets/.agent/skills/hyperframes-registry/references/contributing.md +166 -166
  374. package/assets/.agent/skills/hyperframes-registry/references/demo-html-pattern.md +54 -54
  375. package/assets/.agent/skills/hyperframes-registry/references/discovery.md +215 -215
  376. package/assets/.agent/skills/hyperframes-registry/references/install-locations.md +45 -45
  377. package/assets/.agent/skills/hyperframes-registry/references/templates.md +417 -417
  378. package/assets/.agent/skills/hyperframes-registry/references/wiring-blocks.md +61 -61
  379. package/assets/.agent/skills/hyperframes-registry/references/wiring-components.md +39 -39
  380. package/assets/.agent/skills/media-use/SKILL.md +124 -124
  381. package/assets/.agent/skills/media-use/scripts/eval.mjs +369 -369
  382. package/assets/.agent/skills/media-use/scripts/lib/adopt.mjs +112 -112
  383. package/assets/.agent/skills/media-use/scripts/lib/bgm-provider.mjs +20 -20
  384. package/assets/.agent/skills/media-use/scripts/lib/brand-provider.mjs +59 -59
  385. package/assets/.agent/skills/media-use/scripts/lib/cache.mjs +114 -114
  386. package/assets/.agent/skills/media-use/scripts/lib/freeze.mjs +26 -26
  387. package/assets/.agent/skills/media-use/scripts/lib/heygen-search.mjs +51 -51
  388. package/assets/.agent/skills/media-use/scripts/lib/image-provider.mjs +44 -44
  389. package/assets/.agent/skills/media-use/scripts/lib/index-gen.mjs +63 -63
  390. package/assets/.agent/skills/media-use/scripts/lib/manifest.mjs +91 -91
  391. package/assets/.agent/skills/media-use/scripts/lib/manifest.test.mjs +293 -293
  392. package/assets/.agent/skills/media-use/scripts/lib/probe.mjs +39 -39
  393. package/assets/.agent/skills/media-use/scripts/lib/probe.test.mjs +31 -31
  394. package/assets/.agent/skills/media-use/scripts/lib/providers.mjs +29 -29
  395. package/assets/.agent/skills/media-use/scripts/lib/sfx-provider.mjs +23 -23
  396. package/assets/.agent/skills/media-use/scripts/resolve.mjs +247 -247
  397. package/assets/.agent/skills/media-use/scripts/resolve.test.mjs +247 -247
  398. package/assets/.agent/skills/motion-graphics/SKILL.md +172 -172
  399. package/assets/.agent/skills/motion-graphics/agents/builder.md +40 -40
  400. package/assets/.agent/skills/motion-graphics/agents/director.md +53 -53
  401. package/assets/.agent/skills/motion-graphics/agents/finalize.md +17 -17
  402. package/assets/.agent/skills/motion-graphics/catalog-map.md +40 -40
  403. package/assets/.agent/skills/motion-graphics/categories/asset-fusion/module.md +37 -37
  404. package/assets/.agent/skills/motion-graphics/categories/charts/module.md +21 -21
  405. package/assets/.agent/skills/motion-graphics/categories/kinetic-type/module.md +19 -19
  406. package/assets/.agent/skills/motion-graphics/categories/logo-reveal/module.md +17 -17
  407. package/assets/.agent/skills/motion-graphics/categories/lower-thirds/module.md +16 -16
  408. package/assets/.agent/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -273
  409. package/assets/.agent/skills/motion-graphics/categories/maps/module.md +61 -61
  410. package/assets/.agent/skills/motion-graphics/categories/news/module.md +56 -56
  411. package/assets/.agent/skills/motion-graphics/categories/stat/module.md +21 -21
  412. package/assets/.agent/skills/motion-graphics/categories/tweet/module.md +16 -16
  413. package/assets/.agent/skills/motion-graphics/categories/webpage/module.md +21 -21
  414. package/assets/.agent/skills/motion-graphics/grounding/PROTOCOL.md +64 -64
  415. package/assets/.agent/skills/motion-graphics/grounding/locate.mjs +227 -227
  416. package/assets/.agent/skills/motion-graphics/phases/source/guide.md +21 -21
  417. package/assets/.agent/skills/motion-graphics/references/builder-contract.md +38 -38
  418. package/assets/.agent/skills/motion-graphics/references/motion-vocabulary.md +43 -43
  419. package/assets/.agent/skills/motion-graphics/references/shot-plan-ir.md +54 -54
  420. package/assets/.agent/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -306
  421. package/assets/.agent/skills/music-to-video/SKILL.md +197 -197
  422. package/assets/.agent/skills/music-to-video/references/frame-skeleton.md +100 -100
  423. package/assets/.agent/skills/music-to-video/references/montage.md +58 -58
  424. package/assets/.agent/skills/music-to-video/references/motion-primitive-catalog.md +75 -75
  425. package/assets/.agent/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -154
  426. package/assets/.agent/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -11
  427. package/assets/.agent/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -326
  428. package/assets/.agent/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -120
  429. package/assets/.agent/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -95
  430. package/assets/.agent/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -135
  431. package/assets/.agent/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -146
  432. package/assets/.agent/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -103
  433. package/assets/.agent/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -154
  434. package/assets/.agent/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -155
  435. package/assets/.agent/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -166
  436. package/assets/.agent/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -133
  437. package/assets/.agent/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -137
  438. package/assets/.agent/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -144
  439. package/assets/.agent/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -132
  440. package/assets/.agent/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -241
  441. package/assets/.agent/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -117
  442. package/assets/.agent/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -79
  443. package/assets/.agent/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -104
  444. package/assets/.agent/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +92 -92
  445. package/assets/.agent/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -131
  446. package/assets/.agent/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -109
  447. package/assets/.agent/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -124
  448. package/assets/.agent/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -108
  449. package/assets/.agent/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -117
  450. package/assets/.agent/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -132
  451. package/assets/.agent/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -141
  452. package/assets/.agent/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -121
  453. package/assets/.agent/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -160
  454. package/assets/.agent/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -113
  455. package/assets/.agent/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -130
  456. package/assets/.agent/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -137
  457. package/assets/.agent/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -117
  458. package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -42
  459. package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -313
  460. package/assets/.agent/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -136
  461. package/assets/.agent/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -144
  462. package/assets/.agent/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -122
  463. package/assets/.agent/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -126
  464. package/assets/.agent/skills/music-to-video/references/planning.md +104 -104
  465. package/assets/.agent/skills/music-to-video/references/storyboard-format.md +94 -94
  466. package/assets/.agent/skills/music-to-video/references/template-catalog.md +106 -106
  467. package/assets/.agent/skills/music-to-video/references/templates/card-flyby/index.html +527 -527
  468. package/assets/.agent/skills/music-to-video/references/templates/card-flyby/program.json +13 -13
  469. package/assets/.agent/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -485
  470. package/assets/.agent/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -302
  471. package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -610
  472. package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -41
  473. package/assets/.agent/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -596
  474. package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -589
  475. package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -25
  476. package/assets/.agent/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -267
  477. package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -594
  478. package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -39
  479. package/assets/.agent/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -238
  480. package/assets/.agent/skills/music-to-video/scripts/analyze-beatgrid.py +531 -531
  481. package/assets/.agent/skills/music-to-video/scripts/assemble-index.mjs +218 -218
  482. package/assets/.agent/skills/music-to-video/scripts/lib/storyboard.mjs +249 -249
  483. package/assets/.agent/skills/music-to-video/scripts/stage-assets.mjs +58 -58
  484. package/assets/.agent/skills/music-to-video/scripts/validate-plan.mjs +161 -161
  485. package/assets/.agent/skills/music-to-video/sub-agents/frame-worker.md +75 -75
  486. package/assets/.agent/skills/pr-to-video/SKILL.md +240 -240
  487. package/assets/.agent/skills/pr-to-video/references/code-vocabulary.md +111 -111
  488. package/assets/.agent/skills/pr-to-video/references/cut-catalog.md +215 -215
  489. package/assets/.agent/skills/pr-to-video/references/motion-language.md +156 -156
  490. package/assets/.agent/skills/pr-to-video/references/story-design.md +211 -211
  491. package/assets/.agent/skills/pr-to-video/references/visual-design.md +164 -164
  492. package/assets/.agent/skills/pr-to-video/scripts/assemble-index.mjs +570 -570
  493. package/assets/.agent/skills/pr-to-video/scripts/audio.mjs +253 -253
  494. package/assets/.agent/skills/pr-to-video/scripts/build-frame.mjs +536 -536
  495. package/assets/.agent/skills/pr-to-video/scripts/captions.mjs +508 -508
  496. package/assets/.agent/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -157
  497. package/assets/.agent/skills/pr-to-video/scripts/fetch-pr.mjs +164 -164
  498. package/assets/.agent/skills/pr-to-video/scripts/ingest.mjs +539 -539
  499. package/assets/.agent/skills/pr-to-video/scripts/lib/assets.mjs +55 -55
  500. package/assets/.agent/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -45
  501. package/assets/.agent/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -249
  502. package/assets/.agent/skills/pr-to-video/scripts/lib/tokens.mjs +204 -204
  503. package/assets/.agent/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -38
  504. package/assets/.agent/skills/pr-to-video/scripts/lib/transitions.json +71 -71
  505. package/assets/.agent/skills/pr-to-video/scripts/transitions.mjs +320 -320
  506. package/assets/.agent/skills/pr-to-video/sub-agents/frame-worker.md +95 -95
  507. package/assets/.agent/skills/product-launch-video/SKILL.md +208 -208
  508. package/assets/.agent/skills/product-launch-video/references/cut-catalog.md +220 -220
  509. package/assets/.agent/skills/product-launch-video/references/motion-language.md +156 -156
  510. package/assets/.agent/skills/product-launch-video/references/story-design.md +373 -373
  511. package/assets/.agent/skills/product-launch-video/references/visual-design.md +126 -126
  512. package/assets/.agent/skills/product-launch-video/scripts/assemble-index.mjs +570 -570
  513. package/assets/.agent/skills/product-launch-video/scripts/audio.mjs +253 -253
  514. package/assets/.agent/skills/product-launch-video/scripts/build-frame.mjs +536 -536
  515. package/assets/.agent/skills/product-launch-video/scripts/captions.mjs +508 -508
  516. package/assets/.agent/skills/product-launch-video/scripts/lib/assets.mjs +55 -55
  517. package/assets/.agent/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -45
  518. package/assets/.agent/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -249
  519. package/assets/.agent/skills/product-launch-video/scripts/lib/tokens.mjs +204 -204
  520. package/assets/.agent/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -38
  521. package/assets/.agent/skills/product-launch-video/scripts/lib/transitions.json +71 -71
  522. package/assets/.agent/skills/product-launch-video/scripts/stage-assets.mjs +39 -39
  523. package/assets/.agent/skills/product-launch-video/scripts/transitions.mjs +320 -320
  524. package/assets/.agent/skills/product-launch-video/sub-agents/frame-worker.md +75 -75
  525. package/assets/.agent/skills/remotion/SKILL.md +357 -38
  526. package/assets/.agent/skills/remotion/rules/3d.md +5 -5
  527. package/assets/.agent/skills/remotion/rules/assets/text-animations-word-highlight.tsx +1 -6
  528. package/assets/.agent/skills/remotion/rules/audio-visualization.md +198 -0
  529. package/assets/.agent/skills/remotion/rules/audio.md +1 -4
  530. package/assets/.agent/skills/remotion/rules/calculate-metadata.md +48 -18
  531. package/assets/.agent/skills/remotion/rules/compositions.md +16 -24
  532. package/assets/.agent/skills/remotion/rules/display-captions.md +79 -21
  533. package/assets/.agent/skills/remotion/rules/effects.md +235 -0
  534. package/assets/.agent/skills/remotion/rules/ffmpeg.md +34 -0
  535. package/assets/.agent/skills/remotion/rules/get-audio-duration.md +13 -13
  536. package/assets/.agent/skills/remotion/rules/get-video-dimensions.md +1 -1
  537. package/assets/.agent/skills/remotion/rules/get-video-duration.md +12 -10
  538. package/assets/.agent/skills/remotion/rules/gifs.md +21 -18
  539. package/assets/.agent/skills/remotion/rules/google-fonts.md +72 -0
  540. package/assets/.agent/skills/remotion/rules/html-in-canvas.md +122 -0
  541. package/assets/.agent/skills/remotion/rules/images.md +5 -64
  542. package/assets/.agent/skills/remotion/rules/import-srt-captions.md +9 -7
  543. package/assets/.agent/skills/remotion/rules/light-leaks.md +73 -0
  544. package/assets/.agent/skills/remotion/rules/local-fonts.md +65 -0
  545. package/assets/.agent/skills/remotion/rules/lottie.md +10 -8
  546. package/assets/.agent/skills/remotion/rules/maplibre.md +458 -0
  547. package/assets/.agent/skills/remotion/rules/measuring-dom-nodes.md +0 -1
  548. package/assets/.agent/skills/remotion/rules/measuring-text.md +2 -5
  549. package/assets/.agent/skills/remotion/rules/parameters.md +21 -10
  550. package/assets/.agent/skills/remotion/rules/sequencing.md +35 -9
  551. package/assets/.agent/skills/remotion/rules/sfx.md +51 -0
  552. package/assets/.agent/skills/remotion/rules/silence-detection.md +71 -0
  553. package/assets/.agent/skills/remotion/rules/subtitles.md +36 -0
  554. package/assets/.agent/skills/remotion/rules/tailwind.md +2 -2
  555. package/assets/.agent/skills/remotion/rules/timing.md +89 -106
  556. package/assets/.agent/skills/remotion/rules/transcribe-captions.md +58 -7
  557. package/assets/.agent/skills/remotion/rules/transitions.md +117 -42
  558. package/assets/.agent/skills/remotion/rules/transparent-videos.md +106 -0
  559. package/assets/.agent/skills/remotion/rules/trimming.md +1 -3
  560. package/assets/.agent/skills/remotion/rules/video-layout.md +68 -0
  561. package/assets/.agent/skills/remotion/rules/voiceover.md +99 -0
  562. package/assets/.agent/skills/remotion-real-ui-video/SKILL.md +264 -264
  563. package/assets/.agent/skills/remotion-real-ui-video/references/anti-patterns.md +114 -114
  564. package/assets/.agent/skills/remotion-real-ui-video/references/completion-checklist.md +75 -75
  565. package/assets/.agent/skills/remotion-real-ui-video/references/real-ui-bridge-example.md +93 -93
  566. package/assets/.agent/skills/remotion-to-hyperframes/SKILL.md +127 -127
  567. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -249
  568. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -41
  569. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -26
  570. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -61
  571. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -14
  572. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -13
  573. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -13
  574. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -34
  575. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -4
  576. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -15
  577. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -54
  578. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -29
  579. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -118
  580. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -14
  581. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -13
  582. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -105
  583. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -13
  584. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -4
  585. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -15
  586. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -34
  587. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -85
  588. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -41
  589. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -269
  590. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -15
  591. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -13
  592. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -27
  593. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -37
  594. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -23
  595. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -59
  596. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -47
  597. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -4
  598. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -18
  599. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -34
  600. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -55
  601. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -15
  602. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -51
  603. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -29
  604. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -29
  605. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -39
  606. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -30
  607. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -38
  608. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -36
  609. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -28
  610. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -41
  611. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -85
  612. package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -110
  613. package/assets/.agent/skills/remotion-to-hyperframes/references/api-map.md +142 -142
  614. package/assets/.agent/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -115
  615. package/assets/.agent/skills/remotion-to-hyperframes/references/eval.md +140 -140
  616. package/assets/.agent/skills/remotion-to-hyperframes/references/fonts.md +112 -112
  617. package/assets/.agent/skills/remotion-to-hyperframes/references/limitations.md +136 -136
  618. package/assets/.agent/skills/remotion-to-hyperframes/references/lottie.md +121 -121
  619. package/assets/.agent/skills/remotion-to-hyperframes/references/media.md +149 -149
  620. package/assets/.agent/skills/remotion-to-hyperframes/references/parameters.md +167 -167
  621. package/assets/.agent/skills/remotion-to-hyperframes/references/sequencing.md +195 -195
  622. package/assets/.agent/skills/remotion-to-hyperframes/references/timing.md +165 -165
  623. package/assets/.agent/skills/remotion-to-hyperframes/references/transitions.md +114 -114
  624. package/assets/.agent/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -107
  625. package/assets/.agent/skills/remotion-to-hyperframes/scripts/lint_source.py +358 -358
  626. package/assets/.agent/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -103
  627. package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -50
  628. package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -46
  629. package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -90
  630. package/assets/.agent/skills/shared-resend-portfolio/SKILL.md +124 -124
  631. package/assets/.agent/skills/slideshow/SKILL.md +550 -550
  632. package/assets/.agent/skills/slideshow/references/standalone-harness.md +1020 -1020
  633. package/assets/.agent/skills/talking-head-recut/NOTICE.md +39 -39
  634. package/assets/.agent/skills/talking-head-recut/SKILL.md +1191 -1191
  635. package/assets/.agent/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -10
  636. package/assets/.agent/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -145
  637. package/assets/.agent/skills/talking-head-recut/references/frames/clean.html +92 -92
  638. package/assets/.agent/skills/talking-head-recut/references/frames/hairline.html +171 -171
  639. package/assets/.agent/skills/talking-head-recut/references/frames/polaroid.html +131 -131
  640. package/assets/.agent/skills/talking-head-recut/references/layouts/overlay.html +164 -164
  641. package/assets/.agent/skills/talking-head-recut/references/layouts/pip.html +143 -143
  642. package/assets/.agent/skills/talking-head-recut/references/layouts/split.html +121 -121
  643. package/assets/.agent/skills/talking-head-recut/references/layouts/stack.html +109 -109
  644. package/assets/.agent/skills/talking-head-recut/references/styles/academic.html +172 -172
  645. package/assets/.agent/skills/talking-head-recut/references/styles/audit.html +170 -170
  646. package/assets/.agent/skills/talking-head-recut/references/styles/editorial.html +189 -189
  647. package/assets/.agent/skills/talking-head-recut/references/styles/geom.html +181 -181
  648. package/assets/.agent/skills/talking-head-recut/references/styles/minimal.html +130 -130
  649. package/assets/.agent/skills/talking-head-recut/references/styles/spotlight.html +142 -142
  650. package/assets/.agent/skills/talking-head-recut/references/styles/swiss.html +188 -188
  651. package/assets/.agent/skills/talking-head-recut/references/styles/terminal.html +196 -196
  652. package/assets/.agent/skills/talking-head-recut/references/styles/whiteboard.html +170 -170
  653. package/assets/.agent/skills/talking-head-recut/references/styles/xhs.html +206 -206
  654. package/assets/.agent/skills/website-to-video/SKILL.md +145 -145
  655. package/assets/.agent/skills/website-to-video/assets/sfx/CREDITS.md +35 -35
  656. package/assets/.agent/skills/website-to-video/assets/sfx/manifest.json +97 -97
  657. package/assets/.agent/skills/website-to-video/references/beat-builder-guide.md +263 -263
  658. package/assets/.agent/skills/website-to-video/references/capabilities.md +713 -713
  659. package/assets/.agent/skills/website-to-video/references/step-0-capture.md +55 -55
  660. package/assets/.agent/skills/website-to-video/references/step-1-design.md +333 -333
  661. package/assets/.agent/skills/website-to-video/references/step-2-brief.md +178 -178
  662. package/assets/.agent/skills/website-to-video/references/step-3-storyboard.md +572 -572
  663. package/assets/.agent/skills/website-to-video/references/step-4-vo.md +230 -230
  664. package/assets/.agent/skills/website-to-video/references/step-5-build.md +483 -483
  665. package/assets/.agent/skills/website-to-video/references/step-6-validate.md +341 -341
  666. package/assets/.agent/skills/website-to-video/scripts/w2h-verify.mjs +759 -759
  667. package/package.json +6 -5
  668. package/src/pi-takomi-core/orchestration.ts +39 -21
  669. package/src/pi-takomi-core/routing.ts +8 -8
  670. package/src/pi-takomi-core/types.ts +25 -5
  671. package/src/pi-takomi-core/workflows.ts +86 -86
  672. package/src/takomi-stats.js +5 -5
  673. package/assets/.agent/skills/remotion/rules/animations.md +0 -29
  674. package/assets/.agent/skills/remotion/rules/assets.md +0 -78
  675. package/assets/.agent/skills/remotion/rules/can-decode.md +0 -75
  676. package/assets/.agent/skills/remotion/rules/charts.md +0 -58
  677. package/assets/.agent/skills/remotion/rules/extract-frames.md +0 -229
  678. package/assets/.agent/skills/remotion/rules/fonts.md +0 -152
  679. package/assets/.agent/skills/remotion/rules/maps.md +0 -403
@@ -1,759 +1,759 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=1920, height=1080" />
6
- <title>Scene 04 — Contextual Product Showcase</title>
7
-
8
- <!--
9
- HyperFrames composition.tsx.
10
-
11
- Choreography (4 phases, 9 seconds total):
12
- 0.00 – 0.80s 3D-tilted page card scales 0.95 → 1.0
13
- Navbar / title / CTA fade in (staggered)
14
- 0.12 – 2.80s Title keywords glow synced to ASR words:
15
- "1" "long" "video" "10" "viral" "clips"
16
- 3.08 – 4.08s Page content scrolls up 280 px (programmatic scroll feel)
17
- Carousel section fades in + scales from 0.9
18
- 3.58 – 8.84s Main video pops forward in 3D (translateZ 80 px) + scales up
19
- Radial spotlight dims the surroundings; decays at end
20
- (attack 0→1 then decay 1→REST_LEVEL). All visual effects (color,
21
- text-shadow, scale) derive from --glow via CSS calc()
22
- - Pop-target uses the same --glow pattern; translateZ + scale derived
23
- - Spotlight is a separate overlay with simple opacity tween
24
- - Video placeholders are colored divs (no asset files needed)
25
- - Tilt is static CSS, never tweened
26
- -->
27
-
28
- <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
29
-
30
- <style>
31
- :root {
32
- --page-bg: #0a0a0f;
33
- --text-primary: #ffffff;
34
- --text-secondary: #a1a1aa;
35
- --accent: #edcb50;
36
- --input-bg: #1a1a1f;
37
- --green: #22c55e;
38
- }
39
- * {
40
- margin: 0;
41
- padding: 0;
42
- box-sizing: border-box;
43
- }
44
- html,
45
- body {
46
- margin: 0;
47
- width: 1920px;
48
- height: 1080px;
49
- overflow: hidden;
50
- background: #000;
51
- font-family:
52
- "Inter",
53
- system-ui,
54
- -apple-system,
55
- sans-serif;
56
- color: var(--text-primary);
57
- }
58
-
59
- /* ============================================================
60
- BACKGROUND
61
- ============================================================ */
62
- .bg {
63
- position: absolute;
64
- inset: 0;
65
- background:
66
- radial-gradient(
67
- ellipse 100% 60% at 50% -10%,
68
- rgba(100, 100, 150, 0.08) 0%,
69
- transparent 60%
70
- ),
71
- var(--page-bg);
72
- }
73
-
74
- /* ============================================================
75
- 3D PERSPECTIVE + TILTED CARD
76
- ============================================================ */
77
- .perspective-wrap {
78
- position: absolute;
79
- inset: 0;
80
- display: flex;
81
- align-items: center;
82
- justify-content: center;
83
- perspective: 1200px;
84
- }
85
- .page-card {
86
- width: 92%;
87
- height: 88%;
88
- background-color: var(--page-bg);
89
- border-radius: 20px;
90
- overflow: hidden;
91
- transform-style: preserve-3d;
92
- /* tilt + initial scale set by gsap.set() below so subsequent tweens preserve them */
93
- box-shadow:
94
- -30px 30px 60px rgba(0, 0, 0, 0.4),
95
- -15px 15px 30px rgba(0, 0, 0, 0.3),
96
- 0 0 80px rgba(0, 0, 0, 0.2);
97
- border: 1px solid rgba(255, 255, 255, 0.1);
98
- position: relative;
99
- }
100
-
101
- /* ============================================================
102
- NAVBAR (sticks to top of card; NOT inside scroll content)
103
- ============================================================ */
104
- .page-navbar {
105
- position: absolute;
106
- top: 0;
107
- left: 0;
108
- right: 0;
109
- height: 72px;
110
- padding: 0 48px;
111
- display: flex;
112
- align-items: center;
113
- justify-content: space-between;
114
- z-index: 100;
115
- opacity: 0; /* GSAP fades in */
116
- background: linear-gradient(to bottom, rgba(10, 10, 15, 0.95), rgba(10, 10, 15, 0.6));
117
- }
118
- .nav-left {
119
- display: flex;
120
- align-items: center;
121
- gap: 10px;
122
- }
123
- .nav-logo {
124
- width: 32px;
125
- height: 32px;
126
- color: var(--text-primary);
127
- }
128
- .nav-brand {
129
- font-size: 20px;
130
- font-weight: 600;
131
- letter-spacing: -0.5px;
132
- }
133
- .nav-center {
134
- display: flex;
135
- align-items: center;
136
- gap: 28px;
137
- }
138
- .nav-item {
139
- font-size: 14px;
140
- font-weight: 500;
141
- color: var(--text-secondary);
142
- display: flex;
143
- align-items: center;
144
- }
145
- .nav-item .chev {
146
- margin-left: 4px;
147
- font-size: 10px;
148
- }
149
- .nav-tag {
150
- font-size: 10px;
151
- background: var(--green);
152
- color: #fff;
153
- padding: 2px 6px;
154
- border-radius: 4px;
155
- font-weight: 600;
156
- margin-right: 6px;
157
- }
158
- .nav-right {
159
- display: flex;
160
- align-items: center;
161
- gap: 12px;
162
- }
163
- .nav-signin {
164
- padding: 8px 16px;
165
- border: 1px solid rgba(255, 255, 255, 0.2);
166
- border-radius: 8px;
167
- color: var(--text-primary);
168
- font-size: 14px;
169
- font-weight: 500;
170
- }
171
- .nav-signup {
172
- padding: 8px 16px;
173
- background: var(--accent);
174
- border-radius: 8px;
175
- color: var(--page-bg);
176
- font-size: 14px;
177
- font-weight: 600;
178
- }
179
-
180
- /* ============================================================
181
- SCROLL CONTENT — GSAP tweens its y
182
- ============================================================ */
183
- .scroll-content {
184
- padding-top: 140px;
185
- padding-bottom: 60px;
186
- display: flex;
187
- flex-direction: column;
188
- align-items: center;
189
- will-change: transform;
190
- }
191
-
192
- /* ============================================================
193
- HERO SECTION
194
- ============================================================ */
195
- .hero {
196
- text-align: center;
197
- max-width: 1200px;
198
- width: 90%;
199
- opacity: 0; /* GSAP fades in */
200
- }
201
- .hero-eyebrow {
202
- font-size: 14px;
203
- color: var(--accent);
204
- text-transform: uppercase;
205
- letter-spacing: 2px;
206
- margin-bottom: 24px;
207
- font-weight: 600;
208
- }
209
- .hero-title {
210
- font-size: 64px;
211
- font-weight: 700;
212
- line-height: 1.1;
213
- letter-spacing: -1px;
214
- }
215
- .hero-sub {
216
- font-size: 20px;
217
- color: rgba(255, 255, 255, 0.6);
218
- margin-top: 24px;
219
- font-weight: 400;
220
- line-height: 1.5;
221
- max-width: 800px;
222
- margin-left: auto;
223
- margin-right: auto;
224
- }
225
-
226
- /* ============================================================
227
- KEYWORD GLOW — all derived from --glow CSS custom property
228
- ============================================================ */
229
- .kw {
230
- --glow: 0;
231
- display: inline-block;
232
- position: relative;
233
- z-index: 0;
234
- padding: 0 0.015em;
235
- color: rgb(
236
- calc(255 - var(--glow) * 18) calc(255 - var(--glow) * 30) calc(255 - var(--glow) * 150)
237
- );
238
- text-shadow:
239
- 0 0 calc(var(--glow) * 10px) rgba(255, 235, 120, calc(var(--glow) * 0.95)),
240
- 0 0 calc(var(--glow) * 24px) rgba(237, 203, 80, calc(var(--glow) * 0.78)),
241
- 0 0 calc(var(--glow) * 44px) rgba(237, 203, 80, calc(var(--glow) * 0.38));
242
- transform: scale(calc(1 + var(--glow) * 0.035));
243
- }
244
- .kw::before {
245
- content: "";
246
- position: absolute;
247
- left: -0.025em;
248
- right: -0.025em;
249
- top: 0.08em;
250
- bottom: 0.05em;
251
- z-index: -1;
252
- border-radius: 0.16em;
253
- background: linear-gradient(
254
- 90deg,
255
- rgba(237, 203, 80, 0.08),
256
- rgba(255, 222, 80, 0.72),
257
- rgba(237, 203, 80, 0.12)
258
- );
259
- opacity: calc(var(--glow) * 0.78);
260
- transform: scaleX(calc(0.72 + var(--glow) * 0.24)) skewX(-5deg);
261
- transform-origin: left center;
262
- box-shadow:
263
- 0 0 calc(var(--glow) * 14px) rgba(237, 203, 80, calc(var(--glow) * 0.7)),
264
- 0 0 calc(var(--glow) * 28px) rgba(237, 203, 80, calc(var(--glow) * 0.32));
265
- }
266
-
267
- /* ============================================================
268
- CTA INPUT ROW
269
- ============================================================ */
270
- .cta-row {
271
- display: flex;
272
- align-items: center;
273
- justify-content: center;
274
- gap: 16px;
275
- margin-top: 36px;
276
- opacity: 0; /* GSAP fades in */
277
- }
278
- .cta-input {
279
- display: flex;
280
- align-items: center;
281
- background: var(--input-bg);
282
- border-radius: 28px;
283
- padding: 6px 6px 6px 18px;
284
- gap: 12px;
285
- }
286
- .cta-link-icon {
287
- width: 16px;
288
- height: 16px;
289
- color: rgba(255, 255, 255, 0.4);
290
- }
291
- .cta-placeholder {
292
- font-size: 14px;
293
- color: rgba(255, 255, 255, 0.4);
294
- min-width: 130px;
295
- }
296
- .cta-button {
297
- padding: 12px 24px;
298
- background: #fff;
299
- border-radius: 22px;
300
- color: var(--page-bg);
301
- font-size: 14px;
302
- font-weight: 600;
303
- }
304
- .cta-or {
305
- color: rgba(255, 255, 255, 0.4);
306
- font-size: 14px;
307
- }
308
- .cta-upload {
309
- padding: 12px 24px;
310
- border: 1px solid rgba(255, 255, 255, 0.2);
311
- border-radius: 22px;
312
- color: var(--text-primary);
313
- font-size: 14px;
314
- font-weight: 500;
315
- }
316
-
317
- /* ============================================================
318
- VIDEO CAROUSEL (Phase 2 entry, Phase 4 pop-out)
319
- ============================================================ */
320
- .carousel-wrap {
321
- opacity: 0; /* GSAP fades in */
322
- transform: scale(0.9); /* GSAP scales to 1 */
323
- transform-origin: center top;
324
- margin-top: 48px;
325
- display: flex;
326
- justify-content: center;
327
- align-items: center;
328
- gap: 20px;
329
- width: 100%;
330
- max-width: 1400px;
331
- padding: 0 20px;
332
- perspective: 800px;
333
- transform-style: preserve-3d;
334
- }
335
- .carousel-arrow {
336
- width: 44px;
337
- height: 44px;
338
- border-radius: 50%;
339
- background: rgba(60, 60, 65, 0.8);
340
- display: flex;
341
- align-items: center;
342
- justify-content: center;
343
- color: #fff;
344
- flex-shrink: 0;
345
- font-size: 24px;
346
- font-weight: 300;
347
- }
348
-
349
- /* Main video — Phase 4 pop-out target */
350
- .carousel-main {
351
- --glow: 0;
352
- width: 720px;
353
- height: 420px;
354
- background: var(--input-bg);
355
- border-radius: 16px;
356
- position: relative;
357
- overflow: hidden;
358
- flex-shrink: 0;
359
- transform-style: preserve-3d;
360
- transform: translateZ(calc(var(--glow) * 80px)) scale(calc(1 + var(--glow) * 0.15));
361
- box-shadow:
362
- 0 0 calc(var(--glow) * 25px) rgba(237, 203, 80, calc(var(--glow) * 0.7)),
363
- 0 0 calc(var(--glow) * 50px) rgba(237, 203, 80, calc(var(--glow) * 0.4)),
364
- 0 calc(20px + var(--glow) * 40px) calc(60px + var(--glow) * 40px)
365
- rgba(0, 0, 0, calc(0.6 + var(--glow) * 0.2));
366
- border: 3px solid rgba(237, 203, 80, calc(var(--glow) * 0.8));
367
- z-index: 200;
368
- }
369
- .carousel-main-placeholder {
370
- position: absolute;
371
- inset: 0;
372
- display: flex;
373
- align-items: center;
374
- justify-content: center;
375
- font-size: 28px;
376
- font-weight: 600;
377
- color: rgba(255, 255, 255, 0.5);
378
- background: linear-gradient(135deg, #1a2540 0%, #3d2a4f 50%, #4f1d2e 100%);
379
- }
380
- .carousel-main-placeholder span {
381
- background: rgba(0, 0, 0, 0.4);
382
- padding: 8px 20px;
383
- border-radius: 8px;
384
- }
385
-
386
- /* Side panel */
387
- .carousel-side {
388
- width: 420px;
389
- height: 280px;
390
- background: var(--input-bg);
391
- border-radius: 16px;
392
- position: relative;
393
- overflow: hidden;
394
- flex-shrink: 0;
395
- }
396
- .carousel-side-placeholder {
397
- position: absolute;
398
- inset: 0;
399
- background: linear-gradient(135deg, #2a3550 0%, #4a3a5a 100%);
400
- display: flex;
401
- align-items: center;
402
- justify-content: center;
403
- font-size: 18px;
404
- font-weight: 600;
405
- color: rgba(255, 255, 255, 0.5);
406
- }
407
- .presets-stack {
408
- position: absolute;
409
- top: 16px;
410
- right: 16px;
411
- display: flex;
412
- flex-direction: column;
413
- gap: 8px;
414
- z-index: 5;
415
- }
416
- .preset-label {
417
- padding: 8px 14px;
418
- background: rgba(255, 255, 255, 0.12);
419
- border-radius: 8px;
420
- color: rgba(255, 255, 255, 0.8);
421
- font-size: 12px;
422
- font-weight: 500;
423
- }
424
- .preset-tile {
425
- width: 44px;
426
- height: 44px;
427
- background: rgba(255, 255, 255, 0.08);
428
- border-radius: 8px;
429
- align-self: flex-end;
430
- }
431
-
432
- /* ============================================================
433
- SPOTLIGHT OVERLAY (above page card, dims surroundings)
434
- ============================================================ */
435
- .spotlight {
436
- position: absolute;
437
- inset: 0;
438
- background: radial-gradient(
439
- ellipse 850px 550px at 40% 60%,
440
- transparent 0%,
441
- transparent 50%,
442
- rgba(0, 0, 0, 0.65) 100%
443
- );
444
- pointer-events: none;
445
- opacity: 0; /* GSAP fades in during Phase 4 */
446
- z-index: 150;
447
- }
448
-
449
- /* ============================================================
450
- VIGNETTE
451
- ============================================================ */
452
- .vignette {
453
- position: absolute;
454
- inset: 0;
455
- background: radial-gradient(ellipse at center, transparent 50%, rgba(0, 0, 0, 0.3) 100%);
456
- pointer-events: none;
457
- z-index: 400;
458
- }
459
- </style>
460
- </head>
461
- <body>
462
- <div
463
- id="root"
464
- data-composition-id="main"
465
- data-start="0"
466
- data-duration="9"
467
- data-width="1920"
468
- data-height="1080"
469
- >
470
- <div class="bg"></div>
471
-
472
- <div class="perspective-wrap">
473
- <div
474
- class="page-card clip"
475
- data-start="0"
476
- data-duration="9"
477
- data-track-index="1"
478
- id="page-card"
479
- >
480
- <!-- Navbar (anchored to card top) -->
481
- <nav class="page-navbar" id="navbar">
482
- <div class="nav-left">
483
- <svg
484
- class="nav-logo"
485
- viewBox="0 0 24 24"
486
- fill="none"
487
- xmlns="http://www.w3.org/2000/svg"
488
- aria-hidden="true"
489
- >
490
- <path
491
- fill="currentColor"
492
- d="M11.954 3.817c-4.49 0-8.132 3.644-8.152 8.146v12H0V12C0 5.373 5.352 0 11.954 0s11.953 5.373 11.953 12-5.351 12-11.953 12a12 12 0 0 1-1.718-.123v-3.876q.831.181 1.718.182c4.502 0 8.152-3.663 8.152-8.183s-3.65-8.183-8.152-8.183"
493
- />
494
- <path
495
- fill="currentColor"
496
- d="M5.118 24V11.995c0-3.79 3.062-6.857 6.836-6.857 3.773 0 6.836 3.068 6.836 6.857s-3.063 6.857-6.836 6.857c-.594 0-1.17-.076-1.718-.218V14.5c.488.337 1.08.534 1.718.534a3.037 3.037 0 0 0 3.034-3.04 3.037 3.037 0 0 0-3.034-3.04 3.037 3.037 0 0 0-3.034 3.008V24z"
497
- />
498
- </svg>
499
- <span class="nav-brand">OpusClip</span>
500
- </div>
501
- <div class="nav-center">
502
- <span class="nav-item">Features<span class="chev">▾</span></span>
503
- <span class="nav-item">Solutions<span class="chev">▾</span></span>
504
- <span class="nav-item">Resources<span class="chev">▾</span></span>
505
- <span class="nav-item">Pricing</span>
506
- <span class="nav-item">For business<span class="chev">▾</span></span>
507
- <span class="nav-item"><span class="nav-tag">New</span>Agent Opus</span>
508
- </div>
509
- <div class="nav-right">
510
- <span class="nav-signin">Sign in</span>
511
- <span class="nav-signup">Sign up - It's FREE</span>
512
- </div>
513
- </nav>
514
-
515
- <!-- Scrollable content -->
516
- <div class="scroll-content" id="scroll-content">
517
- <div class="hero" id="hero">
518
- <div class="hero-eyebrow">#1 AI VIDEO CLIPPING TOOL</div>
519
- <h1 class="hero-title">
520
- <span class="kw" data-glow-start="0.12" data-glow-end="0.28">1</span>
521
- <span class="kw" data-glow-start="0.52" data-glow-end="0.72">long</span>
522
- <span class="kw" data-glow-start="0.78" data-glow-end="1.44">video,</span>
523
- <span class="kw" data-glow-start="1.48" data-glow-end="1.80">10</span>
524
- <span class="kw" data-glow-start="1.94" data-glow-end="2.22">viral</span>
525
- <span class="kw" data-glow-start="2.28" data-glow-end="2.80">clips.</span>
526
- <br />Create 10x faster.
527
- </h1>
528
- <p class="hero-sub">
529
- OpusClip turns long videos into shorts, and publishes them to all social platforms
530
- in one click.
531
- </p>
532
- </div>
533
-
534
- <div class="cta-row" id="cta-row">
535
- <div class="cta-input">
536
- <svg
537
- class="cta-link-icon"
538
- viewBox="0 0 24 24"
539
- fill="none"
540
- stroke="currentColor"
541
- stroke-width="2"
542
- stroke-linecap="round"
543
- stroke-linejoin="round"
544
- aria-hidden="true"
545
- >
546
- <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" />
547
- <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />
548
- </svg>
549
- <span class="cta-placeholder">Drop a video link</span>
550
- <div class="cta-button">Get free clips</div>
551
- </div>
552
- <span class="cta-or">or</span>
553
- <div class="cta-upload">Upload files</div>
554
- </div>
555
-
556
- <!-- Video carousel section -->
557
- <div class="carousel-wrap" id="carousel">
558
- <div class="carousel-arrow">‹</div>
559
-
560
- <div class="carousel-main pop-target" id="pop-target">
561
- <div class="carousel-main-placeholder">
562
- <span>Hero animation</span>
563
- </div>
564
- </div>
565
-
566
- <div class="carousel-arrow">›</div>
567
-
568
- <div class="carousel-side">
569
- <div class="carousel-side-placeholder">Demo · reframe</div>
570
- <div class="presets-stack">
571
- <div class="preset-label">Presets</div>
572
- <div class="preset-tile"></div>
573
- <div class="preset-tile"></div>
574
- <div class="preset-tile"></div>
575
- <div class="preset-tile"></div>
576
- </div>
577
- </div>
578
- </div>
579
- </div>
580
- <!-- /.scroll-content -->
581
- </div>
582
- <!-- /.page-card -->
583
- </div>
584
- <!-- /.perspective-wrap -->
585
-
586
- <div class="spotlight" id="spotlight"></div>
587
- <div class="vignette"></div>
588
- </div>
589
-
590
- <script>
591
- /* ================================================================
592
- TIMING — all in local seconds (scene starts at 0).
593
- ASR timestamps are direct from the source, with SCENE_START = 16
594
- subtracted to get local time.
595
- ================================================================ */
596
- const ASR = {
597
- // Phase 2 title keywords
598
- one: { start: 0.119, end: 0.279 },
599
- long: { start: 0.52, end: 0.719 },
600
- video: { start: 0.779, end: 1.44 },
601
- ten: { start: 1.479, end: 1.799 },
602
- viral: { start: 1.94, end: 2.219 },
603
- clips: { start: 2.279, end: 2.8 },
604
- };
605
-
606
- const TIMING = {
607
- // Phase 1: entry
608
- cardEntryStart: 0.0,
609
- cardEntryDur: 0.8,
610
- navbarFadeAt: 0.0,
611
- navbarFadeDur: 0.6,
612
- titleFadeAt: 0.17,
613
- titleFadeDur: 0.7,
614
- ctaFadeAt: 0.5,
615
- ctaFadeDur: 0.7,
616
-
617
- // Phase 2: keyword glows handled per-element via data attrs
618
-
619
- // Phase 3: scroll + carousel
620
- phase2StartAt: 3.08,
621
- scrollDur: 1.0,
622
- scrollDistance: 280,
623
- carouselFadeDur: 0.5,
624
-
625
- // Phase 4: pop-out + spotlight
626
- popStart: 3.58,
627
- popAttackDur: 0.67, // ramp 0 → 1
628
- popDecayDur: 0.33, // ramp 1 → 0.5 near end
629
- popEnd: 8.84,
630
- popRestLevel: 0.5,
631
- };
632
-
633
- const KEYWORD_REST_LEVEL = 0.14;
634
- const KEYWORD_SUSTAIN = 0.5; // seconds after ASR end before decay completes
635
-
636
- /* ================================================================
637
- TIMELINE
638
- ================================================================ */
639
- window.__timelines = window.__timelines || {};
640
- const tl = gsap.timeline({ paused: true });
641
- window.__timelines["main"] = tl;
642
-
643
- // Set the static 3D tilt + initial scale via GSAP so subsequent
644
- // scale tweens preserve the rotation aliases. (If we left
645
- // `transform: rotateY(...) rotateX(...) scale(0.95)` in CSS, a GSAP
646
- // tween touching only `scale` could overwrite the full matrix and
647
- // lose the rotation. Owning the transform state in GSAP avoids the
648
- // problem entirely.)
649
- gsap.set(".page-card", {
650
- rotationY: -8,
651
- rotationX: 3,
652
- scale: 0.95,
653
- });
654
-
655
- /* ----------------------------------------------------------------
656
- PHASE 1: Page card entry + navbar/title/CTA fade-in
657
- ---------------------------------------------------------------- */
658
- tl.to(
659
- ".page-card",
660
- { scale: 1.0, duration: TIMING.cardEntryDur, ease: "power2.out" },
661
- TIMING.cardEntryStart,
662
- );
663
-
664
- tl.fromTo(
665
- "#navbar",
666
- { opacity: 0 },
667
- { opacity: 1, duration: TIMING.navbarFadeDur, ease: "power2.out" },
668
- TIMING.navbarFadeAt,
669
- );
670
-
671
- tl.fromTo(
672
- "#hero",
673
- { opacity: 0 },
674
- { opacity: 1, duration: TIMING.titleFadeDur, ease: "power2.out" },
675
- TIMING.titleFadeAt,
676
- );
677
-
678
- tl.fromTo(
679
- "#cta-row",
680
- { opacity: 0 },
681
- { opacity: 1, duration: TIMING.ctaFadeDur, ease: "power2.out" },
682
- TIMING.ctaFadeAt,
683
- );
684
-
685
- /* ----------------------------------------------------------------
686
- PHASE 2: Keyword glows — two tweens per word.
687
- Attack (0 → 1) + decay (1 → REST_LEVEL). GSAP holds REST forever.
688
- ---------------------------------------------------------------- */
689
- document.querySelectorAll(".kw").forEach((kw) => {
690
- const start = Number(kw.dataset.glowStart);
691
- const end = Number(kw.dataset.glowEnd);
692
- const peak = start + (end - start) / 2;
693
- const restAt = end + KEYWORD_SUSTAIN;
694
-
695
- tl.fromTo(
696
- kw,
697
- { "--glow": 0 },
698
- { "--glow": 1.18, duration: peak - start, ease: "power2.out" },
699
- start,
700
- );
701
-
702
- tl.to(
703
- kw,
704
- { "--glow": KEYWORD_REST_LEVEL, duration: restAt - peak, ease: "power2.out" },
705
- peak,
706
- );
707
- });
708
-
709
- /* ----------------------------------------------------------------
710
- PHASE 3: Scroll + carousel entry
711
- ---------------------------------------------------------------- */
712
- tl.fromTo(
713
- "#scroll-content",
714
- { y: 0 },
715
- { y: -TIMING.scrollDistance, duration: TIMING.scrollDur, ease: "power2.inOut" },
716
- TIMING.phase2StartAt,
717
- );
718
-
719
- tl.fromTo(
720
- "#carousel",
721
- { opacity: 0, scale: 0.9 },
722
- { opacity: 1, scale: 1.0, duration: TIMING.carouselFadeDur, ease: "power2.out" },
723
- TIMING.phase2StartAt,
724
- );
725
-
726
- /* ----------------------------------------------------------------
727
- PHASE 4: Pop-out (driven by --glow on .carousel-main) + spotlight
728
- ---------------------------------------------------------------- */
729
- // Attack the pop-out glow.
730
- tl.fromTo(
731
- "#pop-target",
732
- { "--glow": 0 },
733
- { "--glow": 1, duration: TIMING.popAttackDur, ease: "power2.out" },
734
- TIMING.popStart,
735
- );
736
-
737
- // Decay at the end of the scene (mirrors original phase2End-10 / phase2End ramp).
738
- tl.to(
739
- "#pop-target",
740
- { "--glow": TIMING.popRestLevel, duration: TIMING.popDecayDur, ease: "power2.out" },
741
- TIMING.popEnd - TIMING.popDecayDur,
742
- );
743
-
744
- // Spotlight fades in alongside the pop attack, decays with the pop.
745
- tl.fromTo(
746
- "#spotlight",
747
- { opacity: 0 },
748
- { opacity: 1, duration: 0.5, ease: "power2.out" },
749
- TIMING.popStart,
750
- );
751
-
752
- tl.to(
753
- "#spotlight",
754
- { opacity: TIMING.popRestLevel, duration: TIMING.popDecayDur, ease: "power2.out" },
755
- TIMING.popEnd - TIMING.popDecayDur,
756
- );
757
- </script>
758
- </body>
759
- </html>
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=1920, height=1080" />
6
+ <title>Scene 04 — Contextual Product Showcase</title>
7
+
8
+ <!--
9
+ HyperFrames composition.tsx.
10
+
11
+ Choreography (4 phases, 9 seconds total):
12
+ 0.00 – 0.80s 3D-tilted page card scales 0.95 → 1.0
13
+ Navbar / title / CTA fade in (staggered)
14
+ 0.12 – 2.80s Title keywords glow synced to ASR words:
15
+ "1" "long" "video" "10" "viral" "clips"
16
+ 3.08 – 4.08s Page content scrolls up 280 px (programmatic scroll feel)
17
+ Carousel section fades in + scales from 0.9
18
+ 3.58 – 8.84s Main video pops forward in 3D (translateZ 80 px) + scales up
19
+ Radial spotlight dims the surroundings; decays at end
20
+ (attack 0→1 then decay 1→REST_LEVEL). All visual effects (color,
21
+ text-shadow, scale) derive from --glow via CSS calc()
22
+ - Pop-target uses the same --glow pattern; translateZ + scale derived
23
+ - Spotlight is a separate overlay with simple opacity tween
24
+ - Video placeholders are colored divs (no asset files needed)
25
+ - Tilt is static CSS, never tweened
26
+ -->
27
+
28
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
29
+
30
+ <style>
31
+ :root {
32
+ --page-bg: #0a0a0f;
33
+ --text-primary: #ffffff;
34
+ --text-secondary: #a1a1aa;
35
+ --accent: #edcb50;
36
+ --input-bg: #1a1a1f;
37
+ --green: #22c55e;
38
+ }
39
+ * {
40
+ margin: 0;
41
+ padding: 0;
42
+ box-sizing: border-box;
43
+ }
44
+ html,
45
+ body {
46
+ margin: 0;
47
+ width: 1920px;
48
+ height: 1080px;
49
+ overflow: hidden;
50
+ background: #000;
51
+ font-family:
52
+ "Inter",
53
+ system-ui,
54
+ -apple-system,
55
+ sans-serif;
56
+ color: var(--text-primary);
57
+ }
58
+
59
+ /* ============================================================
60
+ BACKGROUND
61
+ ============================================================ */
62
+ .bg {
63
+ position: absolute;
64
+ inset: 0;
65
+ background:
66
+ radial-gradient(
67
+ ellipse 100% 60% at 50% -10%,
68
+ rgba(100, 100, 150, 0.08) 0%,
69
+ transparent 60%
70
+ ),
71
+ var(--page-bg);
72
+ }
73
+
74
+ /* ============================================================
75
+ 3D PERSPECTIVE + TILTED CARD
76
+ ============================================================ */
77
+ .perspective-wrap {
78
+ position: absolute;
79
+ inset: 0;
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ perspective: 1200px;
84
+ }
85
+ .page-card {
86
+ width: 92%;
87
+ height: 88%;
88
+ background-color: var(--page-bg);
89
+ border-radius: 20px;
90
+ overflow: hidden;
91
+ transform-style: preserve-3d;
92
+ /* tilt + initial scale set by gsap.set() below so subsequent tweens preserve them */
93
+ box-shadow:
94
+ -30px 30px 60px rgba(0, 0, 0, 0.4),
95
+ -15px 15px 30px rgba(0, 0, 0, 0.3),
96
+ 0 0 80px rgba(0, 0, 0, 0.2);
97
+ border: 1px solid rgba(255, 255, 255, 0.1);
98
+ position: relative;
99
+ }
100
+
101
+ /* ============================================================
102
+ NAVBAR (sticks to top of card; NOT inside scroll content)
103
+ ============================================================ */
104
+ .page-navbar {
105
+ position: absolute;
106
+ top: 0;
107
+ left: 0;
108
+ right: 0;
109
+ height: 72px;
110
+ padding: 0 48px;
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: space-between;
114
+ z-index: 100;
115
+ opacity: 0; /* GSAP fades in */
116
+ background: linear-gradient(to bottom, rgba(10, 10, 15, 0.95), rgba(10, 10, 15, 0.6));
117
+ }
118
+ .nav-left {
119
+ display: flex;
120
+ align-items: center;
121
+ gap: 10px;
122
+ }
123
+ .nav-logo {
124
+ width: 32px;
125
+ height: 32px;
126
+ color: var(--text-primary);
127
+ }
128
+ .nav-brand {
129
+ font-size: 20px;
130
+ font-weight: 600;
131
+ letter-spacing: -0.5px;
132
+ }
133
+ .nav-center {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 28px;
137
+ }
138
+ .nav-item {
139
+ font-size: 14px;
140
+ font-weight: 500;
141
+ color: var(--text-secondary);
142
+ display: flex;
143
+ align-items: center;
144
+ }
145
+ .nav-item .chev {
146
+ margin-left: 4px;
147
+ font-size: 10px;
148
+ }
149
+ .nav-tag {
150
+ font-size: 10px;
151
+ background: var(--green);
152
+ color: #fff;
153
+ padding: 2px 6px;
154
+ border-radius: 4px;
155
+ font-weight: 600;
156
+ margin-right: 6px;
157
+ }
158
+ .nav-right {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 12px;
162
+ }
163
+ .nav-signin {
164
+ padding: 8px 16px;
165
+ border: 1px solid rgba(255, 255, 255, 0.2);
166
+ border-radius: 8px;
167
+ color: var(--text-primary);
168
+ font-size: 14px;
169
+ font-weight: 500;
170
+ }
171
+ .nav-signup {
172
+ padding: 8px 16px;
173
+ background: var(--accent);
174
+ border-radius: 8px;
175
+ color: var(--page-bg);
176
+ font-size: 14px;
177
+ font-weight: 600;
178
+ }
179
+
180
+ /* ============================================================
181
+ SCROLL CONTENT — GSAP tweens its y
182
+ ============================================================ */
183
+ .scroll-content {
184
+ padding-top: 140px;
185
+ padding-bottom: 60px;
186
+ display: flex;
187
+ flex-direction: column;
188
+ align-items: center;
189
+ will-change: transform;
190
+ }
191
+
192
+ /* ============================================================
193
+ HERO SECTION
194
+ ============================================================ */
195
+ .hero {
196
+ text-align: center;
197
+ max-width: 1200px;
198
+ width: 90%;
199
+ opacity: 0; /* GSAP fades in */
200
+ }
201
+ .hero-eyebrow {
202
+ font-size: 14px;
203
+ color: var(--accent);
204
+ text-transform: uppercase;
205
+ letter-spacing: 2px;
206
+ margin-bottom: 24px;
207
+ font-weight: 600;
208
+ }
209
+ .hero-title {
210
+ font-size: 64px;
211
+ font-weight: 700;
212
+ line-height: 1.1;
213
+ letter-spacing: -1px;
214
+ }
215
+ .hero-sub {
216
+ font-size: 20px;
217
+ color: rgba(255, 255, 255, 0.6);
218
+ margin-top: 24px;
219
+ font-weight: 400;
220
+ line-height: 1.5;
221
+ max-width: 800px;
222
+ margin-left: auto;
223
+ margin-right: auto;
224
+ }
225
+
226
+ /* ============================================================
227
+ KEYWORD GLOW — all derived from --glow CSS custom property
228
+ ============================================================ */
229
+ .kw {
230
+ --glow: 0;
231
+ display: inline-block;
232
+ position: relative;
233
+ z-index: 0;
234
+ padding: 0 0.015em;
235
+ color: rgb(
236
+ calc(255 - var(--glow) * 18) calc(255 - var(--glow) * 30) calc(255 - var(--glow) * 150)
237
+ );
238
+ text-shadow:
239
+ 0 0 calc(var(--glow) * 10px) rgba(255, 235, 120, calc(var(--glow) * 0.95)),
240
+ 0 0 calc(var(--glow) * 24px) rgba(237, 203, 80, calc(var(--glow) * 0.78)),
241
+ 0 0 calc(var(--glow) * 44px) rgba(237, 203, 80, calc(var(--glow) * 0.38));
242
+ transform: scale(calc(1 + var(--glow) * 0.035));
243
+ }
244
+ .kw::before {
245
+ content: "";
246
+ position: absolute;
247
+ left: -0.025em;
248
+ right: -0.025em;
249
+ top: 0.08em;
250
+ bottom: 0.05em;
251
+ z-index: -1;
252
+ border-radius: 0.16em;
253
+ background: linear-gradient(
254
+ 90deg,
255
+ rgba(237, 203, 80, 0.08),
256
+ rgba(255, 222, 80, 0.72),
257
+ rgba(237, 203, 80, 0.12)
258
+ );
259
+ opacity: calc(var(--glow) * 0.78);
260
+ transform: scaleX(calc(0.72 + var(--glow) * 0.24)) skewX(-5deg);
261
+ transform-origin: left center;
262
+ box-shadow:
263
+ 0 0 calc(var(--glow) * 14px) rgba(237, 203, 80, calc(var(--glow) * 0.7)),
264
+ 0 0 calc(var(--glow) * 28px) rgba(237, 203, 80, calc(var(--glow) * 0.32));
265
+ }
266
+
267
+ /* ============================================================
268
+ CTA INPUT ROW
269
+ ============================================================ */
270
+ .cta-row {
271
+ display: flex;
272
+ align-items: center;
273
+ justify-content: center;
274
+ gap: 16px;
275
+ margin-top: 36px;
276
+ opacity: 0; /* GSAP fades in */
277
+ }
278
+ .cta-input {
279
+ display: flex;
280
+ align-items: center;
281
+ background: var(--input-bg);
282
+ border-radius: 28px;
283
+ padding: 6px 6px 6px 18px;
284
+ gap: 12px;
285
+ }
286
+ .cta-link-icon {
287
+ width: 16px;
288
+ height: 16px;
289
+ color: rgba(255, 255, 255, 0.4);
290
+ }
291
+ .cta-placeholder {
292
+ font-size: 14px;
293
+ color: rgba(255, 255, 255, 0.4);
294
+ min-width: 130px;
295
+ }
296
+ .cta-button {
297
+ padding: 12px 24px;
298
+ background: #fff;
299
+ border-radius: 22px;
300
+ color: var(--page-bg);
301
+ font-size: 14px;
302
+ font-weight: 600;
303
+ }
304
+ .cta-or {
305
+ color: rgba(255, 255, 255, 0.4);
306
+ font-size: 14px;
307
+ }
308
+ .cta-upload {
309
+ padding: 12px 24px;
310
+ border: 1px solid rgba(255, 255, 255, 0.2);
311
+ border-radius: 22px;
312
+ color: var(--text-primary);
313
+ font-size: 14px;
314
+ font-weight: 500;
315
+ }
316
+
317
+ /* ============================================================
318
+ VIDEO CAROUSEL (Phase 2 entry, Phase 4 pop-out)
319
+ ============================================================ */
320
+ .carousel-wrap {
321
+ opacity: 0; /* GSAP fades in */
322
+ transform: scale(0.9); /* GSAP scales to 1 */
323
+ transform-origin: center top;
324
+ margin-top: 48px;
325
+ display: flex;
326
+ justify-content: center;
327
+ align-items: center;
328
+ gap: 20px;
329
+ width: 100%;
330
+ max-width: 1400px;
331
+ padding: 0 20px;
332
+ perspective: 800px;
333
+ transform-style: preserve-3d;
334
+ }
335
+ .carousel-arrow {
336
+ width: 44px;
337
+ height: 44px;
338
+ border-radius: 50%;
339
+ background: rgba(60, 60, 65, 0.8);
340
+ display: flex;
341
+ align-items: center;
342
+ justify-content: center;
343
+ color: #fff;
344
+ flex-shrink: 0;
345
+ font-size: 24px;
346
+ font-weight: 300;
347
+ }
348
+
349
+ /* Main video — Phase 4 pop-out target */
350
+ .carousel-main {
351
+ --glow: 0;
352
+ width: 720px;
353
+ height: 420px;
354
+ background: var(--input-bg);
355
+ border-radius: 16px;
356
+ position: relative;
357
+ overflow: hidden;
358
+ flex-shrink: 0;
359
+ transform-style: preserve-3d;
360
+ transform: translateZ(calc(var(--glow) * 80px)) scale(calc(1 + var(--glow) * 0.15));
361
+ box-shadow:
362
+ 0 0 calc(var(--glow) * 25px) rgba(237, 203, 80, calc(var(--glow) * 0.7)),
363
+ 0 0 calc(var(--glow) * 50px) rgba(237, 203, 80, calc(var(--glow) * 0.4)),
364
+ 0 calc(20px + var(--glow) * 40px) calc(60px + var(--glow) * 40px)
365
+ rgba(0, 0, 0, calc(0.6 + var(--glow) * 0.2));
366
+ border: 3px solid rgba(237, 203, 80, calc(var(--glow) * 0.8));
367
+ z-index: 200;
368
+ }
369
+ .carousel-main-placeholder {
370
+ position: absolute;
371
+ inset: 0;
372
+ display: flex;
373
+ align-items: center;
374
+ justify-content: center;
375
+ font-size: 28px;
376
+ font-weight: 600;
377
+ color: rgba(255, 255, 255, 0.5);
378
+ background: linear-gradient(135deg, #1a2540 0%, #3d2a4f 50%, #4f1d2e 100%);
379
+ }
380
+ .carousel-main-placeholder span {
381
+ background: rgba(0, 0, 0, 0.4);
382
+ padding: 8px 20px;
383
+ border-radius: 8px;
384
+ }
385
+
386
+ /* Side panel */
387
+ .carousel-side {
388
+ width: 420px;
389
+ height: 280px;
390
+ background: var(--input-bg);
391
+ border-radius: 16px;
392
+ position: relative;
393
+ overflow: hidden;
394
+ flex-shrink: 0;
395
+ }
396
+ .carousel-side-placeholder {
397
+ position: absolute;
398
+ inset: 0;
399
+ background: linear-gradient(135deg, #2a3550 0%, #4a3a5a 100%);
400
+ display: flex;
401
+ align-items: center;
402
+ justify-content: center;
403
+ font-size: 18px;
404
+ font-weight: 600;
405
+ color: rgba(255, 255, 255, 0.5);
406
+ }
407
+ .presets-stack {
408
+ position: absolute;
409
+ top: 16px;
410
+ right: 16px;
411
+ display: flex;
412
+ flex-direction: column;
413
+ gap: 8px;
414
+ z-index: 5;
415
+ }
416
+ .preset-label {
417
+ padding: 8px 14px;
418
+ background: rgba(255, 255, 255, 0.12);
419
+ border-radius: 8px;
420
+ color: rgba(255, 255, 255, 0.8);
421
+ font-size: 12px;
422
+ font-weight: 500;
423
+ }
424
+ .preset-tile {
425
+ width: 44px;
426
+ height: 44px;
427
+ background: rgba(255, 255, 255, 0.08);
428
+ border-radius: 8px;
429
+ align-self: flex-end;
430
+ }
431
+
432
+ /* ============================================================
433
+ SPOTLIGHT OVERLAY (above page card, dims surroundings)
434
+ ============================================================ */
435
+ .spotlight {
436
+ position: absolute;
437
+ inset: 0;
438
+ background: radial-gradient(
439
+ ellipse 850px 550px at 40% 60%,
440
+ transparent 0%,
441
+ transparent 50%,
442
+ rgba(0, 0, 0, 0.65) 100%
443
+ );
444
+ pointer-events: none;
445
+ opacity: 0; /* GSAP fades in during Phase 4 */
446
+ z-index: 150;
447
+ }
448
+
449
+ /* ============================================================
450
+ VIGNETTE
451
+ ============================================================ */
452
+ .vignette {
453
+ position: absolute;
454
+ inset: 0;
455
+ background: radial-gradient(ellipse at center, transparent 50%, rgba(0, 0, 0, 0.3) 100%);
456
+ pointer-events: none;
457
+ z-index: 400;
458
+ }
459
+ </style>
460
+ </head>
461
+ <body>
462
+ <div
463
+ id="root"
464
+ data-composition-id="main"
465
+ data-start="0"
466
+ data-duration="9"
467
+ data-width="1920"
468
+ data-height="1080"
469
+ >
470
+ <div class="bg"></div>
471
+
472
+ <div class="perspective-wrap">
473
+ <div
474
+ class="page-card clip"
475
+ data-start="0"
476
+ data-duration="9"
477
+ data-track-index="1"
478
+ id="page-card"
479
+ >
480
+ <!-- Navbar (anchored to card top) -->
481
+ <nav class="page-navbar" id="navbar">
482
+ <div class="nav-left">
483
+ <svg
484
+ class="nav-logo"
485
+ viewBox="0 0 24 24"
486
+ fill="none"
487
+ xmlns="http://www.w3.org/2000/svg"
488
+ aria-hidden="true"
489
+ >
490
+ <path
491
+ fill="currentColor"
492
+ d="M11.954 3.817c-4.49 0-8.132 3.644-8.152 8.146v12H0V12C0 5.373 5.352 0 11.954 0s11.953 5.373 11.953 12-5.351 12-11.953 12a12 12 0 0 1-1.718-.123v-3.876q.831.181 1.718.182c4.502 0 8.152-3.663 8.152-8.183s-3.65-8.183-8.152-8.183"
493
+ />
494
+ <path
495
+ fill="currentColor"
496
+ d="M5.118 24V11.995c0-3.79 3.062-6.857 6.836-6.857 3.773 0 6.836 3.068 6.836 6.857s-3.063 6.857-6.836 6.857c-.594 0-1.17-.076-1.718-.218V14.5c.488.337 1.08.534 1.718.534a3.037 3.037 0 0 0 3.034-3.04 3.037 3.037 0 0 0-3.034-3.04 3.037 3.037 0 0 0-3.034 3.008V24z"
497
+ />
498
+ </svg>
499
+ <span class="nav-brand">OpusClip</span>
500
+ </div>
501
+ <div class="nav-center">
502
+ <span class="nav-item">Features<span class="chev">▾</span></span>
503
+ <span class="nav-item">Solutions<span class="chev">▾</span></span>
504
+ <span class="nav-item">Resources<span class="chev">▾</span></span>
505
+ <span class="nav-item">Pricing</span>
506
+ <span class="nav-item">For business<span class="chev">▾</span></span>
507
+ <span class="nav-item"><span class="nav-tag">New</span>Agent Opus</span>
508
+ </div>
509
+ <div class="nav-right">
510
+ <span class="nav-signin">Sign in</span>
511
+ <span class="nav-signup">Sign up - It's FREE</span>
512
+ </div>
513
+ </nav>
514
+
515
+ <!-- Scrollable content -->
516
+ <div class="scroll-content" id="scroll-content">
517
+ <div class="hero" id="hero">
518
+ <div class="hero-eyebrow">#1 AI VIDEO CLIPPING TOOL</div>
519
+ <h1 class="hero-title">
520
+ <span class="kw" data-glow-start="0.12" data-glow-end="0.28">1</span>
521
+ <span class="kw" data-glow-start="0.52" data-glow-end="0.72">long</span>
522
+ <span class="kw" data-glow-start="0.78" data-glow-end="1.44">video,</span>
523
+ <span class="kw" data-glow-start="1.48" data-glow-end="1.80">10</span>
524
+ <span class="kw" data-glow-start="1.94" data-glow-end="2.22">viral</span>
525
+ <span class="kw" data-glow-start="2.28" data-glow-end="2.80">clips.</span>
526
+ <br />Create 10x faster.
527
+ </h1>
528
+ <p class="hero-sub">
529
+ OpusClip turns long videos into shorts, and publishes them to all social platforms
530
+ in one click.
531
+ </p>
532
+ </div>
533
+
534
+ <div class="cta-row" id="cta-row">
535
+ <div class="cta-input">
536
+ <svg
537
+ class="cta-link-icon"
538
+ viewBox="0 0 24 24"
539
+ fill="none"
540
+ stroke="currentColor"
541
+ stroke-width="2"
542
+ stroke-linecap="round"
543
+ stroke-linejoin="round"
544
+ aria-hidden="true"
545
+ >
546
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" />
547
+ <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />
548
+ </svg>
549
+ <span class="cta-placeholder">Drop a video link</span>
550
+ <div class="cta-button">Get free clips</div>
551
+ </div>
552
+ <span class="cta-or">or</span>
553
+ <div class="cta-upload">Upload files</div>
554
+ </div>
555
+
556
+ <!-- Video carousel section -->
557
+ <div class="carousel-wrap" id="carousel">
558
+ <div class="carousel-arrow">‹</div>
559
+
560
+ <div class="carousel-main pop-target" id="pop-target">
561
+ <div class="carousel-main-placeholder">
562
+ <span>Hero animation</span>
563
+ </div>
564
+ </div>
565
+
566
+ <div class="carousel-arrow">›</div>
567
+
568
+ <div class="carousel-side">
569
+ <div class="carousel-side-placeholder">Demo · reframe</div>
570
+ <div class="presets-stack">
571
+ <div class="preset-label">Presets</div>
572
+ <div class="preset-tile"></div>
573
+ <div class="preset-tile"></div>
574
+ <div class="preset-tile"></div>
575
+ <div class="preset-tile"></div>
576
+ </div>
577
+ </div>
578
+ </div>
579
+ </div>
580
+ <!-- /.scroll-content -->
581
+ </div>
582
+ <!-- /.page-card -->
583
+ </div>
584
+ <!-- /.perspective-wrap -->
585
+
586
+ <div class="spotlight" id="spotlight"></div>
587
+ <div class="vignette"></div>
588
+ </div>
589
+
590
+ <script>
591
+ /* ================================================================
592
+ TIMING — all in local seconds (scene starts at 0).
593
+ ASR timestamps are direct from the source, with SCENE_START = 16
594
+ subtracted to get local time.
595
+ ================================================================ */
596
+ const ASR = {
597
+ // Phase 2 title keywords
598
+ one: { start: 0.119, end: 0.279 },
599
+ long: { start: 0.52, end: 0.719 },
600
+ video: { start: 0.779, end: 1.44 },
601
+ ten: { start: 1.479, end: 1.799 },
602
+ viral: { start: 1.94, end: 2.219 },
603
+ clips: { start: 2.279, end: 2.8 },
604
+ };
605
+
606
+ const TIMING = {
607
+ // Phase 1: entry
608
+ cardEntryStart: 0.0,
609
+ cardEntryDur: 0.8,
610
+ navbarFadeAt: 0.0,
611
+ navbarFadeDur: 0.6,
612
+ titleFadeAt: 0.17,
613
+ titleFadeDur: 0.7,
614
+ ctaFadeAt: 0.5,
615
+ ctaFadeDur: 0.7,
616
+
617
+ // Phase 2: keyword glows handled per-element via data attrs
618
+
619
+ // Phase 3: scroll + carousel
620
+ phase2StartAt: 3.08,
621
+ scrollDur: 1.0,
622
+ scrollDistance: 280,
623
+ carouselFadeDur: 0.5,
624
+
625
+ // Phase 4: pop-out + spotlight
626
+ popStart: 3.58,
627
+ popAttackDur: 0.67, // ramp 0 → 1
628
+ popDecayDur: 0.33, // ramp 1 → 0.5 near end
629
+ popEnd: 8.84,
630
+ popRestLevel: 0.5,
631
+ };
632
+
633
+ const KEYWORD_REST_LEVEL = 0.14;
634
+ const KEYWORD_SUSTAIN = 0.5; // seconds after ASR end before decay completes
635
+
636
+ /* ================================================================
637
+ TIMELINE
638
+ ================================================================ */
639
+ window.__timelines = window.__timelines || {};
640
+ const tl = gsap.timeline({ paused: true });
641
+ window.__timelines["main"] = tl;
642
+
643
+ // Set the static 3D tilt + initial scale via GSAP so subsequent
644
+ // scale tweens preserve the rotation aliases. (If we left
645
+ // `transform: rotateY(...) rotateX(...) scale(0.95)` in CSS, a GSAP
646
+ // tween touching only `scale` could overwrite the full matrix and
647
+ // lose the rotation. Owning the transform state in GSAP avoids the
648
+ // problem entirely.)
649
+ gsap.set(".page-card", {
650
+ rotationY: -8,
651
+ rotationX: 3,
652
+ scale: 0.95,
653
+ });
654
+
655
+ /* ----------------------------------------------------------------
656
+ PHASE 1: Page card entry + navbar/title/CTA fade-in
657
+ ---------------------------------------------------------------- */
658
+ tl.to(
659
+ ".page-card",
660
+ { scale: 1.0, duration: TIMING.cardEntryDur, ease: "power2.out" },
661
+ TIMING.cardEntryStart,
662
+ );
663
+
664
+ tl.fromTo(
665
+ "#navbar",
666
+ { opacity: 0 },
667
+ { opacity: 1, duration: TIMING.navbarFadeDur, ease: "power2.out" },
668
+ TIMING.navbarFadeAt,
669
+ );
670
+
671
+ tl.fromTo(
672
+ "#hero",
673
+ { opacity: 0 },
674
+ { opacity: 1, duration: TIMING.titleFadeDur, ease: "power2.out" },
675
+ TIMING.titleFadeAt,
676
+ );
677
+
678
+ tl.fromTo(
679
+ "#cta-row",
680
+ { opacity: 0 },
681
+ { opacity: 1, duration: TIMING.ctaFadeDur, ease: "power2.out" },
682
+ TIMING.ctaFadeAt,
683
+ );
684
+
685
+ /* ----------------------------------------------------------------
686
+ PHASE 2: Keyword glows — two tweens per word.
687
+ Attack (0 → 1) + decay (1 → REST_LEVEL). GSAP holds REST forever.
688
+ ---------------------------------------------------------------- */
689
+ document.querySelectorAll(".kw").forEach((kw) => {
690
+ const start = Number(kw.dataset.glowStart);
691
+ const end = Number(kw.dataset.glowEnd);
692
+ const peak = start + (end - start) / 2;
693
+ const restAt = end + KEYWORD_SUSTAIN;
694
+
695
+ tl.fromTo(
696
+ kw,
697
+ { "--glow": 0 },
698
+ { "--glow": 1.18, duration: peak - start, ease: "power2.out" },
699
+ start,
700
+ );
701
+
702
+ tl.to(
703
+ kw,
704
+ { "--glow": KEYWORD_REST_LEVEL, duration: restAt - peak, ease: "power2.out" },
705
+ peak,
706
+ );
707
+ });
708
+
709
+ /* ----------------------------------------------------------------
710
+ PHASE 3: Scroll + carousel entry
711
+ ---------------------------------------------------------------- */
712
+ tl.fromTo(
713
+ "#scroll-content",
714
+ { y: 0 },
715
+ { y: -TIMING.scrollDistance, duration: TIMING.scrollDur, ease: "power2.inOut" },
716
+ TIMING.phase2StartAt,
717
+ );
718
+
719
+ tl.fromTo(
720
+ "#carousel",
721
+ { opacity: 0, scale: 0.9 },
722
+ { opacity: 1, scale: 1.0, duration: TIMING.carouselFadeDur, ease: "power2.out" },
723
+ TIMING.phase2StartAt,
724
+ );
725
+
726
+ /* ----------------------------------------------------------------
727
+ PHASE 4: Pop-out (driven by --glow on .carousel-main) + spotlight
728
+ ---------------------------------------------------------------- */
729
+ // Attack the pop-out glow.
730
+ tl.fromTo(
731
+ "#pop-target",
732
+ { "--glow": 0 },
733
+ { "--glow": 1, duration: TIMING.popAttackDur, ease: "power2.out" },
734
+ TIMING.popStart,
735
+ );
736
+
737
+ // Decay at the end of the scene (mirrors original phase2End-10 / phase2End ramp).
738
+ tl.to(
739
+ "#pop-target",
740
+ { "--glow": TIMING.popRestLevel, duration: TIMING.popDecayDur, ease: "power2.out" },
741
+ TIMING.popEnd - TIMING.popDecayDur,
742
+ );
743
+
744
+ // Spotlight fades in alongside the pop attack, decays with the pop.
745
+ tl.fromTo(
746
+ "#spotlight",
747
+ { opacity: 0 },
748
+ { opacity: 1, duration: 0.5, ease: "power2.out" },
749
+ TIMING.popStart,
750
+ );
751
+
752
+ tl.to(
753
+ "#spotlight",
754
+ { opacity: TIMING.popRestLevel, duration: TIMING.popDecayDur, ease: "power2.out" },
755
+ TIMING.popEnd - TIMING.popDecayDur,
756
+ );
757
+ </script>
758
+ </body>
759
+ </html>