/* ───────────────────────────────────────────────────────────────────────── * design-systems/bmw/tokens.css * * Structured token bindings for "Design System Inspired by BMW". * German automotive precision: white-and-dark cinematic rhythm, * BMW Blue as singular interactive accent, zero border-radius, * BMWTypeNextLatin Light at 60px uppercase as the signature gesture. * * Key brand decisions encoded here: * - Pure White (#ffffff) canvas + cinematic dark hero sections * - BMW Blue (#1c69d4) — singular accent, used only for interactive elements * - BMW Focus Blue (#0653b6) — the documented darker tone, bound to * --accent-hover and reused inside --focus-ring * - Zero border-radius EVERYWHERE — including --radius-pill (DESIGN.md §5) * - BMWTypeNextLatin Light (300) for uppercase display — whispered authority * - Weight extremes only (300, 400, 700, 900) — never 500–600 * - Tight line-heights throughout (body 1.15, display 1.30) * - No shadows — depth comes from dark/light section contrast * * Contract sources: * - Standard token names: design-systems/_schema/tokens.schema.ts * - A2 fallback values: design-systems/_schema/defaults.css * - Brand source of truth: design-systems/bmw/DESIGN.md * ─────────────────────────────────────────────────────────────────── */ :root { /* ─── Surface ───────────────────────────────────────────────────── * Pure white is the BMW canvas. Content sections are flat white; the * dramatic depth in BMW pages comes from alternating with full-bleed * dark photography bands, NOT from an internal surface ladder. We * bind --surface to a near-white (#f5f5f5) for cards/inputs that need * the faintest separation from page background without competing * with the showroom rhythm. --surface-warm aliases — BMW has no * warm tier; the identity is cool industrial. */ --bg: #ffffff; --surface: #f5f5f5; --surface-warm: var(--surface); /* ─── Foreground ────────────────────────────────────────────────── * Near Black (#262626) is slightly warmer than pure #000 — gives the * body reading texture BMW favors on white. Meta Gray (#757575) is * BMW's own documented `--site-context-metainfo-color`. Silver * (#bbbbbb) marks the most restrained tier (footer links, dividers). * --fg-2 aliases to --fg — BMW jumps from primary to meta with no * intermediate secondary-heading tier (the leap is part of the * stark voice). */ --fg: #262626; --fg-2: var(--fg); --muted: #757575; --meta: #bbbbbb; /* ─── Border ────────────────────────────────────────────────────── * Subtle gray hairlines on light surfaces. BMW pages have minimal * borders — depth and definition are carried by photography and * dark/light contrast, not edge-work. --border-soft aliases — no * inner-row separator distinction is needed. */ --border: #e0e0e0; --border-soft: var(--border); /* ─── Accent ────────────────────────────────────────────────────── * BMW Blue (#1c69d4) — the system's only persistent chromatic move * (DESIGN.md §2: `--site-context-highlight-color`). Used exclusively * for interactive elements (CTAs, links, focus signals). Never as a * background fill or decorative element. * * --accent-hover binds to BMW Focus Blue (#0653b6) — the documented * `--site-context-focus-color` — so primary buttons darken to the * brand-canonical "pressed" tone on hover rather than mixing toward * black. --accent-active darkens further with the schema formula. */ --accent: #1c69d4; --accent-on: #ffffff; --accent-hover: #0653b6; --accent-active: color-mix(in oklab, var(--accent), black 18%); /* ─── Semantic ──────────────────────────────────────────────────── * BMW DESIGN.md documents no brand-specific semantic palette — the * page relies on automotive photography and BMW Blue for signal. * Schema defaults preserved; should occupy <5% of any surface. */ --success: #16a34a; --warn: #eab308; --danger: #dc2626; /* ─── Typography ────────────────────────────────────────────────── * BMWTypeNextLatin Light (weight 300) for display, BMWTypeNextLatin * for body. Fallback chain from DESIGN.md §3 — includes Japanese * fonts (Hiragino, Meiryo) reflecting BMW's global market presence. * Single typeface family at extreme weights (300 vs 900) is the * signature typographic tension. */ --font-display: "BMWTypeNextLatin Light", Helvetica, Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif; --font-body: BMWTypeNextLatin, Helvetica, Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif; --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Monaco, Consolas, monospace; /* Type scale — DESIGN.md §3. 60px display is the defining BMW * gesture (uppercase, weight 300). 18px navigation tier sits * between body baseline (16) and section heading (32) — it's the * weight 900 nav-emphasis size that creates the 300↔900 contrast. */ --text-xs: 12px; --text-sm: 14px; --text-base: 16px; --text-lg: 18px; --text-xl: 24px; --text-2xl: 32px; --text-3xl: 44px; --text-4xl: 60px; /* Leading inverts the usual web convention here: body is tighter * (1.15) than display (1.30). DESIGN.md §3 — "Tight everything, * German engineering"; no line in the system breathes loose. */ --leading-body: 1.15; --leading-tight: 1.30; --tracking-display: 0; /* ─── Spacing ───────────────────────────────────────────────────── * 8px base unit. DESIGN.md §5 documents the full BMW scale (1, 5, 8, * 10, 12, 15, 16, 20, 24, 30, 32, 40, 45, 56, 60); mapped to the * schema's 4-8-12-16-20-24-32-48 tier where each tier aligns. */ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-12: 48px; /* ─── Section rhythm ────────────────────────────────────────────── * Showroom pacing — generous vertical envelope so each content band * feels spotlit between dark hero sections. Sized above the schema * default of 80px to honor BMW's premium breathing room. */ --section-y-desktop: 96px; --section-y-tablet: 64px; --section-y-phone: 40px; /* ─── Radius ────────────────────────────────────────────────────── * ZERO border-radius — non-negotiable BMW identity. DESIGN.md §5: * "BMW uses sharp corners exclusively — every element is a precise * rectangle. This is the most angular design system analyzed." * --radius-pill is also bound to 0 to honor the rule literally; * components needing circular dots use `border-radius: 50%` inline * at the call site rather than borrow the (square) pill token. */ --radius-sm: 0; --radius-md: 0; --radius-lg: 0; --radius-pill: 0; /* ─── Elevation ─────────────────────────────────────────────────── * No shadows. DESIGN.md §6 — "BMW uses virtually no shadows. Depth * is created entirely through the contrast between dark photographic * sections and white content sections." --elev-raised collapses to * `none`; --elev-ring stays available for input outlines and dense * configurator surfaces where hairline containment is still useful. */ --elev-flat: none; --elev-ring: 0 0 0 1px var(--border); --elev-raised: none; /* ─── Focus ring ────────────────────────────────────────────────── * Sharp 2px solid ring at BMW Focus Blue (--accent-hover = #0653b6). * No transparency, no glow — engineered precision instead of the * schema's soft accent-tinted halo. */ --focus-ring: 0 0 0 2px var(--accent-hover); /* ─── Motion ────────────────────────────────────────────────────── * Brisk, deliberate transitions. BMW's motion expresses precision, * not personality; schema defaults match the voice unchanged. */ --motion-fast: 150ms; --motion-base: 200ms; --ease-standard: cubic-bezier(0.2, 0, 0, 1); /* ─── Layout ────────────────────────────────────────────────────── * 1440px content max — fits BMW's wide-format layouts and the * "Large Desktop 1280–1440" breakpoint from DESIGN.md §8. Full-bleed * automotive photography extends beyond this; the container * constrains text columns only. Gutters step generously * (32 → 24 → 16) to keep the showroom margin even at mobile. */ --container-max: 1440px; --container-gutter-desktop: 32px; --container-gutter-tablet: 24px; --container-gutter-phone: 16px; }