Motion

Motion in Velon should feel alive but invisible. Things that animate communicate state changes. they should never call attention to themselves at the expense of the change they’re announcing.

That restraint is Verdade: motion is here to orient the user toward what actually changed, never to distract or dress up the moment.

Duration tokens

TokenValueUse
duration.instant100msHover/press feedback
duration.fast150msTooltips, simple fades
duration.base200msDefault transitions
duration.slow300msDialog / drawer enter
duration.slower500msHero / brand intros

Easing

TokenValueUse
easing.standardcubic-bezier(0.4, 0, 0.2, 1)Default. most transitions
easing.deceleratecubic-bezier(0, 0, 0.2, 1)Enter. element appears
easing.acceleratecubic-bezier(0.4, 0, 1, 1)Exit. element leaves

Brand intro

The Velon symbol intro animation (the wireframe tetrahedron’s edges drawing in, used in this site’s hero) takes ~2s and uses cubic-bezier(0.65, 0, 0.35, 1) for the stroke draw. a slightly more dramatic curve appropriate for brand moments. It honors prefers-reduced-motion.

import { VelonLogoIntro } from '@velon-finance/ui'
 
<VelonLogoIntro duration={2} strokeColor="#FFFFFF" />

Don’t

  • Don’t use durations longer than slower (500ms) for UI transitions. After ~500ms, motion stops feeling like feedback and starts feeling like waiting.
  • Don’t animate properties that cause layout (top, left, width, height). Use transform and opacity.
  • Don’t ignore prefers-reduced-motion. Components in this system honor it; consumer code should too.