@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,307 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: alpha
|
|
3
|
+
name: Blue Professional — Frame (video / frame layer)
|
|
4
|
+
description: >
|
|
5
|
+
Video-first companion to Blue Professional's design.md. The unit is the frame (1920×1080). Atoms
|
|
6
|
+
are identical and sacred — the warm cream canvas, a single saturated cobalt (#1e2bfa) as the only
|
|
7
|
+
accent, the three-step gray text ladder, Space Grotesk (display/numerals/chrome) + Inter (body),
|
|
8
|
+
soft cobalt-tinted cards (4% fill / 20% border / 10–14px radius) with NO shadows, pill chrome, and
|
|
9
|
+
the cobalt progress bar. Composition + frame scale rewritten. Motion 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
|
+
bg: "#fdfae7"
|
|
15
|
+
primary: "#1e2bfa"
|
|
16
|
+
text: "#111111"
|
|
17
|
+
text-muted: "#6b6b6b"
|
|
18
|
+
text-light: "#9a9a9a"
|
|
19
|
+
accent-light: "rgba(30,43,250,0.08)"
|
|
20
|
+
accent-medium: "rgba(30,43,250,0.15)"
|
|
21
|
+
border: "rgba(30,43,250,0.2)"
|
|
22
|
+
card-bg: "rgba(30,43,250,0.04)"
|
|
23
|
+
positive: "#059669"
|
|
24
|
+
negative: "#dc2626"
|
|
25
|
+
|
|
26
|
+
radii:
|
|
27
|
+
pill: "100px"
|
|
28
|
+
card-lg: "14px"
|
|
29
|
+
card-md: "12px"
|
|
30
|
+
card-sm: "10px"
|
|
31
|
+
bar: "6px"
|
|
32
|
+
circle: "50%"
|
|
33
|
+
|
|
34
|
+
typography:
|
|
35
|
+
# — reading ramp (Inter body + Space Grotesk chrome) —
|
|
36
|
+
body: { fontFamily: "Inter", cqw: 0.85, weight: 400, lineHeight: 1.6, color: "text-muted" }
|
|
37
|
+
h4-eyebrow:{ fontFamily: "Space Grotesk", cqw: 0.8, weight: 600, tracking: "0.08em", upper: true, color: "primary" }
|
|
38
|
+
tag: { fontFamily: "Space Grotesk", px: 12, weight: 500, color: "primary" }
|
|
39
|
+
counter: { fontFamily: "Space Grotesk", px: 13, weight: 500, tracking: "0.05em", color: "text-muted" }
|
|
40
|
+
# — display / numerical ramp (Space Grotesk, near-black headings / cobalt numerals) —
|
|
41
|
+
h3: { fontFamily: "Space Grotesk", cqw: 1.25, weight: 500, lineHeight: 1.3, tracking: "-0.02em", color: "text" }
|
|
42
|
+
stat-num:{ fontFamily: "Space Grotesk", cqw: 1.9, weight: 700, lineHeight: 1.0, color: "primary" }
|
|
43
|
+
blockquote:{ fontFamily: "Space Grotesk", cqw: 2.4, weight: 500, lineHeight: 1.35, color: "text" }
|
|
44
|
+
h2: { fontFamily: "Space Grotesk", cqw: 2.6, weight: 600, lineHeight: 1.1, tracking: "-0.02em", color: "text" }
|
|
45
|
+
metric-value:{ fontFamily: "Space Grotesk", cqw: 3.0, weight: 700, lineHeight: 1.0, color: "primary" }
|
|
46
|
+
h1: { fontFamily: "Space Grotesk", cqw: 4.2, weight: 700, lineHeight: 1.08, tracking: "-0.02em", color: "text" }
|
|
47
|
+
quote-mark:{ fontFamily: "Space Grotesk", cqw: 8.0, weight: 700, lineHeight: 0.5, color: "primary", opacity: 0.15 }
|
|
48
|
+
|
|
49
|
+
spacing:
|
|
50
|
+
pad-x: "5cqw"
|
|
51
|
+
pad-y-top: "5cqw"
|
|
52
|
+
gap-cards: "1.4cqw"
|
|
53
|
+
accent-line: "60px × 4px"
|
|
54
|
+
|
|
55
|
+
components:
|
|
56
|
+
card-tinted:
|
|
57
|
+
backgroundColor: "{colors.card-bg}"
|
|
58
|
+
border: "1.5px solid {colors.border}"
|
|
59
|
+
rounded: "{radii.card-lg}"
|
|
60
|
+
shadow: "none"
|
|
61
|
+
description: "Universal content card. Never solid-colored, never opaque-bordered, NO shadow."
|
|
62
|
+
metric-card:
|
|
63
|
+
backgroundColor: "{colors.card-bg}"
|
|
64
|
+
border: "1.5px solid {colors.border}"
|
|
65
|
+
rounded: "{radii.card-lg}"
|
|
66
|
+
typography: "{typography.metric-value} ({colors.primary}) + {typography.metric-label} + {typography.metric-desc}"
|
|
67
|
+
description: "+ optional inline ↑/↓ change chip ({colors.positive}/{colors.negative} text, no fill)."
|
|
68
|
+
tag-pill:
|
|
69
|
+
backgroundColor: "{colors.accent-light}"
|
|
70
|
+
textColor: "{colors.primary}"
|
|
71
|
+
rounded: "{radii.pill}"
|
|
72
|
+
typography: "{typography.tag}"
|
|
73
|
+
description: "Top-right of the slide-header."
|
|
74
|
+
cta-button:
|
|
75
|
+
backgroundColor: "{colors.primary}"
|
|
76
|
+
textColor: "{colors.bg}"
|
|
77
|
+
rounded: "{radii.pill}"
|
|
78
|
+
typography: "Space Grotesk 600"
|
|
79
|
+
shadow: "soft cobalt on hover only — the system's only shadow"
|
|
80
|
+
description: "The one solid element."
|
|
81
|
+
accent-line:
|
|
82
|
+
backgroundColor: "{colors.primary}"
|
|
83
|
+
size: "60×4, 2px radius"
|
|
84
|
+
description: "Above cover titles / eyebrow separators."
|
|
85
|
+
bar-track:
|
|
86
|
+
backgroundColor: "{colors.accent-light}"
|
|
87
|
+
fill: "{colors.primary} (display:block so width resolves)"
|
|
88
|
+
rounded: "{radii.bar}"
|
|
89
|
+
description: "28px track; fill carries the value."
|
|
90
|
+
step-circle:
|
|
91
|
+
backgroundColor: "{colors.primary}"
|
|
92
|
+
textColor: "{colors.bg}"
|
|
93
|
+
rounded: "50%"
|
|
94
|
+
size: "56px"
|
|
95
|
+
description: "Sequential steps fade opacity 1.0→0.85→0.7→0.55."
|
|
96
|
+
split-highlight:
|
|
97
|
+
backgroundColor: "{colors.accent-light}"
|
|
98
|
+
borderLeft: "4px solid {colors.primary}"
|
|
99
|
+
rounded: "{radii.card-md}"
|
|
100
|
+
description: "Inline pull-quote callout."
|
|
101
|
+
slide-header:
|
|
102
|
+
typography: "{typography.h4-eyebrow} (cobalt) left, tag-pill right; {typography.h2} below"
|
|
103
|
+
description: "Top band of every content frame."
|
|
104
|
+
atmosphere:
|
|
105
|
+
elements: "clipped diagonal cobalt-tint panel, 3×3 cobalt dot grid, concentric closing rings"
|
|
106
|
+
description: "Cover/closing only. Never on content frames."
|
|
107
|
+
progress-bar:
|
|
108
|
+
backgroundColor: "{colors.primary}"
|
|
109
|
+
size: "3px tall, bottom edge, width grows with index"
|
|
110
|
+
description: "Persistent progress strip."
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
# Blue Professional — Frame (video / frame layer)
|
|
114
|
+
|
|
115
|
+
## Overview
|
|
116
|
+
|
|
117
|
+
Blue Professional at frame scale is a **consulting-grade system: restraint with one strong
|
|
118
|
+
commitment.** A warm cream canvas and a single saturated cobalt that carries every accent —
|
|
119
|
+
eyebrow, metric, CTA, chart fill, progress bar. No secondary brand color, no pastels, just cream,
|
|
120
|
+
cobalt, and a tight ladder of grays. The register is investment-research / McKinsey briefing:
|
|
121
|
+
measured, data-dense without crowding, executive-readable at distance.
|
|
122
|
+
|
|
123
|
+
The voice is two faces in fixed roles: **Space Grotesk** (display, every numeral, all chrome —
|
|
124
|
+
eyebrows uppercase 0.08em) and **Inter** (body, muted gray, line 1.6). Headlines are near-black;
|
|
125
|
+
cobalt is reserved for accent moments. Depth is **soft and tinted** — 4% cobalt card fills with 20%
|
|
126
|
+
cobalt borders and 10–14px radii — never shadowed. The lack of harsh shadows is the premium signal.
|
|
127
|
+
|
|
128
|
+
**Key characteristics at frame scale:**
|
|
129
|
+
|
|
130
|
+
- **Warm cream ground** on every frame; **single cobalt** as the only accent.
|
|
131
|
+
- **Space Grotesk** (display/numerals/chrome) + **Inter** (body) — near-black headlines, cobalt numerals.
|
|
132
|
+
- **Tinted cards** — cobalt 4% fill, cobalt 20% 1.5px border, 10–14px radius, **no shadow**.
|
|
133
|
+
- **Pill chrome** (100px) — tag pills + the one solid cobalt CTA; cobalt **progress bar**.
|
|
134
|
+
- **Soft rounded corners everywhere** (no square corners save the progress bar).
|
|
135
|
+
- **Atmosphere** (diagonal panel, dot grid, concentric rings) on cover/closing only.
|
|
136
|
+
|
|
137
|
+
## The Frame
|
|
138
|
+
|
|
139
|
+
### Frame Craft Bar
|
|
140
|
+
|
|
141
|
+
Three eyeball tests gate every frame before any structural check:
|
|
142
|
+
|
|
143
|
+
- **Squint** — one **near-black headline or cobalt numeral** dominates at 3–6× its neighbor.
|
|
144
|
+
- **Silence** — content frames read **balanced, not crowded**; the **dashboard is the one dense exception**.
|
|
145
|
+
- **Restraint** — a **single cobalt accent** carries everything; headlines stay near-black (never cobalt); no shadows (tinted cards do the lift); positive/negative inline-text only.
|
|
146
|
+
- **Reference** — aim at an **investment-research / McKinsey quarterly briefing**; failure looks like a **heavy-outlined, multi-color dashboard**.
|
|
147
|
+
|
|
148
|
+
- **Primary:** 1920×1080 (16:9). Display authored in **`cqw`** (`px ÷ 1920 × 100 = cqw`).
|
|
149
|
+
- **Vertical:** 1080×1920 (9:16). **Square:** 1080×1080 (1:1).
|
|
150
|
+
- **Safe area:** `pad-x` 5cqw; bottom reserves room for the counter + progress bar.
|
|
151
|
+
|
|
152
|
+
**The container law (load-bearing).** Every frame ground sets `container-type: size`; ALL
|
|
153
|
+
frame-relative units are `cqw`/`cqh` against it — never `vw`. Card radii stay px (10–14px); the
|
|
154
|
+
pill radius stays 100px; borders stay 1–1.5px.
|
|
155
|
+
|
|
156
|
+
## Colors
|
|
157
|
+
|
|
158
|
+
Tokens identical to the source. `{colors.bg}` cream is the universal ground; `{colors.primary}`
|
|
159
|
+
cobalt is the **only** accent — every eyebrow, numeral, CTA, chart fill, progress bar, and the 4px
|
|
160
|
+
highlight left-rule. Headlines are `{colors.text}` near-black (never cobalt); body is
|
|
161
|
+
`{colors.text-muted}`; tertiary is `{colors.text-light}`. Cards fill `{colors.card-bg}` (4%) with
|
|
162
|
+
`{colors.border}` (20%) borders. `{colors.positive}`/`{colors.negative}` appear **only inline** on
|
|
163
|
+
directional change chips — never as fills. **No second accent color.**
|
|
164
|
+
|
|
165
|
+
## Typography
|
|
166
|
+
|
|
167
|
+
Two ramps. The **reading ramp** (Inter body 0.85cqw muted; Space Grotesk eyebrow uppercase 0.08em
|
|
168
|
+
cobalt) carries copy + chrome; the **display/numerical ramp** (Space Grotesk `h3` 1.25cqw → `h1`
|
|
169
|
+
4.2cqw near-black; numerals `stat-num`/`metric-value` in cobalt) carries headings and figures.
|
|
170
|
+
|
|
171
|
+
- **Legibility floor:** any load-bearing line ≥ **1.4cqw**; px chrome (tag/counter) is colophon only.
|
|
172
|
+
- **Fit-to-measure:** size the headline to its length. Cap the block at **≤ 78cqw**; ≤3 words → `h1`; 4–6 → `h2`; 7+ → `h3`. Cobalt numerals scale `metric-value`→`stat-num` by card size.
|
|
173
|
+
- **Headlines near-black, −0.02em**; **eyebrows cobalt, uppercase, 0.08em**; **numerals cobalt 600–700**; **body Inter 400 muted, line 1.6**. No italic, no uppercase body, no cobalt headline.
|
|
174
|
+
|
|
175
|
+
## Depth & Surface
|
|
176
|
+
|
|
177
|
+
Soft and tinted — never offset. Depth from:
|
|
178
|
+
|
|
179
|
+
- **Tinted cards** — 4% cobalt fill + 20% cobalt 1.5px border + 10–14px radius reads as lifted without offset.
|
|
180
|
+
- **Border-left accent** — the 4px cobalt rule on split-highlight blocks pulls a callout forward.
|
|
181
|
+
- **Rounded corners** — the 10–14px radius is part of the softness; square corners break it.
|
|
182
|
+
|
|
183
|
+
**Ceiling:** zero box-shadow on content (the only shadow is a soft cobalt CTA _hover_); no opaque cobalt borders; no harsh outlines.
|
|
184
|
+
|
|
185
|
+
## Shapes
|
|
186
|
+
|
|
187
|
+
- **100px** — tag pills, CTA, nav buttons (pill chrome).
|
|
188
|
+
- **14/12/10px** — cards by size (large metric / standard stat / detail + mini).
|
|
189
|
+
- **6px** — bar tracks + fills. **50%** — step circles, nav circles, dots, closing rings.
|
|
190
|
+
- **0** — only the progress bar. No square-cornered content.
|
|
191
|
+
|
|
192
|
+
## Components
|
|
193
|
+
|
|
194
|
+
- **card-tinted / metric-card** — the universal soft-tint content cards (no shadow).
|
|
195
|
+
- **tag-pill / cta-button / accent-line** — the cobalt pill chrome + the one solid CTA + the 60×4 rule.
|
|
196
|
+
- **bar-track / step-circle / split-highlight** — cobalt data + sequence + callout patterns.
|
|
197
|
+
- **slide-header** (eyebrow + tag pill) — the structural rhythm; **atmosphere** (diagonal/dots/rings) on cover/closing only; **progress-bar** on every frame.
|
|
198
|
+
|
|
199
|
+
## Frame Treatments
|
|
200
|
+
|
|
201
|
+
> Recipe: ground · container · composes · focal · chrome · accent · silence · Fixed/Free · density.
|
|
202
|
+
> Atmosphere only on cover/closing; content frames carry the slide-header rhythm.
|
|
203
|
+
|
|
204
|
+
### 1 · Cover (identity · move: diagonal accent · left)
|
|
205
|
+
|
|
206
|
+
**Ground** cream + the clipped diagonal cobalt-tint panel (right ~36%) + a 3×3 cobalt dot grid.
|
|
207
|
+
**Composes** accent-line, meta, h1, body sub. **Focal** a 2-line Space Grotesk `h1` near-black, left,
|
|
208
|
+
under a cobalt accent-line + meta. **Chrome** counter + progress bar. **Accent** the cobalt line +
|
|
209
|
+
diagonal panel. **Silence** the diagonal panel holds the right third. **Fixed** near-black h1, cobalt
|
|
210
|
+
accents, atmosphere here only. **Free** title, meta. **Density** low.
|
|
211
|
+
|
|
212
|
+
### 2 · Dashboard (data · move: 3-up metric grid · the dense frame)
|
|
213
|
+
|
|
214
|
+
**Ground** cream, `pad-x`. **Composes** slide-header (eyebrow + tag-pill), h2, 3× metric/tinted card.
|
|
215
|
+
**Focal** a row of tinted cards — cobalt `metric-value` + Inter label + muted desc + optional
|
|
216
|
+
green/red change chip. **Chrome** eyebrow left, tag-pill right; progress bar. **Accent** the cobalt
|
|
217
|
+
numerals. **Silence** tight — the density exception. **Fixed** 4% tint cards, 20% borders, no shadow,
|
|
218
|
+
cobalt numerals. **Free** figures (from script), labels. **Density** dense-exception.
|
|
219
|
+
|
|
220
|
+
### 3 · Bar Ranking (data · move: cobalt bars · left)
|
|
221
|
+
|
|
222
|
+
**Ground** cream, `pad-x`. **Composes** eyebrow, h2, bar-track rows. **Focal** 3–5 labeled
|
|
223
|
+
cobalt-fill bars on cobalt-8% tracks with cobalt percentages. **Chrome** eyebrow; progress bar.
|
|
224
|
+
**Accent** the cobalt fills + figures. **Silence** moderate. **Fixed** 6px tracks, cobalt fills.
|
|
225
|
+
**Free** rows, values (from script). **Density** standard.
|
|
226
|
+
|
|
227
|
+
### 4 · Pull Quote (quote · move: concentric rings · centered)
|
|
228
|
+
|
|
229
|
+
**Ground** cream, centered, with faint concentric closing-rings behind. **Composes** quote-mark,
|
|
230
|
+
blockquote, cite. **Focal** a Space Grotesk `blockquote` near-black under a 15%-opacity cobalt
|
|
231
|
+
quote-mark; an uppercase cobalt-muted cite beneath. **Accent** the faint rings + quote-mark. **Silence**
|
|
232
|
+
~55%. **Fixed** near-black quote, soft rings. **Free** quote, cite. **Density** low.
|
|
233
|
+
|
|
234
|
+
### 5 · Split + Highlight (content · move: asymmetric split · left)
|
|
235
|
+
|
|
236
|
+
**Ground** cream, two columns. **Composes** eyebrow, h2, body, split-highlight block. **Focal** an
|
|
237
|
+
Inter body column beside a cobalt-8% highlight block (4px cobalt left rule) carrying an inline pull
|
|
238
|
+
quote. **Accent** the highlight's left rule. **Silence** generous gutter. **Fixed** tinted highlight,
|
|
239
|
+
4px cobalt rule. **Free** body, callout. **Density** standard.
|
|
240
|
+
|
|
241
|
+
### 6 · Closing / CTA (closer · move: centered rings + CTA)
|
|
242
|
+
|
|
243
|
+
**Ground** cream + concentric closing-rings. **Composes** accent-line, h1, body, cta-button. **Focal**
|
|
244
|
+
a Space Grotesk `h1` near-black, centered, with the one solid cobalt `cta-button` pill below. **Accent**
|
|
245
|
+
the CTA + rings. **Silence** ~60%. **Fixed** one CTA, near-black h1, soft rings. **Free** sign-off, CTA
|
|
246
|
+
label. **Density** low.
|
|
247
|
+
|
|
248
|
+
## Composition Rules
|
|
249
|
+
|
|
250
|
+
### Do
|
|
251
|
+
|
|
252
|
+
- Start every frame on **warm cream**; let **cobalt carry every accent** (eyebrow, numeral, CTA, bar, progress).
|
|
253
|
+
- Set headlines **near-black, −0.02em**; eyebrows **cobalt uppercase 0.08em**; numerals **cobalt 600–700**.
|
|
254
|
+
- Use **tinted cards** (4% fill, 20% border, 10–14px radius, no shadow); body Inter 400 muted, line 1.6.
|
|
255
|
+
- Keep all chrome **pill-shaped (100px)**; one solid cobalt CTA per closing frame.
|
|
256
|
+
- Reserve **atmosphere** (diagonal panel, dots, rings) for cover/closing; content frames keep the slide-header rhythm.
|
|
257
|
+
- Lean left on cover/dashboard/split, centered on quote/closer.
|
|
258
|
+
|
|
259
|
+
### Don't
|
|
260
|
+
|
|
261
|
+
- No second accent color; no cobalt headlines.
|
|
262
|
+
- No drop shadows on content (only the soft cobalt CTA hover); no opaque cobalt borders.
|
|
263
|
+
- No square corners (save the progress bar); no font substitutes; no uppercase body.
|
|
264
|
+
- Don't use the green/red change chips as general accents — directional comparisons only.
|
|
265
|
+
- Don't fill space with heavier borders — add substance; don't blow a headline edge-to-edge.
|
|
266
|
+
|
|
267
|
+
## Aspect-Ratio Behavior
|
|
268
|
+
|
|
269
|
+
| Treatment | 16:9 | 9:16 | 1:1 |
|
|
270
|
+
| ----------------- | -------------------------- | ------------------------------ | ------------------------ |
|
|
271
|
+
| Cover | title left, diagonal right | title top, diagonal band below | title upper, dots corner |
|
|
272
|
+
| Dashboard | 3 cards across | 3 stacked | 2×2 |
|
|
273
|
+
| Bar Ranking | 3–5 bars | 3–5 bars (tighter) | 3 bars |
|
|
274
|
+
| Pull Quote | centered, rings behind | centered, taller | centered |
|
|
275
|
+
| Split + Highlight | side-by-side | stacked | stacked |
|
|
276
|
+
| Closing / CTA | centered + CTA | centered + CTA | centered + CTA |
|
|
277
|
+
|
|
278
|
+
`pad-x` holds on the short edge; re-step display above the 1.4cqw floor. The diagonal cover panel
|
|
279
|
+
becomes a top/bottom band on 9:16. Numerals stay Latin Arabic digits in CJK builds.
|
|
280
|
+
|
|
281
|
+
## Approved Entities
|
|
282
|
+
|
|
283
|
+
No real customers, logos, or vendors are defined in the source — render any such mark as a
|
|
284
|
+
placeholder. Figures, metrics, and quotes are content; the system supplies cream + cobalt + grays.
|
|
285
|
+
|
|
286
|
+
## Numerals & Claims (hard rule)
|
|
287
|
+
|
|
288
|
+
Never invent figures, financials, percentages, or dates at frame scale. Render slots as `— figure —`,
|
|
289
|
+
`{metric}`, `+NN%`, `↑ —`. Metric cards, bar values, and stat cells especially carry placeholders
|
|
290
|
+
until the script supplies them. Directional chips require a real comparison from the script.
|
|
291
|
+
|
|
292
|
+
## Pre-Render Self-Audit
|
|
293
|
+
|
|
294
|
+
- **Squint** — one near-black headline or cobalt numeral dominates per frame.
|
|
295
|
+
- **Silence** — content frames balanced, not crowded; only the dashboard runs dense.
|
|
296
|
+
- **Single accent** — cobalt only; headlines near-black; positive/negative inline only.
|
|
297
|
+
- **Type** — Space Grotesk headings −0.02em near-black, cobalt eyebrows 0.08em + numerals; Inter body muted line 1.6; ≥1.4cqw floor.
|
|
298
|
+
- **Depth** — tinted cards (no shadow), soft rounded corners, 20% cobalt borders; no square content corners.
|
|
299
|
+
- **Anchor** — left on cover/dashboard/split, centered on quote/closer; atmosphere on cover/closing only.
|
|
300
|
+
- **Fabrication** — every numeral traces to the script, else placeholder.
|
|
301
|
+
|
|
302
|
+
## Known Gaps
|
|
303
|
+
|
|
304
|
+
- **Motion intentionally out of scope.** frame.md specifies composition only; the source's 500ms translateX transitions + bar-fill animations are deck mechanics.
|
|
305
|
+
- **Space Grotesk + Inter via Google Fonts.** CJK pairing (Noto Sans SC 700 display / Noto Serif SC 400 body) carries over; the eyebrow's uppercase+tracking signal weakens in CJK — pair it with the accent-line.
|
|
306
|
+
- **9:16 / 1:1 are guidance**; verify the floor and that the diagonal panel reflows to a band.
|
|
307
|
+
- Diagonal panel (clip-path), dot grid, concentric rings, and bars are CSS-only; no external imagery is required.
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Blue Professional — 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 blue-professional
|
|
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 soft cobalt-tinted card on warm cream — a 4% cobalt fill inside a 1.5px
|
|
23
|
+
20%-cobalt border, soft 14px rounded corners, NO shadow (the system's premium signal
|
|
24
|
+
is the absence of cast depth; the tinted card does the lift). Space Grotesk, sentence
|
|
25
|
+
case, near-black glyphs. Upcoming words sit in muted gray; the current word becomes a
|
|
26
|
+
solid cobalt chip — the brand's signature single-accent gesture, a pill-rounded fill
|
|
27
|
+
with cream reading on top; spoken words settle to near-black ink, chip 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 tinted card — 4% cobalt fill, 1.5px 20%-cobalt border, soft 14px corners,
|
|
69
|
+
NO shadow (the tinted card does the lift; cast depth is forbidden) */
|
|
70
|
+
.caption-pill {
|
|
71
|
+
max-width: 78%;
|
|
72
|
+
padding: 20px 44px 24px;
|
|
73
|
+
background: color-mix(in srgb, var(--cap-accent, #1e2bfa) 4%, var(--cap-canvas, #fdfae7));
|
|
74
|
+
border: 1.5px solid color-mix(in srgb, var(--cap-accent, #1e2bfa) 20%, transparent);
|
|
75
|
+
border-radius: 14px;
|
|
76
|
+
}
|
|
77
|
+
.caption-line {
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-wrap: wrap;
|
|
80
|
+
justify-content: center;
|
|
81
|
+
gap: 0.1em 0.34em;
|
|
82
|
+
font-family: var(--font-display, "Space Grotesk"), system-ui, sans-serif;
|
|
83
|
+
font-weight: 600;
|
|
84
|
+
font-size: clamp(40px, 4.4vw, 58px);
|
|
85
|
+
line-height: 1.16;
|
|
86
|
+
letter-spacing: -0.02em;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* upcoming — muted gray, no chip */
|
|
90
|
+
.caption-word {
|
|
91
|
+
display: inline-block;
|
|
92
|
+
padding: 0 0.18em;
|
|
93
|
+
border-radius: 0.32em;
|
|
94
|
+
color: color-mix(in srgb, var(--cap-ink, #111111) 52%, var(--cap-canvas, #fdfae7));
|
|
95
|
+
}
|
|
96
|
+
/* current word — THE solid cobalt chip (the single-accent gesture; pill-rounded
|
|
97
|
+
fill, NO shadow), cream reading on top */
|
|
98
|
+
.caption-word.is-active {
|
|
99
|
+
color: var(--cap-canvas, #fdfae7);
|
|
100
|
+
background: var(--cap-accent, #1e2bfa);
|
|
101
|
+
box-shadow: none;
|
|
102
|
+
}
|
|
103
|
+
/* already spoken — solid near-black ink, chip cleared */
|
|
104
|
+
.caption-word.is-spoken {
|
|
105
|
+
color: var(--cap-ink, #111111);
|
|
106
|
+
background: transparent;
|
|
107
|
+
box-shadow: none;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* optional per-word accents (dormant until a word-classer tags them) */
|
|
111
|
+
/* brand / key term — cobalt, the system's one accent on a key word */
|
|
112
|
+
.caption-word.cap-brand {
|
|
113
|
+
color: var(--cap-accent, #1e2bfa);
|
|
114
|
+
}
|
|
115
|
+
/* numerals / data — cobalt 700, the figure voice */
|
|
116
|
+
.caption-word.cap-num {
|
|
117
|
+
font-family: var(--font-display, "Space Grotesk"), system-ui, sans-serif;
|
|
118
|
+
font-weight: 700;
|
|
119
|
+
color: var(--cap-accent, #1e2bfa);
|
|
120
|
+
}
|
|
121
|
+
/* emphasis — a directional-red hairline underline (inline only, never a fill) */
|
|
122
|
+
.caption-word.cap-cta {
|
|
123
|
+
text-decoration: underline;
|
|
124
|
+
text-decoration-thickness: 2px;
|
|
125
|
+
text-decoration-color: var(--cap-accent-2, #dc2626);
|
|
126
|
+
text-underline-offset: 0.1em;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@media (max-aspect-ratio: 9/16) {
|
|
130
|
+
.caption-pill {
|
|
131
|
+
max-width: 92%;
|
|
132
|
+
}
|
|
133
|
+
.caption-line {
|
|
134
|
+
font-size: clamp(34px, 5.4vw, 48px);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
</style>
|
|
138
|
+
|
|
139
|
+
<div
|
|
140
|
+
id="captions-root"
|
|
141
|
+
data-composition-id="captions"
|
|
142
|
+
data-timeline-locked
|
|
143
|
+
data-start="0"
|
|
144
|
+
data-duration="0"
|
|
145
|
+
data-fps="30"
|
|
146
|
+
data-width="0"
|
|
147
|
+
data-height="0"
|
|
148
|
+
>
|
|
149
|
+
<div class="caption-layer" aria-hidden="true">
|
|
150
|
+
<div id="caption-stage" class="caption-stage"></div>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
|
|
154
|
+
<script>
|
|
155
|
+
// captions.mjs injects the engine's scene-aware groups + real duration here.
|
|
156
|
+
var GROUPS = [];
|
|
157
|
+
var DURATION = 0;
|
|
158
|
+
|
|
159
|
+
(function () {
|
|
160
|
+
var stage = document.getElementById("caption-stage");
|
|
161
|
+
|
|
162
|
+
// build DOM: one .caption-group per group, .caption-word per word
|
|
163
|
+
GROUPS.forEach(function (group, g) {
|
|
164
|
+
var groupEl = document.createElement("div");
|
|
165
|
+
groupEl.className = "caption-group";
|
|
166
|
+
groupEl.id = "caption-group-" + g;
|
|
167
|
+
var pill = document.createElement("div");
|
|
168
|
+
pill.className = "caption-pill";
|
|
169
|
+
var line = document.createElement("div");
|
|
170
|
+
line.className = "caption-line";
|
|
171
|
+
(group.words || []).forEach(function (w, i) {
|
|
172
|
+
var span = document.createElement("span");
|
|
173
|
+
span.className = "caption-word";
|
|
174
|
+
span.id = "caption-word-" + g + "-" + i;
|
|
175
|
+
span.textContent = String(w.text);
|
|
176
|
+
line.appendChild(span);
|
|
177
|
+
});
|
|
178
|
+
pill.appendChild(line);
|
|
179
|
+
groupEl.appendChild(pill);
|
|
180
|
+
stage.appendChild(groupEl);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
window.__timelines = window.__timelines || {};
|
|
184
|
+
var tl = gsap.timeline({ paused: true });
|
|
185
|
+
|
|
186
|
+
GROUPS.forEach(function (group, g) {
|
|
187
|
+
var groupEl = document.getElementById("caption-group-" + g);
|
|
188
|
+
var words = group.words || [];
|
|
189
|
+
var next = GROUPS[g + 1];
|
|
190
|
+
var isLast = g === GROUPS.length - 1;
|
|
191
|
+
var start = Math.max(0, Number(group.start));
|
|
192
|
+
var end = isLast ? DURATION : Math.min(Number(next.start), Number(group.end) + 0.3);
|
|
193
|
+
if (end <= start) end = start + 0.01;
|
|
194
|
+
|
|
195
|
+
// group on/off — exactly one group visible at a time
|
|
196
|
+
tl.set(groupEl, { opacity: 1 }, start);
|
|
197
|
+
tl.set(groupEl, { opacity: 0 }, end);
|
|
198
|
+
|
|
199
|
+
// 3-state karaoke via className SETS — seek-safe (gsap.set applies on the
|
|
200
|
+
// engine's frame-by-frame seek; .call callbacks would NOT fire).
|
|
201
|
+
words.forEach(function (w, i) {
|
|
202
|
+
var el = document.getElementById("caption-word-" + g + "-" + i);
|
|
203
|
+
var at = Math.max(start, Number(w.start));
|
|
204
|
+
tl.set(el, { className: "caption-word" }, start); // upcoming (also resets on reverse-seek)
|
|
205
|
+
tl.set(el, { className: "caption-word is-active" }, at); // current
|
|
206
|
+
tl.fromTo(el, { scale: 0.985 }, { scale: 1, duration: 0.18, ease: "power1.out" }, at);
|
|
207
|
+
if (i + 1 < words.length) {
|
|
208
|
+
var nextAt = Math.max(start, Number(words[i + 1].start));
|
|
209
|
+
tl.set(el, { className: "caption-word is-spoken" }, nextAt); // demote when next activates
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
if (words.length) {
|
|
213
|
+
var lastEl = document.getElementById("caption-word-" + g + "-" + (words.length - 1));
|
|
214
|
+
var lastSpoken = Math.min(end, Number(words[words.length - 1].end) + 0.1);
|
|
215
|
+
tl.set(lastEl, { className: "caption-word is-spoken" }, lastSpoken);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
// full-span anchor so the sub-comp timeline spans the whole video
|
|
220
|
+
tl.to({}, { duration: DURATION }, 0);
|
|
221
|
+
window.__timelines["captions"] = tl;
|
|
222
|
+
})();
|
|
223
|
+
</script>
|