@mevdragon/vidfarm-devcli 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/embedded-captions/CATALOG.md +93 -0
- package/.agents/skills/embedded-captions/SKILL.md +286 -0
- package/.agents/skills/embedded-captions/assets/brand/CDPR-fankit-terms.txt +35 -0
- package/.agents/skills/embedded-captions/assets/brand/cyberpunk-widths.json +115 -0
- package/.agents/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
- package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
- package/.agents/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
- package/.agents/skills/embedded-captions/dna/README.md +148 -0
- package/.agents/skills/embedded-captions/dna/chrome.json +68 -0
- package/.agents/skills/embedded-captions/dna/cream.json +69 -0
- package/.agents/skills/embedded-captions/dna/documentary.json +62 -0
- package/.agents/skills/embedded-captions/dna/editorial.json +70 -0
- package/.agents/skills/embedded-captions/dna/glitch.json +82 -0
- package/.agents/skills/embedded-captions/dna/ink.json +65 -0
- package/.agents/skills/embedded-captions/dna/keynote.json +62 -0
- package/.agents/skills/embedded-captions/dna/loud.json +75 -0
- package/.agents/skills/embedded-captions/dna/neon.json +58 -0
- package/.agents/skills/embedded-captions/dna/velocity.json +89 -0
- package/.agents/skills/embedded-captions/modes/cinematic/README.md +48 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
- package/.agents/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
- package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
- package/.agents/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
- package/.agents/skills/embedded-captions/modes/cinematic/engine.html +355 -0
- package/.agents/skills/embedded-captions/modes/standard/_anatomy.md +233 -0
- package/.agents/skills/embedded-captions/modes/standard/_motion.md +192 -0
- package/.agents/skills/embedded-captions/modes/standard/fonts/build-fonts-css.cjs +97 -0
- package/.agents/skills/embedded-captions/references/aesthetic-principles.md +168 -0
- package/.agents/skills/embedded-captions/references/anti-patterns.md +188 -0
- package/.agents/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
- package/.agents/skills/embedded-captions/references/caption-grouping.md +130 -0
- package/.agents/skills/embedded-captions/references/composition-craft.md +522 -0
- package/.agents/skills/embedded-captions/references/direction-catalog.md +138 -0
- package/.agents/skills/embedded-captions/references/example-renders/champion.html +371 -0
- package/.agents/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
- package/.agents/skills/embedded-captions/references/failure-modes.md +145 -0
- package/.agents/skills/embedded-captions/references/layout-heuristics.md +238 -0
- package/.agents/skills/embedded-captions/references/motion-vocabulary.md +148 -0
- package/.agents/skills/embedded-captions/references/rail.md +68 -0
- package/.agents/skills/embedded-captions/references/reference-bar.md +47 -0
- package/.agents/skills/embedded-captions/references/scene-types.md +94 -0
- package/.agents/skills/embedded-captions/references/test-set.md +66 -0
- package/.agents/skills/embedded-captions/references/typographic-moves.md +266 -0
- package/.agents/skills/embedded-captions/references/typography-presets.md +63 -0
- package/.agents/skills/embedded-captions/scripts/audio-envelope.cjs +95 -0
- package/.agents/skills/embedded-captions/scripts/check-occlusion.cjs +250 -0
- package/.agents/skills/embedded-captions/scripts/check-overflow.cjs +194 -0
- package/.agents/skills/embedded-captions/scripts/check-rail-climax.cjs +233 -0
- package/.agents/skills/embedded-captions/scripts/check-timing.cjs +173 -0
- package/.agents/skills/embedded-captions/scripts/fill-timings.cjs +124 -0
- package/.agents/skills/embedded-captions/scripts/fit-fonts.cjs +158 -0
- package/.agents/skills/embedded-captions/scripts/gen-stroke-path.py +46 -0
- package/.agents/skills/embedded-captions/scripts/inject-fonts.cjs +169 -0
- package/.agents/skills/embedded-captions/scripts/lib-dna.cjs +201 -0
- package/.agents/skills/embedded-captions/scripts/make-cinematic.cjs +1205 -0
- package/.agents/skills/embedded-captions/scripts/make-composition.cjs +404 -0
- package/.agents/skills/embedded-captions/scripts/make-theme.cjs +8781 -0
- package/.agents/skills/embedded-captions/scripts/matte.cjs +294 -0
- package/.agents/skills/embedded-captions/scripts/measure-layout.cjs +293 -0
- package/.agents/skills/embedded-captions/scripts/prepare.sh +39 -0
- package/.agents/skills/embedded-captions/scripts/preview-frames.cjs +268 -0
- package/.agents/skills/embedded-captions/scripts/render-and-composite.sh +509 -0
- package/.agents/skills/embedded-captions/scripts/render-theme.sh +34 -0
- package/.agents/skills/embedded-captions/scripts/safe-zones.cjs +813 -0
- package/.agents/skills/embedded-captions/scripts/transcribe.cjs +349 -0
- package/.agents/skills/embedded-captions/themes/PORTING.md +49 -0
- package/.agents/skills/embedded-captions/themes/README.md +244 -0
- package/.agents/skills/embedded-captions/themes/anchor.json +27 -0
- package/.agents/skills/embedded-captions/themes/arcade.json +51 -0
- package/.agents/skills/embedded-captions/themes/aurora.json +41 -0
- package/.agents/skills/embedded-captions/themes/biolume.json +35 -0
- package/.agents/skills/embedded-captions/themes/brush.json +74 -0
- package/.agents/skills/embedded-captions/themes/chalkboard.json +52 -0
- package/.agents/skills/embedded-captions/themes/dossier.json +56 -0
- package/.agents/skills/embedded-captions/themes/graffiti.json +62 -0
- package/.agents/skills/embedded-captions/themes/hologram.json +41 -0
- package/.agents/skills/embedded-captions/themes/inkwater.json +43 -0
- package/.agents/skills/embedded-captions/themes/laser.json +46 -0
- package/.agents/skills/embedded-captions/themes/lastpage.json +33 -0
- package/.agents/skills/embedded-captions/themes/neonsign.json +53 -0
- package/.agents/skills/embedded-captions/themes/nightcity.json +56 -0
- package/.agents/skills/embedded-captions/themes/ordnance.json +54 -0
- package/.agents/skills/embedded-captions/themes/papercut.json +37 -0
- package/.agents/skills/embedded-captions/themes/popup.json +46 -0
- package/.agents/skills/embedded-captions/themes/ransom.json +62 -0
- package/.agents/skills/embedded-captions/themes/scoreboard.json +54 -0
- package/.agents/skills/embedded-captions/themes/spectrum.json +46 -0
- package/.agents/skills/embedded-captions/themes/stardust.json +29 -0
- package/.agents/skills/embedded-captions/themes/stomp.json +43 -0
- package/.agents/skills/embedded-captions/themes/terminal.json +49 -0
- package/.agents/skills/embedded-captions/themes/thunder.json +44 -0
- package/.agents/skills/embedded-captions/themes/transit.json +44 -0
- package/.agents/skills/embedded-captions/themes/vhs.json +47 -0
- package/.agents/skills/faceless-explainer/SKILL.md +209 -0
- package/.agents/skills/faceless-explainer/references/cut-catalog.md +215 -0
- package/.agents/skills/faceless-explainer/references/motion-language.md +156 -0
- package/.agents/skills/faceless-explainer/references/story-design.md +248 -0
- package/.agents/skills/faceless-explainer/references/visual-design.md +146 -0
- package/.agents/skills/faceless-explainer/scripts/assemble-index.mjs +570 -0
- package/.agents/skills/faceless-explainer/scripts/audio.mjs +260 -0
- package/.agents/skills/faceless-explainer/scripts/build-frame.mjs +536 -0
- package/.agents/skills/faceless-explainer/scripts/captions.mjs +508 -0
- package/.agents/skills/faceless-explainer/scripts/lib/assets.mjs +55 -0
- package/.agents/skills/faceless-explainer/scripts/lib/dimensions.mjs +45 -0
- package/.agents/skills/faceless-explainer/scripts/lib/storyboard.mjs +249 -0
- package/.agents/skills/faceless-explainer/scripts/lib/tokens.mjs +204 -0
- package/.agents/skills/faceless-explainer/scripts/lib/transition-registry.mjs +38 -0
- package/.agents/skills/faceless-explainer/scripts/lib/transitions.json +71 -0
- package/.agents/skills/faceless-explainer/scripts/transitions.mjs +320 -0
- package/.agents/skills/faceless-explainer/sub-agents/frame-worker.md +75 -0
- package/.agents/skills/flockposter/LICENSE +17 -0
- package/.agents/skills/flockposter/README.md +72 -0
- package/.agents/skills/flockposter/SKILL.md +562 -0
- package/.agents/skills/flockposter/examples/cli-instagram-reel.sh +21 -0
- package/.agents/skills/flockposter/examples/cli-multi-platform.json +69 -0
- package/.agents/skills/flockposter/examples/cli-tiktok-upload-only.sh +22 -0
- package/.agents/skills/flockposter/examples/cli-x-thread.sh +17 -0
- package/.agents/skills/flockposter/examples/cli-youtube-short.sh +21 -0
- package/.agents/skills/flockposter/examples/public-api-instagram-reel.json +28 -0
- package/.agents/skills/general-video/SKILL.md +143 -0
- package/.agents/skills/hyperframes/SKILL.md +160 -0
- package/.agents/skills/hyperframes-animation/SKILL.md +84 -0
- package/.agents/skills/hyperframes-animation/adapters/animate-text.md +64 -0
- package/.agents/skills/hyperframes-animation/adapters/animejs.md +114 -0
- package/.agents/skills/hyperframes-animation/adapters/css-animations.md +143 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +118 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +96 -0
- package/.agents/skills/hyperframes-animation/adapters/gsap.md +105 -0
- package/.agents/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
- package/.agents/skills/hyperframes-animation/adapters/lottie.md +117 -0
- package/.agents/skills/hyperframes-animation/adapters/three.md +131 -0
- package/.agents/skills/hyperframes-animation/adapters/typegpu.md +178 -0
- package/.agents/skills/hyperframes-animation/adapters/waapi.md +101 -0
- package/.agents/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
- package/.agents/skills/hyperframes-animation/blueprints/constellation-hub.md +44 -0
- package/.agents/skills/hyperframes-animation/blueprints/cta-morph-press.md +28 -0
- package/.agents/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +57 -0
- package/.agents/skills/hyperframes-animation/blueprints/dataviz-countup.md +46 -0
- package/.agents/skills/hyperframes-animation/blueprints/device-surface-showcase.md +53 -0
- package/.agents/skills/hyperframes-animation/blueprints/grid-card-assemble.md +66 -0
- package/.agents/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +78 -0
- package/.agents/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +69 -0
- package/.agents/skills/hyperframes-animation/blueprints/overwhelm-surround.md +28 -0
- package/.agents/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
- package/.agents/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
- package/.agents/skills/hyperframes-animation/blueprints/titlecard-reveal.md +42 -0
- package/.agents/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
- package/.agents/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
- package/.agents/skills/hyperframes-animation/blueprints-index.md +146 -0
- package/.agents/skills/hyperframes-animation/examples/assets/avatars/02.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/github.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/nvidia.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/visa.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/assets/brands/zoominfo.avif +0 -0
- package/.agents/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
- package/.agents/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
- package/.agents/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
- package/.agents/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
- package/.agents/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
- package/.agents/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
- package/.agents/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
- package/.agents/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
- package/.agents/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
- package/.agents/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
- package/.agents/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
- package/.agents/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
- package/.agents/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
- package/.agents/skills/hyperframes-animation/rules/3d-page-scroll.md +227 -0
- package/.agents/skills/hyperframes-animation/rules/3d-text-depth-layers.md +297 -0
- package/.agents/skills/hyperframes-animation/rules/ai-tracking-box.md +382 -0
- package/.agents/skills/hyperframes-animation/rules/ambient-glow-bloom.md +305 -0
- package/.agents/skills/hyperframes-animation/rules/asr-keyword-glow.md +286 -0
- package/.agents/skills/hyperframes-animation/rules/avatar-cloud-network.md +371 -0
- package/.agents/skills/hyperframes-animation/rules/camera-cursor-tracking.md +246 -0
- package/.agents/skills/hyperframes-animation/rules/card-morph-anchor.md +267 -0
- package/.agents/skills/hyperframes-animation/rules/center-outward-expansion.md +227 -0
- package/.agents/skills/hyperframes-animation/rules/context-sensitive-cursor.md +257 -0
- package/.agents/skills/hyperframes-animation/rules/coordinate-target-zoom.md +332 -0
- package/.agents/skills/hyperframes-animation/rules/counting-dynamic-scale.md +283 -0
- package/.agents/skills/hyperframes-animation/rules/css-marker-patterns.md +373 -0
- package/.agents/skills/hyperframes-animation/rules/cursor-click-ripple.md +262 -0
- package/.agents/skills/hyperframes-animation/rules/depth-of-field-blur.md +313 -0
- package/.agents/skills/hyperframes-animation/rules/depth-scatter-assemble.md +303 -0
- package/.agents/skills/hyperframes-animation/rules/discrete-text-sequence.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +307 -0
- package/.agents/skills/hyperframes-animation/rules/gsap-effects.md +299 -0
- package/.agents/skills/hyperframes-animation/rules/hacker-flip-3d.md +223 -0
- package/.agents/skills/hyperframes-animation/rules/kinetic-beat-slam.md +183 -0
- package/.agents/skills/hyperframes-animation/rules/motion-blur-streak.md +328 -0
- package/.agents/skills/hyperframes-animation/rules/multi-phase-camera.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/orbit-3d-entry.md +301 -0
- package/.agents/skills/hyperframes-animation/rules/physics-press-reaction.md +350 -0
- package/.agents/skills/hyperframes-animation/rules/press-release-spring.md +296 -0
- package/.agents/skills/hyperframes-animation/rules/reactive-displacement.md +277 -0
- package/.agents/skills/hyperframes-animation/rules/scale-swap-transition.md +298 -0
- package/.agents/skills/hyperframes-animation/rules/sine-wave-loop.md +278 -0
- package/.agents/skills/hyperframes-animation/rules/split-tilt-cards.md +277 -0
- package/.agents/skills/hyperframes-animation/rules/spring-pop-entrance.md +273 -0
- package/.agents/skills/hyperframes-animation/rules/stat-bars-and-fills.md +156 -0
- package/.agents/skills/hyperframes-animation/rules/svg-icon-enrichment.md +329 -0
- package/.agents/skills/hyperframes-animation/rules/svg-path-draw.md +274 -0
- package/.agents/skills/hyperframes-animation/rules/vertical-spring-ticker.md +239 -0
- package/.agents/skills/hyperframes-animation/rules/viewport-change.md +349 -0
- package/.agents/skills/hyperframes-animation/rules-index.md +86 -0
- package/.agents/skills/hyperframes-animation/scripts/animation-map.mjs +606 -0
- package/.agents/skills/hyperframes-animation/scripts/package-loader.mjs +288 -0
- package/.agents/skills/hyperframes-animation/scripts/package-loader.test.mjs +62 -0
- package/.agents/skills/hyperframes-animation/techniques.md +507 -0
- package/.agents/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +167 -0
- package/.agents/skills/hyperframes-animation/transitions/catalog.md +127 -0
- package/.agents/skills/hyperframes-animation/transitions/css-3d.md +12 -0
- package/.agents/skills/hyperframes-animation/transitions/css-blur.md +51 -0
- package/.agents/skills/hyperframes-animation/transitions/css-cover.md +43 -0
- package/.agents/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
- package/.agents/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
- package/.agents/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
- package/.agents/skills/hyperframes-animation/transitions/css-grid.md +10 -0
- package/.agents/skills/hyperframes-animation/transitions/css-light.md +49 -0
- package/.agents/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
- package/.agents/skills/hyperframes-animation/transitions/css-other.md +25 -0
- package/.agents/skills/hyperframes-animation/transitions/css-push.md +41 -0
- package/.agents/skills/hyperframes-animation/transitions/css-radial.md +37 -0
- package/.agents/skills/hyperframes-animation/transitions/css-scale.md +24 -0
- package/.agents/skills/hyperframes-animation/transitions/overview.md +153 -0
- package/.agents/skills/hyperframes-cli/SKILL.md +113 -0
- package/.agents/skills/hyperframes-cli/references/doctor-browser.md +45 -0
- package/.agents/skills/hyperframes-cli/references/init-and-scaffold.md +55 -0
- package/.agents/skills/hyperframes-cli/references/lambda.md +132 -0
- package/.agents/skills/hyperframes-cli/references/lint-validate-inspect.md +121 -0
- package/.agents/skills/hyperframes-cli/references/preview-render.md +149 -0
- package/.agents/skills/hyperframes-cli/references/upgrade-info-misc.md +75 -0
- package/.agents/skills/hyperframes-core/SKILL.md +78 -0
- package/.agents/skills/hyperframes-core/references/composition-patterns.md +263 -0
- package/.agents/skills/hyperframes-core/references/data-attributes.md +70 -0
- package/.agents/skills/hyperframes-core/references/determinism-rules.md +68 -0
- package/.agents/skills/hyperframes-core/references/full-screen-motion.md +62 -0
- package/.agents/skills/hyperframes-core/references/minimal-composition.md +66 -0
- package/.agents/skills/hyperframes-core/references/script-format.md +49 -0
- package/.agents/skills/hyperframes-core/references/storyboard-format.md +95 -0
- package/.agents/skills/hyperframes-core/references/sub-compositions.md +237 -0
- package/.agents/skills/hyperframes-core/references/subagent-dispatch.md +41 -0
- package/.agents/skills/hyperframes-core/references/tailwind.md +125 -0
- package/.agents/skills/hyperframes-core/references/tracks-and-clips.md +76 -0
- package/.agents/skills/hyperframes-core/references/variables-and-media.md +90 -0
- package/.agents/skills/hyperframes-creative/SKILL.md +70 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
- package/.agents/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
- package/.agents/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
- package/.agents/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
- package/.agents/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/FRAME.md +277 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/caption-skin.html +224 -0
- package/.agents/skills/hyperframes-creative/frame-presets/claude/frame-showcase.html +1439 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
- package/.agents/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
- package/.agents/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
- package/.agents/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
- package/.agents/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
- package/.agents/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/.agents/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/monochrome.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
- package/.agents/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
- package/.agents/skills/hyperframes-creative/references/audio-reactive.md +76 -0
- package/.agents/skills/hyperframes-creative/references/beat-direction.md +164 -0
- package/.agents/skills/hyperframes-creative/references/composition-patterns.md +199 -0
- package/.agents/skills/hyperframes-creative/references/data-in-motion.md +19 -0
- package/.agents/skills/hyperframes-creative/references/design-adherence.md +19 -0
- package/.agents/skills/hyperframes-creative/references/design-picker.md +123 -0
- package/.agents/skills/hyperframes-creative/references/design-spec.md +55 -0
- package/.agents/skills/hyperframes-creative/references/house-style.md +73 -0
- package/.agents/skills/hyperframes-creative/references/motion-principles.md +150 -0
- package/.agents/skills/hyperframes-creative/references/narration.md +92 -0
- package/.agents/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
- package/.agents/skills/hyperframes-creative/references/typography.md +218 -0
- package/.agents/skills/hyperframes-creative/references/video-composition.md +63 -0
- package/.agents/skills/hyperframes-creative/references/visual-styles.md +457 -0
- package/.agents/skills/hyperframes-creative/scripts/contrast-report.mjs +353 -0
- package/.agents/skills/hyperframes-creative/scripts/extract-audio-data.py +188 -0
- package/.agents/skills/hyperframes-creative/scripts/package-loader.mjs +288 -0
- package/.agents/skills/hyperframes-creative/scripts/package-loader.test.mjs +62 -0
- package/.agents/skills/hyperframes-creative/templates/design-picker.html +1432 -0
- package/.agents/skills/hyperframes-keyframes/SKILL.md +237 -0
- package/.agents/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
- package/.agents/skills/hyperframes-keyframes/references/keyframe-patterns.md +106 -0
- package/.agents/skills/motion-graphics/SKILL.md +172 -0
- package/.agents/skills/motion-graphics/agents/builder.md +40 -0
- package/.agents/skills/motion-graphics/agents/director.md +53 -0
- package/.agents/skills/motion-graphics/agents/finalize.md +17 -0
- package/.agents/skills/motion-graphics/catalog-map.md +40 -0
- package/.agents/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
- package/.agents/skills/motion-graphics/categories/charts/module.md +21 -0
- package/.agents/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
- package/.agents/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
- package/.agents/skills/motion-graphics/categories/lower-thirds/module.md +16 -0
- package/.agents/skills/motion-graphics/categories/maps/bake-basemap.mjs +273 -0
- package/.agents/skills/motion-graphics/categories/maps/module.md +61 -0
- package/.agents/skills/motion-graphics/categories/news/module.md +56 -0
- package/.agents/skills/motion-graphics/categories/stat/module.md +21 -0
- package/.agents/skills/motion-graphics/categories/tweet/module.md +16 -0
- package/.agents/skills/motion-graphics/categories/webpage/module.md +21 -0
- package/.agents/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
- package/.agents/skills/motion-graphics/grounding/locate.mjs +227 -0
- package/.agents/skills/motion-graphics/phases/source/guide.md +21 -0
- package/.agents/skills/motion-graphics/references/builder-contract.md +38 -0
- package/.agents/skills/motion-graphics/references/motion-vocabulary.md +43 -0
- package/.agents/skills/motion-graphics/references/shot-plan-ir.md +54 -0
- package/.agents/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
- package/.agents/skills/product-launch-video/SKILL.md +208 -0
- package/.agents/skills/product-launch-video/references/cut-catalog.md +220 -0
- package/.agents/skills/product-launch-video/references/motion-language.md +156 -0
- package/.agents/skills/product-launch-video/references/story-design.md +373 -0
- package/.agents/skills/product-launch-video/references/visual-design.md +126 -0
- package/.agents/skills/product-launch-video/scripts/assemble-index.mjs +570 -0
- package/.agents/skills/product-launch-video/scripts/audio.mjs +260 -0
- package/.agents/skills/product-launch-video/scripts/build-frame.mjs +536 -0
- package/.agents/skills/product-launch-video/scripts/captions.mjs +508 -0
- package/.agents/skills/product-launch-video/scripts/lib/assets.mjs +55 -0
- package/.agents/skills/product-launch-video/scripts/lib/dimensions.mjs +45 -0
- package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.mjs +36 -0
- package/.agents/skills/product-launch-video/scripts/lib/pad-frame-duration.test.mjs +76 -0
- package/.agents/skills/product-launch-video/scripts/lib/storyboard.mjs +249 -0
- package/.agents/skills/product-launch-video/scripts/lib/tokens.mjs +204 -0
- package/.agents/skills/product-launch-video/scripts/lib/transition-registry.mjs +38 -0
- package/.agents/skills/product-launch-video/scripts/lib/transitions.json +71 -0
- package/.agents/skills/product-launch-video/scripts/stage-assets.mjs +39 -0
- package/.agents/skills/product-launch-video/scripts/transitions.mjs +327 -0
- package/.agents/skills/product-launch-video/sub-agents/frame-worker.md +75 -0
- package/.agents/skills/slideshow/SKILL.md +550 -0
- package/.agents/skills/slideshow/references/standalone-harness.md +1020 -0
- package/.agents/skills/talking-head-recut/NOTICE.md +39 -0
- package/.agents/skills/talking-head-recut/SKILL.md +1195 -0
- package/.agents/skills/talking-head-recut/assets/vendor/gsap.min.js +10 -0
- package/.agents/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
- package/.agents/skills/talking-head-recut/references/frames/clean.html +92 -0
- package/.agents/skills/talking-head-recut/references/frames/hairline.html +171 -0
- package/.agents/skills/talking-head-recut/references/frames/polaroid.html +131 -0
- package/.agents/skills/talking-head-recut/references/layouts/overlay.html +164 -0
- package/.agents/skills/talking-head-recut/references/layouts/pip.html +143 -0
- package/.agents/skills/talking-head-recut/references/layouts/split.html +121 -0
- package/.agents/skills/talking-head-recut/references/layouts/stack.html +109 -0
- package/.agents/skills/talking-head-recut/references/styles/academic.html +172 -0
- package/.agents/skills/talking-head-recut/references/styles/audit.html +170 -0
- package/.agents/skills/talking-head-recut/references/styles/editorial.html +189 -0
- package/.agents/skills/talking-head-recut/references/styles/geom.html +181 -0
- package/.agents/skills/talking-head-recut/references/styles/minimal.html +130 -0
- package/.agents/skills/talking-head-recut/references/styles/spotlight.html +142 -0
- package/.agents/skills/talking-head-recut/references/styles/swiss.html +188 -0
- package/.agents/skills/talking-head-recut/references/styles/terminal.html +196 -0
- package/.agents/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
- package/.agents/skills/talking-head-recut/references/styles/xhs.html +206 -0
- package/.agents/skills/vidfarm-media/SKILL.md +85 -0
- package/.agents/skills/vidfarm-media/references/tts.md +54 -0
- package/.agents/skills/vidfarm-media/scripts/audio.mjs +628 -0
- package/.agents/skills/vidfarm-media/scripts/wait-bgm.mjs +31 -0
- package/.agents/skills/website-to-video/SKILL.md +145 -0
- package/.agents/skills/website-to-video/assets/sfx/CREDITS.md +35 -0
- package/.agents/skills/website-to-video/assets/sfx/manifest.json +97 -0
- package/.agents/skills/website-to-video/references/beat-builder-guide.md +263 -0
- package/.agents/skills/website-to-video/references/capabilities.md +713 -0
- package/.agents/skills/website-to-video/references/step-0-capture.md +55 -0
- package/.agents/skills/website-to-video/references/step-1-design.md +333 -0
- package/.agents/skills/website-to-video/references/step-2-brief.md +178 -0
- package/.agents/skills/website-to-video/references/step-3-storyboard.md +572 -0
- package/.agents/skills/website-to-video/references/step-4-vo.md +225 -0
- package/.agents/skills/website-to-video/references/step-5-build.md +483 -0
- package/.agents/skills/website-to-video/references/step-6-validate.md +341 -0
- package/.agents/skills/website-to-video/scripts/w2h-verify.mjs +759 -0
- package/SKILL.director.md +60 -4
- package/SKILL.platform.md +7 -2
- package/demo/dist/app.css +1 -1
- package/demo/dist/app.js +485 -86
- package/dist/src/account-pages-legacy.js +9 -14
- package/dist/src/app.js +659 -159
- package/dist/src/cli.js +618 -17
- package/dist/src/composition-runtime.js +286 -6
- package/dist/src/devcli/composition-edit.js +176 -8
- package/dist/src/devcli/doctor.js +192 -0
- package/dist/src/devcli/hyperframes-cli.js +118 -0
- package/dist/src/devcli/skills.js +476 -0
- package/dist/src/devcli/stills.js +249 -0
- package/dist/src/devcli/transitions.js +205 -0
- package/dist/src/editor-chat.js +260 -4
- package/dist/src/frontend/template-editor-chat.js +6 -5
- package/dist/src/homepage.js +2 -48
- package/dist/src/hyperframes/composition.js +188 -7
- package/dist/src/services/composition-lint.js +199 -0
- package/dist/src/services/hyperframes.js +127 -28
- package/dist/src/services/serverless-records.js +7 -0
- package/dist/src/template-editor-shell.js +87 -48
- package/package.json +2 -1
- package/public/assets/page-runtime-client-app.js +31 -31
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: alpha
|
|
3
|
+
name: Creative Mode — Frame (video / frame layer)
|
|
4
|
+
description: >
|
|
5
|
+
Video-first companion to Creative Mode's design.md. The unit is the frame (1920×1080),
|
|
6
|
+
not the slide-in-a-deck. Atoms are identical and sacred — warm cream canvas, 4px ink
|
|
7
|
+
borders, hard offset shadows (no blur), Archivo Black uppercase at 0.92 line-height,
|
|
8
|
+
JetBrains Mono taxonomy, Space Grotesk body, the four-accent palette. Composition,
|
|
9
|
+
frame scale, and aspect-ratio behavior are rewritten for the frame. Motion is out of scope.
|
|
10
|
+
unit: the frame — 1920×1080 primary; 9:16 and 1:1 documented
|
|
11
|
+
principle: atoms are sacred · composition is free · numbers come from the script
|
|
12
|
+
|
|
13
|
+
colors:
|
|
14
|
+
cream: "#EFE9D9"
|
|
15
|
+
cream-2: "#E4DCC4"
|
|
16
|
+
ink: "#0F0F0F"
|
|
17
|
+
ink-2: "#2A2A2A"
|
|
18
|
+
green: "#1F8A4C"
|
|
19
|
+
green-dark: "#136636"
|
|
20
|
+
pink: "#F06CA8"
|
|
21
|
+
pink-dark: "#D14E8B"
|
|
22
|
+
orange: "#E85A1F"
|
|
23
|
+
yellow: "#F5C518"
|
|
24
|
+
|
|
25
|
+
typography:
|
|
26
|
+
# — reading ramp (px @ 1920, with cqw) —
|
|
27
|
+
body-lg: { fontFamily: "Space Grotesk", px: 28, cqw: 1.46, weight: 400, lineHeight: 1.4 }
|
|
28
|
+
body-md: { fontFamily: "Space Grotesk", px: 24, cqw: 1.25, weight: 400, lineHeight: 1.3 }
|
|
29
|
+
mono-label: { fontFamily: "JetBrains Mono", px: 24, cqw: 1.25, weight: 400, tracking: "0.06em", upper: true }
|
|
30
|
+
mono-kicker:{ fontFamily: "JetBrains Mono", px: 24, cqw: 1.25, weight: 400, tracking: "0.14em", upper: true }
|
|
31
|
+
table-head: { fontFamily: "Archivo Black", px: 28, cqw: 1.46, weight: 400, upper: true }
|
|
32
|
+
# — display / hero ramp (frame-native, cqw-first) —
|
|
33
|
+
step-title: { fontFamily: "Archivo Black", px: 34, cqw: 1.77, weight: 400, lineHeight: 1.0, upper: true }
|
|
34
|
+
badge-label:{ fontFamily: "Archivo Black", px: 28, cqw: 1.46, weight: 400, upper: true }
|
|
35
|
+
marker: { fontFamily: "Archivo Black", cqw: 2.4, weight: 400, lineHeight: 1.0, upper: true }
|
|
36
|
+
stamp-num: { fontFamily: "Archivo Black", cqw: 2.2, weight: 400, lineHeight: 0.9 }
|
|
37
|
+
stat-num: { fontFamily: "Archivo Black", cqw: 6.4, weight: 400, lineHeight: 0.88 }
|
|
38
|
+
step-num: { fontFamily: "Archivo Black", cqw: 7.0, weight: 400, lineHeight: 0.85 }
|
|
39
|
+
display-head: { fontFamily: "Archivo Black", cqw: 4.2, weight: 400, lineHeight: 0.92, tracking: "-0.01em", upper: true }
|
|
40
|
+
display-lg: { fontFamily: "Archivo Black", cqw: 8.0, weight: 400, lineHeight: 0.9, tracking: "-0.01em", upper: true }
|
|
41
|
+
display-xl: { fontFamily: "Archivo Black", cqw: 11.0, weight: 400, lineHeight: 0.9, tracking: "-0.01em", upper: true }
|
|
42
|
+
display-hero:{ fontFamily: "Archivo Black", cqw: 15.5,weight: 400, lineHeight: 0.84, tracking: "-0.02em", upper: true }
|
|
43
|
+
|
|
44
|
+
spacing:
|
|
45
|
+
frame-pad: "3.3cqw" # 64px chrome gutter @1920
|
|
46
|
+
content-gutter: "5cqw" # 96px content gutter @1920
|
|
47
|
+
grid-gap: "1.5cqw" # 28px
|
|
48
|
+
cell-pad: "1.7cqw" # 32px
|
|
49
|
+
|
|
50
|
+
components:
|
|
51
|
+
frame-chrome:
|
|
52
|
+
typography: "{typography.mono-label}"
|
|
53
|
+
placement: "topbar 2.5cqw from top, meta 2.5cqw from bottom, both inset {spacing.frame-pad}"
|
|
54
|
+
rounded: "0"
|
|
55
|
+
shadow: "none"
|
|
56
|
+
description: "Mono topbar (section label left + 999px ink-stroked pill right) + meta footer (descriptor left + NN • NN counter right, 0.5cqw ink dot divider). Present on most frames."
|
|
57
|
+
stat-cell:
|
|
58
|
+
backgroundColor: "{colors.green} · {colors.pink} · {colors.orange} · {colors.cream}"
|
|
59
|
+
textColor: "{colors.cream} on accent · {colors.ink} on cream"
|
|
60
|
+
border: "0.4cqw solid {colors.ink}"
|
|
61
|
+
rounded: "0"
|
|
62
|
+
padding: "{spacing.cell-pad}"
|
|
63
|
+
typography: "{typography.stat-num} + {typography.mono-label}"
|
|
64
|
+
shadow: "none"
|
|
65
|
+
description: "Flat accent/cream stat tile, square corners, no shadow."
|
|
66
|
+
step-card:
|
|
67
|
+
backgroundColor: "{colors.cream} · {colors.pink} · {colors.yellow} · {colors.green}"
|
|
68
|
+
border: "0.4cqw solid {colors.ink}"
|
|
69
|
+
rounded: "0"
|
|
70
|
+
padding: "{spacing.cell-pad}"
|
|
71
|
+
typography: "{typography.step-num} + {typography.step-title} + {typography.body-md}"
|
|
72
|
+
shadow: "none"
|
|
73
|
+
description: "Ink-bordered card; giant step-num top. Sequence alternates cream with accents and ENDS on green."
|
|
74
|
+
marker-block:
|
|
75
|
+
backgroundColor: "{colors.pink}"
|
|
76
|
+
textColor: "{colors.ink}"
|
|
77
|
+
border: "0.4cqw solid {colors.ink}"
|
|
78
|
+
rounded: "0"
|
|
79
|
+
typography: "{typography.marker}"
|
|
80
|
+
shadow: "1.25cqw 1.25cqw 0 {colors.orange}, 1.25cqw 1.25cqw 0 0.2cqw {colors.ink}"
|
|
81
|
+
description: "The one hard-offset featured callout per frame."
|
|
82
|
+
kicker-block:
|
|
83
|
+
backgroundColor: "{colors.ink}"
|
|
84
|
+
textColor: "{colors.cream}"
|
|
85
|
+
typography: "{typography.mono-kicker}"
|
|
86
|
+
padding: "0.5cqw 1cqw"
|
|
87
|
+
rounded: "0"
|
|
88
|
+
description: "Inverted eyebrow chip."
|
|
89
|
+
badge-rotated:
|
|
90
|
+
backgroundColor: "{colors.yellow}"
|
|
91
|
+
border: "0.4cqw solid {colors.ink}"
|
|
92
|
+
typography: "{typography.badge-label}"
|
|
93
|
+
rounded: "0"
|
|
94
|
+
transform: "rotate(-4deg)"
|
|
95
|
+
description: "Deliberate-imperfection annotation."
|
|
96
|
+
pill-badge:
|
|
97
|
+
backgroundColor: "{colors.cream}"
|
|
98
|
+
border: "0.2cqw solid {colors.ink}"
|
|
99
|
+
rounded: "999px"
|
|
100
|
+
typography: "{typography.mono-label}"
|
|
101
|
+
description: "The ONLY rounded element; reads as a chip, not a card."
|
|
102
|
+
stamp:
|
|
103
|
+
backgroundColor: "{colors.pink}"
|
|
104
|
+
border: "0.4cqw solid {colors.cream}"
|
|
105
|
+
size: "~18cqw square"
|
|
106
|
+
rounded: "0"
|
|
107
|
+
transform: "rotate(-6deg)"
|
|
108
|
+
typography: "{typography.stamp-num}"
|
|
109
|
+
description: "Closing seal with a cream circular inner ring."
|
|
110
|
+
comparison-table:
|
|
111
|
+
backgroundColor: "{colors.cream-2}"
|
|
112
|
+
border: "0.4cqw solid {colors.ink}"
|
|
113
|
+
rule: "0.3cqw solid {colors.ink}"
|
|
114
|
+
rounded: "0"
|
|
115
|
+
typography: "{typography.table-head} + {typography.body-md}"
|
|
116
|
+
shadow: "none"
|
|
117
|
+
description: "Ink head row with cream Archivo labels; pink/green column-fill variants."
|
|
118
|
+
decorative-circle:
|
|
119
|
+
backgroundColor: "{colors.yellow}"
|
|
120
|
+
border: "0.4cqw solid {colors.ink}"
|
|
121
|
+
rounded: "50%"
|
|
122
|
+
description: "Decorative figure; pairs with a green panel for shape contrast."
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
# Creative Mode — Frame (video / frame layer)
|
|
126
|
+
|
|
127
|
+
## Overview
|
|
128
|
+
|
|
129
|
+
Creative Mode at frame scale is a **neo-brutalist editorial poster in motion's clothing** — warm
|
|
130
|
+
cream paper, near-black ink, and four accents that collide at full saturation. Every frame is one
|
|
131
|
+
flat color-blocked composition: no gradients, no blurred shadows, no rounded cards (save the one
|
|
132
|
+
pill chip). Depth is **hard offset shadow** (a solid same-direction duplicate) or **color-block
|
|
133
|
+
contrast**, never light.
|
|
134
|
+
|
|
135
|
+
The display voice is **Archivo Black in strict uppercase at 0.92 line-height** — letters overlap
|
|
136
|
+
their own cap height; that tightness is the brand. **JetBrains Mono** carries every label, kicker,
|
|
137
|
+
counter, and axis as a "technical artifact" register. **Space Grotesk** carries the few body lines.
|
|
138
|
+
The frame is loud by construction and calm by restraint: two or three accents per frame, the green
|
|
139
|
+
ground reserved for a single closing plate, the hard shadow spent on one featured element only.
|
|
140
|
+
|
|
141
|
+
**Key characteristics at frame scale:**
|
|
142
|
+
|
|
143
|
+
- **Cream ground** (`{colors.cream}`) on nearly every frame; `{colors.green}` reserved for the closing plate.
|
|
144
|
+
- **0.4cqw (4px @1920) ink borders** on every structural element; 0.3cqw internal rules.
|
|
145
|
+
- **Hard offset shadow** (≈1.25cqw, orange+ink) on one featured block per frame — never blurred.
|
|
146
|
+
- **Archivo Black uppercase**, 0.92 line-height, always; sentence-case Archivo Black does not exist.
|
|
147
|
+
- **Two or three accents per frame**, never all four; collisions are the design.
|
|
148
|
+
- **One pill chip** (999px) per frame as the sole rounded element.
|
|
149
|
+
|
|
150
|
+
### Frame Craft Bar
|
|
151
|
+
|
|
152
|
+
Three eyeball tests gate every frame before any structural check:
|
|
153
|
+
|
|
154
|
+
- **Squint** — exactly one element dominates, at **3–6× its nearest neighbor** (a chasm, not a ramp): the `display-hero`/`display-xl` claim or the `stat-num` figure, never two rival headlines.
|
|
155
|
+
- **Silence** — sparse frames (cover, claim, closer) read **45–60% empty**; the **stat grid and comparison ledger are the one dense exception**. Never fill a sparse frame to look complete.
|
|
156
|
+
- **Restraint** — the scarce gestures fire **once per frame**: at most one hard-offset shadow, two-to-three accents (never all four), the green ground reserved for the single closing plate.
|
|
157
|
+
- **Reference** — aim at a **Risograph editorial poster / punk-zine spread** (flat ink-bordered blocks, one big claim, vast cream); failure looks like a **rounded, soft-shadowed SaaS feature grid**.
|
|
158
|
+
|
|
159
|
+
## The Frame
|
|
160
|
+
|
|
161
|
+
- **Primary:** 1920×1080 (16:9). All display sizes authored in **`cqw`** (`px ÷ 1920 × 100 = cqw`).
|
|
162
|
+
- **Vertical:** 1080×1920 (9:16). **Square:** 1080×1080 (1:1).
|
|
163
|
+
- **Safe area:** chrome at `3.3cqw` (64px) inset; content at `5cqw` (96px) gutter. No load-bearing element crosses the `3.3cqw` line.
|
|
164
|
+
|
|
165
|
+
**The container law (load-bearing).** Every frame ground sets `container-type: size`. ALL
|
|
166
|
+
frame-relative units are `cqw`/`cqh` (1cqw = 1% of the frame's width), resolved against that
|
|
167
|
+
ground — **never `vw`.** `vw` measures the page viewport, so a frame inflates whenever it isn't
|
|
168
|
+
rendered full-screen; `cqw` resolves against the frame at any render size. This is why every size
|
|
169
|
+
in the display ramp is `cqw`.
|
|
170
|
+
|
|
171
|
+
## Colors
|
|
172
|
+
|
|
173
|
+
Tokens identical to the source. At frame scale: `{colors.cream}` is the **ground**, `{colors.ink}`
|
|
174
|
+
is borders + type, and the four accents (`green` / `pink` / `orange` / `yellow`) are **flat fills
|
|
175
|
+
rationed two-to-three per frame.** `{colors.orange}` is also the hard-shadow color. `{colors.green}`
|
|
176
|
+
doubles as the single closing-plate ground — its rarity is the impact. Never introduce a fifth
|
|
177
|
+
accent; never use pure white; never gradient.
|
|
178
|
+
|
|
179
|
+
## Typography
|
|
180
|
+
|
|
181
|
+
Two ramps. The **reading ramp** (body, mono labels, table heads) holds px+cqw for chrome and copy.
|
|
182
|
+
The **display/hero ramp** is frame-native and authored in `cqw` — from `display-head` (4.2cqw) up
|
|
183
|
+
to `display-hero` (15.5cqw) for a wordmark cover.
|
|
184
|
+
|
|
185
|
+
- **Legibility floor:** any load-bearing line ≥ **1.4cqw (≈27px@1920)**. Mono chrome at 1.15cqw is colophon only.
|
|
186
|
+
- **Fit-to-measure:** a headline's size tracks its line length. Cap the headline block at **≤ 78cqw** and never touch the safe margin. ≤3 words → `display-hero`/`display-xl`; 4–6 words → `display-lg`; 7+ words → `display-head`. Short lines go big; long lines step down.
|
|
187
|
+
- **Uppercase + 0.92 line-height on all Archivo Black**, always. Mono carries 0.06–0.14em tracking. Never letter-space Archivo Black beyond the encoded −0.01em; never set body centered.
|
|
188
|
+
|
|
189
|
+
## Depth & Surface
|
|
190
|
+
|
|
191
|
+
Zero blur. Two depth devices only:
|
|
192
|
+
|
|
193
|
+
- **Hard offset shadow** — a solid duplicate offset ≈1.25cqw in X and Y (`box-shadow: 1.25cqw 1.25cqw 0 {colors.orange}, 1.25cqw 1.25cqw 0 0.2cqw {colors.ink}`). **One featured block per frame** (marker, stamp). Diagram stacks may use a 0.95cqw ink-only offset.
|
|
194
|
+
- **Color-block contrast** — cream on cream-2, ink on cream, accent on cream. No shadow needed when contrast carries.
|
|
195
|
+
|
|
196
|
+
**Ceiling:** no blurred shadow, no gradient, no glow, anywhere.
|
|
197
|
+
|
|
198
|
+
## Shapes
|
|
199
|
+
|
|
200
|
+
- **0 radius** on every structural element — stat cells, step cards, table cells, markers, panels.
|
|
201
|
+
- **50%** on decorative circles, stamp inner ring, the meta dot.
|
|
202
|
+
- **999px** on the topbar pill chip only — the single rounded exception.
|
|
203
|
+
- **Rotation** only at the fixed brand angles: badge −4deg, stamp −6deg.
|
|
204
|
+
|
|
205
|
+
## Components
|
|
206
|
+
|
|
207
|
+
- **frame-chrome** — the mono topbar + meta footer. Present on most frames; dropped only on a pure full-bleed wordmark beat if it competes.
|
|
208
|
+
- **stat-cell / step-card** — ink-bordered flat-fill blocks; step sequences end on green.
|
|
209
|
+
- **marker-block** — the one hard-shadow featured callout per frame.
|
|
210
|
+
- **kicker-block** — inverted ink eyebrow chip; **badge-rotated** — −4deg yellow annotation; **pill-badge** — the lone rounded chip.
|
|
211
|
+
- **stamp** — the −6deg closing seal. **comparison-table** — cream-2 ledger with ink head row.
|
|
212
|
+
- **decorative-circle** — yellow disc for shape contrast against a green panel.
|
|
213
|
+
|
|
214
|
+
## Frame Treatments
|
|
215
|
+
|
|
216
|
+
> Recipe per plate: ground · container · composes · focal · chrome · accent · silence · Fixed/Free · density.
|
|
217
|
+
> Authored at 1920×1080. Lean centered; vary the anchor; one idea per frame.
|
|
218
|
+
|
|
219
|
+
### 1 · Wordmark Cover (identity · move: full-frame lockup · centered)
|
|
220
|
+
|
|
221
|
+
**Ground** `{colors.cream}`, `frame-pad`. **Container** grid, chrome top/bottom, focal centered.
|
|
222
|
+
**Composes** frame-chrome, the wordmark. **Focal** the two-line wordmark at `display-hero`
|
|
223
|
+
(15.5cqw), centered, second line in an accent (`{colors.pink}`/`orange`). **Chrome** mono topbar
|
|
224
|
+
(section label + pill) and meta footer (descriptor + 01•NN). **Accent** the second-line color only;
|
|
225
|
+
optionally one corner decorative-circle bleeding off an edge. **Silence** ~55% empty cream.
|
|
226
|
+
**Fixed** Archivo Black uppercase 0.84 lh, one accent on the wordmark, square corners. **Free** which
|
|
227
|
+
accent, line break, whether a circle bleeds a corner. **Density** sparse.
|
|
228
|
+
|
|
229
|
+
### 2 · Big Claim (oversized statement · move: scale · left)
|
|
230
|
+
|
|
231
|
+
**Ground** one full-bleed accent (`{colors.pink}`/`green`/`orange`), `content-gutter`. **Container**
|
|
232
|
+
flex, claim left-anchored and vertically centered. **Composes** kicker-block, the claim. **Focal**
|
|
233
|
+
a 2–3 line claim at `display-xl`/`display-lg`, ink on the accent (ink-on-fire — never white).
|
|
234
|
+
**Chrome** small ink kicker-block above the claim; mono meta footer. **Accent** the ground IS the
|
|
235
|
+
accent; no second accent competes. **Silence** ~45% of the colored field empty. **Fixed** ink type
|
|
236
|
+
on accent, fit-to-measure sizing, no shadow on type. **Free** the claim, which accent ground, which
|
|
237
|
+
word breaks. **Density** sparse — one idea.
|
|
238
|
+
|
|
239
|
+
### 3 · Stat Grid (catalog · move: density — the one dense frame · centered)
|
|
240
|
+
|
|
241
|
+
**Ground** `{colors.cream}`, `content-gutter`. **Container** grid: a centered `display-head` over a
|
|
242
|
+
3-up row of stat-cells. **Composes** frame-chrome, 3× stat-cell. **Focal** the row of three
|
|
243
|
+
ink-bordered cells (green / pink / orange), each a `stat-num` + mono label. **Chrome** mono topbar +
|
|
244
|
+
meta. **Accent** the three cell fills (the named density exception — three accents allowed here).
|
|
245
|
+
**Silence** ~25% — tight by design. **Fixed** 0.4cqw borders, square corners, no per-cell shadow,
|
|
246
|
+
mono labels. **Free** the three figures+labels, head copy, which three accents. **Density** dense-exception.
|
|
247
|
+
|
|
248
|
+
### 4 · Closing Plate (closer · move: ground-swap · centered)
|
|
249
|
+
|
|
250
|
+
**Ground** `{colors.green}` (the single green frame of the run), `frame-pad`. **Focal** a 2-line
|
|
251
|
+
sign-off at `display-lg` in `{colors.cream}`, centered. **Composes** frame-chrome (cream variant),
|
|
252
|
+
stamp. **Chrome** cream mono topbar + meta. **Accent** one `{colors.pink}` stamp rotated −6deg in
|
|
253
|
+
a corner, cream ring + stamp-num. **Silence** ~55% empty green. **Fixed** green ground reserved to
|
|
254
|
+
this beat, cream-on-green type, one stamp. **Free** sign-off copy, stamp text, stamp corner. **Density** sparse.
|
|
255
|
+
|
|
256
|
+
### 5 · Featured Marker (callout · move: hard-shadow focal · left/asymmetric)
|
|
257
|
+
|
|
258
|
+
**Ground** `{colors.cream}`. **Composes** frame-chrome, marker-block, optional body-md support line.
|
|
259
|
+
**Focal** the pink marker-block with the signature orange+ink hard offset shadow, set asymmetrically.
|
|
260
|
+
**Accent** pink block + orange shadow (two accents). **Silence** ~50%. **Fixed** exactly one hard
|
|
261
|
+
shadow on the frame, 0.4cqw borders. **Free** marker copy, block position, optional support line.
|
|
262
|
+
**Density** sparse.
|
|
263
|
+
|
|
264
|
+
### 6 · Comparison Ledger (data · move: matrix · left)
|
|
265
|
+
|
|
266
|
+
**Ground** `{colors.cream}`, `content-gutter`. **Composes** frame-chrome, comparison-table.
|
|
267
|
+
**Focal** the cream-2 table with ink head row; one column fill (pink or green) marks the winner.
|
|
268
|
+
**Accent** the single column fill. **Silence** tight — the second density exception. **Fixed**
|
|
269
|
+
cream-2 fill, 0.3cqw internal rules, ink head row with cream Archivo labels. **Free** rows, which
|
|
270
|
+
column fills, copy. **Density** dense-exception.
|
|
271
|
+
|
|
272
|
+
## Composition Rules
|
|
273
|
+
|
|
274
|
+
### Do
|
|
275
|
+
|
|
276
|
+
- Compose around **one idea per frame**, focal element **3–5× its neighbors** (squint test).
|
|
277
|
+
- **Lean centered** — cover, claim, stat grid, and closer all center their focal element; reserve left/asymmetric for the marker and ledger.
|
|
278
|
+
- Keep sparse frames **45–60% empty**; only the stat grid and ledger run dense.
|
|
279
|
+
- Use **two or three accents per frame**; reserve `{colors.green}` ground for the closing plate.
|
|
280
|
+
- Spend the hard offset shadow on **one featured block per frame**.
|
|
281
|
+
- Size headlines **fit-to-measure**; render Archivo Black uppercase at 0.92 lh.
|
|
282
|
+
|
|
283
|
+
### Don't
|
|
284
|
+
|
|
285
|
+
- Don't round corners (except the pill chip); don't gradient, blur, or glow.
|
|
286
|
+
- Don't set Archivo Black in sentence case or letter-space it beyond −0.01em.
|
|
287
|
+
- Don't use all four accents on one frame, a fifth accent, or pure white.
|
|
288
|
+
- Don't center body copy or set labels in anything but JetBrains Mono.
|
|
289
|
+
- Don't blow a headline edge-to-edge — step the ramp down for long lines.
|
|
290
|
+
- Don't put two hard shadows on one frame.
|
|
291
|
+
|
|
292
|
+
## Aspect-Ratio Behavior
|
|
293
|
+
|
|
294
|
+
| Treatment | 16:9 | 9:16 | 1:1 |
|
|
295
|
+
| ----------------- | ------------------------------- | ---------------------------- | ------------------------ |
|
|
296
|
+
| Wordmark Cover | two lines centered | stacked taller, circle top | centered, tighter |
|
|
297
|
+
| Big Claim | claim left, full accent | claim top, accent full | claim centered |
|
|
298
|
+
| Stat Grid | head over 3-up row | head top, 3 stacked | head top, 2×2 (4th cell) |
|
|
299
|
+
| Closing Plate | sign-off centered, stamp corner | stacked, stamp below | centered, stamp corner |
|
|
300
|
+
| Featured Marker | marker asymmetric | marker centered, shadow down | marker centered |
|
|
301
|
+
| Comparison Ledger | full-width table | table scrolls to fewer cols | 2-col table |
|
|
302
|
+
|
|
303
|
+
Safe area holds the `3.3cqw` chrome inset on the short edge for every ratio; re-step display per
|
|
304
|
+
ratio so no load-bearing line drops below the 1.4cqw floor.
|
|
305
|
+
|
|
306
|
+
## Approved Entities
|
|
307
|
+
|
|
308
|
+
No real customers, logos, or vendors are defined in the source — render any such mark as a
|
|
309
|
+
placeholder. Products/sections are content-agnostic; the system supplies geometry, not brands.
|
|
310
|
+
|
|
311
|
+
## Numerals & Claims (hard rule)
|
|
312
|
+
|
|
313
|
+
Never invent figures, percentages, counts, or dates at frame scale. Render data slots as
|
|
314
|
+
`— figure —`, `{metric}`, `N×`. Real numerals appear only when the script supplies them — the stat
|
|
315
|
+
grid and ledger especially carry placeholders, not fabricated values.
|
|
316
|
+
|
|
317
|
+
## Pre-Render Self-Audit
|
|
318
|
+
|
|
319
|
+
- **Squint** — one element dominates at 3–5× its neighbor, else rescale.
|
|
320
|
+
- **Silence** — sparse frames 45–60% empty; only stat grid / ledger run dense.
|
|
321
|
+
- **Accents** — two or three per frame, never all four; green ground only on the closer.
|
|
322
|
+
- **Depth** — 0 blur; at most one hard offset shadow; color-block contrast otherwise.
|
|
323
|
+
- **Geometry** — square corners except the pill; rotation only at −4/−6deg.
|
|
324
|
+
- **Type** — Archivo Black uppercase 0.92 lh, fit-to-measure, ≥1.4cqw on load-bearing lines.
|
|
325
|
+
- **Anchor** — centered default; left/asymmetric only on marker + ledger; no 3 consecutive frames share an anchor.
|
|
326
|
+
- **Fabrication** — every numeral traces to the script, else placeholder.
|
|
327
|
+
|
|
328
|
+
## Known Gaps
|
|
329
|
+
|
|
330
|
+
- **Motion intentionally out of scope.** frame.md specifies composition only; timing and transitions are a later stage. The closing green is described as a _plate_, not a transition.
|
|
331
|
+
- **Archivo Black requires Google Fonts**; fallback is `sans-serif`. CJK pairing (Noto Serif SC 900 / NSC 400) carries over from the source's CJK section.
|
|
332
|
+
- **9:16 / 1:1 are guidance**, not pixel-locked; verify the legibility floor per ratio.
|
|
333
|
+
- Decorative geometry (circle, stamp, stacked blocks) is CSS-only; no external imagery is required.
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Creative Mode — caption skin (preset-local source).
|
|
3
|
+
|
|
4
|
+
This is the preset's own lower-third karaoke caption look. product-launch-video's
|
|
5
|
+
Step 2 copies it into the project as caption-skin.html; captions.mjs then fills the
|
|
6
|
+
three reserved holes, wraps the fragment in a <template>, and writes
|
|
7
|
+
compositions/captions.html:
|
|
8
|
+
· the empty GROUPS array → the engine's scene-aware word groups
|
|
9
|
+
· the 0 duration + 0 width/height → real total + canvas size
|
|
10
|
+
· the empty data-brand-tokens style → :root tokens derived from the project's frame.md
|
|
11
|
+
|
|
12
|
+
Token contract — reference ONLY this fixed vocab (captions.mjs injects it from
|
|
13
|
+
frame.md, so the Step-2 brand overlay flows through; each var has a creative-mode
|
|
14
|
+
literal fallback for standalone preview):
|
|
15
|
+
--cap-ink · --cap-canvas · --cap-accent · --cap-accent-2 · --font-display ·
|
|
16
|
+
--font-body · --cap-band-top · --cap-band-height
|
|
17
|
+
Hooks (do not rename): .caption-group / .caption-word + states .is-active / .is-spoken,
|
|
18
|
+
root data-composition-id="captions", timeline at window.__timelines["captions"].
|
|
19
|
+
State changes use gsap.set({className}) (applied on the engine's frame-by-frame seek);
|
|
20
|
+
never tl.call() callbacks (seek does not fire them → wrong state on render).
|
|
21
|
+
|
|
22
|
+
Visual: a warm-cream card on a thick 4px ink border with a HARD offset shadow (a solid
|
|
23
|
+
same-direction ink+orange duplicate, no blur — creative-mode's only depth device),
|
|
24
|
+
square corners. Archivo Black, UPPERCASE, 0.92 line-height, ink glyphs. Upcoming words
|
|
25
|
+
sit in faint ink; the current word becomes a solid yellow inked block (the brand's
|
|
26
|
+
signature hard-offset-shadow accent block, no blur) with ink reading on top; spoken
|
|
27
|
+
words settle to solid ink, the accent block cleared.
|
|
28
|
+
-->
|
|
29
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
30
|
+
|
|
31
|
+
<!-- captions.mjs injects the project's :root tokens here -->
|
|
32
|
+
<style data-brand-tokens></style>
|
|
33
|
+
|
|
34
|
+
<style>
|
|
35
|
+
#captions-root {
|
|
36
|
+
position: absolute;
|
|
37
|
+
inset: 0;
|
|
38
|
+
pointer-events: none;
|
|
39
|
+
}
|
|
40
|
+
.caption-layer {
|
|
41
|
+
position: absolute;
|
|
42
|
+
inset: 0;
|
|
43
|
+
z-index: 20;
|
|
44
|
+
pointer-events: none;
|
|
45
|
+
}
|
|
46
|
+
/* the keep-out band, from captionBand(H) — frame content stays above it */
|
|
47
|
+
.caption-stage {
|
|
48
|
+
position: absolute;
|
|
49
|
+
left: 0;
|
|
50
|
+
right: 0;
|
|
51
|
+
top: var(--cap-band-top, 900px);
|
|
52
|
+
height: var(--cap-band-height, 180px);
|
|
53
|
+
display: flex;
|
|
54
|
+
align-items: center;
|
|
55
|
+
justify-content: center;
|
|
56
|
+
}
|
|
57
|
+
.caption-group {
|
|
58
|
+
/* every group is absolutely stacked over the SAME band — exactly one shown at a
|
|
59
|
+
time via opacity. Must be absolute: in-flow groups would lay out side-by-side. */
|
|
60
|
+
position: absolute;
|
|
61
|
+
inset: 0;
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
justify-content: center;
|
|
65
|
+
opacity: 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* THE cream card — thick 4px ink border + the signature HARD offset shadow
|
|
69
|
+
(a solid same-direction orange+ink duplicate, no blur), square corners */
|
|
70
|
+
.caption-pill {
|
|
71
|
+
max-width: 80%;
|
|
72
|
+
padding: 18px 40px 22px;
|
|
73
|
+
background: var(--cap-canvas, #efe9d9);
|
|
74
|
+
border: 4px solid var(--cap-ink, #0f0f0f);
|
|
75
|
+
border-radius: 0;
|
|
76
|
+
box-shadow:
|
|
77
|
+
14px 14px 0 var(--cap-accent-2, #e85a1f),
|
|
78
|
+
14px 14px 0 4px var(--cap-ink, #0f0f0f);
|
|
79
|
+
}
|
|
80
|
+
.caption-line {
|
|
81
|
+
display: flex;
|
|
82
|
+
flex-wrap: wrap;
|
|
83
|
+
justify-content: center;
|
|
84
|
+
gap: 0.16em 0.3em;
|
|
85
|
+
font-family: var(--font-display, "Archivo Black"), sans-serif;
|
|
86
|
+
font-weight: 400;
|
|
87
|
+
text-transform: uppercase;
|
|
88
|
+
font-size: clamp(34px, 3.8vw, 52px);
|
|
89
|
+
line-height: 0.92;
|
|
90
|
+
letter-spacing: -0.01em;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* upcoming — faint ink, no accent block */
|
|
94
|
+
.caption-word {
|
|
95
|
+
display: inline-block;
|
|
96
|
+
padding: 0.02em 0.1em;
|
|
97
|
+
color: color-mix(in srgb, var(--cap-ink, #0f0f0f) 38%, var(--cap-canvas, #efe9d9));
|
|
98
|
+
}
|
|
99
|
+
/* current word — THE hard yellow inked block (box-shadow spread = a hard square
|
|
100
|
+
block w/o layout shift; no blur), ink reading on top */
|
|
101
|
+
.caption-word.is-active {
|
|
102
|
+
color: var(--cap-ink, #0f0f0f);
|
|
103
|
+
background: var(--cap-accent, #f5c518);
|
|
104
|
+
box-shadow: 0 0 0 0.08em var(--cap-accent, #f5c518);
|
|
105
|
+
}
|
|
106
|
+
/* already spoken — solid ink, accent block cleared */
|
|
107
|
+
.caption-word.is-spoken {
|
|
108
|
+
color: var(--cap-ink, #0f0f0f);
|
|
109
|
+
background: transparent;
|
|
110
|
+
box-shadow: none;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* optional per-word accents (dormant until a word-classer tags them) */
|
|
114
|
+
/* brand / key term — an inverted ink chip (the kicker-block voice) */
|
|
115
|
+
.caption-word.cap-brand {
|
|
116
|
+
color: var(--cap-canvas, #efe9d9);
|
|
117
|
+
background: var(--cap-ink, #0f0f0f);
|
|
118
|
+
box-shadow: 0 0 0 0.08em var(--cap-ink, #0f0f0f);
|
|
119
|
+
}
|
|
120
|
+
/* numerals / data — the mono voice, slightly recessed */
|
|
121
|
+
.caption-word.cap-num {
|
|
122
|
+
font-family: var(--font-body, "Space Grotesk"), ui-monospace, monospace;
|
|
123
|
+
color: color-mix(in srgb, var(--cap-ink, #0f0f0f) 72%, var(--cap-canvas, #efe9d9));
|
|
124
|
+
}
|
|
125
|
+
/* emphasis — a thick orange underline (the counter accent) */
|
|
126
|
+
.caption-word.cap-cta {
|
|
127
|
+
text-decoration: underline;
|
|
128
|
+
text-decoration-thickness: 3px;
|
|
129
|
+
text-decoration-color: var(--cap-accent-2, #e85a1f);
|
|
130
|
+
text-underline-offset: 0.12em;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@media (max-aspect-ratio: 9/16) {
|
|
134
|
+
.caption-pill {
|
|
135
|
+
max-width: 92%;
|
|
136
|
+
}
|
|
137
|
+
.caption-line {
|
|
138
|
+
font-size: clamp(30px, 5vw, 44px);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
</style>
|
|
142
|
+
|
|
143
|
+
<div
|
|
144
|
+
id="captions-root"
|
|
145
|
+
data-composition-id="captions"
|
|
146
|
+
data-timeline-locked
|
|
147
|
+
data-start="0"
|
|
148
|
+
data-duration="0"
|
|
149
|
+
data-fps="30"
|
|
150
|
+
data-width="0"
|
|
151
|
+
data-height="0"
|
|
152
|
+
>
|
|
153
|
+
<div class="caption-layer" aria-hidden="true">
|
|
154
|
+
<div id="caption-stage" class="caption-stage"></div>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<script>
|
|
159
|
+
// captions.mjs injects the engine's scene-aware groups + real duration here.
|
|
160
|
+
var GROUPS = [];
|
|
161
|
+
var DURATION = 0;
|
|
162
|
+
|
|
163
|
+
(function () {
|
|
164
|
+
var stage = document.getElementById("caption-stage");
|
|
165
|
+
|
|
166
|
+
// build DOM: one .caption-group per group, .caption-word per word
|
|
167
|
+
GROUPS.forEach(function (group, g) {
|
|
168
|
+
var groupEl = document.createElement("div");
|
|
169
|
+
groupEl.className = "caption-group";
|
|
170
|
+
groupEl.id = "caption-group-" + g;
|
|
171
|
+
var pill = document.createElement("div");
|
|
172
|
+
pill.className = "caption-pill";
|
|
173
|
+
var line = document.createElement("div");
|
|
174
|
+
line.className = "caption-line";
|
|
175
|
+
(group.words || []).forEach(function (w, i) {
|
|
176
|
+
var span = document.createElement("span");
|
|
177
|
+
span.className = "caption-word";
|
|
178
|
+
span.id = "caption-word-" + g + "-" + i;
|
|
179
|
+
span.textContent = String(w.text);
|
|
180
|
+
line.appendChild(span);
|
|
181
|
+
});
|
|
182
|
+
pill.appendChild(line);
|
|
183
|
+
groupEl.appendChild(pill);
|
|
184
|
+
stage.appendChild(groupEl);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
window.__timelines = window.__timelines || {};
|
|
188
|
+
var tl = gsap.timeline({ paused: true });
|
|
189
|
+
|
|
190
|
+
GROUPS.forEach(function (group, g) {
|
|
191
|
+
var groupEl = document.getElementById("caption-group-" + g);
|
|
192
|
+
var words = group.words || [];
|
|
193
|
+
var next = GROUPS[g + 1];
|
|
194
|
+
var isLast = g === GROUPS.length - 1;
|
|
195
|
+
var start = Math.max(0, Number(group.start));
|
|
196
|
+
var end = isLast ? DURATION : Math.min(Number(next.start), Number(group.end) + 0.3);
|
|
197
|
+
if (end <= start) end = start + 0.01;
|
|
198
|
+
|
|
199
|
+
// group on/off — exactly one group visible at a time
|
|
200
|
+
tl.set(groupEl, { opacity: 1 }, start);
|
|
201
|
+
tl.set(groupEl, { opacity: 0 }, end);
|
|
202
|
+
|
|
203
|
+
// 3-state karaoke via className SETS — seek-safe (gsap.set applies on the
|
|
204
|
+
// engine's frame-by-frame seek; .call callbacks would NOT fire).
|
|
205
|
+
words.forEach(function (w, i) {
|
|
206
|
+
var el = document.getElementById("caption-word-" + g + "-" + i);
|
|
207
|
+
var at = Math.max(start, Number(w.start));
|
|
208
|
+
tl.set(el, { className: "caption-word" }, start); // upcoming (also resets on reverse-seek)
|
|
209
|
+
tl.set(el, { className: "caption-word is-active" }, at); // current
|
|
210
|
+
tl.fromTo(el, { scale: 0.92 }, { scale: 1, duration: 0.16, ease: "back.out(2.2)" }, at);
|
|
211
|
+
if (i + 1 < words.length) {
|
|
212
|
+
var nextAt = Math.max(start, Number(words[i + 1].start));
|
|
213
|
+
tl.set(el, { className: "caption-word is-spoken" }, nextAt); // demote when next activates
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
if (words.length) {
|
|
217
|
+
var lastEl = document.getElementById("caption-word-" + g + "-" + (words.length - 1));
|
|
218
|
+
var lastSpoken = Math.min(end, Number(words[words.length - 1].end) + 0.1);
|
|
219
|
+
tl.set(lastEl, { className: "caption-word is-spoken" }, lastSpoken);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
// full-span anchor so the sub-comp timeline spans the whole video
|
|
224
|
+
tl.to({}, { duration: DURATION }, 0);
|
|
225
|
+
window.__timelines["captions"] = tl;
|
|
226
|
+
})();
|
|
227
|
+
</script>
|