Skip to content
Foundationsstable

Colors

Warm cream and browns carry the page; red is reserved for action. Every colour is a token — the same name in Tailwind, CSS and JS.

Core palette

The colours that make a screen look like WeDance. Contrast is measured against cream (the page) and white (cards).

Page background
--wd-cream
#fbf5ea
cream 1.0white 1.1
Headings, default text
--wd-brown-900
#3b1f0d
cream 13.9white 15.1
Body text, descriptions
--wd-brown-700
#5b3a1d
cream 9.4white 10.2
Eyebrows, labels, captions
--wd-amber-600
#9a5614
cream 5.2white 5.7
Primary actions, links
--wd-red-600
#dc2626
cream 4.5white 4.8
CTA shadow, pressed red
--wd-red-800
#b91c1c
cream 6.0white 6.5
CTA gradient end
--wd-orange-500
#f97316
cream 2.6white 2.8
Success
--wd-green-600
#16a34a
cream 3.0white 3.3
Info
--wd-cyan-600
#0891b2
cream 3.4white 3.7
Warning
--wd-amber-500
#f59e0b
cream 2.0white 2.1

Semantic tokens

Name the job, not the colour. Components use these, so a theme change is one edit. Prefer them over the raw palette.

Aa background
bg-background · text-foreground
Page canvas
Aa card
bg-card · text-card-foreground
Raised surfaces
Aa primary
bg-primary · text-primary-foreground
Main action
Aa secondary
bg-secondary · text-secondary-foreground
Secondary action, labels
Aa muted
bg-muted · text-muted-foreground
Quiet backgrounds, body text
Aa accent
bg-accent · text-accent-foreground
Hover and selected states
Aa destructive
bg-destructive · text-destructive-foreground
Delete, errors

Status colours

Feedback only. Never use status colours for decoration or brand accents.

success
Saved, confirmed, available
info
Neutral highlights, tips
warning
Few spots left, check this
destructive
Errors, irreversible actions

Text contrast

Common pairings checked against WCAG 2.2. Body text needs AA (4.5:1); large or bold text needs 3:1.

SamplePairingRatioWCAG
Dance tonightHeading on cream13.94:1AAA
Dance tonightBody on cream9.36:1AAA
Dance tonightEyebrow on cream5.21:1AA
Dance tonightLink on cream4.45:1AA large
Dance tonightCream on red4.45:1AA large
Dance tonightCream on brown13.94:1AAA
Dance tonightSuccess text on cream3.04:1AA large
Dance tonightWarning text on cream1.98:1fail

Amber 500 (warning) and green 600 fail as small text on cream — use them for fills and icons, and pair status text with brown.

Extended palette

Accents and tints that pages already use. Fine for category colours and illustrations; reach for the core palette first.

purple-500
#a855f7
pink-500
#ec4899
pink-400
#f472b6
violet-600
#7c3aed
violet-400
#a78bfa
brown-950
#2a1f12
ink-900
#2a2018
brown-600
#5b4830
brown-500
#8b4513
sand-400
#c9a87a
sand-100
#ede4d3
black
#0a0a0a
gray-500
#6b7280
orange-700
#c2410c
amber-800
#92400e
amber-700
#b45309
amber-400
#fbbf24
amber-100
#fef3c7
yellow-300
#fde047
rose-600
#e11d48
rose-500
#f43f5e
red-900
#991b1b
red-100
#fee2e2
red-50
#fdecec
green-700
#15803d
cyan-700
#0e7490
cyan-400
#22d3ee
sky-500
#0ea5e9
blue-600
#2563eb

Usage

vue
<!-- Tailwind class — preferred -->
<p class="text-muted-foreground">Body text</p>
<div class="bg-wd-cream text-wd-brown-900">…</div>

<!-- Inline CSS -->
<span style="color: var(--wd-amber-600)">Eyebrow</span>

<!-- Transparent tint -->
<div style="background: color-mix(in srgb, var(--wd-red-600) 10%, transparent)">…</div>
<div class="bg-wd-red-600/10">…</div>

<!-- JS (alpha suffix, rotations) -->
import { WD } from '~/lib/brand'
const border = WD.red600 + '55'
color: var(--wd-red-600)

Do — use a token so the colour stays consistent and themeable.

color: #dc2626

Don't — paste a hex value — it drifts the moment the palette changes.