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,133 @@
|
|
|
1
|
+
# Motion blur — shutter smear on any animated element
|
|
2
|
+
|
|
3
|
+
## Read this part before you blur anything
|
|
4
|
+
|
|
5
|
+
Blur is not polish. It is the smear a real shutter leaves while the subject
|
|
6
|
+
crosses the frame, so it only reads as correct when the subject crosses enough
|
|
7
|
+
of the frame to have smeared. Applied to motion that was never fast enough, it
|
|
8
|
+
reads as a soft, cheap render: the eye sees mush where it expected an edge.
|
|
9
|
+
|
|
10
|
+
Do not blur:
|
|
11
|
+
|
|
12
|
+
| Case | Why | Do instead |
|
|
13
|
+
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ----------------------------------- |
|
|
14
|
+
| Travel under about one element-width per frame | The copies pile up inside the element's own silhouette, so the result is a softer element, not a smear | Leave it sharp |
|
|
15
|
+
| A fade, a color change, a blur-in, a filter beat | Nothing reaches `transform`, so there is no trajectory to integrate and no smear to draw | Leave it sharp |
|
|
16
|
+
| Text meant to be read at that moment | A smeared word is an unreadable word, which is usually the opposite of the brief | Blur the approach, land sharp, hold |
|
|
17
|
+
| A slow drift, a parallax layer, a breathing loop | Below the half-pixel deadband it renders sharp anyway; above it, it looks like a mistake | Leave it sharp |
|
|
18
|
+
| The whole scene, or a container of many elements | Cost is the copies of an entire subtree, and a container that never moves smears nothing inside it | Point it at the element that moves |
|
|
19
|
+
|
|
20
|
+
Blur the beats that snap: a slam, a whip, a hard cut in position, a spin, a
|
|
21
|
+
scale punch. One to three of them in a composition, not every tween.
|
|
22
|
+
|
|
23
|
+
## Two routes, and they are not interchangeable
|
|
24
|
+
|
|
25
|
+
| Route | What it is | Use when |
|
|
26
|
+
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
27
|
+
| The `motion-blur` registry component | A DOM shutter synthesised in the page: N+1 additively blended copies of the element along its sampled trajectory | You want the smear visible in the preview, on selected elements, authored per element |
|
|
28
|
+
| The engine's `motionBlur` render option | The renderer integrates real sub-frame samples of the whole frame | You want every moving thing smeared, including canvas, video and transformed ancestors, and only in the final render |
|
|
29
|
+
|
|
30
|
+
The component smears what a `transform` can express, on the elements you mark.
|
|
31
|
+
The engine smears the frame. The component is the one an agent authors; the
|
|
32
|
+
engine option is a render-time decision and shows nothing in a preview.
|
|
33
|
+
|
|
34
|
+
## The contract: one attribute
|
|
35
|
+
|
|
36
|
+
Paste the component's snippet into the composition, then mark the element:
|
|
37
|
+
|
|
38
|
+
```html
|
|
39
|
+
<div id="root" data-composition-id="hero" data-duration="4" data-fps="30">
|
|
40
|
+
<div id="slam" data-hf-motion-blur></div>
|
|
41
|
+
<div id="title" data-hf-motion-blur='{"shutterAngle": 360}'></div>
|
|
42
|
+
</div>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Nothing to call and no ordering to get right. A marked element is attached as
|
|
46
|
+
soon as its composition's timeline is registered, and the registry is also
|
|
47
|
+
polled for about eight seconds after load, so a composition that mounts
|
|
48
|
+
asynchronously is picked up too. An element takes the timeline registered under
|
|
49
|
+
the `data-composition-id` of its nearest ancestor carrying that attribute, so a
|
|
50
|
+
sub-composition's targets follow that sub-composition.
|
|
51
|
+
|
|
52
|
+
Empty attribute means defaults. Any other value must parse as a JSON object, so
|
|
53
|
+
it needs double quotes on the keys. A value that parses to something else,
|
|
54
|
+
`null` or a bare number, warns and is skipped rather than quietly taken as
|
|
55
|
+
defaults.
|
|
56
|
+
|
|
57
|
+
`attachMotionBlur(target, timeline, options)` is for an element created later
|
|
58
|
+
than that window. It has an ordering contract, after every tween so the
|
|
59
|
+
timeline's final duration is known, and getting it wrong is silent. For markup
|
|
60
|
+
that is already in the document, use the attribute.
|
|
61
|
+
|
|
62
|
+
## Options
|
|
63
|
+
|
|
64
|
+
| Option | Default | Meaning |
|
|
65
|
+
| ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
66
|
+
| `shutterAngle` | 720 | Degrees of the frame interval the shutter is open. 720 is two frames, measured off a real After Effects export. 360 is one frame. 0 disables the smear |
|
|
67
|
+
| `shutterPhase` | -360 | Degrees the window start sits from the frame time. -360 centres the window on the frame |
|
|
68
|
+
| `samplesPerFrame` | 16 | Sub-intervals of the window, so this many plus one copies, each at 1 over this many opacity. Max 64 |
|
|
69
|
+
| `fps` | the `data-fps` of the target's own composition root, else 30 | Composition frame rate. Pass it explicitly when rendering with an fps override |
|
|
70
|
+
|
|
71
|
+
A key that is none of these four, and a value that is not a finite number, are
|
|
72
|
+
both refused by name rather than read as defaults. `{"shutterAngle": "720deg"}`
|
|
73
|
+
is a refusal, not a 720 degree shutter.
|
|
74
|
+
|
|
75
|
+
There is no axis, no strength and no radius. The smear is the trajectory,
|
|
76
|
+
integrated; its extent is speed times shutter time and is not a free parameter.
|
|
77
|
+
A template that passes `axis`, `blurMax` or `blurScale` carries an older fork of
|
|
78
|
+
this snippet and its options do nothing in the current one.
|
|
79
|
+
|
|
80
|
+
## The failure modes are all silent
|
|
81
|
+
|
|
82
|
+
Every one of these renders a plausible-looking sharp element and reports
|
|
83
|
+
nothing except where noted:
|
|
84
|
+
|
|
85
|
+
| Symptom | Cause | Fix |
|
|
86
|
+
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
|
|
87
|
+
| Console warns that no composition registered a timeline for an element | The element is outside every `data-composition-id`, or that composition never registers a timeline | Put it inside the composition's root, or register the timeline |
|
|
88
|
+
| Console warns the attribute is not JSON | Single quotes, unquoted keys, a trailing comma | Double-quoted JSON, or an empty attribute for defaults |
|
|
89
|
+
| Console warns the attribute is not a JSON object | `null`, a bare number, a quoted string, an array | An object, or an empty attribute for defaults |
|
|
90
|
+
| Console warns the attribute names no such option | A misspelled key, for example `samplesperframe` | Use one of the four names above, case-sensitive |
|
|
91
|
+
| Console warns the attribute needs a number for an option | A quoted or unit-suffixed value, for example `"720deg"` | A bare JSON number |
|
|
92
|
+
| Console warns it cannot blur a target inside another target | Both an element and one of its ancestors carry the attribute | Mark one of them, the one that moves |
|
|
93
|
+
| Console warns one call cannot blur compositions at different frame rates | One `attachMotionBlur` call named elements in two compositions whose `data-fps` differ | One call per composition |
|
|
94
|
+
| Console warns a second timeline registered for an element | The same `data-composition-id` key was registered twice with different timelines; the copies still follow the first | Register once per composition |
|
|
95
|
+
| No smear, no warning | The beat animates `left`, `top`, `width` or `height`; the snippet reads the resolved `transform` | Animate `x`, `y`, `scale`, `rotation` |
|
|
96
|
+
| No smear on a container's children | The marked element does not move; its children do | Mark the elements that move |
|
|
97
|
+
| A smear that lags the element | A transformed ancestor is doing the moving | Move the element itself, or use the engine route |
|
|
98
|
+
| Blur only on the first frame, or never in a preview | The host never seeks the timeline | HyperFrames seeks every frame; a paused timeline nobody seeks shows nothing |
|
|
99
|
+
| A smear left behind in the old parent | The target was reparented after attaching; the group stays where it was inserted and is never moved | Do not reparent a blurred element. Animate `x`/`y` instead, or attach after the move |
|
|
100
|
+
| A selector stops matching after attaching | A copy keeps the element's classes, because a class rule is the only thing that can style a copy's pseudo-elements | Address the element by id or by reference, never by a class a copy also carries |
|
|
101
|
+
|
|
102
|
+
## Cost
|
|
103
|
+
|
|
104
|
+
Each target costs N+1 copies of its whole subtree. Those are restyled on attach
|
|
105
|
+
and on resize, and re-transformed every frame, and the timeline is seeked N+1
|
|
106
|
+
times per frame to sample the trajectory. At the default 16 that is 17 copies
|
|
107
|
+
and 17 seeks per target per frame. Three marked elements is fine. Thirty is a
|
|
108
|
+
different render.
|
|
109
|
+
|
|
110
|
+
Drop `samplesPerFrame` before you drop the effect: 8 halves the cost and the
|
|
111
|
+
staircase is still smooth on a fast beat.
|
|
112
|
+
|
|
113
|
+
## The numbers, so you can argue with them
|
|
114
|
+
|
|
115
|
+
The defaults are measured against a 1920x1080 30 fps After Effects export of
|
|
116
|
+
translating text, not chosen. In that export the outermost trailing copy sits
|
|
117
|
+
exactly at the previous frame's position and the outermost leading copy exactly
|
|
118
|
+
at the next frame's, with 8 evenly spaced copies between on each side: a window
|
|
119
|
+
of two frames, phase minus one frame, 16 sub-intervals. The staircase across a
|
|
120
|
+
stroke steps by 0.063 plus or minus 0.002 of the sharp text intensity, a flat
|
|
121
|
+
1/16 per copy with no taper toward the window edges. Triangle weighting scores
|
|
122
|
+
1.6 dB worse against the same export.
|
|
123
|
+
|
|
124
|
+
Per-beat PSNR against that reference, sharp render versus this component:
|
|
125
|
+
translate +3.38 dB, scale +0.62, rotate X +0.43, rotate Y +0.84, rotate Z
|
|
126
|
+
+1.15. A beat that only scales or only rotates smears, which the earlier
|
|
127
|
+
SVG-filter stage could not do.
|
|
128
|
+
|
|
129
|
+
## See also
|
|
130
|
+
|
|
131
|
+
`../../registry/components/motion-blur/motion-blur.html` is the snippet and its
|
|
132
|
+
full header. `shutter-slam` is the same model as an installable component: the
|
|
133
|
+
After Effects reference case, six beats, elastic to the container.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 3d-camera-flight
|
|
3
|
+
description: Perspective camera FLIGHT through a 3D-laid-out world — one static perspective stage + preserve-3d world whose pose (translate3d + rotateX/rotateY) is tweened leg-by-leg from a single camera state object. Dive into an angled grid, tilt-to-flatten pull-back, continuous flight past standing cards, decelerate-into-focus. Hard power4.out landings, power2.inOut repositioning; DoF via depth-of-field-blur on non-focal planes.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: camera, 3d, flight, perspective, preserve-3d, rotateX, rotateY, translateZ, dive, tilt, world, cinematic
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 3D Camera Flight
|
|
9
|
+
|
|
10
|
+
Every other camera rule here is a **2D camera**: [viewport-change.md](viewport-change.md), [multi-phase-camera.md](multi-phase-camera.md), and [coordinate-target-zoom.md](coordinate-target-zoom.md) simulate the camera with `scale` + `translate` on a flat wrapper — the lens never tilts, and there is no depth axis to travel along. [3d-page-scroll.md](3d-page-scroll.md) is a **static tilt**: one angle held all scene while content scrolls inside. This rule is the missing camera that _flies_ — dives into an angled grid, pulls back while the world rotates flat, streaks past standing cards, decelerates out of a blur into focus: a **perspective camera traveling with `rotateX` / `rotateY` / `translateZ` through a 3D-laid-out world**, under the same single-camera discipline as `viewport-change`: **one perspective wrapper, one camera state object, one transform writer**, every leg a sequenced tween on that state.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
Five layers, strictly separated:
|
|
15
|
+
|
|
16
|
+
1. **The lens** — `perspective: PERSPECTIVE_PX` on a static `.stage` wrapper. Set once, never tweened, never moved. Changing perspective mid-shot reads as the lens itself warping, not the camera moving.
|
|
17
|
+
2. **The world** — a `.world` div with `transform-style: preserve-3d`, laid out at final 1× size: the ground surface (grid, form card, canvas) as flat DOM, optional **props** (a giant date number, a floating label) at static `translateZ(PROP_Z)` offsets so travel produces parallax, and **standing cards** counter-tilted to face the camera at their landing pose.
|
|
18
|
+
3. **The camera state** — a single object `cam = { x, y, z, rx, ry }` (the world's pose), written to `world.style.transform` by ONE function, `applyCamera()`, in a **fixed order**: `translate3d(x, y, z) rotateX(rx) rotateY(ry)`. With translate composed _outside_ the rotations, `x`/`y`/`z` always move the world along **screen axes** no matter how it is currently tilted — pan is always sideways, `z` is always toward/away from the lens. Put the rotations first and every leg's numbers change meaning as the tilt changes.
|
|
19
|
+
4. **The legs** — sequential tweens on `cam`, each one camera move: dive in (`power4.out` — violent arrival, sharp settle), tilt-to-flatten pull-back (`power2.inOut` — a repositioning, no slam), lateral flight, final dive. Camera intent inverts onto the world pose exactly as in `viewport-change`: camera flies **in** → world `z` **increases** (comes toward the lens); camera pans **right** → world `x` **negative**; camera tilts **down** over the surface → world `rx` **positive** (far edge tips away).
|
|
20
|
+
5. **Depth cues** — DoF via [depth-of-field-blur.md](depth-of-field-blur.md) `--dof` tweens on the **non-focal planes** (cards, props — leaf elements, never the world itself), and velocity blur on travel legs via [motion-blur-streak.md](motion-blur-streak.md)'s Camera-Travel Carve-Out — applied to the **stage**, never the world (a `filter` on a `preserve-3d` element flattens it).
|
|
21
|
+
|
|
22
|
+
Landing poses are **authored, not derived**: set `cam` to candidate values at design time, call `applyCamera()`, screenshot, adjust, bake the numbers as constants. There is no counter-translate formula to get wrong in 3D — the pose IS the design decision. Never measure per-frame (`getBoundingClientRect` in `onUpdate` desyncs under parallel frame sampling), and don't hand-derive 3D projections — your eye at design time beats the math.
|
|
23
|
+
|
|
24
|
+
## Recipe
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
<!-- The lens: static perspective, nothing else. -->
|
|
28
|
+
<div class="stage">
|
|
29
|
+
<!-- The world: preserve-3d, laid out at final 1× size; the camera flies by
|
|
30
|
+
tweening THIS element's pose. Travel legs push content past the frame
|
|
31
|
+
edges by design — hence data-layout-allow-overflow. -->
|
|
32
|
+
<div class="world" id="world" data-layout-allow-overflow>
|
|
33
|
+
<div class="surface">
|
|
34
|
+
<div class="grid">{gridCells}</div>
|
|
35
|
+
<div class="card layer" id="card-a" data-depth="0">{cardA}</div>
|
|
36
|
+
<div class="card layer" id="card-b" data-depth="0">{cardB}</div>
|
|
37
|
+
</div>
|
|
38
|
+
<!-- Foreground props float at PROP_Z for parallax; they blur and fly past,
|
|
39
|
+
never carry a read. -->
|
|
40
|
+
<div class="prop layer" data-depth="2" style="--px: PROP_X; --py: PROP_Y">{propGlyph}</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```css
|
|
46
|
+
.scene {
|
|
47
|
+
overflow: hidden; /* travel legs push world content past the frame on purpose */
|
|
48
|
+
background: {sceneBg}; /* the void the flight exposes at frame edges — must be a
|
|
49
|
+
designed surface (deep brand color / soft gradient), never default white */
|
|
50
|
+
}
|
|
51
|
+
.stage {
|
|
52
|
+
position: absolute;
|
|
53
|
+
inset: 0;
|
|
54
|
+
perspective: PERSPECTIVE_PX; /* THE LENS — static, never tweened */
|
|
55
|
+
/* travel blur (motion-blur-streak carve-out) attaches HERE, never on .world */
|
|
56
|
+
}
|
|
57
|
+
.world {
|
|
58
|
+
position: absolute;
|
|
59
|
+
inset: 0;
|
|
60
|
+
transform-style: preserve-3d;
|
|
61
|
+
transform-origin: 50% 50%;
|
|
62
|
+
will-change: transform;
|
|
63
|
+
/* keep CLEAN: no filter, opacity < 1, overflow, clip-path, or mask — each
|
|
64
|
+
flattens preserve-3d. Background on .scene, blur on .stage or leaf cards. */
|
|
65
|
+
}
|
|
66
|
+
.surface {
|
|
67
|
+
position: absolute;
|
|
68
|
+
inset: WORLD_INSET; /* world runs larger than the frame so travel has runway */
|
|
69
|
+
transform-style: preserve-3d;
|
|
70
|
+
}
|
|
71
|
+
.prop {
|
|
72
|
+
position: absolute;
|
|
73
|
+
left: var(--px);
|
|
74
|
+
top: var(--py);
|
|
75
|
+
/* static world-space pose; counter-tilt faces the camera at the dive pose */
|
|
76
|
+
transform: translateZ(PROP_Z) rotateX(PROP_COUNTER_TILT);
|
|
77
|
+
}
|
|
78
|
+
.layer {
|
|
79
|
+
--dof: 0px; /* DoF channel per depth-of-field-blur — leaf elements only */
|
|
80
|
+
filter: blur(var(--dof));
|
|
81
|
+
will-change: filter;
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
const world = document.getElementById("world");
|
|
87
|
+
|
|
88
|
+
// Camera state — the ONLY source of truth for the world's pose. Every leg
|
|
89
|
+
// tweens this object; nothing else touches world.style.transform.
|
|
90
|
+
const cam = { x: 0, y: 0, z: WIDE_Z, rx: 0, ry: 0 };
|
|
91
|
+
|
|
92
|
+
function applyCamera() {
|
|
93
|
+
// Fixed order: translate OUTSIDE the rotations → x/y/z stay screen-aligned
|
|
94
|
+
// at any tilt. Changing this order changes what every baked pose means.
|
|
95
|
+
world.style.transform = `translate3d(${cam.x}px, ${cam.y}px, ${cam.z}px) rotateX(${cam.rx}deg) rotateY(${cam.ry}deg)`;
|
|
96
|
+
}
|
|
97
|
+
applyCamera(); // seed frame 0 so a seek to t=0 renders the opening pose
|
|
98
|
+
|
|
99
|
+
// ── LEG 1 — DIVE IN: wide establishing pose → angled close-up on card A.
|
|
100
|
+
// fromTo states the opening pose explicitly; power4.out = violent arrival,
|
|
101
|
+
// razor-sharp settle. Travel blur: motion-blur-streak carve-out on .stage.
|
|
102
|
+
const DIVE_POSE = { x: DIVE_X, y: DIVE_Y, z: DIVE_Z, rx: DIVE_RX, ry: DIVE_RY };
|
|
103
|
+
tl.fromTo(
|
|
104
|
+
cam,
|
|
105
|
+
{ x: 0, y: 0, z: WIDE_Z, rx: 0, ry: 0 },
|
|
106
|
+
{ ...DIVE_POSE, duration: DIVE_DUR, ease: "power4.out", onUpdate: applyCamera },
|
|
107
|
+
DIVE_AT,
|
|
108
|
+
);
|
|
109
|
+
// Decelerate-INTO-FOCUS: non-focal planes' --dof ramps to BLUR_PER_DEPTH × data-depth
|
|
110
|
+
// on the SAME window/ease (depth-of-field-blur focal pull); card A stays at --dof: 0.
|
|
111
|
+
|
|
112
|
+
// ── LEG 2 — TILT-TO-FLATTEN PULL-BACK: every channel returns to neutral on ONE
|
|
113
|
+
// power2.inOut tween — a reposition, not a slam. DoF releases on the same window
|
|
114
|
+
// so the flat overview arrives fully crisp.
|
|
115
|
+
const FLAT_POSE = { x: 0, y: 0, z: 0, rx: 0, ry: 0 };
|
|
116
|
+
tl.to(
|
|
117
|
+
cam,
|
|
118
|
+
{ ...FLAT_POSE, duration: FLATTEN_DUR, ease: "power2.inOut", onUpdate: applyCamera },
|
|
119
|
+
FLATTEN_AT,
|
|
120
|
+
);
|
|
121
|
+
tl.to(".layer", { "--dof": "0px", duration: FLATTEN_DUR, ease: "power2.inOut" }, FLATTEN_AT);
|
|
122
|
+
|
|
123
|
+
// ── LEG 3 — LATERAL FLIGHT: screen-aligned pan (translate is outside the
|
|
124
|
+
// rotations, so x is a pure sideways move even mid-tilt).
|
|
125
|
+
tl.to(cam, { x: PAN_X, duration: PAN_DUR, ease: "power2.inOut", onUpdate: applyCamera }, PAN_AT);
|
|
126
|
+
|
|
127
|
+
// ── LEG 4 — FINAL DIVE onto card B: same grammar as leg 1; card A racks OUT of
|
|
128
|
+
// focus as card B racks in (depth-of-field-blur rack, shared window).
|
|
129
|
+
const LAND_POSE = { x: LAND_X, y: LAND_Y, z: LAND_Z, rx: LAND_RX, ry: LAND_RY };
|
|
130
|
+
tl.to(
|
|
131
|
+
cam,
|
|
132
|
+
{ ...LAND_POSE, duration: LAND_DUR, ease: "power4.out", onUpdate: applyCamera },
|
|
133
|
+
LAND_AT,
|
|
134
|
+
);
|
|
135
|
+
tl.to("#card-a", { "--dof": `${MAX_BLUR}px`, duration: LAND_DUR, ease: "power4.out" }, LAND_AT);
|
|
136
|
+
tl.to("#card-b", { "--dof": "0px", duration: LAND_DUR, ease: "power4.out" }, LAND_AT);
|
|
137
|
+
// Landing dwell: ≥1 s of stillness on card B — unless ending held mid-dive.
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Variations
|
|
141
|
+
|
|
142
|
+
- **Continuous flight past standing cards** — one long leg instead of dive-land-dive: sustained `z` + `x` travel (2–4 s, `power2.inOut` / `power1.inOut` near-constant cruise) through a corridor of cards and props at staggered `PROP_Z`. Parallax does the work — near props streak past while far ones crawl. Keep ONE plane sharp at a time via staggered `--dof` tweens. Props crossing the camera plane (`cam.z + PROP_Z` approaching `PERSPECTIVE_PX`) blow up to fill the frame and vanish — that IS the fly-past; never let a focal card cross it.
|
|
143
|
+
- **End held mid-dive** — give the final leg a window that overruns the composition (`LAND_AT + LAND_DUR > data-duration`); the last frame holds mid-tween — still traveling, blur not fully resolved. Seek-safe by construction (a seek to the last frame lands at a deterministic pose); don't fake it with a shorter leg plus a manual offset. Use when the brief wants momentum at the cut, not rest.
|
|
144
|
+
- **Whip sweep** — the heavily motion-blurred lateral whip that resolves into the next region: leg 3 driven by [nudge-curve.md](nudge-curve.md)'s three-phase chain (burst-dominant) on `cam.x`, with [motion-blur-streak.md](motion-blur-streak.md)'s Camera-Travel Carve-Out on the same window — blur ramps through the ramp-in, rides the burst at peak, resolves to 0 through the `power4.out` tail. Full recipe in that carve-out.
|
|
145
|
+
- **Hold drift (the hold never dies)** — between legs, fold `multi-phase-camera`-style micro-drift **through the same writer**: a driver tween writes tiny `dx`/`dy`/`drx` into a `drift` object and `applyCamera()` composes `cam.x + drift.dx`, `cam.rx + drift.drx`, etc. Never let drift write `world.style.transform` itself — two writers on one transform is the classic camera bug. Amplitudes per `multi-phase-camera` (2–8 px), rotation drift ≤ 0.5°.
|
|
146
|
+
|
|
147
|
+
## Values
|
|
148
|
+
|
|
149
|
+
| token | range | notes |
|
|
150
|
+
| ------------------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
151
|
+
| PERSPECTIVE_PX | 700–1400 px (moving cam best 800–1200) | smaller = wilder foreshortening, more violent dives; larger = near-orthographic, the flight flattens |
|
|
152
|
+
| WORLD_INSET | −50% to −150% per side | world 2–4× the frame so lateral legs have runway |
|
|
153
|
+
| PROP_Z | 80–300 px | higher = stronger parallax, earlier fly-past |
|
|
154
|
+
| PROP_COUNTER_TILT | ≈ `-LAND_RX` of the leg that reads it | author by eye and bake |
|
|
155
|
+
| DIVE_RX / LAND_RX | 30–55° | "angled grid" starts ~30°; \|rx\| ≤ ~65°, \|ry\| ≤ ~30° — beyond that flat planes go edge-on, text unreadable |
|
|
156
|
+
| DIVE_Z / LAND_Z | 300–700 px at PERSPECTIVE_PX ≈ 1000 | **Z budget**: `cam.z + PROP_Z ≤ ~0.6 × PERSPECTIVE_PX` for readable content — near the perspective distance, scale blows toward infinity and elements invert/vanish past the camera plane |
|
|
157
|
+
| WIDE_Z | −100 to −400 px | negative z = world pushed away = camera wide |
|
|
158
|
+
| DIVE_X/Y, LAND_X/Y | read off a screenshot at the baked tilt | screen-aligned (translate outside rotations) |
|
|
159
|
+
| DIVE_DUR / LAND_DUR | 0.6–1.0 s | commitment, not a polite zoom; under 0.5 s reads as a cut |
|
|
160
|
+
| FLATTEN_DUR | 1.2–2.0 s | the repositioning is the breath between dives |
|
|
161
|
+
| PAN_DUR | 0.8–1.5 s plain; 0.5–0.8 s whip | |
|
|
162
|
+
| Ease law | `power4.out` dives/landings; `power2.inOut` repositioning/cruise | spring/back on a camera reads as the world wobbling on a string; four identical pushes read as a slideshow — vary the leg verbs |
|
|
163
|
+
| Holds | ≥ 0.8 s between legs; final dwell ≥ 1 s | unless ending held mid-dive |
|
|
164
|
+
| BLUR_PER_DEPTH / MAX_BLUR | per [depth-of-field-blur.md](depth-of-field-blur.md) | 3–6 px per step, terminal 8–24 px, leaf elements only; travel-blur peak per [motion-blur-streak.md](motion-blur-streak.md) (~18–20 px full-frame, on `.stage`) |
|
|
165
|
+
|
|
166
|
+
## Critical Constraints
|
|
167
|
+
|
|
168
|
+
- **One lens, one state, one writer** — `perspective` on the static `.stage` only (never on `.world`, never tweened, never a second perspective wrapper inside); every leg tweens the single `cam` object; only `applyCamera()` writes the transform — drift folds into the same writer via additive state. Two writers (or a second transform sneaking in via CSS) is the classic broken-camera bug, five channels of it here.
|
|
169
|
+
- **Fixed transform order: translate outside the rotations** — `translate3d(x,y,z) rotateX() rotateY()`. Reorder it and every pose you authored silently means something else.
|
|
170
|
+
- **Keep the world CLEAN** — `filter`, `opacity < 1`, `overflow` other than `visible`, `clip-path`, or `mask` on `.world` (or any intermediate wrapper) forces used `transform-style: flat` and collapses every `translateZ` in the scene. Travel blur goes on `.stage`; DoF on leaf cards; fades on children; background on `.scene`. `transform-style: preserve-3d` on `.world` and every intermediate wrapper between it and 3D-positioned children.
|
|
171
|
+
- **Camera intent inverts onto the world** — fly in = world z up, pan right = world x negative, tilt down = world rx positive. Same sign law as `viewport-change`, two more axes to get right.
|
|
172
|
+
- **Poses authored and baked** — never measured per-frame, never hand-derived projections.
|
|
173
|
+
- **First leg is a `fromTo`** AND `applyCamera()` runs once at setup — a seek to t=0 must render the exact establishing pose.
|
|
174
|
+
- **Z budget** — only sacrificial props may cross the camera plane.
|
|
175
|
+
- **Reads happen at landings** — angled, blurred, flying text is texture; anything the viewer must read gets a near-flat pose or a sharp held close-up ≥ 1 s (the tilt-to-flatten leg exists to hand the surface over for reading).
|
|
176
|
+
- **`overflow: hidden` on `.scene` + `data-layout-allow-overflow` on `.world`** — travel legs deliberately push panels past the frame; without the pairing, `check` reports `container_overflow` for every region the flight leaves behind.
|
|
177
|
+
|
|
178
|
+
## See also
|
|
179
|
+
|
|
180
|
+
[viewport-change.md](viewport-change.md) (2D counterpart, same single-writer law — right when the shot never tilts) · [multi-phase-camera.md](multi-phase-camera.md) (leg-sequencing grammar + hold micro-drift) · [coordinate-target-zoom.md](coordinate-target-zoom.md) (aim math for a flat-hold zoom while `rx`/`ry` are 0) · [depth-of-field-blur.md](depth-of-field-blur.md) (non-focal defocus / racks) · [motion-blur-streak.md](motion-blur-streak.md) (travel blur on the stage) · [nudge-curve.md](nudge-curve.md) (whip-sweep burst tuning) · [3d-page-scroll.md](3d-page-scroll.md) (static-tilt cousin — camera should NOT travel) · [orbit-3d-entry.md](orbit-3d-entry.md) / [depth-scatter-assemble.md](depth-scatter-assemble.md) (elements moving under a still camera — the inverse; don't run both on one beat). Capability background: `../techniques.md` § CSS 3D Transforms.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 3d-page-scroll
|
|
3
|
+
description: Full webpage rendered as tilted 3D card that scrolls to reveal specific sections.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: 3d, page, scroll, webpage, tilt, product-demo, perspective
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 3D Page Scroll
|
|
9
|
+
|
|
10
|
+
A webpage (or long content) presented as a tilted 3D card. Spring-eased scroll reveals specific sections while the static 3D perspective adds physical depth. (For a camera that actually travels/tilts, see [3d-camera-flight.md](3d-camera-flight.md) — this rule's tilt never moves.)
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
Two independent transforms combine:
|
|
15
|
+
|
|
16
|
+
1. **3D tilt** — static `rotateY` + `rotateX` with `perspective` on the card. The angle does **not** change during the scene.
|
|
17
|
+
2. **Scroll** — the content inside the card translates vertically (`y` in GSAP) within a clipped container; spring-like deceleration via `power3.out` / `power4.out`.
|
|
18
|
+
|
|
19
|
+
Optional: **spotlight overlay** — a radial-gradient mask dims everything except a focal region after the scroll lands. It sits above the scrolling content, fixed relative to the card, never inside `.page-content`.
|
|
20
|
+
|
|
21
|
+
## Recipe
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<div class="tilt-card">
|
|
25
|
+
<div class="page-content">
|
|
26
|
+
<!-- Full {Brand} webpage recreation, taller than the card so scrolling
|
|
27
|
+
matters. Each section is REAL DOM, not a screenshot — screenshots
|
|
28
|
+
can't be individually highlighted or scrolled-to with precision. -->
|
|
29
|
+
<section class="page-hero">{heroContents}</section>
|
|
30
|
+
<section class="page-features">{featuresContents}</section>
|
|
31
|
+
<section class="page-target" id="target-section">{targetContents}</section>
|
|
32
|
+
<section class="page-cta">{ctaContents}</section>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="spotlight"></div>
|
|
35
|
+
</div>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```css
|
|
39
|
+
.tilt-card {
|
|
40
|
+
position: absolute;
|
|
41
|
+
left: 50%;
|
|
42
|
+
top: 50%;
|
|
43
|
+
/* tilt + perspective in CSS only if no other transform tween touches this
|
|
44
|
+
element — if GSAP also tweens scale on .tilt-card, set the tilt via
|
|
45
|
+
gsap.set() instead to avoid matrix overwrites */
|
|
46
|
+
transform: translate(-50%, -50%) perspective({perspectivePx}) rotateY({tiltYDeg}) rotateX({tiltXDeg});
|
|
47
|
+
transform-style: preserve-3d;
|
|
48
|
+
width: {cardWidth};
|
|
49
|
+
height: {cardHeight};
|
|
50
|
+
border-radius: 24px;
|
|
51
|
+
background: {cardBackgroundColor};
|
|
52
|
+
overflow: hidden; /* clip the scrolling content at the rounded corners */
|
|
53
|
+
/* shadow X-offset sign must match tiltY sign (negative tiltY ⇒ positive X) */
|
|
54
|
+
box-shadow: 40px 30px 80px rgba(0, 0, 0, 0.45);
|
|
55
|
+
}
|
|
56
|
+
.page-content {
|
|
57
|
+
position: absolute;
|
|
58
|
+
top: 0;
|
|
59
|
+
left: 0;
|
|
60
|
+
width: 100%;
|
|
61
|
+
/* height intrinsic from sections — taller than the card */
|
|
62
|
+
}
|
|
63
|
+
.spotlight {
|
|
64
|
+
position: absolute;
|
|
65
|
+
inset: 0;
|
|
66
|
+
pointer-events: none;
|
|
67
|
+
opacity: 0;
|
|
68
|
+
background: radial-gradient(ellipse 60% 35% at 50% 50%, transparent 50%, {spotlightDimColor} 100%);
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```js
|
|
73
|
+
// SCROLL_DISTANCE is measured at design time from the real page layout
|
|
74
|
+
// (top of .page-content origin to vertical center of #target-section,
|
|
75
|
+
// accounting for card height) — NOT a free tunable.
|
|
76
|
+
tl.to(
|
|
77
|
+
".page-content",
|
|
78
|
+
{ y: -SCROLL_DISTANCE, duration: SCROLL_DUR, ease: "power3.out" },
|
|
79
|
+
SCROLL_AT,
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
// Spotlight fades in on the target after the scroll settles.
|
|
83
|
+
tl.to(
|
|
84
|
+
".spotlight",
|
|
85
|
+
{ opacity: 1, duration: SPOTLIGHT_FADE_DUR, ease: "power1.inOut" },
|
|
86
|
+
SPOTLIGHT_AT,
|
|
87
|
+
);
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Variations
|
|
91
|
+
|
|
92
|
+
**Multi-step scroll (scroll → pause → scroll)** — multiple `y:` tweens at different positions. Distances are both measured from the `.page-content` origin (NOT delta from the previous step); GSAP composes successive `y:` tweens on the same property, each starting from the value the previous one left:
|
|
93
|
+
|
|
94
|
+
```js
|
|
95
|
+
tl.to(
|
|
96
|
+
".page-content",
|
|
97
|
+
{ y: -SCROLL_DISTANCE_A, duration: SCROLL_DUR, ease: "power3.out" },
|
|
98
|
+
SCROLL_AT_A,
|
|
99
|
+
);
|
|
100
|
+
tl.to(
|
|
101
|
+
".page-content",
|
|
102
|
+
{ y: -SCROLL_DISTANCE_B, duration: SCROLL_DUR, ease: "power3.out" },
|
|
103
|
+
SCROLL_AT_B,
|
|
104
|
+
);
|
|
105
|
+
// SCROLL_AT_A + SCROLL_DUR ≤ SCROLL_AT_B — the two scrolls must not fight for y
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Values
|
|
109
|
+
|
|
110
|
+
| token | range / rule | notes |
|
|
111
|
+
| ------------------ | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
112
|
+
| tiltYDeg | −12 to −4 (left-leaning) or 4 to 12 | bigger = more dramatic 3D; near 0 collapses to a flat panel |
|
|
113
|
+
| tiltXDeg | 0–6 | positive tilts the top edge away |
|
|
114
|
+
| perspectivePx | 800–2000 px | smaller = more foreshortening; larger = nearly orthographic |
|
|
115
|
+
| cardWidth / Height | card height < total content height | otherwise the scroll has nothing to reveal |
|
|
116
|
+
| sectionHeight | Σ heights ≥ cardHeight + SCROLL_DISTANCE | so the target section lands within frame |
|
|
117
|
+
| SCROLL_AT | ≥ end of prior tweens on `.page-content` | |
|
|
118
|
+
| SCROLL_DUR | 0.8–1.8 s | shorter feels like a hard cut; longer feels programmatic |
|
|
119
|
+
| SCROLL_DISTANCE | measured from the layout | from actual cumulative section heights — never estimated; don't overshoot content end |
|
|
120
|
+
| SPOTLIGHT_AT | ≥ SCROLL_AT + SCROLL_DUR (or slightly earlier) | spotlight reveals the freshly-arrived section |
|
|
121
|
+
| SPOTLIGHT_FADE_DUR | 0.4–0.8 s | |
|
|
122
|
+
| Ease | `power3.out` default; `power4.out` momentum; `power2.inOut` cinematic pan | pick ONE for all scrolls in the scene — mixing easings reads as jerky |
|
|
123
|
+
|
|
124
|
+
## Critical Constraints
|
|
125
|
+
|
|
126
|
+
- **Tilt is static** — the card holds its angle the whole scene.
|
|
127
|
+
- **Shadow direction matches tilt** — a left-leaning card casts shadow to the right (positive X offset); mismatch breaks the 3D illusion.
|
|
128
|
+
- **Page content is real HTML, not a screenshot**; scroll distances come from the real layout geometry.
|
|
129
|
+
- **`overflow: hidden` + `transform-style: preserve-3d` on `.tilt-card`** — clip at the rounded corners; preserve-3d for any 3D children / clean perspective composition.
|
|
130
|
+
- **Spotlight is an overlay above the scrolling content**, never inside `.page-content`.
|
|
131
|
+
- **Same easing across a multi-phase scroll**, and non-overlapping scroll windows.
|
|
132
|
+
|
|
133
|
+
## See also
|
|
134
|
+
|
|
135
|
+
[asr-keyword-glow.md](asr-keyword-glow.md) (on-page keyword highlight synced to VO) · [multi-phase-camera.md](multi-phase-camera.md) (camera zoom while the page scrolls) · [cursor-click-ripple.md](cursor-click-ripple.md) (cursor lands in the scrolled-into-view section) · [3d-camera-flight.md](3d-camera-flight.md) (when the camera itself should travel).
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 3d-text-depth-layers
|
|
3
|
+
description: Multiple offset text layers create a stacked 3D shadow / extrusion effect on large typography — more impactful than CSS text-shadow because each layer is a full DOM element.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: text, 3d, depth, layers, shadow, typography, stacked, extrusion
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 3D Text Depth Layers
|
|
9
|
+
|
|
10
|
+
The same text rendered N times at increasing offsets — back layers translucent, front layer full opacity and brand color — creates a physical "stacked extrusion" depth illusion on large typography. Distinct from `text-shadow` (which can't have per-layer hue / opacity / animation): each layer is a real DOM element.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
A build script appends `LAYER_COUNT` copies back-to-front; each back layer sits at `translate(i × OFFSET_X, i × OFFSET_Y)` with alpha stepping down per layer, while the front copy (`i = 0`) is `position: relative` so it defines the container size (back layers stack absolutely behind it). The default entrance cascades the layers' fades back-to-front while a proxy tween grows the offsets from 0 → full, so the depth "builds forward" and lands as the last layer fades in.
|
|
15
|
+
|
|
16
|
+
## Recipe
|
|
17
|
+
|
|
18
|
+
```html
|
|
19
|
+
<!-- inside a standard scene clip (hyperframes-core) -->
|
|
20
|
+
<div class="depth-stack">
|
|
21
|
+
<!-- layers injected by script — LAYER_COUNT copies of {label} -->
|
|
22
|
+
</div>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```css
|
|
26
|
+
.depth-stack {
|
|
27
|
+
position: relative; /* front layer defines size; back layers stack behind */
|
|
28
|
+
}
|
|
29
|
+
.depth-text {
|
|
30
|
+
font-weight: 900; /* black weight — thin text loses the illusion */
|
|
31
|
+
font-size: HERO_FONT_SIZE;
|
|
32
|
+
letter-spacing: HERO_LETTER_SPACING;
|
|
33
|
+
line-height: 1;
|
|
34
|
+
color: {frontColor};
|
|
35
|
+
}
|
|
36
|
+
.depth-text.is-back {
|
|
37
|
+
position: absolute;
|
|
38
|
+
top: 0;
|
|
39
|
+
left: 0;
|
|
40
|
+
pointer-events: none; /* decorative */
|
|
41
|
+
}
|
|
42
|
+
.depth-text.is-front {
|
|
43
|
+
position: relative;
|
|
44
|
+
z-index: 10;
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
const stack = document.querySelector(".depth-stack");
|
|
50
|
+
|
|
51
|
+
// Build back-to-front so the FRONT (i=0) is appended LAST
|
|
52
|
+
for (let i = LAYER_COUNT - 1; i >= 0; i--) {
|
|
53
|
+
const el = document.createElement("div");
|
|
54
|
+
el.className = "depth-text " + (i === 0 ? "is-front" : "is-back");
|
|
55
|
+
el.textContent = "{label}";
|
|
56
|
+
if (i > 0) {
|
|
57
|
+
const alpha = Math.max(BACK_ALPHA_MAX - i * BACK_ALPHA_STEP, BACK_ALPHA_MIN);
|
|
58
|
+
el.style.color = `rgba({backHueRGB}, ${alpha})`; // rgba in color, NOT element opacity
|
|
59
|
+
el.style.transform = `translate(${i * OFFSET_X}px, ${i * OFFSET_Y}px)`;
|
|
60
|
+
}
|
|
61
|
+
el.dataset.layer = String(i);
|
|
62
|
+
stack.appendChild(el);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Cascade entry — back layers fade in first, building forward
|
|
66
|
+
stack.querySelectorAll(".depth-text").forEach((el) => {
|
|
67
|
+
const i = Number(el.dataset.layer);
|
|
68
|
+
const finalAlpha = i === 0 ? 1 : Math.max(BACK_ALPHA_MAX - i * BACK_ALPHA_STEP, BACK_ALPHA_MIN);
|
|
69
|
+
tl.fromTo(
|
|
70
|
+
el,
|
|
71
|
+
{ opacity: 0 },
|
|
72
|
+
{ opacity: finalAlpha, duration: LAYER_FADE_DUR, ease: "power2.out" },
|
|
73
|
+
LAYER_CASCADE_START + (LAYER_COUNT - 1 - i) * LAYER_CASCADE_STEP,
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Depth grows on entry — offsets interpolate 0 → full
|
|
78
|
+
const depthState = { p: 0 };
|
|
79
|
+
tl.to(
|
|
80
|
+
depthState,
|
|
81
|
+
{
|
|
82
|
+
p: 1,
|
|
83
|
+
duration: DEPTH_GROW_DUR,
|
|
84
|
+
ease: "power2.out",
|
|
85
|
+
onUpdate: () => {
|
|
86
|
+
stack.querySelectorAll(".depth-text.is-back").forEach((el) => {
|
|
87
|
+
const i = Number(el.dataset.layer);
|
|
88
|
+
el.style.transform = `translate(${i * OFFSET_X * depthState.p}px, ${i * OFFSET_Y * depthState.p}px)`;
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
LAYER_CASCADE_START, // align with the cascade so depth lands as the last layer fades in
|
|
93
|
+
);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Variations
|
|
97
|
+
|
|
98
|
+
- **Static depth** (single hero shot) — render all layers at final positions from t=0; optionally fade the whole stack in with a subtle scale (0.94–0.98 → 1, 0.5–0.8s).
|
|
99
|
+
- **Dynamic depth pulse** — after the grow completes, modulate the offsets with a sine multiplier `1 + sin(p) × BEAT_AMP` (BEAT_AMP 0.2–0.6; one beat per 0.7–1.5s reads as a heartbeat).
|
|
100
|
+
- **Color-shift back layers** — instead of fading to translucent, step hue/lightness per layer: `hsla(HUE_BASE − i × HUE_STEP, SAT_PCT%, LIGHT_BASE − i × LIGHT_STEP%, 1)` (HUE_STEP 4–12°; larger reads as glitch). Depth reads as a colored cast shadow.
|
|
101
|
+
|
|
102
|
+
## Values
|
|
103
|
+
|
|
104
|
+
| token | range | notes |
|
|
105
|
+
| ------------------- | ------------------------ | ---------------------------------------------------------------------- |
|
|
106
|
+
| LAYER_COUNT | 4–6 | <4 doesn't read as 3D; >6 clutters on tight kerning |
|
|
107
|
+
| OFFSET_X / OFFSET_Y | 1–3px each | >4px reads as glitch / chromatic aberration, not depth |
|
|
108
|
+
| BACK_ALPHA_MAX | 0.6–0.85 | nearest back layer; >0.9 fights the front for dominance |
|
|
109
|
+
| BACK_ALPHA_STEP | 0.08–0.15 | small = soft gradient; large = discrete plates |
|
|
110
|
+
| BACK_ALPHA_MIN | 0.1–0.2 | floor — below 0.1 the deepest layer vanishes on dark backgrounds |
|
|
111
|
+
| HERO_FONT_SIZE | 60px min; 200–340px hero | thin/small text loses the layered illusion |
|
|
112
|
+
| HERO_LETTER_SPACING | −0.03em–0 | tighter makes offsets read as depth, not repetition |
|
|
113
|
+
| LAYER_CASCADE_STEP | 0.04–0.10s | smaller ≈ simultaneous; larger feels stepped |
|
|
114
|
+
| LAYER_FADE_DUR | 0.3–0.6s | per-layer fade |
|
|
115
|
+
| DEPTH_GROW_DUR | 0.4–0.8s | ≈ `LAYER_FADE_DUR × LAYER_COUNT / 2` so depth lands with the last fade |
|
|
116
|
+
|
|
117
|
+
## Critical Constraints
|
|
118
|
+
|
|
119
|
+
- **Offset direction implies light direction** — `(+x, +y)` = light upper-left, `(-x, +y)` = upper-right; one sign convention for the whole composition.
|
|
120
|
+
- **Back layers translucent OR darker — never more saturated than the front** (reads as a halo, not depth).
|
|
121
|
+
- **Set back-layer color via `rgba()` in `color`, not element `opacity`** — opacity fades the whole rendered glyph including any shadow.
|
|
122
|
+
- **Front layer `position: relative` defines container size**; back layers absolute with `pointer-events: none`; offsets via `transform: translate()`, never `top`/`left`.
|
|
123
|
+
- **No CSS `text-shadow` alongside layered depth** — they compound and over-extrude.
|
|
124
|
+
- **No per-letter animation on top of the stack** — hacker-flip / typewriter over 6-layer depth is chaos; drop to 2–3 layers or apply depth only to the static post-reveal state.
|
|
125
|
+
|
|
126
|
+
## See also
|
|
127
|
+
|
|
128
|
+
`counting-dynamic-scale` (counter rendered with depth layers) · `sine-wave-loop` (idle breathing on the front layer post-reveal) · `center-outward-expansion` (depth-stacked wordmark after the burst lands).
|