Foundations
Tokens ported from the production Flashquotes app. Prototypes should use these via semantic utilities (bg-primary, text-muted-foreground, …) — never raw hex values.
Color
Semantic tokens. Toggle the studio theme in the header to see dark values.
--primaryBrand indigo-600 #4f46e5 — actions, links, focus
--primary-foregroundText on primary
--backgroundPage surface
--foregroundDefault text — slate-900
--cardRaised surfaces
--mutedRecessed surface — slate-50, app-shell canvas
--muted-foregroundSecondary text — slate-500
--secondaryQuiet fills — slate-100
--accentHover fills
--borderHairlines and input borders
--ringFocus ring — indigo-500
--destructiveErrors and dangerous actions — red-600
--successPositive status — green-600, 'Connected' badges
Quote lifecycle — status dots, never colored backgrounds
--status-bookedBooked — indigo-500
--status-sentSent — emerald-500
--status-draftDraft — amber-500
--status-expiredExpired — slate-400
Sidebar
--sidebarSidebar surface — slate-50
--sidebar-foregroundNav item text
--sidebar-accentActive item background
--sidebar-accent-foregroundActive item text — brand indigo
--sidebar-borderSidebar hairline
Typography
Söhne (Klim Type Foundry) — the canonical brand font, self-hosted, weights 200–900 with italics (no Thin cut). 400 Buch for body, 500 Kräftig for UI labels, 600 Dreiviertelfett for headings. Inter/system fall back.
Radius
6px (rounded-md) on buttons, inputs, and menu items; 8px (rounded-lg) on cards, avatars, and dialogs; 12px on the inset sidebar; full on badges and status dots.
rounded-mdInputs, menu items
rounded-lgButtons, small tiles
rounded-xlCards
rounded-2xlMobile sheets, feature panels
Shadows
Light and flat — shadow-sm on cards and inputs, shadow on dropdowns and popovers. No inner shadows, no elevation stack; hairline borders do the separation.
shadow-xsshadow-smshadow-mdshadow-lgSpacing
4px grid. Common steps: 2 (8px) inside controls, 4 (16px) card padding, 6 (24px) section gaps.
28px312px416px624px832px1040px