Skip to content

Report table

A report table shows final figures for people to read, compare or print, such as the work permits issued in each market. It has a blue head, alternating rows and no lines, so the numbers stay in front.

The table

Table 1. Three markets by priority and entry difficulty, 2026
MarketPriority rank, 53 marketsEntry difficulty rank, 53 marketsWork permits issued, 2026Share of permits
Serbia2 of 53, interval 1 to 45 of 53, interval 3 to 89,40031.4%
Bosnia and Herzegovina4 of 53, interval 2 to 63 of 53, interval 1 to 57,10023.7%
North Macedonia7 of 53, interval 5 to 92 of 53, interval 1 to 44,60015.4%
Total21,10070.5%

Table 1. Three markets by priority and entry difficulty, 2026

Serbia

Priority rank, 53 markets
2 of 53, interval 1 to 4
Entry difficulty rank, 53 markets
5 of 53, interval 3 to 8
Work permits issued, 2026
9,400
Share of permits
31.4%

Bosnia and Herzegovina

Priority rank, 53 markets
4 of 53, interval 2 to 6
Entry difficulty rank, 53 markets
3 of 53, interval 1 to 5
Work permits issued, 2026
7,100
Share of permits
23.7%

North Macedonia

Priority rank, 53 markets
7 of 53, interval 5 to 9
Entry difficulty rank, 53 markets
2 of 53, interval 1 to 4
Work permits issued, 2026
4,600
Share of permits
15.4%

Total

Work permits issued, 2026
21,100
Share of permits
70.5%

A rank of 1 is the highest priority, or the easiest market to enter. The interval is the range the rank could fall in.

Source: Werklist, example figures.

On screen, in the theme you are reading in.
Table 1. Three markets by priority and entry difficulty, 2026
MarketPriority rank, 53 marketsEntry difficulty rank, 53 marketsWork permits issued, 2026Share of permits
Serbia2 of 53, interval 1 to 45 of 53, interval 3 to 89,40031.4%
Bosnia and Herzegovina4 of 53, interval 2 to 63 of 53, interval 1 to 57,10023.7%
North Macedonia7 of 53, interval 5 to 92 of 53, interval 1 to 44,60015.4%
Total21,10070.5%

A rank of 1 is the highest priority, or the easiest market to enter. The interval is the range the rank could fall in.

Source: Werklist, example figures.

On paper, as the report prints it: white in both themes.

When to use it

Use a report table when the figures are final and people read, compare or print them: in a country report, a PDF or a page on werklist.com. When your team changes the values, use the board grid.

When the point is a trend or a ranking, lead with a chart and place the table under it for the exact values.

Anatomy

The head names what each column counts and in which unit. Alternating rows carry the eye across a wide table, and the totals sit on a pale blue band across the full width. A caption above and a source line below complete it.

Table 2. Work permits issued in three markets, 2026
MarketWork permits issued, 2026Share of permits
Western Balkans
Serbia9,40031.4%
Bosnia and Herzegovina7,10023.7%
North Macedonia4,60015.4%
Total21,10070.5%

Table 2. Work permits issued in three markets, 2026

Western Balkans

Serbia

Work permits issued, 2026
9,400
Share of permits
31.4%

Bosnia and Herzegovina

Work permits issued, 2026
7,100
Share of permits
23.7%

North Macedonia

Work permits issued, 2026
4,600
Share of permits
15.4%

Total

Work permits issued, 2026
21,100
Share of permits
70.5%

Shares are of every permit issued in the region.

Source: Werklist, example figures.

Head fill
the brand gradient, from blue to deep blue, left to right
--grad-blue-to
Head text on paper
7.5 pt, weight 700, white
--on-brand
Head text on screen
13 px, weight 500, white
--on-brand
Head height
26 pt on paper, 40 px on screen
Body row
13 pt on paper, 36 px on screen
Body text
8.5 pt on paper, 13 px on screen
--text
Alternate rows
every second row, full width
--surface-strong
Totals row
full width, weight 700
--track-tint
Cell inset
4 pt on paper, 12 px on screen
Column gap
8 pt on paper
Caption
9.5 pt, weight 500, above the table
--text
Notes and source
7 pt on paper, 12 px on screen
--text-muted

