Color

Cloaked's palette is a high-contrast black-and-white system with a single Firey orange that does almost all the "do something" work, plus six tint families kept in reserve for accents, avatars, and semantic state.

Foundation

Neutral ramp

21 steps from pure white to pure black. Backgrounds, surfaces, borders, and text all come from here — the entire product can be built with just neutrals and Firey.

050100150 200250300350 400450500550 600650700750 8008509009501000
Rule of thumb. Text on white uses 900 or 1000. Body text uses 850. Captions and metadata use 650. Borders use 100.
Foundation

Color families

Each family has a base and a few tints. Names come straight from the Figma source of truth — rename a primitive, not a semantic token.

Firey
Primary CTA · destructive urgency · key moments only
--firey-100
--firey-300
--firey-500
--firey-700
Iris
Informational accents · links · focus rings
--brand-100
--brand-200
--brand-300
--brand-400
Lavender
Personal-data moments · avatars · non-alert highlights
--lavender-100
--lavender-200
--lavender-deep
Sky
Data visualization · secondary info · links in long text
--azure-100
--azure-500
--azure-400
Success
“Protected” · resolved state · confirmations
--success-100
--success-400
--success-500
Danger
Exposed data · destructive confirmation · errors
--danger-100
--danger-400
--danger-600
Warning
In-progress · monitored · attention without urgency
--warning-100
--warning-400
--warning-500
Semantic

Role tokens

Use these in components — they remap cleanly to dark mode and never need to be renamed. Click any hex to copy.

Surfaces

bg / canvas
#FFFFFF
bg / cream
#F3F0E6
bg / subtle
#F7F7F7
bg / muted
#F2F2F2
bg / inverse
#000000

Foreground

fg / default
#000000
fg / strong
#1A1A1A
fg / muted
#262626
fg / subtle
#595959
fg / placeholder
#A6A6A6

Borders

border / subtle
#F2F2F2
border / default
#E5E5E5
border / strong
#CCCCCC
border / focus
#5A76FF

State

state / success
#009933
state / danger
#EC4545
state / warning
#F27F0D
state / info
#2DA9FF
Semantic

Light ↔ Dark

Every role token has a dark-mode counterpart. The token name never changes — --fg-default gives you black on light and white on dark. Use the toggle in the sidebar footer to flip the whole site; every component remaps automatically.

Light default
--bg-canvas #FFFFFF
--bg-subtle #F7F7F7
--bg-muted #F2F2F2
--fg-default #000000
--fg-muted #262626
--fg-subtle #595959
--fg-link #5A76FF
--border-default #E5E5E5
--border-strong #CCCCCC
--accent-primary #FF550C
--state-success #009933
--state-danger #EC4545
--state-info #2DA9FF
Dark data-theme="dark"
--bg-canvas #000000
--bg-subtle #1A1A1A
--bg-muted #262626
--fg-default #FFFFFF
--fg-muted #E5E5E5
--fg-subtle #A6A6A6
--fg-link #8196FF
--border-default #333333
--border-strong #4C4C4C
--accent-primary #FF550C
--state-success #31AD5A
--state-danger #F36669
--state-info #30A2F2
Application

Approved pairings

Combinations we sign off on. If a screen feels wrong, it's almost always because the pairing isn't here.

Canvas on Ink#FFFFFF × #000000
Cream on Ink#F3F0E6 × #000000
Ink on Canvas#000000 × #FFFFFF
Firey on Canvas#FF550C × #FFFFFF
Iris on Canvas#5A76FF × #FFFFFF
Firey on Cream#FF550C × #F3F0E6
Guidance

Do & don't

Do

Use Firey for one action per screen — the thing we actually want the person to do.

Don't

Don't compete Firey with itself. Two primary CTAs means neither is primary.

Dev

Import the tokens

/* One stylesheet, everywhere. */
@import "cloaked/colors_and_type.css";

/* Use semantic tokens, not primitives. */
.card {
  background: var(--bg-canvas);
  color:      var(--fg-strong);
  border:     1px solid var(--border-default);
}
.card .cta {
  background: var(--accent-primary);
  color:      var(--accent-primary-fg);
}