Northwind design tokens v0.3

Color, type, spacing and button tokens for review

Colors154 families
Type sizes8ratio 1.25
Spacing steps84 px base
Button variants43 sizes

Color

Brand and neutral

tokenhexroleon whiteon neutral-900
brand-600#5B3FD9primary action and links6.82.6
brand-500#6E56E8hover and focus ring5.13.4
brand-100#ECE8FDselected row and tint1.214.6
neutral-900#14131Abody text and dark surface17.91.0
neutral-700#3B3947secondary text10.81.7
neutral-500#6B6879placeholder and icons5.43.3
neutral-200#DAD8E2borders and dividers1.412.7
neutral-50#F6F5F9page background1.116.3

Status

tokenhexuseon white
success-600#1F8F5Fconfirmations and paid4.6
warning-600#B7791Fpending and caution4.0
danger-600#C93B3Berrors and destructive5.0
info-600#2563C9neutral notices5.7

Contrast against white

Text must reach 4.5:1 for AA. The dashed line is the pass mark.

Contrast ratio on white
Contrast ratio on whiteHorizontal bar chart, 9 values of token. ratio goes from 17.9 :1 (neutral-900) to 4 :1 (warning-600); highest 17.9 :1 at neutral-900, lowest 4 :1 at warning-600.0 :15 :110 :115 :120 :1neutral-900neutral-900 · ratio: 17.9 :117.9 :1neutral-700neutral-700 · ratio: 10.8 :110.8 :1brand-600brand-600 · ratio: 6.8 :16.8 :1info-600info-600 · ratio: 5.7 :15.7 :1neutral-500neutral-500 · ratio: 5.4 :15.4 :1brand-500brand-500 · ratio: 5.1 :15.1 :1danger-600danger-600 · ratio: 5 :15 :1success-600success-600 · ratio: 4.6 :14.6 :1warning-600warning-600 · ratio: 4 :14 :1AA
Contrast ratio on whiteHorizontal bar chart, 9 values of token. ratio goes from 17.9 :1 (neutral-900) to 4 :1 (warning-600); highest 17.9 :1 at neutral-900, lowest 4 :1 at warning-600.0 :110 :120 :1neutral-900neutral-900 · ratio: 17.9 :117.9 :1neutral-700neutral-700 · ratio: 10.8 :110.8 :1brand-600brand-600 · ratio: 6.8 :16.8 :1info-600info-600 · ratio: 5.7 :15.7 :1neutral-500neutral-500 · ratio: 5.4 :15.4 :1brand-500brand-500 · ratio: 5.1 :15.1 :1danger-600danger-600 · ratio: 5 :15 :1success-600success-600 · ratio: 4.6 :14.6 :1warning-600warning-600 · ratio: 4 :14 :1AA
Data
tokenratio
neutral-90017.9 :1
neutral-70010.8 :1
brand-6006.8 :1
info-6005.7 :1
neutral-5005.4 :1
brand-5005.1 :1
danger-6005 :1
success-6004.6 :1
warning-6004 :1

Type scale

Base 16 px, scale ratio 1.25 rounded to whole pixels. Family is Inter for UI and JetBrains Mono for code.

tokensize pxline height pxweightuse
text-xs1216500captions and legal
text-sm1420400table cells and helper text
text-base1624400body
text-lg1828500lead paragraph
text-xl2230600card titles
text-2xl2836600section headings
text-3xl3644700page titles
text-4xl4856700marketing hero
Size by step
text-xs12 px
text-sm14 px
text-base16 px
text-lg18 px
text-xl22 px
text-2xl28 px
text-3xl36 px
text-4xl48 px
Data
tokensize px
text-xs12 px
text-sm14 px
text-base16 px
text-lg18 px
text-xl22 px
text-2xl28 px
text-3xl36 px
text-4xl48 px

Spacing and shape

Spacing scale
space-14 px
space-28 px
space-312 px
space-416 px
space-524 px
space-632 px
space-748 px
space-864 px
Data
tokenpx
space-14 px
space-28 px
space-312 px
space-416 px
space-524 px
space-632 px
space-748 px
space-864 px
tokenvalueuse
radius-sm4 pxinputs and chips
radius-md8 pxbuttons and cards
radius-lg16 pxmodals
shadow-10 1px 2px rgba(20,19,26,0.08)cards at rest
shadow-20 4px 12px rgba(20,19,26,0.12)menus and hover
focus-ring0 0 0 3px #6E56E8 at 40%all focusable controls

Buttons

Each variant is listed with its exact tokens, so the rendered result can be checked against the spec. Height comes from size, never from padding guesses.

Primary

Fill brand-600, label white, no border, radius-md. Hover fill brand-500. Pressed fill #4A31B8. Disabled fill neutral-200, label neutral-500. Use once per view.

Secondary

Fill white, label brand-600, 1 px border neutral-200, radius-md. Hover fill brand-100. Pressed fill #DDD6FA. Disabled label neutral-500.

Ghost

No fill, label neutral-700, no border. Hover fill neutral-50. Pressed fill neutral-200. For toolbar and tertiary actions.

Destructive

Fill danger-600, label white, radius-md. Hover fill #B03232. Always paired with a confirm step.

sizeheight pxpadding x pxfonticon px
sm32space-3 (12)text-sm16
md40space-4 (16)text-base20
lg48space-5 (24)text-lg24

State matrix

variantresthoverpressedfocusdisabled
Primarybrand-600brand-500#4A31B8focus-ringneutral-200
Secondarywhitebrand-100#DDD6FAfocus-ringwhite
Ghosttransparentneutral-50neutral-200focus-ringtransparent
Destructivedanger-600#B03232#982A2Afocus-ringneutral-200

Token file

{
  "color": {
    "brand": { "600": "#5B3FD9", "500": "#6E56E8", "100": "#ECE8FD" },
    "neutral": { "900": "#14131A", "700": "#3B3947", "500": "#6B6879", "200": "#DAD8E2", "50": "#F6F5F9" },
    "danger": { "600": "#C93B3B" }
  },
  "space": { "1": 4, "2": 8, "3": 12, "4": 16, "5": 24, "6": 32, "7": 48, "8": 64 },
  "radius": { "sm": 4, "md": 8, "lg": 16 },
  "font": { "base": 16, "lg": 18, "xl": 22, "2xl": 28, "3xl": 36 }
}

Open questions for review


Back to the examples