Figures and units

Put the unit in the header, once, after a comma: “Work permits issued, thousands, 2025”. The cells then hold digits only, right aligned, so a column reads like a sum on paper.

Name the document you count, such as work permits or visas. A missing figure prints n/a, with a short reason when the column has room, and a zero prints as 0.

Figures
right aligned, with the header aligned the same way
Text and first column
left aligned
Negative
minus sign U+2212
Missing
n/a, with a reason from 60 pt of column width
--text-muted
Cell length
24 characters at most outside the first column
Value columns
8 at most

Countries in the first column

A country row starts with its round flag and the full name, not an abbreviation. A long name wraps to a second line and the row grows with it. Where there is no round flag, as for the European Union, the two letter code takes its place in a small disc.

Table 3. Work permits issued in four markets, 2026
MarketWork permits issued, 2026
Bosnia and Herzegovina7,100
United Arab Emirates340
Kosovo0
European Unionn/a, not collected

Table 3. Work permits issued in four markets, 2026

Bosnia and Herzegovina

Work permits issued, 2026
7,100

United Arab Emirates

Work permits issued, 2026
340

Kosovo

Work permits issued, 2026
0

European Union

Work permits issued, 2026
n/a, not collected

Source: Werklist, example figures.

Flag on paper
10 pt, then a 4 pt gap
Flag on screen
20 px, then a 6 px gap
Without a flag
the two letter code in a disc
--surface-control

Long tables and small screens

A full page holds 44 rows. A longer table continues on the next page and repeats its head there, without the caption. A yearly series goes in a chart with a table of its key years, or in a table turned so each year is a row.

At 768 px and wider the table keeps its columns and the first column stays in place as you scroll sideways. On a phone each row becomes a small block, with the column names as labels.

Table 1. Three markets by priority and entry difficulty, 2026
MarketPriority rank, 53 marketsEntry difficulty rank, 53 marketsWork permits issued, 2026Share of permits
Serbia2 of 53, interval 1 to 45 of 53, interval 3 to 89,40031.4%
Bosnia and Herzegovina4 of 53, interval 2 to 63 of 53, interval 1 to 57,10023.7%
North Macedonia7 of 53, interval 5 to 92 of 53, interval 1 to 44,60015.4%
Total21,10070.5%

Table 1. Three markets by priority and entry difficulty, 2026

Serbia

Priority rank, 53 markets
2 of 53, interval 1 to 4
Entry difficulty rank, 53 markets
5 of 53, interval 3 to 8
Work permits issued, 2026
9,400
Share of permits
31.4%

Bosnia and Herzegovina

Priority rank, 53 markets
4 of 53, interval 2 to 6
Entry difficulty rank, 53 markets
3 of 53, interval 1 to 5
Work permits issued, 2026
7,100
Share of permits
23.7%

North Macedonia

Priority rank, 53 markets
7 of 53, interval 5 to 9
Entry difficulty rank, 53 markets
2 of 53, interval 1 to 4
Work permits issued, 2026
4,600
Share of permits
15.4%

Total

Work permits issued, 2026
21,100
Share of permits
70.5%

A rank of 1 is the highest priority, or the easiest market to enter. The interval is the range the rank could fall in.

Source: Werklist, example figures.

Table 1 on a phone.

In both themes

On screen the table follows the theme: the head keeps its blue, while the stripes and the totals band take their dark values. On paper and in the PDF the table stays white.

Table 2. Work permits issued in three markets, 2026
MarketWork permits issued, 2026Share of permits
Western Balkans
Serbia9,40031.4%
Bosnia and Herzegovina7,10023.7%
North Macedonia4,60015.4%
Total21,10070.5%

