Design Charter
Vauban Design Language (VDL) v5.0
The Vauban Design Language is the unified visual system governing all products in the Vauban ecosystem. It ensures visual coherence across 9+ applications while preserving each product's distinct identity through the Zone Accent system.
Design Principles
1. Dark-First, Institutional
Vauban targets sophisticated DeFi users managing real capital. The interface communicates trust, precision, and seriousness -- not playfulness.
- Dark backgrounds reduce eye strain during extended portfolio monitoring
- High-contrast text ensures readability across all lighting conditions
- Subtle brand glow effects guide attention without distraction
2. OKLCH-Sourced, Hex-Delivered
All colors are authored in OKLCH (perceptually uniform, CSS Color Level 4) for precise lightness/chroma control, then compiled to hex for delivery. This guarantees:
- Perceptually uniform scales -- equal visual steps between shade levels
- Pixel-identical rendering across Chrome, Firefox, Safari, and mobile browsers
- Zero runtime overhead -- resolved hex values, no
oklch()function calls - Generator script:
packages/design-tokens/scripts/generate-scales.mjs(culori)
3. Three-Tier Token Architecture
Reference Layer --vdl-slate-{1-12}, --vdl-indigo-{1-12}, ...
│ Static, theme-agnostic. Raw 12-step scales.
▼
Semantic Layer --vdl-bg-void, --vdl-text-primary, ...
│ Purpose-bound, theme-reactive via CSS selectors.
▼
Component Layer Per-component aliases (e.g. --card-bg, --btn-text)
Defined in component CSS, not in tokens.css.Semantic tokens reference scale tokens: --vdl-bg-void: var(--vdl-slate-1). Zero visual change when switching layers -- same resolved values.
4. Three Themes, One Source
| Theme | Selector | Character | Use Case |
|---|---|---|---|
| Navy | [data-theme="navy"] | Deep blue-tinted dark | Default. Financial dashboard feel |
| Zinc | [data-theme="zinc"] | Neutral gray dark | Minimal, Glacis-style |
| Light | [data-theme="light"] | Warm sandstone ("Fortress Stone") | Daytime, accessibility |
All three themes derive from a single tokens.css file. The :root block defines Navy (default), then [data-theme="zinc"] and [data-theme="light"] selectors override only the semantic variables that change.
5. Zone Accents
Each product has a unique accent with a full 12-step scale, creating instant visual identification:
| Zone | Product | Anchor (step 9) | Hue |
|---|---|---|---|
| Bastion | Staking dApp | #6366F1 | 277 |
| Rempart | Decentralized Blog | #8B5CF6 | 293 |
| Citadel | Trading Platform | #F59E0B | 70 |
| Brain | Knowledge Protocol | #06B6D4 | 215 |
| Glacis | Bridge Protocol | #10B981 | 163 |
Zone accents are static -- they never change between themes. Each zone has steps 1-12 for tinted backgrounds, borders, and text variants (see Zones).
6. Radix 12-Step Scale Model
Every color scale follows the Radix 12-step convention:
| Steps | UI Purpose | Example |
|---|---|---|
| 1-2 | Backgrounds | Page backdrop, content area |
| 3-5 | Component backgrounds | Cards, buttons, hover states |
| 6-8 | Borders | Subtle, default, hovered |
| 9-10 | Solid colors | Buttons, badges, active states |
| 11-12 | Text | Low-contrast, high-contrast |
Token Layers
Layer 4: Tailwind Utilities bg-vdl-base, text-vdl-primary, text-indigo-9
Layer 3: Tailwind v4 Theme @theme { --color-vdl-base: var(--vdl-bg-base) }
Layer 2: Semantic Tokens --vdl-bg-base: var(--vdl-slate-2)
Layer 1: Reference Scales --vdl-slate-2: #0A0F1A /* oklch(0.169 0.025 265) */Background Scale (5 levels)
| Token | Navy | Zinc | Light | Purpose |
|---|---|---|---|---|
--vdl-bg-void | #050810 | #09090b | #F5F0EB | Page backdrop, behind everything |
--vdl-bg-base | #0A0F1A | #18181b | #FAF7F4 | Main content area |
--vdl-bg-surface | #111827 | #27272a | #FFFFFF | Cards, panels |
--vdl-bg-elevated | #1F2937 | #3f3f46 | #FFFFFF | Modals, dropdowns |
--vdl-bg-hover | #2A3548 | #52525b | #F0EBE5 | Interactive hover states |
Text Scale (4 levels)
| Token | Navy | Zinc | Light | Purpose |
|---|---|---|---|---|
--vdl-text-primary | #F9FAFB | #fafafa | #1C1917 | Headings, key values |
--vdl-text-secondary | #9CA3AF | #a1a1aa | #57534E | Body text, descriptions |
--vdl-text-tertiary | #6B7280 | #71717a | #A8A29E | Labels, captions |
--vdl-text-inverse | #111827 | #18181b | #FAFAF9 | Text on brand buttons |
Status Colors
| State | Color | Light variant | Dark variant |
|---|---|---|---|
| Success | #10B981 | #D1FAE5 | #065F46 |
| Warning | #F59E0B | #FEF3C7 | #92400E |
| Error | #EF4444 | #FEE2E2 | #991B1B |
| Info | #6366F1 | #EEF2FF | #3730A3 |
Typography
| Role | Font | Token | Usage |
|---|---|---|---|
| Display | Geist | --vdl-font-display | Hero, brand, wordmark |
| Heading | Inter | --vdl-font-heading | Section headings, UI titles |
| Body | Inter | --vdl-font-body | Paragraphs, descriptions |
| Mono | JetBrains Mono | --vdl-font-mono | Code, addresses, data |
Type Scale
| Level | Size | Line Height | Tracking | Weight (dark / light) |
|---|---|---|---|---|
| Display | 48px | 56px | -0.02em | 800 / 700 |
| H1 | 36px | 44px | -0.015em | 700 / 600 |
| H2 | 28px | 36px | -0.01em | 700 / 600 |
| H3 | 24px | 32px | -0.01em | 700 / 600 |
| Body | 16px | 24px | 0 | 400 / 400 |
| Small | 14px | 20px | 0 | 400 / 400 |
| Mono | 14px | 20px | -0.02em | 400 / 400 |
Dark mode weight compensation: Headings get +100 weight in dark themes to counteract halation (text appears thinner on dark backgrounds).
Font Features
| Feature Set | OpenType | Purpose |
|---|---|---|
| Body | 'cv01' 1, 'cv02' 1 | Inter alternate forms |
| Data | 'tnum' 1, 'lnum' 1, 'cv01' 1 | Tabular lining nums for DeFi |
| Mono | 'liga' 1, 'calt' 1 | Code ligatures |
Spacing & Layout
- 8px grid -- All spacing uses multiples of 4px (
--vdl-space-1= 4px through--vdl-space-24= 96px) - Header height: 56px
- Sidebar width: 256px
- Max content width: 1280px
Shadows & Effects
Dark themes use deeper, more opaque shadows. Light theme uses warm-toned subtle shadows inspired by natural stone.
The glow effect (--vdl-glow-brand) adds a subtle indigo halo to primary action elements, reinforcing brand identity without being distracting. A 7-intensity scale allows precise glow control for different interaction states.
Motion
VDL v5.0 includes a centralized motion system with spring physics, staggered reveals, and transaction-specific animations. See Motion for details.
Version History
| Version | Date | Status | Features |
|---|---|---|---|
| v5.0 | Feb 21, 2026 | ACTIVE | OKLCH-sourced scales, three-tier tokens, Radix 12-step, zone scales, motion v2, spring physics, display font (Geist) |
| v4.0 | Feb 20, 2026 | Superseded | Tailwind v4 layer, motion system, prose/patterns, bridge, version management |
| v3.0 | Feb 10, 2026 | Archived | Initial system: hex-only, 3 themes, zone accents, brand scale |
| v3.5 | Feb 18, 2026 | REJECTED | OKLCH runtime, circadian engine -- purged for cross-browser issues |