ORBA

Foundations

Colour

A refined balance of deep, calming tones with one soft, warm accent. Primitives paint; semantic roles decide where the paint goes.

Primary colours

0B0F14

11 · 15 · 20

night-950

1A2A33

26 · 42 · 51

night-800

4C6B73

76 · 107 · 115

night-500

A7C6D1

167 · 198 · 209

night-200

FF8D9B

255 · 141 · 155

coral-500

B45B67

180 · 91 · 103

coral-700

Night ramp

950

900

850

800

700

600

500

400

300

200

100

50

The cool foundation ramp. 950 is the canvas; 200 is secondary text; steps between build surfaces and borders.

Coral ramp — the one warm signal

300

400

500

600

700

500 is the canonical accent. 400 hovers, 700 presses.

Danger — deliberately not the accent

danger-400 · #F87171

Please enter a valid email address.

F87171 marks genuine errors only. Coral invites; danger warns.

Gradients

neutral

135deg

The night sweep — deep canvas rising to ice. Ambient backgrounds, quiet data fills.

accent

135deg

The warm sweep — coral into deep rose. Hero moments, active progress, the one warm signal at full strength.

scrim

0deg

Media scrim — void rising over imagery so text stays readable (from the reference cards).

The two brand sweeps from the palette sheet, plus the media scrim. Use sparingly — a gradient is a moment, not a default.

White alphas — hairlines & glass fills

white-3

white-5

white-8

white-10

white-12

Borders and quiet fills are translucent white, so they adapt to whatever sits beneath the glass.

Usage ratio

40%

20%

15%

10%

8%

7%

Primary colours are the foundation; accents exist for highlights, calls-to-action and key interactions.

Semantic roles — what components actually use
RoleCSS variableSourceSample
bg / base--color-bgcolour.night.950
surface / sunken--color-surface-sunkencolour.alpha.white-3
text / primary--color-fgcolour.white
text / secondary--color-fg-secondarycolour.night.200
text / muted--color-fg-mutedcolour.night.400
text / disabled--color-fg-disabledcolour.night.600
text / on-accent--color-fg-on-accentcolour.night.950
border / subtle--color-border-subtlecolour.alpha.white-5
border / default--color-border-defaultcolour.alpha.white-10
border / strong--color-border-strongcolour.alpha.white-12
accent / default--color-accentcolour.coral.500
accent / hover--color-accent-hovercolour.coral.400
accent / pressed--color-accent-pressedcolour.coral.700
accent / subtle--color-accent-subtle#FF8D9B1A
status / error--color-dangercolour.danger.400
focus / ring--color-ringcolour.coral.300

Components never reference primitives. A future light theme only re-points this table.

Contrast — checked, not hoped
PairSampleRatioResult
Primary text on canvasAa 25:0017.92:1Pass ≥4.5
Secondary text on canvasAa 25:0010.65:1Pass ≥4.5
Muted text on canvasAa 25:005.04:1Pass ≥3
Accent (large text / UI) on canvasAa 25:008.73:1Pass ≥3
Text on accentAa 25:008.73:1Pass ≥4.5
Error text on canvasAa 25:006.95:1Pass ≥4.5

Ratios computed from the token values at build time. AA body = 4.5:1 · AA large text / UI = 3:1.