Table 2. Work permits issued in three markets, 2026

Western Balkans

Serbia

Work permits issued, 2026
9,400
Share of permits
31.4%

Bosnia and Herzegovina

Work permits issued, 2026
7,100
Share of permits
23.7%

North Macedonia

Work permits issued, 2026
4,600
Share of permits
15.4%

Total

Work permits issued, 2026
21,100
Share of permits
70.5%

Shares are of every permit issued in the region.

Source: Werklist, example figures.

Light
Table 2. Work permits issued in three markets, 2026
MarketWork permits issued, 2026Share of permits
Western Balkans
Serbia9,40031.4%
Bosnia and Herzegovina7,10023.7%
North Macedonia4,60015.4%
Total21,10070.5%

Table 2. Work permits issued in three markets, 2026

Western Balkans

Serbia

Work permits issued, 2026
9,400
Share of permits
31.4%

Bosnia and Herzegovina

Work permits issued, 2026
7,100
Share of permits
23.7%

North Macedonia

Work permits issued, 2026
4,600
Share of permits
15.4%

Total

Work permits issued, 2026
21,100
Share of permits
70.5%

Shares are of every permit issued in the region.

Source: Werklist, example figures.

Dark

Accessibility

On screen the table is a real table with a caption, column headers and the first column as row headers, so a screen reader names the row and column of each figure. Flags stay hidden from assistive technology, since the name follows them.

The stripes carry no meaning, and n/a shows its reason as text, not only on hover.

Permitted and not permitted

Permitted

  • Name the document in the header

    Work permits issued, work permits in force, visas issued.

  • Keep the unit in the header

    Cells hold digits only, so the column aligns.

  • Run the totals band across the full width

    The row reads as one line from its label to the last figure.

Not permitted

  • Count workers, persons or people

    Reports count documents. One person can hold several permits over the years.

  • Draw rules, frames or column lines

    The blue head and the stripes already give the table its structure.

  • Center figures

    Centered digits stop lining up by place value.

NextNumbers

Report table

The static table of reports and documents, for final figures that people read, compare and print.

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

When to use it

  • Country reports and other PDFs
  • Report pages on werklist.com
  • The exact values under a chart or a map

When not to use it

  • Values people edit: use the board grid
  • A trend or a ranking without its chart
  • A yearly series as one column per year: turn the table so each year is a row, or use a chart

Rules

  • No rules, frames or vertical lines
  • No rounded corners on paper, no icon or tag columns, no row numbers, no merged cells, no rotated headers
  • Figures are right aligned, never centered, and the header is aligned the same way
  • Units live in the header and cells hold digits only
  • Negative values take the minus sign U+2212, never a hyphen or parentheses
  • Zero prints 0 and no cell is left blank
  • At most 8 value columns, and at most 24 characters in a cell outside the first column
  • 44 rows fill a page
  • A country name is never shortened. Where there is no flag, the two letter code takes its place
  • The totals band runs the full width
  • On screen a table wider than its space scrolls sideways, and a country name keeps at least 8 em

