Proposal · Draft, 5 October 2026

One type system for Figma and code

Our type is too big on large screens, and far harder to manage than it needs to be. We can fix both with fewer sizes, one set of names, and type that grows smoothly with the screen.

This is step one of a wider design system overhaul. The look is settled. The system underneath it is what we’re building. The sizes here are a first draft.

Type gets too big on big screens

Sizes were raised for people on large monitors. Now pages feel oversized there. This is the same text on a 2560px screen, today and as proposed.

Today

Page title 68px

Body text 24px

Proposed

Page title 54px

Body text 18px

Grow smoothly, then ease off

Each size is set at three screen widths. It grows in a straight line from 390 to 1440px, then more gently up to 2560px. No jumps, and no oversized type at the top.

50607080390Mobile1440Desktop2560LargeTodayProposed
The largest heading, in px, against screen width. At 2560px it is 84px today and 60px in the draft.

Two layers, one set of names

12 sizes

A font size that grows with the screen. You rarely pick one directly.

16 roles

The text styles you choose: a typeface, a size and a line height. Weight, italic and link are options.

Same name everywhere

Figma
Heading XL
Code
easel-heading-xl
A brief
‘Use heading-xl’

Every new name starts with easel-. You can see at a glance what uses the new system, and we can count it.

Three line heights

none · 1

Lot 42

heading · 1.2

20th/21st Century Evening Sale, London

body · 1.4

Our specialists are here to answer your questions, from free valuations to market advice.

Each is a multiple of the font size, so it follows the type at any width. Figma already works this way.

The 16 roles

These are live. Resize the window and they grow. The numbers are each role’s size at 390, 1440 and 2560px.

See every role and size as a table
RoleTypefaceSize39014402560, draft2560, todayLine heightIn code today
heading-xxlSerif5xl485660841.2heading-xxl-serif
heading-xlSerif4xl364854681.2heading-xl-serif
heading-lSerif3xl283234561.2heading-l-serif
heading-m-sansSans2xl-sans242830361.2heading-m-sans
heading-m-serifSerif2xl-serif242830421.2heading-m-serif
heading-s-sansSansxl-sans181820241.2heading-s-sans
heading-s-serifSerifxl-serif202426361.2heading-s-serif, heading-s-serif-m
heading-xs-sansSanslg-sans141617241.2heading-xs-sans
heading-xs-serifSeriflg-serif162022281.2heading-xs-serif
bodySansmd161618241.4body, body-medium
body-sSanssm141416201.4body-s, body-s-medium
body-xsSansxs121214141.4body-xs
labelSanssm141416201.2label, label-medium
label-sSansxs121214141.2label-s, label-s-medium
action-lSansmd161618241.2action-l
actionSanssm141416201.2action, action-medium

What changes for you

Designers

Draw two widths, not seven

Draw 390 and 1440. Check 2560 by switching a mode. The browser works out the rest.

  • Pick a role, such as Heading XL, not a size
  • Weight, italic and link are choices on a role
  • Add a 768 frame only where the layout changes
  • A size change is made once, and reaches Figma and code together

Developers

One class, no breakpoints

Today

text-4xl md:text-4xl-lg 2xl:text-4xl-xl 3xl:text-4xl-2xl

Proposed

easel-heading-xl
  • Plain CSS, with nothing new to install
  • The new classes sit beside the old ones, so nothing breaks
  • Packages move over one at a time
  • QA checks a table of sizes, not seven frames
  • Layout breakpoints stay as they are

Eight steps, none of them a big bang

Each step ships on its own. A design system taskforce could lead steps 5 to 8.

  1. 1

    Agree the numbers

    Settle the 2560 sizes. Check the three widths against visitor data.

  2. 2

    Agree the names

    Design and engineering sign off one set of names.

  3. 3

    Add new beside old

    New variables in Figma, new classes in code. Nothing changes on screen.

  4. 4

    Pilot one page

    Build it with the new roles. Compare before and after on big screens.

  5. 5

    Move shared packages

    Start with the one Typography lives in. New work uses the roles.

  6. 6

    Move each area

    One package at a time, at each team’s pace.

  7. 7

    Flag the old

    Mark the old sizes as deprecated, with a warning on new uses.

  8. 8

    Remove the old

    Once no package uses them.

How we’ll know it’s working

Because every new name starts with easel-, progress is a count, not an opinion. This is where we start.

MeasureTodayGoal
Sizes in the Tailwind config6212
Line heights in the Tailwind config623
Typography variants that differ from Figma4 of 220
Files that use the old size classes directly430
One-off font sizes130
Font sizes forced with !important100
Files that style text outside Typography370
Type set with easel- names, by package0%100%

Code counts are from engineering’s main branch on 30 September 2026. Two figures are still needed before anything changes: how long a type change takes to reach the site, and how long QA spends on one.

Still to decide

See it working