Skip to content

Charts

A chart earns its place when it shows what a table would hide: a trend, a ranking, a share of a whole. Say that finding in the title, draw only what supports it, and put the source underneath.

A chart, start to finish

The title tells the reader what to see. The plot shows it with as little ink as the data allows, and the line under the chart says where the figures come from.

First work permits in Croatia, 1,200 in 2026, are forecast to reach 4,200 in 2041

02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00042,00022,300 to 61,7002026203120362041
02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026203120362041
02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026202720282029203020312032203320342035203620372038203920402041
02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026202720282029203020312032203320342035203620372038203920402041
02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00042,00022,300 to 61,7002026203120362041
02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026203120362041
02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026202720282029203020312032203320342035203620372038203920402041
02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026202720282029203020312032203320342035203620372038203920402041

Source: example figures, not a measurement.

Show the numbers
First work permits in Croatia by year, with the forecast range
YearFirst work permitsRange, lowRange, highBasis
20261,2001,2001,200Observed
20271,4001,3301,470Forecast
20281,6001,4401,760Forecast
20291,8001,5302,070Forecast
20302,0001,6002,400Forecast
20312,2001,6502,750Forecast
20322,4001,6803,120Forecast
20332,6001,6903,510Forecast
20342,8001,6803,920Forecast
20353,0001,6504,350Forecast
20363,2001,6004,800Forecast
20373,4001,5305,270Forecast
20383,6001,4405,760Forecast
20393,8001,3306,270Forecast
20404,0001,2006,800Forecast
20414,2001,0507,350Forecast

First work permits in Croatia by year, with the forecast range

2026

First work permits
1,200
Range, low
1,200
Range, high
1,200
Basis
Observed

2027

First work permits
1,400
Range, low
1,330
Range, high
1,470
Basis
Forecast

2028

First work permits
1,600
Range, low
1,440
Range, high
1,760
Basis
Forecast

2029

First work permits
1,800
Range, low
1,530
Range, high
2,070
Basis
Forecast

2030

First work permits
2,000
Range, low
1,600
Range, high
2,400
Basis
Forecast

2031

First work permits
2,200
Range, low
1,650
Range, high
2,750
Basis
Forecast

2032

First work permits
2,400
Range, low
1,680
Range, high
3,120
Basis
Forecast

2033

First work permits
2,600
Range, low
1,690
Range, high
3,510
Basis
Forecast

2034

First work permits
2,800
Range, low
1,680
Range, high
3,920
Basis
Forecast

2035

First work permits
3,000
Range, low
1,650
Range, high
4,350
Basis
Forecast

2036

First work permits
3,200
Range, low
1,600
Range, high
4,800
Basis
Forecast

2037

First work permits
3,400
Range, low
1,530
Range, high
5,270
Basis
Forecast

2038

First work permits
3,600
Range, low
1,440
Range, high
5,760
Basis
Forecast

2039

First work permits
3,800
Range, low
1,330
Range, high
6,270
Basis
Forecast

2040

First work permits
4,000
Range, low
1,200
Range, high
6,800
Basis
Forecast

2041

First work permits
4,200
Range, low
1,050
Range, high
7,350
Basis
Forecast

Source: example figures, not a measurement.

Choosing the chart

Start from the question. Comparing sizes calls for bars, change over time for columns or a line, a share of a whole for a stacked bar or a donut. The chart catalogue lists each chart with the question it answers.

When people need exact values more than a pattern, give them a table. When two measures run on different scales, draw two charts side by side, never one chart with two vertical axes.

Axes, gridlines and labels

Let the data be the strongest thing on the chart. Gridlines are faint and few, the zero line is slightly darker, and there is no frame or vertical axis line. Bars and columns start at zero, so their lengths compare honestly.

Horizontal gridlines
4 at most, a hairline
--border-rule
Zero line
1 px at 22 percent
--text
Ticks
3 to 5, on round steps of 1, 2, 2.5 or 5, scaled by a power of ten
Axis and tick labels
10 px, weight 400
--text-muted
Value labels
10 px, weight 500
--text
Smallest label
9 px on screen, 6 pt in print
Chart surface
12 px radius, no border
--surface-1
Source line
12 px on screen, 7 pt in print
--text-muted

