Skip to content
Site volume
Colourway

Foundations

Motion

Motion that answers something, then settles. The curves, the durations and what each volume allows.

  • Experimental
On this page

Overprint moves like a print shop: things land, snap into register and settle. Every animation answers a cause (a page arriving, a press, a scroll), settles within five seconds at the default volume, and leaves the words still (D-H1, D-E3). The reading layer's motion is the same at every volume; the expressive layer's grows with the dial.

The rules#

  • Caused, then calm. Ambient motion settles within 5 s at Quiet and Studio. Anything that loops at Press or Rave shows a pause key (WCAG 2.2.2).
  • Words never move once they are read: they are revealed, not slid around. No hover effect changes a text box's size or position.
  • Transforms and opacity only, so nothing reflows.
  • Reduced motion always wins. Every duration drops to 0 except a few short fades, and moments show their end state.
  • No strobes. Flashes happen once per cause, never more than three times a second (WCAG 2.3.1).

Curves#

  • --mk-ease-pop0.34, 1.56, 0.64, 1
  • --mk-ease-out0.16, 1, 0.3, 1
  • --mk-ease-in-out0.7, 0, 0.2, 1
  • --mk-ease-stamp0.2, 0.8, 0.2, 1
  • --mk-ease-drop0.2, 0.9, 0.3, 1.1
  • --mk-ease-land0.2, 0.9, 0.3, 1.2
  • --mk-ease-title0.2, 0.8, 0.3, 1
  • --mk-ease-squeegee0.45, 0, 0.35, 1
  • --mk-ease-fold0.6, 0, 0.3, 1
  • --mk-ease-fly0.5, 0, 0.3, 1
  • --mk-ease-split0.55, 0, 0.8, 0.2
  • --mk-ease-snap0.3, 0, 0.3, 1.6
  • --mk-ease-register0.5, 0, 0.2, 1
  • --mk-ease-slap0.2, 0.8, 0.3, 1.3
  • --mk-ease-squash0.5, 0, 0.6, 1
  • --mk-ease-wipe0.25, 0.1, 0.2, 1
  • --mk-ease-wipe-hold0.75, 0, 0.25, 1
  • --mk-ease-wipe-exit0.6, 0, 0.35, 1
  • --mk-ease-hop0.25, 1, 0.5, 1
  • --mk-ease-fall0.3, 0.7, 0.3, 1

Durations#

Each duration has a value per volume. Reading-layer motion is fixed; micro moments switch off at Quiet; long moments (panels, arrivals, wipes) grow from Studio to Rave.

Durations by volume, in milliseconds
TokenClassQuietStudioPressRaveReading layer
--mk-dur-hoverFixed200200200200Same at every volume
--mk-dur-pressFixed220220220220Same at every volume
--mk-dur-key-sinkFixed120120120120Same at every volume
--mk-dur-menuFixed140140140140Same at every volume
--mk-dur-overlay-inFixed240240240240Same at every volume
--mk-dur-overlay-outFixed160160160160Same at every volume
--mk-dur-drawer-inFixed280280280280Same at every volume
--mk-dur-drawer-outFixed200200200200Same at every volume
--mk-dur-disclosureFixed180180180180Same at every volume
--mk-dur-gaugeFixed900900900900Same at every volume
--mk-dur-toast-inFixed380380380380Same at every volume
--mk-dur-toast-outFixed260260260260Same at every volume
--mk-dur-toast-lifeFixed5,2005,2005,2005,200No
--mk-dur-sticker-popMicroNone480480480No
--mk-dur-sticker-pop-delayMicroNone200200200No
--mk-dur-peelMicro240300300300No
--mk-dur-stampMicroNone460460460No
--mk-dur-thumpMicroNone220220220No
--mk-dur-specksMicroNone640640640No
--mk-dur-seal-delayFixed1,2001,2001,2001,200No
--mk-dur-sealMicro240300300300No
--mk-dur-registerMicroNone520520520No
--mk-dur-sfx-popMicroNone700700700No
--mk-dur-sfx-holdFixed600600600600No
--mk-dur-sfx-outMicroNone300300300No
--mk-dur-panelLongNone300360420No
--mk-dur-panel-staggerLongNone404855No
--mk-dur-arrivalLong160360440520No
--mk-dur-block-hopMicroNone620620620No
--mk-dur-block-dropMicroNone700700700No
--mk-dur-block-drop-staggerMicroNone909090No
--mk-dur-wipeLongNoneNone410480No
--mk-dur-press-runFixedNone800800800No
--mk-dur-reinkMicro400700700700No
--mk-dur-themeFixed400400400400No
--mk-dur-gl-fadeFixed400400400400No
--mk-dur-field-wakeFixedNone400400400No
--mk-dur-field-runFixedNone4,0004,0004,000No
--mk-dur-field-easeFixedNone1,0001,0001,000No
--mk-dur-field-pulseFixedNone900900900No
--mk-dur-topple-stepMicroNone120120120No
--mk-dur-topple-fallMicroNone420420420No
--mk-dur-loader-cycleFixed1,2001,2001,2001,200No
--mk-dur-reducedFixed140140140140No

Signature moments#

The press run on a first visit, the second ink landing off register, stickers landing and settling square, stamps falling with specks, panels wiping in, the blocks raining and tidying into the mark, and the page wipe at Press. Each is documented on its component's page.

In code#

MotionRuntime (in the root layout) owns readiness, reveals and the pause; motionPrepaintScript sets the motion attributes before the first paint. A site can force reduced motion for itself with data-mk-motion="reduce" on the root.