Skip to content
Velora
Showcase
Motion

Motion Effects

Prefer channels v2: vl-enter, vl-scroll, vl-hover, etc.vl-effect remains a legacy/composite escape hatch. All motion is CSS-only — zero animation runtime JavaScript. See Attribute Reference.

Generated registry · Oct 18, 2026

144Presets
133Stable
11Experimental

base (3) · effect (46) · enter (26) · exit (4) · hover (7) · loop (24) · page transition (5) · scene (5) · scroll (19) · state (5)

Full searchable registry:Showcase catalog· source packages/catalog/ via pnpm generate:catalog

How channels work

Test here

Scroll inside the frame to trigger view-linked motion. Use Replay to run again.

Channel-first

Prefer vl-enter, vl-scroll, vl-hover — not legacy vl-effect

vl-enter="fade-up" vl-timeline="view"

Pick the channel that owns the behavior, then add vl-timeline when you need a progress model:

<!-- Entrance (preferred) -->
<h1 vl-enter="fade-up">Heading</h1>

<!-- Viewport-gated enter -->
<div vl-in-view>
  <p vl-enter="fade-up" vl-timeline="view">Content</p>
</div>

<!-- Scroll-linked -->
<img vl-scroll="media-zoom" vl-timeline="view" alt="" />

<!-- Legacy composite (avoid for new work) -->
<div vl-effect="blur-in" vl-timeline="view">…</div>

Entrance presets (vl-enter)

26 presets from the generated catalog (Oct 18, 2026). Prefer channels for new markup — not legacy vl-effect.

Affect the element itself. Best combined with vl-timeline="view" for scroll-driven reveals.

ValueStatusReduced motion
3d-entrystablestatic
blur-instablestatic
blur-liftstablestatic
clip-risestablestatic
cut-revealexperimentalstatic
depth-enterstablestatic
fade-downstablestatic
fade-instablestatic
fade-upstablestatic
flow-instablestatic
focusstablestatic
glide-instablestatic
mask-sweepstablestatic
pop-instablestatic
reveal-3dstablestatic
reveal-cinematicstablestatic
rise-3dstablestatic
scale-instablestatic
slide-leftstablestatic
slide-rightstablestatic
spring-3dstablestatic
text-revealstablestatic
text-reveal-downstablestatic
text-reveal-upstablestatic
tilt-instablestatic
unfoldstablestatic

CSS Variable Hooks (Entrance)

<div
  vl-effect="fade-up"
  style="
    --vl-motion-duration: 600ms;   /* override speed */
    --vl-motion-distance: 2rem;    /* override travel distance */
    --vl-motion-ease: var(--vl-ease-spring); /* override easing */
  ">
  Custom entrance
</div>

Live Demo — entrance

Test here

Scroll inside the frame to trigger view-linked motion. Use Replay to run again.

fade-up

Opacity + translate Y.

blur-in

Cinematic blur dissolve.

reveal-3d

Perspective rotateX entry.

vl-enter="fade-up|blur-in|reveal-3d" vl-timeline="view"

Interaction presets (vl-hover)

Applied via vl-hover on interactive elements — no timeline needed.7 presets in the generated catalog.

Test here
hover-lift

Lift + shadow

hover-glow

Primary glow ring

underline-expand
vl-hover="hover-lift"
ValueStatusReduced motion
border-tracestablestatic
gradient-sweepstablestatic
hover-glowstablestatic
hover-liftstablestatic
hover-sliceexperimentalstatic
icon-shiftstablestatic
underline-expandstablestatic
<!-- hover-lift on a card -->
<div class="vl-card" vl-effect="hover-lift">
  Hover me
</div>

<!-- underline-expand on a nav link -->
<a href="/about" vl-effect="underline-expand">About</a>

<!-- icon-shift on a CTA -->
<a href="/docs" vl-effect="icon-shift">
  Read the docs
  <svg aria-hidden="true"><!-- arrow icon --></svg>
</a>

Touch devices: Hover effects automatically disable via @media (hover: none).

Scroll presets (vl-scroll)

Scroll-linked transforms. 19 presets — usually paired with vl-timeline="view" unless the preset is inherently scroll-driven.

ValueStatusReduced motion
cinema-zoomstablestatic
crossfadestablestatic
defocusexperimentalstatic
depth-driftstablestatic
depth-pushstablestatic
ink-scrubexperimentalstatic
letterboxexperimentalstatic
media-zoomstablestatic
parallaxstablestatic
pathstablestatic
refocusexperimentalstatic
revealstablestatic
ring-scrollexperimentalstatic
rotate-scrollstablestatic
scroll-horizontalstablestatic
scroll-marqueestablestatic
scroll-scalestablestatic
text-highlightstablestatic
text-scrubexperimentalstatic

