Tokens

Colour

Two axes that never meet on one element, read live from the stylesheet your browser is running.

Category says what kind of measurement this is: a heart rate, a blood sugar, a night’s sleep. It is low-chroma and it never means anything is wrong. Status says how urgent this is, on four levels, and it is high-chroma because somebody has to act on it. An element takes its colour from one of them, never both.

Every swatch below is a CSS custom property read from your browser, so it is the value in effect on this screen. Dark mode, Display-P3 and your accessibility settings are already applied.

Where the numbers are


Copy format

Status: how urgent it is

Four levels, from steady to urgent. Bright colours, so they still read on a cheap screen in a bright room. Colour is never the only clue: a status always comes with a word, and an icon if there is room for one.

  • Steady · surface--opsin-status-steady-surfaceThe background of the thing carrying the verdict.
  • Steady · line--opsin-status-steady-lineBorders, indicators, chart marks, the dot in a pill.
  • Steady · ink--opsin-status-steady-inkText and icons drawn on the matching surface.
  • Watch · surface--opsin-status-watch-surfaceThe background of the thing carrying the verdict.
  • Watch · line--opsin-status-watch-lineBorders, indicators, chart marks, the dot in a pill.
  • Watch · ink--opsin-status-watch-inkText and icons drawn on the matching surface.
  • Needs attention · surface--opsin-status-attention-surfaceThe background of the thing carrying the verdict.
  • Needs attention · line--opsin-status-attention-lineBorders, indicators, chart marks, the dot in a pill.
  • Needs attention · ink--opsin-status-attention-inkText and icons drawn on the matching surface.
  • Urgent · surface--opsin-status-urgent-surfaceThe background of the thing carrying the verdict.
  • Urgent · line--opsin-status-urgent-lineBorders, indicators, chart marks, the dot in a pill.
  • Urgent · ink--opsin-status-urgent-inkText and icons drawn on the matching surface.

Category: what is being measured

Heart, glucose, sleep, and the rest. These colours are dull on purpose. A category colour bright enough to look like an alert tells the reader something is wrong when nothing is, and that is the one mistake this colour system exists to stop.

  • Sleep · accent--opsin-category-sleep-accentChart lines, glyphs, section identity. Never a verdict.
  • Sleep · surface--opsin-category-sleep-surfaceA quiet tinted background for a section of one category.
  • Sleep · ink--opsin-category-sleep-inkText drawn on the matching category surface.
  • Heart · accent--opsin-category-heart-accentChart lines, glyphs, section identity. Never a verdict.
  • Heart · surface--opsin-category-heart-surfaceA quiet tinted background for a section of one category.
  • Heart · ink--opsin-category-heart-inkText drawn on the matching category surface.
  • Activity · accent--opsin-category-activity-accentChart lines, glyphs, section identity. Never a verdict.
  • Activity · surface--opsin-category-activity-surfaceA quiet tinted background for a section of one category.
  • Activity · ink--opsin-category-activity-inkText drawn on the matching category surface.
  • Nutrition · accent--opsin-category-nutrition-accentChart lines, glyphs, section identity. Never a verdict.
  • Nutrition · surface--opsin-category-nutrition-surfaceA quiet tinted background for a section of one category.
  • Nutrition · ink--opsin-category-nutrition-inkText drawn on the matching category surface.
  • Mind · accent--opsin-category-mind-accentChart lines, glyphs, section identity. Never a verdict.
  • Mind · surface--opsin-category-mind-surfaceA quiet tinted background for a section of one category.
  • Mind · ink--opsin-category-mind-inkText drawn on the matching category surface.
  • Labs · accent--opsin-category-labs-accentChart lines, glyphs, section identity. Never a verdict.
  • Labs · surface--opsin-category-labs-surfaceA quiet tinted background for a section of one category.
  • Labs · ink--opsin-category-labs-inkText drawn on the matching category surface.

Using these values

Copy the var() form wherever you can. It follows the theme, the gamut and the accessibility media queries. A hex value pasted into a component follows none of them, and that is the usual way a themed system stops being themed.

Every token here also has a Tailwind utility, such as bg-status-urgent-surface. Tailwind v4 and the order that silently breaks explains how they are wired.