takomi 2.5.1 → 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.
- package/.pi/agents/worker.md +32 -32
- package/.pi/extensions/oauth-router/README.md +3 -3
- package/.pi/extensions/oauth-router/config.ts +34 -34
- package/.pi/extensions/oauth-router/report-ui.ts +205 -205
- package/.pi/extensions/oauth-router/scripts/vibe-verify.py +5 -5
- package/.pi/extensions/takomi-context-manager/diagnostics.ts +560 -560
- package/.pi/extensions/takomi-context-manager/policy-tools.ts +93 -93
- package/.pi/extensions/takomi-context-manager/skill-categories.d.ts +11 -11
- package/.pi/extensions/takomi-context-manager/skill-tools.ts +208 -208
- package/.pi/extensions/takomi-context-manager/tool-renderers.ts +112 -112
- package/.pi/extensions/takomi-runtime/gate-provenance.ts +24 -24
- package/.pi/extensions/takomi-runtime/model-routing-defaults.ts +262 -262
- package/.pi/extensions/takomi-runtime/tool-renderers.ts +234 -234
- package/.pi/extensions/takomi-runtime/workflow-catalog.ts +54 -54
- package/.pi/extensions/takomi-subagents/async-lifecycle.ts +401 -401
- package/.pi/extensions/takomi-subagents/detached-results.ts +940 -940
- package/.pi/extensions/takomi-subagents/native-render.ts +253 -250
- package/.pi/extensions/takomi-subagents/result-heartbeat.ts +55 -55
- package/.pi/extensions/takomi-subagents/subagent-ux.ts +162 -162
- package/.pi/extensions/takomi-subagents/tool-runner.ts +25 -0
- package/.pi/takomi-profile.json +54 -54
- package/README.md +1 -1
- package/assets/.agent/skills/embedded-captions/CATALOG.md +93 -93
- package/assets/.agent/skills/embedded-captions/SKILL.md +286 -286
- package/assets/.agent/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -35
- package/assets/.agent/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -115
- package/assets/.agent/skills/embedded-captions/assets/fonts/char-widths.json +2211 -2211
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +241 -241
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +241 -241
- package/assets/.agent/skills/embedded-captions/dna/README.md +148 -148
- package/assets/.agent/skills/embedded-captions/dna/chrome.json +68 -68
- package/assets/.agent/skills/embedded-captions/dna/cream.json +69 -69
- package/assets/.agent/skills/embedded-captions/dna/documentary.json +62 -62
- package/assets/.agent/skills/embedded-captions/dna/editorial.json +70 -70
- package/assets/.agent/skills/embedded-captions/dna/glitch.json +82 -82
- package/assets/.agent/skills/embedded-captions/dna/ink.json +65 -65
- package/assets/.agent/skills/embedded-captions/dna/keynote.json +62 -62
- package/assets/.agent/skills/embedded-captions/dna/loud.json +75 -75
- package/assets/.agent/skills/embedded-captions/dna/neon.json +58 -58
- package/assets/.agent/skills/embedded-captions/dna/velocity.json +89 -89
- package/assets/.agent/skills/embedded-captions/modes/cinematic/README.md +48 -48
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -98
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -188
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -134
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -179
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -81
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -170
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -16
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -226
- package/assets/.agent/skills/embedded-captions/modes/cinematic/engine.html +355 -355
- package/assets/.agent/skills/embedded-captions/modes/standard/_anatomy.md +233 -233
- package/assets/.agent/skills/embedded-captions/modes/standard/_motion.md +192 -192
- package/assets/.agent/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -97
- package/assets/.agent/skills/embedded-captions/references/aesthetic-principles.md +168 -168
- package/assets/.agent/skills/embedded-captions/references/anti-patterns.md +188 -188
- package/assets/.agent/skills/embedded-captions/references/bespoke-vs-presets.md +178 -178
- package/assets/.agent/skills/embedded-captions/references/caption-grouping.md +130 -130
- package/assets/.agent/skills/embedded-captions/references/composition-craft.md +522 -522
- package/assets/.agent/skills/embedded-captions/references/direction-catalog.md +138 -138
- package/assets/.agent/skills/embedded-captions/references/example-renders/champion.html +371 -371
- package/assets/.agent/skills/embedded-captions/references/example-renders/memory-wall.html +334 -334
- package/assets/.agent/skills/embedded-captions/references/failure-modes.md +145 -145
- package/assets/.agent/skills/embedded-captions/references/layout-heuristics.md +238 -238
- package/assets/.agent/skills/embedded-captions/references/motion-vocabulary.md +148 -148
- package/assets/.agent/skills/embedded-captions/references/rail.md +68 -68
- package/assets/.agent/skills/embedded-captions/references/reference-bar.md +47 -47
- package/assets/.agent/skills/embedded-captions/references/scene-types.md +94 -94
- package/assets/.agent/skills/embedded-captions/references/test-set.md +66 -66
- package/assets/.agent/skills/embedded-captions/references/typographic-moves.md +266 -266
- package/assets/.agent/skills/embedded-captions/references/typography-presets.md +63 -63
- package/assets/.agent/skills/embedded-captions/scripts/audio-envelope.cjs +95 -95
- package/assets/.agent/skills/embedded-captions/scripts/check-occlusion.cjs +250 -250
- package/assets/.agent/skills/embedded-captions/scripts/check-overflow.cjs +194 -194
- package/assets/.agent/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -233
- package/assets/.agent/skills/embedded-captions/scripts/check-timing.cjs +173 -173
- package/assets/.agent/skills/embedded-captions/scripts/fill-timings.cjs +124 -124
- package/assets/.agent/skills/embedded-captions/scripts/fit-fonts.cjs +158 -158
- package/assets/.agent/skills/embedded-captions/scripts/gen-stroke-path.py +46 -46
- package/assets/.agent/skills/embedded-captions/scripts/inject-fonts.cjs +169 -169
- package/assets/.agent/skills/embedded-captions/scripts/lib-dna.cjs +201 -201
- package/assets/.agent/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -1205
- package/assets/.agent/skills/embedded-captions/scripts/make-composition.cjs +404 -404
- package/assets/.agent/skills/embedded-captions/scripts/make-theme.cjs +8781 -8781
- package/assets/.agent/skills/embedded-captions/scripts/matte.cjs +279 -279
- package/assets/.agent/skills/embedded-captions/scripts/measure-layout.cjs +293 -293
- package/assets/.agent/skills/embedded-captions/scripts/prepare.sh +39 -39
- package/assets/.agent/skills/embedded-captions/scripts/preview-frames.cjs +268 -268
- package/assets/.agent/skills/embedded-captions/scripts/render-and-composite.sh +469 -469
- package/assets/.agent/skills/embedded-captions/scripts/render-theme.sh +34 -34
- package/assets/.agent/skills/embedded-captions/scripts/safe-zones.cjs +813 -813
- package/assets/.agent/skills/embedded-captions/scripts/transcribe.cjs +332 -332
- package/assets/.agent/skills/embedded-captions/themes/PORTING.md +49 -49
- package/assets/.agent/skills/embedded-captions/themes/README.md +244 -244
- package/assets/.agent/skills/embedded-captions/themes/anchor.json +27 -27
- package/assets/.agent/skills/embedded-captions/themes/arcade.json +51 -51
- package/assets/.agent/skills/embedded-captions/themes/aurora.json +41 -41
- package/assets/.agent/skills/embedded-captions/themes/biolume.json +35 -35
- package/assets/.agent/skills/embedded-captions/themes/brush.json +74 -74
- package/assets/.agent/skills/embedded-captions/themes/chalkboard.json +52 -52
- package/assets/.agent/skills/embedded-captions/themes/dossier.json +56 -56
- package/assets/.agent/skills/embedded-captions/themes/graffiti.json +62 -62
- package/assets/.agent/skills/embedded-captions/themes/hologram.json +41 -41
- package/assets/.agent/skills/embedded-captions/themes/inkwater.json +43 -43
- package/assets/.agent/skills/embedded-captions/themes/laser.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/lastpage.json +33 -33
- package/assets/.agent/skills/embedded-captions/themes/neonsign.json +53 -53
- package/assets/.agent/skills/embedded-captions/themes/nightcity.json +56 -56
- package/assets/.agent/skills/embedded-captions/themes/ordnance.json +54 -54
- package/assets/.agent/skills/embedded-captions/themes/papercut.json +37 -37
- package/assets/.agent/skills/embedded-captions/themes/popup.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/ransom.json +62 -62
- package/assets/.agent/skills/embedded-captions/themes/scoreboard.json +54 -54
- package/assets/.agent/skills/embedded-captions/themes/spectrum.json +46 -46
- package/assets/.agent/skills/embedded-captions/themes/stardust.json +29 -29
- package/assets/.agent/skills/embedded-captions/themes/stomp.json +43 -43
- package/assets/.agent/skills/embedded-captions/themes/terminal.json +49 -49
- package/assets/.agent/skills/embedded-captions/themes/thunder.json +44 -44
- package/assets/.agent/skills/embedded-captions/themes/transit.json +44 -44
- package/assets/.agent/skills/embedded-captions/themes/vhs.json +47 -47
- package/assets/.agent/skills/faceless-explainer/SKILL.md +209 -209
- package/assets/.agent/skills/faceless-explainer/references/cut-catalog.md +215 -215
- package/assets/.agent/skills/faceless-explainer/references/motion-language.md +156 -156
- package/assets/.agent/skills/faceless-explainer/references/story-design.md +248 -248
- package/assets/.agent/skills/faceless-explainer/references/visual-design.md +146 -146
- package/assets/.agent/skills/faceless-explainer/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/faceless-explainer/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/faceless-explainer/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/faceless-explainer/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/faceless-explainer/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/faceless-explainer/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/faceless-explainer/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/figma/SKILL.md +121 -121
- package/assets/.agent/skills/general-video/SKILL.md +143 -143
- package/assets/.agent/skills/hyperframes/SKILL.md +164 -164
- package/assets/.agent/skills/hyperframes-animation/SKILL.md +84 -84
- package/assets/.agent/skills/hyperframes-animation/adapters/animate-text.md +64 -64
- package/assets/.agent/skills/hyperframes-animation/adapters/animejs.md +114 -114
- package/assets/.agent/skills/hyperframes-animation/adapters/css-animations.md +143 -143
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -118
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -96
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -96
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap.md +105 -105
- package/assets/.agent/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -507
- package/assets/.agent/skills/hyperframes-animation/adapters/lottie.md +117 -117
- package/assets/.agent/skills/hyperframes-animation/adapters/three.md +131 -131
- package/assets/.agent/skills/hyperframes-animation/adapters/typegpu.md +178 -178
- package/assets/.agent/skills/hyperframes-animation/adapters/waapi.md +101 -101
- package/assets/.agent/skills/hyperframes-animation/blueprints/comparison-split.md +27 -27
- package/assets/.agent/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -44
- package/assets/.agent/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -28
- package/assets/.agent/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -57
- package/assets/.agent/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -46
- package/assets/.agent/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -53
- package/assets/.agent/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -66
- package/assets/.agent/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -78
- package/assets/.agent/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -69
- package/assets/.agent/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -28
- package/assets/.agent/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -37
- package/assets/.agent/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -29
- package/assets/.agent/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -42
- package/assets/.agent/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -51
- package/assets/.agent/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -30
- package/assets/.agent/skills/hyperframes-animation/blueprints-index.md +146 -146
- package/assets/.agent/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -382
- package/assets/.agent/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -649
- package/assets/.agent/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -520
- package/assets/.agent/skills/hyperframes-animation/examples/cta-morph-press.html +468 -468
- package/assets/.agent/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -1298
- package/assets/.agent/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -759
- package/assets/.agent/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -729
- package/assets/.agent/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -352
- package/assets/.agent/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -779
- package/assets/.agent/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -1374
- package/assets/.agent/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -861
- package/assets/.agent/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -347
- package/assets/.agent/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -606
- package/assets/.agent/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -227
- package/assets/.agent/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -297
- package/assets/.agent/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -382
- package/assets/.agent/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -305
- package/assets/.agent/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -286
- package/assets/.agent/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -371
- package/assets/.agent/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -246
- package/assets/.agent/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -267
- package/assets/.agent/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -227
- package/assets/.agent/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -257
- package/assets/.agent/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -332
- package/assets/.agent/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -283
- package/assets/.agent/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -373
- package/assets/.agent/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -262
- package/assets/.agent/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -313
- package/assets/.agent/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -303
- package/assets/.agent/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -307
- package/assets/.agent/skills/hyperframes-animation/rules/gsap-effects.md +299 -299
- package/assets/.agent/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -223
- package/assets/.agent/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -183
- package/assets/.agent/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -328
- package/assets/.agent/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -301
- package/assets/.agent/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -350
- package/assets/.agent/skills/hyperframes-animation/rules/press-release-spring.md +296 -296
- package/assets/.agent/skills/hyperframes-animation/rules/reactive-displacement.md +277 -277
- package/assets/.agent/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -298
- package/assets/.agent/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -278
- package/assets/.agent/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -277
- package/assets/.agent/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -273
- package/assets/.agent/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -156
- package/assets/.agent/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -329
- package/assets/.agent/skills/hyperframes-animation/rules/svg-path-draw.md +274 -274
- package/assets/.agent/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -239
- package/assets/.agent/skills/hyperframes-animation/rules/viewport-change.md +349 -349
- package/assets/.agent/skills/hyperframes-animation/rules-index.md +86 -86
- package/assets/.agent/skills/hyperframes-animation/scripts/animation-map.mjs +606 -606
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.mjs +288 -288
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -62
- package/assets/.agent/skills/hyperframes-animation/techniques.md +507 -507
- package/assets/.agent/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -167
- package/assets/.agent/skills/hyperframes-animation/transitions/catalog.md +127 -127
- package/assets/.agent/skills/hyperframes-animation/transitions/css-3d.md +12 -12
- package/assets/.agent/skills/hyperframes-animation/transitions/css-blur.md +51 -51
- package/assets/.agent/skills/hyperframes-animation/transitions/css-cover.md +43 -43
- package/assets/.agent/skills/hyperframes-animation/transitions/css-destruction.md +95 -95
- package/assets/.agent/skills/hyperframes-animation/transitions/css-dissolve.md +66 -66
- package/assets/.agent/skills/hyperframes-animation/transitions/css-distortion.md +45 -45
- package/assets/.agent/skills/hyperframes-animation/transitions/css-grid.md +10 -10
- package/assets/.agent/skills/hyperframes-animation/transitions/css-light.md +49 -49
- package/assets/.agent/skills/hyperframes-animation/transitions/css-mechanical.md +30 -30
- package/assets/.agent/skills/hyperframes-animation/transitions/css-other.md +25 -25
- package/assets/.agent/skills/hyperframes-animation/transitions/css-push.md +41 -41
- package/assets/.agent/skills/hyperframes-animation/transitions/css-radial.md +37 -37
- package/assets/.agent/skills/hyperframes-animation/transitions/css-scale.md +24 -24
- package/assets/.agent/skills/hyperframes-animation/transitions/overview.md +153 -153
- package/assets/.agent/skills/hyperframes-cli/SKILL.md +113 -113
- package/assets/.agent/skills/hyperframes-cli/references/doctor-browser.md +45 -45
- package/assets/.agent/skills/hyperframes-cli/references/init-and-scaffold.md +51 -51
- package/assets/.agent/skills/hyperframes-cli/references/lambda.md +132 -132
- package/assets/.agent/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -121
- package/assets/.agent/skills/hyperframes-cli/references/preview-render.md +164 -164
- package/assets/.agent/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -75
- package/assets/.agent/skills/hyperframes-core/SKILL.md +78 -78
- package/assets/.agent/skills/hyperframes-core/references/composition-patterns.md +263 -263
- package/assets/.agent/skills/hyperframes-core/references/data-attributes.md +70 -70
- package/assets/.agent/skills/hyperframes-core/references/determinism-rules.md +68 -68
- package/assets/.agent/skills/hyperframes-core/references/full-screen-motion.md +62 -62
- package/assets/.agent/skills/hyperframes-core/references/minimal-composition.md +66 -66
- package/assets/.agent/skills/hyperframes-core/references/script-format.md +49 -49
- package/assets/.agent/skills/hyperframes-core/references/storyboard-format.md +95 -95
- package/assets/.agent/skills/hyperframes-core/references/sub-compositions.md +237 -237
- package/assets/.agent/skills/hyperframes-core/references/subagent-dispatch.md +41 -41
- package/assets/.agent/skills/hyperframes-core/references/tailwind.md +125 -125
- package/assets/.agent/skills/hyperframes-core/references/tracks-and-clips.md +76 -76
- package/assets/.agent/skills/hyperframes-core/references/variables-and-media.md +90 -90
- package/assets/.agent/skills/hyperframes-creative/SKILL.md +70 -70
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -289
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -221
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -1214
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -275
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -1347
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -307
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -223
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -1372
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -275
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -230
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -1140
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -284
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -225
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -1166
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -284
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -1465
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -278
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -222
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -1263
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -277
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -224
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -1439
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -265
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -238
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -1468
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -314
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -226
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -1268
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -333
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -227
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -1330
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -274
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -230
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -1444
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -265
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -223
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -1273
- package/assets/.agent/skills/hyperframes-creative/palettes/bold-energetic.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/clean-corporate.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/dark-premium.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/jewel-rich.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/monochrome.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/nature-earth.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/neon-electric.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/pastel-soft.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/palettes/warm-editorial.md +14 -14
- package/assets/.agent/skills/hyperframes-creative/references/audio-reactive.md +76 -76
- package/assets/.agent/skills/hyperframes-creative/references/beat-direction.md +164 -164
- package/assets/.agent/skills/hyperframes-creative/references/composition-patterns.md +199 -199
- package/assets/.agent/skills/hyperframes-creative/references/data-in-motion.md +19 -19
- package/assets/.agent/skills/hyperframes-creative/references/design-adherence.md +19 -19
- package/assets/.agent/skills/hyperframes-creative/references/design-picker.md +123 -123
- package/assets/.agent/skills/hyperframes-creative/references/design-spec.md +55 -55
- package/assets/.agent/skills/hyperframes-creative/references/house-style.md +73 -73
- package/assets/.agent/skills/hyperframes-creative/references/motion-principles.md +150 -150
- package/assets/.agent/skills/hyperframes-creative/references/narration.md +92 -92
- package/assets/.agent/skills/hyperframes-creative/references/prompt-expansion.md +68 -68
- package/assets/.agent/skills/hyperframes-creative/references/typography.md +218 -218
- package/assets/.agent/skills/hyperframes-creative/references/video-composition.md +63 -63
- package/assets/.agent/skills/hyperframes-creative/references/visual-styles.md +457 -457
- package/assets/.agent/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -353
- package/assets/.agent/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -188
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.mjs +288 -288
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -62
- package/assets/.agent/skills/hyperframes-creative/templates/design-picker.html +1432 -1432
- package/assets/.agent/skills/hyperframes-keyframes/SKILL.md +237 -237
- package/assets/.agent/skills/hyperframes-keyframes/agents/openai.yaml +4 -4
- package/assets/.agent/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -106
- package/assets/.agent/skills/hyperframes-media/SKILL.md +97 -97
- package/assets/.agent/skills/hyperframes-media/assets/sfx/CREDITS.md +35 -35
- package/assets/.agent/skills/hyperframes-media/assets/sfx/manifest.json +97 -97
- package/assets/.agent/skills/hyperframes-media/references/bgm.md +72 -72
- package/assets/.agent/skills/hyperframes-media/references/captions/authoring.md +159 -159
- package/assets/.agent/skills/hyperframes-media/references/captions/motion.md +87 -87
- package/assets/.agent/skills/hyperframes-media/references/captions/transcript-handling.md +97 -97
- package/assets/.agent/skills/hyperframes-media/references/remove-background.md +143 -143
- package/assets/.agent/skills/hyperframes-media/references/requirements.md +29 -29
- package/assets/.agent/skills/hyperframes-media/references/sfx.md +42 -42
- package/assets/.agent/skills/hyperframes-media/references/transcribe.md +52 -52
- package/assets/.agent/skills/hyperframes-media/references/tts-to-captions.md +24 -24
- package/assets/.agent/skills/hyperframes-media/references/tts.md +135 -135
- package/assets/.agent/skills/hyperframes-media/scripts/audio.mjs +293 -293
- package/assets/.agent/skills/hyperframes-media/scripts/heygen-tts.mjs +121 -121
- package/assets/.agent/skills/hyperframes-media/scripts/lib/bgm.mjs +235 -235
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.mjs +14 -14
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.test.mjs +41 -41
- package/assets/.agent/skills/hyperframes-media/scripts/lib/heygen.mjs +131 -131
- package/assets/.agent/skills/hyperframes-media/scripts/lib/sfx.mjs +128 -128
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.mjs +298 -298
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.spawn.test.mjs +97 -97
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.test.mjs +66 -66
- package/assets/.agent/skills/hyperframes-media/scripts/lyria-recipe.py +128 -128
- package/assets/.agent/skills/hyperframes-media/scripts/wait-bgm.mjs +167 -167
- package/assets/.agent/skills/hyperframes-registry/SKILL.md +101 -101
- package/assets/.agent/skills/hyperframes-registry/examples/add-block.md +51 -51
- package/assets/.agent/skills/hyperframes-registry/examples/add-component.md +73 -73
- package/assets/.agent/skills/hyperframes-registry/references/contributing.md +166 -166
- package/assets/.agent/skills/hyperframes-registry/references/demo-html-pattern.md +54 -54
- package/assets/.agent/skills/hyperframes-registry/references/discovery.md +215 -215
- package/assets/.agent/skills/hyperframes-registry/references/install-locations.md +45 -45
- package/assets/.agent/skills/hyperframes-registry/references/templates.md +417 -417
- package/assets/.agent/skills/hyperframes-registry/references/wiring-blocks.md +61 -61
- package/assets/.agent/skills/hyperframes-registry/references/wiring-components.md +39 -39
- package/assets/.agent/skills/media-use/SKILL.md +124 -124
- package/assets/.agent/skills/media-use/scripts/eval.mjs +369 -369
- package/assets/.agent/skills/media-use/scripts/lib/adopt.mjs +112 -112
- package/assets/.agent/skills/media-use/scripts/lib/bgm-provider.mjs +20 -20
- package/assets/.agent/skills/media-use/scripts/lib/brand-provider.mjs +59 -59
- package/assets/.agent/skills/media-use/scripts/lib/cache.mjs +114 -114
- package/assets/.agent/skills/media-use/scripts/lib/freeze.mjs +26 -26
- package/assets/.agent/skills/media-use/scripts/lib/heygen-search.mjs +51 -51
- package/assets/.agent/skills/media-use/scripts/lib/image-provider.mjs +44 -44
- package/assets/.agent/skills/media-use/scripts/lib/index-gen.mjs +63 -63
- package/assets/.agent/skills/media-use/scripts/lib/manifest.mjs +91 -91
- package/assets/.agent/skills/media-use/scripts/lib/manifest.test.mjs +293 -293
- package/assets/.agent/skills/media-use/scripts/lib/probe.mjs +39 -39
- package/assets/.agent/skills/media-use/scripts/lib/probe.test.mjs +31 -31
- package/assets/.agent/skills/media-use/scripts/lib/providers.mjs +29 -29
- package/assets/.agent/skills/media-use/scripts/lib/sfx-provider.mjs +23 -23
- package/assets/.agent/skills/media-use/scripts/resolve.mjs +247 -247
- package/assets/.agent/skills/media-use/scripts/resolve.test.mjs +247 -247
- package/assets/.agent/skills/motion-graphics/SKILL.md +172 -172
- package/assets/.agent/skills/motion-graphics/agents/builder.md +40 -40
- package/assets/.agent/skills/motion-graphics/agents/director.md +53 -53
- package/assets/.agent/skills/motion-graphics/agents/finalize.md +17 -17
- package/assets/.agent/skills/motion-graphics/catalog-map.md +40 -40
- package/assets/.agent/skills/motion-graphics/categories/asset-fusion/module.md +37 -37
- package/assets/.agent/skills/motion-graphics/categories/charts/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/categories/kinetic-type/module.md +19 -19
- package/assets/.agent/skills/motion-graphics/categories/logo-reveal/module.md +17 -17
- package/assets/.agent/skills/motion-graphics/categories/lower-thirds/module.md +16 -16
- package/assets/.agent/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -273
- package/assets/.agent/skills/motion-graphics/categories/maps/module.md +61 -61
- package/assets/.agent/skills/motion-graphics/categories/news/module.md +56 -56
- package/assets/.agent/skills/motion-graphics/categories/stat/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/categories/tweet/module.md +16 -16
- package/assets/.agent/skills/motion-graphics/categories/webpage/module.md +21 -21
- package/assets/.agent/skills/motion-graphics/grounding/PROTOCOL.md +64 -64
- package/assets/.agent/skills/motion-graphics/grounding/locate.mjs +227 -227
- package/assets/.agent/skills/motion-graphics/phases/source/guide.md +21 -21
- package/assets/.agent/skills/motion-graphics/references/builder-contract.md +38 -38
- package/assets/.agent/skills/motion-graphics/references/motion-vocabulary.md +43 -43
- package/assets/.agent/skills/motion-graphics/references/shot-plan-ir.md +54 -54
- package/assets/.agent/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -306
- package/assets/.agent/skills/music-to-video/SKILL.md +197 -197
- package/assets/.agent/skills/music-to-video/references/frame-skeleton.md +100 -100
- package/assets/.agent/skills/music-to-video/references/montage.md +58 -58
- package/assets/.agent/skills/music-to-video/references/motion-primitive-catalog.md +75 -75
- package/assets/.agent/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -154
- package/assets/.agent/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -11
- package/assets/.agent/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -326
- package/assets/.agent/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -120
- package/assets/.agent/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -95
- package/assets/.agent/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -135
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -146
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -103
- package/assets/.agent/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -154
- package/assets/.agent/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -155
- package/assets/.agent/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -166
- package/assets/.agent/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -133
- package/assets/.agent/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -137
- package/assets/.agent/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -144
- package/assets/.agent/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -132
- package/assets/.agent/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -241
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -79
- package/assets/.agent/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -104
- package/assets/.agent/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +92 -92
- package/assets/.agent/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -131
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -109
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -124
- package/assets/.agent/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -108
- package/assets/.agent/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -132
- package/assets/.agent/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -141
- package/assets/.agent/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -121
- package/assets/.agent/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -160
- package/assets/.agent/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -113
- package/assets/.agent/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -130
- package/assets/.agent/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -137
- package/assets/.agent/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -117
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -42
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -313
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -136
- package/assets/.agent/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -144
- package/assets/.agent/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -122
- package/assets/.agent/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -126
- package/assets/.agent/skills/music-to-video/references/planning.md +104 -104
- package/assets/.agent/skills/music-to-video/references/storyboard-format.md +94 -94
- package/assets/.agent/skills/music-to-video/references/template-catalog.md +106 -106
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/index.html +527 -527
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/program.json +13 -13
- package/assets/.agent/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -485
- package/assets/.agent/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -302
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -610
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -41
- package/assets/.agent/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -596
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -589
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -25
- package/assets/.agent/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -267
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -594
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -39
- package/assets/.agent/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -238
- package/assets/.agent/skills/music-to-video/scripts/analyze-beatgrid.py +531 -531
- package/assets/.agent/skills/music-to-video/scripts/assemble-index.mjs +218 -218
- package/assets/.agent/skills/music-to-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/music-to-video/scripts/stage-assets.mjs +58 -58
- package/assets/.agent/skills/music-to-video/scripts/validate-plan.mjs +161 -161
- package/assets/.agent/skills/music-to-video/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/pr-to-video/SKILL.md +240 -240
- package/assets/.agent/skills/pr-to-video/references/code-vocabulary.md +111 -111
- package/assets/.agent/skills/pr-to-video/references/cut-catalog.md +215 -215
- package/assets/.agent/skills/pr-to-video/references/motion-language.md +156 -156
- package/assets/.agent/skills/pr-to-video/references/story-design.md +211 -211
- package/assets/.agent/skills/pr-to-video/references/visual-design.md +164 -164
- package/assets/.agent/skills/pr-to-video/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/pr-to-video/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/pr-to-video/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/pr-to-video/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -157
- package/assets/.agent/skills/pr-to-video/scripts/fetch-pr.mjs +164 -164
- package/assets/.agent/skills/pr-to-video/scripts/ingest.mjs +539 -539
- package/assets/.agent/skills/pr-to-video/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/pr-to-video/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/pr-to-video/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/pr-to-video/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/pr-to-video/sub-agents/frame-worker.md +95 -95
- package/assets/.agent/skills/product-launch-video/SKILL.md +208 -208
- package/assets/.agent/skills/product-launch-video/references/cut-catalog.md +220 -220
- package/assets/.agent/skills/product-launch-video/references/motion-language.md +156 -156
- package/assets/.agent/skills/product-launch-video/references/story-design.md +373 -373
- package/assets/.agent/skills/product-launch-video/references/visual-design.md +126 -126
- package/assets/.agent/skills/product-launch-video/scripts/assemble-index.mjs +570 -570
- package/assets/.agent/skills/product-launch-video/scripts/audio.mjs +253 -253
- package/assets/.agent/skills/product-launch-video/scripts/build-frame.mjs +536 -536
- package/assets/.agent/skills/product-launch-video/scripts/captions.mjs +508 -508
- package/assets/.agent/skills/product-launch-video/scripts/lib/assets.mjs +55 -55
- package/assets/.agent/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -45
- package/assets/.agent/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -249
- package/assets/.agent/skills/product-launch-video/scripts/lib/tokens.mjs +204 -204
- package/assets/.agent/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -38
- package/assets/.agent/skills/product-launch-video/scripts/lib/transitions.json +71 -71
- package/assets/.agent/skills/product-launch-video/scripts/stage-assets.mjs +39 -39
- package/assets/.agent/skills/product-launch-video/scripts/transitions.mjs +320 -320
- package/assets/.agent/skills/product-launch-video/sub-agents/frame-worker.md +75 -75
- package/assets/.agent/skills/remotion/SKILL.md +357 -38
- package/assets/.agent/skills/remotion/rules/3d.md +5 -5
- package/assets/.agent/skills/remotion/rules/assets/text-animations-word-highlight.tsx +1 -6
- package/assets/.agent/skills/remotion/rules/audio-visualization.md +198 -0
- package/assets/.agent/skills/remotion/rules/audio.md +1 -4
- package/assets/.agent/skills/remotion/rules/calculate-metadata.md +48 -18
- package/assets/.agent/skills/remotion/rules/compositions.md +16 -24
- package/assets/.agent/skills/remotion/rules/display-captions.md +79 -21
- package/assets/.agent/skills/remotion/rules/effects.md +235 -0
- package/assets/.agent/skills/remotion/rules/ffmpeg.md +34 -0
- package/assets/.agent/skills/remotion/rules/get-audio-duration.md +13 -13
- package/assets/.agent/skills/remotion/rules/get-video-dimensions.md +1 -1
- package/assets/.agent/skills/remotion/rules/get-video-duration.md +12 -10
- package/assets/.agent/skills/remotion/rules/gifs.md +21 -18
- package/assets/.agent/skills/remotion/rules/google-fonts.md +72 -0
- package/assets/.agent/skills/remotion/rules/html-in-canvas.md +122 -0
- package/assets/.agent/skills/remotion/rules/images.md +5 -64
- package/assets/.agent/skills/remotion/rules/import-srt-captions.md +9 -7
- package/assets/.agent/skills/remotion/rules/light-leaks.md +73 -0
- package/assets/.agent/skills/remotion/rules/local-fonts.md +65 -0
- package/assets/.agent/skills/remotion/rules/lottie.md +10 -8
- package/assets/.agent/skills/remotion/rules/maplibre.md +458 -0
- package/assets/.agent/skills/remotion/rules/measuring-dom-nodes.md +0 -1
- package/assets/.agent/skills/remotion/rules/measuring-text.md +2 -5
- package/assets/.agent/skills/remotion/rules/parameters.md +21 -10
- package/assets/.agent/skills/remotion/rules/sequencing.md +35 -9
- package/assets/.agent/skills/remotion/rules/sfx.md +51 -0
- package/assets/.agent/skills/remotion/rules/silence-detection.md +71 -0
- package/assets/.agent/skills/remotion/rules/subtitles.md +36 -0
- package/assets/.agent/skills/remotion/rules/tailwind.md +2 -2
- package/assets/.agent/skills/remotion/rules/timing.md +89 -106
- package/assets/.agent/skills/remotion/rules/transcribe-captions.md +58 -7
- package/assets/.agent/skills/remotion/rules/transitions.md +117 -42
- package/assets/.agent/skills/remotion/rules/transparent-videos.md +106 -0
- package/assets/.agent/skills/remotion/rules/trimming.md +1 -3
- package/assets/.agent/skills/remotion/rules/video-layout.md +68 -0
- package/assets/.agent/skills/remotion/rules/voiceover.md +99 -0
- package/assets/.agent/skills/remotion-real-ui-video/SKILL.md +264 -264
- package/assets/.agent/skills/remotion-real-ui-video/references/anti-patterns.md +114 -114
- package/assets/.agent/skills/remotion-real-ui-video/references/completion-checklist.md +75 -75
- package/assets/.agent/skills/remotion-real-ui-video/references/real-ui-bridge-example.md +93 -93
- package/assets/.agent/skills/remotion-to-hyperframes/SKILL.md +127 -127
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -249
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -26
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -61
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -14
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -54
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -118
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -14
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -105
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -85
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -269
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -13
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -27
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -37
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -23
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -59
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -47
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -4
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -18
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -34
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -55
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -15
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -51
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -29
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -39
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -30
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -38
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -36
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -28
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -41
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -85
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -110
- package/assets/.agent/skills/remotion-to-hyperframes/references/api-map.md +142 -142
- package/assets/.agent/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -115
- package/assets/.agent/skills/remotion-to-hyperframes/references/eval.md +140 -140
- package/assets/.agent/skills/remotion-to-hyperframes/references/fonts.md +112 -112
- package/assets/.agent/skills/remotion-to-hyperframes/references/limitations.md +136 -136
- package/assets/.agent/skills/remotion-to-hyperframes/references/lottie.md +121 -121
- package/assets/.agent/skills/remotion-to-hyperframes/references/media.md +149 -149
- package/assets/.agent/skills/remotion-to-hyperframes/references/parameters.md +167 -167
- package/assets/.agent/skills/remotion-to-hyperframes/references/sequencing.md +195 -195
- package/assets/.agent/skills/remotion-to-hyperframes/references/timing.md +165 -165
- package/assets/.agent/skills/remotion-to-hyperframes/references/transitions.md +114 -114
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -107
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/lint_source.py +358 -358
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -103
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -50
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -46
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -90
- package/assets/.agent/skills/shared-resend-portfolio/SKILL.md +124 -124
- package/assets/.agent/skills/slideshow/SKILL.md +550 -550
- package/assets/.agent/skills/slideshow/references/standalone-harness.md +1020 -1020
- package/assets/.agent/skills/talking-head-recut/NOTICE.md +39 -39
- package/assets/.agent/skills/talking-head-recut/SKILL.md +1191 -1191
- package/assets/.agent/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -10
- package/assets/.agent/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -145
- package/assets/.agent/skills/talking-head-recut/references/frames/clean.html +92 -92
- package/assets/.agent/skills/talking-head-recut/references/frames/hairline.html +171 -171
- package/assets/.agent/skills/talking-head-recut/references/frames/polaroid.html +131 -131
- package/assets/.agent/skills/talking-head-recut/references/layouts/overlay.html +164 -164
- package/assets/.agent/skills/talking-head-recut/references/layouts/pip.html +143 -143
- package/assets/.agent/skills/talking-head-recut/references/layouts/split.html +121 -121
- package/assets/.agent/skills/talking-head-recut/references/layouts/stack.html +109 -109
- package/assets/.agent/skills/talking-head-recut/references/styles/academic.html +172 -172
- package/assets/.agent/skills/talking-head-recut/references/styles/audit.html +170 -170
- package/assets/.agent/skills/talking-head-recut/references/styles/editorial.html +189 -189
- package/assets/.agent/skills/talking-head-recut/references/styles/geom.html +181 -181
- package/assets/.agent/skills/talking-head-recut/references/styles/minimal.html +130 -130
- package/assets/.agent/skills/talking-head-recut/references/styles/spotlight.html +142 -142
- package/assets/.agent/skills/talking-head-recut/references/styles/swiss.html +188 -188
- package/assets/.agent/skills/talking-head-recut/references/styles/terminal.html +196 -196
- package/assets/.agent/skills/talking-head-recut/references/styles/whiteboard.html +170 -170
- package/assets/.agent/skills/talking-head-recut/references/styles/xhs.html +206 -206
- package/assets/.agent/skills/website-to-video/SKILL.md +145 -145
- package/assets/.agent/skills/website-to-video/assets/sfx/CREDITS.md +35 -35
- package/assets/.agent/skills/website-to-video/assets/sfx/manifest.json +97 -97
- package/assets/.agent/skills/website-to-video/references/beat-builder-guide.md +263 -263
- package/assets/.agent/skills/website-to-video/references/capabilities.md +713 -713
- package/assets/.agent/skills/website-to-video/references/step-0-capture.md +55 -55
- package/assets/.agent/skills/website-to-video/references/step-1-design.md +333 -333
- package/assets/.agent/skills/website-to-video/references/step-2-brief.md +178 -178
- package/assets/.agent/skills/website-to-video/references/step-3-storyboard.md +572 -572
- package/assets/.agent/skills/website-to-video/references/step-4-vo.md +230 -230
- package/assets/.agent/skills/website-to-video/references/step-5-build.md +483 -483
- package/assets/.agent/skills/website-to-video/references/step-6-validate.md +341 -341
- package/assets/.agent/skills/website-to-video/scripts/w2h-verify.mjs +759 -759
- package/package.json +5 -4
- package/src/pi-takomi-core/workflows.ts +86 -86
- package/src/takomi-stats.js +5 -5
- package/assets/.agent/skills/remotion/rules/animations.md +0 -29
- package/assets/.agent/skills/remotion/rules/assets.md +0 -78
- package/assets/.agent/skills/remotion/rules/can-decode.md +0 -75
- package/assets/.agent/skills/remotion/rules/charts.md +0 -58
- package/assets/.agent/skills/remotion/rules/extract-frames.md +0 -229
- package/assets/.agent/skills/remotion/rules/fonts.md +0 -152
- package/assets/.agent/skills/remotion/rules/maps.md +0 -403
|
@@ -1,267 +1,267 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: card-morph-anchor
|
|
3
|
-
description: Container morphs dimensions and border-radius between shots, serving as a visual transition anchor.
|
|
4
|
-
metadata:
|
|
5
|
-
tags: morph, anchor, transition, border-radius, container, shape
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Card Morph Anchor
|
|
9
|
-
|
|
10
|
-
A container smoothly transforms its width, height, border-radius, and (optionally) background between two visual states. The morph itself **IS the shot transition** — no separate transition effect needed. The viewer's eye tracks the morphing container as the anchor between shots.
|
|
11
|
-
|
|
12
|
-
## How It Works
|
|
13
|
-
|
|
14
|
-
A single GSAP tween animates multiple container properties simultaneously (width / height / border-radius / background). At the same time:
|
|
15
|
-
|
|
16
|
-
1. **Old content** fades out during the first ~40% of the morph
|
|
17
|
-
2. **New content** fades in during the last ~40% of the morph
|
|
18
|
-
3. **Optional final fade** — the morph container itself fades to 0, revealing the actual next-shot element rendered behind it
|
|
19
|
-
|
|
20
|
-
The persistent container provides visual continuity even as content and shape change.
|
|
21
|
-
|
|
22
|
-
## HTML
|
|
23
|
-
|
|
24
|
-
```html
|
|
25
|
-
<div
|
|
26
|
-
class="scene"
|
|
27
|
-
id="morph-scene"
|
|
28
|
-
data-composition-id="morph-scene"
|
|
29
|
-
data-start="0"
|
|
30
|
-
data-duration="4"
|
|
31
|
-
data-track-index="0"
|
|
32
|
-
>
|
|
33
|
-
<!-- The persistent morph container -->
|
|
34
|
-
<div class="morph-card">
|
|
35
|
-
<div class="content-old">
|
|
36
|
-
<h2>{shotOneHeadline}</h2>
|
|
37
|
-
<p>{shotOneSubcopy}</p>
|
|
38
|
-
</div>
|
|
39
|
-
<div class="content-new">
|
|
40
|
-
<img src="{shotTwoIcon}" alt="logo" />
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
<!-- Optional: actual next-shot element behind the morph -->
|
|
45
|
-
<div class="next-shot-anchor">
|
|
46
|
-
<img src="{nextShotAnchor}" alt="anchor" />
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## CSS (hero-frame layout)
|
|
52
|
-
|
|
53
|
-
Card starts as a wide rectangle (shot 1 state). All properties present from the start; only opacities differ:
|
|
54
|
-
|
|
55
|
-
```css
|
|
56
|
-
.scene {
|
|
57
|
-
position: relative;
|
|
58
|
-
width: 100%;
|
|
59
|
-
height: 100%;
|
|
60
|
-
display: grid;
|
|
61
|
-
place-items: center;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.morph-card {
|
|
65
|
-
position: relative;
|
|
66
|
-
width: {SHOT_ONE_W}px;
|
|
67
|
-
height: {SHOT_ONE_H}px;
|
|
68
|
-
border-radius: {SHOT_ONE_RADIUS}px;
|
|
69
|
-
background: {surfaceShotOne};
|
|
70
|
-
overflow: hidden;
|
|
71
|
-
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
|
|
72
|
-
display: grid;
|
|
73
|
-
place-items: center;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.content-old,
|
|
77
|
-
.content-new {
|
|
78
|
-
position: absolute;
|
|
79
|
-
inset: 0;
|
|
80
|
-
display: grid;
|
|
81
|
-
place-items: center;
|
|
82
|
-
padding: 32px;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.content-old {
|
|
86
|
-
opacity: 1;
|
|
87
|
-
}
|
|
88
|
-
.content-new {
|
|
89
|
-
opacity: 0;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.next-shot-anchor {
|
|
93
|
-
position: absolute;
|
|
94
|
-
left: 50%;
|
|
95
|
-
top: 50%;
|
|
96
|
-
transform: translate(-50%, -50%);
|
|
97
|
-
opacity: 0; /* GSAP fades this in as morph card fades out */
|
|
98
|
-
/* Use DOM ORDER for stacking — render .next-shot-anchor BEFORE .morph-card
|
|
99
|
-
in markup so the morph card is naturally on top. Do NOT use z-index: -1
|
|
100
|
-
and then snap it positive mid-fade — that causes a visible pop. */
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## GSAP Timeline
|
|
105
|
-
|
|
106
|
-
```html
|
|
107
|
-
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
108
|
-
<script>
|
|
109
|
-
window.__timelines = window.__timelines || {};
|
|
110
|
-
const tl = gsap.timeline({ paused: true });
|
|
111
|
-
|
|
112
|
-
// Named constants — assign in your example only. See "How to Choose Values".
|
|
113
|
-
const HOLD_BEAT; // s — pre-morph dwell on shot 1
|
|
114
|
-
const MORPH_START; // s — usually = HOLD_BEAT
|
|
115
|
-
const MORPH_DUR; // s — full container morph length
|
|
116
|
-
const SHOT_TWO_W; // px — final container width
|
|
117
|
-
const SHOT_TWO_H; // px — final container height
|
|
118
|
-
const SHOT_TWO_RADIUS; // px — ≤ min(SHOT_TWO_W, SHOT_TWO_H) / 2
|
|
119
|
-
const OLD_FADE_FRAC; // 0..0.5 — fraction of MORPH_DUR for old content fade
|
|
120
|
-
const NEW_FADE_FRAC; // 0..0.5 — fraction of MORPH_DUR for new content fade
|
|
121
|
-
const FINAL_FADE_FRAC; // 0..0.3 — optional tail fade for handoff
|
|
122
|
-
// {surfaceShotTwo} is a CSS background token (solid or gradient).
|
|
123
|
-
|
|
124
|
-
// Hold shot 1 — let the viewer register the wide banner before morphing.
|
|
125
|
-
|
|
126
|
-
// Phase 1 — Morph container properties simultaneously
|
|
127
|
-
tl.to(
|
|
128
|
-
".morph-card",
|
|
129
|
-
{
|
|
130
|
-
width: SHOT_TWO_W,
|
|
131
|
-
height: SHOT_TWO_H,
|
|
132
|
-
borderRadius: SHOT_TWO_RADIUS,
|
|
133
|
-
background: "{surfaceShotTwo}",
|
|
134
|
-
duration: MORPH_DUR,
|
|
135
|
-
ease: "power2.inOut",
|
|
136
|
-
},
|
|
137
|
-
MORPH_START,
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
// Phase 2 — Old content fades during the FIRST OLD_FADE_FRAC of the morph
|
|
141
|
-
tl.to(
|
|
142
|
-
".content-old",
|
|
143
|
-
{
|
|
144
|
-
opacity: 0,
|
|
145
|
-
duration: MORPH_DUR * OLD_FADE_FRAC,
|
|
146
|
-
ease: "power1.in",
|
|
147
|
-
},
|
|
148
|
-
MORPH_START,
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
// Phase 3 — New content fades in during the LAST NEW_FADE_FRAC of the morph
|
|
152
|
-
tl.to(
|
|
153
|
-
".content-new",
|
|
154
|
-
{
|
|
155
|
-
opacity: 1,
|
|
156
|
-
duration: MORPH_DUR * NEW_FADE_FRAC,
|
|
157
|
-
ease: "power1.out",
|
|
158
|
-
},
|
|
159
|
-
MORPH_START + MORPH_DUR * (1 - NEW_FADE_FRAC),
|
|
160
|
-
);
|
|
161
|
-
|
|
162
|
-
// Optional Phase 4 — Final fade: morph container disappears at the very end,
|
|
163
|
-
// revealing the actual next-shot element behind it.
|
|
164
|
-
tl.to(
|
|
165
|
-
".morph-card",
|
|
166
|
-
{
|
|
167
|
-
opacity: 0,
|
|
168
|
-
duration: MORPH_DUR * FINAL_FADE_FRAC,
|
|
169
|
-
ease: "power1.in",
|
|
170
|
-
},
|
|
171
|
-
MORPH_START + MORPH_DUR * (1 - FINAL_FADE_FRAC),
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
window.__timelines["morph-scene"] = tl;
|
|
175
|
-
</script>
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## Key Properties to Morph
|
|
179
|
-
|
|
180
|
-
| Property | Shape of change | Visual effect |
|
|
181
|
-
| ------------------ | -------------------------------------------------------------- | ---------------------------- |
|
|
182
|
-
| `width` / `height` | `SHOT_ONE_W × SHOT_ONE_H` → `SHOT_TWO_W × SHOT_TWO_H` | wide card shrinks to an icon |
|
|
183
|
-
| `borderRadius` | `SHOT_ONE_RADIUS` → `SHOT_TWO_RADIUS` (≤ half of smaller side) | rectangle becomes a circle |
|
|
184
|
-
| `background` | `{surfaceShotOne}` → `{surfaceShotTwo}` (solid or gradient) | container identity shifts |
|
|
185
|
-
| `boxShadow` | base shadow → accent glow token | emphasis changes |
|
|
186
|
-
|
|
187
|
-
GSAP tweens all of these simultaneously when included in one `tl.to(...)` call.
|
|
188
|
-
|
|
189
|
-
## How to Choose Values
|
|
190
|
-
|
|
191
|
-
- **HOLD_BEAT** — pre-morph dwell so the viewer registers shot 1 before it changes
|
|
192
|
-
- Range: 0.6-1.5 s
|
|
193
|
-
- Effects: low end feels rushed / glitchy; high end stalls pacing
|
|
194
|
-
- Constraints: must be ≥ shot 1's content entry settle time
|
|
195
|
-
- **MORPH_START** — when the container morph begins
|
|
196
|
-
- Range: equal to `HOLD_BEAT` in the canonical pattern
|
|
197
|
-
- Constraints: must be > any shot-1 entry tween end
|
|
198
|
-
- **MORPH_DUR** — full length of the simultaneous container morph
|
|
199
|
-
- Range: 0.6-1.2 s
|
|
200
|
-
- Effects: low end reads as a snap; high end loses momentum
|
|
201
|
-
- Constraints: short morphs (<0.5s) cannot fit both old-fade and new-fade
|
|
202
|
-
- **SHOT_TWO_W / SHOT_TWO_H** — final container dimensions
|
|
203
|
-
- Range: 80-400 px when handing off to an icon-sized anchor
|
|
204
|
-
- Constraints: if handing off (`.next-shot-anchor`), MUST match the anchor's dimensions exactly to avoid a visible pop
|
|
205
|
-
- **SHOT_TWO_RADIUS** — final corner radius (use to read as circle / pill / soft-rect)
|
|
206
|
-
- Range: 0 to `min(SHOT_TWO_W, SHOT_TWO_H) / 2`
|
|
207
|
-
- Effects: half-of-smaller-side = perfect circle; smaller = soft rect
|
|
208
|
-
- Constraints: > half is visually clamped — wastes the tween
|
|
209
|
-
- **OLD_FADE_FRAC** — fraction of `MORPH_DUR` over which shot-1 content fades out, starting at `MORPH_START`
|
|
210
|
-
- Range: 0.3-0.5
|
|
211
|
-
- Effects: low end clips shot 1 too early; high end overlaps with shot 2 content
|
|
212
|
-
- Constraints: `OLD_FADE_FRAC + NEW_FADE_FRAC ≤ 1` (gap between is the "shape-only" moment)
|
|
213
|
-
- **NEW_FADE_FRAC** — fraction of `MORPH_DUR` over which shot-2 content fades in, ending at `MORPH_START + MORPH_DUR`
|
|
214
|
-
- Range: 0.3-0.5
|
|
215
|
-
- Effects: symmetric to OLD_FADE_FRAC
|
|
216
|
-
- **FINAL_FADE_FRAC** — optional tail fraction during which the morph container itself fades to 0 for handoff
|
|
217
|
-
- Range: 0 (no handoff) or 0.1-0.2
|
|
218
|
-
- Constraints: only use when `.next-shot-anchor` matches the morph's final visual exactly
|
|
219
|
-
- **Ease family** — discrete choice
|
|
220
|
-
- Options: `power2.inOut` (canonical, balanced), `power3.inOut` (snappier), `expo.inOut` (most cinematic but can feel sluggish at low durations)
|
|
221
|
-
- Avoid `back.out` / `elastic.out` on the morph itself — overshoot fights the dimensional change
|
|
222
|
-
|
|
223
|
-
CSS-side placeholders (`SHOT_ONE_W`, `SHOT_ONE_H`, `SHOT_ONE_RADIUS`, `{surfaceShotOne}`, `{surfaceShotTwo}`) take real values in the example. Pick `{surfaceShotOne}` and `{surfaceShotTwo}` so the gradient/solid stops counts match (GSAP can interpolate background gradients only when stop counts agree).
|
|
224
|
-
|
|
225
|
-
## Key Principles
|
|
226
|
-
|
|
227
|
-
- **All target properties in one tween** — they share a single ease and duration so they morph in lockstep
|
|
228
|
-
- **Old content fades early, new content fades late** — the container shape change happens between, providing a natural "blink" moment
|
|
229
|
-
- **Final fade is optional** — use it when the next shot has a real anchor element to hand off to (e.g. avatar that the icon morphed into "is")
|
|
230
|
-
- **Same easing for shape and crossfade** — avoid mixing `power2.inOut` morph with `bounce.out` content, looks unsynchronized
|
|
231
|
-
- **❗ If you use `.next-shot-anchor` for handoff, its visuals must be pixel-identical to `.morph-card`'s final state** — same `width` / `height`, same `border-radius`, same `background`, same `box-shadow`, same internal icon dimensions. Any visual delta between the two = visible pop during the crossfade. If you can't match exactly, **drop the handoff** and just hold the morph card at its final state (add a breath if needed for life).
|
|
232
|
-
|
|
233
|
-
## Critical Constraints
|
|
234
|
-
|
|
235
|
-
- **`overflow: hidden`** on the morph container — content must clip during shape change, otherwise content overflows the morphing border radius
|
|
236
|
-
- **Hold a beat before morphing** — let the viewer register shot 1's content before morphing; instant morph reads as glitchy
|
|
237
|
-
- **Timeline must be paused**: `gsap.timeline({ paused: true })`. Never `tl.play()`
|
|
238
|
-
- **Registry key = `data-composition-id`**: `window.__timelines["morph-scene"]` must match scene root
|
|
239
|
-
- **Use `background` tween, not `background-color`**: gradients need `background` (GSAP supports gradient interpolation when targets are gradients with same number of stops). For solid → solid, `backgroundColor` works.
|
|
240
|
-
- **`borderRadius` should be ≤ half the smaller dimension** at end state — otherwise the radius is visually clamped and the morph looks abrupt at the boundary
|
|
241
|
-
- **❗ Don't snap `z-index` mid-fade** — if you need `.next-shot-anchor` to appear from behind the morph card, use **DOM order** (render `.next-shot-anchor` BEFORE `.morph-card` so the morph card is naturally on top), then crossfade their opacities. A `tl.set({ zIndex: ... })` call during an active opacity tween causes a visible flicker as the stacking order flips before the opacity transition finishes.
|
|
242
|
-
|
|
243
|
-
## Variation: Morphing to a target element's position
|
|
244
|
-
|
|
245
|
-
When shot 2 isn't centered (e.g. the morph card "lands" on a specific icon in a dock, sidebar, or grid), compute the target `top` / `left` from the **target element's element-position**, not its visual center. Common mistake: subtracting `height/2` to get center, then applying that to the morph-card's `top` — but if `.morph-card` uses absolute positioning with `top` + `margin: 0` (no transform-centering), `top` represents the **element top edge**, not the center.
|
|
246
|
-
|
|
247
|
-
Math template (example: morph card lands on icon at bottom dock):
|
|
248
|
-
|
|
249
|
-
```
|
|
250
|
-
target_element_top = viewport_height − dock_bottom_offset − dock_padding_y − icon_height
|
|
251
|
-
= 1080 − 60 − 22 − 110 = 888 px
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
Then tween `.morph-card { top: 888 }` so its element-top aligns with the target icon's element-top. If you mistakenly tween to `888 + icon_height/2 = 943` you'll land below; tweening to a "center" value like `top: 933` (off-by-arithmetic) will be even worse.
|
|
255
|
-
|
|
256
|
-
Always **measure the target element with `getBoundingClientRect()`** before the timeline starts, and use those numbers — don't hand-compute from CSS values, since paddings, borders, and parent transforms compound.
|
|
257
|
-
|
|
258
|
-
## Combinations
|
|
259
|
-
|
|
260
|
-
- [scale-swap-transition.md](scale-swap-transition.md) — simpler morph without dimension change (just scale + content swap)
|
|
261
|
-
- [sine-wave-loop.md](sine-wave-loop.md) — gentle breathing on the final state (e.g. final small circular icon idles with a breath)
|
|
262
|
-
|
|
263
|
-
## Pairs with HF skills
|
|
264
|
-
|
|
265
|
-
- `/hyperframes-animation` — timeline + multi-property tween reference
|
|
266
|
-
- `/hyperframes-core` — composition wiring, `data-*` attributes
|
|
267
|
-
- `/hyperframes-cli` — `hyperframes lint` to verify scene structure
|
|
1
|
+
---
|
|
2
|
+
name: card-morph-anchor
|
|
3
|
+
description: Container morphs dimensions and border-radius between shots, serving as a visual transition anchor.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: morph, anchor, transition, border-radius, container, shape
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Card Morph Anchor
|
|
9
|
+
|
|
10
|
+
A container smoothly transforms its width, height, border-radius, and (optionally) background between two visual states. The morph itself **IS the shot transition** — no separate transition effect needed. The viewer's eye tracks the morphing container as the anchor between shots.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
A single GSAP tween animates multiple container properties simultaneously (width / height / border-radius / background). At the same time:
|
|
15
|
+
|
|
16
|
+
1. **Old content** fades out during the first ~40% of the morph
|
|
17
|
+
2. **New content** fades in during the last ~40% of the morph
|
|
18
|
+
3. **Optional final fade** — the morph container itself fades to 0, revealing the actual next-shot element rendered behind it
|
|
19
|
+
|
|
20
|
+
The persistent container provides visual continuity even as content and shape change.
|
|
21
|
+
|
|
22
|
+
## HTML
|
|
23
|
+
|
|
24
|
+
```html
|
|
25
|
+
<div
|
|
26
|
+
class="scene"
|
|
27
|
+
id="morph-scene"
|
|
28
|
+
data-composition-id="morph-scene"
|
|
29
|
+
data-start="0"
|
|
30
|
+
data-duration="4"
|
|
31
|
+
data-track-index="0"
|
|
32
|
+
>
|
|
33
|
+
<!-- The persistent morph container -->
|
|
34
|
+
<div class="morph-card">
|
|
35
|
+
<div class="content-old">
|
|
36
|
+
<h2>{shotOneHeadline}</h2>
|
|
37
|
+
<p>{shotOneSubcopy}</p>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="content-new">
|
|
40
|
+
<img src="{shotTwoIcon}" alt="logo" />
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<!-- Optional: actual next-shot element behind the morph -->
|
|
45
|
+
<div class="next-shot-anchor">
|
|
46
|
+
<img src="{nextShotAnchor}" alt="anchor" />
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## CSS (hero-frame layout)
|
|
52
|
+
|
|
53
|
+
Card starts as a wide rectangle (shot 1 state). All properties present from the start; only opacities differ:
|
|
54
|
+
|
|
55
|
+
```css
|
|
56
|
+
.scene {
|
|
57
|
+
position: relative;
|
|
58
|
+
width: 100%;
|
|
59
|
+
height: 100%;
|
|
60
|
+
display: grid;
|
|
61
|
+
place-items: center;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.morph-card {
|
|
65
|
+
position: relative;
|
|
66
|
+
width: {SHOT_ONE_W}px;
|
|
67
|
+
height: {SHOT_ONE_H}px;
|
|
68
|
+
border-radius: {SHOT_ONE_RADIUS}px;
|
|
69
|
+
background: {surfaceShotOne};
|
|
70
|
+
overflow: hidden;
|
|
71
|
+
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
|
|
72
|
+
display: grid;
|
|
73
|
+
place-items: center;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.content-old,
|
|
77
|
+
.content-new {
|
|
78
|
+
position: absolute;
|
|
79
|
+
inset: 0;
|
|
80
|
+
display: grid;
|
|
81
|
+
place-items: center;
|
|
82
|
+
padding: 32px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.content-old {
|
|
86
|
+
opacity: 1;
|
|
87
|
+
}
|
|
88
|
+
.content-new {
|
|
89
|
+
opacity: 0;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.next-shot-anchor {
|
|
93
|
+
position: absolute;
|
|
94
|
+
left: 50%;
|
|
95
|
+
top: 50%;
|
|
96
|
+
transform: translate(-50%, -50%);
|
|
97
|
+
opacity: 0; /* GSAP fades this in as morph card fades out */
|
|
98
|
+
/* Use DOM ORDER for stacking — render .next-shot-anchor BEFORE .morph-card
|
|
99
|
+
in markup so the morph card is naturally on top. Do NOT use z-index: -1
|
|
100
|
+
and then snap it positive mid-fade — that causes a visible pop. */
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## GSAP Timeline
|
|
105
|
+
|
|
106
|
+
```html
|
|
107
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
108
|
+
<script>
|
|
109
|
+
window.__timelines = window.__timelines || {};
|
|
110
|
+
const tl = gsap.timeline({ paused: true });
|
|
111
|
+
|
|
112
|
+
// Named constants — assign in your example only. See "How to Choose Values".
|
|
113
|
+
const HOLD_BEAT; // s — pre-morph dwell on shot 1
|
|
114
|
+
const MORPH_START; // s — usually = HOLD_BEAT
|
|
115
|
+
const MORPH_DUR; // s — full container morph length
|
|
116
|
+
const SHOT_TWO_W; // px — final container width
|
|
117
|
+
const SHOT_TWO_H; // px — final container height
|
|
118
|
+
const SHOT_TWO_RADIUS; // px — ≤ min(SHOT_TWO_W, SHOT_TWO_H) / 2
|
|
119
|
+
const OLD_FADE_FRAC; // 0..0.5 — fraction of MORPH_DUR for old content fade
|
|
120
|
+
const NEW_FADE_FRAC; // 0..0.5 — fraction of MORPH_DUR for new content fade
|
|
121
|
+
const FINAL_FADE_FRAC; // 0..0.3 — optional tail fade for handoff
|
|
122
|
+
// {surfaceShotTwo} is a CSS background token (solid or gradient).
|
|
123
|
+
|
|
124
|
+
// Hold shot 1 — let the viewer register the wide banner before morphing.
|
|
125
|
+
|
|
126
|
+
// Phase 1 — Morph container properties simultaneously
|
|
127
|
+
tl.to(
|
|
128
|
+
".morph-card",
|
|
129
|
+
{
|
|
130
|
+
width: SHOT_TWO_W,
|
|
131
|
+
height: SHOT_TWO_H,
|
|
132
|
+
borderRadius: SHOT_TWO_RADIUS,
|
|
133
|
+
background: "{surfaceShotTwo}",
|
|
134
|
+
duration: MORPH_DUR,
|
|
135
|
+
ease: "power2.inOut",
|
|
136
|
+
},
|
|
137
|
+
MORPH_START,
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
// Phase 2 — Old content fades during the FIRST OLD_FADE_FRAC of the morph
|
|
141
|
+
tl.to(
|
|
142
|
+
".content-old",
|
|
143
|
+
{
|
|
144
|
+
opacity: 0,
|
|
145
|
+
duration: MORPH_DUR * OLD_FADE_FRAC,
|
|
146
|
+
ease: "power1.in",
|
|
147
|
+
},
|
|
148
|
+
MORPH_START,
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
// Phase 3 — New content fades in during the LAST NEW_FADE_FRAC of the morph
|
|
152
|
+
tl.to(
|
|
153
|
+
".content-new",
|
|
154
|
+
{
|
|
155
|
+
opacity: 1,
|
|
156
|
+
duration: MORPH_DUR * NEW_FADE_FRAC,
|
|
157
|
+
ease: "power1.out",
|
|
158
|
+
},
|
|
159
|
+
MORPH_START + MORPH_DUR * (1 - NEW_FADE_FRAC),
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
// Optional Phase 4 — Final fade: morph container disappears at the very end,
|
|
163
|
+
// revealing the actual next-shot element behind it.
|
|
164
|
+
tl.to(
|
|
165
|
+
".morph-card",
|
|
166
|
+
{
|
|
167
|
+
opacity: 0,
|
|
168
|
+
duration: MORPH_DUR * FINAL_FADE_FRAC,
|
|
169
|
+
ease: "power1.in",
|
|
170
|
+
},
|
|
171
|
+
MORPH_START + MORPH_DUR * (1 - FINAL_FADE_FRAC),
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
window.__timelines["morph-scene"] = tl;
|
|
175
|
+
</script>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Key Properties to Morph
|
|
179
|
+
|
|
180
|
+
| Property | Shape of change | Visual effect |
|
|
181
|
+
| ------------------ | -------------------------------------------------------------- | ---------------------------- |
|
|
182
|
+
| `width` / `height` | `SHOT_ONE_W × SHOT_ONE_H` → `SHOT_TWO_W × SHOT_TWO_H` | wide card shrinks to an icon |
|
|
183
|
+
| `borderRadius` | `SHOT_ONE_RADIUS` → `SHOT_TWO_RADIUS` (≤ half of smaller side) | rectangle becomes a circle |
|
|
184
|
+
| `background` | `{surfaceShotOne}` → `{surfaceShotTwo}` (solid or gradient) | container identity shifts |
|
|
185
|
+
| `boxShadow` | base shadow → accent glow token | emphasis changes |
|
|
186
|
+
|
|
187
|
+
GSAP tweens all of these simultaneously when included in one `tl.to(...)` call.
|
|
188
|
+
|
|
189
|
+
## How to Choose Values
|
|
190
|
+
|
|
191
|
+
- **HOLD_BEAT** — pre-morph dwell so the viewer registers shot 1 before it changes
|
|
192
|
+
- Range: 0.6-1.5 s
|
|
193
|
+
- Effects: low end feels rushed / glitchy; high end stalls pacing
|
|
194
|
+
- Constraints: must be ≥ shot 1's content entry settle time
|
|
195
|
+
- **MORPH_START** — when the container morph begins
|
|
196
|
+
- Range: equal to `HOLD_BEAT` in the canonical pattern
|
|
197
|
+
- Constraints: must be > any shot-1 entry tween end
|
|
198
|
+
- **MORPH_DUR** — full length of the simultaneous container morph
|
|
199
|
+
- Range: 0.6-1.2 s
|
|
200
|
+
- Effects: low end reads as a snap; high end loses momentum
|
|
201
|
+
- Constraints: short morphs (<0.5s) cannot fit both old-fade and new-fade
|
|
202
|
+
- **SHOT_TWO_W / SHOT_TWO_H** — final container dimensions
|
|
203
|
+
- Range: 80-400 px when handing off to an icon-sized anchor
|
|
204
|
+
- Constraints: if handing off (`.next-shot-anchor`), MUST match the anchor's dimensions exactly to avoid a visible pop
|
|
205
|
+
- **SHOT_TWO_RADIUS** — final corner radius (use to read as circle / pill / soft-rect)
|
|
206
|
+
- Range: 0 to `min(SHOT_TWO_W, SHOT_TWO_H) / 2`
|
|
207
|
+
- Effects: half-of-smaller-side = perfect circle; smaller = soft rect
|
|
208
|
+
- Constraints: > half is visually clamped — wastes the tween
|
|
209
|
+
- **OLD_FADE_FRAC** — fraction of `MORPH_DUR` over which shot-1 content fades out, starting at `MORPH_START`
|
|
210
|
+
- Range: 0.3-0.5
|
|
211
|
+
- Effects: low end clips shot 1 too early; high end overlaps with shot 2 content
|
|
212
|
+
- Constraints: `OLD_FADE_FRAC + NEW_FADE_FRAC ≤ 1` (gap between is the "shape-only" moment)
|
|
213
|
+
- **NEW_FADE_FRAC** — fraction of `MORPH_DUR` over which shot-2 content fades in, ending at `MORPH_START + MORPH_DUR`
|
|
214
|
+
- Range: 0.3-0.5
|
|
215
|
+
- Effects: symmetric to OLD_FADE_FRAC
|
|
216
|
+
- **FINAL_FADE_FRAC** — optional tail fraction during which the morph container itself fades to 0 for handoff
|
|
217
|
+
- Range: 0 (no handoff) or 0.1-0.2
|
|
218
|
+
- Constraints: only use when `.next-shot-anchor` matches the morph's final visual exactly
|
|
219
|
+
- **Ease family** — discrete choice
|
|
220
|
+
- Options: `power2.inOut` (canonical, balanced), `power3.inOut` (snappier), `expo.inOut` (most cinematic but can feel sluggish at low durations)
|
|
221
|
+
- Avoid `back.out` / `elastic.out` on the morph itself — overshoot fights the dimensional change
|
|
222
|
+
|
|
223
|
+
CSS-side placeholders (`SHOT_ONE_W`, `SHOT_ONE_H`, `SHOT_ONE_RADIUS`, `{surfaceShotOne}`, `{surfaceShotTwo}`) take real values in the example. Pick `{surfaceShotOne}` and `{surfaceShotTwo}` so the gradient/solid stops counts match (GSAP can interpolate background gradients only when stop counts agree).
|
|
224
|
+
|
|
225
|
+
## Key Principles
|
|
226
|
+
|
|
227
|
+
- **All target properties in one tween** — they share a single ease and duration so they morph in lockstep
|
|
228
|
+
- **Old content fades early, new content fades late** — the container shape change happens between, providing a natural "blink" moment
|
|
229
|
+
- **Final fade is optional** — use it when the next shot has a real anchor element to hand off to (e.g. avatar that the icon morphed into "is")
|
|
230
|
+
- **Same easing for shape and crossfade** — avoid mixing `power2.inOut` morph with `bounce.out` content, looks unsynchronized
|
|
231
|
+
- **❗ If you use `.next-shot-anchor` for handoff, its visuals must be pixel-identical to `.morph-card`'s final state** — same `width` / `height`, same `border-radius`, same `background`, same `box-shadow`, same internal icon dimensions. Any visual delta between the two = visible pop during the crossfade. If you can't match exactly, **drop the handoff** and just hold the morph card at its final state (add a breath if needed for life).
|
|
232
|
+
|
|
233
|
+
## Critical Constraints
|
|
234
|
+
|
|
235
|
+
- **`overflow: hidden`** on the morph container — content must clip during shape change, otherwise content overflows the morphing border radius
|
|
236
|
+
- **Hold a beat before morphing** — let the viewer register shot 1's content before morphing; instant morph reads as glitchy
|
|
237
|
+
- **Timeline must be paused**: `gsap.timeline({ paused: true })`. Never `tl.play()`
|
|
238
|
+
- **Registry key = `data-composition-id`**: `window.__timelines["morph-scene"]` must match scene root
|
|
239
|
+
- **Use `background` tween, not `background-color`**: gradients need `background` (GSAP supports gradient interpolation when targets are gradients with same number of stops). For solid → solid, `backgroundColor` works.
|
|
240
|
+
- **`borderRadius` should be ≤ half the smaller dimension** at end state — otherwise the radius is visually clamped and the morph looks abrupt at the boundary
|
|
241
|
+
- **❗ Don't snap `z-index` mid-fade** — if you need `.next-shot-anchor` to appear from behind the morph card, use **DOM order** (render `.next-shot-anchor` BEFORE `.morph-card` so the morph card is naturally on top), then crossfade their opacities. A `tl.set({ zIndex: ... })` call during an active opacity tween causes a visible flicker as the stacking order flips before the opacity transition finishes.
|
|
242
|
+
|
|
243
|
+
## Variation: Morphing to a target element's position
|
|
244
|
+
|
|
245
|
+
When shot 2 isn't centered (e.g. the morph card "lands" on a specific icon in a dock, sidebar, or grid), compute the target `top` / `left` from the **target element's element-position**, not its visual center. Common mistake: subtracting `height/2` to get center, then applying that to the morph-card's `top` — but if `.morph-card` uses absolute positioning with `top` + `margin: 0` (no transform-centering), `top` represents the **element top edge**, not the center.
|
|
246
|
+
|
|
247
|
+
Math template (example: morph card lands on icon at bottom dock):
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
target_element_top = viewport_height − dock_bottom_offset − dock_padding_y − icon_height
|
|
251
|
+
= 1080 − 60 − 22 − 110 = 888 px
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Then tween `.morph-card { top: 888 }` so its element-top aligns with the target icon's element-top. If you mistakenly tween to `888 + icon_height/2 = 943` you'll land below; tweening to a "center" value like `top: 933` (off-by-arithmetic) will be even worse.
|
|
255
|
+
|
|
256
|
+
Always **measure the target element with `getBoundingClientRect()`** before the timeline starts, and use those numbers — don't hand-compute from CSS values, since paddings, borders, and parent transforms compound.
|
|
257
|
+
|
|
258
|
+
## Combinations
|
|
259
|
+
|
|
260
|
+
- [scale-swap-transition.md](scale-swap-transition.md) — simpler morph without dimension change (just scale + content swap)
|
|
261
|
+
- [sine-wave-loop.md](sine-wave-loop.md) — gentle breathing on the final state (e.g. final small circular icon idles with a breath)
|
|
262
|
+
|
|
263
|
+
## Pairs with HF skills
|
|
264
|
+
|
|
265
|
+
- `/hyperframes-animation` — timeline + multi-property tween reference
|
|
266
|
+
- `/hyperframes-core` — composition wiring, `data-*` attributes
|
|
267
|
+
- `/hyperframes-cli` — `hyperframes lint` to verify scene structure
|