diff --git a/echo/frontend/docs/button_design_system.md b/echo/frontend/docs/button_design_system.md
new file mode 100644
index 00000000..18d3559b
--- /dev/null
+++ b/echo/frontend/docs/button_design_system.md
@@ -0,0 +1,197 @@
+# Button Design System
+
+This document describes the button design system implemented in the ECHO frontend.
+
+## Quick Reference
+
+| Button Type | Mantine Variant | Example Usage |
+|-------------|-----------------|---------------|
+| **Primary** | `filled` (default) | `` |
+| **Secondary** | `outline` | `` |
+| **Tertiary** | `subtle` | `` |
+| **Disabled** | Any + `disabled` | `` |
+
+## Design Spec
+
+### Primary Button (filled)
+- **Default**: Institution Blue (`#4169E1`) background, white text, **pill-shaped (fully rounded)**
+- **Hover**: Graphite (`#2D2D2C`) background
+- **Click/Active**: Graphite (`#2D2D2C`) background
+- **Loading**: Graphite (`#2D2D2C`) background with white spinner
+
+### Secondary Button (outline)
+- **Default**: Institution Blue border, Institution Blue text, transparent background, **standard corners**
+- **Hover**: 10% Institution Blue background
+- **Click/Active**: 20% Institution Blue background
+
+### Tertiary Button (subtle)
+- **Default**: No border, Institution Blue text, transparent background, **standard corners**
+- **Hover**: 10% Institution Blue background
+- **Click/Active**: 20% Institution Blue background
+
+### Disabled Button
+- **Default**: Gray background, Graphite text
+- **Hover**: Gray background + 1px Peach (`#FFD166`) border
+- **Click/Active**: Gray background + 1px Salmon (`#FF9AA2`) border
+- **Note**: Loading buttons are technically disabled but use their own styling (see Primary/Loading above)
+
+## Usage Examples
+
+```tsx
+// Primary button (default)
+
+
+// Secondary button
+
+
+// Tertiary button
+
+
+// Disabled button (shows interactive borders)
+
+
+// Loading button (graphite background with spinner)
+
+
+// Custom color (overrides primary)
+
+```
+
+## Brand Colors
+
+All brand colors are defined in [`src/colors.ts`](../src/colors.ts) as the single source of truth.
+
+### Available Colors
+
+| Name | Base Color | Mantine Usage | Tailwind Usage | Purpose |
+|------|------------|---------------|----------------|---------|
+| **Primary** | `#4169E1` | `color="primary.6"` | `bg-primary-500` | Buttons, links, accents |
+| **Cyan** | `#00FFFF` | `color="cyan.6"` | `bg-cyan-500` | Deep Dive mode accent |
+| **Graphite** | `#2D2D2C` | `color="graphite.6"` | `bg-graphite` | Text (DM Sans theme) |
+| **Lime Yellow** | `#F4FF81` | `color="limeYellow.6"` | `bg-limeYellow-500` | Highlights |
+| **Mauve** | `#FFC2FF` | `color="mauve.6"` | `bg-mauve-500` | Accent color |
+| **Parchment** | `#F6F4F1` | `color="parchment.6"` | `bg-parchment` | Background (DM Sans theme) |
+| **Peach** | `#FFD166` | `color="peach.6"` | `bg-peach-500` | Warnings, alerts |
+| **Salmon** | `#FF9AA2` | `color="salmon.6"` | `bg-salmon-500` | Error states |
+| **Spring Green** | `#1EFFA1` | `color="springGreen.6"` | `bg-springGreen-500` | Success, Overview mode |
+
+### Using Brand Colors
+
+**In Mantine Components:**
+```tsx
+
+