vaweGitHub

Video componentsEnd a film

Wordmark cascade

End a filmbrutal1.9 s

wordmark-cascade.md

Wordmark cascade: final frame of the end card animation
00:00.0000:01.90
Tap the clip to play it.

When to use

Use when the name is the last beat. Each letter falls onto a rail, one after the other, each gap shorter than the last, so the word speeds up as it lands; the full stop is the accent and lands last. After the landing a short accent bar runs along the rail, so the tail is never still.

Use once per film: the accent bar is a stock device (rule no-tells), never the idea.

The code

html
<div class="stage">
  <h1><span>v</span><span>a</span><span>w</span><span>e</span><span class="dot">.</span><i class="base" style="display:inline-block;width:0;height:0"></i></h1>
  <div class="rail"><div class="run"></div></div>
</div>
<style>h1 span { display: inline-block; } .rail { position: absolute; left: 0; right: 0; height: 1.3vh; overflow: hidden; background: rgba(255,255,255,0.2); }
.run { position: absolute; inset: 0 auto 0 0; width: 22%; background: var(--accent); translate: -100% 0; }</style>
<script type="module">
import { EASE } from '../../core/motion/presets.js';
rail.style.top = `${base.getBoundingClientRect().top - stage.getBoundingClientRect().top}px`;   // the rail sits on the baseline
const at = [100, 190, 260, 315, 360];   // ms: gaps of 90, 70, 55, 45
letters.forEach((s, i) => {
  s.animate([{ translate: '0 -0.85em', filter: 'blur(10px)' }, { translate: '0 0', filter: 'blur(0px)' }],
    { duration: 620, delay: at[i], easing: EASE.pop, fill: 'both' });
  s.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 90, delay: at[i], easing: 'linear', fill: 'both' });
});
run.animate([{ translate: '-100% 0' }, { translate: '450% 0' }], { duration: 800, delay: 1050, easing: EASE.settle, fill: 'both' });
</script>

Easing

Each ease is a pair of After Effects handles from core/motion/presets.js. Every curve as CSS.

EaseLeaving a keyArriving at a key
land12% influence, speed 4.875% influence, speed 0
pop12% influence, speed 4.835% influence, speed -1.5
settle60% influence, speed 060% influence, speed 0

Notes

The gaps run 90, 70, 55, 45 ms: inside the 30 to 80 ms band except the first, which is the hook. The letters blur only while they fall and are sharp on landing. The rail is on screen from frame 0 so the first frame has a subject. The bar on the rail is the last-frame motion; a landed wordmark held still is what the rule moving-tail bans. Use EASE.pop (a small overshoot).

Looks (ground, type, radius, accent) live in demo/demo.css; this snippet keeps neutral tokens.

Sound

Sound: droplet at 0.55 s into the move, when the accent full stop lands on the rail (default gain); no tick per letter.

Chain it into a film.

Copy chains of video components from the recipes.