Work permits issued in Croatia rose from 1,900 in 2020 to 4,200 in 2026

02,0004,0006,0004,2002020202120222023202420252026
02,0004,0006,0004,2002020202120222023202420252026
02,0004,0006,0004,2002020202120222023202420252026
02,0004,0006,0004,2002020202120222023202420252026
02,0004,0006,0004,2002020202120222023202420252026
02,0004,0006,0004,2002020202120222023202420252026

Source: example figures, not a measurement.

Show the numbers
Work permits issued in Croatia by year
YearWork permits issued
20201,900
20212,400
20223,100
20233,600
20243,900
20254,100
20264,200

Work permits issued in Croatia by year

2020

Work permits issued
1,900

2021

Work permits issued
2,400

2022

Work permits issued
3,100

2023

Work permits issued
3,600

2024

Work permits issued
3,900

2025

Work permits issued
4,100

2026

Work permits issued
4,200

Source: example figures, not a measurement.

Color

Series take their colors in a fixed order: brand blue, teal, amber, rose, violet, with slate for the remainder. The hues stay the same in both themes. Blue and violet never sit side by side, since some readers cannot tell them apart. From four series on, each color also carries a pattern.

Green and red stay reserved for status messages and do not draw series.

  • Brand blue

    Series 1
    #3d6bf5
    No pattern

  • Teal

    Series 2
    #12a78f
    Hatch at 45 degrees

  • Amber

    Series 3
    #c9781e
    Hatch at 135 degrees

  • Rose

    Series 4
    #e5588c
    Dots

  • Violet

    Series 5
    #8367ff
    Vertical lines

  • Slate

    Remainder
    #64748b
    Horizontal lines

Construction takes 1,500 of the 4,200 work permits issued

1,500900700500400Every other sector, 200
1,500900700500400Every other sector, 200
1,500900700500400Every other sector, 200
1,500900700500400Every other sector, 200
1,500900700500400Every other sector, 200
1,500900700500400Every other sector, 200
1,500900700500400Every other sector, 200
1,500900700500400Every other sector, 200

Source: example figures, not a measurement.

Show the numbers
Work permits issued by sector
SectorWork permits issued
Construction1,500
Care900
Hospitality700
Logistics500
Agriculture400
Every other sector200

Work permits issued by sector

Construction

Work permits issued
1,500

Care

Work permits issued
900

Hospitality

Work permits issued
700

Logistics

Work permits issued
500

Agriculture

Work permits issued
400

Every other sector

Work permits issued
200

Source: example figures, not a measurement.

Labels and legends

Name each series next to its line or bar wherever there is room, and fall back to a legend only when there is not. A legend sits in one row above the plot. A chart with one series needs no legend.

A label that does not fit is left out and counted in the chart's description, rather than shrunk below 9 px.

Poland issues the most work permits of the eight markets, 9,800

Poland9,800Czechia7,400Romania5,200Hungary4,600Croatia4,200Slovakia3,100Bulgaria2,600Slovenia1,900
Poland9,800Czechia7,400Romania5,200Hungary4,600Croatia4,200Slovakia3,100Bulgaria2,600Slovenia1,900
Poland9,800Czechia7,400Romania5,200Hungary4,600Croatia4,200Slovakia3,100Bulgaria2,600Slovenia1,900
Poland9,800Czechia7,400Romania5,200Hungary4,600Croatia4,200Slovakia3,100Bulgaria2,600Slovenia1,900
Poland9,800Czechia7,400Romania5,200Hungary4,600Croatia4,200Slovakia3,100Bulgaria2,600Slovenia1,900
Poland9,800Czechia7,400Romania5,200Hungary4,600Croatia4,200Slovakia3,100Bulgaria2,600Slovenia1,900

Source: example figures, not a measurement.

Show the numbers
Work permits issued by market
MarketWork permits issued
Poland9,800
Czechia7,400
Romania5,200
Hungary4,600
Croatia4,200
Slovakia3,100
Bulgaria2,600
Slovenia1,900

Work permits issued by market

Poland

Work permits issued
9,800

Czechia

Work permits issued
7,400

Romania

Work permits issued
5,200

Hungary

Work permits issued
4,600

Croatia

Work permits issued
4,200

Slovakia

