Wavecast Master Colour Palette
The canonical colour set — names, values and on-fill pairings — for documents, slide decks, publishing defaults and product. Brand foundation, neutral surfaces, the semantic layer (Event Phase, Booking Status), functional states, the categorical chart set, and the accessibility rules everything downstream inherits.
| # | Colour category | Client themeable |
|---|---|---|
| 01 | Brand | ✓ |
| 02 | Tints | ✓ |
| 03 | Surface Scale — Light | ✓ |
| 04 | Surface Scale — Dark | ✓ |
| 05 | Text & Icons | ✓ |
| 06 | Event Phase | — |
| 07 | Gradients | ✓ |
| 08 | Booking Status | — |
| 09 | Functional States | ✓ |
| 10 | Categorical Set | ✓ |
Event Phase and Booking Status are fixed system semantics — the same in every Brand Pack — so they sit outside the themeable set. Tap a row to jump to its section.
Brand
CanonicalThree brand colours: Primary (Sky) is structural, Secondary (champagne) is warmth, Accent (Rose) is interactive.
- Primary (Sky) is the structural brand blue — headers, brand moments, non-interactive accents.
- Secondary (champagne) is brand warmth — furniture and non-interactive emphasis (rules, dividers, tags, framed borders). It carries its own tonal ramp (see Tints).
- Accent (Rose) is the interactive colour — CTAs, buttons, links, active states. If it's clickable, it's Accent.
- Swatches are mode-agnostic, but the link role is mode-specific for contrast (see Text and Accessibility).
Tints
CanonicalThe two brand colours that carry a full tonal scale — Primary (Sky) and Secondary (champagne). Each is a ten-step ramp anchored at 500; swap the brand value per client and the scale regenerates. Accent (Rose) has no scale.
Primary Scale — Sky
#e0f2fe
#bae6fd
#7dd3fc
#38bdf8
#0ea5e9
#0284c7
#0369a1
#075985
#0c4a6e
#082f49
Secondary Scale — Champagne
#fbf6ea
#f6ecce
#eedca0
#e4c87b
#d8b15a
#bd9540
#9c7a2e
#7b6022
#5a4619
#382c10
- Primary Scale = Tailwind Sky 100–950;
primary_500=base_colours_primary(#0ea5e9). Token shapeprimary_100 … primary_950. - Secondary Scale = champagne 100–950;
secondary_500=base_colours_secondary(#d8b15a — the system's existing chrome gold). Token shapesecondary_100 … secondary_950. - Both regenerate around their 500 anchor when the brand value is swapped per client. Mode-agnostic.
- Secondary on-fill: black through 600, white from 700. Gold-as-text: never AA as text at 500 — steps to
secondary_700#9c7a2e on light,secondary_text_dm#e4c87b on dark; at 500 only as line/fill/border. Reserved base; hue-clear of Warning #eab308 and Paused amber #b85d14.
Surface Scale — Light
CanonicalZinc-based neutral scale for light-mode surfaces.
- Goes light → dark as the number increases.
Surface Scale — Dark
CanonicalMirror of the light scale, inverted.
- Goes dark → light as the number increases.
Text & Icons
CanonicalMode-specific text, link and icon colours.
- Links are mode-agnostic. Brand Rose
#fe2767in both modes — 4.81:1 on dark (AA-normal), 3.68:1 on white (below AA-normal), accepted as a deliberate brand-consistency trade-off. - Muted text (Text 2) is a per-layer override — see the surface-dependent rule under Accessibility.
Event Phase
CanonicalTen lifecycle phases, each a token, value and badge.
| # | Phase | Token | Hex | On-fill | Badge — tinted & solid | Signal | |
|---|---|---|---|---|---|---|---|
| 1 | Ideation | phase_ideation | #b5d36a | #000 | IdeationIdeation | Germination — fresh shoot | |
| 2 | Setup | phase_setup | #5fb55a | #000 | SetupSetup | Taking shape | |
| 3 | Launch | phase_launch | #1f9d6b | #000 | LaunchLaunch | Going public | |
| 4 | Promotion | phase_promotion | #1d6e63 | #fff | PromotionPromotion | Building momentum — deep teal-green | |
| 5 | Finalising | phase_finalising | #ffa033 | #000 | FinalisingFinalising | Heat building | |
| 6 | Pre-Live | phase_prelive | #cf3a14 | #fff | Pre-LivePre-Live | Imminent | |
| 7 | Live | phase_live | #ff0000 | #000 | LiveLive | On air & broadcast-live indicator | |
| 8 | Replay | phase_replay | #0284c7 | #000 | ReplayReplay | Second life begins | |
| 9 | Insight | phase_insight | #7c5cd6 | #fff | InsightInsight | Analytics / reporting / audience | |
| 10 | Archive | phase_archive | #475068 | #fff | ArchiveArchive | Cold storage, at rest |
- Token shape is nominal throughout —
phase_{name}. phase_live(#ff0000) is both the Live phase and the broadcast-live indicator — one "live" everywhere, no separate Status category (liveis its shorthand alias).- On-fill is not assumed.
phase_liveas a fill needs black text (white is only 4.0:1); as a dot/pulse it carries no text. - The Badge column shows both forms: tinted (13% fill, 30% border, hue dot, tuned text — the in-product default) and solid (hue fill + on-fill text — validates the pairing).
- The resolved tinted-badge text on dark (13%-fill / 30%-border treatment), promoted into the Colour Registry (1 Jun 2026) so the canonical source carries them explicitly. Token shape
phase_{name}_text_dm. phase_ideation_text_dm#b5d36a (reads true) ·phase_setup_text_dm#6fc468 ·phase_launch_text_dm#2bbd82 ·phase_promotion_text_dm#43b8a6 ·phase_finalising_text_dm#ffa033 (reads true) ·phase_prelive_text_dm#ef6a47 ·phase_live_text_dm#ff5c5c ·phase_replay_text_dm#38bdf8 ·phase_insight_text_dm#a78fe8 ·phase_archive_text_dm#8b97b0.- Archive re-based to the slate
#475068(3 Jun 2026) so it reads on dark surfaces — the formerphase_archive_dot_dmworkaround is now redundant (the dot uses the base).
Gradients
CanonicalThree signature gradients — one per act — blended from the Event Phase colours in each band. Dreamy by default.
Fill — full saturation
gradient_planning
gradient_live
gradient_replay
Tint — 16%, dreamy
gradient_planning_tint
gradient_live_tint
gradient_replay_tint
- Each gradient blends its act's phase colours in phase order at 135°: Planning = phases 1–4 (Pre), Live = phases 5–7, Replay = phases 8–10 (Post).
- Two forms, mirroring the badges — kept as separate swatches. Fill is the full-saturation blend (mode-agnostic; hero headers and accent surfaces). Tint is the same blend at 16% via
color-mix(… , transparent)(the tint-badge recipe), dreamy and subtle; for section and card washes. - The tint sits over the page surface, so it adapts to light and dark automatically; the fill renders identically in both modes.
- Replay is eased through extra transitional stops so the violet→slate hand-off is smooth rather than a hard seam.
- Token shape
gradient_planning/gradient_live/gradient_replay, each with a_tintvariant.
Booking Status
CanonicalFour symmetrical groups, each an outline and fill state.
- Provisional, Active, Paused are single-hue: outline = pending / soft, fill = committed / active.
- Completed is the terminal exception — two hues, axis = outcome: outline (Cancelled) = closed-bad, fill (Delivered) = closed-good.
- The dot echoes the chip — hollow for outline, solid for fill.
- On-fill text is not assumed white; outline text is checked for both modes. Token shape
booking_{group}.
- The resolved outline-text colour on dark, lightened from the base hue; promoted into the Colour Registry (1 Jun 2026). Token shape
booking_{group}_text_dm. booking_provisional_text_dm#8b929c ·booking_active_text_dm#34b3a0 ·booking_paused_text_dm#d98030 ·booking_cancelled_text_dm#cf4339. Delivered is exempt — fixed black fill / white text in both modes.
Functional states
CanonicalFour states, each one hue plus a light tint.
- Mode-agnostic. The light tint backs banners (base hue as text); the on-fill value is for solid badges — not assumed white.
- Real-time operational signals (connection lost, recording failed) use Error.
- Token shape
state_{name}.
- The resolved text over the light tint on dark surfaces, lightened from the base hue; promoted into the Colour Registry (1 Jun 2026). Token shape
state_{name}_text. state_success_text#4ade80 ·state_warning_text#facc15 ·state_error_text#f87171 ·state_info_text#93b4e0.
Categorical set
CanonicalEight hues carrying no meaning, for charts and avatars.
#0ea5e9
#7c5cd6
#f59e0b
#ec4899
#14b8a6
#a3e635
#fb7185
#64748b
- For chart series, avatars, abstract fills — no semantic meaning attached.
- cat_1/cat_2 reuse Sky and the Insight violet; the rest space evenly around the wheel.
- Token shape
cat_1 … cat_8.
Accessibility & contrast
CanonicalThe contrast foundation everything downstream inherits.
- All values are checked against WCAG 2.1 AA — normal text ≥4.5:1, large text / non-text UI ≥3:1.
- On-fill text is never assumed. Every solid fill carries a paired on-fill value that clears AA-normal. White is not universal — several fills require black (
phase_live,state_success,state_error,phase_replay, all light Pre/Live steps). Bind the on-fill token, never a hardcoded#fff. - Links are mode-agnostic. Brand Rose
#fe2767is the link colour in both modes — 4.81:1 on #18181b (AA-normal), 3.68:1 on white (below AA-normal). The light-mode link is a deliberate exception to AA-normal, accepted for brand consistency; on light surfaces always pair it with the underline affordance so colour is never the sole signal. - The reserved-base rule (brand families only). Sky 500 is Primary, Rose is Accent — semantic aliases must not point to those brand bases, so a non-clickable badge never wears the brand colour. Replay (
phase_replay) takes Sky 600#0284c7, not Sky 500. Phase tokens hold standalone values and never alias a brand base. - Colourblind safety. Where two semantic colours share a family (Pre green vs Success green; Live red vs Error red vs Cancelled red), they're separated by treatment, shape and label — not hue alone.
phase_liveis a dot/pulse, not a red badge. Hue is never the sole carrier of meaning. - Muted text is surface-dependent. Text 2 LM
#71717ais AA-normal on white/SSL1 but only AA-large on SSL2 and below — step down to#52525bfor essential muted text on SSL2+. In DM, Text 2#a1a1aais safe across SSD1/SSD2; reserve#71717afor non-essential meta only.
Open questions
Track- Categorical ambiguity. cat_2 (violet) shares the Insight phase hue. In a dashboard where a categorical chart sits beside a phase-coloured chart, the violet series could read as "the Insight phase." Fallback is a semantically-clean categorical set excluding all phase/functional hues. Decide after the dashboard prototype is reviewed.
Exact mirror of the Notion Colour Registry. Ported into the WDS References shell — colour values are not edited here; update the registry, then re-sync.