Anatomy

  • Caption: 9.5 pt, weight 500, one line above the table, with the table number (--text)
  • Head: a fill from --grad-blue-to (#1863dc) to --grad-ocean-ink (#0e3fa8), left to right, full width. 26 pt on paper for one or two lines, 40 px on screen. Top outer corners 8 px on screen, square on paper (--grad-blue-to)
  • Head text: on paper 7.5 pt, weight 700, on 10 pt leading. On screen 13 px, weight 500. White, sentence case, never rotated, aligned like its column (--on-brand)
  • Body row: one 13 pt line on paper, 36 px on screen
  • Body text: 8.5 pt on paper, 13 px on screen, weight 400. Figures on screen 13 px, weight 500, tabular (--text)
  • Stripes: every second body row filled across the full width, the others on the page (--surface-strong)
  • Group label row: 8.5 pt on paper or 13 px on screen, weight 700, no fill. The stripes start again under it (--text)
  • Totals row: a full width fill, weight 700. Printed only when the total is the sum of its column or a stated calculation (--track-tint)
  • Cell inset: 4 pt on paper, half the 8 pt column gap, 12 px on screen
  • Country cell: a round flag of 10 pt on paper or 20 px on screen with a 1 px inset ring in --border, a 4 pt or 6 px gap, then the full name, which wraps. Where there is no flag, the two letter code on --surface-control
  • Notes line: 7 pt on paper, 12 px on screen (--text-muted)
  • Source line: 7 pt on paper, 12 px on screen, always present, starting with Source: (--text-muted)

Variants

  • Paper: PDF reports, white in both themes: the head from #1863dc to #0e3fa8, stripes #f1f1f4, totals #e8effc
  • Screen: Report pages on werklist.com and in WerkOS, following the theme
  • Stacked: On screens below 768 px, one block per row with the column names as labels, blocks 8 px apart on --surface-2 at --radius-lg. A figure keeps its line and its label wraps

States

  • Missing value: n/a in muted ink, aligned like its column, with a short reason (closed, unpublished, out of scope, not collected, pending) when the column is at least 60 pt wide (--text-muted)
  • Continued: past 44 rows the table continues on the next page and repeats the head, not the caption
  • Dark theme on screen: the head stays the same, the stripes and the totals take their dark values (--surface-strong, --track-tint)

Accessibility

  • On screen, a table element with a caption, th scope col for the column headers and th scope row for the first column
  • Flags are hidden from assistive technology, since the name follows them
  • n/a shows its reason as text
  • The stripes carry no meaning

Content

  • The header names the document and its unit after a comma: Work permits issued, thousands, 2025
  • A count is of documents, never of workers, persons or people
  • A change in a percentage is in points and the header says so
  • Ranges are written with to

Tokens

  • --grad-blue-to
  • --grad-ocean-ink
  • --on-brand
  • --surface-strong
  • --track-tint
  • --surface-2
  • --surface-control
  • --text
  • --text-muted
  • --radius-lg

JSON

{
  "title": "Report table",
  "path": "/data/tables",
  "url": "https://design.werklist.com/data/tables",
  "text": "https://design.werklist.com/agent/data/tables",
  "summary": "The table of reports and documents: a blue head, alternating rows, figures that line up and a source underneath.",
  "version": "2.1.2",
  "kind": "data",
  "name": "Report table",
  "purpose": "The static table of reports and documents, for final figures that people read, compare and print.",
  "use": [
    "Country reports and other PDFs",
    "Report pages on werklist.com",
    "The exact values under a chart or a map"
  ],
  "avoid": [
    "Values people edit: use the board grid",
    "A trend or a ranking without its chart",
    "A yearly series as one column per year: turn the table so each year is a row, or use a chart"
  ],
  "anatomy": [
    {
      "part": "Caption",
      "measure": "9.5 pt, weight 500, one line above the table, with the table number",
      "token": "--text"
    },
    {
      "part": "Head",
      "measure": "a fill from --grad-blue-to (#1863dc) to --grad-ocean-ink (#0e3fa8), left to right, full width. 26 pt on paper for one or two lines, 40 px on screen. Top outer corners 8 px on screen, square on paper",
      "token": "--grad-blue-to"
    },
    {
      "part": "Head text",
      "measure": "on paper 7.5 pt, weight 700, on 10 pt leading. On screen 13 px, weight 500. White, sentence case, never rotated, aligned like its column",
      "token": "--on-brand"
    },
    {
      "part": "Body row",
      "measure": "one 13 pt line on paper, 36 px on screen"
    },
    {
      "part": "Body text",
      "measure": "8.5 pt on paper, 13 px on screen, weight 400. Figures on screen 13 px, weight 500, tabular",
      "token": "--text"
    },
    {
      "part": "Stripes",
      "measure": "every second body row filled across the full width, the others on the page",
      "token": "--surface-strong"
    },
    {
      "part": "Group label row",
      "measure": "8.5 pt on paper or 13 px on screen, weight 700, no fill. The stripes start again under it",
      "token": "--text"
    },
    {
      "part": "Totals row",
      "measure": "a full width fill, weight 700. Printed only when the total is the sum of its column or a stated calculation",
      "token": "--track-tint"
    },
    {
      "part": "Cell inset",
      "measure": "4 pt on paper, half the 8 pt column gap, 12 px on screen"
    },
    {
      "part": "Country cell",
      "measure": "a round flag of 10 pt on paper or 20 px on screen with a 1 px inset ring in --border, a 4 pt or 6 px gap, then the full name, which wraps. Where there is no flag, the two letter code on --surface-control"
    },
    {
      "part": "Notes line",
      "measure": "7 pt on paper, 12 px on screen",
      "token": "--text-muted"
    },
    {
      "part": "Source line",
      "measure": "7 pt on paper, 12 px on screen, always present, starting with Source:",
      "token": "--text-muted"
    }
  ],
  "variants": [
    {
      "name": "Paper",
      "use": "PDF reports, white in both themes: the head from #1863dc to #0e3fa8, stripes #f1f1f4, totals #e8effc"
    },
    {
      "name": "Screen",
      "use": "Report pages on werklist.com and in WerkOS, following the theme"
    },
    {
      "name": "Stacked",
      "use": "On screens below 768 px, one block per row with the column names as labels, blocks 8 px apart on --surface-2 at --radius-lg. A figure keeps its line and its label wraps"
    }
  ],
  "states": [
    {
      "name": "Missing value",
      "change": "n/a in muted ink, aligned like its column, with a short reason (closed, unpublished, out of scope, not collected, pending) when the column is at least 60 pt wide",
      "tokens": [
        "--text-muted"
      ]
    },
    {
      "name": "Continued",
      "change": "past 44 rows the table continues on the next page and repeats the head, not the caption"
    },
    {
      "name": "Dark theme on screen",
      "change": "the head stays the same, the stripes and the totals take their dark values",
      "tokens": [
        "--surface-strong",
        "--track-tint"
      ]
    }
  ],
  "accessibility": [
    "On screen, a table element with a caption, th scope col for the column headers and th scope row for the first column",
    "Flags are hidden from assistive technology, since the name follows them",
    "n/a shows its reason as text",
    "The stripes carry no meaning"
  ],
  "content": [
    "The header names the document and its unit after a comma: Work permits issued, thousands, 2025",
    "A count is of documents, never of workers, persons or people",
    "A change in a percentage is in points and the header says so",
    "Ranges are written with to"
  ],
  "tokens": [
    "--grad-blue-to",
    "--grad-ocean-ink",
    "--on-brand",
    "--surface-strong",
    "--track-tint",
    "--surface-2",
    "--surface-control",
    "--text",
    "--text-muted",
    "--radius-lg"
  ],
  "rules": [
    "No rules, frames or vertical lines",
    "No rounded corners on paper, no icon or tag columns, no row numbers, no merged cells, no rotated headers",
    "Figures are right aligned, never centered, and the header is aligned the same way",
    "Units live in the header and cells hold digits only",
    "Negative values take the minus sign U+2212, never a hyphen or parentheses",
    "Zero prints 0 and no cell is left blank",
    "At most 8 value columns, and at most 24 characters in a cell outside the first column",
    "44 rows fill a page",
    "A country name is never shortened. Where there is no flag, the two letter code takes its place",
    "The totals band runs the full width",
    "On screen a table wider than its space scrolls sideways, and a country name keeps at least 8 em"
  ]
}

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