Colors
Two layers: the full raw brand palette (sea + earth) and a semantic token set (what components actually reference). Swap a semantic mapping in packages/ui/styles/tokens.css and every surface follows.
All rendered live from packages/ui/tokens.ts so this page can never drift from what ships.
import from @halwel/ui/tokens (colors, palette)
Variants
Raw palette
deepSea
#1f3b34deepPatina
#3e6d73seaGreen
#6e8a7dpatinaBlue
#4ad0d1sage
#8fa593cognac
#c06a2bterracotta
#c36a3dsoftGold
#c8b07awarmSand
#d9cab2limestone
#d9d0c2cream
#efe9d6cardCream
#fbf8f0driftwood
#8a8172ink
#1b2326onDark
#f3e7d3The actual hex values. Do not reference these directly in components — use the semantic tokens below.
Semantic tokens
--bg
#1f3b34page background--bg-panel
rgba(255, 255, 255, 0.05)default panel/card surface--bg-panel-hover
rgba(255, 255, 255, 0.08)panel/card on hover--bg-input
rgba(255, 255, 255, 0.08)input field surface--bg-input-focus
rgba(255, 255, 255, 0.12)input on focus--surface-elevated
#3e6d73canonical elevated surface — cards, rows, panels--surface-elevated-border
rgba(255, 255, 255, 0.16)hairline border on elevated surfaces--surface-elevated-border-hover
rgba(255, 255, 255, 0.34)elevated-surface border on hover--surface-elevated-row-divider
rgba(255, 255, 255, 0.14)row dividers inside elevated surfaces--text
#f3e7d3primary text--text-muted
rgba(255, 255, 255, 0.55)secondary text--text-dim
rgba(255, 255, 255, 0.35)tertiary text / placeholder--border
rgba(255, 255, 255, 0.08)default border--border-focus
rgba(255, 255, 255, 0.24)border on focus--divider
rgba(255, 255, 255, 0.14)section divider lines--brand-primary
#4ad0d1primary action / accent--brand-primary-50
rgba(74, 208, 209, 0.5)primary at half opacity--brand-card
#3e6d73elevated brand card surface--brand-deep
#1f3b34ground / canvas--brand-gold
#c8b07awarning / urgent accent--brand-sky
#8fa593soft accent / care team--brand-action
#c36a3dprimary call-to-action / button base (earthy)--brand-action-strong
#c06a2bstronger action accentWhat components reference. Swap these in tokens.css to retheme.