Work permits issued
3,100

Bulgaria

Work permits issued
2,600

Slovenia

Work permits issued
1,900

Source: example figures, not a measurement.

Nepal's share of first work permits is forecast to fall from 40 percent in 2026 to 25 percent in 2041

  • Nepal
  • India
  • Philippines
  • Bangladesh
  • Every other origin
0.0%255075100.0%2026203120362041
0.0%255075100.0%2026203120362041
0.0%255075100.0%2026202720282029203020312032203320342035203620372038203920402041
0.0%255075100.0%2026203120362041
0.0%255075100.0%2026203120362041
0.0%255075100.0%2026202720282029203020312032203320342035203620372038203920402041

Source: example figures, not a measurement.

Show the numbers
Share of first work permits by citizenship and year, percent
YearNepalIndiaPhilippinesBangladeshEvery other origin
20264022161210
20273923161210
20283824161210
20293725161210
20303626161210
20313527161210
20323428161210
20333329161210
20343230161210
20353131161210
20363032161210
20372933161210
20382834161210
20392735161210
2040263616No data10
20412537161210

Share of first work permits by citizenship and year, percent

2026

Nepal
40
India
22
Philippines
16
Bangladesh
12
Every other origin
10

2027

Nepal
39
India
23
Philippines
16
Bangladesh
12
Every other origin
10

2028

Nepal
38
India
24
Philippines
16
Bangladesh
12
Every other origin
10

2029

Nepal
37
India
25
Philippines
16
Bangladesh
12
Every other origin
10

2030

Nepal
36
India
26
Philippines
16
Bangladesh
12
Every other origin
10

2031

Nepal
35
India
27
Philippines
16
Bangladesh
12
Every other origin
10

2032

Nepal
34
India
28
Philippines
16
Bangladesh
12
Every other origin
10

2033

Nepal
33
India
29
Philippines
16
Bangladesh
12
Every other origin
10

2034

Nepal
32
India
30
Philippines
16
Bangladesh
12
Every other origin
10

2035

Nepal
31
India
31
Philippines
16
Bangladesh
12
Every other origin
10

2036

Nepal
30
India
32
Philippines
16
Bangladesh
12
Every other origin
10

2037

Nepal
29
India
33
Philippines
16
Bangladesh
12
Every other origin
10

2038

Nepal
28
India
34
Philippines
16
Bangladesh
12
Every other origin
10

2039

Nepal
27
India
35
Philippines
16
Bangladesh
12
Every other origin
10

2040

Nepal
26
India
36
Philippines
16
Bangladesh
No data
Every other origin
10

2041

Nepal
25
India
37
Philippines
16
Bangladesh
12
Every other origin
10

Source: example figures, not a measurement.

Hover, touch and keys

Anything the chart must say is visible without interaction. Hovering only adds detail. The whole plot answers the pointer and snaps to the nearest point, and on a phone a tap keeps the point until you tap elsewhere.

The tooltip shows the period, then one row per series. With a keyboard, a chart is one stop, and the tooltip follows the focus as the keys below move through the data.

Left, Right
previous or next point
Up, Down
another series at the same point
Home, End
first or last point
Escape
leave the chart

First work permits in Croatia, 1,200 in 2026, are forecast to reach 4,200 in 2041

02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00042,00022,300 to 61,7002026203120362041

02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026203120362041

02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026202720282029203020312032203320342035203620372038203920402041

02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00042,00022,300 to 61,7002026203120362041

02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026203120362041

02,0004,0006,0008,0002026 1,2009,0007,450 to 10,55023,00015,750 to 30,25042,00022,300 to 61,7002026202720282029203020312032203320342035203620372038203920402041

Source: example figures, not a measurement.

Show the numbers
First work permits in Croatia by year, with the forecast range
YearFirst work permitsRange, lowRange, highBasis
20261,2001,2001,200Observed
20271,4001,3301,470Forecast
20281,6001,4401,760Forecast
20291,8001,5302,070Forecast
20302,0001,6002,400Forecast
20312,2001,6502,750Forecast
20322,4001,6803,120Forecast
20332,6001,6903,510Forecast
20342,8001,6803,920Forecast
20353,0001,6504,350Forecast
20363,2001,6004,800Forecast
20373,4001,5305,270Forecast
20383,6001,4405,760Forecast
20393,8001,3306,270Forecast
20404,0001,2006,800Forecast
20414,2001,0507,350Forecast

