Skip to content
ArcadiaDesign
Lookout

Surfaces

Every neutral is one slate hue.

BezelThe sidebar: a step below the page
NightThe page: panes and wells
PaperCode windows and stream cards
RaisedWhat you touch: a composer, a bubble
FloatingMenus, popovers and dialogs
Ink at 8%A secondary button, the current row
UmbraThe darkest structural step

By day the base is mist, cards are paper and controls are white. By night each step is lighter than the last. Adjacent steps sit at least 0.03 apart in OKLCH lightness at night and 0.02 by day, so the ladder reads at a glance. Only floating surfaces cast shadows. See Elevation.

The beacon

One light, an orange from the sunset family, deeper by day so it holds on paper. It marks only things that are literally lights, so when something is lit, something happened.

Plan the dialog4m
Needs you: a steady halo
Fix the flaky test
The caret, in every field
Keep the request
Selection, a sodium wash
Reply to continue
Night
Reply to continue
Day
A product's live signal, holding the same tapered stroke inside its frame in both themes. By day it has no bloom or glow.

Never the beacon

  • Links. They are ink (--text-link is text-1) with a quiet underline, like this one.
  • File paths, which stay in the neutral ranks.
  • Keyboard focus. The ring is neutral ink.
  • Controls and surfaces. The beacon never fills a button or washes a panel; the primary button is ink.
  • The running glyph. The pine sweep is neutral; the light belongs to the product's live signal.
  • Warnings, which are a signal yellow, so a warning never reads as new.

Contrast

Every ink on every surface, measured live from the shipped CSS with WCAG 2.

--text-4 has no minimum. It is for disabled labels and decoration only, never for anything someone reads, and it sits near 3:1 on every surface. Placeholders, key hints and meta are --text-3, which clears 5:1.

Ink ladders

Each theme has one --ink, and every neutral is that ink at an alpha, so a ladder reads the same on every surface.

Text

Aa100%
Aa
Aa
Aa

Icon

Glyphs sit one step quieter than text of the same rank.

100%

Fill

Hover, pressed, selected and track fills. One formula in both themes.

18%
14%
12%
8%
5%
3%

Stroke

Hairlines: 7% frames a card or a window bar, 10% an outline tag, 15% an outline button. Structural dividers use the umbra line, --stroke-edge.

20%
15%
10%
7%
4%

Ranks per theme

Text and icon alphas are per-theme rank tokens, so day is calibrated for AA on its own rather than copied from night.

RankNightDay

Hues and intents

Hues fill dots, icons and washes. Their text forms clear 4.5:1 on every surface; the ratio here is measured on the page.

HueTextUseContrast
The beacon, the one light. Its text form is for the accent Badge and Chip only.
Plan: breeze, a quiet distance blue.
Success and Ask.
Warning: signal yellow, kept well apart from the beacon's orange.
Danger, errors and Debug.
Information: the info toast.

Washes, modes and status

Intent and mode washes are Badge and Chip tones; status is a 6px dot in a row's leading slot, or the pine sweep while something runs.

NewPassedDeprecatedFailedPlanAskDebug
Washes are the hue at 10 to 12% under its text form.
Wire the tray stack
Choose a migration path
Build failed
Finished while you were away
Draft: onboarding copy
Running, needs you, error, unread and idle.

Charts

Series colour follows the entity, never its rank: each provider keeps one slot on every chart, so hiding a series or changing the range never repaints the rest.

SlotHue
Blue
Green
Violet
Amber
Rose
Leaf
Every series past six, in the icon ink

Diff and syntax

Code sits in a window on --bg-card.

−   return `${m}m ago`;+   return `${m}m`;export function relTime(at: number) {  if (elapsed < 30_000) return "Just now"; // under 30s}
SyntaxSample
export function
relTime
at
number
"Just now"
30_000
// under 30s
( ) { } ;
docs/motion.md
elapsed
DiffSample
+ return
+ return
+ return
− return
− return
− return

Selection and focus

Selection is lit by the lamp: a 36% wash of the beacon under the text's own ink (--selection, --selection-ink).

Keep the active request intact.
Text selection, ink over the wash
2px of ink, 2px outside a control

With increased contrast the ring goes to full strength, text-3 takes text-2's alpha, text-4 rises to 60%, frames and hairlines step up, glass chrome turns opaque, and the live signal's bloom and glow go out.