Skip to content
Aurora Lab
Cursors · 29.10.2026

Elastic Passage

A single editorial action responds to cursor velocity rather than cursor position. Its letters briefly travel along a restrained wave when the pointer crosses the target, creating a tactile sense of passage without a lens, halo, ring, or floating cursor ornament. Activating the action reveals a concise local confirmation, with the same behavior available through focus and touch.

Live preview

960 × 640
Behind the interaction

What is Elastic Passage?

A single editorial action responds to cursor velocity rather than cursor position. Its letters briefly travel along a restrained wave when the pointer crosses the target, creating a tactile sense of passage without a lens, halo, ring, or floating cursor ornament. Activating the action reveals a concise local confirmation, with the same behavior available through focus and touch.

How it works

Pointer movement across the action briefly adds alternating vertical lifts and slight rotations to its individual letters. The wave is triggered by movement speed, not by a tracked cursor object. Clicking or tapping opens a local confirmation line, while keyboard focus provides the same usable action without depending on hover.

Where to use it

  • Editorial collection links
  • Portfolio entry points with a typographic gesture
  • Premium brand navigation with a compact local confirmation

Accessibility

The interaction is a native button with an accessible name and visible keyboard focus. The pointer effect is decorative and skipped for touch and reduced-motion users; activation remains available through keyboard, touch, and click.

Performance

The component uses one scoped pointer listener, a short timeout, CSS transforms, and no continuous animation loop. It has no external assets, libraries, navigation, or network requests.

Source code

Explore and copy the original source. Interactive previews apply localized labels, while source code keeps the original strings (usually English). For translated dynamic labels in a project, use AuroraLabI18n.t(key, fallback).

<main class="cursor-stage">
  <section class="passage-zone" aria-label="Featured collection action">
    <button class="passage-trigger" type="button" data-ali-i18n-aria-label="target_aria" aria-label="Open selected collection">
      <span class="passage-word" aria-hidden="true">
        <span class="letter">S</span><span class="letter">e</span><span class="letter">l</span><span class="letter">e</span><span class="letter">c</span><span class="letter">t</span><span class="letter">e</span><span class="letter">d</span>
      </span>
      <span class="passage-action" data-ali-i18n="copy_1">Open collection</span>
      <span class="passage-state" data-ali-i18n="copy_2">A considered edit of current work</span>
    </button>
  </section>
</main>