First work permits in Croatia by year, with the forecast range

2026

First work permits
1,200
Range, low
1,200
Range, high
1,200
Basis
Observed

2027

First work permits
1,400
Range, low
1,330
Range, high
1,470
Basis
Forecast

2028

First work permits
1,600
Range, low
1,440
Range, high
1,760
Basis
Forecast

2029

First work permits
1,800
Range, low
1,530
Range, high
2,070
Basis
Forecast

2030

First work permits
2,000
Range, low
1,600
Range, high
2,400
Basis
Forecast

2031

First work permits
2,200
Range, low
1,650
Range, high
2,750
Basis
Forecast

2032

First work permits
2,400
Range, low
1,680
Range, high
3,120
Basis
Forecast

2033

First work permits
2,600
Range, low
1,690
Range, high
3,510
Basis
Forecast

2034

First work permits
2,800
Range, low
1,680
Range, high
3,920
Basis
Forecast

2035

First work permits
3,000
Range, low
1,650
Range, high
4,350
Basis
Forecast

2036

First work permits
3,200
Range, low
1,600
Range, high
4,800
Basis
Forecast

2037

First work permits
3,400
Range, low
1,530
Range, high
5,270
Basis
Forecast

2038

First work permits
3,600
Range, low
1,440
Range, high
5,760
Basis
Forecast

2039

First work permits
3,800
Range, low
1,330
Range, high
6,270
Basis
Forecast

2040

First work permits
4,000
Range, low
1,200
Range, high
6,800
Basis
Forecast

2041

First work permits
4,200
Range, low
1,050
Range, high
7,350
Basis
Forecast

Source: example figures, not a measurement.

Accessibility

Each chart carries a text description written from its data: the kind of chart, its finding, the range of its values and the highest of them. A point reads with its context first, such as the year, then the series and the value.

A screen reader hears the drawing as one image with that description, not label by label. Under each chart, Show the numbers opens the same data as a table.

Motion and print

On screen, marks grow to their values when a chart appears and move to new values when the data changes, within 300 ms. With reduced motion they appear in place. Charts in reports and in print stay still.

In print, a chart uses exact colors with a pattern on each series, fits the widths of the page grid, and keeps its source line.

Permitted and not permitted

Permitted

  • Start bars and columns at zero

    Their length is the value.

  • Write the finding in the title

    Say what changed, for whom and over which years.

  • Show one point as a column or a dot

    A line needs four points or more.

Not permitted

  • Add a second vertical axis

    Two scales on one plot invite false comparisons. Draw two charts.

  • Crowd a chart with more than five series

    Keep five and group the rest as a remainder, or use a table.

  • Keep values behind hover only

    A printed page has no hover.

NextChart catalogue

Charts

The rules every WerkOS chart follows, on screen and in print.

  • Kind: data
  • Page: https://design.werklist.com/data/charts
  • Version: 2.1.2

When to use it

  • A trend, a ranking or a share that a table would hide

When not to use it

  • Exact values without a pattern: use a report table
  • Two measures of different scale on one plot: draw two charts
  • A chart that is not in the chart catalogue

Rules

  • Series order brand #3d6bf5, teal #12a78f, amber #c9781e, rose #e5588c, violet #8367ff; remainder slate #64748b; at most five named series; the same hues in both themes
  • Brand blue never sits beside violet
  • Patterns from four series on, on screen, and on every series in print
  • Green and red are kept for status and never draw a series
  • Bars, columns and stacks start at zero. A trend line, a slope or a dot plot may start elsewhere and then prints its minimum
  • No frame, no vertical axis line, no second vertical axis, no log scale
  • Label series directly before using a legend; one series needs no legend
  • Marks grow in when a chart appears and move when the data changes, over --duration-slow with --ease-standard; nothing moves with reduced motion, in reports or in print
  • A source line under every chart

