Skip to content

Color

The Rigel palette is the complete Night Owl set. It dresses the whole product UI and drives the Compass editor theme, not just the brand surfaces. No new colors, ever. Contrast ratios are computed WCAG 2.x on this exact hex set. Every hex below matches the authoritative in-repo token file (apps/ui/src/design/tokens.css), which Compass consumes read-only. For type, see type.md; for how the palette lands per surface, see surfaces.md; for the state vocabulary, see state-icons.md.

The dark scaffolding of the night sky.

swatchhexrolecontrast
navy#011627background — the night skyfog on it 13.54:1 AAA
raised#0b2942raised surface (cards, dock, pills)fog on it 11.00:1 AAA
panel#0e2a45panel / border / insetfog on it 10.80:1 AAA
selection#1d3b53selection / highlightfog on it 8.60:1 AAA

Primary through disabled text, all measured against navy.

swatchhexrolecontrast
fog#d6deebprimary text; the mono-native mark color13.54:1 AAA
bright#c5e4fdemphasis / active text13.87:1 AAA
muted#5f7e97secondary text, chrome4.29:1 AA-large
haze#89a4bbtertiary labels7.06:1 AAA
faint#637777comments, disabled3.87:1 AA-large

The Night Owl canonical set that dresses the Compass editor. These are UI colors, not brand colors, and are never used as brand color on marketing surfaces.

swatchhexrolecontrast
blue#82aafffunctions · links · interaction7.98:1 AAA
cyan#7fdbcasupport · operators11.25:1 AAA
magenta#c792eakeywords · tags7.62:1 AAA
green#22da6ediff-add · success9.88:1 AAA
string#ecc48dstrings11.22:1 AAA
coral#f78c6cnumbers · params7.79:1 AAA
red#ef5350errors · diff-del5.26:1 AA
yellow#addb67attributes · warnings (same hex as the working-state green, distinct role)11.44:1 AAA

The sole accent tier.

swatchhexrolecontrast
purple#a66ef5THE brand accent — the mark’s R only5.39:1 AA
phosphor#b57efflit state only (loading / active pulse)6.45:1 AA

Purple is the sole brand accent, and it appears in exactly one place per surface: the mark (the icon’s R, or the wordmark’s leading R). Never body text, never buttons, never charts, never borders. If a layout seems to need more purple, the layout is wrong. Purple is reserved for the brand mark/icon, the streaming phosphor accent, and the spinner (the one sanctioned purple loader, the brand-mark-in-motion moment); everything else loading is non-purple. Phosphor (#b57eff) is a state, not a color choice: the star’s heart cell pulsing during loading/active. Never a static fill, never text.

The focus ring is blue (--rigel-blue #82aaff, the interaction color), not purple. This keeps the one-accent rule literally true: the only purple on a surface stays inside the mark, and interaction affordances live on the blue flow color instead (apps/ui/src/design/tokens.css: --cx-focus-ring: 2px solid var(--rigel-blue)).

Loading (bar / skeleton / pulse) uses fill blue #82aaff, bright head fog #d6deeb, and empty #0a2036.

  • working = green #addb67, everywhere: the state dot, and, when it animates, the “agent working” pulse breathes in green (the pulse cadence in the working-state color, not the purple phosphor accent of the motion system). Never purple, never blue-generic, for the working state specifically.
  • done = teal / cyan #7fdbca.
  • waiting / disconnected = amber #ecc48d.
  • error = red #ef5350.
  • idle / paused / stopped = slate / muted.

Note the two greens are distinct roles and must not be swapped: #addb67 is the working-state green; #22da6e is the syntax-tier green (diff-add / success). No gradients anywhere, flat fills only. Light mode / print is a polarity inversion (navy mark on fog), not a redesign.

Requirement: purple appears in exactly one place per surface

Section titled “Requirement: purple appears in exactly one place per surface”

Purple (#a66ef5) SHALL appear in exactly one place per surface, inside the mark (icon R or wordmark leading R), and SHALL NOT be used for body text, buttons, links, borders, charts, or chrome. Phosphor (#b57eff) SHALL be used only for a lit/active state (loading or active pulse), never as a static fill or text.

  • Given any brand or product surface
  • When its colors are assigned
  • Then at most one purple accent is present, and it sits inside the mark; no purple appears on body, buttons, links, borders, or chrome.
  • Given a control or row entering the working state
  • When its state color is chosen
  • Then it uses green #addb67 (not purple, not generic blue), because working is a state, not generic loading.

Requirement: no gradients and no off-palette colors

Section titled “Requirement: no gradients and no off-palette colors”

Surfaces SHALL use flat fills only, no gradients on the mark or anywhere else, and SHALL NOT introduce colors outside the Night Owl set, including “close” purples.

  • Given any fill, accent, or state color on a Rigel surface
  • When it is specified
  • Then it is a flat fill drawn from the Night Owl set, with no gradient and no near-palette substitute.