Art Direction Daily
Gouache still life of three brass coil springs on a bottle-green table against a dusty rose wall, one compressed, one with its ball mid-bounce, one standing tall.
No.179 Motion foundationsTuesday
November 10, 2026
6 minute read

Give Figma a stiffness and a mass, and it works out the duration

Figma Motion's new physics springs take stiffness, damping and mass instead of milliseconds, and the timing falls out of the numbers. Springs save as variables, so the bounce can sit in the design system beside color and type.

Art direction

The Spring Token Docs

A design-system motion page in gouache rose and bottle green, where each spring is a token you can play before you ship it.

  • spring token
  • stiffness
  • damping ratio
  • colour-zoned tabs
  • numeral nameplate
  • spring bench
  • linear() easing
  • gouache still life

A foundations page from a design system's documentation, the kind a studio hands over with the component library. Colour zones do the navigation: every band owns one tab colour, so the sticky tab bar doubles as a map of where you are. The spring bench documents each token by running it, with real controls, a plotted curve and the CSS it produces.

Tooling

Figma Motion springs now run on stiffness, damping and mass

Spring bench

The same physics model, running in your browser. Move the three values and watch the duration change, then copy the CSS it prints.

Tokens
1.00 0 s0.40.81.21.6
725ms to settle
1.00damping ratio
0%overshoot

Generated CSS

transition-duration: 725ms;
transition-timing-function: linear(0, 0.125, 0.337, 0.533, 0.689, 0.797, 0.87, 0.919, 0.95, 0.969, 0.981, 0.989, 0.993, 0.996, 0.998, 0.999, 1);

Figma, Nov 10

Figma's release notes for November 10 add physics-based springs to Figma Motion. Choose Physics instead of Time and you set stiffness, damping and mass; the duration stops being an input and becomes the result of those three values.

Custom springs save as variables, so a team can publish one bounce and reuse it the way it reuses a color. That extends the motion styles Figma added in October, which saved an ease curve and a fixed duration.

The duration is now something the spring reports back to you, after you decide how heavy the thing is.

Two smaller changes ship with it. Style previews play each animation style in the animations list and on your canvas before you apply it, and Lottie export previews show how the file will play before you export it.

The spring presets are Gentle, Quick, Bouncy and Slow. Figma's help article lists mass for iOS and web, while Android springs use stiffness and a damping ratio without a separate mass.

Technique

Play a spring in plain CSS with linear()

CSS, MDN

Browsers cannot run a spring directly, but they can play one that has been sampled. The linear() easing function takes a list of progress points and draws straight segments between them, so seventeen samples of a spring become a timing function any transition or animation accepts.

Points above 1 are allowed, which is how the overshoot survives the trip. Sample at even time steps, end on exactly 1, and set the duration to the spring's settle time rather than a round number. The bench above prints both, and every current major browser supports the function.

The snap spring as linear() sees it: seventeen points, straight segments, overshoot kept.
Workflow

Cursor hosts what it builds, and Claude gets a new model

Cursor, Nov 5
Anthropic, Nov 9

Cursor cloud agents publish what they build

Cursor's changelog for November 5 lets cloud agents build a web app with a Postgres database and Cursor sign-in, then publish it to its own domain after a security check. Admins can review every app and its secrets and limit sharing to a person, a group or the whole team.

Claude Fable 5.2 reaches all users

Anthropic released Fable 5.2 to all users on November 9, with Mythos 5.2 for vetted organizations; API pricing is $8 per million input tokens and $40 per million output. The announcement makes no specific claim about interface work, so judge it against your own components before switching a build.

Design move

Borrow this: name the spring, not the duration

Store each motion intent as a spring (stiffness, damping and mass) and generate the easing and the duration from it, instead of hand-picking 300ms and a cubic-bezier. Use it for drawers, menus, toasts and anything a person can interrupt. The technique above is how a stylesheet plays the result.

  1. Four springs at most, named by what they do: settle, snap, bloom, drift.
  2. Bake each one into a linear() curve at build time and publish its duration beside it.
  3. Keep anything over a second for moments people wait on, never for menus.
  4. Under reduced motion, fade or cut instead of travelling.