Anatomy

  • Card: 12 px radius, no border; a chart always stands on its card, never directly on --surface-2 or --bg (--surface-1)
  • Title: one sentence that states the finding
  • Horizontal gridlines: 4 at most, a hairline on screen, 0.5 pt in print (--border-rule)
  • Zero line: 1 px on screen, 0.75 pt in print, at 22 percent (--text)
  • Last observed year: a thin vertical rule at 18 percent, 1 pt in print (--text)
  • Ticks: 3 to 5, on round steps of 1, 2, 2.5 or 5, scaled by a power of ten
  • Axis and tick labels: 10 px on screen, 7.5 pt in print, weight 400 (--text-muted)
  • Value labels: 10 px on screen, 7.5 pt in print, weight 500 (--text)
  • Smallest label: 9 px on screen, 6 pt in print; a label that would be smaller is left out and counted in the description
  • Short labels: used below 605 px of chart width
  • Series line: 2 px at full width and thinner as the chart narrows; a forecast is thinner and dotted
  • Bar track: 4 px on screen (--ring-track)
  • Stack gap: 1 px of ground between stacked segments, 4 px between the segments of a donut
  • Legend: one row above the plot, not interactive; on screen a 10 px dot for a series and a 10 px square at a 3 px radius for a category; in print a 6 pt square at a 2 pt radius
  • Source line: 12 px on screen, 7 pt in print, under the chart (--text-muted)

Variants

  • Screen: Follows the theme. A single series of bars may carry the brand gradient from #5a82ff to #1b4ae0.
  • Print: Reports and PDFs. Fixed colors, a pattern on every series, a flat #1b4ae0 for the first series, widths in points.

States

  • Hover or focus: a tooltip above the point, kept 8 px inside the window: the period, then one row per series
  • Tapped: the point stays until a tap elsewhere, a second tap, a scroll, a resize or Escape
  • Empty: the plot keeps its height and says in one sentence that there is no data yet; no zero is drawn
  • Error: the plot says it could not load and offers Try again
  • Loading: a skeleton the height of the plot

Keyboard

  • Tab: Enter or leave the chart, one stop per chart
  • Left, Right: Previous or next point
  • Up, Down: Another series at the same point
  • Home, End: First or last point
  • Escape: Close the tooltip and leave the chart

Accessibility

  • Each chart is one image with a description written from its data: the kind of chart, its finding, the range of its values and the highest of them
  • A point reads with its context first: the period, then the series, then the value
  • A screen reader hears the description, not each axis and tick label
  • Under each chart, Show the numbers opens the same data as a report table
  • Color never carries meaning alone: direct labels, patterns from four series on, a sign on every change
  • The whole plot answers the pointer; each mark is at least 24 by 24 px to hit

Tokens

  • --surface-1
  • --border-rule
  • --text
  • --text-muted
  • --ring-track
  • --radius-xl
  • --duration-slow
  • --ease-standard

JSON

