Motion Lab

Ten small interactions, each built twice: the way they usually ship, and the considered way. Flip a demo between Typical and Considered, then read its score: when it starts, how long it takes, which curve it follows. The thin red line on every score is the 300 ms budget for interface motion.

Button press

feedback, tens of times a day

A press should answer the finger the moment it lands. Hold the second button: the deliberate part is slow, the release is quick.

 

Why the considered one feels right
TypicalConsidered
Curvetransition: all, ease-intransform only, strong ease-out (0.23, 1, 0.32, 1)
Duration300 ms, shows on release160 ms, shows on pointer-down
Origincolour change only, nothing physicalscale(0.97) from centre; the label shrinks with it
Interruptionhold fill drains as slowly as it filledasymmetric: fills in 2 s linear, snaps back in 200 ms
Reduced motionunchangedno scale; the colour and the fill stay, because they carry meaning

Toast stack

feedback with spatial consistency, occasional

Press the button quickly, several times. Hover the stack to fan it out and pause the timers; swipe a toast down or sideways to dismiss it.

    Why the considered one feels right
    TypicalConsidered
    Curvekeyframes, ease-inCSS transitions, plain ease: a touch softer to suit a calm component
    Duration500 ms, older toasts jump400 ms; the stack shifts with the same transition
    Origindrops from above, vanishes in placeenters from the bottom edge and leaves the same way
    Interruptionkeyframes restart from zero when you spam ittransitions retarget mid-flight; timers pause on hover and in a hidden tab
    Reduced motionsame slidefade only, no travel

    Bottom sheet

    direct manipulation, occasional

    Open the sheet and drag it by any part. A small quick flick closes it; a slow drag that stops halfway springs back. Pull up past the top to feel the edge.

    Trip, 14 Dec

    Why the considered one feels right
    TypicalConsidered
    Curvebottom with ease-in (a layout property)opens on the drawer curve (0.32, 0.72, 0, 1); release is a spring
    Duration300 ms either way500 ms to open; after a drag the spring settles in about 350 ms
    Originno drag; buttons onlytracks the finger 1:1 from where you grabbed, rubber-bands past the top
    Interruptionlocked while it movesgrab it mid-flight; the release hands your speed to the spring, and a flick faster than 0.11 px/ms dismisses
    Reduced motionsame slide200 ms fade; drag still works because you are moving it

    Staggered list

    choreography, occasional

    Show the list, remove a row, add one. Watch the gap: in the considered version the neighbours close it while the row is still fading.

      Why the considered one feels right
      TypicalConsidered
      Curveease-in, 24 px rise for every rowease-out; the first row rises 12 px, the rest 6 px
      Duration150 ms between each row, all equal: about 1.2 sgaps shrink 40, 35, 30, 25, 20 ms; the group is done by 450 ms
      Originexits one by one in reverse; a removed row leaves a hole, then the list jumpsexits all at once, faster; a removed row leaves the flow at once and its neighbours glide up together
      Interruptionbuttons wait for the queueevery row is clickable the moment it is visible
      Reduced motionsame cascadeno delays, no travel: the group fades in together

      Card to detail

      shared element, occasional

      Open a card. The cover and title travel to their new place, so you never lose track of what you opened. Close it halfway through to see it reverse from where it is.

      Why the considered one feels right
      TypicalConsidered
      Curveease-in popstrong ease-in-out (0.77, 0, 0.175, 1): it is moving on screen
      Duration400 ms in, closes instantly350 ms in, 280 ms back (exits are quicker)
      Origina box grows from scale(0) in the middle, unrelated to the cardFLIP: cover and title fly from the card; the panel opens from the card's own rectangle
      Interruptionnoneclose mid-flight and the same animations play backwards from where they are
      Reduced motionsame pop200 ms crossfade in place

      Number ticker

      state indication, tens of times a day

      Change the number quickly. Each digit rolls only as far as it needs to, and the figures never shift sideways.

      Sample count

      Why the considered one feels right
      TypicalConsidered
      Curvelinear count in a timereach digit column rolls with strong ease-out
      Duration1.5 s of counting before you can read it300 ms, readable at once
      Originproportional figures: the number wobbles in widthtabular figures; each digit is a fixed-width column
      Interruptionevery new value restarts the 1.5 s counttransitions retarget, so a new value bends the roll
      Reduced motionsame countingchanged digits crossfade; the final value is announced once

      Tooltips and hover cards

      wayfinding, tens of times a day

      Sweep the pointer across the toolbar. The first tip waits; once one is open, its neighbours appear at once. Then rest on the underlined link and move into its card.

      On a touch screen there are no hover tips, on purpose: a tap would fire them by accident.

      Read the field notes before you start.

      Why the considered one feels right
      TypicalConsidered
      Curveease-in from scale(0)ease-out from scale(0.97) + opacity
      Durationno delay, 300 ms each, every neighbour animates again500 ms delay, 125 ms fade; neighbours open instantly for 300 ms after one closes
      Origingrows from its own centregrows out of the button it describes; the card grows out of the link
      Interruptionthe card closes the moment you leave the link, so you can't reach it250 ms grace to cross into the card; keyboard focus shows the tip with no animation
      Reduced motionsame growopacity only; touch screens skip hover tips entirely

      View transition

      navigation, tens of times a day

      Open a message, then go back. Forward and back move in opposite directions, and the subject line carries over between the two screens.

      Why the considered one feels right
      TypicalConsidered
      Curveease-in-out slide, full widthease-out, a 24 px shift plus crossfade (small container, small move)
      Durationold view leaves (450 ms), then the new one enters (450 ms)both at once, 240 ms, via the View Transitions API
      Originalways slides left, even going backdirection-aware; the subject is a shared element
      Interruptiontaps during the queue are losta new navigation skips the running transition
      Reduced motionsame slide150 ms crossfade, no shift

      Accordion

      state change, tens of times a day

      Open and close a row, then click it twice fast. The typical version animates to a made-up height, so it lags on close.

      Why the considered one feels right
      TypicalConsidered
      Curvemax-height: 1000px with ease-in; chevron on linearmeasured height, strong ease-out; chevron on the same curve
      Duration600 ms to a height it never reaches: open looks cut short, close waits before moving220 ms open, 180 ms close, panel and chevron in one timing family
      Origincontent pops at full opacitycontent fades with the height so the two read as one
      Interruptiona second click jumpsreverses from the current height
      Reduced motionsameno height animation; the text fades in 150 ms

      Tab indicator

      state change, many times a day

      Click between tabs, then use the arrow keys. The pill and its text change colour in perfect step because they are one clipped layer. From the keyboard there is no animation at all.

      Overview: a sample summary of the space.

      Why the considered one feels right
      TypicalConsidered
      Curveunderline moves left and width with ease-inclip-path on a duplicate, active-styled tab row; strong ease-in-out
      Duration400 ms, text colour flips instantly, panel fades in 300 ms every time250 ms; the panel swaps instantly (seen too often to animate)
      Originline and label change out of steppill and label are one layer, so they can't drift apart
      Interruptionlayout animation, retargets with a joltclip-path transition retargets smoothly; arrow keys move it with no animation
      Reduced motionsamethe pill jumps; no travel

      Vocabulary

      The terms used on this page, so you can ask for exactly the motion you want.