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,610 +1,610 @@
1
- <!doctype html>
2
- <html
3
- lang="en"
4
- data-composition-variables='[
5
- {"id":"theme", "type":"string", "label":"Palette — light | dark | bold", "default":"light"},
6
- {"id":"icon", "type":"string", "label":"Climax icon — bell|cursor|sparkle|bolt|play|heart|check|star, an emoji, <svg>, or none", "default":"bell"},
7
- {"id":"phrases", "type":"string", "label":"Phrases JSON (empty = built-in intro)", "default":""},
8
- {"id":"climax", "type":"string", "label":"Climax JSON {text,in,iconAt,hold,size} (empty = default)","default":""}
9
- ]'
10
- >
11
- <head>
12
- <meta charset="UTF-8" />
13
- <meta name="viewport" content="width=1920, height=1080" />
14
- <title>Intro Kinetic Cascade · beat-synced kinetic typography — reference impl</title>
15
- <script src="../../motion-primitives/assets/gsap.min.js"></script>
16
- <style>
17
- *,
18
- *::before,
19
- *::after {
20
- margin: 0;
21
- padding: 0;
22
- box-sizing: border-box;
23
- }
24
- html,
25
- body {
26
- width: 1920px;
27
- height: 1080px;
28
- overflow: hidden;
29
- background: #f5f5f7;
30
- }
31
- #root {
32
- position: relative;
33
- width: 1920px;
34
- height: 1080px;
35
- overflow: hidden;
36
- background: #f5f5f7;
37
- color: #1d1d1f;
38
- font-family: "Inter", "Helvetica Neue", Arial, sans-serif;
39
- }
40
- #stage {
41
- position: absolute;
42
- inset: 0;
43
- }
44
-
45
- /* A PHRASE = a stacked, left-aligned editorial poster, vertically centered.
46
- Word-by-word reveal, then a hard cut-out. */
47
- .phrase {
48
- position: absolute;
49
- left: 0;
50
- right: 0;
51
- top: 50%;
52
- transform: translateY(-50%);
53
- display: flex;
54
- flex-direction: column;
55
- align-items: flex-start;
56
- opacity: 0;
57
- will-change: opacity;
58
- }
59
- .line {
60
- font-weight: 900;
61
- letter-spacing: -0.045em;
62
- line-height: 0.88;
63
- white-space: nowrap;
64
- }
65
- .line + .line {
66
- margin-top: -0.04em;
67
- }
68
- /* the HERO line's elegant serif-italic contrast (offline system fallback) */
69
- .line.serif {
70
- font-family: "Playfair Display", Georgia, "Times New Roman", serif;
71
- font-style: italic;
72
- letter-spacing: -0.02em;
73
- }
74
- .w {
75
- display: inline-block;
76
- opacity: 0;
77
- will-change: opacity;
78
- }
79
- .w.grad {
80
- background: var(--grad);
81
- background-size: 200% 100%;
82
- background-position: 0% 50%;
83
- -webkit-background-clip: text;
84
- background-clip: text;
85
- -webkit-text-fill-color: transparent;
86
- color: transparent;
87
- }
88
-
89
- /* The CLIMAX phrase SLIDES in, holds to the end, and may carry an inline
90
- animated icon (the {icon} token). */
91
- .climax {
92
- position: absolute;
93
- left: 50%;
94
- top: 50%;
95
- display: flex;
96
- align-items: center;
97
- gap: 0.32em;
98
- white-space: nowrap;
99
- opacity: 0;
100
- font-weight: 900;
101
- letter-spacing: -0.035em;
102
- line-height: 1;
103
- will-change: transform, opacity;
104
- }
105
- .cword {
106
- flex-shrink: 0;
107
- }
108
- .icon {
109
- display: inline-flex;
110
- align-items: center;
111
- justify-content: center;
112
- position: relative;
113
- flex-shrink: 0;
114
- opacity: 0;
115
- overflow: visible;
116
- line-height: 1;
117
- }
118
- .icon-glyph {
119
- position: relative;
120
- display: flex;
121
- align-items: center;
122
- justify-content: center;
123
- transform-origin: 50% 14%;
124
- }
125
- .icon-glyph svg {
126
- display: block;
127
- width: 100%;
128
- height: 100%;
129
- }
130
- .ring {
131
- position: absolute;
132
- left: 50%;
133
- top: 50%;
134
- border-radius: 50%;
135
- border: 3px solid var(--ring1);
136
- opacity: 0;
137
- transform: translate(-50%, -50%) scale(0.4);
138
- }
139
- .ring.ring2 {
140
- border-color: var(--ring2);
141
- }
142
- </style>
143
- </head>
144
- <body>
145
- <div
146
- data-hf-id="hf-ikc-root"
147
- id="root"
148
- data-composition-id="intro-kinetic-cascade"
149
- data-width="1920"
150
- data-height="1080"
151
- data-start="0"
152
- data-duration="7"
153
- data-root="true"
154
- >
155
- <div data-hf-id="hf-ikc-stage" id="stage"></div>
156
-
157
- <script>
158
- (function () {
159
- // ════════════════════════════════════════════════════════════════════
160
- // INTRO KINETIC CASCADE · beat-synced editorial kinetic typography
161
- // ────────────────────────────────────────────────────────────────────
162
- // A spoken/anchored line laid out as a sequence of big editorial PHRASES,
163
- // each revealed word-by-word on its anchors (VO word-times OR audio onsets),
164
- // hard cut-out between them, climaxing on a phrase that SLIDES in with a
165
- // swappable, ringing ICON. Asset-free: system type, inline-SVG icon library,
166
- // bundled GSAP. Reversed from the VO intro `act0-intro-bell`.
167
- //
168
- // COMPOSE BY DATA — `phrases` (the cascade) + `climax` (the finale) + `icon`
169
- // (which glyph rings) + `theme` (palette). The icon is its own knob so it can
170
- // match the scene: bell for timing, cursor for a click, sparkle for AI, …
171
- // ════════════════════════════════════════════════════════════════════
172
-
173
- window.__timelines = window.__timelines || {};
174
-
175
- // ── 1. Variables ──
176
- var defaults = { theme: "light", icon: "bell", phrases: "", climax: "" };
177
- var vars = Object.assign(
178
- {},
179
- defaults,
180
- window.__hyperframes && window.__hyperframes.getVariables
181
- ? window.__hyperframes.getVariables()
182
- : {},
183
- );
184
-
185
- // ── 2. Palette themes (accents are AA-tuned on each bg) ──
186
- var THEMES = {
187
- light: {
188
- bg: "#f5f5f7",
189
- ink: "#1d1d1f",
190
- accents: ["#0b8a3e", "#0a78b4", "gradient"],
191
- gradFrom: "#0a78b4",
192
- gradTo: "#0b8a3e",
193
- },
194
- dark: {
195
- bg: "#0d0e12",
196
- ink: "#f2f3f5",
197
- accents: ["#3be06b", "#37c6ff", "gradient"],
198
- gradFrom: "#37c6ff",
199
- gradTo: "#3be06b",
200
- },
201
- bold: {
202
- bg: "#0a1228",
203
- ink: "#ffffff",
204
- accents: ["#ffd23f", "#ff5da2", "gradient"],
205
- gradFrom: "#ff5da2",
206
- gradTo: "#ffd23f",
207
- },
208
- };
209
- var TH = THEMES[String(vars.theme || "").trim()] || THEMES.light;
210
-
211
- function hexRgba(hex, a) {
212
- var h = String(hex).replace(/^#/, "");
213
- if (h.length === 3) h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
214
- var n = parseInt(h, 16);
215
- return (
216
- "rgba(" + ((n >> 16) & 255) + "," + ((n >> 8) & 255) + "," + (n & 255) + "," + a + ")"
217
- );
218
- }
219
-
220
- // ── 3. Inline-SVG icon library (asset-free; fill follows the text color) ──
221
- var ICONS = {
222
- bell: '<path d="M12 2.2a1.9 1.9 0 0 1 1.9 1.9v.7a6.2 6.2 0 0 1 4.3 5.9v3.5l1.9 2.1v1.1H3.9v-1.1l1.9-2.1V10.7a6.2 6.2 0 0 1 4.3-5.9v-.7A1.9 1.9 0 0 1 12 2.2zM9.6 19.6h4.8a2.4 2.4 0 0 1-4.8 0z"/>',
223
- cursor: '<path d="M5.5 2.6l13.4 7.9-5.9 1.2-1.1 5.9-6.4-15z"/>',
224
- sparkle: '<path d="M12 1.8l2.1 6.9 6.9 2.1-6.9 2.1L12 19.8l-2.1-6.9L3 10.8l6.9-2.1z"/>',
225
- bolt: '<path d="M13.2 1.8L4.4 13.6h5.6l-1.2 8.6 9.2-12.4h-5.8z"/>',
226
- play: '<path d="M12 2.4a9.6 9.6 0 1 0 0 19.2 9.6 9.6 0 0 0 0-19.2zm-2.1 5.1l6 4.5-6 4.5z"/>',
227
- heart:
228
- '<path d="M12 21.2S2.8 15.4 2.8 8.9C2.8 5.8 5.1 4 7.6 4c1.9 0 3.4 1.1 4.4 2.6C13 5.1 14.5 4 16.4 4c2.5 0 4.8 1.8 4.8 4.9 0 6.5-9.2 12.3-9.2 12.3z"/>',
229
- check: '<path d="M9.6 16.7L4.8 11.9l1.7-1.7 3.1 3.1 7.9-7.9 1.7 1.7z"/>',
230
- star: '<path d="M12 2.2l2.9 6.4 7 .6-5.3 4.6 1.6 6.8L12 17.4 5.8 20.6l1.6-6.8L2.1 9.2l7-.6z"/>',
231
- };
232
- function iconSVG(name) {
233
- return (
234
- '<svg viewBox="0 0 24 24" fill="currentColor" width="100%" height="100%">' +
235
- ICONS[name] +
236
- "</svg>"
237
- );
238
- }
239
- // Insert SVG markup as SANITIZED parsed nodes — never innerHTML, and never
240
- // a raw appendChild. DOMParser builds the tree, then cleanSvg() hard-strips
241
- // everything that isn't inert drawing: only allow-listed shape elements +
242
- // presentation attributes survive, so <script>, <image>/<use>/<foreignObject>,
243
- // javascript: hrefs and every on* handler are removed before the nodes ever
244
- // enter the live document. A custom icon SVG therefore can't smuggle active
245
- // content (CWE-79 DOM-XSS). Non-SVG / malformed input falls back to text.
246
- var SVG_OK_TAGS = {
247
- svg: 1,
248
- g: 1,
249
- path: 1,
250
- line: 1,
251
- polyline: 1,
252
- polygon: 1,
253
- rect: 1,
254
- circle: 1,
255
- ellipse: 1,
256
- defs: 1,
257
- lineargradient: 1,
258
- radialgradient: 1,
259
- stop: 1,
260
- clippath: 1,
261
- title: 1,
262
- desc: 1,
263
- text: 1,
264
- tspan: 1,
265
- };
266
- var SVG_OK_ATTRS = {
267
- viewbox: 1,
268
- xmlns: 1,
269
- width: 1,
270
- height: 1,
271
- fill: 1,
272
- "fill-rule": 1,
273
- "fill-opacity": 1,
274
- stroke: 1,
275
- "stroke-width": 1,
276
- "stroke-linecap": 1,
277
- "stroke-linejoin": 1,
278
- "stroke-dasharray": 1,
279
- "stroke-dashoffset": 1,
280
- "stroke-opacity": 1,
281
- opacity: 1,
282
- d: 1,
283
- x: 1,
284
- y: 1,
285
- x1: 1,
286
- y1: 1,
287
- x2: 1,
288
- y2: 1,
289
- cx: 1,
290
- cy: 1,
291
- r: 1,
292
- rx: 1,
293
- ry: 1,
294
- points: 1,
295
- transform: 1,
296
- offset: 1,
297
- "stop-color": 1,
298
- "stop-opacity": 1,
299
- gradientunits: 1,
300
- gradienttransform: 1,
301
- "clip-path": 1,
302
- "clip-rule": 1,
303
- class: 1,
304
- id: 1,
305
- };
306
- function cleanSvg(node) {
307
- var attrs = Array.prototype.slice.call(node.attributes || []);
308
- for (var a = 0; a < attrs.length; a++) {
309
- if (!SVG_OK_ATTRS[attrs[a].name.toLowerCase()]) node.removeAttribute(attrs[a].name);
310
- }
311
- var kids = Array.prototype.slice.call(node.childNodes);
312
- for (var k = 0; k < kids.length; k++) {
313
- var c = kids[k];
314
- if (c.nodeType === 1) {
315
- if (SVG_OK_TAGS[(c.localName || c.nodeName).toLowerCase()]) cleanSvg(c);
316
- else node.removeChild(c);
317
- } else if (c.nodeType !== 3) {
318
- node.removeChild(c);
319
- }
320
- }
321
- }
322
- function setSvg(el, markup) {
323
- el.textContent = "";
324
- var doc = new DOMParser().parseFromString(String(markup), "image/svg+xml");
325
- var root = doc.documentElement;
326
- if (
327
- !root ||
328
- root.nodeName.toLowerCase() !== "svg" ||
329
- doc.getElementsByTagName("parsererror").length
330
- ) {
331
- el.textContent = String(markup);
332
- return;
333
- }
334
- cleanSvg(root);
335
- el.appendChild(document.importNode(root, true));
336
- }
337
-
338
- // ── 4. Default program (reversed from act0-intro-bell) ──
339
- var DEFAULT_PHRASES = [
340
- {
341
- out: 1.36,
342
- lines: [
343
- { text: "If you've", size: 220, x: 140 },
344
- { text: "ever", size: 520, x: 240, hero: true, font: "serif" },
345
- { text: "used AI", size: 280, x: 780 },
346
- ],
347
- times: [0.14, 0.3, 0.55, 0.87, 1.06],
348
- },
349
- {
350
- out: 3.06,
351
- lines: [
352
- { text: "for", size: 220, x: 160 },
353
- { text: "video", size: 500, x: 220, hero: true },
354
- { text: "editing before,", size: 200, x: 220 },
355
- ],
356
- times: [1.36, 1.58, 1.92, 2.48],
357
- },
358
- {
359
- out: 3.79,
360
- lines: [
361
- { text: "you", size: 240, x: 200 },
362
- { text: "know", size: 500, x: 260, hero: true, accent: "gradient" },
363
- { text: "that", size: 340, x: 820 },
364
- ],
365
- times: [3.06, 3.3, 3.54],
366
- },
367
- ];
368
- var DEFAULT_CLIMAX = {
369
- text: "timing is {icon} tricky.",
370
- in: 3.79,
371
- iconAt: 4.9,
372
- hold: 1.3,
373
- size: 150,
374
- };
375
-
376
- var WORD_FADE = 0.18,
377
- CUT = 0.1,
378
- SLIDE = 0.42,
379
- OFFSCREEN_R = 1400;
380
-
381
- function parseJSON(v, fallback) {
382
- if (!v) return fallback;
383
- if (typeof v !== "string") return v;
384
- try {
385
- var p = JSON.parse(v);
386
- return p || fallback;
387
- } catch (e) {
388
- return fallback;
389
- }
390
- }
391
- var PHRASES = parseJSON(vars.phrases, DEFAULT_PHRASES);
392
- if (!PHRASES.length) PHRASES = DEFAULT_PHRASES;
393
- var C = Object.assign({}, DEFAULT_CLIMAX, parseJSON(vars.climax, {}));
394
-
395
- var words = function (s) {
396
- return String(s).trim().split(/\s+/).filter(Boolean);
397
- };
398
-
399
- // ── 5. Theme the field ──
400
- var root = document.getElementById("root");
401
- var stage = document.getElementById("stage");
402
- root.style.background = TH.bg;
403
- root.style.color = TH.ink;
404
- document.documentElement.style.background = TH.bg;
405
- document.body.style.background = TH.bg;
406
- var GRAD =
407
- "linear-gradient(90deg," +
408
- TH.gradFrom +
409
- " 0%," +
410
- TH.gradTo +
411
- " 50%," +
412
- TH.gradFrom +
413
- " 100%)";
414
-
415
- // ── 6. Build phrase DOM, collect word spans in reading order ──
416
- PHRASES.forEach(function (p, pi) {
417
- var pEl = document.createElement("div");
418
- pEl.className = "phrase";
419
- var accent = p.accent || TH.accents[pi % TH.accents.length];
420
- p._spans = [];
421
- p._grad = [];
422
- p.lines.forEach(function (ln) {
423
- var lEl = document.createElement("div");
424
- lEl.className = "line" + (ln.font === "serif" ? " serif" : "");
425
- lEl.style.fontSize = ln.size + "px";
426
- lEl.style.marginLeft = (ln.x != null ? ln.x : 0) + "px";
427
- var heroColor = ln.hero ? ln.accent || accent : null;
428
- words(ln.text).forEach(function (wtext) {
429
- var w = document.createElement("span");
430
- w.className = "w";
431
- w.textContent = wtext;
432
- if (heroColor === "gradient") {
433
- w.classList.add("grad");
434
- w.style.setProperty("--grad", GRAD);
435
- p._grad.push(w);
436
- } else if (heroColor) w.style.color = heroColor;
437
- lEl.appendChild(w);
438
- lEl.appendChild(document.createTextNode(" "));
439
- p._spans.push(w);
440
- });
441
- pEl.appendChild(lEl);
442
- });
443
- stage.appendChild(pEl);
444
- p._el = pEl;
445
- });
446
-
447
- // ── 7. Build the climax (slide-in + swappable icon) ──
448
- var cEl = document.createElement("div");
449
- cEl.className = "climax";
450
- cEl.style.fontSize = C.size + "px";
451
- cEl.style.setProperty("--ring1", hexRgba(TH.ink, 0.25));
452
- cEl.style.setProperty("--ring2", hexRgba(TH.ink, 0.1));
453
- var iconPx = Math.round(C.size * 1.7);
454
- var iconEl = null,
455
- rings = [];
456
- var iconSpec = String(vars.icon == null ? "bell" : vars.icon).trim();
457
-
458
- words(C.text).forEach(function (tok) {
459
- if (tok === "{icon}") {
460
- if (!iconSpec || iconSpec === "none") return; // drop the slot → pure-text climax
461
- iconEl = document.createElement("span");
462
- iconEl.className = "icon";
463
- iconEl.style.width = iconPx + "px";
464
- iconEl.style.height = iconPx + "px";
465
- var r1 = document.createElement("span");
466
- r1.className = "ring";
467
- var r2 = document.createElement("span");
468
- r2.className = "ring ring2";
469
- [r1, r2].forEach(function (r) {
470
- var rs = Math.round(iconPx * 1.3);
471
- r.style.width = rs + "px";
472
- r.style.height = rs + "px";
473
- iconEl.appendChild(r);
474
- });
475
- rings = [r1, r2];
476
- var glyph = document.createElement("span");
477
- glyph.className = "icon-glyph";
478
- glyph.style.width = iconPx + "px";
479
- glyph.style.height = iconPx + "px";
480
- glyph.style.color = TH.ink;
481
- if (ICONS[iconSpec]) {
482
- setSvg(glyph, iconSVG(iconSpec)); // library icon
483
- } else if (iconSpec.slice(0, 4).toLowerCase() === "<svg") {
484
- setSvg(glyph, iconSpec); // custom inline SVG
485
- } else {
486
- glyph.style.fontSize = Math.round(iconPx * 0.86) + "px"; // emoji / text glyph
487
- glyph.textContent = iconSpec;
488
- }
489
- iconEl.appendChild(glyph);
490
- cEl.appendChild(iconEl);
491
- } else {
492
- var w = document.createElement("span");
493
- w.className = "cword";
494
- w.textContent = tok;
495
- cEl.appendChild(w);
496
- }
497
- });
498
- stage.appendChild(cEl);
499
-
500
- // ── 8. Timeline ──
501
- var tl = gsap.timeline({ paused: true });
502
-
503
- PHRASES.forEach(function (p) {
504
- gsap.set(p._el, { opacity: 0 });
505
- gsap.set(p._spans, { opacity: 0 });
506
- });
507
- gsap.set(cEl, { xPercent: -50, yPercent: -50, x: OFFSCREEN_R, opacity: 0 });
508
- if (iconEl) {
509
- gsap.set(iconEl, { opacity: 0 });
510
- gsap.set(iconEl.querySelector(".icon-glyph"), { scale: 0.4, rotation: -8, opacity: 0 });
511
- gsap.set(rings, { opacity: 0, scale: 0.4 });
512
- }
513
-
514
- PHRASES.forEach(function (p, pi) {
515
- var n = p._spans.length;
516
- var prevOut = pi === 0 ? 0.15 : PHRASES[pi - 1].out;
517
- var times = p.times && p.times.length === n ? p.times : null;
518
- if (!times) {
519
- var start = p.start != null ? p.start : prevOut;
520
- var end = p.out - Math.max(0.25, (p.out - start) * 0.18);
521
- times = p._spans.map(function (_, i) {
522
- return n <= 1 ? start : start + ((end - start) * i) / (n - 1);
523
- });
524
- }
525
- tl.to(p._el, { opacity: 1, duration: 0.01, overwrite: "auto" }, times[0]);
526
- p._spans.forEach(function (w, i) {
527
- tl.to(
528
- w,
529
- { opacity: 1, duration: WORD_FADE, ease: "power2.out", overwrite: "auto" },
530
- times[i],
531
- );
532
- });
533
- if (p._grad.length) {
534
- tl.fromTo(
535
- p._grad,
536
- { backgroundPosition: "0% 50%" },
537
- {
538
- backgroundPosition: "-200% 50%",
539
- duration: Math.max(0.6, p.out - times[0]),
540
- ease: "none",
541
- },
542
- times[0],
543
- );
544
- }
545
- tl.to(
546
- p._el,
547
- { opacity: 0, duration: CUT, ease: "power2.in", overwrite: "auto" },
548
- p.out - CUT,
549
- );
550
- });
551
-
552
- // climax slide-in
553
- tl.to(
554
- cEl,
555
- { x: 0, opacity: 1, duration: SLIDE, ease: "power3.out", overwrite: "auto" },
556
- C.in,
557
- );
558
-
559
- // icon pop + ring
560
- if (iconEl) {
561
- var glyph = iconEl.querySelector(".icon-glyph");
562
- tl.to(
563
- iconEl,
564
- { opacity: 1, duration: 0.3, ease: "power3.out", overwrite: "auto" },
565
- C.iconAt,
566
- );
567
- tl.fromTo(
568
- glyph,
569
- { scale: 0.4, rotation: -8, opacity: 0 },
570
- {
571
- scale: 1,
572
- rotation: 0,
573
- opacity: 1,
574
- duration: 0.35,
575
- ease: "back.out(2.4)",
576
- overwrite: "auto",
577
- },
578
- C.iconAt + 0.05,
579
- );
580
- tl.to(
581
- glyph,
582
- { rotation: 13, duration: 0.1, ease: "power2.out", overwrite: "auto" },
583
- C.iconAt + 0.4,
584
- );
585
- tl.to(
586
- glyph,
587
- { rotation: 0, duration: 0.85, ease: "elastic.out(1, 0.25)", overwrite: "auto" },
588
- C.iconAt + 0.5,
589
- );
590
- [0, 0.28].forEach(function (off) {
591
- tl.fromTo(
592
- rings,
593
- { scale: 0.4, opacity: 0.55 },
594
- { scale: 1.5, opacity: 0, duration: 0.8, ease: "power2.out", stagger: 0.08 },
595
- C.iconAt + 0.42 + off,
596
- );
597
- });
598
- }
599
-
600
- var TOTAL = Math.round((C.iconAt + C.hold) * 100) / 100;
601
- tl.to({}, { duration: TOTAL }, 0);
602
- root.setAttribute("data-duration", String(TOTAL));
603
- tl.seek(0);
604
-
605
- window.__timelines["intro-kinetic-cascade"] = tl;
606
- })();
607
- </script>
608
- </div>
609
- </body>
610
- </html>
1
+ <!doctype html>
2
+ <html
3
+ lang="en"
4
+ data-composition-variables='[
5
+ {"id":"theme", "type":"string", "label":"Palette — light | dark | bold", "default":"light"},
6
+ {"id":"icon", "type":"string", "label":"Climax icon — bell|cursor|sparkle|bolt|play|heart|check|star, an emoji, <svg>, or none", "default":"bell"},
7
+ {"id":"phrases", "type":"string", "label":"Phrases JSON (empty = built-in intro)", "default":""},
8
+ {"id":"climax", "type":"string", "label":"Climax JSON {text,in,iconAt,hold,size} (empty = default)","default":""}
9
+ ]'
10
+ >
11
+ <head>
12
+ <meta charset="UTF-8" />
13
+ <meta name="viewport" content="width=1920, height=1080" />
14
+ <title>Intro Kinetic Cascade · beat-synced kinetic typography — reference impl</title>
15
+ <script src="../../motion-primitives/assets/gsap.min.js"></script>
16
+ <style>
17
+ *,
18
+ *::before,
19
+ *::after {
20
+ margin: 0;
21
+ padding: 0;
22
+ box-sizing: border-box;
23
+ }
24
+ html,
25
+ body {
26
+ width: 1920px;
27
+ height: 1080px;
28
+ overflow: hidden;
29
+ background: #f5f5f7;
30
+ }
31
+ #root {
32
+ position: relative;
33
+ width: 1920px;
34
+ height: 1080px;
35
+ overflow: hidden;
36
+ background: #f5f5f7;
37
+ color: #1d1d1f;
38
+ font-family: "Inter", "Helvetica Neue", Arial, sans-serif;
39
+ }
40
+ #stage {
41
+ position: absolute;
42
+ inset: 0;
43
+ }
44
+
45
+ /* A PHRASE = a stacked, left-aligned editorial poster, vertically centered.
46
+ Word-by-word reveal, then a hard cut-out. */
47
+ .phrase {
48
+ position: absolute;
49
+ left: 0;
50
+ right: 0;
51
+ top: 50%;
52
+ transform: translateY(-50%);
53
+ display: flex;
54
+ flex-direction: column;
55
+ align-items: flex-start;
56
+ opacity: 0;
57
+ will-change: opacity;
58
+ }
59
+ .line {
60
+ font-weight: 900;
61
+ letter-spacing: -0.045em;
62
+ line-height: 0.88;
63
+ white-space: nowrap;
64
+ }
65
+ .line + .line {
66
+ margin-top: -0.04em;
67
+ }
68
+ /* the HERO line's elegant serif-italic contrast (offline system fallback) */
69
+ .line.serif {
70
+ font-family: "Playfair Display", Georgia, "Times New Roman", serif;
71
+ font-style: italic;
72
+ letter-spacing: -0.02em;
73
+ }
74
+ .w {
75
+ display: inline-block;
76
+ opacity: 0;
77
+ will-change: opacity;
78
+ }
79
+ .w.grad {
80
+ background: var(--grad);
81
+ background-size: 200% 100%;
82
+ background-position: 0% 50%;
83
+ -webkit-background-clip: text;
84
+ background-clip: text;
85
+ -webkit-text-fill-color: transparent;
86
+ color: transparent;
87
+ }
88
+
89
+ /* The CLIMAX phrase SLIDES in, holds to the end, and may carry an inline
90
+ animated icon (the {icon} token). */
91
+ .climax {
92
+ position: absolute;
93
+ left: 50%;
94
+ top: 50%;
95
+ display: flex;
96
+ align-items: center;
97
+ gap: 0.32em;
98
+ white-space: nowrap;
99
+ opacity: 0;
100
+ font-weight: 900;
101
+ letter-spacing: -0.035em;
102
+ line-height: 1;
103
+ will-change: transform, opacity;
104
+ }
105
+ .cword {
106
+ flex-shrink: 0;
107
+ }
108
+ .icon {
109
+ display: inline-flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ position: relative;
113
+ flex-shrink: 0;
114
+ opacity: 0;
115
+ overflow: visible;
116
+ line-height: 1;
117
+ }
118
+ .icon-glyph {
119
+ position: relative;
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ transform-origin: 50% 14%;
124
+ }
125
+ .icon-glyph svg {
126
+ display: block;
127
+ width: 100%;
128
+ height: 100%;
129
+ }
130
+ .ring {
131
+ position: absolute;
132
+ left: 50%;
133
+ top: 50%;
134
+ border-radius: 50%;
135
+ border: 3px solid var(--ring1);
136
+ opacity: 0;
137
+ transform: translate(-50%, -50%) scale(0.4);
138
+ }
139
+ .ring.ring2 {
140
+ border-color: var(--ring2);
141
+ }
142
+ </style>
143
+ </head>
144
+ <body>
145
+ <div
146
+ data-hf-id="hf-ikc-root"
147
+ id="root"
148
+ data-composition-id="intro-kinetic-cascade"
149
+ data-width="1920"
150
+ data-height="1080"
151
+ data-start="0"
152
+ data-duration="7"
153
+ data-root="true"
154
+ >
155
+ <div data-hf-id="hf-ikc-stage" id="stage"></div>
156
+
157
+ <script>
158
+ (function () {
159
+ // ════════════════════════════════════════════════════════════════════
160
+ // INTRO KINETIC CASCADE · beat-synced editorial kinetic typography
161
+ // ────────────────────────────────────────────────────────────────────
162
+ // A spoken/anchored line laid out as a sequence of big editorial PHRASES,
163
+ // each revealed word-by-word on its anchors (VO word-times OR audio onsets),
164
+ // hard cut-out between them, climaxing on a phrase that SLIDES in with a
165
+ // swappable, ringing ICON. Asset-free: system type, inline-SVG icon library,
166
+ // bundled GSAP. Reversed from the VO intro `act0-intro-bell`.
167
+ //
168
+ // COMPOSE BY DATA — `phrases` (the cascade) + `climax` (the finale) + `icon`
169
+ // (which glyph rings) + `theme` (palette). The icon is its own knob so it can
170
+ // match the scene: bell for timing, cursor for a click, sparkle for AI, …
171
+ // ════════════════════════════════════════════════════════════════════
172
+
173
+ window.__timelines = window.__timelines || {};
174
+
175
+ // ── 1. Variables ──
176
+ var defaults = { theme: "light", icon: "bell", phrases: "", climax: "" };
177
+ var vars = Object.assign(
178
+ {},
179
+ defaults,
180
+ window.__hyperframes && window.__hyperframes.getVariables
181
+ ? window.__hyperframes.getVariables()
182
+ : {},
183
+ );
184
+
185
+ // ── 2. Palette themes (accents are AA-tuned on each bg) ──
186
+ var THEMES = {
187
+ light: {
188
+ bg: "#f5f5f7",
189
+ ink: "#1d1d1f",
190
+ accents: ["#0b8a3e", "#0a78b4", "gradient"],
191
+ gradFrom: "#0a78b4",
192
+ gradTo: "#0b8a3e",
193
+ },
194
+ dark: {
195
+ bg: "#0d0e12",
196
+ ink: "#f2f3f5",
197
+ accents: ["#3be06b", "#37c6ff", "gradient"],
198
+ gradFrom: "#37c6ff",
199
+ gradTo: "#3be06b",
200
+ },
201
+ bold: {
202
+ bg: "#0a1228",
203
+ ink: "#ffffff",
204
+ accents: ["#ffd23f", "#ff5da2", "gradient"],
205
+ gradFrom: "#ff5da2",
206
+ gradTo: "#ffd23f",
207
+ },
208
+ };
209
+ var TH = THEMES[String(vars.theme || "").trim()] || THEMES.light;
210
+
211
+ function hexRgba(hex, a) {
212
+ var h = String(hex).replace(/^#/, "");
213
+ if (h.length === 3) h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
214
+ var n = parseInt(h, 16);
215
+ return (
216
+ "rgba(" + ((n >> 16) & 255) + "," + ((n >> 8) & 255) + "," + (n & 255) + "," + a + ")"
217
+ );
218
+ }
219
+
220
+ // ── 3. Inline-SVG icon library (asset-free; fill follows the text color) ──
221
+ var ICONS = {
222
+ bell: '<path d="M12 2.2a1.9 1.9 0 0 1 1.9 1.9v.7a6.2 6.2 0 0 1 4.3 5.9v3.5l1.9 2.1v1.1H3.9v-1.1l1.9-2.1V10.7a6.2 6.2 0 0 1 4.3-5.9v-.7A1.9 1.9 0 0 1 12 2.2zM9.6 19.6h4.8a2.4 2.4 0 0 1-4.8 0z"/>',
223
+ cursor: '<path d="M5.5 2.6l13.4 7.9-5.9 1.2-1.1 5.9-6.4-15z"/>',
224
+ sparkle: '<path d="M12 1.8l2.1 6.9 6.9 2.1-6.9 2.1L12 19.8l-2.1-6.9L3 10.8l6.9-2.1z"/>',
225
+ bolt: '<path d="M13.2 1.8L4.4 13.6h5.6l-1.2 8.6 9.2-12.4h-5.8z"/>',
226
+ play: '<path d="M12 2.4a9.6 9.6 0 1 0 0 19.2 9.6 9.6 0 0 0 0-19.2zm-2.1 5.1l6 4.5-6 4.5z"/>',
227
+ heart:
228
+ '<path d="M12 21.2S2.8 15.4 2.8 8.9C2.8 5.8 5.1 4 7.6 4c1.9 0 3.4 1.1 4.4 2.6C13 5.1 14.5 4 16.4 4c2.5 0 4.8 1.8 4.8 4.9 0 6.5-9.2 12.3-9.2 12.3z"/>',
229
+ check: '<path d="M9.6 16.7L4.8 11.9l1.7-1.7 3.1 3.1 7.9-7.9 1.7 1.7z"/>',
230
+ star: '<path d="M12 2.2l2.9 6.4 7 .6-5.3 4.6 1.6 6.8L12 17.4 5.8 20.6l1.6-6.8L2.1 9.2l7-.6z"/>',
231
+ };
232
+ function iconSVG(name) {
233
+ return (
234
+ '<svg viewBox="0 0 24 24" fill="currentColor" width="100%" height="100%">' +
235
+ ICONS[name] +
236
+ "</svg>"
237
+ );
238
+ }
239
+ // Insert SVG markup as SANITIZED parsed nodes — never innerHTML, and never
240
+ // a raw appendChild. DOMParser builds the tree, then cleanSvg() hard-strips
241
+ // everything that isn't inert drawing: only allow-listed shape elements +
242
+ // presentation attributes survive, so <script>, <image>/<use>/<foreignObject>,
243
+ // javascript: hrefs and every on* handler are removed before the nodes ever
244
+ // enter the live document. A custom icon SVG therefore can't smuggle active
245
+ // content (CWE-79 DOM-XSS). Non-SVG / malformed input falls back to text.
246
+ var SVG_OK_TAGS = {
247
+ svg: 1,
248
+ g: 1,
249
+ path: 1,
250
+ line: 1,
251
+ polyline: 1,
252
+ polygon: 1,
253
+ rect: 1,
254
+ circle: 1,
255
+ ellipse: 1,
256
+ defs: 1,
257
+ lineargradient: 1,
258
+ radialgradient: 1,
259
+ stop: 1,
260
+ clippath: 1,
261
+ title: 1,
262
+ desc: 1,
263
+ text: 1,
264
+ tspan: 1,
265
+ };
266
+ var SVG_OK_ATTRS = {
267
+ viewbox: 1,
268
+ xmlns: 1,
269
+ width: 1,
270
+ height: 1,
271
+ fill: 1,
272
+ "fill-rule": 1,
273
+ "fill-opacity": 1,
274
+ stroke: 1,
275
+ "stroke-width": 1,
276
+ "stroke-linecap": 1,
277
+ "stroke-linejoin": 1,
278
+ "stroke-dasharray": 1,
279
+ "stroke-dashoffset": 1,
280
+ "stroke-opacity": 1,
281
+ opacity: 1,
282
+ d: 1,
283
+ x: 1,
284
+ y: 1,
285
+ x1: 1,
286
+ y1: 1,
287
+ x2: 1,
288
+ y2: 1,
289
+ cx: 1,
290
+ cy: 1,
291
+ r: 1,
292
+ rx: 1,
293
+ ry: 1,
294
+ points: 1,
295
+ transform: 1,
296
+ offset: 1,
297
+ "stop-color": 1,
298
+ "stop-opacity": 1,
299
+ gradientunits: 1,
300
+ gradienttransform: 1,
301
+ "clip-path": 1,
302
+ "clip-rule": 1,
303
+ class: 1,
304
+ id: 1,
305
+ };
306
+ function cleanSvg(node) {
307
+ var attrs = Array.prototype.slice.call(node.attributes || []);
308
+ for (var a = 0; a < attrs.length; a++) {
309
+ if (!SVG_OK_ATTRS[attrs[a].name.toLowerCase()]) node.removeAttribute(attrs[a].name);
310
+ }
311
+ var kids = Array.prototype.slice.call(node.childNodes);
312
+ for (var k = 0; k < kids.length; k++) {
313
+ var c = kids[k];
314
+ if (c.nodeType === 1) {
315
+ if (SVG_OK_TAGS[(c.localName || c.nodeName).toLowerCase()]) cleanSvg(c);
316
+ else node.removeChild(c);
317
+ } else if (c.nodeType !== 3) {
318
+ node.removeChild(c);
319
+ }
320
+ }
321
+ }
322
+ function setSvg(el, markup) {
323
+ el.textContent = "";
324
+ var doc = new DOMParser().parseFromString(String(markup), "image/svg+xml");
325
+ var root = doc.documentElement;
326
+ if (
327
+ !root ||
328
+ root.nodeName.toLowerCase() !== "svg" ||
329
+ doc.getElementsByTagName("parsererror").length
330
+ ) {
331
+ el.textContent = String(markup);
332
+ return;
333
+ }
334
+ cleanSvg(root);
335
+ el.appendChild(document.importNode(root, true));
336
+ }
337
+
338
+ // ── 4. Default program (reversed from act0-intro-bell) ──
339
+ var DEFAULT_PHRASES = [
340
+ {
341
+ out: 1.36,
342
+ lines: [
343
+ { text: "If you've", size: 220, x: 140 },
344
+ { text: "ever", size: 520, x: 240, hero: true, font: "serif" },
345
+ { text: "used AI", size: 280, x: 780 },
346
+ ],
347
+ times: [0.14, 0.3, 0.55, 0.87, 1.06],
348
+ },
349
+ {
350
+ out: 3.06,
351
+ lines: [
352
+ { text: "for", size: 220, x: 160 },
353
+ { text: "video", size: 500, x: 220, hero: true },
354
+ { text: "editing before,", size: 200, x: 220 },
355
+ ],
356
+ times: [1.36, 1.58, 1.92, 2.48],
357
+ },
358
+ {
359
+ out: 3.79,
360
+ lines: [
361
+ { text: "you", size: 240, x: 200 },
362
+ { text: "know", size: 500, x: 260, hero: true, accent: "gradient" },
363
+ { text: "that", size: 340, x: 820 },
364
+ ],
365
+ times: [3.06, 3.3, 3.54],
366
+ },
367
+ ];
368
+ var DEFAULT_CLIMAX = {
369
+ text: "timing is {icon} tricky.",
370
+ in: 3.79,
371
+ iconAt: 4.9,
372
+ hold: 1.3,
373
+ size: 150,
374
+ };
375
+
376
+ var WORD_FADE = 0.18,
377
+ CUT = 0.1,
378
+ SLIDE = 0.42,
379
+ OFFSCREEN_R = 1400;
380
+
381
+ function parseJSON(v, fallback) {
382
+ if (!v) return fallback;
383
+ if (typeof v !== "string") return v;
384
+ try {
385
+ var p = JSON.parse(v);
386
+ return p || fallback;
387
+ } catch (e) {
388
+ return fallback;
389
+ }
390
+ }
391
+ var PHRASES = parseJSON(vars.phrases, DEFAULT_PHRASES);
392
+ if (!PHRASES.length) PHRASES = DEFAULT_PHRASES;
393
+ var C = Object.assign({}, DEFAULT_CLIMAX, parseJSON(vars.climax, {}));
394
+
395
+ var words = function (s) {
396
+ return String(s).trim().split(/\s+/).filter(Boolean);
397
+ };
398
+
399
+ // ── 5. Theme the field ──
400
+ var root = document.getElementById("root");
401
+ var stage = document.getElementById("stage");
402
+ root.style.background = TH.bg;
403
+ root.style.color = TH.ink;
404
+ document.documentElement.style.background = TH.bg;
405
+ document.body.style.background = TH.bg;
406
+ var GRAD =
407
+ "linear-gradient(90deg," +
408
+ TH.gradFrom +
409
+ " 0%," +
410
+ TH.gradTo +
411
+ " 50%," +
412
+ TH.gradFrom +
413
+ " 100%)";
414
+
415
+ // ── 6. Build phrase DOM, collect word spans in reading order ──
416
+ PHRASES.forEach(function (p, pi) {
417
+ var pEl = document.createElement("div");
418
+ pEl.className = "phrase";
419
+ var accent = p.accent || TH.accents[pi % TH.accents.length];
420
+ p._spans = [];
421
+ p._grad = [];
422
+ p.lines.forEach(function (ln) {
423
+ var lEl = document.createElement("div");
424
+ lEl.className = "line" + (ln.font === "serif" ? " serif" : "");
425
+ lEl.style.fontSize = ln.size + "px";
426
+ lEl.style.marginLeft = (ln.x != null ? ln.x : 0) + "px";
427
+ var heroColor = ln.hero ? ln.accent || accent : null;
428
+ words(ln.text).forEach(function (wtext) {
429
+ var w = document.createElement("span");
430
+ w.className = "w";
431
+ w.textContent = wtext;
432
+ if (heroColor === "gradient") {
433
+ w.classList.add("grad");
434
+ w.style.setProperty("--grad", GRAD);
435
+ p._grad.push(w);
436
+ } else if (heroColor) w.style.color = heroColor;
437
+ lEl.appendChild(w);
438
+ lEl.appendChild(document.createTextNode(" "));
439
+ p._spans.push(w);
440
+ });
441
+ pEl.appendChild(lEl);
442
+ });
443
+ stage.appendChild(pEl);
444
+ p._el = pEl;
445
+ });
446
+
447
+ // ── 7. Build the climax (slide-in + swappable icon) ──
448
+ var cEl = document.createElement("div");
449
+ cEl.className = "climax";
450
+ cEl.style.fontSize = C.size + "px";
451
+ cEl.style.setProperty("--ring1", hexRgba(TH.ink, 0.25));
452
+ cEl.style.setProperty("--ring2", hexRgba(TH.ink, 0.1));
453
+ var iconPx = Math.round(C.size * 1.7);
454
+ var iconEl = null,
455
+ rings = [];
456
+ var iconSpec = String(vars.icon == null ? "bell" : vars.icon).trim();
457
+
458
+ words(C.text).forEach(function (tok) {
459
+ if (tok === "{icon}") {
460
+ if (!iconSpec || iconSpec === "none") return; // drop the slot → pure-text climax
461
+ iconEl = document.createElement("span");
462
+ iconEl.className = "icon";
463
+ iconEl.style.width = iconPx + "px";
464
+ iconEl.style.height = iconPx + "px";
465
+ var r1 = document.createElement("span");
466
+ r1.className = "ring";
467
+ var r2 = document.createElement("span");
468
+ r2.className = "ring ring2";
469
+ [r1, r2].forEach(function (r) {
470
+ var rs = Math.round(iconPx * 1.3);
471
+ r.style.width = rs + "px";
472
+ r.style.height = rs + "px";
473
+ iconEl.appendChild(r);
474
+ });
475
+ rings = [r1, r2];
476
+ var glyph = document.createElement("span");
477
+ glyph.className = "icon-glyph";
478
+ glyph.style.width = iconPx + "px";
479
+ glyph.style.height = iconPx + "px";
480
+ glyph.style.color = TH.ink;
481
+ if (ICONS[iconSpec]) {
482
+ setSvg(glyph, iconSVG(iconSpec)); // library icon
483
+ } else if (iconSpec.slice(0, 4).toLowerCase() === "<svg") {
484
+ setSvg(glyph, iconSpec); // custom inline SVG
485
+ } else {
486
+ glyph.style.fontSize = Math.round(iconPx * 0.86) + "px"; // emoji / text glyph
487
+ glyph.textContent = iconSpec;
488
+ }
489
+ iconEl.appendChild(glyph);
490
+ cEl.appendChild(iconEl);
491
+ } else {
492
+ var w = document.createElement("span");
493
+ w.className = "cword";
494
+ w.textContent = tok;
495
+ cEl.appendChild(w);
496
+ }
497
+ });
498
+ stage.appendChild(cEl);
499
+
500
+ // ── 8. Timeline ──
501
+ var tl = gsap.timeline({ paused: true });
502
+
503
+ PHRASES.forEach(function (p) {
504
+ gsap.set(p._el, { opacity: 0 });
505
+ gsap.set(p._spans, { opacity: 0 });
506
+ });
507
+ gsap.set(cEl, { xPercent: -50, yPercent: -50, x: OFFSCREEN_R, opacity: 0 });
508
+ if (iconEl) {
509
+ gsap.set(iconEl, { opacity: 0 });
510
+ gsap.set(iconEl.querySelector(".icon-glyph"), { scale: 0.4, rotation: -8, opacity: 0 });
511
+ gsap.set(rings, { opacity: 0, scale: 0.4 });
512
+ }
513
+
514
+ PHRASES.forEach(function (p, pi) {
515
+ var n = p._spans.length;
516
+ var prevOut = pi === 0 ? 0.15 : PHRASES[pi - 1].out;
517
+ var times = p.times && p.times.length === n ? p.times : null;
518
+ if (!times) {
519
+ var start = p.start != null ? p.start : prevOut;
520
+ var end = p.out - Math.max(0.25, (p.out - start) * 0.18);
521
+ times = p._spans.map(function (_, i) {
522
+ return n <= 1 ? start : start + ((end - start) * i) / (n - 1);
523
+ });
524
+ }
525
+ tl.to(p._el, { opacity: 1, duration: 0.01, overwrite: "auto" }, times[0]);
526
+ p._spans.forEach(function (w, i) {
527
+ tl.to(
528
+ w,
529
+ { opacity: 1, duration: WORD_FADE, ease: "power2.out", overwrite: "auto" },
530
+ times[i],
531
+ );
532
+ });
533
+ if (p._grad.length) {
534
+ tl.fromTo(
535
+ p._grad,
536
+ { backgroundPosition: "0% 50%" },
537
+ {
538
+ backgroundPosition: "-200% 50%",
539
+ duration: Math.max(0.6, p.out - times[0]),
540
+ ease: "none",
541
+ },
542
+ times[0],
543
+ );
544
+ }
545
+ tl.to(
546
+ p._el,
547
+ { opacity: 0, duration: CUT, ease: "power2.in", overwrite: "auto" },
548
+ p.out - CUT,
549
+ );
550
+ });
551
+
552
+ // climax slide-in
553
+ tl.to(
554
+ cEl,
555
+ { x: 0, opacity: 1, duration: SLIDE, ease: "power3.out", overwrite: "auto" },
556
+ C.in,
557
+ );
558
+
559
+ // icon pop + ring
560
+ if (iconEl) {
561
+ var glyph = iconEl.querySelector(".icon-glyph");
562
+ tl.to(
563
+ iconEl,
564
+ { opacity: 1, duration: 0.3, ease: "power3.out", overwrite: "auto" },
565
+ C.iconAt,
566
+ );
567
+ tl.fromTo(
568
+ glyph,
569
+ { scale: 0.4, rotation: -8, opacity: 0 },
570
+ {
571
+ scale: 1,
572
+ rotation: 0,
573
+ opacity: 1,
574
+ duration: 0.35,
575
+ ease: "back.out(2.4)",
576
+ overwrite: "auto",
577
+ },
578
+ C.iconAt + 0.05,
579
+ );
580
+ tl.to(
581
+ glyph,
582
+ { rotation: 13, duration: 0.1, ease: "power2.out", overwrite: "auto" },
583
+ C.iconAt + 0.4,
584
+ );
585
+ tl.to(
586
+ glyph,
587
+ { rotation: 0, duration: 0.85, ease: "elastic.out(1, 0.25)", overwrite: "auto" },
588
+ C.iconAt + 0.5,
589
+ );
590
+ [0, 0.28].forEach(function (off) {
591
+ tl.fromTo(
592
+ rings,
593
+ { scale: 0.4, opacity: 0.55 },
594
+ { scale: 1.5, opacity: 0, duration: 0.8, ease: "power2.out", stagger: 0.08 },
595
+ C.iconAt + 0.42 + off,
596
+ );
597
+ });
598
+ }
599
+
600
+ var TOTAL = Math.round((C.iconAt + C.hold) * 100) / 100;
601
+ tl.to({}, { duration: TOTAL }, 0);
602
+ root.setAttribute("data-duration", String(TOTAL));
603
+ tl.seek(0);
604
+
605
+ window.__timelines["intro-kinetic-cascade"] = tl;
606
+ })();
607
+ </script>
608
+ </div>
609
+ </body>
610
+ </html>