{
  "title": "Charts",
  "path": "/data/charts",
  "url": "https://design.werklist.com/data/charts",
  "text": "https://design.werklist.com/agent/data/charts",
  "summary": "How a WerkOS chart is drawn, labeled and explored, on screen and in print.",
  "version": "2.1.2",
  "kind": "data",
  "name": "Charts",
  "purpose": "The rules every WerkOS chart follows, on screen and in print.",
  "use": [
    "A trend, a ranking or a share that a table would hide"
  ],
  "avoid": [
    "Exact values without a pattern: use a report table",
    "Two measures of different scale on one plot: draw two charts",
    "A chart that is not in the chart catalogue"
  ],
  "anatomy": [
    {
      "part": "Card",
      "measure": "12 px radius, no border; a chart always stands on its card, never directly on --surface-2 or --bg",
      "token": "--surface-1"
    },
    {
      "part": "Title",
      "measure": "one sentence that states the finding"
    },
    {
      "part": "Horizontal gridlines",
      "measure": "4 at most, a hairline on screen, 0.5 pt in print",
      "token": "--border-rule"
    },
    {
      "part": "Zero line",
      "measure": "1 px on screen, 0.75 pt in print, at 22 percent",
      "token": "--text"
    },
    {
      "part": "Last observed year",
      "measure": "a thin vertical rule at 18 percent, 1 pt in print",
      "token": "--text"
    },
    {
      "part": "Ticks",
      "measure": "3 to 5, on round steps of 1, 2, 2.5 or 5, scaled by a power of ten"
    },
    {
      "part": "Axis and tick labels",
      "measure": "10 px on screen, 7.5 pt in print, weight 400",
      "token": "--text-muted"
    },
    {
      "part": "Value labels",
      "measure": "10 px on screen, 7.5 pt in print, weight 500",
      "token": "--text"
    },
    {
      "part": "Smallest label",
      "measure": "9 px on screen, 6 pt in print; a label that would be smaller is left out and counted in the description"
    },
    {
      "part": "Short labels",
      "measure": "used below 605 px of chart width"
    },
    {
      "part": "Series line",
      "measure": "2 px at full width and thinner as the chart narrows; a forecast is thinner and dotted"
    },
    {
      "part": "Bar track",
      "measure": "4 px on screen",
      "token": "--ring-track"
    },
    {
      "part": "Stack gap",
      "measure": "1 px of ground between stacked segments, 4 px between the segments of a donut"
    },
    {
      "part": "Legend",
      "measure": "one row above the plot, not interactive; on screen a 10 px dot for a series and a 10 px square at a 3 px radius for a category; in print a 6 pt square at a 2 pt radius"
    },
    {
      "part": "Source line",
      "measure": "12 px on screen, 7 pt in print, under the chart",
      "token": "--text-muted"
    }
  ],
  "variants": [
    {
      "name": "Screen",
      "use": "Follows the theme. A single series of bars may carry the brand gradient from #5a82ff to #1b4ae0."
    },
    {
      "name": "Print",
      "use": "Reports and PDFs. Fixed colors, a pattern on every series, a flat #1b4ae0 for the first series, widths in points."
    }
  ],
  "states": [
    {
      "name": "Hover or focus",
      "change": "a tooltip above the point, kept 8 px inside the window: the period, then one row per series"
    },
    {
      "name": "Tapped",
      "change": "the point stays until a tap elsewhere, a second tap, a scroll, a resize or Escape"
    },
    {
      "name": "Empty",
      "change": "the plot keeps its height and says in one sentence that there is no data yet; no zero is drawn"
    },
    {
      "name": "Error",
      "change": "the plot says it could not load and offers Try again"
    },
    {
      "name": "Loading",
      "change": "a skeleton the height of the plot"
    }
  ],
  "keys": [
    {
      "key": "Tab",
      "action": "Enter or leave the chart, one stop per chart"
    },
    {
      "key": "Left, Right",
      "action": "Previous or next point"
    },
    {
      "key": "Up, Down",
      "action": "Another series at the same point"
    },
    {
      "key": "Home, End",
      "action": "First or last point"
    },
    {
      "key": "Escape",
      "action": "Close the tooltip and leave the chart"
    }
  ],
  "accessibility": [
    "Each chart is one image with a description written from its data: the kind of chart, its finding, the range of its values and the highest of them",
    "A point reads with its context first: the period, then the series, then the value",
    "A screen reader hears the description, not each axis and tick label",
    "Under each chart, Show the numbers opens the same data as a report table",
    "Color never carries meaning alone: direct labels, patterns from four series on, a sign on every change",
    "The whole plot answers the pointer; each mark is at least 24 by 24 px to hit"
  ],
  "tokens": [
    "--surface-1",
    "--border-rule",
    "--text",
    "--text-muted",
    "--ring-track",
    "--radius-xl",
    "--duration-slow",
    "--ease-standard"
  ],
  "rules": [
    "Series order brand #3d6bf5, teal #12a78f, amber #c9781e, rose #e5588c, violet #8367ff; remainder slate #64748b; at most five named series; the same hues in both themes",
    "Brand blue never sits beside violet",
    "Patterns from four series on, on screen, and on every series in print",
    "Green and red are kept for status and never draw a series",
    "Bars, columns and stacks start at zero. A trend line, a slope or a dot plot may start elsewhere and then prints its minimum",
    "No frame, no vertical axis line, no second vertical axis, no log scale",
    "Label series directly before using a legend; one series needs no legend",
    "Marks grow in when a chart appears and move when the data changes, over --duration-slow with --ease-standard; nothing moves with reduced motion, in reports or in print",
    "A source line under every chart"
  ]
}

Raw file: https://design.werklist.com/agent/data/charts