🎨 GridPilot Dev Theme — “Precision Racing Minimal”

The core idea:
A UI that feels like a race engineer’s dashboard — not a game launcher, not corporate SaaS.

⸻

1. Identity & Mood

The theme should communicate:
	•	Precision (like telemetry screens)
	•	Calm intensity (the feeling before a qualifying lap)
	•	Authority without ego (used by serious racers)
	•	Modern minimalism (dev-friendly, clean structure)
	•	Soft gaming hints (subtle neon touches, not RGB vomit)

It appeals equally to:
	•	Devs (clean, modular, readable components)
	•	Gamers (immersive, familiar atmosphere)
	•	Simracers (motorsport seriousness)

⸻

2. Visual Language

Primary Look
	•	Dark, matte surfaces
	•	Thin, crisp separators
	•	Soft glow accents in blue / cyan / purple
	•	Avoid aggressive neon or gamer-overload
	•	Subtle gradient tints (barely visible)

Color System
	•	Base: Near-black graphite (#0C0D0F)
	•	Surface: Deep charcoal (#141619)
	•	Outline: Soft steel grey (#23272B)
	•	Primary Accent: Electric blue (#198CFF)
	•	Telemetry Accent: Aqua (#4ED4E0)
	•	Warning: Motorsport amber (#FFBE4D)

Everything should feel instrument-grade, not decorative.

⸻

3. Component Philosophy

Cards
	•	Functional over flashy
	•	Slight bevel or inset shadow (hint of cockpit panels)
	•	Dense info, clean hierarchy

Tables
	•	High-density
	•	Thin row dividers
	•	Highlight on hover only
	•	Telemetry-coded status colors

Buttons
	•	Flat by default
	•	Glow + gradient only on hover
	•	Snappy micro-animation (motorsport feedback)

Modals
	•	Soft frosted blur
	•	Fast open/close animation
	•	Dimmed pit-lane-lighting vibe

⸻

4. Motion & Feedback

Racing-inspired, but minimal:
	•	Short accelerations (fast ease-out)
	•	No bounces — this isn’t a game store
	•	Hover = slight lift + color pulse
	•	Loading = progress line (like pit limiter light)
	•	Switching tabs = sliding underline (chicane motion)

Devs should feel the UI is responsive, not playful.

⸻

5. Layout Structure

Think “Telemetry Workspace”:
	•	Sidebar = dashboard rail
	•	Header = control bar
	•	Content = track map / data table zone
	•	Right panel = session or context info

Everything modular, easily replaceable, easy to reason about.

⸻

6. Tone for Dev-Facing Text
	•	Short
	•	Neutral
	•	Calm
	•	Technical
	•	Real-world language (not corporate slang)

Examples:
	•	“Add race”
	•	“Review protest”
	•	“Session updated”
	•	“Export standings”
	•	“Sponsor payout queued”

No hype. No marketing tone inside the app.

⸻

7. Emotional Target

Users should feel:
	•	In control
	•	Supported
	•	Efficient
	•	Connected to motorsport culture
	•	Trusting (nothing looks cheap or gimmicky)

It’s basically:

“A premium cockpit dashboard… built by people who race and code.”
⸻

8. UI Layering & Primitives

To maintain architectural integrity and prevent "div wrapper" abuse, we enforce a strict layering boundary:

### Primitives (`apps/website/ui/primitives/`)
- **Generic building blocks**: `Box`, `Surface`, `Stack`, `Grid`, `GridItem`.
- **Internal only**: These should NEVER be imported outside of the `apps/website/ui/` layer.
- **Full flexibility**: They allow arbitrary styling (bg, border, shadow, etc.) to build semantic components.

### Semantic UI (`apps/website/ui/`)
- **Building blocks for components**: `Card`, `Panel`, `Button`, `Table`, `Stack`, `Grid`.
- **Restricted flexibility**: Semantic layout components (like `Stack`, `Grid`) are restricted to layout-only props. They do NOT allow styling props (bg, border, etc.).
- **Public API**: These are the only UI elements that should be imported by `components/` or `pages/`.

### Components (`apps/website/components/`)
- **Domain-specific**: `RecentRacesPanel`, `DriverCard`, `LeagueHeader`.
- **No raw HTML**: Components must use semantic UI elements. Direct use of primitives or raw HTML tags is forbidden.

**Rule of thumb**: If you need a styled container in a component, use `Panel` or `Card`. If you need a new type of styled container, create it in `ui/` using primitives.
