Skip to content

Colors

The Naluma palette is warm, low-saturation, and grounded in the “dusk” aesthetic described in the Visual Identity Direction. No clinical blues, no meditation teals — warm neutrals and earth tones that feel settled rather than demanding.

Token source: tokens/primitive/color.json, tokens/semantic/color-light.json, tokens/semantic/color-dark.json


These are the raw color values. They are never used directly in components — semantic tokens reference them.

#FBFAF1 primitive.color.warm-white Primary light background
#F9DFAE primitive.color.pale-wheat Secondary background
#F2C087 primitive.color.warm-gold Borders, dividers, accent highlights
#F29567 primitive.color.warm-peach Warm mid-tone accent
#E09370 primitive.color.muted-copper Waveform elements
#D17456 primitive.color.burnt-sienna Section labels
#D6643E primitive.color.deep-terracotta Strong warm accent
#863B3D primitive.color.dark-burgundy Secondary button text
#A55838 primitive.color.burnt-sienna-deep Primary action button
#914D31 primitive.color.burnt-sienna-deep-hover Primary action hover
#80442B primitive.color.burnt-sienna-deep-active Primary action active
#B5603E primitive.color.burnt-sienna-hover Burnt sienna hover
#6E3032 primitive.color.dark-burgundy-hover Dark burgundy hover
#98D398 primitive.color.soft-sage Success, positive indicators
#7FBF7F primitive.color.soft-sage-hover Success hover
#FFFFFF primitive.color.white Pure white
#2A2220 primitive.color.warm-charcoal Dark mode primary background
#352C29 primitive.color.dark-surface Dark mode surface elevation
#3D2E2A primitive.color.warm-dark Primary text (light mode)
#7A6560 primitive.color.muted-brown Secondary text
#B09A90 primitive.color.dim-brown Tertiary text, placeholders

Semantic tokens map primitives to functional roles. Components reference these, not the primitives directly.

RoleTokenResolves toHex
Main backgroundsemantic.color.surface.primaryprimitive.color.warm-white#FBFAF1
Header / accent areassemantic.color.surface.secondaryprimitive.color.pale-wheat#F9DFAE
Card backgroundsemantic.color.surface.cardprimitive.color.white#FFFFFF
Warm highlight areassemantic.color.surface.warmprimitive.color.pale-wheat#F9DFAE
RoleTokenResolves toHex
Primary body textsemantic.color.text.primaryprimitive.color.warm-dark#3D2E2A
Secondary text, captionssemantic.color.text.secondaryprimitive.color.muted-brown#7A6560
Tertiary text, placeholderssemantic.color.text.mutedprimitive.color.dim-brown#B09A90
Text on dark backgroundssemantic.color.text.inverseprimitive.color.warm-white#FBFAF1
RoleTokenResolves toHex
Primary button backgroundsemantic.color.action.primaryprimitive.color.burnt-sienna-deep#A55838
Primary button hoversemantic.color.action.primary-hoverprimitive.color.burnt-sienna-deep-hover#914D31
Primary button pressedsemantic.color.action.primary-activeprimitive.color.burnt-sienna-deep-active#80442B
Secondary button border/textsemantic.color.action.secondaryprimitive.color.dark-burgundy#863B3D
Secondary button hoversemantic.color.action.secondary-hoverprimitive.color.dark-burgundy-hover#6E3032
RoleTokenResolves toHex
Borders, dividerssemantic.color.accent.warmprimitive.color.warm-gold#F2C087
Waveform elementssemantic.color.accent.copperprimitive.color.muted-copper#E09370
Section labelssemantic.color.accent.siennaprimitive.color.burnt-sienna#D17456
RoleTokenHex
Successsemantic.color.feedback.success#98D398
Success hoversemantic.color.feedback.success-hover#7FBF7F
Warningsemantic.color.feedback.warning#D97706
Errorsemantic.color.feedback.error#DC2626
Infosemantic.color.feedback.info#0284C7
RoleTokenResolves toHex
Default borderssemantic.color.border.defaultprimitive.color.warm-gold#F2C087
Emphasized borderssemantic.color.border.strongprimitive.color.muted-copper#E09370
Subtle dividerssemantic.color.border.subtleprimitive.color.pale-wheat#F9DFAE
RoleTokenResolves toHex
Focus ringsemantic.color.focus.ringprimitive.color.burnt-sienna-deep#A55838

Dark mode uses the same warm undertone. The transition from light to dark should feel like dimming a warm lamp, not switching to a different app.

RoleTokenResolves toHex
Main backgroundsemantic.color-dark.surface.primaryprimitive.color.warm-charcoal#2A2220
Elevated surfacesemantic.color-dark.surface.secondaryprimitive.color.dark-surface#352C29
Card backgroundsemantic.color-dark.surface.cardprimitive.color.dark-surface#352C29
Warm accent areasemantic.color-dark.surface.warmprimitive.color.warm-dark#3D2E2A
RoleTokenResolves toHex
Primary textsemantic.color-dark.text.primaryprimitive.color.warm-white#FBFAF1
Secondary textsemantic.color-dark.text.secondaryprimitive.color.dim-brown#B09A90
Muted textsemantic.color-dark.text.mutedprimitive.color.muted-brown#7A6560
Inverse textsemantic.color-dark.text.inverseprimitive.color.warm-dark#3D2E2A
RoleTokenResolves toHex
Primary buttonsemantic.color-dark.action.primaryprimitive.color.burnt-sienna-deep#A55838
Primary hoversemantic.color-dark.action.primary-hoverprimitive.color.burnt-sienna-deep-hover#914D31
Primary pressedsemantic.color-dark.action.primary-activeprimitive.color.burnt-sienna-deep-active#80442B
Secondary text/bordersemantic.color-dark.action.secondaryprimitive.color.pale-wheat#F9DFAE
Secondary hoversemantic.color-dark.action.secondary-hoverprimitive.color.warm-gold#F2C087

Note the key dark mode difference: the secondary action color flips from dark-burgundy (light) to pale-wheat (dark) for sufficient contrast against the dark surface.

RoleTokenResolves toHex
Default borderssemantic.color-dark.border.defaultprimitive.color.dark-surface#352C29
Strong borderssemantic.color-dark.border.strongprimitive.color.muted-brown#7A6560
Subtle dividerssemantic.color-dark.border.subtleprimitive.color.warm-dark#3D2E2A
RoleTokenResolves toHex
Focus ringsemantic.color-dark.focus.ringprimitive.color.warm-gold#F2C087

Light mode

Primary text on warm-white

Secondary text (muted-brown)

Tertiary / placeholder (dim-brown)

Dark mode

Primary text on warm-charcoal

Secondary text (dim-brown)

Tertiary / placeholder (muted-brown)