Appearance catalogue

A little motion.
A clear entrance.

Scroll to meet each effect. Replay it, slow it down, and look at the recipe. The site owns the motion; in-view supplies the trigger.

Each scroll trigger runs once. Replay controls belong to this page. Your system's reduced-motion preference always takes priority.

Built in01 / Reveal

Fade in. Settle into place.

The default entrance

Opacity and a short upward movement. Use it for a content block, an introduction, or a card.

Quiet by design

Content comes first.

An entrance should guide the eye, then get out of the way.

View markup

A longer, wider entrance

A local duration and distance, with a negative bottom margin to trigger farther inside the viewport. Initially visible content stays visible.

A local adjustment

Give the moment room.

A little more travel, a little more time.

View markup

Without the runtime, Reveal plays on first render. With data-enhance="in-view", off-screen content waits for its first entry. Reveal reference

Built in02 / Reveal group

One group. A sequence of entrances.

The container is observed once. Its direct children carry the animation, with a small delay between neighbors. No JavaScript timers or tokens on individual items.

01

Observe

Wait outside the viewport.

02

Release

Remove the pending state.

03

Animate

Let CSS handle the entrance.

04

Read

Leave the content at rest.

View markup

The delay is capped at eight steps. Browsers without sibling-index() reveal the group together. A group is one trigger, even when its cards wrap to several rows.

Built in03 / Mark sweep

Highlight a thought.

A highlight with meaning

Use <mark> when the phrase is relevant in its context. The background grows while the text stays readable.

Build fewer things.
Make each one count.

View markup

Theme colors and reading direction

Intent classes tint the highlight. An ordinary span keeps a decorative highlight separate from mark semantics.

A clear idea, a key detail.

هذه فكرة مهمة

View markup

Across several lines

The highlight follows the phrase as it wraps, and the sweep runs through it in reading order, one line after the next.

Good interfaces do not shout. They point at the one sentence that matters and let the rest of the page breathe around it. Then they step aside.

View markup

Below the fold

A highlight far down the page waits for its first appearance, so the reader still sees it sweep in on arrival.

Keep scrolling ↓

You made it this far. This highlight waited for you.

View markup

Without JavaScript, the full highlight is already visible. Forced colors uses the system highlight pair. Mark sweep reference

Site CSS04 / Your own effects

Same trigger. Your visual language.

These transitions are defined in this page, outside the library. A visible base state and a .is-pending starting state are the entire connection to in-view.

A sideways entrance

A site-defined translation and fade. The runtime knows nothing about the direction or the curve.

Site-owned transition

Come in from the side.

Your class. Your timing. The same scroll trigger.

View markup

A gentle zoom

Scale and opacity instead of travel. The base state stays readable without the runtime or when motion is reduced.

Site-owned transition

A change of perspective.

A small scale change can be enough.

View markup
View the site-defined CSS