freecodego 0.1.7-alpha.2.2 → 0.1.7-rc.2.2
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/README.i18n.yaml +45 -5
- package/README.md +4 -4
- package/README.zh.md +4 -4
- package/cordis.patch.yml +230 -126
- package/dist/assets/design/craft/FUTURE_SECTIONS.md +9 -0
- package/dist/assets/design/craft/LICENSE +201 -0
- package/dist/assets/design/craft/PROVENANCE.md +77 -0
- package/dist/assets/design/craft/README.md +106 -0
- package/dist/assets/design/craft/accessibility-baseline.md +201 -0
- package/dist/assets/design/craft/animation-discipline.md +154 -0
- package/dist/assets/design/craft/anti-ai-slop.md +84 -0
- package/dist/assets/design/craft/color.md +88 -0
- package/dist/assets/design/craft/form-validation.md +221 -0
- package/dist/assets/design/craft/laws-of-ux.md +296 -0
- package/dist/assets/design/craft/rtl-and-bidi.md +186 -0
- package/dist/assets/design/craft/state-coverage.md +134 -0
- package/dist/assets/design/craft/typography-hierarchy-editorial.md +182 -0
- package/dist/assets/design/craft/typography-hierarchy.md +165 -0
- package/dist/assets/design/craft/typography.md +122 -0
- package/dist/assets/design/react-bits/SKILL.md +130 -0
- package/dist/assets/design/skills/embedded-captions/CATALOG.md +91 -0
- package/dist/assets/design/skills/embedded-captions/SKILL.md +260 -0
- package/dist/assets/design/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
- package/dist/assets/design/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
- package/dist/assets/design/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
- package/dist/assets/design/skills/embedded-captions/dna/README.md +148 -0
- package/dist/assets/design/skills/embedded-captions/dna/chrome.json +68 -0
- package/dist/assets/design/skills/embedded-captions/dna/cream.json +69 -0
- package/dist/assets/design/skills/embedded-captions/dna/documentary.json +62 -0
- package/dist/assets/design/skills/embedded-captions/dna/editorial.json +70 -0
- package/dist/assets/design/skills/embedded-captions/dna/glitch.json +82 -0
- package/dist/assets/design/skills/embedded-captions/dna/ink.json +65 -0
- package/dist/assets/design/skills/embedded-captions/dna/keynote.json +62 -0
- package/dist/assets/design/skills/embedded-captions/dna/loud.json +75 -0
- package/dist/assets/design/skills/embedded-captions/dna/neon.json +58 -0
- package/dist/assets/design/skills/embedded-captions/dna/velocity.json +89 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/README.md +48 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/engine.html +355 -0
- package/dist/assets/design/skills/embedded-captions/modes/standard/_anatomy.md +232 -0
- package/dist/assets/design/skills/embedded-captions/modes/standard/_motion.md +192 -0
- package/dist/assets/design/skills/embedded-captions/references/aesthetic-principles.md +167 -0
- package/dist/assets/design/skills/embedded-captions/references/anti-patterns.md +188 -0
- package/dist/assets/design/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
- package/dist/assets/design/skills/embedded-captions/references/caption-grouping.md +130 -0
- package/dist/assets/design/skills/embedded-captions/references/composition-craft.md +522 -0
- package/dist/assets/design/skills/embedded-captions/references/direction-catalog.md +138 -0
- package/dist/assets/design/skills/embedded-captions/references/example-renders/champion.html +371 -0
- package/dist/assets/design/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
- package/dist/assets/design/skills/embedded-captions/references/failure-modes.md +145 -0
- package/dist/assets/design/skills/embedded-captions/references/layout-heuristics.md +238 -0
- package/dist/assets/design/skills/embedded-captions/references/motion-vocabulary.md +148 -0
- package/dist/assets/design/skills/embedded-captions/references/rail.md +68 -0
- package/dist/assets/design/skills/embedded-captions/references/reference-bar.md +47 -0
- package/dist/assets/design/skills/embedded-captions/references/scene-types.md +94 -0
- package/dist/assets/design/skills/embedded-captions/references/typographic-moves.md +266 -0
- package/dist/assets/design/skills/embedded-captions/references/typography-presets.md +63 -0
- package/dist/assets/design/skills/embedded-captions/scripts/fixtures/heroless/theme.json +11 -0
- package/dist/assets/design/skills/embedded-captions/scripts/fixtures/heroless/transcript.json +10 -0
- package/dist/assets/design/skills/embedded-captions/themes/README.md +243 -0
- package/dist/assets/design/skills/embedded-captions/themes/anchor.json +27 -0
- package/dist/assets/design/skills/embedded-captions/themes/arcade.json +51 -0
- package/dist/assets/design/skills/embedded-captions/themes/aurora.json +41 -0
- package/dist/assets/design/skills/embedded-captions/themes/biolume.json +35 -0
- package/dist/assets/design/skills/embedded-captions/themes/brush.json +74 -0
- package/dist/assets/design/skills/embedded-captions/themes/chalkboard.json +52 -0
- package/dist/assets/design/skills/embedded-captions/themes/dossier.json +56 -0
- package/dist/assets/design/skills/embedded-captions/themes/graffiti.json +62 -0
- package/dist/assets/design/skills/embedded-captions/themes/hologram.json +41 -0
- package/dist/assets/design/skills/embedded-captions/themes/inkwater.json +43 -0
- package/dist/assets/design/skills/embedded-captions/themes/laser.json +46 -0
- package/dist/assets/design/skills/embedded-captions/themes/lastpage.json +33 -0
- package/dist/assets/design/skills/embedded-captions/themes/neonsign.json +53 -0
- package/dist/assets/design/skills/embedded-captions/themes/ordnance.json +54 -0
- package/dist/assets/design/skills/embedded-captions/themes/papercut.json +37 -0
- package/dist/assets/design/skills/embedded-captions/themes/popup.json +46 -0
- package/dist/assets/design/skills/embedded-captions/themes/ransom.json +62 -0
- package/dist/assets/design/skills/embedded-captions/themes/scoreboard.json +54 -0
- package/dist/assets/design/skills/embedded-captions/themes/spectrum.json +46 -0
- package/dist/assets/design/skills/embedded-captions/themes/stardust.json +29 -0
- package/dist/assets/design/skills/embedded-captions/themes/stomp.json +43 -0
- package/dist/assets/design/skills/embedded-captions/themes/terminal.json +49 -0
- package/dist/assets/design/skills/embedded-captions/themes/thunder.json +44 -0
- package/dist/assets/design/skills/embedded-captions/themes/transit.json +44 -0
- package/dist/assets/design/skills/embedded-captions/themes/vhs.json +47 -0
- package/dist/assets/design/skills/faceless-explainer/SKILL.md +235 -0
- package/dist/assets/design/skills/faceless-explainer/references/cut-catalog.md +215 -0
- package/dist/assets/design/skills/faceless-explainer/references/motion-language.md +156 -0
- package/dist/assets/design/skills/faceless-explainer/references/story-design.md +255 -0
- package/dist/assets/design/skills/faceless-explainer/references/visual-design.md +146 -0
- package/dist/assets/design/skills/faceless-explainer/sub-agents/frame-worker.md +12 -0
- package/dist/assets/design/skills/general-video/SKILL.md +164 -0
- package/dist/assets/design/skills/general-video/sub-agents/frame-worker.md +34 -0
- package/dist/assets/design/skills/hyperframes/SKILL.md +134 -0
- package/dist/assets/design/skills/hyperframes/references/brief-contract.md +108 -0
- package/dist/assets/design/skills/hyperframes/references/brief-format.md +72 -0
- package/dist/assets/design/skills/hyperframes/references/capability-menu.md +47 -0
- package/dist/assets/design/skills/hyperframes/references/frame-worker-core.md +80 -0
- package/dist/assets/design/skills/hyperframes/references/intent-interview.md +71 -0
- package/dist/assets/design/skills/hyperframes/references/pitch-round.md +40 -0
- package/dist/assets/design/skills/hyperframes/references/production-loop.md +26 -0
- package/dist/assets/design/skills/hyperframes/references/review-loop.md +37 -0
- package/dist/assets/design/skills/hyperframes/references/route-briefs.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/routes/embedded-captions.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
- package/dist/assets/design/skills/hyperframes/references/routes/general-video.md +12 -0
- package/dist/assets/design/skills/hyperframes/references/routes/motion-graphics.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/routes/music-to-video.md +12 -0
- package/dist/assets/design/skills/hyperframes/references/routes/pr-to-video.md +28 -0
- package/dist/assets/design/skills/hyperframes/references/routes/product-launch-video.md +13 -0
- package/dist/assets/design/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
- package/dist/assets/design/skills/hyperframes/references/routes/slideshow.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/script-format.md +52 -0
- package/dist/assets/design/skills/hyperframes/references/skill-lifecycle.md +30 -0
- package/dist/assets/design/skills/hyperframes/references/storyboard-format.md +99 -0
- package/dist/assets/design/skills/hyperframes/references/subagent-dispatch.md +35 -0
- package/dist/assets/design/skills/hyperframes/references/workflow-catalog.md +10 -0
- package/dist/assets/design/skills/hyperframes-animation/SKILL.md +86 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/animate-text.md +64 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/animejs.md +130 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/css-animations.md +143 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +199 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +129 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/gsap.md +105 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/lottie.md +130 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/three.md +145 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/typegpu.md +182 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/waapi.md +101 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/agent-progress-theater.md +76 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/camera-journey.md +61 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/constellation-hub.md +63 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/cta-morph-press.md +63 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +89 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/dataviz-countup.md +59 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/device-surface-showcase.md +68 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/fixed-anchor-cycle.md +46 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/grid-card-assemble.md +81 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +121 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/overwhelm-surround.md +58 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/panel-edit-live-sync.md +73 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/prompt-type-submit-generate.md +85 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/titlecard-reveal.md +80 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/transcript-scroll-artifact-reveal.md +45 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/zoom-out-workspace-reveal.md +68 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints-index.md +202 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
- package/dist/assets/design/skills/hyperframes-animation/references/motion-blur.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/3d-camera-flight.md +180 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/3d-page-scroll.md +135 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/3d-text-depth-layers.md +128 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/ai-tracking-box.md +139 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/ambient-glow-bloom.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/anchored-layout-expand.md +148 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/asr-keyword-glow.md +128 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/avatar-cloud-network.md +145 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/camera-cursor-tracking.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/card-morph-anchor.md +134 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/center-outward-expansion.md +88 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/chart-scrub-readout.md +151 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/chromatic-glitch.md +150 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/context-sensitive-cursor.md +140 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/control-target-sync.md +131 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/coordinate-target-zoom.md +138 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/counting-dynamic-scale.md +115 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/css-marker-patterns.md +208 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/cursor-click-ripple.md +104 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/cursor-drag.md +141 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/depth-of-field-blur.md +112 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/depth-scatter-assemble.md +139 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/discrete-text-sequence.md +146 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +149 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/gradient-text-sweep.md +136 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/gsap-effects.md +196 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/hacker-flip-3d.md +123 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/kinetic-beat-slam.md +137 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/motion-blur-streak.md +130 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/multi-cursor-choreography.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/multi-phase-camera.md +129 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/nudge-curve.md +47 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/orbit-3d-entry.md +148 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/particle-burst.md +149 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/physics-press-reaction.md +101 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/press-release-spring.md +108 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/reactive-displacement.md +92 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/scale-swap-transition.md +88 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/sine-wave-loop.md +85 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/split-tilt-cards.md +123 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/spring-pop-entrance.md +107 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/stat-bars-and-fills.md +145 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/svg-icon-enrichment.md +141 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/svg-path-draw.md +122 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/theme-crossfade-morph.md +126 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/vertical-spring-ticker.md +104 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/viewport-change.md +148 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/waterfall-entry.md +81 -0
- package/dist/assets/design/skills/hyperframes-animation/rules-index.md +113 -0
- package/dist/assets/design/skills/hyperframes-animation/techniques.md +507 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +168 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/catalog.md +127 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-3d.md +12 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-blur.md +51 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-cover.md +43 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-grid.md +10 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-light.md +49 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-other.md +25 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-push.md +41 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-radial.md +37 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-scale.md +24 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/overview.md +153 -0
- package/dist/assets/design/skills/hyperframes-audio/SKILL.md +476 -0
- package/dist/assets/design/skills/hyperframes-audio/references/attributes.md +138 -0
- package/dist/assets/design/skills/hyperframes-audio/references/diagnosis.md +274 -0
- package/dist/assets/design/skills/hyperframes-audio/references/fx-registry.md +84 -0
- package/dist/assets/design/skills/hyperframes-audio/references/presets.md +216 -0
- package/dist/assets/design/skills/hyperframes-core/SKILL.md +97 -0
- package/dist/assets/design/skills/hyperframes-core/references/composition-patterns.md +224 -0
- package/dist/assets/design/skills/hyperframes-core/references/creator-editing-recipes.md +491 -0
- package/dist/assets/design/skills/hyperframes-core/references/data-attributes.md +78 -0
- package/dist/assets/design/skills/hyperframes-core/references/determinism-rules.md +53 -0
- package/dist/assets/design/skills/hyperframes-core/references/full-screen-motion.md +67 -0
- package/dist/assets/design/skills/hyperframes-core/references/minimal-composition.md +69 -0
- package/dist/assets/design/skills/hyperframes-core/references/sub-compositions.md +176 -0
- package/dist/assets/design/skills/hyperframes-core/references/tailwind.md +104 -0
- package/dist/assets/design/skills/hyperframes-core/references/tracks-and-clips.md +87 -0
- package/dist/assets/design/skills/hyperframes-core/references/variables-and-media.md +107 -0
- package/dist/assets/design/skills/hyperframes-creative/SKILL.md +71 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/FRAME.md +277 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/caption-skin.html +224 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt +93 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-inter.txt +93 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt +93 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/frame-showcase.html +1438 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/monochrome.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/references/audio-reactive.md +76 -0
- package/dist/assets/design/skills/hyperframes-creative/references/beat-direction.md +164 -0
- package/dist/assets/design/skills/hyperframes-creative/references/composition-patterns.md +199 -0
- package/dist/assets/design/skills/hyperframes-creative/references/data-in-motion.md +19 -0
- package/dist/assets/design/skills/hyperframes-creative/references/design-adherence.md +19 -0
- package/dist/assets/design/skills/hyperframes-creative/references/design-picker.md +123 -0
- package/dist/assets/design/skills/hyperframes-creative/references/design-spec.md +55 -0
- package/dist/assets/design/skills/hyperframes-creative/references/house-style.md +73 -0
- package/dist/assets/design/skills/hyperframes-creative/references/motion-principles.md +151 -0
- package/dist/assets/design/skills/hyperframes-creative/references/narration.md +92 -0
- package/dist/assets/design/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
- package/dist/assets/design/skills/hyperframes-creative/references/story-spine.md +45 -0
- package/dist/assets/design/skills/hyperframes-creative/references/storyboard-recipe.md +57 -0
- package/dist/assets/design/skills/hyperframes-creative/references/typography.md +218 -0
- package/dist/assets/design/skills/hyperframes-creative/references/video-composition.md +63 -0
- package/dist/assets/design/skills/hyperframes-creative/references/visual-styles.md +457 -0
- package/dist/assets/design/skills/hyperframes-creative/templates/design-picker.html +1432 -0
- package/dist/assets/design/skills/hyperframes-keyframes/SKILL.md +262 -0
- package/dist/assets/design/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
- package/dist/assets/design/skills/hyperframes-keyframes/references/keyframe-patterns.md +108 -0
- package/dist/assets/design/skills/hyperframes-studio/SKILL.md +75 -0
- package/dist/assets/design/skills/motion-graphics/SKILL.md +175 -0
- package/dist/assets/design/skills/motion-graphics/agents/builder.md +41 -0
- package/dist/assets/design/skills/motion-graphics/agents/director.md +54 -0
- package/dist/assets/design/skills/motion-graphics/agents/finalize.md +17 -0
- package/dist/assets/design/skills/motion-graphics/catalog-map.md +52 -0
- package/dist/assets/design/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
- package/dist/assets/design/skills/motion-graphics/categories/charts/module.md +22 -0
- package/dist/assets/design/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
- package/dist/assets/design/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
- package/dist/assets/design/skills/motion-graphics/categories/lower-thirds/module.md +20 -0
- package/dist/assets/design/skills/motion-graphics/categories/maps/module.md +61 -0
- package/dist/assets/design/skills/motion-graphics/categories/news/module.md +56 -0
- package/dist/assets/design/skills/motion-graphics/categories/stat/module.md +21 -0
- package/dist/assets/design/skills/motion-graphics/categories/tweet/module.md +16 -0
- package/dist/assets/design/skills/motion-graphics/categories/webpage/module.md +30 -0
- package/dist/assets/design/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
- package/dist/assets/design/skills/motion-graphics/phases/source/guide.md +21 -0
- package/dist/assets/design/skills/motion-graphics/references/builder-contract.md +38 -0
- package/dist/assets/design/skills/motion-graphics/references/motion-vocabulary.md +47 -0
- package/dist/assets/design/skills/motion-graphics/references/shot-plan-ir.md +54 -0
- package/dist/assets/design/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
- package/dist/assets/design/skills/music-to-video/SKILL.md +207 -0
- package/dist/assets/design/skills/music-to-video/references/frame-skeleton.md +100 -0
- package/dist/assets/design/skills/music-to-video/references/montage.md +55 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitive-catalog.md +75 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/3d-card-flip/scene.html +119 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/bg-flow-field/scene.html +294 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/binary-decrypt/scene.html +85 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/blur-resolve/scene.html +60 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/braam-punch/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/braam-punch/scene.html +100 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/chromatic-split/scene.html +111 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/chrome-sweep/scene.html +68 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/counting-punch/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/counting-punch/scene.html +119 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/crash-zoom-in/scene.html +120 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +55 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/datamosh-smear/scene.html +131 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/directional-fill/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/directional-fill/scene.html +103 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/dolly-zoom/scene.html +102 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/electric-arc/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/electric-arc/scene.html +105 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/flash-cut/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/flash-cut/scene.html +97 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/gooey-metaball/scene.html +206 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/hard-cut/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/hard-cut/scene.html +82 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/hypercut-whip/scene.html +44 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/iris-open/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/iris-open/scene.html +69 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/kinetic-letter-in/scene.html +64 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/liquid-morph/scene.html +96 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/mask-reveal/scene.html +74 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/mosaic-pack/scene.html +89 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/neon-flicker/scene.html +73 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/outline-to-fill/scene.html +82 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/palette-flip/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/palette-flip/scene.html +97 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/particle-burst/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/particle-burst/scene.html +106 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/pixel-dissolve/scene.html +86 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/radial-burst-lines/scene.html +130 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/screen-shake/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/screen-shake/scene.html +78 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/slot-machine-reveal/scene.html +100 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/spotlight-sweep/scene.html +102 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/staggered-exit/scene.html +82 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-spectral-rays/scene.html +280 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-wave-distort/scene.html +106 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/tile-mosaic/scene.html +109 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/typewriter-reveal/scene.html +91 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/word-grid-burst/scene.html +96 -0
- package/dist/assets/design/skills/music-to-video/references/planning.md +104 -0
- package/dist/assets/design/skills/music-to-video/references/storyboard-format.md +94 -0
- package/dist/assets/design/skills/music-to-video/references/template-catalog.md +106 -0
- package/dist/assets/design/skills/music-to-video/references/templates/card-flyby/index.html +527 -0
- package/dist/assets/design/skills/music-to-video/references/templates/card-flyby/program.json +13 -0
- package/dist/assets/design/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -0
- package/dist/assets/design/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -0
- package/dist/assets/design/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -0
- package/dist/assets/design/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -0
- package/dist/assets/design/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -0
- package/dist/assets/design/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -0
- package/dist/assets/design/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -0
- package/dist/assets/design/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -0
- package/dist/assets/design/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -0
- package/dist/assets/design/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -0
- package/dist/assets/design/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -0
- package/dist/assets/design/skills/music-to-video/sub-agents/frame-worker.md +49 -0
- package/dist/assets/design/skills/pr-to-video/SKILL.md +271 -0
- package/dist/assets/design/skills/pr-to-video/references/code-vocabulary.md +112 -0
- package/dist/assets/design/skills/pr-to-video/references/cut-catalog.md +215 -0
- package/dist/assets/design/skills/pr-to-video/references/motion-language.md +156 -0
- package/dist/assets/design/skills/pr-to-video/references/story-design.md +230 -0
- package/dist/assets/design/skills/pr-to-video/references/visual-design.md +164 -0
- package/dist/assets/design/skills/pr-to-video/sub-agents/frame-worker.md +38 -0
- package/dist/assets/design/skills/product-launch-video/SKILL.md +262 -0
- package/dist/assets/design/skills/product-launch-video/references/cut-catalog.md +220 -0
- package/dist/assets/design/skills/product-launch-video/references/motion-language.md +156 -0
- package/dist/assets/design/skills/product-launch-video/references/story-design.md +508 -0
- package/dist/assets/design/skills/product-launch-video/references/visual-design.md +126 -0
- package/dist/assets/design/skills/product-launch-video/sub-agents/frame-worker.md +21 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/SKILL.md +130 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/compositions/title.html +31 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +46 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-1.html +35 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-2.html +35 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-3.html +36 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +75 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-1.html +52 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-2.html +99 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-3.html +55 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +70 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/api-map.md +142 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/eval.md +140 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/fonts.md +112 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/limitations.md +136 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/lottie.md +119 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/media.md +149 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/parameters.md +172 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/sequencing.md +251 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/timing.md +165 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/transitions.md +113 -0
- package/dist/assets/design/skills/slideshow/SKILL.md +530 -0
- package/dist/assets/design/skills/slideshow/references/standalone-harness.md +1017 -0
- package/dist/assets/design/skills/talking-head-recut/NOTICE.md +39 -0
- package/dist/assets/design/skills/talking-head-recut/SKILL.md +1007 -0
- package/dist/assets/design/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
- package/dist/assets/design/skills/talking-head-recut/references/confirm-visual-direction-with-user-do-this-first.md +211 -0
- package/dist/assets/design/skills/talking-head-recut/references/frames/clean.html +92 -0
- package/dist/assets/design/skills/talking-head-recut/references/frames/hairline.html +171 -0
- package/dist/assets/design/skills/talking-head-recut/references/frames/polaroid.html +131 -0
- package/dist/assets/design/skills/talking-head-recut/references/layouts/overlay.html +164 -0
- package/dist/assets/design/skills/talking-head-recut/references/layouts/pip.html +143 -0
- package/dist/assets/design/skills/talking-head-recut/references/layouts/split.html +121 -0
- package/dist/assets/design/skills/talking-head-recut/references/layouts/stack.html +109 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/academic.html +172 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/audit.html +170 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/editorial.html +189 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/geom.html +181 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/minimal.html +130 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/spotlight.html +142 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/swiss.html +188 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/terminal.html +196 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/xhs.html +206 -0
- package/dist/assets/design/taste/LICENSE +21 -0
- package/dist/assets/design/taste/PROVENANCE.md +70 -0
- package/dist/assets/design/taste/brandkit/SKILL.md +798 -0
- package/dist/assets/design/taste/brutalist-skill/SKILL.md +92 -0
- package/dist/assets/design/taste/gpt-tasteskill/SKILL.md +74 -0
- package/dist/assets/design/taste/image-to-code-skill/SKILL.md +1228 -0
- package/dist/assets/design/taste/imagegen-frontend-mobile/SKILL.md +1465 -0
- package/dist/assets/design/taste/imagegen-frontend-web/SKILL.md +987 -0
- package/dist/assets/design/taste/minimalist-skill/SKILL.md +85 -0
- package/dist/assets/design/taste/output-skill/SKILL.md +49 -0
- package/dist/assets/design/taste/redesign-skill/SKILL.md +178 -0
- package/dist/assets/design/taste/soft-skill/SKILL.md +98 -0
- package/dist/assets/design/taste/stitch-skill/DESIGN.md +121 -0
- package/dist/assets/design/taste/stitch-skill/SKILL.md +184 -0
- package/dist/assets/design/taste/taste-skill/SKILL.md +1043 -0
- package/dist/assets/design/taste/taste-skill/references/4-2-color-calibration.md +24 -0
- package/dist/assets/design/taste/taste-skill/references/4-7-layout-discipline-hard-rules-failing-any-of-.md +27 -0
- package/dist/assets/design/taste/taste-skill/references/4-8-image-visual-asset-strategy.md +35 -0
- package/dist/assets/design/taste/taste-skill/references/4-9-content-density.md +34 -0
- package/dist/assets/design/taste/taste-skill/references/9-f-production-test-tells-banned-outright.md +54 -0
- package/dist/assets/design/taste/taste-skill-v1/SKILL.md +226 -0
- package/dist/assets/engineering/skills-starter/engineering-ui-design/SKILL.md +84 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/SKILL.md +68 -459
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/dispatch-and-review-rules.md +74 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/example-workflow.md +70 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/model-selection.md +40 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/process-diagrams.md +92 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/setup-and-ledger.md +75 -0
- package/dist/assets/uiux/LICENSE +21 -0
- package/dist/assets/uiux/PROVENANCE.md +110 -0
- package/dist/assets/uiux/data/app-interface.csv +33 -0
- package/dist/assets/uiux/data/charts.csv +26 -0
- package/dist/assets/uiux/data/colors.csv +193 -0
- package/dist/assets/uiux/data/icons.csv +106 -0
- package/dist/assets/uiux/data/landing.csv +35 -0
- package/dist/assets/uiux/data/motion.csv +18 -0
- package/dist/assets/uiux/data/products.csv +193 -0
- package/dist/assets/uiux/data/react-performance.csv +45 -0
- package/dist/assets/uiux/data/stacks/angular.csv +51 -0
- package/dist/assets/uiux/data/stacks/astro.csv +54 -0
- package/dist/assets/uiux/data/stacks/avalonia.csv +57 -0
- package/dist/assets/uiux/data/stacks/flutter.csv +53 -0
- package/dist/assets/uiux/data/stacks/html-tailwind.csv +60 -0
- package/dist/assets/uiux/data/stacks/javafx.csv +76 -0
- package/dist/assets/uiux/data/stacks/jetpack-compose.csv +53 -0
- package/dist/assets/uiux/data/stacks/laravel.csv +51 -0
- package/dist/assets/uiux/data/stacks/nextjs.csv +62 -0
- package/dist/assets/uiux/data/stacks/nuxt-ui.csv +77 -0
- package/dist/assets/uiux/data/stacks/nuxtjs.csv +68 -0
- package/dist/assets/uiux/data/stacks/react-native.csv +52 -0
- package/dist/assets/uiux/data/stacks/react.csv +67 -0
- package/dist/assets/uiux/data/stacks/shadcn.csv +69 -0
- package/dist/assets/uiux/data/stacks/svelte.csv +56 -0
- package/dist/assets/uiux/data/stacks/swiftui.csv +51 -0
- package/dist/assets/uiux/data/stacks/threejs.csv +54 -0
- package/dist/assets/uiux/data/stacks/uno.csv +60 -0
- package/dist/assets/uiux/data/stacks/uwp.csv +56 -0
- package/dist/assets/uiux/data/stacks/vue.csv +50 -0
- package/dist/assets/uiux/data/stacks/winui.csv +60 -0
- package/dist/assets/uiux/data/stacks/wpf.csv +57 -0
- package/dist/assets/uiux/data/styles.csv +89 -0
- package/dist/assets/uiux/data/typography.csv +75 -0
- package/dist/assets/uiux/data/ui-reasoning.csv +193 -0
- package/dist/assets/uiux/data/ux-guidelines.csv +120 -0
- package/dist/auto-review.js +38 -4
- package/dist/bootstrap.js +65061 -56810
- package/dist/client.cjs +4668 -3598
- package/dist/subagent-claude-code.js +493 -0
- package/dist/subagent-codex.js +1068 -0
- package/dist/tool-session-query.js +993 -0
- package/package.json +81 -74
- package/dist/agent-team.js +0 -16235
- package/dist/schedule.js +0 -15898
- package/dist/tool-agent-team.js +0 -16766
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: particle-burst
|
|
3
|
+
description: Deterministic particle / confetti events — a confetti pop that bursts up and drifts down (optionally instant-shrinking away), a dot burst from behind text, or a glyph dissolving to particles. Every particle's state is a pure ballistic function of timeline time from index-seeded values, so a scrub to any t shows the correct mid-flight frame.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: particles, confetti, burst, dissolve, celebration, ballistic, deterministic, punctuation
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Particle Burst
|
|
9
|
+
|
|
10
|
+
Discrete flying particles as a one-shot event: a **confetti pop** that erupts upward and drifts back down on gravity, a **dot burst** radiating from behind a landing word, or a **glyph dissolve** where text breaks into particles that scatter and die. Particles are ephemeral garnish — born from a beat, fly, gone; they never become layout.
|
|
11
|
+
|
|
12
|
+
Boundaries: [css-marker-patterns.md](css-marker-patterns.md)'s burst mode is radiating **drawn lines** — a static accent, no flight. [press-release-spring.md](press-release-spring.md)'s release burst is **one blurred radial layer** faking an explosion — enough when a single glow pop will do. [center-outward-expansion.md](center-outward-expansion.md) moves **real layout elements** to final resting slots; particles have no destination, only physics and a death.
|
|
13
|
+
|
|
14
|
+
## How It Works
|
|
15
|
+
|
|
16
|
+
The whole event is **one driver tween and one formula**:
|
|
17
|
+
|
|
18
|
+
1. **Seeded setup** — a fixed pool of `PARTICLE_COUNT` small divs is created once at composition setup (a deterministic loop — setup-time generation is fine; per-frame DOM creation is not). Each particle `i` derives everything from a pure hash:
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
// angle, speed, size, spin, color (palette[i % palette.length]) — all from prand(i * k)
|
|
22
|
+
const prand = (n) => {
|
|
23
|
+
const x = Math.sin(n * 127.1 + 311.7) * 43758.5453;
|
|
24
|
+
return x - Math.floor(x); // 0..1, pure function of n
|
|
25
|
+
};
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
2. **Ballistic formula** — a proxy tween advances `T: 0 → 1` over `FLIGHT_DUR` with `ease: "none"`; `onUpdate` positions every particle as a **pure function of T**:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
x(T) = vx · T·FLIGHT_DUR
|
|
32
|
+
y(T) = vy · T·FLIGHT_DUR + ½ · G · (T·FLIGHT_DUR)²
|
|
33
|
+
rot(T) = spin · T·FLIGHT_DUR
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Gravity `G` supplies the rise-decelerate-fall arc for free. Because position is computed from `T` (never accumulated per frame), a seek to any moment renders the exact mid-flight state — this is what makes DOM particles seek-safe. The driver's `ease: "none"` is load-bearing: the physics lives in the formula; an eased driver warps gravity and the arc stops reading as thrown objects.
|
|
37
|
+
|
|
38
|
+
3. **Death** — an opacity tail inside the same formula (fade over the last `FADE_FRAC` of flight), or the confetti signature: a separate **instant-shrink** tween scaling the pool to 0 in a blink at flight end. Either way the particles end invisible and stay invisible.
|
|
39
|
+
|
|
40
|
+
## Recipe
|
|
41
|
+
|
|
42
|
+
```html
|
|
43
|
+
<!-- inside a standard scene clip (hyperframes-core) -->
|
|
44
|
+
<div class="burst-stage">
|
|
45
|
+
<div class="particle-field" id="particle-field"></div>
|
|
46
|
+
<div class="burst-hero" id="burst-hero">{heroWord}</div>
|
|
47
|
+
</div>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```css
|
|
51
|
+
/* .burst-stage: position: relative; display: grid; place-items: center.
|
|
52
|
+
.burst-hero: z-index: 2 — particles fly BEHIND the word. */
|
|
53
|
+
.particle-field {
|
|
54
|
+
position: absolute;
|
|
55
|
+
z-index: 1;
|
|
56
|
+
left: 50%;
|
|
57
|
+
top: 50%; /* the launch origin — offset to taste (e.g. the word's baseline) */
|
|
58
|
+
width: 0;
|
|
59
|
+
height: 0;
|
|
60
|
+
}
|
|
61
|
+
.particle {
|
|
62
|
+
position: absolute;
|
|
63
|
+
left: 0;
|
|
64
|
+
top: 0;
|
|
65
|
+
border-radius: 2px; /* confetti chip; 50% for dots */
|
|
66
|
+
opacity: 0; /* invisible until the event fires */
|
|
67
|
+
will-change: transform, opacity;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
// Setup: deterministic pool, generated ONCE.
|
|
73
|
+
const field = document.getElementById("particle-field");
|
|
74
|
+
const palette = ["{accentA}", "{accentB}", "{accentC}"]; // 3-5 brand tokens
|
|
75
|
+
const parts = [];
|
|
76
|
+
for (let i = 0; i < PARTICLE_COUNT; i++) {
|
|
77
|
+
const el = document.createElement("div");
|
|
78
|
+
el.className = "particle";
|
|
79
|
+
const size = SIZE_MIN + prand(i * 3 + 1) * (SIZE_MAX - SIZE_MIN);
|
|
80
|
+
el.style.width = `${size}px`;
|
|
81
|
+
el.style.height = `${size * 0.7}px`; // slightly oblong = confetti chip
|
|
82
|
+
el.style.background = palette[i % palette.length];
|
|
83
|
+
field.appendChild(el);
|
|
84
|
+
// Index-seeded launch parameters — the particle's whole life, fixed here.
|
|
85
|
+
const angle = -Math.PI / 2 + (prand(i * 5 + 2) * 2 - 1) * CONE; // upward cone
|
|
86
|
+
const speed = SPEED_MIN + prand(i * 7 + 3) * (SPEED_MAX - SPEED_MIN);
|
|
87
|
+
parts.push({
|
|
88
|
+
el,
|
|
89
|
+
vx: Math.cos(angle) * speed,
|
|
90
|
+
vy: Math.sin(angle) * speed, // negative = up
|
|
91
|
+
spin: (prand(i * 11 + 4) * 2 - 1) * SPIN_MAX,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Confetti pop — one driver, pure ballistic formula.
|
|
96
|
+
const drive = { T: 0 };
|
|
97
|
+
tl.fromTo(
|
|
98
|
+
drive,
|
|
99
|
+
{ T: 0 },
|
|
100
|
+
{
|
|
101
|
+
T: 1,
|
|
102
|
+
duration: FLIGHT_DUR,
|
|
103
|
+
ease: "none", // physics lives in the formula, not the ease
|
|
104
|
+
onUpdate: () => {
|
|
105
|
+
const t = drive.T * FLIGHT_DUR; // seconds of flight — pure function of T
|
|
106
|
+
const fade = Math.min(1, (1 - drive.T) / FADE_FRAC); // opacity tail
|
|
107
|
+
parts.forEach((p) => {
|
|
108
|
+
const x = p.vx * t;
|
|
109
|
+
const y = p.vy * t + 0.5 * G * t * t; // rise, stall, drift down
|
|
110
|
+
p.el.style.transform = `translate(${x}px, ${y}px) rotate(${p.spin * t}deg)`;
|
|
111
|
+
p.el.style.opacity = String(drive.T === 0 ? 0 : fade); // T===0 guard covers seeks before the event
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
BURST_AT,
|
|
116
|
+
);
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Variations
|
|
120
|
+
|
|
121
|
+
- **Confetti pop, then instant-shrink** — the playful signature: full burst, gravity drift, then every chip scales to 0 in a blink: `FADE_FRAC` near 0, plus `tl.to(".particle", { scale: 0, duration: SHRINK_DUR, ease: "power2.in" }, BURST_AT + FLIGHT_DUR - SHRINK_DUR)` with `SHRINK_DUR` 0.15–0.25s. Keep the whole event tiny relative to the subject — a garnish measured in a few dozen pixels, not a screen-filling cannon.
|
|
122
|
+
- **Dot burst behind a landing word** — radial instead of a cone: `angle = prand(i) * Math.PI * 2`, `G` near 0, short flight (0.4–0.7s), round dots (`border-radius: 50%`), pool z-indexed behind the word. Fire at the word's settle frame.
|
|
123
|
+
- **Glyph dissolve** — seed each particle's **origin** across the glyph block's box (`ox = (prand(i*13) - 0.5) * BLOCK_W`, same for `oy`, added inside the transform), gentle outward drift with low `G`; text fades out over the first ~30% of flight while particles fade in from its silhouette. Color every particle `{textColor}` so the swarm reads as the text's own material. (True per-pixel dissolves are Canvas-2D territory — `techniques.md`; this DOM version sells it up to ~40 particles.)
|
|
124
|
+
- **Two-stage burst (pop + stragglers)** — split the pool: 70% on the main driver, 30% on a second driver ~0.12s later with lower speeds; the split is index-derived (`i % 10 < 3`). Same formula, two windows.
|
|
125
|
+
|
|
126
|
+
## Values
|
|
127
|
+
|
|
128
|
+
| token | range | notes |
|
|
129
|
+
| --------------------- | -------------------------------------------- | ------------------------------------------------------------------------------- | --- | ----------------------- |
|
|
130
|
+
| PARTICLE_COUNT | 10–18 pop/dots; 24–40 dissolve | **cap ~40** — per-frame style writes; past that, seek perf and register degrade |
|
|
131
|
+
| G | 900–1600 px/s² confetti; 0–200 dots/dissolve | natural fall vs drift |
|
|
132
|
+
| SPEED_MIN / SPEED_MAX | 250–700 px/s | per-particle via `prand`, never uniform |
|
|
133
|
+
| CONE | 0.35–0.8 rad (~20–45°) | wider = splash, narrower = fountain |
|
|
134
|
+
| FLIGHT_DUR | 0.7–1.4s | arc should peak ~35–45% of flight: check ` | vy | / G ≈ 0.4 × FLIGHT_DUR` |
|
|
135
|
+
| SIZE_MIN / SIZE_MAX | 5–14px chips; 4–8px dots | on a 1080p frame |
|
|
136
|
+
| SPIN_MAX | 180–720 deg/s confetti; 0 dots | tumble |
|
|
137
|
+
| FADE_FRAC | 0.2–0.35 | near 0 when using instant-shrink |
|
|
138
|
+
| BURST_AT | on a cause | the word's settle, a click, a lockup completing — an uncaused burst is noise |
|
|
139
|
+
|
|
140
|
+
## Critical Constraints
|
|
141
|
+
|
|
142
|
+
- **Position is a pure function of time, driver ease `"none"`** — `x(T)`, `y(T)`, `rot(T)` computed from the driver value every frame, never accumulated (`+=`) per tick (accumulation breaks the moment the renderer seeks); gravity is the ease — an eased driver bends the parabola.
|
|
143
|
+
- **Fixed pool, no per-frame DOM** — all particles exist after setup with `opacity: 0`; the event only writes `transform` / `opacity`. **`PARTICLE_COUNT ≤ ~40`** — per-frame style writes scale linearly; keep the event cheap.
|
|
144
|
+
- **Particles start AND end at `opacity: 0`** — the `drive.T === 0` guard covers seeks to before the event; the tail/shrink covers after. A chip frozen mid-air at driver end is a bug every subsequent frame.
|
|
145
|
+
- **Particles are punctuation** — one event per beat, fired on a cause, small relative to the subject, dead before the next beat; z-ordered behind or around the word it celebrates, never over it. A persistent particle system is a background, and that's not this rule.
|
|
146
|
+
|
|
147
|
+
## See also
|
|
148
|
+
|
|
149
|
+
`spring-pop-entrance` (confetti fires on the hero's settle frame) · `kinetic-beat-slam` (one beat earns the confetti payoff) · `press-release-spring` (single-layer glow alternative, or compose both) · `css-marker-patterns` (drawn-line burst when the accent should feel hand-annotated) · `scale-swap-transition` (glyph dissolve covers the exit).
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: physics-press-reaction
|
|
3
|
+
description: Cursor + element synchronized press via subtractive spring forces — cursor lands on element, both compress together, then release. Distinct from press-release-spring (which has no cursor).
|
|
4
|
+
metadata:
|
|
5
|
+
tags: spring, click, physics, cursor, subtractive, interaction, synchronized
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Physics Press Reaction (Cursor + Element Synced)
|
|
9
|
+
|
|
10
|
+
Models a real click: a cursor approaches a button, lands, and both compress IN SYNC, then release together. Distinct from [press-release-spring.md](press-release-spring.md) (no cursor — just a press happening); this rule is the COMBINED cursor + element behavior. A single `PRESS_INTENSITY` drives both: press down compresses both to `1 - PRESS_INTENSITY` via **one targets array**, release springs both back to 1.0 with overshoot. The cursor translates to the button's center BEFORE the press starts; after release it may move on or hold.
|
|
11
|
+
|
|
12
|
+
## Recipe
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<button class="btn" id="btn">{ctaCopy}</button>
|
|
16
|
+
<!-- Cursor at scene-root level so it translates freely; arrow TIP is the click
|
|
17
|
+
point, so transform-origin: 0 0 — scaling around the tip keeps it stable. -->
|
|
18
|
+
<svg class="cursor" id="cursor" style="pointer-events: none; transform-origin: 0 0">…</svg>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
gsap.set("#cursor", { x: CURSOR_START_X, y: CURSOR_START_Y }); // off-screen / far corner
|
|
23
|
+
|
|
24
|
+
// Phase 1 — approach
|
|
25
|
+
tl.to(
|
|
26
|
+
"#cursor",
|
|
27
|
+
{ x: BUTTON_CENTER_X, y: BUTTON_CENTER_Y, duration: APPROACH_DUR, ease: "power2.inOut" },
|
|
28
|
+
APPROACH_START,
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
// Phase 2 — coordinated press down: ONE targets array, same scale
|
|
32
|
+
tl.to(
|
|
33
|
+
["#btn", "#cursor"],
|
|
34
|
+
{ scale: 1 - PRESS_INTENSITY, duration: PRESS_DOWN_DUR, ease: "power1.in" },
|
|
35
|
+
PRESS_DOWN_AT,
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Phase 3 — release: both spring back together
|
|
39
|
+
tl.to(
|
|
40
|
+
["#btn", "#cursor"],
|
|
41
|
+
{ scale: 1, duration: RELEASE_DUR, ease: `back.out(${BOUNCE_FACTOR})` },
|
|
42
|
+
RELEASE_AT,
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
// Phase 4 — inner glow during press, resting shadow on release (contact confirmation)
|
|
46
|
+
tl.to(
|
|
47
|
+
"#btn",
|
|
48
|
+
{ boxShadow: "{btnPressedShadow}", duration: PRESS_DOWN_DUR, ease: "power1.in" },
|
|
49
|
+
PRESS_DOWN_AT,
|
|
50
|
+
);
|
|
51
|
+
tl.to(
|
|
52
|
+
"#btn",
|
|
53
|
+
{ boxShadow: "{btnRestingShadow}", duration: RELEASE_DUR, ease: "power2.out" },
|
|
54
|
+
RELEASE_AT,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
// Cursor optionally exits after the press settles
|
|
58
|
+
tl.to(
|
|
59
|
+
"#cursor",
|
|
60
|
+
{ x: CURSOR_EXIT_X, y: CURSOR_EXIT_Y, duration: CURSOR_EXIT_DUR, ease: "power2.out" },
|
|
61
|
+
CURSOR_EXIT_AT,
|
|
62
|
+
);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Variations
|
|
66
|
+
|
|
67
|
+
- **Multiple-element chain press** — press button A → A triggers a swap → cursor moves to button B → presses again; each press is one full down-release sub-routine.
|
|
68
|
+
- **Hold press (continuous pressure)** — insert a `HOLD_DUR` window between press-down and release: both scales stay at `1 - PRESS_INTENSITY`, inner glow stays on. Suggests "thinking" or "loading."
|
|
69
|
+
- **Synchronized inner-glow pulse** — during the hold, pulse the inset glow with a sine driver: a `{ p: 0 }` proxy tweened to `Math.PI * GLOW_PULSE_CYCLES * 2` on `ease: "none"`, `onUpdate` writing `boxShadow` with `alpha = GLOW_BASE_ALPHA + sin(p) * GLOW_PULSE_AMP`. Suggests "processing."
|
|
70
|
+
|
|
71
|
+
## Values
|
|
72
|
+
|
|
73
|
+
| token | range / rule | notes |
|
|
74
|
+
| ------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
75
|
+
| APPROACH_START | 0–0.3 s | long delays read as a dead frame |
|
|
76
|
+
| APPROACH_DUR | 0.7–1.3 s | faster = urgent, slower = deliberate |
|
|
77
|
+
| PRESS_DOWN_AT | `= APPROACH_START + APPROACH_DUR` | cursor arrives exactly as the press begins — avoids "tapping on air" |
|
|
78
|
+
| PRESS_DOWN_DUR | 0.1–0.25 s | |
|
|
79
|
+
| RELEASE_AT | > `PRESS_DOWN_AT + PRESS_DOWN_DUR` | optional 0.05–0.4 s hold (or `HOLD_DUR` 0.3–0.8 s) for "thinking" interactions |
|
|
80
|
+
| RELEASE_DUR | 0.4–0.7 s | long enough for the overshoot to settle |
|
|
81
|
+
| PRESS_INTENSITY | 0.05 subtle · 0.10 standard · 0.15 heavy | applied to both cursor and button via the single targets array |
|
|
82
|
+
| BOUNCE_FACTOR | 1.6 soft · 2.0 firm · 2.4 cartoony | |
|
|
83
|
+
| CURSOR_START / EXIT | off-screen or far corner | the approach must read as motion-in, not a teleport; exit ≥ `RELEASE_AT + RELEASE_DUR` |
|
|
84
|
+
| BUTTON_CENTER | measured | for `place-items: center` at 1920×1080: `(960, 540)` |
|
|
85
|
+
| BRAND_REVEAL_AT | < `PRESS_DOWN_AT` | context precedes interaction |
|
|
86
|
+
| glow pulse | 1–4 cycles; base α 0.15–0.3; amp 0.1–0.2 | `GLOW_BASE_ALPHA − GLOW_PULSE_AMP ≥ 0` |
|
|
87
|
+
| CURSOR_SIZE | 48–96 px at 1080p | |
|
|
88
|
+
|
|
89
|
+
## Critical Constraints
|
|
90
|
+
|
|
91
|
+
- **Same press scale on cursor AND button** (one targets array) — only the button scaling makes the cursor "tap on air"; only the cursor scaling makes the button feel disconnected.
|
|
92
|
+
- **Cursor arrives BEFORE the press starts** — a clear "cursor over target" moment, or the press is unattributed.
|
|
93
|
+
- **`back.out(BOUNCE_FACTOR)` on the release, for both together** — a linear release loses the tactile feel; release MUST come after press.
|
|
94
|
+
- **Inner glow appears DURING press, fades on release** — outer shadow shrinks (pushed in), inner glow appears (energy concentrated).
|
|
95
|
+
- **Cursor `transform-origin: 0 0`** — the arrow's tip is the click point; scale around the tip keeps it stable. `pointer-events: none` on the cursor.
|
|
96
|
+
- **Climax dwell ≥ 1 s** — after release the composition must continue ≥ 1 s; the press is a beat, the viewer needs time to see the result.
|
|
97
|
+
- **No real `mouseenter` / `click` events** — HF is a render context; everything runs via the timeline.
|
|
98
|
+
|
|
99
|
+
## See also
|
|
100
|
+
|
|
101
|
+
`press-release-spring` (the BUTTON-only press; this rule layers the cursor on top) · `cursor-click-ripple` (adds a ripple at the click point) · `scale-swap-transition` (the press TRIGGERS the swap).
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: press-release-spring
|
|
3
|
+
description: Tactile button press with linear compression, spring-based elastic recovery, and layered visual feedback (shadow shrink + release burst + background glow).
|
|
4
|
+
metadata:
|
|
5
|
+
tags: spring, press, interaction, button, physics, glow, burst, ui
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Press-Release Spring Chain
|
|
9
|
+
|
|
10
|
+
Separates input (linear compression) from output (spring recovery) to create tactile feel: the overshoot is a natural byproduct of the spring config, not manually coded, with secondary motion (shadow shrink, release burst, background glow) layered on the same trigger frame. This is a **reaction on an element already resting on screen** — an arrival that springs in from nothing is [spring-pop-entrance.md](spring-pop-entrance.md); add a visible cursor actor and it becomes [physics-press-reaction.md](physics-press-reaction.md).
|
|
11
|
+
|
|
12
|
+
Two phases split at the **release**:
|
|
13
|
+
|
|
14
|
+
1. **Press**: linear ease → compression (`scale: 1 → PRESS_SCALE`, shadow shrinks). Linear, not spring — the dip must read as instant/tactile, not squishy.
|
|
15
|
+
2. **Release**: `back.out(BOUNCE_FACTOR)` spring back to 1.0. Optional burst glow ring expands behind the button; optional environmental glow fades in.
|
|
16
|
+
|
|
17
|
+
State continuity is critical: the release tween's start value MUST equal the press tween's end value, or the spring snaps to a different position. GSAP threads this automatically when both tweens target the same property at **adjacent positions** — `RELEASE_START = PRESS_START + PRESS_DUR`; a gap or overlap breaks it.
|
|
18
|
+
|
|
19
|
+
## Recipe
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<div class="press-stage">
|
|
23
|
+
<div class="bg-glow" id="bg-glow"></div>
|
|
24
|
+
<!-- Burst sits BEHIND the button (z-index 1 vs 2), same footprint, blurred
|
|
25
|
+
radial gradient, opacity 0. bg-glow is a full-stage radial at negative
|
|
26
|
+
inset so it extends past the stage edges. -->
|
|
27
|
+
<div class="burst" id="burst"></div>
|
|
28
|
+
<button class="btn" id="btn">{buttonLabel}</button>
|
|
29
|
+
</div>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
// Phase 1 — press (linear compression)
|
|
34
|
+
tl.to(
|
|
35
|
+
"#btn",
|
|
36
|
+
{ scale: PRESS_SCALE, boxShadow: "{btnPressedShadow}", duration: PRESS_DUR, ease: "power1.in" },
|
|
37
|
+
PRESS_START,
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Phase 2 — release (spring back; start scale == PRESS_SCALE by adjacency)
|
|
41
|
+
tl.to(
|
|
42
|
+
"#btn",
|
|
43
|
+
{
|
|
44
|
+
scale: 1,
|
|
45
|
+
boxShadow: "{btnRestShadow}",
|
|
46
|
+
duration: RELEASE_DUR,
|
|
47
|
+
ease: `back.out(${BOUNCE_FACTOR})`,
|
|
48
|
+
},
|
|
49
|
+
RELEASE_START,
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
// Phase 3 — burst glow pops behind the button, then fades
|
|
53
|
+
tl.fromTo(
|
|
54
|
+
"#burst",
|
|
55
|
+
{ scale: 1, opacity: 0 },
|
|
56
|
+
{
|
|
57
|
+
scale: BURST_PEAK_SCALE,
|
|
58
|
+
opacity: BURST_PEAK_OPACITY,
|
|
59
|
+
duration: BURST_GROW_DUR,
|
|
60
|
+
ease: "power2.out",
|
|
61
|
+
},
|
|
62
|
+
RELEASE_START,
|
|
63
|
+
);
|
|
64
|
+
tl.to("#burst", { opacity: 0, duration: BURST_FADE_DUR, ease: "power2.in" }, BURST_FADE_START);
|
|
65
|
+
|
|
66
|
+
// Phase 4 — environmental glow fades in after release
|
|
67
|
+
tl.to(
|
|
68
|
+
"#bg-glow",
|
|
69
|
+
{ opacity: BG_GLOW_PEAK_OPACITY, duration: BG_GLOW_FADE_DUR, ease: "power2.out" },
|
|
70
|
+
RELEASE_START,
|
|
71
|
+
);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Variations
|
|
75
|
+
|
|
76
|
+
- **Subtle press** (status save / muted CTA): `PRESS_SCALE` ~0.96, `BOUNCE_FACTOR` ~1.4, burst scale/opacity reduced.
|
|
77
|
+
- **Dramatic press** (hero CTA / "ship it"): `PRESS_SCALE` ~0.88, `BOUNCE_FACTOR` ~2.5, burst maxed.
|
|
78
|
+
- **Color shift during press** — darken mid-press, return on release; interpolated `backgroundColor` at the same timeline positions as the scale tweens. Same state-continuity rule.
|
|
79
|
+
- **State change at release** (approve / confirm) — instead of returning to the rest color, swap to `{successColor}` at `RELEASE_START` and pop a checkmark via a separate `back.out(CHECK_BOUNCE)` tween (1.4–2.0, firmer than the button's bounce — a punctuating "stamp"; pop 0.3–0.6 s) at the same position. The button is now terminal — no further presses expected.
|
|
80
|
+
|
|
81
|
+
## Values
|
|
82
|
+
|
|
83
|
+
| token | range | notes |
|
|
84
|
+
| -------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
|
85
|
+
| button footprint | ≥ 3–5% of canvas area | a 320×68 button at 1080p is ~1% and the press reads as visually insignificant |
|
|
86
|
+
| PRESS_SCALE | 0.88 dramatic · 0.92 default · 0.96 subtle | never <0.85 (broken) or >0.98 (no perceptible dip) |
|
|
87
|
+
| PRESS_DUR | 0.10–0.30 s | shorter = snappier; must be shorter than `RELEASE_DUR` (input faster than spring recovery) |
|
|
88
|
+
| RELEASE_DUR | 0.40–0.90 s | shorter = tight pop; longer = loose, wobbly settle |
|
|
89
|
+
| BOUNCE_FACTOR | 1.4 soft · 2.0 firm · 2.8 cartoony | or `elastic.out(amplitude, period)` for a rubbery oscillation instead of one overshoot |
|
|
90
|
+
| RELEASE_START | `= PRESS_START + PRESS_DUR` | adjacency = automatic state continuity |
|
|
91
|
+
| BURST_PEAK_SCALE | 3 subtle · 6 default · 8 max | beyond ~8 the radial gradient pixelates visibly |
|
|
92
|
+
| BURST_PEAK_OPACITY | 0.4–1.0 | grow ≈ fade, 0.4–0.7 s each; blur 40–100 px (hard ring → ambient haze) |
|
|
93
|
+
| BG_GLOW_PEAK_OPACITY | 0.1 subtle · 0.25 default · 0.45 max | higher washes the whole composition; fade-in 0.6–1.0 s; inset −300…−500 px at 1080p |
|
|
94
|
+
|
|
95
|
+
Color tokens: pressed surface darker than rest; rest shadow large + diffuse, pressed small + tight (the button "sinks toward the surface"); burst gradient darker + more saturated than `{btnBg}` — same-color glow looks washed out; bg glow a low-opacity tint of the button's hue family.
|
|
96
|
+
|
|
97
|
+
## Critical Constraints
|
|
98
|
+
|
|
99
|
+
- **State continuity** — release start value exactly equals press end value; enforced by same-property adjacency at `RELEASE_START = PRESS_START + PRESS_DUR`.
|
|
100
|
+
- **Linear press, spring release** — both spring → squishy; both linear → mechanical, no overshoot punch.
|
|
101
|
+
- **Anchor compression on center** (`transform-origin: 50% 50%`) or the button collapses asymmetrically.
|
|
102
|
+
- **Burst behind, not in front** — burst `z-index: 1`, button `z-index: 2`; in front it occludes the button at peak opacity.
|
|
103
|
+
- **Don't tween `boxShadow` and `filter` on the same element** — they compete in the layout pipeline; shadow on the button, blur on the separate burst layer.
|
|
104
|
+
- **Climax dwell** — after the burst peak + reveal, the composition must run ≥ 1 s more (≥ 2 s for dramatic variants); a reveal at `t = DURATION − 0.2 s` reads as "flashed and gone."
|
|
105
|
+
|
|
106
|
+
## See also
|
|
107
|
+
|
|
108
|
+
`spring-pop-entrance` (the ENTRANCE counterpart — arrival, not reaction) · `physics-press-reaction` (this press with a visible cursor actor) · `cursor-click-ripple` (the cursor click that triggers the press) · `sine-wave-loop` (idle micro-float BEFORE the press) · `center-outward-expansion` (badge burst synced to the release).
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reactive-displacement
|
|
3
|
+
description: Physical collision where an entering element's spring drives the exiting element's displacement — single source of truth makes the motion causally linked.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: transition, physics, collision, displacement, spring, causal
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Reactive Displacement
|
|
9
|
+
|
|
10
|
+
Exit animation of element A is mathematically DERIVED from the entry spring of element B — a causal link: "A moves _because_ B hit it." Distinct from [scale-swap-transition.md](scale-swap-transition.md) (which overlaps but isn't causal) and [card-morph-anchor.md](card-morph-anchor.md) (one container morphing).
|
|
11
|
+
|
|
12
|
+
A single 0→1 driver tween (the "entry spring") feeds three concurrent derived motions in one `onUpdate`:
|
|
13
|
+
|
|
14
|
+
- **Intruder** (B, entering): position interpolated off-stage → settled over the full driver, plus tilt settling to 0° and a sharp early opacity reveal.
|
|
15
|
+
- **Victim** (A, exiting): position interpolated settled → off-stage in the OPPOSITE direction, completing at `VICTIM_FRACTION` (~0.4–0.5) of the driver — NOT 1.0.
|
|
16
|
+
|
|
17
|
+
The victim finishing BEFORE the intruder's entry creates the "hit then settle" rhythm; sharing one eased driver makes the impact moment mathematically synchronized.
|
|
18
|
+
|
|
19
|
+
## Recipe
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
// Both cards absolutely centered; overflow: hidden on the scene (off-stage travel);
|
|
23
|
+
// will-change: transform, opacity on both; intruder z-index ABOVE victim.
|
|
24
|
+
const INTRUDER_START_X = STAGE_W; // off-stage right
|
|
25
|
+
const VICTIM_END_X = -STAGE_W; // off-stage left — SAME axis, opposite direction
|
|
26
|
+
|
|
27
|
+
gsap.set("#victim", { x: 0, opacity: 1, rotation: 0 });
|
|
28
|
+
gsap.set("#intruder", { x: INTRUDER_START_X, opacity: 0, rotation: -INTRUDER_TILT });
|
|
29
|
+
|
|
30
|
+
const driver = { p: 0 };
|
|
31
|
+
tl.to(
|
|
32
|
+
driver,
|
|
33
|
+
{
|
|
34
|
+
p: 1,
|
|
35
|
+
duration: DRIVER_DUR,
|
|
36
|
+
ease: `back.out(${BOUNCE_FACTOR})`, // the intruder spring
|
|
37
|
+
onUpdate: () => {
|
|
38
|
+
// Intruder: full 0→1 progress maps enter (off-stage → center)
|
|
39
|
+
const intruderX = INTRUDER_START_X * (1 - driver.p);
|
|
40
|
+
const intruderOpacity = Math.min(1, driver.p * FADE_IN_SHARPNESS);
|
|
41
|
+
const intruderRot = -INTRUDER_TILT * (1 - driver.p); // settles to 0°
|
|
42
|
+
const intruder = document.getElementById("intruder");
|
|
43
|
+
intruder.style.transform = `translate(-50%, -50%) translateX(${intruderX}px) rotate(${intruderRot}deg)`;
|
|
44
|
+
intruder.style.opacity = String(intruderOpacity);
|
|
45
|
+
|
|
46
|
+
// Victim: completes its exit at VICTIM_FRACTION of the driver — by the
|
|
47
|
+
// time the intruder centers, the victim is already off-stage.
|
|
48
|
+
const victimP = Math.min(1, driver.p / VICTIM_FRACTION);
|
|
49
|
+
const victimX = VICTIM_END_X * victimP;
|
|
50
|
+
const victim = document.getElementById("victim");
|
|
51
|
+
victim.style.transform = `translate(-50%, -50%) translateX(${victimX}px)`;
|
|
52
|
+
victim.style.opacity = String(1 - victimP);
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
DRIVER_AT,
|
|
56
|
+
);
|
|
57
|
+
// Climax dwell — intruder holds centered for ≥ DWELL_MIN before the scene ends.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Variations
|
|
61
|
+
|
|
62
|
+
- **Impact rotation on victim** — the victim also rotates as it slides: `const victimRot = victimP * -VICTIM_KICK_DEG;` appended to its transform. `VICTIM_KICK_DEG` 15–25°, magnitude matched to the perceived intruder weight.
|
|
63
|
+
- **Vertical collision** — intruder from top, victim displaced downward; same math on Y. Reads as "weight dropped on it."
|
|
64
|
+
- **Wobble after settle** — after the intruder centers, a damped sine wobble (`±WOBBLE_AMP_DEG` rotation, linearly decaying over `WOBBLE_DUR` via a second `ease: "none"` driver at `DRIVER_AT + DRIVER_DUR`) before stillness — "impact aftermath."
|
|
65
|
+
- **Multi-victim ripple** — the intruder displaces multiple aligned cards, each victim's `victimP` on a slightly offset driver phase (cascade ripple).
|
|
66
|
+
|
|
67
|
+
## Values
|
|
68
|
+
|
|
69
|
+
| token | range | notes |
|
|
70
|
+
| ----------------- | ---------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
71
|
+
| DRIVER_AT | phase-dependent | after the prior reading beat resolves; must leave ≥ DWELL_MIN of climax dwell before the scene ends |
|
|
72
|
+
| DRIVER_DUR | 0.6–1.4 s | short = zippy punch, long = heavy landed impact; higher bounce on long durations reads as floaty |
|
|
73
|
+
| BOUNCE_FACTOR | 1.2–2.0 (typ. 1.4–1.6) | stay in the `back.out` family (or `elastic.out` for oscillation) — changing family rewrites the feel |
|
|
74
|
+
| VICTIM_FRACTION | 0.4–0.5 | <0.4 the victim disappears before the impact reads; >0.5 feels parallel, not causal; hard cap ~0.6 |
|
|
75
|
+
| STAGE_W | ≥ composition width | smaller leaves the off-stage element partially visible at start |
|
|
76
|
+
| INTRUDER_TILT | 5–15° (typ. ~10°) | low = clean glide, high = "spin-and-plant"; sign consistent with entry direction (momentum transfer) |
|
|
77
|
+
| FADE_IN_SHARPNESS | 3–8 | intruder reaches opacity 1 at `1/FADE_IN_SHARPNESS` of progress; must be > 1 or it's transparent at center |
|
|
78
|
+
| DWELL_MIN | ≥ 1.0 s (typ. 1.0–1.5) | post-impact dwell is where the new content gets read — do not skip |
|
|
79
|
+
|
|
80
|
+
## Critical Constraints
|
|
81
|
+
|
|
82
|
+
- **Single driver = single source of truth** — both motions computed inside ONE driver's `onUpdate`, never separate `tl.to()` calls per element; independent tweens destroy the causal link (they'd merely be near each other in time).
|
|
83
|
+
- **Victim completes at a fraction of the driver** — the "hit" is the overlap moment; after it the victim is just vacating space the intruder will fill.
|
|
84
|
+
- **Directional momentum transfer** — same axis, opposite directions; different axes read as passing, not colliding.
|
|
85
|
+
- **Intruder z-index above victim** — explicit, not DOM order; otherwise the victim looks like it tunneled through.
|
|
86
|
+
- **Intruder enters tilted, settles flat** — small initial tilt → 0° reads as "spinning in then planting."
|
|
87
|
+
- **Climax dwell after impact** — the impact is the headline beat; hold the settled intruder ≥ DWELL_MIN.
|
|
88
|
+
- **`overflow: hidden` on the scene** — off-stage motion exceeds the frame.
|
|
89
|
+
|
|
90
|
+
## See also
|
|
91
|
+
|
|
92
|
+
`control-target-sync` (the live-editing mirror — repeated coupled edits, nothing exits) · `hacker-flip-3d` (intruder text reveal during entry) · `sine-wave-loop` (idle breathing during the dwell) · `vertical-spring-ticker` (a ticker that "shoves" the previous content out).
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scale-swap-transition
|
|
3
|
+
description: Coordinated shrink-out + spring pop-in morph-like transition between two elements — no SVG path interpolation needed.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: transition, morph, scale, swap, spring, pop
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Scale-Swap Transition
|
|
9
|
+
|
|
10
|
+
Simulates a "morph" between two DOM elements by overlapping exit and entrance scale animations. Lighter weight than [card-morph-anchor.md](card-morph-anchor.md) (which morphs container dimensions — use that for SHAPE changes; this rule is for SAME-shape state swaps) and easier than SVG path interpolation.
|
|
11
|
+
|
|
12
|
+
At a single trigger, two coordinated tweens fire:
|
|
13
|
+
|
|
14
|
+
1. **Outgoing**: scale `1.0 → EXIT_SCALE` + opacity `1 → 0`, fast `power2.in` (rushing away).
|
|
15
|
+
2. **Incoming**: scale `EXIT_SCALE → 1.0` + opacity `0 → 1`, `back.out(BOUNCE_FACTOR)` (arriving with weight).
|
|
16
|
+
|
|
17
|
+
A small `OVERLAP` window during which both are mid-tween creates the morph illusion; the incoming sits on top via z-index so the outgoing's fade-tail doesn't bleed through.
|
|
18
|
+
|
|
19
|
+
## Recipe
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<!-- Both cards position: absolute; inset: 0 in one fixed-size wrapper — same
|
|
23
|
+
footprint, same transform-origin: 50% 50%. Incoming starts opacity: 0,
|
|
24
|
+
transform: scale(EXIT_SCALE), z-index above the outgoing. -->
|
|
25
|
+
<div class="swap-wrap">
|
|
26
|
+
<div class="card outgoing" id="outgoing">{outgoingIcon} {outgoingLabel}</div>
|
|
27
|
+
<div class="card incoming" id="incoming">
|
|
28
|
+
{incomingIcon} {incomingLabel}
|
|
29
|
+
<div class="sub" id="sub">{incomingSubline}</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```js
|
|
35
|
+
// Outgoing: shrink + fade fast
|
|
36
|
+
tl.to(
|
|
37
|
+
"#outgoing",
|
|
38
|
+
{ scale: EXIT_SCALE, opacity: 0, duration: EXIT_DUR, ease: "power2.in" },
|
|
39
|
+
TRIGGER,
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
// Incoming: pops in with overshoot, starting OVERLAP before the exit finishes
|
|
43
|
+
tl.to(
|
|
44
|
+
"#incoming",
|
|
45
|
+
{ scale: 1.0, opacity: 1, duration: ENTER_DUR, ease: `back.out(${BOUNCE_FACTOR})` },
|
|
46
|
+
TRIGGER + EXIT_DUR - OVERLAP,
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
// Inner content reveals AFTER the incoming settles
|
|
50
|
+
tl.fromTo(
|
|
51
|
+
"#sub",
|
|
52
|
+
{ opacity: 0, y: SUB_REVEAL_Y_PX },
|
|
53
|
+
{ opacity: 1, y: 0, duration: SUB_REVEAL_DUR, ease: "power3.out" },
|
|
54
|
+
TRIGGER + EXIT_DUR + SUB_REVEAL_DELAY,
|
|
55
|
+
);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Variations
|
|
59
|
+
|
|
60
|
+
- **Delayed inner content reveal** — the classic pattern above: morph the container, then reveal inner text once it settles; the 0.2–0.4 s gap lets the eye land on the new shape before reading.
|
|
61
|
+
- **Triple swap (3-state cycle)** — chain A→B→C with triggers `TRIGGER_AB` / `TRIGGER_BC`; each transition is its own tween pair, the previous incoming becoming the next outgoing. State-evolution narratives (early → mid → final labels).
|
|
62
|
+
- **Color-shift transition (no scale)** — for a flat morph between same-shape states, drop the scale and keep opacity + a brief background hue tween; less dramatic, more product-UI tone.
|
|
63
|
+
|
|
64
|
+
## Values
|
|
65
|
+
|
|
66
|
+
| token | range | notes |
|
|
67
|
+
| ---------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------ |
|
|
68
|
+
| TRIGGER | ≥ outgoing settled + a presence-dwell | the outgoing must "land" before transforming |
|
|
69
|
+
| EXIT_DUR | 0.3–0.5 s | |
|
|
70
|
+
| ENTER_DUR | 0.45–0.7 s | longer than `EXIT_DUR` so the overshoot can settle |
|
|
71
|
+
| OVERLAP | 0.1–0.2 s | >0.3 s both are clearly visible together (no morph); <0.05 s leaves a visible empty gap |
|
|
72
|
+
| EXIT_SCALE | 0.6–0.8 | smaller exits feel dramatic but risk reading as "vanish" instead of "morph" |
|
|
73
|
+
| BOUNCE_FACTOR | 1.4 soft · 1.8 firm · 2.2 cartoony | |
|
|
74
|
+
| SUB_REVEAL_DELAY | 0.2–0.4 s | reveals during the morph compete with the swap for attention |
|
|
75
|
+
| BRAND_REVEAL_AT | < TRIGGER | context (brand, eyebrow) sets the stage early; revealed AT the swap it competes with the headline beat |
|
|
76
|
+
|
|
77
|
+
## Critical Constraints
|
|
78
|
+
|
|
79
|
+
- **Incoming z-index ABOVE outgoing** — otherwise the outgoing's fade-tail (opacity 0.3–0.5) bleeds through and double-exposes the frame.
|
|
80
|
+
- **Both elements share `transform-origin: 50% 50%`** — different origins make the morph read as one thing teleporting elsewhere.
|
|
81
|
+
- **Bouncy ease ONLY on the incoming** — outgoing `power2.in`, incoming `back.out`; reversed, the swap feels mechanical.
|
|
82
|
+
- **Both cards `position: absolute; inset: 0`** in the same fixed-size wrapper (sized to fit both states; the wrap never resizes).
|
|
83
|
+
- **Don't `display: none` the outgoing** after the fade — leave it at `opacity: 0` so layout doesn't reflow.
|
|
84
|
+
- **Inner content reveals after the container settles**; **climax dwell ≥ 1 s** after the final state + subline land.
|
|
85
|
+
|
|
86
|
+
## See also
|
|
87
|
+
|
|
88
|
+
`press-release-spring` (a button press TRIGGERS the swap — cause and effect) · `card-morph-anchor` (shape-changing alternative) · `reactive-displacement` (when the replacement should read as a causal collision) · `sine-wave-loop` (idle breathing on the final state).
|
|
@@ -0,0 +1,85 @@
|
|
|
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." First fill the back of a shot with **sequential reveal timed to the VO**; if a frame has genuinely settled and still needs life, the **sanctioned move is subtle jitter** — this rule at the LOW end of its amplitude range. A full breathing loop is the rare last resort on a single held hero, never stamped on every element.
|
|
11
|
+
|
|
12
|
+
Keeps a settled element from feeling dead using `Math.sin` on the timeline clock. Two forms:
|
|
13
|
+
|
|
14
|
+
- **Yoyo form** — one `sine.inOut` tween with `yoyo: true` and a **finite** `repeat` count. Preferred when the idle stands alone on a property nothing else touches.
|
|
15
|
+
- **onUpdate form** — one long `ease: "none"` tween drives a `phase` proxy `0 → 2π·CYCLES`; `onUpdate` maps `Math.sin(phase)` into the transform. Required when the offset multiplies/adds onto another live value (compound transforms, amplitude envelopes, multi-octave).
|
|
16
|
+
|
|
17
|
+
Either way, idle begins where the entry settled: at `phase = 0`, `sin(0) = 0` — the offset is zero, so there is no jump from the entry's resting state.
|
|
18
|
+
|
|
19
|
+
## Recipe
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
// onUpdate form — phase-driven, composable.
|
|
23
|
+
const phase = { p: 0 };
|
|
24
|
+
tl.to(
|
|
25
|
+
phase,
|
|
26
|
+
{
|
|
27
|
+
p: Math.PI * 2 * CYCLES,
|
|
28
|
+
duration: IDLE_DUR,
|
|
29
|
+
ease: "none", // sine provides the easing; a non-linear phase tween distorts the wave
|
|
30
|
+
onUpdate: () => {
|
|
31
|
+
const s = Math.sin(phase.p);
|
|
32
|
+
hero.style.transform = `translateY(${s * Y_AMP_PX}px) scale(${1 + s * SCALE_AMP})`;
|
|
33
|
+
// secondary elements: offset by Math.PI / 2 — synced motion looks mechanical
|
|
34
|
+
dot.style.transform = `scale(${1 + Math.sin(phase.p + Math.PI / 2) * DOT_SCALE_AMP})`;
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
IDLE_START_TIME,
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Yoyo form — standalone property, finite repeats.
|
|
41
|
+
tl.to(
|
|
42
|
+
"#badge",
|
|
43
|
+
{ y: -Y_AMP_PX, duration: PERIOD / 2, ease: "sine.inOut", yoyo: true, repeat: REPEATS },
|
|
44
|
+
IDLE_START_TIME,
|
|
45
|
+
);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Variations
|
|
49
|
+
|
|
50
|
+
- **Multi-octave** (organic): stack a higher-frequency overlay — `1 + Math.sin(p) * AMP_PRIMARY + Math.sin(p * OCTAVE_RATIO) * AMP_SECONDARY`, with `AMP_SECONDARY < AMP_PRIMARY` and the combined max inside the normal SCALE_AMP range.
|
|
51
|
+
- **Settle and fade** (strongly recommended when `IDLE_DUR > 6s`): ramp amplitude to zero over the last ~20% of idle so the scene visibly settles before the inter-scene transition, instead of handing off mid-drift:
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
const t = phase.p / (Math.PI * 2 * CYCLES); // 0 → 1 across idle
|
|
55
|
+
const env = t < 1 - FADE_FRAC ? 1 : (1 - t) / FADE_FRAC; // FADE_FRAC ≈ 0.2
|
|
56
|
+
const scale = 1 + Math.sin(phase.p) * SCALE_AMP * env;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This is the single biggest fix when finalize snapshots show "everything's still moving at the end"; it pairs naturally with break-boundary transitions (the outgoing visual is static when the crossfade/push begins).
|
|
60
|
+
|
|
61
|
+
## Values
|
|
62
|
+
|
|
63
|
+
| token | range / default | notes |
|
|
64
|
+
| --------------- | ------------------------------------ | -------------------------------------------------------------------------- |
|
|
65
|
+
| SCALE_AMP | **0.008–0.015 default** | push to 0.02–0.04 only when isolated on canvas / scene <6s / kinetic brief |
|
|
66
|
+
| Y_AMP_PX | **2–3px default** | 4–6px only under the same gating; rotation ±0.3–0.8° rarely needed at all |
|
|
67
|
+
| period | 1.5–3s (2.5–4s when idle is long) | <1.5s frantic; >4s lifeless in a short window |
|
|
68
|
+
| CYCLES | `IDLE_DUR/3 ≤ CYCLES ≤ IDLE_DUR/1.5` | derive from the period, not the other way round |
|
|
69
|
+
| IDLE_START_TIME | ≥ entry settle + ~0.1s | `sin(0)=0` at this moment → no jump off the entry tail |
|
|
70
|
+
| IDLE_DUR | `TOTAL_DURATION − IDLE_START_TIME` | one long tween fills the hold — never restarted |
|
|
71
|
+
| DOT_SCALE_AMP | 0.04–0.12 | small accents tolerate more than the hero |
|
|
72
|
+
| OCTAVE_RATIO | 2.0–4.0 | integer-ish reads musical; non-integer reads organic |
|
|
73
|
+
|
|
74
|
+
## Critical Constraints
|
|
75
|
+
|
|
76
|
+
- **Prefer reveal, then jitter, then breath** — the doctrine order above; default to the LOW end of every amplitude range. At the upper end across 5+ consecutive scenes the whole film reads as "shimmering".
|
|
77
|
+
- **Long idle window** (`IDLE_DUR > 6s` OR idle > 30% of composition): halve `SCALE_AMP` / `Y_AMP_PX`, slow the period to 3–4s, and add the settle-and-fade tail.
|
|
78
|
+
- **Concurrent idle on N elements** (columns, card grid, stat row): per-element amplitude ≤ default `/ √N`, AND stagger the periods (2.1s / 1.9s / 2.4s). Three columns at ±6px compound to ±18px of competing motion; three at ±2–3px read as one collective breath.
|
|
79
|
+
- **Compose, don't replace** — idle ADDS to the element's resting transform; never overwrite the entry's final translation.
|
|
80
|
+
- **Phase tween `ease: "none"`** — sine itself is the curve.
|
|
81
|
+
- **No CSS `@keyframes` for idle** — CSS animation runs on the browser's render clock, independent of the HF seek clock; a CSS-driven idle flickers/desyncs. Drive idle inside the timeline.
|
|
82
|
+
|
|
83
|
+
## See also
|
|
84
|
+
|
|
85
|
+
`ambient-glow-bloom` (the glow-layer counterpart, same bounded-breathe discipline) · `press-release-spring` / `counting-dynamic-scale` / `card-morph-anchor` / `orbit-3d-entry` (settled elements this can follow) · `spring-pop-entrance` (the arrival that precedes any idle).
|