Beyonder MOTION LAB
0%
This page is light enough that it wouldn't need a loading bar.
Click anywhere to skip.
Beyonder — Motion Lab

Interfaces that move with intent.

A working reel of the animation, interaction and performance craft behind Beyonder builds. Drag it, hover it, scroll through it. Every effect is measured, not just decorated.

Scroll
Field notes

What we mean when we say motion.

Four positions we hold, not as slogans but as constraints we design against.

01

Motion carries cause and effect

An animation should answer a question the interface just raised: where did this element come from, what changed, what happens if I let go. If it doesn't answer one of those, it's noise wearing a nice easing curve.

02

Sixty frames a second is a budget

Every frame gets 16.6 milliseconds. Layout and paint eat that budget fast; transform and opacity barely touch it. We spend the budget on the two or three moments that matter and leave the rest alone.

03

The best animation goes unnoticed

Nobody compliments a button for feeling right. They just keep clicking. The animations people do notice and mention are usually the ones we'd cut in review.

04

Off means off

If someone's system asks for reduced motion, that's not a suggestion to soften animations, it's an instruction to remove them. We build that switch first, then decide what deserves to move.

The reel

Seven techniques, dragged by hand.

Grab the strip below and pull. Everything in it runs on the same handful of GPU-friendly properties.

Interaction / 01

Magnetic pull

Pointer position drives a translate offset, capped and eased back on release. transform only.
Interaction / 02

Pointer tilt

tilt me
rotateX / rotateY mapped to cursor position inside the element. No layout cost, full 3D read.
Detail / 03

Text scramble

HOVER ME
Character swap resolving left to right. Text-node content only, zero reflow.
Ambient / 04

Infinite ticker

Interaction designPrototypingMicro-motionWebGL3DInteraction designPrototypingMicro-motionWebGL3D
A single CSS keyframe loop, duplicated content, runs entirely on the compositor.
Ambient / 05

Cursor spotlight

move your cursor here
A CSS custom property updated on pointer move, read by a radial-gradient. No JS-driven repaint.
Draw / 06

Line draw-in

stroke-dashoffset animating to zero. Same trick that draws the mark in the header.
Counter / 07

Elastic count-up

0
requestAnimationFrame with a cubic ease and a slight overshoot. Click to replay.
Drag to scroll
The physics

Reading real frame data from this tab.

60fps live

This line traces actual time between animation frames in your browser, right now, next to everything else on this page.

Step 01

Two properties, almost free

transform and opacity skip layout and paint entirely. Everything else, top, left, width, margin, forces the browser to recompute the page before it can even draw.

/* layout + paint, avoid */
.card:hover { top: -8px; width: 320px; }

/* compositor only */
.card:hover { transform: translateY(-8px); }
Step 02

will-change is a loan, not a gift

It promotes an element to its own GPU layer right before a heavy transition. Leave it on permanently and you're paying memory rent on elements that never move.

Step 03

Nothing off-screen gets a frame budget

We start every effect from an IntersectionObserver entry, not from page load. Elements below the fold cost nothing until they're actually seen.

Step 04

The media query is load-bearing

prefers-reduced-motion is checked once, in JavaScript, and toggles a single class on the body. Every animation on this page listens to that class, no exceptions.

Restraint

Where motion stays off the table.

This section doesn't animate. That's on purpose, and it's the same rule we apply on client work.

Motion earns a place in onboarding, status changes and anything where cause and effect needs a visible thread. It has no business in a data table, a checkout form, or anywhere someone needs to scan fast and move on.

Parallax and large-scale scroll effects can trigger real physical symptoms for people with vestibular disorders. That's not an edge case to patch later, it's why prefers-reduced-motion exists as an operating-system setting rather than a design nicety.

On a slow connection, every animated asset competes with the content for bandwidth. A heavy animated illustration rarely earns its weight against a user on three bars of signal.

Try it on this page

This flips reduced-motion behaviour site-wide. Reveals resolve instantly, the ticker stops, the cursor returns to default. Nothing above breaks, it just stops moving.

How we score it

Looking good is not a metric.

We score a motion pass the same way we score any interface change: load speed, attention retained, outcome moved.

Performance

0LCP ceiling, largest element painted
0INP ceiling, response to input
0CLS budget, visual stability

Engagement

0scroll depth target on a landing page
0rage-clicks tolerated on an animated element
0max delay before a loading state appears

Outcome

0of effects tied to a comprehension or conversion goal
0added to a checkout or form flow
0animation to measurable outcome, no exceptions
Beyonder — Motion Lab

Good on a screenshot.
Better once it moves.