Why heroes feel dead
A hero is one glance. If every pixel is still, the eye treats it like a magazine cover — read once, scroll on. You don't need autoplay video or a 3D library; you need three cheap layers of life that reinforce one message.
The recipe we use at Motif: a living backdrop (motion you can ignore), one typographic moment (motion you can't miss), and one honest action (motion under your finger).
Step 1 — stack the veil
Start with the backdrop so everything after it has something to sit on. Aurora Veil is three radial gradients drifting on a slow clock plus a grain pass — GPU-composited, zero JavaScript.
Resist cranking the speed. A drift that takes 16–20s per cycle reads as 'alive but expensive'. Faster reads as 'screensaver'.
<section className="relative min-h-[90vh] overflow-hidden bg-[#07080d]">
{/* layer 1: living backdrop */}
<AuroraVeil hueA={262} hueB={192} speed={18} grain
className="absolute inset-0" />
{/* layer 2+3 arrive below */}
</section>Step 2 — one typographic moment
Now the headline. Wipe Reveal runs a travelling light edge across the type once on load, then sits still as clean typography. The secret to why it works: the sweep is clipped to the letters (background-clip: text), so it can never leak outside the headline and look broken.
<div className="relative z-10 mx-auto max-w-3xl px-6 pt-28 text-center">
<WipeReveal as="h1" className="text-5xl md:text-7xl font-black">
Copy less.<br/>Ship more.
</WipeReveal>
</div>Step 3 — the honest action
The CTA is the only element allowed to move *with* the cursor. Halo Button tracks a light-spot to wherever you point and nudges toward it — it feels lit from where you look. A magnetic nudge of 12–24px is enough; more feels like it's running from you.
<div className="mt-8 flex justify-center gap-3">
<HaloButton magnet={18} glow={0.7} as="a" href="#start">
Start building
</HaloButton>
<a href="#library"
className="rounded-xl border border-white/20 px-6 py-3
text-sm font-semibold text-white/85 hover:bg-white/10">
Browse the library
</a>
</div>Restraint is the design
If your product is a calm tool (fintech, health, internal dashboards), drop the veil and keep only the headline moment — or drop all three and use Wipe Reveal on scroll only. Motion is a seasoning, not the dish.
Finish & tune
You now have three layers, ~8 KB of CSS, zero dependencies, and a hero that reads once but feels alive.
Tune the pacing in the Lab — the difference between a 0.4s and 0.9s wipe is the difference between 'snappy' and 'premium'. Feel it, then export the exact cubic-bezier.