# Foundations · Colors Canonical values live in [`../../design.md`](../../design.md) and [`../../tokens/colors.json`](../../tokens/colors.json). This page is the human-facing rationale. ## The system in one paragraph KDC's palette is built around **Kode purple** `#6B35A7`, a **purple-tinted ink** `#1A1530` (never pure black), and a **warm off-white canvas** `#F7F4ED`. Together they give surfaces a craft / editorial feel rather than the cold slate look of generic SaaS. A muted **gold accent** `#C9892B` is reserved for emphasis CTAs in product surfaces; a **mint accent** `#46C194` is reserved for marketing surfaces. Both accents are deliberately scarce — one per surface. ## Layers 1. **Brand** — `brand.primary` and its four variants (`primaryHover`, `primaryPressed`, `primaryLight`, `primarySoft`), `brand.ink`, `brand.canvas`. 2. **Accent** — `accent.gold` (product emphasis) and `accent.mint` (marketing). 3. **Neutral** — a 13-step ink-tinted ramp (`neutral.0` → `neutral.1000`). Aliases: `100` ≡ `canvas`, `900` ≡ `ink`. 4. **Semantic** — `success` `#2F7A5A`, `warning` `#C9892B`, `danger` `#B0382F`, `info` `#5C2D90`. Each has a `*Soft` tint for backgrounds. 5. **Role tokens** — always consume `text.default`, `surface.canvas`, `border.default`, etc. in product code. Never hardcode the palette. ## Choosing a colour - **Default text** → `text.default` (`brand.ink`). For supporting copy, `text.soft`; for meta, `text.muted`. - **Page surface** → `surface.canvas` (`brand.canvas`) for product UIs, `surface.background` (`#FFFFFF`) for content cards. - **Primary CTA** → `brand.primary` + hover `brand.primaryHover`. - **Emphasis CTA / commit** → `accent.gold`. Only one per surface, and only when there's a meaningful one-way action. - **Status pill / badge** → `semantic.{success|warning|danger}Soft` background + matching semantic text. ## Contrast (WCAG 2.2 AA minimums) - Body text on background ≥ 4.5:1. - Large text (≥ 24px, or ≥ 19px bold) and UI icons ≥ 3:1. - `text.muted` `#6B647A` on `surface.background` `#FFFFFF` → 5.4:1 ✓ - `brand.primary` `#6B35A7` on `surface.background` → 6.9:1 ✓ - `accent.gold` `#C9892B` on `surface.background` → 3.0:1 — meets large-text only; pair with text labels for small UI. ## Drift to be aware of The legacy apps (kdcdiary, kdctracker, kdcdocs, kdcmapper) currently use different purples (#6B4EFF, #A37CD9, #5567E8) and fonts (Geist, Inter+Outfit). Treat anything not in this swatch sheet as drift; new work follows the canonical palette.