Loop presets (vl-loop / vl-loop-effect)

Continuous ambient motion. 0 presets — loops stop under prefers-reduced-motion.

ValueStatusReduced motion

State Effects

Used with toggled elements like accordions, drawers, and panels. Typically paired with[open], a class toggle, or :checked:

ValueDescription
accordionHeight + opacity transition for disclosure panels. Use with interpolate-size: allow-keywords (included in Velora reset).
drawerTransform + opacity + visibility transition with transition-behavior: allow-discrete.
panel-swapOpacity + quick transform for tab panel swaps.
<!-- Use the .vl-accordion component for a complete implementation -->
<details class="vl-accordion">
  <summary>Question</summary>
  <div class="vl-accordion__content">Answer text</div>
</details>

Continuous / Ambient Effects

See the generated loop preset table above. Examples below use legacy vl-effect — prefer vl-loop / vl-loop-effect for new markup.

<!-- Floating hero illustration -->
<img src="hero-visual.png" alt="" vl-effect="float" />

<!-- Breathing glow on a live badge -->
<span class="vl-badge" vl-effect="glow-breathe">Live</span>

<!-- Shimmer skeleton -->
<div
  vl-effect="shimmer"
  style="
    height: 1rem;
    border-radius: var(--vl-radius-md);
    background: linear-gradient(
      90deg,
      var(--vl-bg-surface-elevated) 0%,
      var(--vl-bg-surface) 50%,
      var(--vl-bg-surface-elevated) 100%
    );
    background-size: 200% auto;
  ">
</div>

Text Reveal Effects

Clip-path-based reveals designed for headlines. Apply to heading elements for editorial impact.

ValueDirectionDescription
text-revealLeft → rightHorizontal clip sweep across text
text-reveal-upBottom → topText rises up from a clipped baseline
text-reveal-downTop → bottomText falls into view from above
<h1 vl-effect="text-reveal-up" vl-timeline="view">
  Premium interfaces start here
</h1>

Cinema / Scroll Effects

These effects use animation-timeline: view(block) internally. They are inherently scroll-driven and do not need vl-timeline="view" added separately.

ValueRangeDescription
cinema-zoomentry 0% exit 100%Slow zoom + focus shift tied to scroll position. Ken Burns feel for hero images.
parallaxcoverVertical parallax shift as element scrolls through viewport.
typewriterN/A (time-based)CSS typewriter effect with blinking caret. Configure with --vl-type-duration and --vl-type-steps.
<!-- Cinema zoom on a hero image -->
<img src="hero.jpg" alt="Hero" vl-effect="cinema-zoom" />

<!-- Parallax section background -->
<div vl-effect="parallax">
  <img src="bg.jpg" alt="" />
</div>

<!-- Typewriter with custom timing -->
<p
  vl-effect="typewriter"
  style="--vl-type-duration: 3s; --vl-type-steps: 40;">
  Building the future of motion design.
</p>

Speed Modifier

Override the animation duration category with vl-speed:

<div vl-effect="fade-up" vl-speed="fast">Quick reveal</div>
<div vl-effect="flow-in" vl-speed="slow">Slow dramatic reveal</div>
ValueDuration
fast--vl-duration-fast (150ms)
normal--vl-duration-normal (300ms)
slow--vl-duration-slow (500ms)

Depth Modifier

Control the translation distance with vl-depth:

<div vl-effect="fade-up" vl-depth="1">Subtle — 0.75rem travel</div>
<div vl-effect="fade-up" vl-depth="4">Dramatic — 4rem travel</div>
Value--vl-motion-distance
10.75rem
21.5rem
32.5rem
44rem

Accessibility

All vl-effect animations automatically disable via:

@media (prefers-reduced-motion: reduce) {
  [vl-effect] {
    animation: none !important;
  }
}

Interaction effects (hover-lift, hover-glow) also disable on touch devices via @media (hover: none).

Browser Support

Entrance, interaction, state, and continuous effects work in all modern browsers (Chrome 89+, Firefox 90+, Safari 15+).

Scroll-driven effects (cinema-zoom, parallax, vl-timeline="view") require Chrome 115+ / Edge 115+. A graceful fallback is included via@supports not (animation-timeline: view(block)) — these elements simply appear in their final state on unsupported browsers.