Agent Router Design System
Philosophy
Clarity through simplicity. Every element earns its place. Communicate complex functionality through clean interfaces and generous whitespace rather than visual noise.
Principles (ranked):
- •Usability first - Every interaction obvious, every state visible
- •Quiet confidence - Warm neutrals, purposeful color, no decoration for its own sake
- •Consistent rhythm - Predictable spacing, type scale, and component patterns
- •Progressive disclosure - Show only what's needed; reveal detail on demand
Color Palette
| Token | Hex | Role |
|---|---|---|
graphite | #2E2924 | Primary text, headings, dark backgrounds |
mint-cream | #EAF0E6 | Page background, card surfaces, light fill |
caramel | #E5A161 | Accent — highlights, badges, hover states |
spicy-orange | #CF5326 | CTA buttons, alerts, destructive actions |
Derived shades (generate with Tailwind opacity or color-mix):
- •
graphite/80for secondary text - •
graphite/10for subtle borders - •
mint-creamwithcaramel/10overlay for warm card surfaces - •
spicy-orange/10for error/warning backgrounds
Usage rules:
- •Default page bg:
mint-cream - •Cards/panels:
mint-creambg,whiteinterior - •Primary CTA:
spicy-orangebg, white text - •Secondary CTA:
graphitebg, white text - •Links/interactive:
spicy-orangeon hover,graphitedefault - •Caramel is accent only — never for large surfaces
Typography
Serif + sans-serif pairing via next/font/google:
| Role | Font | Weight | Usage |
|---|---|---|---|
| Headings | Playfair Display | 600, 700 | h1-h3, hero text, page titles |
| Body / UI | Inter | 400, 500, 600 | Paragraphs, labels, buttons |
| Code / Mono | Geist Mono | 400 | Code blocks, technical values |
Scale (Tailwind classes):
- •
text-3xl/text-4xl— page titles (Playfair) - •
text-xl/text-2xl— section headings (Playfair) - •
text-base— body text (Inter) - •
text-sm— secondary text, captions (Inter) - •
text-xs— labels, badges (Inter, uppercase tracking-wide when appropriate)
Spacing & Layout
- •Base unit:
4px(Tailwind default) - •Component internal padding:
p-4(16px) minimum,p-6for cards - •Section gaps:
gap-8orgap-12 - •Page max-width:
max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 - •Generous whitespace between sections (
py-12topy-16)
Component Library: Radix UI
Use @radix-ui/react-* primitives for all interactive components. Style with Tailwind — never CSS modules.
Workflow
- •Determine if Radix has a primitive for the pattern (dialog, popover, select, tabs, etc.)
- •If yes, use the Radix primitive — do NOT build custom
- •Wrap in a project component under
src/components/ui/with consistent styling - •If no Radix primitive exists, build with semantic HTML + aria attributes
Each file exports a styled wrapper around the Radix primitive. Components accept a className prop for one-off overrides via cn() (clsx + twMerge).
Interaction & Motion
- •Transitions:
transition-colors duration-150for hovers - •Dialogs:
animate-in fade-in(Radix built-in data attributes) - •No bouncy animations — keep motion subtle and functional
- •Focus rings:
focus-visible:ring-2 focus-visible:ring-spicy-orange/50 focus-visible:outline-none
Dark Mode
Not planned for v1. Design around the light palette. If added later, invert graphite and mint-cream roles.