Arche Design System

Foundations Color

curranleeds.com

Foundations

Color

Brand families do different jobs, and neutrals carry the rest. Components never use these raw colors directly. They use role tokens that point at them. This page shows Canon, the default mode.

Color families

Each family runs from 50 (lightest) to 900 (darkest). The 500 step is the base color. The CSS name is under each swatch. Norway Blue and Sweden Blue are used by one mode each. Swiss red (--arche-swiss-red-web #FF0000, and --arche-swiss-red-print #DA291C for print) is used only in Klarheit and is also the Alert color.

Greece Blue

Structure and meaning: bands, links, buttons, stat numbers. Ethos uses it as its only color.

  • 50#E6ECF3--arche-greece-blue-50
  • 100#CCDAE7--arche-greece-blue-100
  • 200#9EB8D2--arche-greece-blue-200
  • 300#7196BC--arche-greece-blue-300
  • 400#396DA2--arche-greece-blue-400
  • 500#014488--arche-greece-blue-500
  • 600#013A74--arche-greece-blue-600
  • 700#012E5C--arche-greece-blue-700
  • 800#002244--arche-greece-blue-800
  • 900#001429--arche-greece-blue-900

Sweden Yellow

Identity: the name on the home page, the Credits band, the selection highlight and, in Omtanke, the yellow band and the primary button on blue.

  • 50#FFFAE6--arche-sweden-yellow-50
  • 100#FFF5CC--arche-sweden-yellow-100
  • 200#FFEC9E--arche-sweden-yellow-200
  • 300#FFE370--arche-sweden-yellow-300
  • 400#FFD838--arche-sweden-yellow-400
  • 500#FFCD00--arche-sweden-yellow-500
  • 600#D9AE00--arche-sweden-yellow-600
  • 700#AD8B00--arche-sweden-yellow-700
  • 800#806600--arche-sweden-yellow-800
  • 900#4C3E00--arche-sweden-yellow-900

Norway Red

The logo and, in Canon, the end mark. Nøktern uses it in the Cross. It is never on text, controls, validation or cards.

  • 50#FAE7EB--arche-norway-red-50
  • 100#F6CFD6--arche-norway-red-100
  • 200#EEA4B2--arche-norway-red-200
  • 300#E6798D--arche-norway-red-300
  • 400#DC4561--arche-norway-red-400
  • 500#D21034--arche-norway-red-500
  • 600#B20E2C--arche-norway-red-600
  • 700#8F0B23--arche-norway-red-700
  • 800#69081A--arche-norway-red-800
  • 900#3F0510--arche-norway-red-900

Norway Blue

Nøktern's main color. No other mode uses it.

  • 50#E5EBF5--arche-norway-blue-50
  • 100#CCD7EA--arche-norway-blue-100
  • 200#9EB3D8--arche-norway-blue-200
  • 300#708EC5--arche-norway-blue-300
  • 400#3862AF--arche-norway-blue-400
  • 500#003698--arche-norway-blue-500
  • 600#002E82--arche-norway-blue-600
  • 700#002567--arche-norway-blue-700
  • 800#001B4C--arche-norway-blue-800
  • 900#00102D--arche-norway-blue-900

Sweden Blue

Omtanke's main color. No other mode uses it.

  • 50#E5EEF4--arche-sweden-blue-50
  • 100#CCDCE9--arche-sweden-blue-100
  • 200#9EBDD6--arche-sweden-blue-200
  • 300#709EC2--arche-sweden-blue-300
  • 400#3878AB--arche-sweden-blue-400
  • 500#005293--arche-sweden-blue-500
  • 600#00467D--arche-sweden-blue-600
  • 700#003763--arche-sweden-blue-700
  • 800#00294A--arche-sweden-blue-800
  • 900#00182C--arche-sweden-blue-900

Neutral

Text, surfaces and borders.

  • white#FFFFFF--arche-neutral-white
  • 50#F5F5F5--arche-neutral-50
  • 100#E5E5E5--arche-neutral-100
  • 200#CCCCCC--arche-neutral-200
  • 300#B3B3B3--arche-neutral-300
  • 400#999999--arche-neutral-400
  • 500#808080--arche-neutral-500
  • 600#666666--arche-neutral-600
  • 700#4D4D4D--arche-neutral-700
  • 800#333333--arche-neutral-800
  • 900#1A1A1A--arche-neutral-900
  • black#000000--arche-neutral-black
  • black-alpha-50#000000@50%--arche-black-alpha-50
  • black-alpha-90#000000@90%--arche-black-alpha-90

Alert

Errors and alerts only. The same in every mode.

  • 50#FFE6E6--arche-alert-50
  • 100#FFCCCC--arche-alert-100
  • 200#FF9E9E--arche-alert-200
  • 300#FF7070--arche-alert-300
  • 400#FF3838--arche-alert-400
  • 500#FF0000--arche-alert-500
  • 600#D90000--arche-alert-600
  • 700#AD0000--arche-alert-700
  • 800#800000--arche-alert-800
  • 900#4C0000--arche-alert-900

Success

Status only. The same in every mode.

  • 50#EAF6EC--arche-success-50
  • 100#D4EDDA--arche-success-100
  • 200#ADDEB8--arche-success-200
  • 300#87CE97--arche-success-300
  • 400#57BA6E--arche-success-400
  • 500#28A745--arche-success-500
  • 600#228E3B--arche-success-600
  • 700#1B722F--arche-success-700
  • 800#145422--arche-success-800
  • 900#0C3215--arche-success-900

Warning

Status only. The same in every mode.

  • 50#FFF3E6--arche-warning-50
  • 100#FFE7CC--arche-warning-100
  • 200#FFD19E--arche-warning-200
  • 300#FFBB70--arche-warning-300
  • 400#FFA038--arche-warning-400
  • 500#FF8500--arche-warning-500
  • 600#D97100--arche-warning-600
  • 700#AD5A00--arche-warning-700
  • 800#804200--arche-warning-800
  • 900#4C2800--arche-warning-900

Which color does which job

These are Canon's jobs. Proportions are about 60 percent neutral, 30 percent blue and 10 percent accent. Blue is the structural color. Yellow and red stay sparing and single-purpose. Other modes give the same roles different colors: see Color modes.

JobRole tokenLightDark
Page background --arche-surface-neutral-base neutral/white #FFFFFF neutral/900 #1A1A1A
Raised surface (form fields, image tiles) --arche-surface-neutral-raised neutral/white #FFFFFF neutral/800 #333333
Tinted section (stat strip, Problem, Outcome) --arche-surface-brand-primary-subtle greece/blue/50 #E6ECF3 greece/blue/700 #012E5C
Blue band --arche-surface-brand-primary greece/blue/500 #014488 greece/blue/500 #014488
Headings --arche-text-neutral-primary neutral/900 #1A1A1A neutral/white #FFFFFF
Body copy --arche-text-neutral-body neutral/900 #1A1A1A neutral/100 #E5E5E5
Captions and meta --arche-text-neutral-secondary neutral/600 #666666 neutral/300 #B3B3B3
Links and stat numbers --arche-text-brand-primary greece/blue/500 #014488 greece/blue/200 #9EB8D2
Text on blue --arche-text-on-brand-primary neutral/white #FFFFFF neutral/white #FFFFFF
Dividers --arche-border-neutral-default neutral/200 #CCCCCC neutral/700 #4D4D4D
Form bar at rest --arche-border-neutral-strong neutral/500 #808080 neutral/500 #808080
Error text --arche-text-system-alert system/alert/700 #AD0000 system/alert/300 #FF7070

Do

  • Use blue for structure, links, buttons and stat numbers.
  • Use yellow for identity: a name, the Credits band or the selection highlight.
  • Pair color with a second signal: weight, a label, an icon or a stroke.
  • Use Greece Blue plus neutrals in charts and diagrams.

Don't

  • Use Norway Red anywhere except the logo and Canon's end mark, one rule per page.
  • Use alert, success or warning colors decoratively. They mean status only.
  • Reach for a primitive such as --arche-greece-blue-500 inside a component.
  • Use yellow text on white. It fails contrast.

Contrast

WCAG AA needs 4.5:1 for text and 3:1 for large text and interface parts such as borders and focus rings. These ratios are calculated from the token values when the site builds, so they are never typed by hand.

PairNeedsLightDark
Headings on the page 4.5:1 17.40:1 Pass 17.40:1 Pass
Body copy on the page 4.5:1 17.40:1 Pass 13.82:1 Pass
Captions and meta on the page 4.5:1 5.74:1 Pass 8.30:1 Pass
Links and brand text on the page 4.5:1 9.62:1 Pass 8.49:1 Pass
Stat numbers on the brand tint 4.5:1 8.09:1 Pass 6.62:1 Pass
Captions on the brand tint 4.5:1 4.83:1 Pass 6.48:1 Pass
Error text on the page 4.5:1 7.56:1 Pass 6.47:1 Pass
Headings on the brand band 4.5:1 9.62:1 Pass 9.62:1 Pass
Body text on the brand band 4.5:1 8.09:1 Pass 8.09:1 Pass
Secondary text on the brand band 4.5:1 6.75:1 Pass 6.75:1 Pass
Text on the yellow band 4.5:1 11.59:1 Pass 11.59:1 Pass
Primary button label 4.5:1 9.62:1 Pass 9.05:1 Pass
Primary button label on the band 4.5:1 9.62:1 Pass 9.62:1 Pass
Selected text 4.5:1 11.59:1 Pass 11.59:1 Pass
Form field bar at rest (non-text) 3:1 3.95:1 Pass 4.41:1 Pass
Focus ring on the page (non-text) 3:1 21.00:1 Pass 17.40:1 Pass
Accent rule on the page (non-text) 3:1 5.43:1 Pass 4.20:1 Pass
Stat numerals on the page 3:1 9.62:1 Pass 8.49:1 Pass

One known limit: a black focus ring on the Blue 500 band is only 2.18:1, which fails. That is why on-blue surfaces use a separate white ring token, --arche-border-focus-ring-on-brand.

Dark mode

Role tokens have two values, Light and Dark, in each mode. Canon's Light sits on :root. Dark is written in two places: once for visitors who chose it with the theme toggle, and once for visitors whose browser is set to dark and who have not chosen. Every other mode adds the same pair of blocks, selected with data-mode.

:root[data-theme="dark"] {
  --arche-surface-neutral-base: var(--arche-neutral-900);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --arche-surface-neutral-base: var(--arche-neutral-900);
  }
}

