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.
Input edges, neutral control boundaries and resize affordances
scrollbar.thumb
#62748D
Visible draggable thumb on input-colored track
scrollbar.thumbHover
#91A0B7
Hovered/dragged thumb
Role
Value
Use
surface.canvas
#080B12
App background and space between regions
surface.content
#101722
Base reading/card plane; flat terminal panel
surface.chrome
#182131
Base toolbar/header/footer plane
surface.input
#0D131D
Flat editable/code surface
line.quiet
#2A3648
Decorative frames and nonessential separators
line.essential
#62748D
Input edges, neutral control boundaries and resize affordances
scrollbar.thumb
#62748D
Visible draggable thumb on input-colored track
scrollbar.thumbHover
#91A0B7
Hovered/dragged thumb
Role
Truecolor
ANSI 16-color fallback
Use
surface.canvas
#080B12
black
Full-screen canvas background
surface.content
#101722
black
Panel/card background
surface.chrome
#182131
black
Header/hint/status chrome background
surface.input
#0D131D
black
Editing region background
line.quiet
#2A3648
bright black
Decorative frame glyphs
line.essential
#62748D
white
Operable pane and control outlines
scrollbar.thumb
—
—
No terminal palette entry; graphical scrollbar only
scrollbar.thumbHover
—
—
No terminal palette entry; graphical scrollbar only
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.
Primary text Validation run · Job 042
Secondary text Last checked 2m ago · hint line
Link See accessibility chapter (underlined in GUI)
Role
Value
Use
text.primary
#E3EAF3
Reading text, enabled control labels and essential icons
text.secondary
#91A0B7
Metadata, hints, placeholders and disabled labels
Role
Value
Use
text.primary
#E3EAF3
Reading text, enabled control labels and essential icons
text.secondary
#91A0B7
Metadata, hints, placeholders and disabled labels
Role
Truecolor
ANSI 16-color fallback
Use
text.primary
#E3EAF3
white
Default reading and enabled labels
text.secondary
#91A0B7
bright black
Metadata and hints; not dimmed for disabled state
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
Primary action
Run validation
Keyboard focus
Run validation
Selected tab with focus
Overview
Action Run validation
Focus Run validation
Tab Overview
Role
Value
Use
focus
#46DDEB
Keyboard focus on borders; sparse structural accents only away from borders
action.edge
#006EFF
Button emphasis and selected-tab top marker
Role
Value
Use
focus
#46DDEB
Keyboard focus on borders; sparse structural accents only away from borders
action.edge
#006EFF
Button emphasis and selected-tab top marker
Role
Truecolor
ANSI 16-color fallback
Use
focus
#46DDEB
cyan
Focused control labels; running has its own green pair
action.edge
#006EFF
blue
Graphical action role; terminal primary labels stay pale and secondary actions use line.essential
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.
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 pair
Foreground
Surface
Label 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.
Error, invalid input and destructive action emphasis
danger.surface
#351F26
Error/destructive face
Role
Value
Use
positive.foreground
#70DEA2
Confirmed positive status
positive.surface
#14281F
Positive chip/notice face
warning.foreground
#E8B568
Needs review, conflict, pending or uncertain
warning.surface
#2C2419
Warning chip/notice face
danger.foreground
#FFC5D0
Error, invalid input and destructive action emphasis
danger.surface
#351F26
Error/destructive face
Role
Truecolor
ANSI 16-color fallback
Use
positive.foreground
#70DEA2
green
Ready and verified complete labels
positive.surface
#101722
black
Chip face inherits containing plane in terminal
warning.foreground
#E8B568
yellow
Needs review, stale and pending labels
warning.surface
#101722
black
Chip face inherits containing plane in terminal
danger.foreground
#FFC5D0
red
Failed and invalid labels
danger.surface
#101722
black
Chip face inherits containing plane in terminal
Evidence
Treatment
Ready, verified valid, confirmed complete
Subdued-green positive pair, ✓ glyph and exact status label
Accepted while final outcome is unknown
Neutral “Accepted” plus amber “Outcome pending”
Running with observed progress
Neon-green running pair, ↻ glyph and “Running”
Queued, needs review, revision conflict, stale warning
Amber and explicit explanation
Failed or invalid
Danger foreground and actionable text
Unknown, missing or unavailable
Neutral text; use warning only if user attention is required
Category, planner role or selected destination
Violet, 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.
Pair
Ratio
Primary text on brightest chrome stop #1C2738
12.41:1
Secondary text on #1C2738
5.67:1
Essential edge on #1C2738
3.15:1
Essential edge on brightest control-hover stop #10294A
3.06:1
Blue action edge on control stop #0D2545
3.42:1
Blue action edge on #1C2738
3.35:1
Cyan focus on #0D2545
9.36:1
Violet navigation label on neutral selection stop #293447
4.69:1
Pair
Ratio
Primary text on brightest chrome stop #1C2738
12.41:1
Secondary text on #1C2738
5.67:1
Essential edge on #1C2738
3.15:1
Essential edge on brightest control-hover stop #10294A
3.06:1
Blue action edge on control stop #0D2545
3.42:1
Blue action edge on #1C2738
3.35:1
Cyan focus on #0D2545
9.36:1
Violet navigation label on neutral selection stop #293447
4.69:1
Pair
Truecolor
ANSI 16-color fallback
Ratio
Primary text on brightest chrome stop #1C2738
#E3EAF3 on #1C2738
white on black
12.41:1
Secondary text on #1C2738
#91A0B7 on #1C2738
bright black on black
5.67:1
Essential edge on #1C2738
#62748D on #1C2738
white on black
3.15:1
Essential edge on brightest control-hover stop #10294A
#62748D on #10294A
white on black
3.06:1
Blue action edge on control stop #0D2545
#006EFF on #0D2545
blue on black
3.42:1
Blue action edge on #1C2738
#006EFF on #1C2738
blue on black
3.35:1
Cyan focus on #0D2545
#46DDEB on #0D2545
cyan on black
9.36:1
Violet navigation label on neutral selection stop #293447
#AD8AFF on #293447
magenta on black
4.69:1
Each row is a contrast pair for opaque fills; the Truecolor column gives the hex pair and ANSI names are the 16-color fallback.
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.
Primary label · Focused label focus cue · Ready status word
When color is remapped or unavailable, retain readable text and explicit markers.
Primary label
▸ persistent selection · Focused labelReady explicit status word