takomi 2.1.40 → 2.1.42
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/.agents/plugins/marketplace.json +22 -22
- package/README.md +7 -4
- package/assets/.agent/skills/embedded-captions/CATALOG.md +93 -0
- package/assets/.agent/skills/embedded-captions/SKILL.md +286 -0
- package/assets/.agent/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -0
- package/assets/.agent/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -0
- package/assets/.agent/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
- package/assets/.agent/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
- package/assets/.agent/skills/embedded-captions/dna/README.md +148 -0
- package/assets/.agent/skills/embedded-captions/dna/chrome.json +68 -0
- package/assets/.agent/skills/embedded-captions/dna/cream.json +69 -0
- package/assets/.agent/skills/embedded-captions/dna/documentary.json +62 -0
- package/assets/.agent/skills/embedded-captions/dna/editorial.json +70 -0
- package/assets/.agent/skills/embedded-captions/dna/glitch.json +82 -0
- package/assets/.agent/skills/embedded-captions/dna/ink.json +65 -0
- package/assets/.agent/skills/embedded-captions/dna/keynote.json +62 -0
- package/assets/.agent/skills/embedded-captions/dna/loud.json +75 -0
- package/assets/.agent/skills/embedded-captions/dna/neon.json +58 -0
- package/assets/.agent/skills/embedded-captions/dna/velocity.json +89 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/README.md +48 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
- package/assets/.agent/skills/embedded-captions/modes/cinematic/engine.html +355 -0
- package/assets/.agent/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
- package/assets/.agent/skills/embedded-captions/modes/standard/_motion.md +192 -0
- package/assets/.agent/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
- package/assets/.agent/skills/embedded-captions/references/aesthetic-principles.md +168 -0
- package/assets/.agent/skills/embedded-captions/references/anti-patterns.md +188 -0
- package/assets/.agent/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
- package/assets/.agent/skills/embedded-captions/references/caption-grouping.md +130 -0
- package/assets/.agent/skills/embedded-captions/references/composition-craft.md +522 -0
- package/assets/.agent/skills/embedded-captions/references/direction-catalog.md +138 -0
- package/assets/.agent/skills/embedded-captions/references/example-renders/champion.html +371 -0
- package/assets/.agent/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
- package/assets/.agent/skills/embedded-captions/references/failure-modes.md +145 -0
- package/assets/.agent/skills/embedded-captions/references/layout-heuristics.md +238 -0
- package/assets/.agent/skills/embedded-captions/references/motion-vocabulary.md +148 -0
- package/assets/.agent/skills/embedded-captions/references/rail.md +68 -0
- package/assets/.agent/skills/embedded-captions/references/reference-bar.md +47 -0
- package/assets/.agent/skills/embedded-captions/references/scene-types.md +94 -0
- package/assets/.agent/skills/embedded-captions/references/test-set.md +66 -0
- package/assets/.agent/skills/embedded-captions/references/typographic-moves.md +266 -0
- package/assets/.agent/skills/embedded-captions/references/typography-presets.md +63 -0
- package/assets/.agent/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
- package/assets/.agent/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
- package/assets/.agent/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
- package/assets/.agent/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
- package/assets/.agent/skills/embedded-captions/scripts/check-timing.cjs +173 -0
- package/assets/.agent/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
- package/assets/.agent/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
- package/assets/.agent/skills/embedded-captions/scripts/gen-stroke-path.py +46 -0
- package/assets/.agent/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
- package/assets/.agent/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
- package/assets/.agent/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -0
- package/assets/.agent/skills/embedded-captions/scripts/make-composition.cjs +404 -0
- package/assets/.agent/skills/embedded-captions/scripts/make-theme.cjs +8781 -0
- package/assets/.agent/skills/embedded-captions/scripts/matte.cjs +279 -0
- package/assets/.agent/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
- package/assets/.agent/skills/embedded-captions/scripts/prepare.sh +39 -0
- package/assets/.agent/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
- package/assets/.agent/skills/embedded-captions/scripts/render-and-composite.sh +469 -0
- package/assets/.agent/skills/embedded-captions/scripts/render-theme.sh +34 -0
- package/assets/.agent/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
- package/assets/.agent/skills/embedded-captions/scripts/transcribe.cjs +332 -0
- package/assets/.agent/skills/embedded-captions/themes/PORTING.md +49 -0
- package/assets/.agent/skills/embedded-captions/themes/README.md +244 -0
- package/assets/.agent/skills/embedded-captions/themes/anchor.json +27 -0
- package/assets/.agent/skills/embedded-captions/themes/arcade.json +51 -0
- package/assets/.agent/skills/embedded-captions/themes/aurora.json +41 -0
- package/assets/.agent/skills/embedded-captions/themes/biolume.json +35 -0
- package/assets/.agent/skills/embedded-captions/themes/brush.json +74 -0
- package/assets/.agent/skills/embedded-captions/themes/chalkboard.json +52 -0
- package/assets/.agent/skills/embedded-captions/themes/dossier.json +56 -0
- package/assets/.agent/skills/embedded-captions/themes/graffiti.json +62 -0
- package/assets/.agent/skills/embedded-captions/themes/hologram.json +41 -0
- package/assets/.agent/skills/embedded-captions/themes/inkwater.json +43 -0
- package/assets/.agent/skills/embedded-captions/themes/laser.json +46 -0
- package/assets/.agent/skills/embedded-captions/themes/lastpage.json +33 -0
- package/assets/.agent/skills/embedded-captions/themes/neonsign.json +53 -0
- package/assets/.agent/skills/embedded-captions/themes/nightcity.json +56 -0
- package/assets/.agent/skills/embedded-captions/themes/ordnance.json +54 -0
- package/assets/.agent/skills/embedded-captions/themes/papercut.json +37 -0
- package/assets/.agent/skills/embedded-captions/themes/popup.json +46 -0
- package/assets/.agent/skills/embedded-captions/themes/ransom.json +62 -0
- package/assets/.agent/skills/embedded-captions/themes/scoreboard.json +54 -0
- package/assets/.agent/skills/embedded-captions/themes/spectrum.json +46 -0
- package/assets/.agent/skills/embedded-captions/themes/stardust.json +29 -0
- package/assets/.agent/skills/embedded-captions/themes/stomp.json +43 -0
- package/assets/.agent/skills/embedded-captions/themes/terminal.json +49 -0
- package/assets/.agent/skills/embedded-captions/themes/thunder.json +44 -0
- package/assets/.agent/skills/embedded-captions/themes/transit.json +44 -0
- package/assets/.agent/skills/embedded-captions/themes/vhs.json +47 -0
- package/assets/.agent/skills/faceless-explainer/SKILL.md +209 -0
- package/assets/.agent/skills/faceless-explainer/references/cut-catalog.md +215 -0
- package/assets/.agent/skills/faceless-explainer/references/motion-language.md +156 -0
- package/assets/.agent/skills/faceless-explainer/references/story-design.md +248 -0
- package/assets/.agent/skills/faceless-explainer/references/visual-design.md +146 -0
- package/assets/.agent/skills/faceless-explainer/scripts/assemble-index.mjs +570 -0
- package/assets/.agent/skills/faceless-explainer/scripts/audio.mjs +253 -0
- package/assets/.agent/skills/faceless-explainer/scripts/build-frame.mjs +536 -0
- package/assets/.agent/skills/faceless-explainer/scripts/captions.mjs +508 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/assets.mjs +55 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
- package/assets/.agent/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
- package/assets/.agent/skills/faceless-explainer/scripts/transitions.mjs +320 -0
- package/assets/.agent/skills/faceless-explainer/sub-agents/frame-worker.md +75 -0
- package/assets/.agent/skills/figma/SKILL.md +121 -0
- package/assets/.agent/skills/general-video/SKILL.md +143 -0
- package/assets/.agent/skills/hyperframes/SKILL.md +164 -0
- package/assets/.agent/skills/hyperframes-animation/SKILL.md +84 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/animate-text.md +64 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/animejs.md +114 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/css-animations.md +143 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/gsap.md +105 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/lottie.md +117 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/three.md +131 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/typegpu.md +178 -0
- package/assets/.agent/skills/hyperframes-animation/adapters/waapi.md +101 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
- package/assets/.agent/skills/hyperframes-animation/blueprints-index.md +146 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/avatars/02.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/github.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/nvidia.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/visa.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/assets/brands/zoominfo.avif +0 -0
- package/assets/.agent/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
- package/assets/.agent/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
- package/assets/.agent/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
- package/assets/.agent/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
- package/assets/.agent/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
- package/assets/.agent/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
- package/assets/.agent/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
- package/assets/.agent/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
- package/assets/.agent/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
- package/assets/.agent/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
- package/assets/.agent/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
- package/assets/.agent/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
- package/assets/.agent/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
- package/assets/.agent/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -0
- package/assets/.agent/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -0
- package/assets/.agent/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -0
- package/assets/.agent/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -0
- package/assets/.agent/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -0
- package/assets/.agent/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -0
- package/assets/.agent/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -0
- package/assets/.agent/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -0
- package/assets/.agent/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -0
- package/assets/.agent/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -0
- package/assets/.agent/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -0
- package/assets/.agent/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -0
- package/assets/.agent/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -0
- package/assets/.agent/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -0
- package/assets/.agent/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -0
- package/assets/.agent/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -0
- package/assets/.agent/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -0
- package/assets/.agent/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -0
- package/assets/.agent/skills/hyperframes-animation/rules/gsap-effects.md +299 -0
- package/assets/.agent/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -0
- package/assets/.agent/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -0
- package/assets/.agent/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -0
- package/assets/.agent/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -0
- package/assets/.agent/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -0
- package/assets/.agent/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -0
- package/assets/.agent/skills/hyperframes-animation/rules/press-release-spring.md +296 -0
- package/assets/.agent/skills/hyperframes-animation/rules/reactive-displacement.md +277 -0
- package/assets/.agent/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -0
- package/assets/.agent/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -0
- package/assets/.agent/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -0
- package/assets/.agent/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -0
- package/assets/.agent/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -0
- package/assets/.agent/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -0
- package/assets/.agent/skills/hyperframes-animation/rules/svg-path-draw.md +274 -0
- package/assets/.agent/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -0
- package/assets/.agent/skills/hyperframes-animation/rules/viewport-change.md +349 -0
- package/assets/.agent/skills/hyperframes-animation/rules-index.md +86 -0
- package/assets/.agent/skills/hyperframes-animation/scripts/animation-map.mjs +606 -0
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.mjs +288 -0
- package/assets/.agent/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
- package/assets/.agent/skills/hyperframes-animation/techniques.md +507 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/catalog.md +127 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-3d.md +12 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-blur.md +51 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-cover.md +43 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-grid.md +10 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-light.md +49 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-other.md +25 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-push.md +41 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-radial.md +37 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/css-scale.md +24 -0
- package/assets/.agent/skills/hyperframes-animation/transitions/overview.md +153 -0
- package/assets/.agent/skills/hyperframes-cli/SKILL.md +113 -0
- package/assets/.agent/skills/hyperframes-cli/references/doctor-browser.md +45 -0
- package/assets/.agent/skills/hyperframes-cli/references/init-and-scaffold.md +51 -0
- package/assets/.agent/skills/hyperframes-cli/references/lambda.md +132 -0
- package/assets/.agent/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
- package/assets/.agent/skills/hyperframes-cli/references/preview-render.md +164 -0
- package/assets/.agent/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
- package/assets/.agent/skills/hyperframes-core/SKILL.md +78 -0
- package/assets/.agent/skills/hyperframes-core/references/composition-patterns.md +263 -0
- package/assets/.agent/skills/hyperframes-core/references/data-attributes.md +70 -0
- package/assets/.agent/skills/hyperframes-core/references/determinism-rules.md +68 -0
- package/assets/.agent/skills/hyperframes-core/references/full-screen-motion.md +62 -0
- package/assets/.agent/skills/hyperframes-core/references/minimal-composition.md +66 -0
- package/assets/.agent/skills/hyperframes-core/references/script-format.md +49 -0
- package/assets/.agent/skills/hyperframes-core/references/storyboard-format.md +95 -0
- package/assets/.agent/skills/hyperframes-core/references/sub-compositions.md +237 -0
- package/assets/.agent/skills/hyperframes-core/references/subagent-dispatch.md +41 -0
- package/assets/.agent/skills/hyperframes-core/references/tailwind.md +125 -0
- package/assets/.agent/skills/hyperframes-core/references/tracks-and-clips.md +76 -0
- package/assets/.agent/skills/hyperframes-core/references/variables-and-media.md +90 -0
- package/assets/.agent/skills/hyperframes-creative/SKILL.md +70 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
- package/assets/.agent/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/monochrome.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
- package/assets/.agent/skills/hyperframes-creative/references/audio-reactive.md +76 -0
- package/assets/.agent/skills/hyperframes-creative/references/beat-direction.md +164 -0
- package/assets/.agent/skills/hyperframes-creative/references/composition-patterns.md +199 -0
- package/assets/.agent/skills/hyperframes-creative/references/data-in-motion.md +19 -0
- package/assets/.agent/skills/hyperframes-creative/references/design-adherence.md +19 -0
- package/assets/.agent/skills/hyperframes-creative/references/design-picker.md +123 -0
- package/assets/.agent/skills/hyperframes-creative/references/design-spec.md +55 -0
- package/assets/.agent/skills/hyperframes-creative/references/house-style.md +73 -0
- package/assets/.agent/skills/hyperframes-creative/references/motion-principles.md +150 -0
- package/assets/.agent/skills/hyperframes-creative/references/narration.md +92 -0
- package/assets/.agent/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
- package/assets/.agent/skills/hyperframes-creative/references/typography.md +218 -0
- package/assets/.agent/skills/hyperframes-creative/references/video-composition.md +63 -0
- package/assets/.agent/skills/hyperframes-creative/references/visual-styles.md +457 -0
- package/assets/.agent/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -0
- package/assets/.agent/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -0
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.mjs +288 -0
- package/assets/.agent/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
- package/assets/.agent/skills/hyperframes-creative/templates/design-picker.html +1432 -0
- package/assets/.agent/skills/hyperframes-keyframes/SKILL.md +237 -0
- package/assets/.agent/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
- package/assets/.agent/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -0
- package/assets/.agent/skills/hyperframes-media/SKILL.md +97 -0
- package/assets/.agent/skills/hyperframes-media/assets/sfx/CREDITS.md +35 -0
- package/assets/.agent/skills/hyperframes-media/assets/sfx/manifest.json +97 -0
- package/assets/.agent/skills/hyperframes-media/references/bgm.md +72 -0
- package/assets/.agent/skills/hyperframes-media/references/captions/authoring.md +159 -0
- package/assets/.agent/skills/hyperframes-media/references/captions/motion.md +87 -0
- package/assets/.agent/skills/hyperframes-media/references/captions/transcript-handling.md +97 -0
- package/assets/.agent/skills/hyperframes-media/references/remove-background.md +143 -0
- package/assets/.agent/skills/hyperframes-media/references/requirements.md +29 -0
- package/assets/.agent/skills/hyperframes-media/references/sfx.md +42 -0
- package/assets/.agent/skills/hyperframes-media/references/transcribe.md +52 -0
- package/assets/.agent/skills/hyperframes-media/references/tts-to-captions.md +24 -0
- package/assets/.agent/skills/hyperframes-media/references/tts.md +135 -0
- package/assets/.agent/skills/hyperframes-media/scripts/audio.mjs +293 -0
- package/assets/.agent/skills/hyperframes-media/scripts/heygen-tts.mjs +121 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/bgm.mjs +235 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.mjs +14 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/concurrency.test.mjs +41 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/heygen.mjs +131 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/sfx.mjs +128 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.mjs +298 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.spawn.test.mjs +97 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lib/tts.test.mjs +66 -0
- package/assets/.agent/skills/hyperframes-media/scripts/lyria-recipe.py +128 -0
- package/assets/.agent/skills/hyperframes-media/scripts/wait-bgm.mjs +167 -0
- package/assets/.agent/skills/hyperframes-registry/SKILL.md +101 -0
- package/assets/.agent/skills/hyperframes-registry/examples/add-block.md +51 -0
- package/assets/.agent/skills/hyperframes-registry/examples/add-component.md +73 -0
- package/assets/.agent/skills/hyperframes-registry/references/contributing.md +166 -0
- package/assets/.agent/skills/hyperframes-registry/references/demo-html-pattern.md +54 -0
- package/assets/.agent/skills/hyperframes-registry/references/discovery.md +215 -0
- package/assets/.agent/skills/hyperframes-registry/references/install-locations.md +45 -0
- package/assets/.agent/skills/hyperframes-registry/references/templates.md +417 -0
- package/assets/.agent/skills/hyperframes-registry/references/wiring-blocks.md +61 -0
- package/assets/.agent/skills/hyperframes-registry/references/wiring-components.md +39 -0
- package/assets/.agent/skills/media-use/SKILL.md +124 -0
- package/assets/.agent/skills/media-use/scripts/eval.mjs +369 -0
- package/assets/.agent/skills/media-use/scripts/lib/adopt.mjs +112 -0
- package/assets/.agent/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
- package/assets/.agent/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
- package/assets/.agent/skills/media-use/scripts/lib/cache.mjs +114 -0
- package/assets/.agent/skills/media-use/scripts/lib/freeze.mjs +26 -0
- package/assets/.agent/skills/media-use/scripts/lib/heygen-search.mjs +51 -0
- package/assets/.agent/skills/media-use/scripts/lib/image-provider.mjs +44 -0
- package/assets/.agent/skills/media-use/scripts/lib/index-gen.mjs +63 -0
- package/assets/.agent/skills/media-use/scripts/lib/manifest.mjs +91 -0
- package/assets/.agent/skills/media-use/scripts/lib/manifest.test.mjs +293 -0
- package/assets/.agent/skills/media-use/scripts/lib/probe.mjs +39 -0
- package/assets/.agent/skills/media-use/scripts/lib/probe.test.mjs +31 -0
- package/assets/.agent/skills/media-use/scripts/lib/providers.mjs +29 -0
- package/assets/.agent/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
- package/assets/.agent/skills/media-use/scripts/resolve.mjs +247 -0
- package/assets/.agent/skills/media-use/scripts/resolve.test.mjs +247 -0
- package/assets/.agent/skills/motion-graphics/SKILL.md +172 -0
- package/assets/.agent/skills/motion-graphics/agents/builder.md +40 -0
- package/assets/.agent/skills/motion-graphics/agents/director.md +53 -0
- package/assets/.agent/skills/motion-graphics/agents/finalize.md +17 -0
- package/assets/.agent/skills/motion-graphics/catalog-map.md +40 -0
- package/assets/.agent/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
- package/assets/.agent/skills/motion-graphics/categories/charts/module.md +21 -0
- package/assets/.agent/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
- package/assets/.agent/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
- package/assets/.agent/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
- package/assets/.agent/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
- package/assets/.agent/skills/motion-graphics/categories/maps/module.md +61 -0
- package/assets/.agent/skills/motion-graphics/categories/news/module.md +56 -0
- package/assets/.agent/skills/motion-graphics/categories/stat/module.md +21 -0
- package/assets/.agent/skills/motion-graphics/categories/tweet/module.md +16 -0
- package/assets/.agent/skills/motion-graphics/categories/webpage/module.md +21 -0
- package/assets/.agent/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
- package/assets/.agent/skills/motion-graphics/grounding/locate.mjs +227 -0
- package/assets/.agent/skills/motion-graphics/phases/source/guide.md +21 -0
- package/assets/.agent/skills/motion-graphics/references/builder-contract.md +38 -0
- package/assets/.agent/skills/motion-graphics/references/motion-vocabulary.md +43 -0
- package/assets/.agent/skills/motion-graphics/references/shot-plan-ir.md +54 -0
- package/assets/.agent/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
- package/assets/.agent/skills/music-to-video/SKILL.md +197 -0
- package/assets/.agent/skills/music-to-video/references/frame-skeleton.md +100 -0
- package/assets/.agent/skills/music-to-video/references/montage.md +58 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitive-catalog.md +75 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +154 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/assets/gsap.min.js +11 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +326 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +120 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +95 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/braam-punch/index.html +135 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +146 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +103 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/counting-punch/index.html +154 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +155 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +166 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/directional-fill/index.html +133 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +137 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/electric-arc/index.html +144 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/flash-cut/index.html +132 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +241 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hard-cut/index.html +117 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +79 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/iris-open/index.html +104 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +92 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +131 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +109 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +124 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +108 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +117 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/palette-flip/index.html +132 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/particle-burst/index.html +141 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +121 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +160 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/screen-shake/index.html +113 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +130 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +137 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +117 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +313 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +136 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +144 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +122 -0
- package/assets/.agent/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +126 -0
- package/assets/.agent/skills/music-to-video/references/planning.md +104 -0
- package/assets/.agent/skills/music-to-video/references/storyboard-format.md +94 -0
- package/assets/.agent/skills/music-to-video/references/template-catalog.md +106 -0
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/index.html +527 -0
- package/assets/.agent/skills/music-to-video/references/templates/card-flyby/program.json +13 -0
- package/assets/.agent/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -0
- package/assets/.agent/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -0
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -0
- package/assets/.agent/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -0
- package/assets/.agent/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -0
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -0
- package/assets/.agent/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -0
- package/assets/.agent/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -0
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -0
- package/assets/.agent/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -0
- package/assets/.agent/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -0
- package/assets/.agent/skills/music-to-video/scripts/analyze-beatgrid.py +531 -0
- package/assets/.agent/skills/music-to-video/scripts/assemble-index.mjs +218 -0
- package/assets/.agent/skills/music-to-video/scripts/lib/storyboard.mjs +249 -0
- package/assets/.agent/skills/music-to-video/scripts/stage-assets.mjs +58 -0
- package/assets/.agent/skills/music-to-video/scripts/validate-plan.mjs +161 -0
- package/assets/.agent/skills/music-to-video/sub-agents/frame-worker.md +75 -0
- package/assets/.agent/skills/pr-to-video/SKILL.md +240 -0
- package/assets/.agent/skills/pr-to-video/references/code-vocabulary.md +111 -0
- package/assets/.agent/skills/pr-to-video/references/cut-catalog.md +215 -0
- package/assets/.agent/skills/pr-to-video/references/motion-language.md +156 -0
- package/assets/.agent/skills/pr-to-video/references/story-design.md +211 -0
- package/assets/.agent/skills/pr-to-video/references/visual-design.md +164 -0
- package/assets/.agent/skills/pr-to-video/scripts/assemble-index.mjs +570 -0
- package/assets/.agent/skills/pr-to-video/scripts/audio.mjs +253 -0
- package/assets/.agent/skills/pr-to-video/scripts/build-frame.mjs +536 -0
- package/assets/.agent/skills/pr-to-video/scripts/captions.mjs +508 -0
- package/assets/.agent/skills/pr-to-video/scripts/fetch-people-avatars.mjs +157 -0
- package/assets/.agent/skills/pr-to-video/scripts/fetch-pr.mjs +164 -0
- package/assets/.agent/skills/pr-to-video/scripts/ingest.mjs +539 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/assets.mjs +55 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/dimensions.mjs +45 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/storyboard.mjs +249 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/tokens.mjs +204 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/transition-registry.mjs +38 -0
- package/assets/.agent/skills/pr-to-video/scripts/lib/transitions.json +71 -0
- package/assets/.agent/skills/pr-to-video/scripts/transitions.mjs +320 -0
- package/assets/.agent/skills/pr-to-video/sub-agents/frame-worker.md +95 -0
- package/assets/.agent/skills/product-launch-video/SKILL.md +208 -0
- package/assets/.agent/skills/product-launch-video/references/cut-catalog.md +220 -0
- package/assets/.agent/skills/product-launch-video/references/motion-language.md +156 -0
- package/assets/.agent/skills/product-launch-video/references/story-design.md +373 -0
- package/assets/.agent/skills/product-launch-video/references/visual-design.md +126 -0
- package/assets/.agent/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
- package/assets/.agent/skills/product-launch-video/scripts/audio.mjs +253 -0
- package/assets/.agent/skills/product-launch-video/scripts/build-frame.mjs +536 -0
- package/assets/.agent/skills/product-launch-video/scripts/captions.mjs +508 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
- package/assets/.agent/skills/product-launch-video/scripts/lib/transitions.json +71 -0
- package/assets/.agent/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
- package/assets/.agent/skills/product-launch-video/scripts/transitions.mjs +320 -0
- package/assets/.agent/skills/product-launch-video/sub-agents/frame-worker.md +75 -0
- package/assets/.agent/skills/remotion/rules/assets/charts-bar-chart.tsx +173 -173
- package/assets/.agent/skills/remotion/rules/assets/text-animations-typewriter.tsx +100 -100
- package/assets/.agent/skills/remotion/rules/text-animations.md +20 -20
- package/assets/.agent/skills/remotion/rules/videos.md +171 -171
- package/assets/.agent/skills/remotion-real-ui-video/SKILL.md +264 -0
- package/assets/.agent/skills/remotion-real-ui-video/references/anti-patterns.md +114 -0
- package/assets/.agent/skills/remotion-real-ui-video/references/completion-checklist.md +75 -0
- package/assets/.agent/skills/remotion-real-ui-video/references/real-ui-bridge-example.md +93 -0
- package/assets/.agent/skills/remotion-to-hyperframes/SKILL.md +127 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/.gitkeep +0 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/run.sh +249 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +61 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx +34 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts +4 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +118 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx +105 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts +4 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/setup.sh +34 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +269 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts +13 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx +27 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx +37 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx +23 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx +59 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx +47 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts +4 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx +18 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx +34 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx +55 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx +29 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx +29 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx +39 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx +30 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx +38 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx +36 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx +28 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx +41 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -0
- package/assets/.agent/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/validate.sh +110 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/api-map.md +142 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/eval.md +140 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/fonts.md +112 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/limitations.md +136 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/lottie.md +121 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/media.md +149 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/parameters.md +167 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/sequencing.md +195 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/timing.md +165 -0
- package/assets/.agent/skills/remotion-to-hyperframes/references/transitions.md +114 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/.gitkeep +0 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/frame_strip.sh +107 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/lint_source.py +358 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/render_diff.sh +103 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx +50 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx +46 -0
- package/assets/.agent/skills/remotion-to-hyperframes/scripts/tests/smoke.sh +90 -0
- package/assets/.agent/skills/slideshow/SKILL.md +550 -0
- package/assets/.agent/skills/slideshow/references/standalone-harness.md +1020 -0
- package/assets/.agent/skills/takomi-flow/SKILL.md +244 -244
- package/assets/.agent/skills/talking-head-recut/NOTICE.md +39 -0
- package/assets/.agent/skills/talking-head-recut/SKILL.md +1191 -0
- package/assets/.agent/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
- package/assets/.agent/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
- package/assets/.agent/skills/talking-head-recut/references/frames/clean.html +92 -0
- package/assets/.agent/skills/talking-head-recut/references/frames/hairline.html +171 -0
- package/assets/.agent/skills/talking-head-recut/references/frames/polaroid.html +131 -0
- package/assets/.agent/skills/talking-head-recut/references/layouts/overlay.html +164 -0
- package/assets/.agent/skills/talking-head-recut/references/layouts/pip.html +143 -0
- package/assets/.agent/skills/talking-head-recut/references/layouts/split.html +121 -0
- package/assets/.agent/skills/talking-head-recut/references/layouts/stack.html +109 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/academic.html +172 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/audit.html +170 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/editorial.html +189 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/geom.html +181 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/minimal.html +130 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/spotlight.html +142 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/swiss.html +188 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/terminal.html +196 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
- package/assets/.agent/skills/talking-head-recut/references/styles/xhs.html +206 -0
- package/assets/.agent/skills/website-to-video/SKILL.md +145 -0
- package/assets/.agent/skills/website-to-video/assets/sfx/CREDITS.md +35 -0
- package/assets/.agent/skills/website-to-video/assets/sfx/manifest.json +97 -0
- package/assets/.agent/skills/website-to-video/references/beat-builder-guide.md +263 -0
- package/assets/.agent/skills/website-to-video/references/capabilities.md +713 -0
- package/assets/.agent/skills/website-to-video/references/step-0-capture.md +55 -0
- package/assets/.agent/skills/website-to-video/references/step-1-design.md +333 -0
- package/assets/.agent/skills/website-to-video/references/step-2-brief.md +178 -0
- package/assets/.agent/skills/website-to-video/references/step-3-storyboard.md +572 -0
- package/assets/.agent/skills/website-to-video/references/step-4-vo.md +230 -0
- package/assets/.agent/skills/website-to-video/references/step-5-build.md +483 -0
- package/assets/.agent/skills/website-to-video/references/step-6-validate.md +341 -0
- package/assets/.agent/skills/website-to-video/scripts/w2h-verify.mjs +759 -0
- package/docs/features/TakomiFlow_Portable_Plugin.md +82 -82
- package/docs/takomi-flow-onboarding.md +86 -86
- package/docs/takomi-flow-public-distribution.md +94 -94
- package/package.json +1 -1
- package/plugins/takomi-flow/.mcp.json +11 -11
- package/plugins/takomi-flow/assets/capabilities.json +203 -203
- package/plugins/takomi-flow/assets/collection.schema.json +29 -29
- package/plugins/takomi-flow/assets/examples.json +94 -94
- package/plugins/takomi-flow/assets/request.schema.json +91 -91
- package/plugins/takomi-flow/assets/result.schema.json +46 -46
- package/plugins/takomi-flow/assets/templates/image-request.json +17 -17
- package/plugins/takomi-flow/assets/templates/video-request.json +19 -19
- package/plugins/takomi-flow/package.json +38 -38
- package/plugins/takomi-flow/pnpm-lock.yaml +813 -813
- package/plugins/takomi-flow/references/flow-provider-contract.md +349 -349
- package/plugins/takomi-flow/scripts/lib/agent-plan.mjs +140 -140
- package/plugins/takomi-flow/scripts/lib/api.mjs +113 -113
- package/plugins/takomi-flow/scripts/lib/args.mjs +66 -66
- package/plugins/takomi-flow/scripts/lib/audit.mjs +65 -65
- package/plugins/takomi-flow/scripts/lib/browser.mjs +78 -78
- package/plugins/takomi-flow/scripts/lib/capabilities.mjs +11 -11
- package/plugins/takomi-flow/scripts/lib/collect.mjs +53 -53
- package/plugins/takomi-flow/scripts/lib/commands.mjs +192 -192
- package/plugins/takomi-flow/scripts/lib/doctor.mjs +77 -77
- package/plugins/takomi-flow/scripts/lib/examples.mjs +17 -17
- package/plugins/takomi-flow/scripts/lib/flow-media.mjs +39 -39
- package/plugins/takomi-flow/scripts/lib/flow-outcome.mjs +115 -115
- package/plugins/takomi-flow/scripts/lib/flow-project-session.mjs +153 -153
- package/plugins/takomi-flow/scripts/lib/flow-ui.mjs +204 -204
- package/plugins/takomi-flow/scripts/lib/generation.mjs +190 -190
- package/plugins/takomi-flow/scripts/lib/inspect.mjs +81 -81
- package/plugins/takomi-flow/scripts/lib/mcp-prompts.mjs +39 -39
- package/plugins/takomi-flow/scripts/lib/mcp-resources.mjs +16 -16
- package/plugins/takomi-flow/scripts/lib/mcp-tools.mjs +165 -165
- package/plugins/takomi-flow/scripts/lib/media.mjs +78 -78
- package/plugins/takomi-flow/scripts/lib/observe.mjs +54 -54
- package/plugins/takomi-flow/scripts/lib/paths.mjs +37 -37
- package/plugins/takomi-flow/scripts/lib/playwright-loader.mjs +23 -23
- package/plugins/takomi-flow/scripts/lib/prompts.mjs +72 -72
- package/plugins/takomi-flow/scripts/lib/report.mjs +141 -141
- package/plugins/takomi-flow/scripts/lib/request-validator.mjs +73 -73
- package/plugins/takomi-flow/scripts/lib/request.mjs +66 -66
- package/plugins/takomi-flow/scripts/lib/resource-files.mjs +69 -69
- package/plugins/takomi-flow/scripts/lib/result.mjs +31 -31
- package/plugins/takomi-flow/scripts/lib/review.mjs +44 -44
- package/plugins/takomi-flow/scripts/lib/selftest.mjs +153 -153
- package/plugins/takomi-flow/scripts/lib/settings-plan.mjs +44 -44
- package/plugins/takomi-flow/scripts/lib/templates.mjs +37 -37
- package/plugins/takomi-flow/scripts/lib/trusted-chrome.mjs +67 -67
- package/plugins/takomi-flow/scripts/lib/workflow.mjs +56 -56
- package/plugins/takomi-flow/scripts/mcp-server.mjs +18 -18
- package/plugins/takomi-flow/scripts/mcp-smoke.mjs +144 -144
- package/plugins/takomi-flow/scripts/takomi-flow.mjs +17 -17
- package/plugins/takomi-flow/skills/takomi-flow/SKILL.md +244 -244
- package/plugins/takomi-flow/skills/takomi-flow/agents/openai.yaml +7 -7
- package/scripts/install-takomi-flow.ps1 +85 -85
- package/src/skills-catalog.js +42 -9
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sine-wave-loop
|
|
3
|
+
description: Bounded sine-driven idle — subtle jitter or a single genuinely-needed bounded ambient breath on a held element. De-emphasized: circular breathing as "aliveness" is cheap; prefer sequential reveal timed to the VO, then subtle jitter, before reaching here.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: idle, jitter, bounded-ambient, sine, trigonometry, low-amplitude, post-entry
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Sine Wave Loop (subtle jitter / bounded ambient)
|
|
9
|
+
|
|
10
|
+
> **Reach for this last.** Per the motion doctrine (`references/motion-language.md`): **circular breathing — scaling text/cards up and down to look "alive" — is cheap, the agent's reflexive cheat, and reads weak.** "I'd rather have NO motion than BAD motion." Before using this rule to keep a held frame alive, prefer (1) **sequential reveal timed to the voiceover** — reveal the next line/element when the VO says it, across the back ~50% of the scene; that, not ambient motion, is what fills a shot. If a frame has genuinely settled and still needs a touch of life, the **sanctioned move is subtle jitter** — a small, low-amplitude jitter (this rule, at the LOW end of its amplitude range). A full breathing loop is reserved for the rare case where a single held hero genuinely needs bounded ambient; keep it de-emphasized and small.
|
|
11
|
+
|
|
12
|
+
Keeps a settled element from feeling dead — as **subtle jitter** or, rarely, a single bounded ambient breath — using `Math.sin` driven by a finite timeline tween. This is the implementation behind the "subtle jitter" move in the motion vocabulary; it is **not** a license to breathe every hero.
|
|
13
|
+
|
|
14
|
+
## How It Works
|
|
15
|
+
|
|
16
|
+
A long tween advances a `phase` value from 0 → 2π (or 0 → some multiple thereof). On every onUpdate, the phase feeds into `Math.sin()` to produce a small periodic offset added to the element's transform (`scale`, `translateY`, `rotate`).
|
|
17
|
+
|
|
18
|
+
The trick to a "no jump" transition from entry to idle: at `phase = 0`, `sin(0) = 0` — the offset is zero, so the element starts at its post-entry resting state.
|
|
19
|
+
|
|
20
|
+
## HTML
|
|
21
|
+
|
|
22
|
+
```html
|
|
23
|
+
<div
|
|
24
|
+
class="scene"
|
|
25
|
+
id="idle-scene"
|
|
26
|
+
data-composition-id="idle-scene"
|
|
27
|
+
data-start="0"
|
|
28
|
+
data-duration="6"
|
|
29
|
+
data-track-index="0"
|
|
30
|
+
>
|
|
31
|
+
<div class="stack">
|
|
32
|
+
<div class="hero" id="hero">{HeroLabel}</div>
|
|
33
|
+
<div class="dot" id="dot"></div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## CSS
|
|
39
|
+
|
|
40
|
+
```css
|
|
41
|
+
.scene {
|
|
42
|
+
position: relative;
|
|
43
|
+
width: 100%;
|
|
44
|
+
height: 100%;
|
|
45
|
+
display: grid;
|
|
46
|
+
place-items: center;
|
|
47
|
+
background: {bgGradient};
|
|
48
|
+
}
|
|
49
|
+
.stack {
|
|
50
|
+
display: flex;
|
|
51
|
+
flex-direction: column;
|
|
52
|
+
align-items: center;
|
|
53
|
+
gap: STACK_GAP;
|
|
54
|
+
}
|
|
55
|
+
.hero {
|
|
56
|
+
font-family: {font};
|
|
57
|
+
font-weight: 900;
|
|
58
|
+
font-size: HERO_FONT_SIZE;
|
|
59
|
+
letter-spacing: HERO_LETTER_SPACING;
|
|
60
|
+
color: {textColor};
|
|
61
|
+
text-transform: uppercase;
|
|
62
|
+
/* Element gets its post-entry resting transform; idle only ADDS to it */
|
|
63
|
+
will-change: transform;
|
|
64
|
+
}
|
|
65
|
+
.dot {
|
|
66
|
+
width: DOT_SIZE;
|
|
67
|
+
height: DOT_SIZE;
|
|
68
|
+
border-radius: 50%;
|
|
69
|
+
background: {accentColor};
|
|
70
|
+
box-shadow: {accentGlow};
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## GSAP Timeline
|
|
75
|
+
|
|
76
|
+
```html
|
|
77
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
78
|
+
<script>
|
|
79
|
+
window.__timelines = window.__timelines || {};
|
|
80
|
+
const tl = gsap.timeline({ paused: true });
|
|
81
|
+
|
|
82
|
+
const hero = document.getElementById("hero");
|
|
83
|
+
const dot = document.getElementById("dot");
|
|
84
|
+
|
|
85
|
+
// Phase 1 — entry beat (e.g. headline fade-up)
|
|
86
|
+
tl.fromTo(
|
|
87
|
+
hero,
|
|
88
|
+
{ opacity: 0, y: ENTRY_Y, scale: ENTRY_SCALE },
|
|
89
|
+
{ opacity: 1, y: 0, scale: 1, duration: ENTRY_DUR, ease: "power3.out" },
|
|
90
|
+
0,
|
|
91
|
+
);
|
|
92
|
+
tl.fromTo(
|
|
93
|
+
dot,
|
|
94
|
+
{ opacity: 0, scale: 0 },
|
|
95
|
+
{ opacity: 1, scale: 1, duration: DOT_ENTRY_DUR, ease: `back.out(${BOUNCE_FACTOR})` },
|
|
96
|
+
DOT_ENTRY_START,
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
// Phase 2 — idle breathing. Starts at IDLE_START_TIME AFTER entry settles.
|
|
100
|
+
// Drive a phase 0 → 2π * CYCLES via a single tween, write sin() into transforms.
|
|
101
|
+
|
|
102
|
+
const phase = { p: 0 };
|
|
103
|
+
tl.to(
|
|
104
|
+
phase,
|
|
105
|
+
{
|
|
106
|
+
p: Math.PI * 2 * CYCLES,
|
|
107
|
+
duration: IDLE_DUR,
|
|
108
|
+
ease: "none",
|
|
109
|
+
onUpdate: () => {
|
|
110
|
+
// Hero: scale breathes ±SCALE_AMP, y bobs ±Y_AMP_PX
|
|
111
|
+
const scale = 1 + Math.sin(phase.p) * SCALE_AMP;
|
|
112
|
+
const y = Math.sin(phase.p) * Y_AMP_PX;
|
|
113
|
+
hero.style.transform = `translateY(${y}px) scale(${scale})`;
|
|
114
|
+
|
|
115
|
+
// Dot: out-of-phase scale (offset by π/2) — feels alive vs synced
|
|
116
|
+
const dotScale = 1 + Math.sin(phase.p + Math.PI / 2) * DOT_SCALE_AMP;
|
|
117
|
+
dot.style.transform = `scale(${dotScale})`;
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
IDLE_START_TIME,
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
window.__timelines["idle-scene"] = tl;
|
|
124
|
+
</script>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Variations
|
|
128
|
+
|
|
129
|
+
### Multiple offset frequencies (organic multi-octave breathing)
|
|
130
|
+
|
|
131
|
+
Combining frequencies feels more alive than pure sine:
|
|
132
|
+
|
|
133
|
+
```js
|
|
134
|
+
const primary = Math.sin(phase.p) * SCALE_AMP_PRIMARY;
|
|
135
|
+
const secondary = Math.sin(phase.p * OCTAVE_RATIO) * SCALE_AMP_SECONDARY; // higher-frequency overlay
|
|
136
|
+
const scale = 1 + primary + secondary;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Conditional activation (only after entry settles)
|
|
140
|
+
|
|
141
|
+
If entry is interactive or skippable, gate the idle:
|
|
142
|
+
|
|
143
|
+
```js
|
|
144
|
+
const idleActive = entryProgress >= GATE_THRESHOLD;
|
|
145
|
+
const scale = idleActive ? 1 + Math.sin((time - IDLE_START_TIME) / PERIOD) * SCALE_AMP : 1;
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Settle and fade (long-idle gate — strongly recommended when `IDLE_DUR > 6s`)
|
|
149
|
+
|
|
150
|
+
Drive amplitude through an envelope that fades to zero over the last ~20% of idle, so the scene visibly settles before the inter-scene transition lands:
|
|
151
|
+
|
|
152
|
+
```js
|
|
153
|
+
const phase = { p: 0 };
|
|
154
|
+
const FADE_FRAC = 0.2; // last 20% of idle = amplitude ramps to 0
|
|
155
|
+
tl.to(
|
|
156
|
+
phase,
|
|
157
|
+
{
|
|
158
|
+
p: Math.PI * 2 * CYCLES,
|
|
159
|
+
duration: IDLE_DUR,
|
|
160
|
+
ease: "none",
|
|
161
|
+
onUpdate: () => {
|
|
162
|
+
const t = phase.p / (Math.PI * 2 * CYCLES); // 0 → 1 across idle
|
|
163
|
+
const env = t < 1 - FADE_FRAC ? 1 : (1 - t) / FADE_FRAC; // 1 → 0 in tail
|
|
164
|
+
const scale = 1 + Math.sin(phase.p) * SCALE_AMP * env;
|
|
165
|
+
const y = Math.sin(phase.p) * Y_AMP_PX * env;
|
|
166
|
+
hero.style.transform = `translateY(${y}px) scale(${scale})`;
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
IDLE_START_TIME,
|
|
170
|
+
);
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The element is in motion for the first 80% of idle, then comes to rest in the last 20%. Pairs naturally with break-boundary Tier-B transitions (the outgoing visual is static when the crossfade/push begins).
|
|
174
|
+
|
|
175
|
+
### Period vs cycle math
|
|
176
|
+
|
|
177
|
+
For an exact cycle of N seconds:
|
|
178
|
+
|
|
179
|
+
```js
|
|
180
|
+
const divisor = (idleDurationSec * fps) / (Math.PI * 2);
|
|
181
|
+
const value = Math.sin(frame / divisor) * amplitude;
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
For HF (`onUpdate` doesn't expose frame directly), use the tween's `phase` value: drive `p: Math.PI * 2 * cyclesWanted` over `duration: idleDurationSec`.
|
|
185
|
+
|
|
186
|
+
## How to Choose Values
|
|
187
|
+
|
|
188
|
+
### Layout / typography
|
|
189
|
+
|
|
190
|
+
- **STACK_GAP** — vertical gap between hero and dot.
|
|
191
|
+
- Range: 0.2-0.4× `HERO_FONT_SIZE`
|
|
192
|
+
- **HERO_FONT_SIZE / HERO_LETTER_SPACING** — typographic emphasis.
|
|
193
|
+
- Range: 100-240 px for full-bleed compositions; spacing 0.04-0.06em
|
|
194
|
+
- **DOT_SIZE** — accent indicator size.
|
|
195
|
+
- Range: ~0.15-0.25× `HERO_FONT_SIZE` so the dot reads as accent, not a peer
|
|
196
|
+
- **{accentGlow}** — `box-shadow` halo on the dot; typically `0 0 (DOT_SIZE) rgba(accentColor, 0.5-0.7)`
|
|
197
|
+
|
|
198
|
+
### Entry phase
|
|
199
|
+
|
|
200
|
+
- **ENTRY_Y / ENTRY_SCALE** — initial state before fade-up.
|
|
201
|
+
- Range: `ENTRY_Y` 16-32 px (subtle rise), `ENTRY_SCALE` 0.94-0.98 (subtle inflation)
|
|
202
|
+
- **ENTRY_DUR** — hero fade-up duration.
|
|
203
|
+
- Range: 0.6-1.2s; bigger heroes want a longer settle
|
|
204
|
+
- **DOT_ENTRY_START** — when the dot pops in relative to hero.
|
|
205
|
+
- Constraints: typically `≈ 0.4-0.6× ENTRY_DUR` so the dot lands while the hero is still settling, not after
|
|
206
|
+
- **DOT_ENTRY_DUR** — dot back-out pop duration.
|
|
207
|
+
- Range: 0.4-0.7s
|
|
208
|
+
- **BOUNCE_FACTOR** — `back.out(BOUNCE_FACTOR)` overshoot strength on the dot pop.
|
|
209
|
+
- Range: 1.4 (soft) → 2.0 (firm) → 2.8 (cartoony)
|
|
210
|
+
|
|
211
|
+
### Idle phase
|
|
212
|
+
|
|
213
|
+
- **IDLE_START_TIME** — when breathing begins.
|
|
214
|
+
- Constraints: `≥ ENTRY_DUR + small buffer (~0.1s)` so the breath doesn't fight the entry tail. `sin(0) = 0` at this moment, so the offset is exactly the entry's resting state — no jump
|
|
215
|
+
- **IDLE_DUR** — breath tween length.
|
|
216
|
+
- Constraints: must equal `TOTAL_DURATION − IDLE_START_TIME` to fill the composition with motion
|
|
217
|
+
- **CYCLES** — number of full breath cycles across `IDLE_DUR`.
|
|
218
|
+
- Range: `IDLE_DUR / 3s ≤ CYCLES ≤ IDLE_DUR / 1.5s` (cycle period 1.5-3s reads as natural breathing)
|
|
219
|
+
- **SCALE_AMP** — sine amplitude on scale (hero).
|
|
220
|
+
- **Default: 0.008-0.015** (barely-perceptible breath — the right answer for most scenes)
|
|
221
|
+
- Push to 0.02-0.04 only when the element is **alone on canvas**, the scene is **short (< 6s)**, or the brief explicitly calls for **kinetic / playful** register
|
|
222
|
+
- See Key Principles for the long-idle / concurrent-element scaling rules
|
|
223
|
+
- **Y_AMP_PX** — sine amplitude on y translation (hero).
|
|
224
|
+
- **Default: 2-3 px** (barely-perceptible — the right answer for most scenes)
|
|
225
|
+
- Push to 4-6 px only when isolated / short / kinetic — same gating as `SCALE_AMP`
|
|
226
|
+
- **DOT_SCALE_AMP** — sine amplitude on dot scale (offset by π/2 for out-of-phase motion).
|
|
227
|
+
- Range: 0.04-0.12 — larger than hero amplitude is fine because the dot is a small accent
|
|
228
|
+
- **PERIOD** (conditional-activation variation) — seconds per cycle when using the `(time - IDLE_START_TIME) / PERIOD` form.
|
|
229
|
+
- Range: 1.5-3s
|
|
230
|
+
- **GATE_THRESHOLD** (conditional-activation variation) — entryProgress required to start idle.
|
|
231
|
+
- Range: 0.85-1.0; lower gates start idle slightly before entry completes for an overlap
|
|
232
|
+
|
|
233
|
+
### Multi-octave variation
|
|
234
|
+
|
|
235
|
+
- **SCALE_AMP_PRIMARY / SCALE_AMP_SECONDARY** — amplitudes of the two stacked sines.
|
|
236
|
+
- Constraints: `SCALE_AMP_PRIMARY > SCALE_AMP_SECONDARY` (secondary is a higher-frequency overlay, not a peer); combined max amplitude should stay within the SCALE_AMP range above
|
|
237
|
+
- **OCTAVE_RATIO** — frequency multiplier of secondary relative to primary.
|
|
238
|
+
- Range: 2.0-4.0 (whole-number-ish ratios feel musical/coherent; non-integer ratios feel organic/unpredictable)
|
|
239
|
+
|
|
240
|
+
### Color tokens
|
|
241
|
+
|
|
242
|
+
- **{bgGradient}** — typically a dark radial gradient so the lit hero pops
|
|
243
|
+
- **{textColor}** — high-contrast against `{bgGradient}`
|
|
244
|
+
- **{accentColor}** — single accent reserved for the dot; the glow color in `{accentGlow}` is the same hue
|
|
245
|
+
|
|
246
|
+
## Key Principles
|
|
247
|
+
|
|
248
|
+
- **Prefer reveal, then jitter, then breath** — circular breathing as "aliveness" is cheap and reads weak; "no motion over bad motion." First fill the back of a shot with **sequential reveal timed to the VO**; if it's genuinely settled and still feels dead, use this rule at the **LOW end of its amplitude range as subtle jitter**; a full breathing loop is the rare last resort on a single held hero, never stamped on every element.
|
|
249
|
+
- **`sin(0) = 0`** — at the moment idle begins, the offset must be zero so there's no visible jump from the entry's settled state to idle. Start the phase tween at `phase = 0`.
|
|
250
|
+
- **Amplitude subtlety — default to the LOW end of the range.** Scale `0.008-0.015` (push to 0.02-0.04 only when isolated / short scene / kinetic brief), rotation `±0.3-0.8°` (rarely needed at all), translation `±2-3px` (push to 4-6px only when isolated). Bigger and idle reads as "still animating" instead of "alive but resting" — and a viewer watching 5+ consecutive scenes at the upper end will read the whole film as "shimmering."
|
|
251
|
+
- **Cycle duration: 2.5-4s per breath when idle is long, 1.5-3s otherwise** — 2.5-3s is a comfortable breathing cadence; under 1.5s feels frantic in a long-idle window; over 4s feels lifeless in a short one.
|
|
252
|
+
- **Long idle window (`IDLE_DUR > 6s` OR idle proportion > 30% of composition):** halve `SCALE_AMP` and `Y_AMP_PX`, slow `CYCLES` so each breath is 3-4s. Consider gating amplitude to fade to zero over the last ~20% of idle so the scene actually **settles before the transition**, instead of handing off mid-drift. This is the single biggest fix when finalize snapshots show "everything's still moving at the end."
|
|
253
|
+
- **Concurrent idle on N elements** (triptych columns, card grid, multi-stat row, side-by-side panels): per-element amplitude ≤ default `/ √N`. Three columns each at `±6px` visually adds to `±18px+` of competing motion; three at `±2-3px` reads as one collective breath. Stagger the **period** between elements (2.1s / 1.9s / 2.4s) for organic feel — but the **amplitude** must also be smaller, not just the period.
|
|
254
|
+
- **Different elements at different phases** — offset secondary elements by `Math.PI / 2` (90° offset) so they're not all moving in sync. Synced motion looks mechanical; out-of-phase looks alive.
|
|
255
|
+
- **Compose, don't replace** — idle motion ADDS to the element's resting transform, not replace it. If the entry settled at `translateY(0)`, idle should produce `translateY(0 + sin*4)`. Don't overwrite the entry's final translation.
|
|
256
|
+
- **❗ Don't use CSS `@keyframes` for the idle loop** — CSS animation runs on the browser's render clock, which is independent of the HF seek clock. HF seeks frame-by-frame and a CSS-driven idle will flicker/desync. Drive idle inside the GSAP timeline.
|
|
257
|
+
|
|
258
|
+
## Critical Constraints
|
|
259
|
+
|
|
260
|
+
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
261
|
+
- **Registry key = `data-composition-id`**
|
|
262
|
+
- **No CSS `animation`** for idle — must be timeline-driven
|
|
263
|
+
- **`will-change: transform`** if the idle compounds with other tweens on the same element
|
|
264
|
+
- **Phase tween `ease: 'none'`** — sine itself provides the easing; tweening the phase non-linearly produces non-sinusoidal motion
|
|
265
|
+
- **Don't restart the idle tween** — it's a single long tween from start to end of composition idle window
|
|
266
|
+
|
|
267
|
+
## Combinations
|
|
268
|
+
|
|
269
|
+
- After [press-release-spring.md](press-release-spring.md) — button idle-breathes after release settles
|
|
270
|
+
- After [counting-dynamic-scale.md](counting-dynamic-scale.md) — final number breathes
|
|
271
|
+
- After [card-morph-anchor.md](card-morph-anchor.md) — settled card idle-bobs
|
|
272
|
+
- After [orbit-3d-entry.md](orbit-3d-entry.md) — center label idle-breathes while items orbit
|
|
273
|
+
|
|
274
|
+
## Pairs with HF skills
|
|
275
|
+
|
|
276
|
+
- `/hyperframes-animation` — `onUpdate` writing transform
|
|
277
|
+
- `/hyperframes-core` — composition wiring
|
|
278
|
+
- `/hyperframes-cli` — `hyperframes lint`
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: split-tilt-cards
|
|
3
|
+
description: Two cards side-by-side with opposing Y-rotation creating a symmetric 3D split-screen layout for comparisons or feature pairs.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: 3d, cards, split, tilt, comparison, symmetric, layout
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Split Tilt Cards
|
|
9
|
+
|
|
10
|
+
Two cards positioned side-by-side, each rotated in opposite Y directions. Creates a symmetric "book-open" 3D effect — natural fit for comparisons, before/after, or feature pairs.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
- Left card rotates `+Y` (faces toward the right viewer angle)
|
|
15
|
+
- Right card rotates `-Y` (faces toward the left viewer angle)
|
|
16
|
+
- Both share the same `perspective` parent → opposing rotations balance visually
|
|
17
|
+
- Each card enters from outside (left card slides in from the left, right card from the right) to reinforce its identity
|
|
18
|
+
- Idle phase: gentle counter-phase float (`Math.PI` offset on sine) — cards bob in opposition
|
|
19
|
+
|
|
20
|
+
## HTML
|
|
21
|
+
|
|
22
|
+
```html
|
|
23
|
+
<div
|
|
24
|
+
class="scene"
|
|
25
|
+
id="split-scene"
|
|
26
|
+
data-composition-id="split-scene"
|
|
27
|
+
data-start="0"
|
|
28
|
+
data-duration="4"
|
|
29
|
+
data-track-index="0"
|
|
30
|
+
>
|
|
31
|
+
<div class="split-stage">
|
|
32
|
+
<div class="card card-left">
|
|
33
|
+
<div class="card-eyebrow">{leftEyebrow}</div>
|
|
34
|
+
<div class="card-headline">{leftHeadline}</div>
|
|
35
|
+
<div class="card-body">{leftBody}</div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="card card-right">
|
|
38
|
+
<div class="card-eyebrow">{rightEyebrow}</div>
|
|
39
|
+
<div class="card-headline">{rightHeadline}</div>
|
|
40
|
+
<div class="card-body">{rightBody}</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## CSS
|
|
47
|
+
|
|
48
|
+
```css
|
|
49
|
+
.scene {
|
|
50
|
+
position: relative;
|
|
51
|
+
width: 100%;
|
|
52
|
+
height: 100%;
|
|
53
|
+
display: grid;
|
|
54
|
+
place-items: center;
|
|
55
|
+
background: {bgGradient};
|
|
56
|
+
perspective: SCENE_PERSPECTIVE; /* REQUIRED — without perspective rotateY flattens */
|
|
57
|
+
}
|
|
58
|
+
.split-stage {
|
|
59
|
+
display: flex;
|
|
60
|
+
gap: STAGE_GAP;
|
|
61
|
+
transform-style: preserve-3d;
|
|
62
|
+
}
|
|
63
|
+
.card {
|
|
64
|
+
width: CARD_WIDTH;
|
|
65
|
+
min-height: CARD_MIN_HEIGHT;
|
|
66
|
+
padding: CARD_PADDING;
|
|
67
|
+
display: flex;
|
|
68
|
+
flex-direction: column;
|
|
69
|
+
gap: CARD_INNER_GAP;
|
|
70
|
+
border-radius: CARD_RADIUS;
|
|
71
|
+
background: {cardSurface};
|
|
72
|
+
border: 1px solid {cardBorder};
|
|
73
|
+
color: {textColor};
|
|
74
|
+
font-family: {font};
|
|
75
|
+
transform-style: preserve-3d;
|
|
76
|
+
will-change: transform;
|
|
77
|
+
}
|
|
78
|
+
.card-left {
|
|
79
|
+
/* Faces right → shadow falls right */
|
|
80
|
+
box-shadow:
|
|
81
|
+
-CARD_SHADOW_OFFSET CARD_SHADOW_DROP CARD_SHADOW_BLUR {shadowColor},
|
|
82
|
+
0 0 CARD_GLOW_BLUR {accentGlowColor};
|
|
83
|
+
}
|
|
84
|
+
.card-right {
|
|
85
|
+
/* Faces left → shadow falls left */
|
|
86
|
+
box-shadow:
|
|
87
|
+
CARD_SHADOW_OFFSET CARD_SHADOW_DROP CARD_SHADOW_BLUR {shadowColor},
|
|
88
|
+
0 0 CARD_GLOW_BLUR {accentGlowColor};
|
|
89
|
+
}
|
|
90
|
+
.card-eyebrow {
|
|
91
|
+
font-size: EYEBROW_FONT_SIZE;
|
|
92
|
+
font-weight: 800;
|
|
93
|
+
letter-spacing: EYEBROW_LETTER_SPACING;
|
|
94
|
+
text-transform: uppercase;
|
|
95
|
+
color: {accentColor};
|
|
96
|
+
}
|
|
97
|
+
.card-headline {
|
|
98
|
+
font-size: HEADLINE_FONT_SIZE;
|
|
99
|
+
font-weight: 900;
|
|
100
|
+
line-height: 1;
|
|
101
|
+
letter-spacing: HEADLINE_LETTER_SPACING;
|
|
102
|
+
}
|
|
103
|
+
.card-body {
|
|
104
|
+
font-size: BODY_FONT_SIZE;
|
|
105
|
+
font-weight: 500;
|
|
106
|
+
line-height: 1.3;
|
|
107
|
+
color: {bodyColor};
|
|
108
|
+
opacity: BODY_OPACITY;
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## GSAP Timeline
|
|
113
|
+
|
|
114
|
+
```html
|
|
115
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
116
|
+
<script>
|
|
117
|
+
window.__timelines = window.__timelines || {};
|
|
118
|
+
const tl = gsap.timeline({ paused: true });
|
|
119
|
+
|
|
120
|
+
// Phase 1 — entry from outside
|
|
121
|
+
tl.fromTo(
|
|
122
|
+
".card-left",
|
|
123
|
+
{ x: -ENTRY_SLIDE_DIST, rotateY: TILT + TILT_OVERSHOOT, opacity: 0 },
|
|
124
|
+
{ x: 0, rotateY: TILT, opacity: 1, duration: ENTRY_DUR, ease: "power3.out" },
|
|
125
|
+
LEFT_AT,
|
|
126
|
+
);
|
|
127
|
+
tl.fromTo(
|
|
128
|
+
".card-right",
|
|
129
|
+
{ x: ENTRY_SLIDE_DIST, rotateY: -TILT - TILT_OVERSHOOT, opacity: 0 },
|
|
130
|
+
{ x: 0, rotateY: -TILT, opacity: 1, duration: ENTRY_DUR, ease: "power3.out" },
|
|
131
|
+
RIGHT_AT,
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
// Phase 2 — counter-phase idle bob (cards move in opposition for dynamism)
|
|
135
|
+
tl.to(
|
|
136
|
+
".card-left",
|
|
137
|
+
{ y: -FLOAT_AMP, duration: FLOAT_DURATION / 2, ease: "sine.inOut", yoyo: true, repeat: 1 },
|
|
138
|
+
IDLE_START,
|
|
139
|
+
);
|
|
140
|
+
tl.to(
|
|
141
|
+
".card-right",
|
|
142
|
+
{ y: FLOAT_AMP, duration: FLOAT_DURATION / 2, ease: "sine.inOut", yoyo: true, repeat: 1 },
|
|
143
|
+
IDLE_START,
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
// Phase 3 — gentle copy reveal (body slides up + fades after cards arrive)
|
|
147
|
+
tl.from(
|
|
148
|
+
".card-eyebrow, .card-headline, .card-body",
|
|
149
|
+
{ opacity: 0, y: COPY_RISE, stagger: COPY_STAGGER, duration: COPY_DUR, ease: "power2.out" },
|
|
150
|
+
COPY_REVEAL_AT,
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
window.__timelines["split-scene"] = tl;
|
|
154
|
+
</script>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## How to Choose Values
|
|
158
|
+
|
|
159
|
+
### Layout / typography
|
|
160
|
+
|
|
161
|
+
- **SCENE_PERSPECTIVE** — perspective on the scene root.
|
|
162
|
+
- Range: 1000-2400 px
|
|
163
|
+
- Effects: lower exaggerates the tilt (more cone-like); higher reads as a near-isometric, flatter rotation
|
|
164
|
+
- **STAGE_GAP** — horizontal gap between the two cards.
|
|
165
|
+
- Range: 40-120 px (≈0.06-0.15× `CARD_WIDTH`)
|
|
166
|
+
- Effects: small gap reads "fused pair"; large gap reads "compared but separate"
|
|
167
|
+
- **CARD_WIDTH** — width of each card.
|
|
168
|
+
- Range: 480-820 px at 1920×1080
|
|
169
|
+
- Constraints: `2 * CARD_WIDTH + STAGE_GAP ≤ 0.95 * stageWidth` so both cards stay on-screen at full tilt
|
|
170
|
+
- **CARD_MIN_HEIGHT** — minimum card height.
|
|
171
|
+
- Range: ≈0.75-1.05× `CARD_WIDTH` (square-ish reads as balanced; very tall reads as poster)
|
|
172
|
+
- **CARD_PADDING / CARD_INNER_GAP / CARD_RADIUS** — interior chrome.
|
|
173
|
+
- Range: padding 40-72 px; inner gap 24-48 px; radius 24-40 px
|
|
174
|
+
- **CARD_SHADOW_OFFSET / CARD_SHADOW_DROP / CARD_SHADOW_BLUR** — drop-shadow geometry.
|
|
175
|
+
- Constraints: offset's sign matches tilt direction (see Key Principles); drop > 0 grounds the card on the scene
|
|
176
|
+
- Range: offset 16-28 px; drop 20-32 px; blur 40-80 px
|
|
177
|
+
- **CARD_GLOW_BLUR** — secondary inner glow blur radius (`box-shadow` 0 0 blur).
|
|
178
|
+
- Range: 16-32 px (subtle accent rim; larger competes with the card content)
|
|
179
|
+
- **EYEBROW_FONT_SIZE / EYEBROW_LETTER_SPACING** — small uppercase label.
|
|
180
|
+
- Range: 22-32 px; spacing 6-12 px (uppercase reads cleaner with positive letter-spacing)
|
|
181
|
+
- **HEADLINE_FONT_SIZE / HEADLINE_LETTER_SPACING** — the main one-line punch.
|
|
182
|
+
- Range: 72-104 px at 1920×1080; spacing -1 to -3 px (tight tracking for display weight)
|
|
183
|
+
- **BODY_FONT_SIZE / BODY_OPACITY** — supporting copy.
|
|
184
|
+
- Range: 28-40 px; opacity 0.8-0.92
|
|
185
|
+
- Constraints: body limited to ≤2 lines (see Critical Constraints — tilted long paragraphs blur)
|
|
186
|
+
|
|
187
|
+
### Entry / tilt
|
|
188
|
+
|
|
189
|
+
- **TILT** — static `rotateY` magnitude in degrees (left `+`, right `−`).
|
|
190
|
+
- Range: 10-18° (under 10 reads almost flat; over 18 the cards fold shut and body copy becomes hard to read)
|
|
191
|
+
- **TILT_OVERSHOOT** — extra degrees added to the starting `rotateY` before settling to `TILT`.
|
|
192
|
+
- Range: 4-12°
|
|
193
|
+
- Effects: gives the entry a slight pivot-into-place feel
|
|
194
|
+
- **ENTRY_SLIDE_DIST** — pixels each card slides from off-axis.
|
|
195
|
+
- Range: 200-500 px (≈0.3-0.6× `CARD_WIDTH`)
|
|
196
|
+
- **ENTRY_DUR** — per-card slide-in duration.
|
|
197
|
+
- Range: 0.6-1.2 s
|
|
198
|
+
- **LEFT_AT** — left card entry start.
|
|
199
|
+
- Range: 0.0-0.4 s
|
|
200
|
+
- **RIGHT_AT** — right card entry start.
|
|
201
|
+
- Range: `LEFT_AT + 0.0` to `LEFT_AT + 0.3` s (zero stagger feels mechanical; large stagger fragments the pair)
|
|
202
|
+
|
|
203
|
+
### Idle bob
|
|
204
|
+
|
|
205
|
+
- **FLOAT_AMP** — sine amplitude on idle y bob (px).
|
|
206
|
+
- Range: 3-8 px (see sine-wave-loop rule — subtle is the point)
|
|
207
|
+
- **FLOAT_DURATION** — full yoyo round-trip duration (one breath).
|
|
208
|
+
- Range: 1.6-3.2 s (≈breathing cadence)
|
|
209
|
+
- **IDLE_START** — when idle bob begins.
|
|
210
|
+
- Constraints: `≥ max(LEFT_AT, RIGHT_AT) + ENTRY_DUR` so idle doesn't fight the entry tail
|
|
211
|
+
|
|
212
|
+
### Copy reveal
|
|
213
|
+
|
|
214
|
+
- **COPY_REVEAL_AT** — when eyebrow/headline/body fade in.
|
|
215
|
+
- Constraints: usually starts during the cards' settle (overlaps the entry tail) — content shouldn't pop in after the cards are already idle
|
|
216
|
+
- **COPY_DUR / COPY_STAGGER / COPY_RISE** — fade-up shape.
|
|
217
|
+
- Range: duration 0.4-0.7 s; stagger 0.04-0.10 s; rise 12-24 px
|
|
218
|
+
|
|
219
|
+
### Color / typography tokens
|
|
220
|
+
|
|
221
|
+
- **{bgGradient}** — radial or linear gradient behind the cards; darker than `{cardSurface}` so cards lift
|
|
222
|
+
- **{cardSurface}** — card background (typically a low-saturation gradient layered over the scene)
|
|
223
|
+
- **{cardBorder}** — 1 px border color, usually `{accentColor}` at low alpha
|
|
224
|
+
- **{shadowColor}** — drop-shadow color, typically near-black at 0.5-0.7 alpha
|
|
225
|
+
- **{accentGlowColor}** — inner glow color, typically `{accentColor}` at low alpha
|
|
226
|
+
- **{accentColor}** — eyebrow + accent rim color (single hue per scene)
|
|
227
|
+
- **{textColor}** — primary headline color, high contrast against `{cardSurface}`
|
|
228
|
+
- **{bodyColor}** — body copy color, slightly desaturated vs `{textColor}`
|
|
229
|
+
- **{font}** — display font stack for all card copy
|
|
230
|
+
|
|
231
|
+
## Variations
|
|
232
|
+
|
|
233
|
+
### Mid-tilt zoom-through (combined with camera move)
|
|
234
|
+
|
|
235
|
+
If a separate camera tween scales `.split-stage`, the cards' tilt reads as the viewer crossing through the gap between them.
|
|
236
|
+
|
|
237
|
+
### Asymmetric content density (badge / label / icon)
|
|
238
|
+
|
|
239
|
+
Add a floating badge near each card for additional context. Position absolutely on the parent — not inside the card, so the badge doesn't inherit the 3D rotation:
|
|
240
|
+
|
|
241
|
+
```html
|
|
242
|
+
<div class="badge badge-left">{leftBadge}</div>
|
|
243
|
+
<div class="badge badge-right">{rightBadge}</div>
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Stacked variants (3+ cards)
|
|
247
|
+
|
|
248
|
+
For 3 cards, the center card stays flat (`rotateY 0`) and the outer two tilt inward — useful for "your old way / nothing in between / our way" comparisons.
|
|
249
|
+
|
|
250
|
+
## Key Principles
|
|
251
|
+
|
|
252
|
+
- **`perspective` on scene root REQUIRED** — without it rotateY flattens and the split-tilt collapses to a flat side-by-side layout
|
|
253
|
+
- **`transform-style: preserve-3d`** on both the stage and each card — preserves the 3D plane as cards have their own transforms
|
|
254
|
+
- **Shadow direction must match tilt** — left card faces right, shadow falls right (positive X), and vice versa. Wrong shadow direction reads as "broken 3D"
|
|
255
|
+
- **Symmetric content weight** — both cards same width, same vertical center, similar line counts. Asymmetric content breaks the comparison metaphor
|
|
256
|
+
- **Counter-phase float (`Math.PI` offset)** — left bobs up while right bobs down. Synchronized bob looks like both cards are on the same conveyor belt; counter-phase looks alive
|
|
257
|
+
- **Slide-in from the outside** — left card from left, right card from right — reinforces "they came from their own worlds and met here"
|
|
258
|
+
- **❗ Tilt magnitude 10-15°** — under 10° looks like a slight perspective offset (almost flat), over 18° looks like the cards are folding shut and copy becomes hard to read
|
|
259
|
+
|
|
260
|
+
## Critical Constraints
|
|
261
|
+
|
|
262
|
+
- **Timeline must be paused**: `gsap.timeline({ paused: true })`
|
|
263
|
+
- **Registry key = `data-composition-id`**
|
|
264
|
+
- **No `requestAnimationFrame`** for the idle float — drive it inside the timeline so seek is deterministic
|
|
265
|
+
- **Don't put badges inside the card divs** — they'd inherit the rotateY and tilt off-axis with the card. Float them on the parent
|
|
266
|
+
- **Body copy ≤ 2 lines per card** — tilted text becomes hard to read; long paragraphs collapse into a perspective blur
|
|
267
|
+
|
|
268
|
+
## Combinations
|
|
269
|
+
|
|
270
|
+
- [card-morph-anchor.md](card-morph-anchor.md) — both cards could morph into a single unified shape afterward
|
|
271
|
+
- [counting-dynamic-scale.md](counting-dynamic-scale.md) — numbers as the headline content for each side
|
|
272
|
+
|
|
273
|
+
## Pairs with HF skills
|
|
274
|
+
|
|
275
|
+
- `/hyperframes-animation` — timeline + `yoyo` for the idle bob
|
|
276
|
+
- `/hyperframes-core` — composition wiring
|
|
277
|
+
- `/hyperframes-cli` — `hyperframes lint`
|