Use the Dark button to try it on this page. It is in the header from 1024px up, and in the footer below that.

All role tokens

116 tokens in total. Each group opens to show its Canon Light and Dark values and the primitive it points at. A role that another mode changes says so on that mode's page.

Surface (16)
CSS nameLightDark
--arche-surface-neutral-base neutral/white neutral/900
--arche-surface-neutral-raised neutral/white neutral/800
--arche-surface-neutral-inverse neutral/900 neutral/50
--arche-surface-brand-primary greece/blue/500 greece/blue/500
--arche-surface-brand-primary-subtle greece/blue/50 greece/blue/700
--arche-surface-brand-secondary sweden/yellow/500 sweden/yellow/800
--arche-surface-brand-secondary-subtle sweden/yellow/50 sweden/yellow/900
--arche-surface-system-alert system/alert/50 system/alert/900
--arche-surface-system-success system/success/50 system/success/900
--arche-surface-system-warning system/warning/50 system/warning/900
--arche-surface-overlay-scrim neutral/black-alpha-50 neutral/black-alpha-50
--arche-surface-on-brand-switch-selected neutral/white neutral/white
--arche-surface-brand-secondary-band sweden/yellow/500 sweden/yellow/500
--arche-surface-overlay-scrim-strong neutral/black-alpha-90 neutral/black-alpha-90
--arche-surface-overlay-bar neutral/800 neutral/800
--arche-surface-brand-accent norway/red/500 norway/red/400
Border (12)
CSS nameLightDark
--arche-border-neutral-default neutral/200 neutral/700
--arche-border-neutral-strong neutral/500 neutral/500
--arche-border-neutral-emphasis neutral/800 neutral/100
--arche-border-brand-default greece/blue/500 greece/blue/400
--arche-border-system-alert system/alert/500 system/alert/400
--arche-border-system-success system/success/500 system/success/400
--arche-border-system-warning system/warning/500 system/warning/400
--arche-border-focus-ring neutral/black neutral/white
--arche-border-focus-ring-on-brand neutral/white neutral/white
--arche-border-on-brand-divider greece/blue/300 greece/blue/300
--arche-border-focus-ring-on-secondary neutral/900 neutral/900
--arche-border-on-brand-cross-line neutral/white neutral/white
Text (19)
CSS nameLightDark
--arche-text-neutral-primary neutral/900 neutral/white
--arche-text-neutral-secondary neutral/600 neutral/300
--arche-text-neutral-disabled neutral/400 neutral/400
--arche-text-neutral-inverse neutral/white neutral/900
--arche-text-brand-primary greece/blue/500 greece/blue/200
--arche-text-brand-secondary sweden/yellow/500 sweden/yellow/300
--arche-text-brand-tertiary-accent norway/red/500 norway/red/400
--arche-text-system-alert system/alert/700 system/alert/300
--arche-text-system-success system/success/700 system/success/300
--arche-text-system-warning system/warning/700 system/warning/300
--arche-text-neutral-body neutral/900 neutral/100
--arche-text-on-brand-primary neutral/white neutral/white
--arche-text-on-brand-body greece/blue/50 greece/blue/50
--arche-text-on-brand-secondary greece/blue/100 greece/blue/100
--arche-text-on-brand-name sweden/yellow/500 sweden/yellow/500
--arche-text-on-brand-switch-selected greece/blue/500 greece/blue/500
--arche-text-on-brand-title sweden/yellow/500 sweden/yellow/500
--arche-text-on-secondary-primary neutral/900 neutral/900
--arche-text-on-secondary-body neutral/800 neutral/800
Icon (8)
CSS nameLightDark
--arche-icon-neutral-default neutral/900 neutral/white
--arche-icon-neutral-muted neutral/400 neutral/600
--arche-icon-neutral-inverse neutral/white neutral/900
--arche-icon-brand-default greece/blue/500 greece/blue/300
--arche-icon-system-alert system/alert/500 system/alert/400
--arche-icon-system-success system/success/500 system/success/400
--arche-icon-system-warning system/warning/500 system/warning/400
--arche-icon-on-brand-default neutral/white neutral/white
Interactive (48)
CSS nameLightDark
--arche-interactive-button-primary-fill-default greece/blue/500 greece/blue/200
--arche-interactive-button-primary-fill-hover greece/blue/400 greece/blue/100
--arche-interactive-button-primary-fill-pressed greece/blue/700 greece/blue/300
--arche-interactive-button-primary-fill-disabled neutral/200 neutral/700
--arche-interactive-button-secondary-fill-default neutral/white neutral/900
--arche-interactive-button-secondary-fill-hover greece/blue/50 greece/blue/800
--arche-interactive-button-secondary-fill-pressed greece/blue/100 greece/blue/700
--arche-interactive-button-secondary-fill-disabled neutral/white neutral/900
--arche-interactive-button-secondary-border-default greece/blue/500 greece/blue/200
--arche-interactive-button-secondary-border-disabled neutral/400 neutral/600
--arche-interactive-button-secondary-border-inverse neutral/white neutral/900
--arche-interactive-link-text-nav-default neutral/900 neutral/white
--arche-interactive-link-text-nav-hover neutral/900 neutral/white
--arche-interactive-link-text-nav-pressed neutral/black neutral/100
--arche-interactive-link-text-nav-active neutral/900 neutral/white
--arche-interactive-link-text-nav-disabled neutral/300 neutral/700
--arche-interactive-button-primary-fill-active greece/blue/700 greece/blue/300
--arche-interactive-button-secondary-fill-active greece/blue/50 greece/blue/800
--arche-interactive-progress greece/blue/500 greece/blue/300
--arche-interactive-link-nav-indicator greece/blue/500 greece/blue/200
--arche-interactive-button-primary-label-default neutral/white greece/blue/900
--arche-interactive-button-primary-indicator neutral/white greece/blue/900
--arche-interactive-button-secondary-border-pressed greece/blue/700 greece/blue/100
--arche-interactive-button-secondary-label-default greece/blue/500 greece/blue/200
--arche-interactive-button-secondary-label-pressed greece/blue/700 greece/blue/100
--arche-interactive-button-secondary-indicator greece/blue/500 greece/blue/200
--arche-interactive-button-tertiary-fill-hover greece/blue/50 greece/blue/800
--arche-interactive-button-tertiary-fill-pressed greece/blue/100 greece/blue/700
--arche-interactive-button-tertiary-fill-active greece/blue/50 greece/blue/800
--arche-interactive-button-tertiary-label-default greece/blue/500 greece/blue/200
--arche-interactive-button-tertiary-label-hover greece/blue/600 greece/blue/100
--arche-interactive-button-tertiary-label-pressed greece/blue/700 greece/blue/50
--arche-interactive-button-tertiary-label-active greece/blue/500 greece/blue/200
--arche-interactive-button-tertiary-indicator greece/blue/500 greece/blue/200
--arche-interactive-button-secondary-on-brand-border neutral/white neutral/white
--arche-interactive-button-secondary-on-brand-label neutral/white neutral/white
--arche-interactive-button-secondary-on-brand-fill-pressed greece/blue/700 greece/blue/700
--arche-interactive-link-default greece/blue/500 greece/blue/200
--arche-interactive-button-primary-on-brand-fill neutral/white neutral/white
--arche-interactive-button-primary-on-brand-label greece/blue/500 greece/blue/500
--arche-interactive-button-secondary-on-brand-fill-hover greece/blue/400 greece/blue/400
--arche-interactive-button-primary-on-brand-fill-hover greece/blue/50 greece/blue/50
--arche-interactive-button-primary-on-brand-fill-pressed greece/blue/100 greece/blue/100
--arche-interactive-link-on-brand-default neutral/white neutral/white
--arche-interactive-link-on-brand-hover neutral/white neutral/white
--arche-interactive-link-on-brand-pressed greece/blue/50 greece/blue/50
--arche-interactive-link-on-brand-disabled greece/blue/100 greece/blue/100
--arche-interactive-button-primary-on-brand-indicator greece/blue/300 greece/blue/300
Logo (9)
CSS nameLightDark
--arche-logo-on-page-primary-box greece/blue/500 greece/blue/500
--arche-logo-on-page-primary-letters neutral/white neutral/white
--arche-logo-on-page-secondary-line greece/blue/500 greece/blue/200
--arche-logo-on-brand-primary-box neutral/white neutral/white
--arche-logo-on-brand-primary-letters greece/blue/500 greece/blue/500
--arche-logo-on-brand-secondary-line neutral/white neutral/white
--arche-logo-on-secondary-primary-box greece/blue/500 greece/blue/500
--arche-logo-on-secondary-primary-letters neutral/white neutral/white
--arche-logo-on-secondary-secondary-line greece/blue/500 greece/blue/500
Selection (2)
CSS nameLightDark
--arche-selection-background sweden/yellow/500 sweden/yellow/500
--arche-selection-text neutral/900 neutral/900
Accent (2)
CSS nameLightDark
--arche-accent-rule norway/red/500 norway/red/400
--arche-accent-numeral greece/blue/500 greece/blue/200

Up next

Type

Two typefaces, fifteen styles, and how they step across three breakpoints.