Motion & Reveal
Three motion systems in one: motion= for hover/interaction transitions,
float= for idle loop animations, and reveal= for
scroll-triggered entrance effects. All driven by CSS custom properties.
motion=
Applies a transition preset to all interactive CSS properties. Hover the buttons below.
<button surface="solid" tone="primary" density="default" radius="md" motion="subtle">subtle</button> <button surface="solid" tone="primary" density="default" radius="md" motion="expressive">expressive</button> <button surface="solid" tone="primary" density="default" radius="md" motion="dramatic">dramatic</button>
float=
Continuous floating animation. Pairs beautifully with glass surfaces.
slow
med
fast
<div surface="glass" tone="primary" density="spacious" radius="xl" float="slow"> Slow float </div> <div surface="glass" tone="accent" density="spacious" radius="xl" float="med"> Medium float </div> <div surface="glass" tone="info" density="spacious" radius="xl" float="fast"> Fast float </div>
float with axis=
By default float= animates the Y axis. Use axis="x" or axis="xy" for other directions.
axis="x"
axis="xy"
<div float="med" axis="x">Horizontal float</div> <div float="slow" axis="xy">Diagonal float</div>
reveal=
Scroll-triggered entrance animation. Elements are invisible until they enter the viewport,
then animate in. Requires the JS runtime to observe scroll positions.
Add reveal-delay="300" (in ms) to stagger multiple items.
reveal= directions
reveal="bottom"
reveal="top"
reveal="left"
reveal="right"
reveal="scale"
reveal="blur"
↑ Scroll out and back in to replay
<!-- Animate from bottom (most common) --> <div reveal="bottom">Slides up from below</div> <!-- Other directions --> <div reveal="top">Slides down from above</div> <div reveal="left">Slides in from the left</div> <div reveal="right">Slides in from the right</div> <!-- Scale up --> <div reveal="scale">Scales up from 90%</div> <!-- Blur in --> <div reveal="blur">Blurs into focus</div> <!-- Stagger with delay --> <div reveal="bottom" reveal-delay="0">First</div> <div reveal="bottom" reveal-delay="100">Second</div> <div reveal="bottom" reveal-delay="200">Third</div>
Staggered reveal
1
2
3
4
<div layout="grid" cols="4" gap="md"> <div surface="glass" density="spacious" radius="lg" reveal="bottom" reveal-delay="0">1</div> <div surface="glass" density="spacious" radius="lg" reveal="bottom" reveal-delay="80">2</div> <div surface="glass" density="spacious" radius="lg" reveal="bottom" reveal-delay="160">3</div> <div surface="glass" density="spacious" radius="lg" reveal="bottom" reveal-delay="240">4</div> </div>
CSS custom properties
/* Motion */ --aura-motion-subtle-duration: 150ms --aura-motion-subtle-ease: ease --aura-motion-expressive-duration: 280ms --aura-motion-expressive-ease: cubic-bezier(0.34, 1.56, 0.64, 1) --aura-motion-dramatic-duration: 500ms --aura-motion-dramatic-ease: cubic-bezier(0.22, 1, 0.36, 1) /* Float */ --aura-float-slow-duration: 4s --aura-float-med-duration: 2.5s --aura-float-fast-duration: 1.5s --aura-float-amplitude-sm: 6px --aura-float-amplitude-md: 12px --aura-float-amplitude-lg: 22px /* Reveal */ --aura-reveal-distance: 24px --aura-reveal-duration: 480ms --aura-reveal-ease: cubic-bezier(0.22, 1, 0.36, 1)