Untitled Design System

A design system centered around a near-pure black canvas with white BMW Type Next Latin headlines in confident UPPERCASE. Brand energy is conveyed through full-bleed automotive photography. The M tricolor stripe is used as a brand-identity marker. Typography contrasts heavy display (700) with light body (300). Minimal UI chrome, generative spacing, and zero-radius shapes define the system.

Primary ({colors.primary} —#FFFFFF
Surface Soft ({colors.surface-soft} —#0D0D0D
M Blue Light ({colors.m-blue-light} —#0066B1
M Blue Dark ({colors.m-blue-dark} —#1C69D4
Headline
Aa
Search
Body
Aa
Label
Aa
Label

Color Palette

Brand & Accent

Surface

Hairlines & Borders

Text

Semantic

Typography

display-xlBMW Type Next Latin · 80px · Bold

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

display-lgBMW Type Next Latin · 56px · Bold

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

display-mdBMW Type Next Latin · 40px · Bold

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

display-smBMW Type Next Latin · 32px · Bold

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

title-lgBMW Type Next Latin · 24px · Bold

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

title-mdBMW Type Next Latin · 20px · Regular

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

title-smBMW Type Next Latin · 18px · Regular

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

label-uppercaseBMW Type Next Latin · 14px · Bold

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

body-mdBMW Type Next Latin · 16px · Light

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

body-smBMW Type Next Latin · 14px · Light

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

captionBMW Type Next Latin · 12px · Regular

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

buttonBMW Type Next Latin · 14px · Bold

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

nav-linkBMW Type Next Latin · 14px · Regular

Every letter tells a story worth reading, and every typeface gives that story a new voice waiting to be heard.

A design system centered around a near-pure black canvas with white BMW Type Next Latin headlines in confident UPPERCASE. Brand energy is conveyed through full-bleed automotive photography. The M tricolor stripe is used as a brand-identity marker. Typography contrasts heavy display (700) with light body (300). Minimal UI chrome, generative spacing, and zero-radius shapes define the system.

Components

Buttons

m-stripe-divider

default

Elevation & Depth

flat
hairline
card
photo

Do's & Don'ts

Do

Use full-bleed automotive photography as the primary brand expression.
Maintain 700-weight display and 300-weight body contrast.
Apply UPPERCASE for display headlines and 1.5px spacing for all-caps labels.

Don't

Use M tricolor for buttons or background fills — it's strictly brand-identity only.
Apply rounded corners to primary components except circular icons.
Invert the black canvas; it's the system's foundational state.
Layout

### Spacing System

Base unit: 4px.

Tokens: {spacing.xxs} 4px · {spacing.xs} 8px · {spacing.sm} 12px · {spacing.md} 16px · {spacing.lg} 24px · {spacing.xl} 40px · {spacing.xxl} 64px · {spacing.section} 96px.

Section padding (vertical): {spacing.section} (96px) between major editorial bands.

Hero photo bands: {spacing.xxl} (64px) internal vertical padding around the hero h1 + sub-headline pair.

Card internal padding: {spacing.lg} (24px) for content and model cards; {spacing.xl} (40px) for spec-cell tables.

Gutters: {spacing.lg} (24px) between cards in 3-up grids; {spacing.md} (16px) inside footer columns.

### Grid & Container

Max content width: ~1440px centered on marketing pages — wider than typical SaaS to give photography breathing room.

Editorial body: Single 12-column grid; photo bands bleed full-bleed (no max-width).

Card grids: 3-up at desktop, 2-up at tablet, 1-up at mobile.

Footer: 4-column link list at desktop, 2-up at tablet, 1-up at mobile.

### Whitespace Philosophy

BMW M trusts photography to do the visual work. Whitespace around photography is restrained — the cars fill the frame, and copy sits below or beside them in tightly-aligned columns. Where whitespace appears (between body sections, around CTAs), it's always uniform {spacing.section} (96px). The system never adds atmospheric backdrops, gradients, or decoration — empty space stays as empty black canvas.

Shapes

### Border Radius Scale

| Token | Value | Use |

|---|---|---|

| {rounded.none} | 0px | All buttons, cards, photo containers, spec cells, inputs — the dominant radius |

| {rounded.xs} | 2px | Almost no use — reserved for legal CTAs |

| {rounded.sm} | 4px | Small toggle pills on configurator surfaces |

| {rounded.md} | 6px | Rare — small dropdown menu items |

| {rounded.full} | 9999px / 50% | Circular icon buttons, carousel arrows, chatbot launcher |

The radius hierarchy is "almost always 0, sometimes circular." This binary radius decision is a deliberate brand-language choice — sharp rectangles read as engineered precision; circles read as functional controls. Nothing in between.

### Photography Geometry

Hero photography fills full-width with no rounding. Photo cards inside grids retain {rounded.none} corners, edge-to-edge images. Carbon-wheel detail shots and motorsport-pit photos use 16:9 or 21:9 cinema-aspect ratios. Driver portraits in racing-team grids use 4:5 portrait crops, also with sharp corners.

Responsive Behavior

### Breakpoints

| Name | Width | Key Changes |

|---|---|---|

| Mobile | < 768px | Hamburger nav; hero h1 scales 80→48px; demo grid 1-up; photo cards stack full-width; footer 4 cols → 1 |

| Tablet | 768–1024px | Top nav stays horizontal but tightens; 2-up card grids; spec tables 2-up |

| Desktop | 1024–1440px | Full top-nav; 3-up card grids; spec tables 4-up |

| Wide | > 1440px | Same as desktop with more breathing room; max content 1440px |

### Touch Targets

{component.button-primary} renders at 48 × 48px minimum — meets WCAG AAA.

{component.button-icon} and {component.carousel-arrow} are exactly 48 × 48 — comfortably above the 44 × 44 minimum.

{component.text-input} height is 48px.

Category tabs render as text-only labels with 12px vertical padding; effective tap area meets 44px with surrounding spacing.

### Collapsing Strategy

Top nav collapses to a hamburger sheet at < 768px; the menu opens as a full-screen black overlay with the M tricolor stripe at the top.

Photography stays full-bleed at every breakpoint — never collapses to a margin'd container.

Card grids reduce columns rather than scaling cards down; photography retains its native aspect ratio.

Spec tables collapse from 4-up to 2-up to 1-up; spec values stay at {typography.display-sm} regardless of column count.

The M-stripe divider stays at 4px height across all breakpoints.

### Image Behavior

Hero photography crops responsively — wider crops at desktop, vertical crops on mobile.

Lifestyle and motorsport photos retain native aspect ratios; the system never letterboxes or pillarboxes.

The M wordmark + tricolor logo scales proportionally with viewport width.

Iteration Guide

1. Focus on ONE component at a time. Reference its YAML key ({component.hero-photo-band}, {component.spec-cell}).

2. New components default to {rounded.none} (0px). Only use {rounded.full} if it's a circular icon button.

3. Variants (-active, -disabled) live as separate entries in components:.

4. Use {token.refs} everywhere — never inline hex.

5. Never document hover states. Default and Active/Pressed only.

6. Display headlines stay UPPERCASE 700; body stays sentence-case 300. Never blur the contrast.

7. The M tricolor is brand-identity-only — never extend it to system tokens for "primary action."

8. When in doubt about emphasis: bigger photography before bigger type.

Known Gaps

The dembrandt frequency analyzer captured the white text (count 955) as the highest-frequency token. The black canvas was inferred from screenshot — dembrandt's body-background sampling didn't surface it as a top palette entry, but the page is unambiguously black-on-white-text.

The exact M tricolor stops are documented from public BMW brand guidelines; the screenshots show the stripe as a small element but pixel-sampling at this resolution doesn't reliably distinguish #0066b1 from #1c69d4. Treat the documented stops as canonical based on BMW Design Works' published brand spec.

BMW Type Next Latin weight axis values beyond Light (300) and regular (700) are not documented — only the static weights observed in screenshots.

Animation and transition timings (photo carousel transitions, hover-reveal effects, configurator interactions) are not in scope.

Form validation states beyond {component.text-input} defaults are not extracted — error / success input variants would need a configurator or order flow to confirm.

The configurator surface (vehicle build pages with color / wheel / interior pickers) was not in the analyzed URL set; its swatch grid, comparison panels, and price-summary card are not documented here.

The cookie consent overlay obscured part of the homepage hero in the captured screenshot; secondary hero treatments (different car models cycling through the hero band) may carry variations not captured.

Download .md

License MIT
Uploaded 1 weeks ago
Version v1
File size 23.5 KB
Downloads 14
Copies 1

Use with MCP

Using designmd mcp, download the design system https://designmd.ai/brunopetrovic/bmw-m and implement it in my code

Don't have the MCP? Install it here