vaweGitHub

MovesReveal a title

Outline fill

look: signal2 soutline-fill.md

Outline fill: final frame of the text reveal animation
Tap the clip to play it.

When to use

Use when one hero word is the beat. It arrives as an outline, each letter rising 45 ms after the last, readable at once. Then, on the beat, a solid accent floods each letter from its baseline up. No blur and no mask hides the word at any point. Clip: outline-fill.mp4. Demo: demo/outline-fill.html.

The code

html
<svg width="0" height="0"><filter id="ring" x="-8%" y="-8%" width="116%" height="116%">
  <feMorphology in="SourceAlpha" operator="dilate" radius="6"/><feComposite in2="SourceAlpha" operator="out" result="ring"/>
  <feFlood flood-color="#fff"/><feComposite in2="ring" operator="in"/></filter></svg>
<style>.o { filter: url(#ring); } .f { position: absolute; inset: 0; color: var(--accent); clip-path: inset(110% -0.1em -0.3em -0.1em); }</style>
<span class="ch"><i class="o">F</i><i class="f">F</i></span>   <!-- one per letter -->
<script type="module">
import { EASE } from '../../core/motion/presets.js';
chars.forEach((ch, i) => {
  ch.animate([{ opacity: 0, translate: '0 5vh' }, { opacity: 1, translate: '0 0' }], { duration: 650, delay: 40 + i * 45, easing: EASE.land, fill: 'both' });
  ch.querySelector('.f').animate([{ clipPath: 'inset(110% -0.1em -0.3em -0.1em)' }, { clipPath: 'inset(-0.3em -0.1em -0.3em -0.1em)' }],
    { duration: 720, delay: 780 + i * 35, easing: EASE.landSoft, fill: 'both' });
});
</script>

Easing and timing

The clip runs 2 s. The look is signal.

The clip uses 3 named eases from core/motion/presets.js. Each is a pair of After Effects handles: influence is how far along the segment the handle reaches, and speed is how fast the value moves at the key, as a multiple of the segment's average speed. Motion in the docs explains both.

EaseLeaving a keyArriving at a key
glide33% influence, speed 033% influence, speed 0.1
land12% influence, speed 4.875% influence, speed 0
landSoft20% influence, speed 2.575% influence, speed 0

Notes

Draw the outline as a dilated ring around the solid glyph, not with -webkit-text-stroke: a variable font's glyphs are built from overlapping shapes and a text stroke draws every overlap as an inner line. The ring sits outside the glyph, so the fill lands exactly inside it. Set the dilate radius to about 0.55 percent of frame height (--vh) so the line holds at draft size. The fill clip is padded 0.3 em past the glyph top and bottom (the reveal never cuts a letter). Fill stagger is shorter than the entrance stagger (35 against 45 ms), so the flood reads as one wave. Keep the fill one accent colour and the outline the ink colour.

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

Sound

Sound: bloom at 0.70 s into the move, so its slow peak meets the accent flood at 0.78 s (default gain).