Color

Guide index · Surfaces · Interaction

All values are opaque sRGB hex colors. Use roles rather than choosing a nearby hue per component. The palette is dark and cool-neutral; avoid a teal cast on large surfaces.

Surfaces and boundaries

Planes carry background color; boundaries separate regions and controls. Decorative frames use the quieter line; operable edges use the essential boundary.

Terminal role tables list a Truecolor value and an ANSI 16-color fallback. Emit the hex value when 24-bit color is supported; otherwise use the ANSI role name. Hosts may remap ANSI names, and 256-color terminals map each role to the closest palette entry and recheck contrast.

Canvas · workspace background

Quiet frame

Decorative panel on content plane

Chrome · toolbar plane

Content · reading plane

Input · essential edge
revision: 8
RoleValueUse
surface.canvas#080B12App background and space between regions
surface.content#101722Base reading/card plane; flat terminal panel
surface.chrome#182131Base toolbar/header/footer plane
surface.input#0D131DFlat editable/code surface
line.quiet#2A3648Decorative frames and nonessential separators
line.essential#62748DInput edges, neutral control boundaries and resize affordances
scrollbar.thumb#62748DVisible draggable thumb on input-colored track
scrollbar.thumbHover#91A0B7Hovered/dragged thumb

The essential edge is the role for operable controls and any boundary that must stay visible on chrome and control fills. The quiet edge #2A3648 is the role for decorative frames where content structure is evident without it.

Text

Use primary text on all neutral and blue control faces. Use secondary text at full opacity; never dim the whole component to indicate disabled state. Cyan links are underlined in prose; blue is an edge color, not normal-size link text.

Primary reading text carries labels, body copy and enabled control labels.

Secondary metadata, hints and disabled labels stay at full opacity.

Cyan underlined link in prose

RoleValueUse
text.primary#E3EAF3Reading text, enabled control labels and essential icons
text.secondary#91A0B7Metadata, hints, placeholders and disabled labels

Action and focus

Cyan marks keyboard focus on borders. Sparse cyan structural accents are allowed away from borders, but blue remains an edge and marker color—not ordinary link or body text at default sizes.

Primary action

Run validation

Keyboard focus

Run validation

Selected tab with focus

Overview
RoleValueUse
focus#46DDEBKeyboard focus on borders; sparse structural accents only away from borders
action.edge#006EFFButton emphasis and selected-tab top marker

Selection

Violet identifies navigation and cyan identifies focus. Graphical selection uses a neutral surface and bold label; selected destinations keep the violet navigation role with a violet leading edge. Data rows add a persistent primary-text ▸ glyph in a reserved leading slot. Selection has no separate color and remains visible after focus moves.

Navigation keeps its violet role independently of selection. A selected-and-focused destination keeps its selection face while cyan identifies focus; data rows retain primary text and the ▸ glyph. The terminal uses the ▸ glyph for both navigation and rows.

Navigation selection

Activity

Selected and focused data row

▸ Record 042
RoleValueUse
navigation.accent#AD8AFFNavigation identity, independent of selection
row.selectionMarkertext.primary · ▸Persistent primary-text ▸ selection glyph

Status semantics

Running is neon green; success is subdued green. Distinguish them by brightness, explicit words and glyphs, including without color. Statuses exclude navigation violet and focus cyan.

Role pairForegroundSurfaceLabel and glyph
running.foreground / running.surface#A3FF12#1A290D↻ Running · 3 / 8
positive.foreground / positive.surface#70DEA2#14281F✓ Complete

Code areas use an independent syntax system that may reuse UI colors without inheriting interface meanings. Dimmer or patterned substitutes are not required; validation remains an explicit label.

Semantic labels use their named foreground on their matching semantic surface. Running uses neon green (#A3FF12 on #1A290D) with the ↻ glyph and an explicit “Running” label. Success uses subdued green (#70DEA2 on #14281F) with ✓ and an explicit “Complete” or “Succeeded” label. Brightness, labels, and glyphs distinguish active work from confirmed success; neither status uses navigation violet or focus cyan. In limited terminal palettes, retain the distinct glyphs and words even when both map to green. Body explanations remain primary text. Neutral badges use secondary text, content fill and an essential outline when needed to recognize the badge.

✓ Ready
Inputs verified; ready to submit.
Accepted Outcome pending
Request received; final output unconfirmed.
↻ Running · 3 / 8
Observed progress with explicit label.
× Failed
Validation failed; review the input.
RoleValueUse
positive.foreground#70DEA2Confirmed positive status
positive.surface#14281FPositive chip/notice face
warning.foreground#E8B568Needs review, conflict, pending or uncertain
warning.surface#2C2419Warning chip/notice face
danger.foreground#FFC5D0Error, invalid input and destructive action emphasis
danger.surface#351F26Error/destructive face
EvidenceTreatment
Ready, verified valid, confirmed completeSubdued-green positive pair, ✓ glyph and exact status label
Accepted while final outcome is unknownNeutral “Accepted” plus amber “Outcome pending”
Running with observed progressNeon-green running pair, ↻ glyph and “Running”
Queued, needs review, revision conflict, stale warningAmber and explicit explanation
Failed or invalidDanger foreground and actionable text
Unknown, missing or unavailableNeutral text; use warning only if user attention is required
Category, planner role or selected destinationViolet, never interpreted as success

Do not color every timestamp or identifier by status. Color the status indicator and label. A workflow's completed node may have a green check alongside a violet category stripe; each cue has one meaning.

Contrast envelope

Ratios are WCAG relative-luminance contrast for opaque sRGB fills, rounded to two decimals.

PairRatio
Primary text on brightest chrome stop #1C273812.41:1
Secondary text on #1C27385.67:1
Essential edge on #1C27383.15:1
Essential edge on brightest control-hover stop #10294A3.06:1
Blue action edge on control stop #0D25453.42:1
Blue action edge on #1C27383.35:1
Cyan focus on #0D25459.36:1
Violet navigation label on neutral selection stop #2934474.69:1

Blue #006EFF does not meet 4.5:1 for ordinary text on these surfaces. Use pale labels and blue edges; terminal primary labels stay pale and secondary actions use the essential edge color. Contrast acceptance covers every gradient stop and actual adjacent surface, not merely the average fill. See accessibility.

Theme policy

This chapter defines the default dark theme. High-contrast modes preserve role distinctions and may remove gradients and decorative borders. Honor user/system forced colors in graphical apps. Terminal colors may be remapped by the host; always retain text and markers.

A light theme is not yet specified. It must define complete surface, foreground, control, and status pairs and pass the same checks; it is not produced by inverting these hex values.

Primary label · Focused label focus cue · Ready status word

When color is remapped or unavailable, retain readable text and explicit markers.

RoleValueUse
text.primary#E3EAF3Readable body and labels
focus#46DDEBKeyboard focus and pane outline
action.edge#006EFFAction/tab emphasis marker
navigation.accent#AD8AFFNavigation identity
positive.foreground#70DEA2Confirmed positive
warning.foreground#E8B568Needs attention
danger.foreground#FFC5D0Error and destructive emphasis