─── Examples (illustrative) — auto-derived; resolve any TO_FILL markers below ───
---
version: alpha
name: Vodafone-Inspired-design-analysis
description: An inspired interpretation of Vodafone's design language — a telecom super-brand whose web surface alternates between editorial photography hero bands with massive uppercase display headlines and clean white content bands, anchored by the company's signature scarlet red CTA and the proprietary Vodafone display sans set at impossibly heavy 800 weight.
colors:
primary: "#e60000"
on-primary: "#ffffff"
ink: "#25282b"
body: "#7e7e7e"
mute: "#bebebe"
canvas: "#ffffff"
canvas-soft: "#f2f2f2"
on-dark: "#ffffff"
typography:
display-hero:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 144px
fontWeight: 800
lineHeight: 114px
letterSpacing: -1px
display-xxl:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 126px
fontWeight: 800
lineHeight: 113px
letterSpacing: -1px
display-xl:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 90px
fontWeight: 800
lineHeight: 84px
display-lg:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 48px
fontWeight: 300
lineHeight: 52px
display-md:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 40px
fontWeight: 300
lineHeight: 44px
display-sm:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 32px
fontWeight: 700
lineHeight: 40px
display-xs:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 24px
fontWeight: 700
lineHeight: 24px
eyebrow-uppercase:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 16px
fontWeight: 800
lineHeight: 24px
body-lg:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 22px
fontWeight: 400
lineHeight: 24px
body-md:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 18px
fontWeight: 400
lineHeight: 28px
body-md-strong:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 18px
fontWeight: 600
lineHeight: 28px
body-sm:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 16px
fontWeight: 400
lineHeight: 20px
body-sm-strong:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 16px
fontWeight: 700
lineHeight: 22px
caption:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 14px
fontWeight: 400
lineHeight: 16px
caption-strong:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 14px
fontWeight: 700
lineHeight: 21px
caption-uppercase:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 12px
fontWeight: 600
lineHeight: 16px
letterSpacing: 0.5691px
button-md:
fontFamily: Vodafone, Vodafone Rg, Helvetica Neue, Arial, sans-serif
fontSize: 18px
fontWeight: 400
lineHeight: 28px
rounded:
none: 0px
xs: 1px
sm: 6px
card: 6px
pill-md: 32px
pill-lg: 60px
full: 9999px
spacing:
xxs: 2px
xs: 4px
sm: 8px
md: 12px
lg: 16px
xl: 20px
2xl: 24px
3xl: 32px
components:
nav-bar:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-dark}"
typography: "{typography.body-sm}"
padding: "{spacing.lg} {spacing.3xl}"
nav-link:
textColor: "{colors.on-dark}"
typography: "{typography.body-sm}"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
borderColor: "{colors.primary}"
typography: "{typography.button-md}"
rounded: "{rounded.pill-lg}"
padding: "{spacing.md} {spacing.2xl}"
button-outline-red:
backgroundColor: "{colors.canvas}"
textColor: "{colors.primary}"
borderColor: "{colors.primary}"
typography: "{typography.button-md}"
rounded: "{rounded.pill-lg}"
padding: "{spacing.md} {spacing.2xl}"
button-outline-dark:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
borderColor: "{colors.ink}"
typography: "{typography.button-md}"
rounded: "{rounded.pill-lg}"
padding: "{spacing.md} {spacing.2xl}"
button-icon-circular:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
borderColor: "{colors.canvas}"
rounded: "{rounded.full}"
text-input:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
borderColor: "{colors.ink}"
typography: "{typography.body-sm}"
rounded: "{rounded.sm}"
padding: "{spacing.md} {spacing.lg}"
badge-chip:
backgroundColor: "{colors.canvas-soft}"
textColor: "{colors.ink}"
typography: "{typography.caption-strong}"
rounded: "{rounded.pill-md}"
padding: "{spacing.xs} {spacing.md}"
card-content:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.body-md}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
card-hero:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.display-sm}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
hero-band-dark:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-dark}"
typography: "{typography.display-hero}"
padding: "{spacing.3xl} {spacing.3xl}"
hero-band-red:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.display-xl}"
padding: "{spacing.3xl} {spacing.3xl}"
content-band-light:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.display-md}"
padding: "{spacing.3xl} {spacing.3xl}"
speechmark-logo-orb:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
rounded: "{rounded.sm}"
divider-on-dark:
borderColor: "{colors.on-dark}"
footer:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-dark}"
typography: "{typography.body-sm}"
padding: "{spacing.3xl} {spacing.3xl}"
ex-pricing-tier:
description: "Default tier card. Mirrors card-content chrome with canvas-soft surface and a hairline border."
backgroundColor: "{colors.canvas-soft}"
textColor: "{colors.ink}"
borderColor: "{colors.mute}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
ex-pricing-tier-featured:
description: "Featured tier — polarity-flipped to ink with white text and white pill CTA inside."
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
ex-product-selector:
description: "Tariff-tier picker — repurposed as the brand's plan selector with badge-chip chips inside the frame."
backgroundColor: "{colors.canvas-soft}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
ex-cart-drawer:
description: "Subscription summary — line items per tariff add-on, light hairline dividers."
backgroundColor: "{colors.canvas}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
item-divider: "{colors.mute}"
ex-app-shell-row:
description: "Sidebar nav row. Active state uses brand primary as a left-edge indicator bar."
backgroundColor: "{colors.canvas}"
activeIndicator: "{colors.primary}"
rounded: "{rounded.sm}"
padding: "{spacing.md} {spacing.lg}"
ex-data-table-cell:
description: "Default data-table cell chrome. Header uses caption-uppercase mono-style eyebrow; body uses body-sm."
headerBackground: "{colors.canvas-soft}"
headerTypography: "{typography.caption-uppercase}"
bodyTypography: "{typography.body-sm}"
cellPadding: "{spacing.md} {spacing.lg}"
rowBorder: "{colors.mute}"
ex-auth-form-card:
description: "Sign-in / sign-up card. Mirrors card-content chrome with text-input primitives inside."
backgroundColor: "{colors.canvas-soft}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
ex-modal-card:
description: "Modal dialog surface — same chrome as card-content; brand uses scrim, not card shadow."
backgroundColor: "{colors.canvas}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
ex-empty-state-card:
description: "Empty-state illustration frame on canvas-soft with generous interior padding."
backgroundColor: "{colors.canvas-soft}"
rounded: "{rounded.card}"
padding: "{spacing.3xl}"
captionTypography: "{typography.body-md}"
ex-toast:
description: "Toast notification surface — card-content shape with caption-strong body."
backgroundColor: "{colors.canvas}"
rounded: "{rounded.sm}"
padding: "{spacing.md} {spacing.lg}"
typography: "{typography.body-sm}"
---
Overview
Section 01Vodafone is a global telecom super-brand and its web surface delivers exactly that posture: heroic editorial photography, occasionally cropping a portrait so tight only an eye line and a phone hand are visible, with a single colossal uppercase headline floating on top in the brand's proprietary heavy display weight. The page reads like a campaign poster more than a corporate site, then breaks into a calmer content rhythm of light-canvas story cards and a single red marker (the iconic speechmark logo) drawing the eye to the brand's centre of gravity. There is no second accent colour competing — the entire decorative palette is `{colors.primary}` Vodafone red, near-black `{colors.ink}`, and the surrounding white and grayscale neutrals.
Type is the second decisive voice. Vodafone's custom display sans (extracted as `Vodafone`) carries every headline at impossibly heavy weight 800 in upper case for hero scale (`{typography.display-hero}` 144 px, `{typography.display-xxl}` 126 px) and at lighter weight 300 for the sub-displays that follow. Body text stays in the same family at weight 400 with neutral tracking. The contrast between display weight 800 and display weight 300 IS the brand's typographic story: a shout, then a calm sentence.
Every interactive CTA renders as a generously rounded pill (`{rounded.pill-lg}` 60 px) — Vodafone has never used a square button on its marketing surface in years, and the brand's pill scale ladder runs from 32 px (badge pills) through 60 px (CTA pills) up to 9999 px (icon circular containers). Cards stay gentler at `{rounded.card}` 6 px.
**Key Characteristics:**
Colors
Section 02Brand & Accent
Section 03Surface
Section 04Text
Section 05Semantic
Section 06The brand does not maintain a separate semantic palette. The primary red doubles as validation / destructive signal when needed; success / warning use are reserved for in-product contexts and are not part of the documented marketing system.
Typography
Section 07Font Family
Section 08A single custom face carries the entire system: **Vodafone**, the brand's proprietary display sans. The face spans weights 300 (light), 400 (regular), 600, 700, and 800 — every role in the system pulls from this one family. There is no mono companion; technical labels (rare on the marketing surface) borrow the same face at smaller sizes.
The icomoon icon-font is loaded for proprietary glyphs but does not render as a typographic role.
Hierarchy
Section 09| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display-hero}` | 144px | 800 | 114px | -1px | The hero stencil (`"STAY CONNECTED"`) — uppercase, ultra-tight tracking, brand's signature size. |
| `{typography.display-xxl}` | 126px | 800 | 113px | -1px | Slightly smaller hero variant. |
| `{typography.display-xl}` | 90px | 800 | 84px | 0 | Mid-hero scale. |
| `{typography.display-lg}` | 48px | 300 | 52px | 0 | Section-headline sub-display in the lighter weight. |
| `{typography.display-md}` | 40px | 300 | 44px | 0 | Sub-section displays. |
| `{typography.display-sm}` | 32px | 700 | 40px | 0 | Card headings, story-card titles. |
| `{typography.display-xs}` | 24px | 700 | 24px | 0 | Inline display micro-headings. |
| `{typography.eyebrow-uppercase}` | 16px | 800 | 24px | 0 | Uppercase eyebrow tags above section headlines. |
| `{typography.body-lg}` | 22px | 400 | 24px | 0 | Lead body paragraphs. |
| `{typography.body-md}` | 18px | 400 | 28px | 0 | Default paragraph body. |
| `{typography.body-md-strong}` | 18px | 600 | 28px | 0 | Bolded inline body. |
| `{typography.body-sm}` | 16px | 400 | 20px | 0 | Secondary body. |
| `{typography.body-sm-strong}` | 16px | 700 | 22px | 0 | Bolded short body. |
| `{typography.caption}` | 14px | 400 | 16px | 0 | Captions, fine print. |
| `{typography.caption-strong}` | 14px | 700 | 21px | 0 | Bold captions, badge labels. |
| `{typography.caption-uppercase}` | 12px | 600 | 16px | 0.57px | Uppercase metadata, footer eyebrows. |
| `{typography.button-md}` | 18px | 400 | 28px | 0 | Default button label. |
Principles
Section 010Note on Font Substitutes
Section 011The Vodafone display sans is proprietary. Open-source substitutes:
Layout
Section 012Spacing System
Section 013Grid & Container
Section 014Whitespace Philosophy
Section 015The hero's massive display headline owns the whole top of the page; whitespace below is generous to let the second band breathe. Inside content cards, headline and copy hug close (`{spacing.sm}` 8 px gap), then a wider gap (`{spacing.3xl}`) before the next card. The footer band is dark and dense.
Responsive Strategy
Section 016Breakpoints
Section 017| Name | Width | Key Changes |
|---|---|---|
| Mobile | < 600px | Hero display scales down to ~64 px; story-card grid drops to 1-up; nav collapses to hamburger. |
| Tablet | 600–1023px | Story-card grid 2-up; display headlines drop to 90 – 110 px. |
| Desktop | 1024–1399px | Full display headline at 126 – 144 px; 2-up story grid. |
| Ultra-wide | ≥ 1400px | Container caps at ~1400 px; bands stay edge-to-edge in colour. |
Touch Targets
Section 018The `button-primary` pill renders at ~52 px tall (12 px vertical padding + 28 px line-height). All buttons comfortably meet WCAG AAA at every breakpoint.
Collapsing Strategy
Section 019Image Behavior
Section 020Elevation & Depth
Section 021| Level | Treatment | Use |
|---|---|---|
| Level 0 — Flat | No shadow, no border. | Default for most cards and panels — surface contrast does the elevation work. |
| Level 1 — Hairline | 1 px solid `{colors.ink}` border. | Form inputs, the `divider-on-dark` between footer columns. |
| Level 2 — Border on Dark | 1 px solid `{colors.on-dark}` border on `{colors.ink}` surfaces. | Outline buttons sitting on the dark hero band. |
The brand does not use soft drop shadows; depth comes from polarity-flip between `{colors.ink}` and `{colors.canvas}` bands.
Decorative Depth
Section 022Shapes
Section 023Border Radius Scale
Section 024| Token | Value | Use |
|---|---|---|
| `{rounded.none}` | 0px | Full-bleed hero bands, footer, banner strips. |
| `{rounded.xs}` | 1px | Tightest inline indicator (rarely used). |
| `{rounded.sm}` | 6px | The brand's canonical content radius — applied to images and inputs. |
| `{rounded.card}` | 6px | Card chrome and image frames (alias for `sm`). |
| `{rounded.pill-md}` | 32px | Badge / chip pills. |
| `{rounded.pill-lg}` | 60px | The brand's signature CTA pill — every primary and secondary button. |
| `{rounded.full}` | 9999px | Circular icon containers (e.g., video play/pause). |
Photography Geometry
Section 025Components
Section 026Buttons
Section 027**`button-primary`** — the red pill CTA, brand's primary conversion target.
**`button-outline-red`** — the secondary pill, red-text-on-white with red border.
**`button-outline-dark`** — the tertiary pill, ink-text-on-white with ink border.
**`button-icon-circular`** — the round white icon button (video play / pause / chevron).
Cards & Containers
Section 028**`card-content`** — the default story-card chrome.
**`card-hero`** — the slightly larger card variant used as the lead story.
Inputs & Forms
Section 029**`text-input`** — the canonical text input.
Navigation
Section 030**`nav-bar`** — the dark top nav, fixed to the page top.
**`nav-link`** — the link items inside `nav-bar`.
**`footer`** — the dark footer band.
Signature Components
Section 031**`hero-band-dark`** — the dark navy/ink hero band hosting the massive display headline.
**`hero-band-red`** — the rare full-bleed red hero used on signature campaigns.
**`content-band-light`** — the white content band that follows every hero.
**`speechmark-logo-orb`** — the red square hosting Vodafone's quotation-mark icon. The brand's visual anchor.
**`badge-chip`** — the inline metadata pill used for category tags inside story cards.
**`divider-on-dark`** — the 1 px hairline used between sections / columns on dark surfaces.
Examples (illustrative)
Section 032> Auto-derived kit-mirror demonstration surfaces (`scripts/derive-examples-block.mjs`). Each `ex-*` entry references brand-native primitives so downstream consumers (`/preview-design`, `/generate-kit`) re-skin the same 10 surfaces consistently. `TO_FILL` markers indicate missing primitives — resolve in the LLM judgment pass.
**`ex-pricing-tier`** — Default Pricing tier card. Re-uses feature-card chrome with brand canvas-soft surface.
**`ex-pricing-tier-featured`** — Featured/highlighted tier — polarity-flipped surface (dark fill + light text in light mode, light fill + dark text in dark mode).
**`ex-product-selector`** — What's Included summary card — re-purposed for SaaS / B2B verticals (NOT a literal product gallery).
**`ex-cart-drawer`** — Subscription summary — re-purposed for SaaS / B2B (line items per add-on, not literal cart).
**`ex-app-shell-row`** — Sidebar nav row inside the App Shell example. Active state uses brand primary as the indicator.
**`ex-data-table-cell`** — Default data-table th + td chrome. Header uses mono-caps eyebrow typography; body uses body-sm.
**`ex-auth-form-card`** — Sign-in / sign-up card. Re-uses feature-card chrome with text-input primitives inside.
**`ex-modal-card`** — Modal dialog surface — same chrome as feature-card with elevated shadow.
**`ex-empty-state-card`** — Empty-state illustration frame.
**`ex-toast`** — Toast notification surface — feature-card shape + medium shadow.