tokens.css

:root {
  /* snap: stiffness 400, damping 28, mass 1 */
  --spring-snap: linear(0, 0.189, 0.504,
    0.77, 0.938, 1.019, 1.043, 1.039, 1.026,
    1.013, 1.004, 1, 0.998, 0.998, 0.999,
    0.999, 1);
  --spring-snap-ms: 560ms;
}
.drawer {
  transition: translate var(--spring-snap-ms)
    var(--spring-snap);
}
@media (prefers-reduced-motion: reduce) {
  .drawer { transition: opacity 120ms linear; }
}
Prompt Lab

Build a motion foundations page

Works in Claude, v0, Lovable, Figma Make and Beaver Builder AI
Build a design-system documentation page for a motion foundations section: the page that documents a team's spring tokens. Treat it as a real docs page a studio hands over with a component library, not a poster.

Structure, top to bottom:
1. A slim site bar: wordmark left, three text links right.
2. A full-bleed hero image (a painted still life of three brass coil springs on a bottle-green table against a dusty rose wall, subjects on the right). Lay a horizontal scrim in the page ground colour over the left half, 97 percent opaque at the edge fading to clear by 64 percent. On it: a nameplate made of a huge condensed numeral (the section number, about 130px, bottle green) beside a two-line mono caption (section name in raspberry caps, then date and read time), the headline, a two-sentence deck, one solid green button and one text link.
3. A sticky tab bar of real anchor links, one per section. Each tab has a 4px bottom bar in its section's key colour; the tab for the section in view fills with that colour (IntersectionObserver).
4. Full-width colour-zoned bands, one per section, each opened by a solid zone label (mono caps, white on the key colour) and a condensed uppercase h2, over a docs body grid of a 150px meta column (source and date), a 640px reading column and a side column for facts, figures and diagrams. Bands in order: rose overview, mint main topic, white changes, deep green design rule, pale brass prompt, rose-ground sources.
5. In the mint band, a spring bench card: preset token buttons (settle, snap, bloom, drift) with aria-pressed, three range inputs for stiffness, damping and mass with live outputs, an SVG plot of position over a fixed 2.4 second axis with the target line and a settle marker, a ball on a track that plays the spring on a Play button, a readout of settle time in ms, damping ratio and overshoot, and a dark code block printing transition-duration and a 17-point CSS linear() curve. Simulate the spring for real (m x'' + c x' + k(x - 1) = 0, 1ms steps, settled when within 0.001 of the target and nearly still).
6. A deep green band holding the design rule as numbered rules beside a code card of tokens.
7. A three-tile pager and a short colophon.

Palette: ground #F2E4E8 cool rose with a faint noise grain; bands #E8C7CF rose, #D5E6DB mint, #FCF8F9 white, #123A2C deep green, #EFE5CF pale brass; ink #13291F; accent #1D5E43 bottle green; raspberry #9E4F65 and plum #6A3A4E for labels; brass #A9853A only for the settle marker.
Type: Big Shoulders Display 800 uppercase for the numeral, headline and h2s; Libre Caslon Text for body at 19px, line-height 1.7; IBM Plex Mono for labels, tabs, controls and code.

Guardrails: body at least 18px with line-height 1.6 or more and 60 to 75 characters per line; every label passes WCAG AA on the surface it sits on; check headline contrast over the scrim at desktop and on mobile, where the image moves above the copy at 4:3. No readable text inside the image. No neon, no glow, no gradient text, no purple-blue gradients, no pill-shaped everything (8px buttons, 14px cards), no accent stripes on cards. Hover and focus states at 150ms on every control, one shadow on the bench only, and a prefers-reduced-motion rule that turns the Play animation into an instant jump.