Foundations
Sober, timeless tones where content and photography lead. Reach for the semantic tokens in product code — the raw scales exist to define them, not to be used directly.
Porcelain Light
var(--porcelain)
Neutral base — 80% of every surfaceCharcoal
var(--charcoal)
Dark sections, primary CTAs — 10%Graphite
var(--graphite)
Body text — 7%Nolab Blue
var(--nolab-blue)
Functional accent only — 3%Nolab Blue is reserved for active states, secondary navigation, microinteractions and emphasis. Never a section background, a button fill, or a large surface. Primary CTAs are Charcoal.
surface-page
var(--surface-page)
Page backgroundsurface-card
var(--surface-card)
Cards and raised panelssurface-sunken
var(--surface-sunken)
Inset wellssurface-paper
var(--surface-paper)
Warm editorial sectionssurface-inverse
var(--surface-inverse)
Dark sections, footersurface-inverse-deep
var(--surface-inverse-deep)
Deepest dark bandaction-primary
var(--action-primary)
Primary CTA fill — Charcoalaction-disabled
var(--action-disabled)
Disabled button fillborder-subtle
var(--border-subtle)
Hairline dividersborder-default
var(--border-default)
Input and card bordersborder-strong
var(--border-strong)
Primary button outlinefocus-ring
var(--focus-ring)
Keyboard focusvar(--text-strong)
Headlinesvar(--text-body)
Body copyvar(--text-muted)
Captions, metadatavar(--text-link)
Links and accentsvar(--text-inverse)
Copy on dark sectionsvar(--text-on-dark)
Copy over photographyWhite
var(--neutral-0)
Card surfaceNeutral 100
var(--neutral-100)
Porcelain Light / pageNeutral 150
var(--neutral-150)
Sunken surface, hairlinesNeutral 200
var(--neutral-200)
Warm paper, editorial bandsNeutral 250
var(--neutral-250)
Fine UI linesNeutral 300
var(--neutral-300)
Default borderNeutral 400
var(--neutral-400)
Muted textNeutral 500
var(--neutral-500)
Graphite — body textNeutral 600
var(--neutral-600)
Deep surfaceNeutral 700
var(--neutral-700)
Charcoal — inverse surfaceNeutral 900
var(--neutral-900)
Deepest ink, headlinesBlue 100
var(--blue-100)
Hover accentBlue 500
var(--blue-500)
The accent: links, focus, activeBlue 700
var(--blue-700)
Pressed accentBlue Tint
var(--blue-tint)
Faint wash for info calloutsTerracotta 100
var(--terracotta-100)
Nolab Fractional — lightTerracotta 500
var(--terracotta-500)
Nolab Fractional — baseTerracotta 700
var(--terracotta-700)
Nolab Fractional — deepForest 100
var(--forest-100)
Nolab Rentas — lightForest 500
var(--forest-500)
Nolab Rentas — baseForest 700
var(--forest-700)
Nolab Rentas — deepSuccess
var(--success-600)
Confirmed, availableSuccess Soft
var(--success-100)
Success surfaceWarning
var(--warning-600)
Pending, attentionWarning Soft
var(--warning-100)
Warning surfaceDanger
var(--danger-600)
Error, withdrawnDanger Soft
var(--danger-100)
Danger surfaceData Positive
var(--dataviz-positive)
Charts — gainData Negative
var(--dataviz-negative)
Charts — loss