DESIGN.md inspired by Southwest Airlines
Heart-warm low-cost airline — Southwest Sans on light grey, yellow CTA voltage with navy ink, sharp 2px corners.
Compare to…
- bg
#f4f4f4 - bg-alt
#ffffff - surface
#f4f4f4 - surface-white
#ffffff - surface-soft
#ebebeb - surface-navy
#111b40 - surface-blue
#304cb2 - surface-yellow-soft
#fff6dd - text AAA · 19.1
#000000 - text-body
#1a1a1a - text-muted
#565656 - text-soft
#767676 - text-on-brand
#111b40 - text-on-navy
#ffffff - text-on-blue
#ffffff - brand — · 1.5
#ffbf27 - brand-hover
#f0b01c - brand-active
#dca110 - on-brand
#111b40 - blue
#304cb2 - blue-hover
#26409c - blue-active
#1d3380 - navy
#111b40 - navy-2
#1a2a5e - red-heart
#d31245 - link
#304cb2 - link-hover
#26409c - link-visited
#5a3a9e - border AAA · 19.1
#000000 - border-soft
#d4d4d4 - border-strong AAA · 19.1
#000000 - border-focus
#304cb2 - divider
#d4d4d4 - scrim
rgba(17,27,64,0.55) - shadow-card
rgba(17,27,64,0.08) - shadow-elev
rgba(17,27,64,0.16) - shadow-deep
rgba(17,27,64,0.24) - success
#1a7a3c - success-soft
#e6f4ec - warning
#b25f00 - warning-soft
#fff4e3 - danger
#c4123c - danger-soft
#fdeef1 - info
#304cb2 - info-soft
#eaeefb - star-rating
#ffbf27
- step-0 0px
- step-1 4px
- step-2 8px
- step-3 12px
- step-4 16px
- step-5 24px
- step-6 32px
- step-7 48px
- step-8 64px
- step-9 96px
- micro
2px - sm
4px - md
8px - lg
12px - xl
16px - pill
9999px
Maps the 8 canonical role names to this entry's actual tokens. Use these to plug the design into role-aware tools — shadcn/ui themes, role-aware Tailwind plugins, atelier-lint — without hard-coding token names.
- background → bg
- foreground → text
- primary → brand
- primary-foreground → on-brand
- accent → —
- muted → text-muted
- border → border
- ring → link
Southwest threads the needle between mid-century American friendly-functional branding (warm, optimistic, people-first flat color and approachable type) and the low-cost-carrier playbook it largely invented (no-frills-but-fun, transparent pricing, scrappy visual honesty). It rejects both the cold corporate gravitas of legacy full-service carriers and the harsh bargain-bin austerity of ultra-low-cost rivals — delivering low-cost value with genuine warmth. The yellow voltage, the navy-on-yellow CTA, the sharp 2px corners, the generous body line-height, and the playful "Wanna Get Away?" voice all serve one coherent personality: friendly, dependable, fun, fair. The custom Southwest Sans typeface is the keystone, humanist and legible across every device and connection its price-conscious customers travel with.
- Friendly low-cost-carrier branding and warm-modern airline UX
- Blue + yellow value-signalling palette read as trustworthy, accessible, fun
- Playful-but-functional brand voice with bold flat color and warmth in a commerce context
- Mid-century American flat-color, logo-as-warmth corporate identity tradition
- Humanist and neo-grotesque sans ancestry behind Southwest Sans
theme.extend block for tailwind.config.js
:root { --bg, --text, --brand, … } you can paste anywhere
W3C Design Tokens Community Group format
Importable into Figma → Variables → Import
---
name: Southwest Airlines
tagline: Heart-warm low-cost airline — Southwest Sans on light grey, yellow CTA voltage with navy ink, sharp 2px corners.
updated_at: 2026-05-28T22:15:47.760Z
published_at: 2026-05-28T22:15:47.760Z
author: webdesignhot
source_url: https://www.southwest.com
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [saas]
tags: [light, bold, sans, travel, airline, friendly, no-frills, booking-funnel]
preview_swatch: ['#f4f4f4', '#ffbf27', '#304cb2']
related: []
description: 'Southwest Airlines runs the warmest low-cost booking surface in US aviation — a soft light-grey canvas (`#f4f4f4`) carrying pure-black (`#000000`) ink, anchored on the unmistakable **Southwest yellow** (`#ffbf27`) that fires on every primary CTA with deep **navy text** (`#111b40`) riding on top, plus a confident **bold blue** (`#304cb2`) on links and accents. The brand is built around "the Heart" — a tri-color heart logo in red (`#d31245`), yellow, and blue that signals warmth, fun, and people-first service inside a no-frills-but-friendly register. Type runs **Southwest Sans**, the in-house custom sans, at 400–700 weights — display headlines bold and tight, body 16/400 at a generous 1.55 line-height because the brand wants to feel approachable, not crammed. Corners stay **sharp at 2px** on CTAs — Southwest reads as direct, dependable, and a little scrappy rather than glossy or premium. The result is a friendly commerce surface where the yellow button is always the loudest thing on the page, the blue links carry you through the funnel, and the whole thing feels like it''s smiling at you while it sells you a $79 fare.'
lineage:
summary: 'Southwest threads the needle between mid-century American friendly-functional branding (warm, optimistic, people-first flat color and approachable type) and the low-cost-carrier playbook it largely invented (no-frills-but-fun, transparent pricing, scrappy visual honesty). It rejects both the cold corporate gravitas of legacy full-service carriers and the harsh bargain-bin austerity of ultra-low-cost rivals — delivering low-cost value with genuine warmth. The yellow voltage, the navy-on-yellow CTA, the sharp 2px corners, the generous body line-height, and the playful "Wanna Get Away?" voice all serve one coherent personality: friendly, dependable, fun, fair. The custom Southwest Sans typeface is the keystone, humanist and legible across every device and connection its price-conscious customers travel with.'
influences:
- name: JetBlue
role: Friendly low-cost-carrier branding and warm-modern airline UX
url: https://www.jetblue.com
- name: IKEA
role: Blue + yellow value-signalling palette read as trustworthy, accessible, fun
url: https://www.ikea.com
- name: Mailchimp
role: Playful-but-functional brand voice with bold flat color and warmth in a commerce context
url: https://mailchimp.com
- name: Paul Rand
role: Mid-century American flat-color, logo-as-warmth corporate identity tradition
url: https://www.paulrand.design
- name: Frutiger / Helvetica
role: Humanist and neo-grotesque sans ancestry behind Southwest Sans
url: https://www.linotype.com
# Canonical 8-role aliases (bg / text / brand / border / accent / muted / surface / danger).
# Maps role names to this entry's actual token names so role-aware
# downstream tools resolve `theme.background` → entry's `bg`, etc.
# Auto-generated by scripts/add-aliases.mjs — do not edit manually;
# regenerate after changing color token names.
aliases:
background: bg
foreground: text
primary: brand
primary-foreground: on-brand
muted: text-muted
border: border
ring: link
colors:
bg: '#f4f4f4' # canvas — soft light grey, the default page floor
bg-alt: '#ffffff' # pure-white alternate band, cards lift off the grey
surface: '#f4f4f4' # default surface inherits the grey canvas
surface-white: '#ffffff' # white card surface that lifts off the grey
surface-soft: '#ebebeb' # alt rows, disabled fields, subtle wells
surface-navy: '#111b40' # deep navy band — footer, masthead accents
surface-blue: '#304cb2' # bold-blue feature band
surface-yellow-soft: '#fff6dd' # soft yellow promo tint behind savings copy
text: '#000000' # primary ink — pure black, maximum punch
text-body: '#1a1a1a' # body copy — a hair off pure black for long reads
text-muted: '#565656' # secondary metadata, captions, fine print
text-soft: '#767676' # faint counts, legend text, placeholder ink
text-on-brand: '#111b40' # navy ink that rides on the yellow CTA
text-on-navy: '#ffffff' # white on the navy band
text-on-blue: '#ffffff' # white on the bold-blue band
brand: '#ffbf27' # Southwest yellow — the primary CTA voltage
brand-hover: '#f0b01c' # CTA yellow hover — slightly deeper
brand-active: '#dca110' # pressed yellow at maximum depth
on-brand: '#111b40' # navy text on the yellow button
blue: '#304cb2' # bold Southwest blue — links, accents, secondary CTA
blue-hover: '#26409c' # link / blue hover deepens
blue-active: '#1d3380' # pressed blue
navy: '#111b40' # deep navy — text-on-brand, dark bands, headings option
navy-2: '#1a2a5e' # secondary navy for layered dark surfaces
red-heart: '#d31245' # the Heart red — logo accent, used very sparingly
link: '#304cb2' # default inline link — bold blue
link-hover: '#26409c' # link hover
link-visited: '#5a3a9e' # visited-link purple (browser-respectful convention)
border: '#000000' # sampled hairline — Southwest draws crisp black 1px rules
border-soft: '#d4d4d4' # soft grey divider for low-contrast separation
border-strong: '#000000' # input outline, emphasis rule
border-focus: '#304cb2' # focused control thickens to bold blue
divider: '#d4d4d4' # 1px section divider on grey
scrim: 'rgba(17,27,64,0.55)' # navy-tinted modal backdrop
shadow-card: 'rgba(17,27,64,0.08)'
shadow-elev: 'rgba(17,27,64,0.16)'
shadow-deep: 'rgba(17,27,64,0.24)'
success: '#1a7a3c' # confirmation green — "Flight booked"
success-soft: '#e6f4ec'
warning: '#b25f00' # advisory amber-brown — "Only 2 seats left"
warning-soft: '#fff4e3'
danger: '#c4123c' # validation error red — close cousin of the Heart red
danger-soft: '#fdeef1'
info: '#304cb2' # informational — uses the brand blue
info-soft: '#eaeefb'
star-rating: '#ffbf27' # rating fill reuses the brand yellow
typography:
display:
family: '"Southwest Sans", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
weights: [500, 600, 700]
opentype-features: ['tnum', 'kern']
body:
family: '"Southwest Sans", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
weights: [400, 500, 600]
mono:
family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace'
weights: [400, 500]
scale:
display-hero: { size: 80, weight: 700, lineHeight: 1.0, tracking: '-0.03em', family: display }
display-lg: { size: 56, weight: 700, lineHeight: 1.05, tracking: '-0.02em', family: display }
h1: { size: 40, weight: 700, lineHeight: 1.1, tracking: '-0.018em', family: display }
h2: { size: 32, weight: 600, lineHeight: 1.2, tracking: '-0.012em', family: display }
h3: { size: 24, weight: 600, lineHeight: 1.25, tracking: '-0.005em', family: display }
h4: { size: 20, weight: 600, lineHeight: 1.3, tracking: '0', family: body }
title-md: { size: 18, weight: 600, lineHeight: 1.35, tracking: '0', family: body }
body-lg: { size: 18, weight: 400, lineHeight: 1.55, tracking: '0', family: body }
body: { size: 16, weight: 400, lineHeight: 1.55, tracking: '0', family: body }
body-sm: { size: 14, weight: 400, lineHeight: 1.5, tracking: '0', family: body }
label: { size: 13, weight: 500, lineHeight: 1.4, tracking: '0', family: body }
caption: { size: 12, weight: 500, lineHeight: 1.4, tracking: '0.02em', family: body }
button: { size: 16, weight: 600, lineHeight: 1.0, tracking: '0.01em', family: body }
button-sm: { size: 14, weight: 600, lineHeight: 1.0, tracking: '0.01em', family: body }
nav-link: { size: 15, weight: 600, lineHeight: 1.0, tracking: '0', family: body }
price: { size: 32, weight: 700, lineHeight: 1.0, tracking: '-0.01em', family: display, opentype: ['tnum'] }
price-sm: { size: 14, weight: 400, lineHeight: 1.0, tracking: '0', family: body, opentype: ['tnum'] }
badge: { size: 11, weight: 700, lineHeight: 1.2, tracking: '0.06em', family: body, transform: uppercase }
radius:
micro: 2 # CTAs, buttons, inputs — Southwest's sharp signature corner
sm: 4 # chips, small tags
md: 8 # secondary buttons in some surfaces, segmented controls
lg: 12 # cards, modals
xl: 16 # feature cells, hero callout panels
pill: 9999 # status pills, filter chips, Rapid Rewards tier markers
spacing:
base: 4
scale: [0, 4, 8, 12, 16, 24, 32, 48, 64, 96]
layout:
page-width: 1280
prose-width: 720
header-height: 64
search-bar-height: 56
footer-nav-width: 1280
components:
button-primary:
bg: '#ffbf27'
color: '#111b40'
radius: 2
padding: '12px 24px'
height: 48
font: button
use: 'Book, Search flights, Continue — the yellow voltage CTA, navy text, the loudest thing on the page.'
button-primary-hover:
bg: '#f0b01c'
color: '#111b40'
radius: 2
use: 'Hover — yellow deepens slightly, navy text holds.'
button-primary-active:
bg: '#dca110'
color: '#111b40'
radius: 2
use: 'Pointer-down — yellow at maximum depth.'
button-secondary:
bg: '#304cb2'
color: '#ffffff'
radius: 2
padding: '12px 24px'
height: 48
font: button
use: 'Secondary commerce action — bold-blue fill, white text. "Manage reservation", "Check in".'
button-outline:
bg: 'transparent'
color: '#304cb2'
border: '2px solid #304cb2'
radius: 2
padding: '11px 23px'
height: 48
use: 'Tertiary action over light surfaces — bold-blue outline + text. "View details", "Add a flight".'
button-text:
bg: 'transparent'
color: '#304cb2'
use: 'Inline text action — bold-blue, underlined on hover. "See fare rules", "Edit search".'
search-bar:
bg: '#ffffff'
color: '#000000'
radius: 2
height: 56
border: '1px solid #000000'
use: 'Flight search — From / To / Depart / Return segments terminating in a yellow Search button.'
card:
bg: '#ffffff'
color: '#000000'
radius: 12
border: '1px solid #d4d4d4'
padding: 24
use: 'Fare card, deal card, content tile — white surface lifting off the grey canvas.'
card-hover:
bg: '#ffffff'
radius: 12
shadow: 'rgba(17,27,64,0.16) 0 6px 20px'
use: 'Hover — shadow deepens, navy-tinted; no transform.'
fare-card:
bg: '#ffffff'
color: '#000000'
radius: 12
border: '2px solid #304cb2'
use: 'Selectable fare tier (Wanna Get Away / Anytime / Business Select) — blue outline, price in tnum.'
text-input:
bg: '#ffffff'
color: '#000000'
radius: 2
height: 48
padding: '12px 14px'
border: '1px solid #000000'
focus: 'border thickens to 2px bold blue (#304cb2) + 2px outline-offset ring'
use: 'Form fields — name, confirmation number, email. Crisp black hairline at rest.'
select:
bg: '#ffffff'
color: '#000000'
radius: 2
height: 48
border: '1px solid #000000'
use: 'Dropdowns — passenger count, cabin, promo code. Chevron in navy.'
badge-deal:
bg: '#ffbf27'
color: '#111b40'
radius: 4
padding: '3px 8px'
font: badge
use: '"LOW FARE" / "DEAL" — yellow ground, navy uppercase text.'
badge-status:
bg: '#111b40'
color: '#ffbf27'
radius: 9999
padding: '4px 12px'
font: badge
use: 'Rapid Rewards tier marker ("A-LIST") — navy pill, yellow text.'
badge-new:
bg: '#304cb2'
color: '#ffffff'
radius: 4
padding: '3px 8px'
font: badge
use: '"NEW" / informational flag — bold-blue ground, white text.'
top-nav:
bg: '#ffffff'
color: '#111b40'
height: 64
border: '1px solid #d4d4d4'
use: 'White masthead, tri-color heart logo flush left, navy product tabs, yellow "Log in" / book CTA right.'
nav-link-active:
bg: 'transparent'
color: '#304cb2'
border-bottom: '3px solid #ffbf27'
use: 'Active top-nav tab — bold-blue label with a yellow underline bar.'
footer:
bg: '#111b40'
color: '#ffffff'
use: 'Deep-navy footer band, white link grid, yellow on hover, tri-color heart repeated.'
motion:
ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
ease-out-soft: 'cubic-bezier(0.0, 0, 0.2, 1)'
duration-fast: 150
duration-standard: 240
duration-slow: 320
card-hover-shadow: 'shadow tier 1 → 2 over 240ms standard ease, no transform'
button-hover: 'background yellow #ffbf27 → #f0b01c over 150ms standard'
modal-enter: 'scrim 200ms ease-out + dialog 280ms emphasized translate-y +12 → 0'
reduced-motion: 'respects prefers-reduced-motion: reduce — transforms suppressed, opacity-only.'
breakpoints:
mobile: 640
tablet: 1024
desktop: 1280
wide: 1536
shadows:
ambient: 'rgba(17,27,64,0.04) 0 1px 2px'
card: 'rgba(17,27,64,0.08) 0 2px 6px'
hover: 'rgba(17,27,64,0.16) 0 6px 20px'
dropdown: 'rgba(17,27,64,0.16) 0 8px 24px, rgba(17,27,64,0.04) 0 0 0 1px'
modal: 'rgba(17,27,64,0.24) 0 12px 40px'
ring: '0 0 0 2px #304cb2'
accessibility:
contrast-text-on-bg: 19.3 # #000000 on #f4f4f4 — AAA
contrast-text-on-brand: 11.8 # #111b40 on #ffbf27 — AAA
contrast-link-on-bg: 6.6 # #304cb2 on #f4f4f4 — AA body / AAA large
contrast-white-on-navy: 16.5 # #ffffff on #111b40 — AAA
contrast-white-on-blue: 7.4 # #ffffff on #304cb2 — AAA
contrast-muted-on-bg: 6.5 # #565656 on #f4f4f4 — AA
focus-ring: '2px solid #304cb2 + 2px outline offset — bold-blue ring, matches link colour'
reduced-motion-honored: true
touch-target-min: 48
keyboard-nav: 'Search: Tab From → To → Depart → Return → Passengers → Search. Fare grid: Tab cell → cell; Enter selects.'
dark-mode: null # Light-only public web. Southwest's brand is engineered around the warm light-grey canvas + yellow voltage.
---
## 1. Visual Theme & Atmosphere
Southwest Airlines is the friendliest commerce surface in US aviation — where legacy carriers project corporate gravitas and ultra-low-cost rivals project bargain austerity, Southwest projects *warmth*. The base canvas is a soft, approachable **light grey** (`#f4f4f4`) rather than clinical white, carrying **pure-black ink** (`#000000`) for maximum readability. Above that grey floor the whole page is organised around one job: get the yellow button noticed. **Southwest yellow** (`#ffbf27`) fires on every primary CTA, and unlike most brands it does *not* put white text on its accent — it rides **deep navy ink** (`#111b40`) on top, which gives the button its characteristic high-contrast, sunny-but-serious look. A second voltage of **bold blue** (`#304cb2`) carries links, secondary CTAs, and accent bands, and the famous tri-color **Heart** logo — red (`#d31245`) + yellow + blue — signals the people-first "we love you back" register that defines the brand.
The shape language is **sharp**. Primary CTAs and inputs round at just **2px** — almost square, but with the corner barely knocked off. This is a deliberate brand position: Southwest is direct, dependable, and a little scrappy. Soft pill buttons would read as premium-consumer or fintech; the near-square 2px corner reads as no-nonsense, like a boarding-pass kiosk that just works. Cards and modals get a more relaxed 12px so content tiles feel inviting, but anything you *press* — buttons, inputs, the search bar — stays crisp at 2px. The tension between sharp interactive elements and softer containers is the system's signature.
Type runs **Southwest Sans**, the airline's custom in-house typeface, across a friendly 400–700 range. Display headlines go big and bold and tight (hero up to 80px / 700 with -0.03em tracking), while body copy sits at a comfortable 16/400 with a generous **1.55 line-height** — the opposite of a dense booking grid like Booking.com. Southwest *wants* breathing room; the brand sells fun and low fares, and a crammed page would undercut the warmth. The result is big confident headlines floating over relaxed, readable body text, with the yellow CTA punctuating each section.
The atmosphere is **no-frills-but-fun**. There's a deliberate scrappiness — flat color blocks, crisp black hairlines, bold flat fills with little gloss — that signals "we pass the savings to you, not into a glossy website." But it never tips into austerity, because the yellow is sunny, the blue is confident, and the Heart keeps everything human. Semantic colors stay disciplined: yellow lives almost exclusively on primary CTAs and deal badges, blue lives on links and secondary actions, navy anchors dark bands and footer, and the Heart red is used *very* sparingly — mostly in the logo and the occasional love-themed campaign moment, never as a generic UI accent.
The overall feeling is a brand that is smiling at you while it efficiently sells you a flight. The grey canvas keeps things calm, the yellow button keeps you moving forward, the blue links keep you in the funnel, and the whole thing reads as approachable, trustworthy, and a little bit charming — exactly the "the Heart" personality Southwest has built its entire low-cost identity around.
**Key Characteristics:**
- Warm light-grey canvas (`#f4f4f4`) with pure-black ink (`#000000`) — calm, readable, not clinical white
- Signature yellow CTA (`#ffbf27`) carrying **navy text** (`#111b40`), never white — the brand's most recognisable move
- Bold blue (`#304cb2`) on every link and secondary action — confident, high-contrast, never timid
- Tri-color Heart logo (red `#d31245` + yellow + blue) signalling people-first warmth
- Sharp **2px** radius on CTAs and inputs — direct, dependable, anti-glossy; softer 12px on cards
- Southwest Sans custom display at 700 — big, bold, tightly tracked headlines up to 80px
- Generous body at 16/400 / 1.55 line-height — breathing room, the anti-dense register
- Strict color-by-function: yellow = primary CTA, blue = link/secondary, navy = dark bands, red = Heart only
- Crisp black 1px hairlines and flat color blocks — scrappy, savings-passed-to-you visual honesty
- Friendly, fun voice in microcopy ("Wanna Get Away?", "Low fares. Nothing to hide.") inside a commerce funnel
## 2. Color Palette & Roles
### Primary / Canvas
- **Canvas** (`#f4f4f4`) → `--bg`: the default page floor — a soft, warm light grey. Southwest has no public dark mode.
- **White surface** (`#ffffff`) → `--surface-white`: cards and the search bar lift off the grey on pure-white surfaces.
- **Ink** (`#000000`) → `--text`: the dominant text colour — pure black for maximum punch on the grey canvas.
- **Body ink** (`#1a1a1a`) → `--text-body`: long-form running text, a hair off pure black for comfortable reading.
### Brand
- **Southwest Yellow** (`#ffbf27`) → `--brand`: the primary CTA colour and the loudest element on every page. Deal badges, star rating fill.
- **Navy on yellow** (`#111b40`) → `--on-brand`: the deep navy ink that rides on every yellow button — never white.
- **Yellow Hover** (`#f0b01c`) → `--brand-hover`: CTA hover deepens the yellow slightly.
- **Yellow Active** (`#dca110`) → `--brand-active`: pressed yellow at maximum depth.
- **Heart Red** (`#d31245`) → `--red-heart`: the tri-color logo accent. Used *very* sparingly — logo and love-campaign moments only, never a generic UI accent.
### Accent
- **Bold Blue** (`#304cb2`) → `--blue`: the secondary brand voltage — links, secondary CTA fills, accent bands, info.
- **Blue Hover** (`#26409c`) → `--blue-hover`: link and blue-button hover deepens.
- **Navy** (`#111b40`) → `--navy`: deep navy for dark bands, footer, status pills, and the text-on-yellow ink.
- **Navy 2** (`#1a2a5e`) → `--navy-2`: secondary navy for layered dark surfaces and gradients.
- **Star Rating** (`#ffbf27`) → `--star-rating`: rating fill reuses the brand yellow; empty stars use `#d4d4d4`.
### Interactive
- **Link** (`#304cb2`) → `--link`: the default inline link — bold blue, confident, high-contrast.
- **Link Hover** (`#26409c`) → `--link-hover`: hover deepens the blue.
- **Link Visited** (`#5a3a9e`) → `--link-visited`: browser-respectful visited purple — users navigate many links per booking session.
- **Focus Border** (`#304cb2`) → `--border-focus`: focused controls thicken to a bold-blue 2px stroke + ring.
- **Selected** (`#ffbf27` underline / `#304cb2` label — active nav tabs; `#304cb2` outline — selected fare cards).
### Neutral Scale
- **Ink** (`#000000`) → `--text`: display, headings, primary labels
- **Body** (`#1a1a1a`) → `--text-body`: secondary running text
- **Muted** (`#565656`) → `--text-muted`: sub-titles, metadata, captions, fine print
- **Soft** (`#767676`) → `--text-soft`: faint counts, legend text, placeholder ink
- **Border Soft** (`#d4d4d4`) → `--border-soft`: low-contrast grey divider, card outlines on grey
- **Surface Soft** (`#ebebeb`) → `--surface-soft`: alt rows, disabled fields, subtle wells
### Surface & Borders
- **Canvas** (`#f4f4f4`) → `--bg`: page floor
- **White** (`#ffffff`) → `--surface-white`: card and search-bar surface
- **Surface Soft** (`#ebebeb`) → `--surface-soft`: disabled fields, alt rows
- **Surface Navy** (`#111b40`) → `--surface-navy`: footer band, dark feature sections
- **Surface Blue** (`#304cb2`) → `--surface-blue`: bold-blue feature / promo band
- **Surface Yellow Soft** (`#fff6dd`) → `--surface-yellow-soft`: soft yellow tint behind savings copy
- **Border** (`#000000`) → `--border`: the sampled crisp black 1px hairline — Southwest draws sharp black rules
- **Border Strong** (`#000000`) → `--border-strong`: input outline, emphasis rule
### Shadow Colors
Shadows are **navy-tinted** (`rgba(17,27,64,...)`) rather than neutral grey — the navy reinforces the brand even in elevation. Multi-layer logic: a 4% ambient at rest, deepening to 16% on hover and 24% on modals.
- `rgba(17,27,64,0.04) 0 1px 2px` — flat ambient
- `rgba(17,27,64,0.08) 0 2px 6px` — card resting
- `rgba(17,27,64,0.16) 0 6px 20px` — card hover
- `rgba(17,27,64,0.24) 0 12px 40px` — modal
### Semantic
- **Success** (`#1a7a3c` on `#e6f4ec`) → `--success`: "Flight booked", "Check-in complete" confirmation green
- **Warning** (`#b25f00` on `#fff4e3`) → `--warning`: advisory amber-brown — "Only 2 seats left at this price"
- **Danger** (`#c4123c` on `#fdeef1`) → `--danger`: validation error red — a deliberate close cousin of the Heart red
- **Info** (`#304cb2` on `#eaeefb`) → `--info`: informational banners — reuses the brand blue (fare rules, policy, gate change)
## 3. Typography Rules
### Font Family
**Primary**: `Southwest Sans` — the airline's custom in-house typeface, a humanist-leaning sans engineered to feel friendly and legible at booking-funnel speed. Fallback chain: `system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`. The fallback privileges system fonts so the site renders fast on slow gate-area WiFi and older mobile devices — Southwest's customers are price-conscious travellers on every kind of connection, and the typography degrades to a clean system sans gracefully.
**Mono companion**: not used in the marketing surface. Monospace appears only inside confirmation numbers and PNR record locators, where `tnum`-equivalent alignment matters; the stack falls back to `ui-monospace, SFMono-Regular`.
**OpenType features**: `tnum` is enabled on prices, fare grids, flight numbers, times, and confirmation codes so columns of numbers align cleanly across the booking funnel. `kern` is on globally for tight display headlines. Southwest Sans is used without exotic stylistic alternates — the brand's friendliness comes from the typeface's intrinsic warmth, not from decorative substitution.
### Hierarchy
| Role | Font | Size | Weight | Line Height | Letter Spacing | OT Features | Notes |
|------|------|------|--------|-------------|----------------|-------------|-------|
| display-hero | Southwest Sans | 80 | 700 | 1.0 | -0.03em | kern | Marketing hero ("Low fares. Nothing to hide.") |
| display-lg | Southwest Sans | 56 | 700 | 1.05 | -0.02em | kern | Campaign sub-hero, deal-page banners |
| h1 | Southwest Sans | 40 | 700 | 1.1 | -0.018em | kern | Page title ("Book a flight") |
| h2 | Southwest Sans | 32 | 600 | 1.2 | -0.012em | kern | Section heads ("Where we fly") |
| h3 | Southwest Sans | 24 | 600 | 1.25 | -0.005em | — | Sub-section titles, fare-tier names |
| h4 | Southwest Sans | 20 | 600 | 1.3 | 0 | — | Card titles, form section heads |
| title-md | Southwest Sans | 18 | 600 | 1.35 | 0 | — | Fare-card title, deal title |
| body-lg | Southwest Sans | 18 | 400 | 1.55 | 0 | — | Lead paragraph, intro copy |
| body | Southwest Sans | 16 | 400 | 1.55 | 0 | — | Default running text — generous line-height, the anti-dense register |
| body-sm | Southwest Sans | 14 | 400 | 1.5 | 0 | — | Card meta, secondary copy, fare details |
| label | Southwest Sans | 13 | 500 | 1.4 | 0 | — | Form field labels, control labels |
| caption | Southwest Sans | 12 | 500 | 1.4 | 0.02em | — | Fine print, legal, disclosures |
| button | Southwest Sans | 16 | 600 | 1.0 | 0.01em | — | Primary CTA label |
| button-sm | Southwest Sans | 14 | 600 | 1.0 | 0.01em | — | Compact CTA / chip action |
| nav-link | Southwest Sans | 15 | 600 | 1.0 | 0 | — | Top product-nav labels (Flight, Hotel, Car, Vacations) |
| price | Southwest Sans | 32 | 700 | 1.0 | -0.01em | tnum | Fare price ("$79") in fare grid and cards |
| price-sm | Southwest Sans | 14 | 400 | 1.0 | 0 | tnum | "each way" / "starting at" supporting text |
| badge | Southwest Sans | 11 | 700 | 1.2 | 0.06em | uppercase | "LOW FARE", "A-LIST", "NEW" tags |
### Principles
- **Big, bold, tight on display.** Hero runs 80px / 700 with -0.03em tracking; display weight is consistently 700, never lighter. The brand sells confidence and fun — large headlines carry the warmth that body copy alone can't.
- **Generous body line-height (1.55).** Where a dense booking grid runs body at 14/400 cramped, Southwest runs 16/400 at 1.55 line-height. Breathing room is brand — a crammed page would undercut the friendly, low-pressure register.
- **Negative tracking scales with size.** -0.03em on hero, -0.018em on h1, easing to 0 by h4 and body. Tight display compensates for the 700 weight; body sits at neutral tracking for readability.
- **Tabular numerals on all fares and codes.** Prices, fare grids, flight times, flight numbers, and confirmation codes use `tnum` so columns align — alignment is a trust signal in a commerce funnel.
- **Weight carries hierarchy alongside size.** Display 700 → section 600 → body 400. The 700/600/400 ladder keeps the type system simple and the page calm.
- **Buttons get +0.01em tracking.** A whisper of positive tracking on button labels at 600 weight keeps short CTA words ("Search", "Book") from feeling cramped inside the 2px-corner button.
- **No exotic stylistic alternates.** Southwest Sans is warm by design — the brand relies on the typeface's intrinsic character, not decorative substitution. Body never uses stylistic sets.
- **System sans is the substitute.** If Southwest Sans is unavailable, a clean humanist system sans (system-ui / Segoe UI / Roboto) renders the brand acceptably — Southwest's fallback is engineered for graceful degradation on weak connections.
## 4. Component Stylings
### Buttons
**`button-primary`** — Yellow (`#ffbf27`) fill, **navy** (`#111b40`) text, **2px** radius, 12×24px padding, 48px height, weight 600 with +0.01em tracking. The single most recognisable Southwest element: the yellow CTA with navy ink. Used for "Search", "Book", "Continue", "Check in". Hover deepens to `#f0b01c`; active to `#dca110`. Never put white text on it — the navy-on-yellow contrast is the brand.
**`button-secondary`** — Bold-blue (`#304cb2`) fill, white text, 2px radius, 48px height. The secondary commerce action: "Manage reservation", "Add EarlyBird". Hover deepens to `#26409c`. The blue button supports the yellow without competing — yellow leads, blue follows.
**`button-outline`** — Transparent fill with a 2px bold-blue (`#304cb2`) outline and blue text, 2px radius. Tertiary actions over light surfaces: "View details", "Add a flight", "Compare fares". On hover the interior fills `#eaeefb` light blue.
**`button-text`** — Plain bold-blue text, no surface, no border, underlined on hover. Inline actions: "See fare rules", "Edit search", "Forgot password?".
### Cards
**`card`** — White (`#ffffff`) surface lifting off the grey canvas, 12px radius, 1px soft-grey (`#d4d4d4`) border, 24px padding. The workhorse content tile: deal cards, content tiles, info panels. Hover deepens the navy-tinted shadow (tier 1 → 2) with no transform.
**`fare-card`** — A selectable fare-tier tile (Wanna Get Away / Wanna Get Away Plus / Anytime / Business Select). White surface, 12px radius, **2px bold-blue (`#304cb2`) outline** to signal selectability, fare-tier name in `title-md`, price in `price` (32/700 tnum, e.g. "$79"), benefits list beneath. Selected state fills the header band blue with white text; the yellow "Select" CTA anchors the bottom.
**`deal-card`** — Promotional tile on the deals page. White surface, 12px radius, a `badge-deal` yellow flag top-left ("LOW FARE"), route in `h4`, price in `price`, and a yellow primary CTA. Often paired with a destination photo clipped at `12px 12px 0 0`.
**`info-card`** — Light-blue (`#eaeefb`) ground, 12px radius, blue left-accent rule, for policy and informational callouts (bags-fly-free, change-fee-free messaging — core Southwest differentiators).
### Badges, Tags, Pills
**`badge-deal`** — Yellow (`#ffbf27`) ground, navy (`#111b40`) uppercase text, 4px radius. "LOW FARE" / "DEAL" — the savings flag. Echoes the primary CTA's yellow-navy pairing.
**`badge-status`** — Navy (`#111b40`) pill (9999px), yellow (`#ffbf27`) text. Rapid Rewards loyalty tier marker ("A-LIST", "A-LIST PREFERRED"). The pill geometry is reserved for status/loyalty markers — a small premium nod inside the otherwise-sharp system.
**`badge-new`** — Bold-blue (`#304cb2`) ground, white text, 4px radius. "NEW" / informational flags on feature announcements.
**`status-pill`** — Pill-shaped, soft semantic tints: success green for "On time", warning amber for "Delayed", danger red for "Cancelled" on flight-status surfaces.
### Inputs / Forms
**`text-input`** — White surface, **crisp 1px black (`#000000`) hairline** border, **2px** radius, 48px height, 12×14px padding. Label above in `label` (13/500). On focus the border thickens to 2px bold blue (`#304cb2`) with a 2px outline-offset ring. The sharp black hairline at rest is a Southwest signature — most brands use grey input borders; Southwest draws them crisp and black.
**`select`** — Same white surface, black hairline, 2px radius, 48px height, with a navy chevron. Used for passenger count, cabin, promo code, departure city.
**`search-bar`** — The flight-search component. White surface, 2px radius, 1px black hairline, 56px tall, divided into segments: From, To, Depart, Return (round-trip / one-way toggle above), Passengers — terminating in a yellow primary "Search" button at 56px. Segments separated by thin black rules. The search bar is the funnel's entry point and always leads with the yellow Search button.
### Navigation
**`top-nav`** — White (`#ffffff`) masthead, 64px tall, 1px soft-grey bottom hairline. Tri-color Heart logo flush left, navy product tabs centred (Book, Check in, Flight status, Rapid Rewards), and account utilities right (Español, Log in, a yellow "Book a flight" CTA). The masthead stays light — navy is reserved for the footer and dark bands.
**`nav-link-active`** — Active product tab: bold-blue (`#304cb2`) label with a **3px yellow (`#ffbf27`) underline bar** beneath. The yellow underline is the navigation's signature touch — it ties the active state to the brand voltage.
**`nav-link-inactive`** — Navy (`#111b40`) label, no underline. Hovers to bold-blue text.
**`footer`** — Deep-navy (`#111b40`) band, white link grid in 4–5 columns (Customer Service, About Southwest, Products & Services, Rapid Rewards), yellow on hover. The tri-color Heart repeats in the footer. The footer is the system's largest dark surface and intentionally anchors the page's warmth in navy.
### Modals & Overlays
**`modal`** — Centred dialog over a 55%-opacity navy-tinted scrim (`rgba(17,27,64,0.55)`). White surface, 12px radius, no border, navy-tinted modal shadow. Close button is a 40px square icon-button anchored top-right.
**`tooltip`** — Navy (`#111b40`) fill, white text in `body-sm`, 4px radius, 8×12px padding. Used on fare-rule abbreviations and bag-policy markers.
## 5. Layout Principles
### Spacing System
- Base unit: **4px**
- Scale: `0 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96`
- Section padding (vertical): 64–96px for marketing/editorial bands — generous, because breathing room is brand. Booking-funnel bands tighten to 32–48px where density helps task completion.
- Card internal padding: 24px standard; 16px on compact deal cards; 32px on hero callout panels
- Gutters: 24px between cards on desktop grids, 16px on the fare grid, 12px on dense form rows
### Grid & Container
- Max content width: **1280px** centred on most pages
- Prose / form column: ~720px max for reading comfort and single-column booking forms
- Deal grid: 3-up at desktop (responsive to 2-up tablet, 1-up mobile), 24px gutters
- Fare grid: a horizontal fare-tier comparison (Wanna Get Away → Business Select) across the top, dates down the side — the densest grid in the system
- Footer: 4–5 column navy link grid at desktop, collapsing to stacked accordions on mobile
### Whitespace Philosophy
Southwest leans **generous**. The marketing surface gives sections 64–96px of vertical breathing room, body copy a 1.55 line-height, and cards 24px of interior padding. This is the deliberate opposite of a maximalist booking grid — the brand sells low-pressure, friendly travel, and crowding the page would contradict the personality. The booking funnel itself tightens up (forms, fare grids) where task density genuinely helps, but the default register is airy.
### Section Cadence
The page alternates between the **light-grey canvas** (default), **white bands** (cards and feature sections lifting off the grey), and occasional **navy or bold-blue feature bands** for emphasis. The footer is always deep navy. Yellow appears as punctuation — the CTA in each section, a deal badge, a nav underline — never as a full-bleed surface. The rhythm is: grey calm → white content → blue/navy emphasis band → grey calm, with a yellow button moving you forward at each step.
## 6. Shapes & Radius Scale
| Tier | Value | Use |
|------|-------|-----|
| Micro | 2px | Primary CTAs, secondary buttons, inputs, search bar — the sharp signature corner |
| Small | 4px | Deal badges, NEW flags, small chips |
| Medium | 8px | Segmented controls, some compact secondary buttons |
| Comfortable | 12px | Cards, fare cards, modals, content tiles |
| Featured | 16px | Hero callout panels, large feature cells |
| Pill | 9999px | Status pills, filter chips, Rapid Rewards tier markers |
The system's defining shape rule is the **2px interactive corner**: anything you press — buttons, inputs, the search bar — stays nearly square. This is intentional brand positioning. Soft, pill-shaped buttons read as premium-consumer or fintech-glossy; the 2px corner reads as direct, dependable, scrappy, "this just works." Cards and modals relax to 12px so content tiles feel inviting, creating a deliberate tension between sharp controls and softer containers.
Pill geometry (9999px) is rationed to **status and loyalty markers only** — Rapid Rewards tier badges, flight-status pills, filter chips. A pill on a primary button would break the brand. There is one compound radius in the system: the deal-card image clip at `12px 12px 0 0` to flush a destination photo against the card content beneath.
## 7. Depth & Elevation
| Level | Treatment | Use |
|-------|-----------|-----|
| 0 — Flat | no shadow | Body, hero, footer, navy bands, the grey canvas (~80% of surfaces) |
| 1 — Resting card | `rgba(17,27,64,0.04) 0 1px 2px, rgba(17,27,64,0.08) 0 2px 6px` | Cards and fare tiles at rest |
| 2 — Hover | `rgba(17,27,64,0.16) 0 6px 20px` | Cards on hover, dropdown menus |
| 3 — Modal | `rgba(17,27,64,0.24) 0 12px 40px` | Centred dialogs (date picker, login, fare details) |
| 4 — Scrim | `rgba(17,27,64,0.55)` ground | Global modal backdrop tone |
### Shadow Philosophy
Southwest uses **navy-tinted shadows** (`rgba(17,27,64,...)`) rather than neutral grey throughout. The navy tint is a quiet brand reinforcement — even the elevation carries the brand's deep blue. There are two practical card tiers plus the flat baseline and the modal level: resting (subtle 4–8% navy) and hover (16% navy, deeper and wider). Hover shadow is roughly 4× the resting blur and opacity, so the hover state reads as a clear lift event.
The system is deliberately **low-elevation**. Most of the page is flat — the grey canvas, the white bands, the navy footer all sit at level 0, separated by crisp hairlines and color contrast rather than depth. Cards earn a soft resting shadow to lift off the grey; modals earn the deepest tier to float above the scrim. There are no progressive Material-style 0–24dp ramps — Southwest trusts the canvas, the hairlines, and the rounded card clipping to communicate layering, reserving real shadow for the two moments (card hover, modal) where it matters.
## 8. Interaction & Motion
### Easing
- **Standard**: `cubic-bezier(0.4, 0, 0.2, 1)` — the default for hover color swaps, shadow transitions, scrim fades
- **Emphasized**: `cubic-bezier(0.2, 0, 0, 1)` — modal entry, sticky element snap-in, drawer slide
- **Out-soft**: `cubic-bezier(0.0, 0, 0.2, 1)` — date-picker month flip, accordion expand
### Durations
| Bucket | Value | Use |
|--------|-------|-----|
| Fast | 150ms | Hover color swaps, button background deepen, input border thicken |
| Standard | 240ms | Card hover shadow intensify, modal scrim fade, accordion expand |
| Slow | 320ms | Page-section transitions, image gallery slide, drawer open |
### Per-Component Recipes
- **Primary CTA hover**: yellow background `#ffbf27` → `#f0b01c` over 150ms standard ease; navy text holds. **No transform** — the button deepens in place; Southwest's commerce-first stance avoids jumpy lifts.
- **Secondary CTA hover**: blue background `#304cb2` → `#26409c` over 150ms standard.
- **Card hover**: shadow tier 1 → 2 over 240ms standard, navy-tinted; no transform. Keeps a grid of deal cards calm while scanning.
- **Input focus**: border thickens from 1px black to 2px bold blue (`#304cb2`) over 150ms, with a 2px outline-offset ring fading in.
- **Nav tab hover/active**: the yellow underline bar grows in from 0 → full width over 200ms emphasized ease; label color shifts to bold blue.
- **Modal enter**: scrim fades in over 200ms ease-out, then the dialog translates from `translateY(12px) opacity(0)` to `translateY(0) opacity(1)` over 280ms emphasized.
- **Accordion / fare details expand**: height + opacity over 240ms standard; chevron rotates 180° in sync.
### Page Transitions
Page-to-page navigation through the funnel (home → search → fare select → passenger info → payment) uses a soft fade and content swap rather than a slide — 200ms fade-out + 320ms fade-in. The funnel is sequential and goal-driven; the motion stays out of the way so the user keeps moving toward "Book". Southwest optimises motion for time-to-decision and warmth, not flourish.
### Reduced Motion
Respects `prefers-reduced-motion: reduce`. All transforms suppress; only opacity transitions remain. Card hover shadow change becomes instant; modal enter becomes a 120ms opacity-only fade; the nav underline appears instantly instead of growing; accordions snap open. Because the system is already low-motion by design, reduced-motion mode looks nearly identical to the default — the only practical change is at modal enter and the nav underline.
## 9. Accessibility & A11y
### Contrast Pairs
| Pair | Ratio | Level |
|------|-------|-------|
| #000000 ink on #f4f4f4 canvas | 19.3 | AAA |
| #111b40 navy on #ffbf27 yellow (CTA) | 11.8 | AAA |
| #ffffff on #111b40 navy (footer) | 16.5 | AAA |
| #ffffff on #304cb2 blue (secondary CTA) | 7.4 | AAA |
| #304cb2 link on #f4f4f4 canvas | 6.6 | AA body / AAA large |
| #565656 muted on #f4f4f4 canvas | 6.5 | AA |
| #ffffff on #c4123c danger | 5.5 | AA body / AAA large |
| #ffffff on #1a7a3c success | 4.9 | AA body / AAA large |
The hero pairing — navy ink `#111b40` on yellow `#ffbf27` at 11.8:1 — is the brand's most important contrast decision, and it passes AAA comfortably. This is *why* Southwest puts navy on yellow instead of white: white on `#ffbf27` would land around 1.6:1 and fail every threshold. The navy-on-yellow choice is both a brand signature and an accessibility win.
### Focus Indicators
Focus ring is `2px solid #304cb2` with 2px outline-offset — bold blue, matching the link colour. The funnel is keyboard-heavy (search fields, passenger forms, fare selection, payment), so a high-contrast brand-blue ring reinforces the interactive surface. Blue is chosen over yellow for the ring because yellow-on-grey focus would be lower-contrast; the blue ring reads clearly on every surface in the system.
### ARIA Patterns
- **Search bar**: `role="search"` on the outer container; the round-trip / one-way toggle is a `role="radiogroup"`; each city field opens a `role="listbox"` autocomplete
- **Fare grid**: rendered as a `<table>` with `<th scope="col">` fare tiers and `<th scope="row">` dates; each selectable cell is a `<button>` with a verbose `aria-label` ("Wanna Get Away, depart 8:05 AM, $79, select")
- **Fare card**: the "Select" CTA carries `aria-label` expanding the tier and price; benefits use a real `<ul>`
- **Nav**: product tabs use `aria-current="page"` on the active tab; the yellow underline is decorative (`aria-hidden`)
- **Status pills**: flight status conveyed in text ("Delayed"), not color alone — the pill color is reinforcement, never the sole signal
- **Modal**: focus trap inside, Esc closes, click-outside closes, focus returns to the trigger on close
### Keyboard Navigation
- Top nav: Tab moves logo → product tabs → utilities (Español → Log in → Book CTA)
- Search bar: Tab through From → To → Depart → Return → Passengers → Search button
- Fare grid: Tab cell → cell across tiers and down dates; Enter selects a fare
- Forms: Tab top → bottom; Space toggles checkboxes (EarlyBird, bags); Enter submits the active step
- Date picker: arrow keys navigate days, Enter selects, Esc closes
- Modal: Tab cycles within the trap; Shift+Tab reverses; Esc closes
### Screen Reader Hints
Southwest uses visible text labels over icon-only buttons throughout the funnel — every CTA names its outcome ("Search", "Select", "Continue to passenger info"), every fare cell announces tier + time + price. Color is never the sole carrier of meaning: flight status, fare differences, and validation all pair color with text. The few icon-only controls (heart-save, share, modal close) all carry `aria-label`. Confirmation numbers are announced character-by-character via `aria-label` so travellers can transcribe them accurately.
### Reduced Motion
All transitions degrade to opacity-only when `prefers-reduced-motion: reduce` is set. Card hover shadow becomes instant, modal enter becomes a 120ms opacity-only fade, the nav underline appears instantly, and accordions snap open without height animation.
## 10. Responsive Behavior
### Breakpoints
| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <640px | Top nav collapses to Heart logo + hamburger; product tabs move into a sheet; search bar stacks vertically (From → To → Depart → Return → Passengers → full-width Search); deal grid 1-up; fare grid becomes a swipeable tier carousel; footer columns become accordions |
| Tablet | 640–1024px | Nav keeps key tabs, rest behind a "More" menu; search bar in a 2-row layout; deal grid 2-up; fare grid shows 2–3 tiers with horizontal scroll |
| Desktop | 1024–1280px | Full top nav; search bar single-row with all segments + yellow Search; deal grid 3-up; full fare grid visible |
| Wide | >1536px | Content width caps at 1280px; the grey canvas absorbs the extra width in the gutters |
### Touch Targets
- Primary CTAs: minimum 48×48px (meets WCAG AAA)
- Search-bar segments: 56px tall tap zones
- Nav tabs: 44px minimum height with 16px horizontal padding
- Fare-grid cells: 48px minimum tap height on touch surfaces
- Form inputs: 48px height throughout
- Icon buttons (heart, share, close): 44×44px minimum
### Collapsing Strategy
- Product tabs collapse into a hamburger sheet below 640px
- The flight-search bar stacks from a single horizontal row into a vertical card with a full-width yellow Search button at the bottom
- The fare-tier comparison grid (the densest element) becomes a swipeable tier carousel on mobile, one tier per panel, with a sticky "Select" CTA
- Deal grid reflows 3-up → 2-up → 1-up
- The navy footer's column link lists become tap-to-expand accordions on mobile
- Sticky elements (price summary, "Continue" CTA) dock to a sticky bottom bar on mobile checkout
### Image Behavior
Destination and deal photos use `aspect-ratio: 16/9` on desktop cards and `aspect-ratio: 4/3` on mobile, filled with `object-fit: cover` and clipped to the card's `12px 12px 0 0` top radius. Hero imagery is full-bleed with the yellow CTA overlaid on a navy or dark-overlay zone for contrast. Images lazy-load with low-res placeholders so the page stays fast on weak connections.
### Container Queries
The fare-card uses container queries to compress its benefits list when the card narrows — the bullet list switches from full text to a count summary ("+3 more benefits"), and the price/CTA stack collapses to a single row when the card drops below ~280px.
## 11. Content & Voice
### Tone
Friendly, warm, and a little playful — the "the Heart" personality. Southwest's voice is the most human in US aviation: it's confident about low fares, transparent about the no-frills-but-fair value (bags fly free, no change fees), and genuinely fun without being silly. Headlines lean into the brand's promises ("Low fares. Nothing to hide.", "Bags fly free.", "Wanna Get Away?") and treat the customer like a friend, not a transaction. The register stays warm even in a commerce funnel — the page is selling, but it's smiling while it does.
### Microcopy Patterns
- **Button verbs**: "Search", "Book", "Select", "Continue", "Check in" — direct and outcome-named, never "Submit"
- **Value-prop recipe**: `[Plain-spoken benefit] + [the "we mean it" reinforcement]` — e.g., "Bags fly free. First and second checked bags. Weight and size limits apply."
- **Scarcity/advisory recipe**: stated plainly, never alarmist — "Only 2 seats left at this fare" rather than aggressive red-flag urgency
- **Error message recipe**: `[What's wrong] + [How to fix]`, warm — e.g., "We need a departure date to find your flights. Pick a date to keep going."
- **Success confirmations**: friendly and clear — "You're all set! Confirmation #ABC123. We'll see you at the gate."
- **Field labels**: short and conversational — "Where from?", "Where to?", "Depart", "Return", "Passengers"
### Empty States
Empty trip list: "No trips yet. Let's find you a getaway — search a flight to get started." — names the gap and points to the action with warmth.
No flights found: "We couldn't find flights for those dates. Try nearby dates or a different airport — we fly to lots of places." — friendly, suggests two concrete remedies.
Empty Rapid Rewards activity: "No recent activity. Book a flight to start earning points." — direct and encouraging.
### CTA Verb Conventions
- Primary action: **"Search"** (entry), **"Select"** (fare grid), **"Continue"** (funnel steps), **"Book"** / **"Purchase"** (final step)
- Secondary action: **"Check in"**, **"Manage reservation"**, **"Add a flight"**
- Tertiary text: **"View fare rules"**, **"Edit search"**, **"Compare fares"**
- Avoided: "Submit", "Click here", high-pressure "Buy now!" — Southwest prefers warm, plain verbs that respect the customer
## 12. Dark Mode & Theming
**Light-only on the public web.** Southwest's brand is engineered around the warm light-grey canvas (`#f4f4f4`) with the yellow CTA voltage and bold-blue accents — the entire color-by-function system is tuned for a light surface. The mobile app ships a system-aware experience, but the marketing and booking web is explicitly light-only.
The brand reasoning: the yellow CTA's power comes from its pop against light grey, and the navy-on-yellow contrast (11.8:1) is the brand's signature accessibility move — both are calibrated for the light canvas. The deep-navy footer and the optional bold-blue/navy feature bands provide the only dark surfaces, and they're intentional brand moments, not a theme switch. On those dark bands the system inverts cleanly: white text, yellow CTAs unchanged, blue accents lightened slightly for contrast.
If a dark theme were ever built, the safe mapping would be: canvas → deep navy (`#111b40`), surface → `#1a2a5e`, text → white, brand yellow unchanged (it works on navy), links → a lightened blue (`#7e93e6` for AA on navy). But this is hypothetical — the production site is light-only by design.
## 13. Lineage & Influences
Southwest's visual lineage runs through three traditions. First, **mid-century American friendly-functional branding** — the warm, optimistic, people-first commercial design of post-war American consumer brands, where bold flat color and approachable type signalled "this is for everyone." The tri-color Heart and the sunny yellow descend directly from this lineage: the brand is built on warmth and inclusion, not luxury exclusivity. Second, the **low-cost-carrier playbook** that Southwest itself largely *invented* — the no-frills-but-fun register, the transparent pricing, the scrappy direct visual honesty that says "we spend on planes and people, not on a glossy website." Third, **modern transactional commerce UX** — the booking funnel, the fare-comparison grid, the search-bar-leads-to-CTA pattern that every airline shares, executed here with more breathing room and warmth than legacy carriers.
What Southwest rejects is the cold corporate gravitas of legacy full-service airlines (the muted blues and silvers, the premium-cabin photography, the restrained luxury type) and equally the harsh bargain-bin austerity of ultra-low-cost rivals. It threads the needle: low-cost honesty delivered with genuine warmth. The yellow voltage, the navy-on-yellow CTA, the sharp 2px corners, the generous body line-height, and the playful "Wanna Get Away?" voice all serve one coherent personality — friendly, dependable, fun, fair. The custom Southwest Sans typeface is the keystone, engineered to feel human and legible across every device and connection its price-conscious customers travel with.
**Influences:**
- JetBlue — friendly low-cost-carrier branding and warm-modern airline UX, [jetblue.com](https://www.jetblue.com)
- IKEA — blue + yellow value-signalling palette read as "trustworthy, accessible, fun", [ikea.com](https://www.ikea.com)
- Mailchimp — playful-but-functional brand voice with bold flat color and warmth in a commerce context, [mailchimp.com](https://mailchimp.com)
- Paul Rand — mid-century American flat-color, logo-as-warmth corporate identity tradition, [paulrand.design](https://www.paulrand.design)
- Frutiger / Helvetica — humanist and neo-grotesque sans ancestry behind Southwest Sans, [linotype.com](https://www.linotype.com)
## 14. Do's and Don'ts
**Do**
- Put **navy (`#111b40`) text on the yellow CTA**, never white — the navy-on-yellow contrast is the brand and the accessibility win (11.8:1)
- Keep CTAs and inputs at the sharp **2px** corner — it signals direct, dependable, scrappy
- Use the soft light-grey (`#f4f4f4`) canvas, not pure white — warmth starts with the floor color
- Make the yellow button the loudest thing in every section — it's the funnel's forward motion
- Use bold blue (`#304cb2`) for every link and secondary action — confident and high-contrast
- Run body at 16/400 with 1.55 line-height — breathing room is brand
- Reserve the Heart red (`#d31245`) for the logo and love-campaign moments only
- Draw input borders as crisp 1px black hairlines — the sharp black rule is a Southwest signature
- Use navy-tinted shadows (`rgba(17,27,64,...)`) so even elevation carries the brand
- Write CTAs as warm, plain verbs ("Search", "Select", "Book") and keep the voice friendly
- Use `tnum` on all fares, times, and confirmation codes so numbers align
- Render the active nav tab with a 3px yellow underline + bold-blue label
**Don't**
- Don't put white text on the yellow CTA — it fails contrast (~1.6:1) and breaks the brand
- Don't use pill radius on buttons — the 2px corner is the system; pills read premium/fintech
- Don't switch the canvas to pure white — `#f4f4f4` warmth is intentional
- Don't use the Heart red as a generic UI accent — it dilutes the logo's meaning
- Don't cram the page — generous spacing and 1.55 line-height are the friendly register
- Don't add transform on card hover — only the navy shadow deepens
- Don't introduce a fourth brand color — yellow + blue + navy (+ Heart red, sparingly) is the system
- Don't write high-pressure urgency copy — Southwest is friendly, plain-spoken, never alarmist
- Don't use grey input borders — Southwest draws them crisp and black
- Don't introduce dark mode on the web — the system is tuned for the light canvas
- Don't make blue compete with yellow — yellow leads (primary), blue follows (secondary/link)
- Don't drop the visible CTA verbs for icon-only buttons in the funnel — name the outcome
## 15. Agent Prompt Guide
### Quick Color Reference
```
Canvas (grey): #f4f4f4
White surface: #ffffff
Ink: #000000
Navy (on-yellow): #111b40
Brand-yellow: #ffbf27
Yellow-hover: #f0b01c
Bold-blue (link): #304cb2
Blue-hover: #26409c
Heart-red: #d31245
Muted: #565656
Border (hairline): #000000
Success-green: #1a7a3c
Danger-red: #c4123c
```
### Example Component Prompts
- "Create a Southwest-style hero: warm light-grey (#f4f4f4) canvas, an 80px / 700 black headline with -0.03em tracking ('Low fares. Nothing to hide.'), 18px / 400 supporting copy at 1.55 line-height beneath, and a primary CTA — yellow (#ffbf27) fill with **navy (#111b40)** text at 16px / 600, 2px radius, 12×24px padding, 48px height. Never white text on the yellow."
- "Design a flight-search bar: white (#ffffff) surface, 2px radius, 1px crisp black (#000000) hairline, 56px tall, divided into From / To / Depart / Return / Passengers segments separated by thin black rules, terminating in a yellow (#ffbf27) 'Search' button with navy text at 56px height. Round-trip / one-way radio toggle above."
- "Build a fare card: white surface, 12px radius, 2px bold-blue (#304cb2) outline to signal selectability, tier name 'Wanna Get Away' at 18px / 600, price '$79' at 32px / 700 with tabular numerals, a benefits bullet list, and a yellow (#ffbf27) 'Select' CTA with navy text at the bottom (2px radius)."
- "Create a secondary button: bold-blue (#304cb2) fill, white text at 16px / 600, 2px radius, 12×24px padding, 48px height. Hover deepens to #26409c. Use for 'Check in' and 'Manage reservation' — supports the yellow primary without competing."
- "Design a top nav: white (#ffffff) masthead at 64px with a 1px soft-grey bottom hairline, tri-color Heart logo flush left, navy (#111b40) product tabs (Book, Check in, Flight status, Rapid Rewards), a yellow 'Book a flight' CTA right. The active tab gets a bold-blue (#304cb2) label with a 3px yellow (#ffbf27) underline bar."
- "Build a text input: white surface, crisp 1px black (#000000) hairline border, 2px radius, 48px height, 12×14px padding, label above at 13px / 500. On focus the border thickens to 2px bold blue (#304cb2) with a 2px outline-offset ring."
### Iteration Guide
1. **Start on warm grey, not white.** The canvas is `#f4f4f4`. If your floor is pure white, you've lost the brand's warmth before you've placed a single element.
2. **Yellow CTA + navy text, always.** The single most recognisable Southwest move. White on yellow fails contrast and reads as a generic warning banner — navy on yellow is the brand.
3. **Keep interactive corners at 2px.** Buttons, inputs, the search bar stay nearly square. If a button looks like a pill, it's a different airline.
4. **Let the yellow lead, blue follow.** Yellow = primary CTA. Blue = links and secondary actions. Never let blue out-shout the yellow button.
5. **Body at 16/400, line-height 1.55.** Breathing room is brand. If the composition feels cramped, you've drifted toward a dense booking grid and away from Southwest's friendly register.
6. **Ration the Heart red.** Red (`#d31245`) belongs in the logo and love-campaign moments. Using it as a generic accent dilutes the Heart.
7. **Navy-tint the shadows.** Use `rgba(17,27,64,...)` not neutral grey — the brand lives in the elevation too. Card hover is shadow-only, never transform.
8. **Write warm, plain CTA verbs.** "Search", "Select", "Book", "Check in" — friendly and outcome-named. The voice should feel like a helpful friend, not a hard sell.
1. Visual Theme & Atmosphere
Southwest Airlines is the friendliest commerce surface in US aviation — where legacy carriers project corporate gravitas and ultra-low-cost rivals project bargain austerity, Southwest projects warmth. The base canvas is a soft, approachable light grey (#f4f4f4) rather than clinical white, carrying pure-black ink (#000000) for maximum readability. Above that grey floor the whole page is organised around one job: get the yellow button noticed. Southwest yellow (#ffbf27) fires on every primary CTA, and unlike most brands it does not put white text on its accent — it rides deep navy ink (#111b40) on top, which gives the button its characteristic high-contrast, sunny-but-serious look. A second voltage of bold blue (#304cb2) carries links, secondary CTAs, and accent bands, and the famous tri-color Heart logo — red (#d31245) + yellow + blue — signals the people-first “we love you back” register that defines the brand.
The shape language is sharp. Primary CTAs and inputs round at just 2px — almost square, but with the corner barely knocked off. This is a deliberate brand position: Southwest is direct, dependable, and a little scrappy. Soft pill buttons would read as premium-consumer or fintech; the near-square 2px corner reads as no-nonsense, like a boarding-pass kiosk that just works. Cards and modals get a more relaxed 12px so content tiles feel inviting, but anything you press — buttons, inputs, the search bar — stays crisp at 2px. The tension between sharp interactive elements and softer containers is the system’s signature.
Type runs Southwest Sans, the airline’s custom in-house typeface, across a friendly 400–700 range. Display headlines go big and bold and tight (hero up to 80px / 700 with -0.03em tracking), while body copy sits at a comfortable 16/400 with a generous 1.55 line-height — the opposite of a dense booking grid like Booking.com. Southwest wants breathing room; the brand sells fun and low fares, and a crammed page would undercut the warmth. The result is big confident headlines floating over relaxed, readable body text, with the yellow CTA punctuating each section.
The atmosphere is no-frills-but-fun. There’s a deliberate scrappiness — flat color blocks, crisp black hairlines, bold flat fills with little gloss — that signals “we pass the savings to you, not into a glossy website.” But it never tips into austerity, because the yellow is sunny, the blue is confident, and the Heart keeps everything human. Semantic colors stay disciplined: yellow lives almost exclusively on primary CTAs and deal badges, blue lives on links and secondary actions, navy anchors dark bands and footer, and the Heart red is used very sparingly — mostly in the logo and the occasional love-themed campaign moment, never as a generic UI accent.
The overall feeling is a brand that is smiling at you while it efficiently sells you a flight. The grey canvas keeps things calm, the yellow button keeps you moving forward, the blue links keep you in the funnel, and the whole thing reads as approachable, trustworthy, and a little bit charming — exactly the “the Heart” personality Southwest has built its entire low-cost identity around.
Key Characteristics:
- Warm light-grey canvas (
#f4f4f4) with pure-black ink (#000000) — calm, readable, not clinical white - Signature yellow CTA (
#ffbf27) carrying navy text (#111b40), never white — the brand’s most recognisable move - Bold blue (
#304cb2) on every link and secondary action — confident, high-contrast, never timid - Tri-color Heart logo (red
#d31245+ yellow + blue) signalling people-first warmth - Sharp 2px radius on CTAs and inputs — direct, dependable, anti-glossy; softer 12px on cards
- Southwest Sans custom display at 700 — big, bold, tightly tracked headlines up to 80px
- Generous body at 16/400 / 1.55 line-height — breathing room, the anti-dense register
- Strict color-by-function: yellow = primary CTA, blue = link/secondary, navy = dark bands, red = Heart only
- Crisp black 1px hairlines and flat color blocks — scrappy, savings-passed-to-you visual honesty
- Friendly, fun voice in microcopy (“Wanna Get Away?”, “Low fares. Nothing to hide.”) inside a commerce funnel
2. Color Palette & Roles
Primary / Canvas
- Canvas (
#f4f4f4) →--bg: the default page floor — a soft, warm light grey. Southwest has no public dark mode. - White surface (
#ffffff) →--surface-white: cards and the search bar lift off the grey on pure-white surfaces. - Ink (
#000000) →--text: the dominant text colour — pure black for maximum punch on the grey canvas. - Body ink (
#1a1a1a) →--text-body: long-form running text, a hair off pure black for comfortable reading.
Brand
- Southwest Yellow (
#ffbf27) →--brand: the primary CTA colour and the loudest element on every page. Deal badges, star rating fill. - Navy on yellow (
#111b40) →--on-brand: the deep navy ink that rides on every yellow button — never white. - Yellow Hover (
#f0b01c) →--brand-hover: CTA hover deepens the yellow slightly. - Yellow Active (
#dca110) →--brand-active: pressed yellow at maximum depth. - Heart Red (
#d31245) →--red-heart: the tri-color logo accent. Used very sparingly — logo and love-campaign moments only, never a generic UI accent.
Accent
- Bold Blue (
#304cb2) →--blue: the secondary brand voltage — links, secondary CTA fills, accent bands, info. - Blue Hover (
#26409c) →--blue-hover: link and blue-button hover deepens. - Navy (
#111b40) →--navy: deep navy for dark bands, footer, status pills, and the text-on-yellow ink. - Navy 2 (
#1a2a5e) →--navy-2: secondary navy for layered dark surfaces and gradients. - Star Rating (
#ffbf27) →--star-rating: rating fill reuses the brand yellow; empty stars use#d4d4d4.
Interactive
- Link (
#304cb2) →--link: the default inline link — bold blue, confident, high-contrast. - Link Hover (
#26409c) →--link-hover: hover deepens the blue. - Link Visited (
#5a3a9e) →--link-visited: browser-respectful visited purple — users navigate many links per booking session. - Focus Border (
#304cb2) →--border-focus: focused controls thicken to a bold-blue 2px stroke + ring. - Selected (
#ffbf27underline /#304cb2label — active nav tabs;#304cb2outline — selected fare cards).
Neutral Scale
- Ink (
#000000) →--text: display, headings, primary labels - Body (
#1a1a1a) →--text-body: secondary running text - Muted (
#565656) →--text-muted: sub-titles, metadata, captions, fine print - Soft (
#767676) →--text-soft: faint counts, legend text, placeholder ink - Border Soft (
#d4d4d4) →--border-soft: low-contrast grey divider, card outlines on grey - Surface Soft (
#ebebeb) →--surface-soft: alt rows, disabled fields, subtle wells
Surface & Borders
- Canvas (
#f4f4f4) →--bg: page floor - White (
#ffffff) →--surface-white: card and search-bar surface - Surface Soft (
#ebebeb) →--surface-soft: disabled fields, alt rows - Surface Navy (
#111b40) →--surface-navy: footer band, dark feature sections - Surface Blue (
#304cb2) →--surface-blue: bold-blue feature / promo band - Surface Yellow Soft (
#fff6dd) →--surface-yellow-soft: soft yellow tint behind savings copy - Border (
#000000) →--border: the sampled crisp black 1px hairline — Southwest draws sharp black rules - Border Strong (
#000000) →--border-strong: input outline, emphasis rule
Shadow Colors
Shadows are navy-tinted (rgba(17,27,64,...)) rather than neutral grey — the navy reinforces the brand even in elevation. Multi-layer logic: a 4% ambient at rest, deepening to 16% on hover and 24% on modals.
rgba(17,27,64,0.04) 0 1px 2px— flat ambientrgba(17,27,64,0.08) 0 2px 6px— card restingrgba(17,27,64,0.16) 0 6px 20px— card hoverrgba(17,27,64,0.24) 0 12px 40px— modal
Semantic
- Success (
#1a7a3con#e6f4ec) →--success: “Flight booked”, “Check-in complete” confirmation green - Warning (
#b25f00on#fff4e3) →--warning: advisory amber-brown — “Only 2 seats left at this price” - Danger (
#c4123con#fdeef1) →--danger: validation error red — a deliberate close cousin of the Heart red - Info (
#304cb2on#eaeefb) →--info: informational banners — reuses the brand blue (fare rules, policy, gate change)
3. Typography Rules
Font Family
Primary: Southwest Sans — the airline’s custom in-house typeface, a humanist-leaning sans engineered to feel friendly and legible at booking-funnel speed. Fallback chain: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif. The fallback privileges system fonts so the site renders fast on slow gate-area WiFi and older mobile devices — Southwest’s customers are price-conscious travellers on every kind of connection, and the typography degrades to a clean system sans gracefully.
Mono companion: not used in the marketing surface. Monospace appears only inside confirmation numbers and PNR record locators, where tnum-equivalent alignment matters; the stack falls back to ui-monospace, SFMono-Regular.
OpenType features: tnum is enabled on prices, fare grids, flight numbers, times, and confirmation codes so columns of numbers align cleanly across the booking funnel. kern is on globally for tight display headlines. Southwest Sans is used without exotic stylistic alternates — the brand’s friendliness comes from the typeface’s intrinsic warmth, not from decorative substitution.
Hierarchy
| Role | Font | Size | Weight | Line Height | Letter Spacing | OT Features | Notes |
|---|---|---|---|---|---|---|---|
| display-hero | Southwest Sans | 80 | 700 | 1.0 | -0.03em | kern | Marketing hero (“Low fares. Nothing to hide.”) |
| display-lg | Southwest Sans | 56 | 700 | 1.05 | -0.02em | kern | Campaign sub-hero, deal-page banners |
| h1 | Southwest Sans | 40 | 700 | 1.1 | -0.018em | kern | Page title (“Book a flight”) |
| h2 | Southwest Sans | 32 | 600 | 1.2 | -0.012em | kern | Section heads (“Where we fly”) |
| h3 | Southwest Sans | 24 | 600 | 1.25 | -0.005em | — | Sub-section titles, fare-tier names |
| h4 | Southwest Sans | 20 | 600 | 1.3 | 0 | — | Card titles, form section heads |
| title-md | Southwest Sans | 18 | 600 | 1.35 | 0 | — | Fare-card title, deal title |
| body-lg | Southwest Sans | 18 | 400 | 1.55 | 0 | — | Lead paragraph, intro copy |
| body | Southwest Sans | 16 | 400 | 1.55 | 0 | — | Default running text — generous line-height, the anti-dense register |
| body-sm | Southwest Sans | 14 | 400 | 1.5 | 0 | — | Card meta, secondary copy, fare details |
| label | Southwest Sans | 13 | 500 | 1.4 | 0 | — | Form field labels, control labels |
| caption | Southwest Sans | 12 | 500 | 1.4 | 0.02em | — | Fine print, legal, disclosures |
| button | Southwest Sans | 16 | 600 | 1.0 | 0.01em | — | Primary CTA label |
| button-sm | Southwest Sans | 14 | 600 | 1.0 | 0.01em | — | Compact CTA / chip action |
| nav-link | Southwest Sans | 15 | 600 | 1.0 | 0 | — | Top product-nav labels (Flight, Hotel, Car, Vacations) |
| price | Southwest Sans | 32 | 700 | 1.0 | -0.01em | tnum | Fare price (“$79”) in fare grid and cards |
| price-sm | Southwest Sans | 14 | 400 | 1.0 | 0 | tnum | ”each way” / “starting at” supporting text |
| badge | Southwest Sans | 11 | 700 | 1.2 | 0.06em | uppercase | ”LOW FARE”, “A-LIST”, “NEW” tags |
Principles
- Big, bold, tight on display. Hero runs 80px / 700 with -0.03em tracking; display weight is consistently 700, never lighter. The brand sells confidence and fun — large headlines carry the warmth that body copy alone can’t.
- Generous body line-height (1.55). Where a dense booking grid runs body at 14/400 cramped, Southwest runs 16/400 at 1.55 line-height. Breathing room is brand — a crammed page would undercut the friendly, low-pressure register.
- Negative tracking scales with size. -0.03em on hero, -0.018em on h1, easing to 0 by h4 and body. Tight display compensates for the 700 weight; body sits at neutral tracking for readability.
- Tabular numerals on all fares and codes. Prices, fare grids, flight times, flight numbers, and confirmation codes use
tnumso columns align — alignment is a trust signal in a commerce funnel. - Weight carries hierarchy alongside size. Display 700 → section 600 → body 400. The 700/600/400 ladder keeps the type system simple and the page calm.
- Buttons get +0.01em tracking. A whisper of positive tracking on button labels at 600 weight keeps short CTA words (“Search”, “Book”) from feeling cramped inside the 2px-corner button.
- No exotic stylistic alternates. Southwest Sans is warm by design — the brand relies on the typeface’s intrinsic character, not decorative substitution. Body never uses stylistic sets.
- System sans is the substitute. If Southwest Sans is unavailable, a clean humanist system sans (system-ui / Segoe UI / Roboto) renders the brand acceptably — Southwest’s fallback is engineered for graceful degradation on weak connections.
4. Component Stylings
Buttons
button-primary — Yellow (#ffbf27) fill, navy (#111b40) text, 2px radius, 12×24px padding, 48px height, weight 600 with +0.01em tracking. The single most recognisable Southwest element: the yellow CTA with navy ink. Used for “Search”, “Book”, “Continue”, “Check in”. Hover deepens to #f0b01c; active to #dca110. Never put white text on it — the navy-on-yellow contrast is the brand.
button-secondary — Bold-blue (#304cb2) fill, white text, 2px radius, 48px height. The secondary commerce action: “Manage reservation”, “Add EarlyBird”. Hover deepens to #26409c. The blue button supports the yellow without competing — yellow leads, blue follows.
button-outline — Transparent fill with a 2px bold-blue (#304cb2) outline and blue text, 2px radius. Tertiary actions over light surfaces: “View details”, “Add a flight”, “Compare fares”. On hover the interior fills #eaeefb light blue.
button-text — Plain bold-blue text, no surface, no border, underlined on hover. Inline actions: “See fare rules”, “Edit search”, “Forgot password?”.
Cards
card — White (#ffffff) surface lifting off the grey canvas, 12px radius, 1px soft-grey (#d4d4d4) border, 24px padding. The workhorse content tile: deal cards, content tiles, info panels. Hover deepens the navy-tinted shadow (tier 1 → 2) with no transform.
fare-card — A selectable fare-tier tile (Wanna Get Away / Wanna Get Away Plus / Anytime / Business Select). White surface, 12px radius, 2px bold-blue (#304cb2) outline to signal selectability, fare-tier name in title-md, price in price (32/700 tnum, e.g. “$79”), benefits list beneath. Selected state fills the header band blue with white text; the yellow “Select” CTA anchors the bottom.
deal-card — Promotional tile on the deals page. White surface, 12px radius, a badge-deal yellow flag top-left (“LOW FARE”), route in h4, price in price, and a yellow primary CTA. Often paired with a destination photo clipped at 12px 12px 0 0.
info-card — Light-blue (#eaeefb) ground, 12px radius, blue left-accent rule, for policy and informational callouts (bags-fly-free, change-fee-free messaging — core Southwest differentiators).
Badges, Tags, Pills
badge-deal — Yellow (#ffbf27) ground, navy (#111b40) uppercase text, 4px radius. “LOW FARE” / “DEAL” — the savings flag. Echoes the primary CTA’s yellow-navy pairing.
badge-status — Navy (#111b40) pill (9999px), yellow (#ffbf27) text. Rapid Rewards loyalty tier marker (“A-LIST”, “A-LIST PREFERRED”). The pill geometry is reserved for status/loyalty markers — a small premium nod inside the otherwise-sharp system.
badge-new — Bold-blue (#304cb2) ground, white text, 4px radius. “NEW” / informational flags on feature announcements.
status-pill — Pill-shaped, soft semantic tints: success green for “On time”, warning amber for “Delayed”, danger red for “Cancelled” on flight-status surfaces.
Inputs / Forms
text-input — White surface, crisp 1px black (#000000) hairline border, 2px radius, 48px height, 12×14px padding. Label above in label (13/500). On focus the border thickens to 2px bold blue (#304cb2) with a 2px outline-offset ring. The sharp black hairline at rest is a Southwest signature — most brands use grey input borders; Southwest draws them crisp and black.
select — Same white surface, black hairline, 2px radius, 48px height, with a navy chevron. Used for passenger count, cabin, promo code, departure city.
search-bar — The flight-search component. White surface, 2px radius, 1px black hairline, 56px tall, divided into segments: From, To, Depart, Return (round-trip / one-way toggle above), Passengers — terminating in a yellow primary “Search” button at 56px. Segments separated by thin black rules. The search bar is the funnel’s entry point and always leads with the yellow Search button.
Navigation
top-nav — White (#ffffff) masthead, 64px tall, 1px soft-grey bottom hairline. Tri-color Heart logo flush left, navy product tabs centred (Book, Check in, Flight status, Rapid Rewards), and account utilities right (Español, Log in, a yellow “Book a flight” CTA). The masthead stays light — navy is reserved for the footer and dark bands.
nav-link-active — Active product tab: bold-blue (#304cb2) label with a 3px yellow (#ffbf27) underline bar beneath. The yellow underline is the navigation’s signature touch — it ties the active state to the brand voltage.
nav-link-inactive — Navy (#111b40) label, no underline. Hovers to bold-blue text.
footer — Deep-navy (#111b40) band, white link grid in 4–5 columns (Customer Service, About Southwest, Products & Services, Rapid Rewards), yellow on hover. The tri-color Heart repeats in the footer. The footer is the system’s largest dark surface and intentionally anchors the page’s warmth in navy.
Modals & Overlays
modal — Centred dialog over a 55%-opacity navy-tinted scrim (rgba(17,27,64,0.55)). White surface, 12px radius, no border, navy-tinted modal shadow. Close button is a 40px square icon-button anchored top-right.
tooltip — Navy (#111b40) fill, white text in body-sm, 4px radius, 8×12px padding. Used on fare-rule abbreviations and bag-policy markers.
5. Layout Principles
Spacing System
- Base unit: 4px
- Scale:
0 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96 - Section padding (vertical): 64–96px for marketing/editorial bands — generous, because breathing room is brand. Booking-funnel bands tighten to 32–48px where density helps task completion.
- Card internal padding: 24px standard; 16px on compact deal cards; 32px on hero callout panels
- Gutters: 24px between cards on desktop grids, 16px on the fare grid, 12px on dense form rows
Grid & Container
- Max content width: 1280px centred on most pages
- Prose / form column: ~720px max for reading comfort and single-column booking forms
- Deal grid: 3-up at desktop (responsive to 2-up tablet, 1-up mobile), 24px gutters
- Fare grid: a horizontal fare-tier comparison (Wanna Get Away → Business Select) across the top, dates down the side — the densest grid in the system
- Footer: 4–5 column navy link grid at desktop, collapsing to stacked accordions on mobile
Whitespace Philosophy
Southwest leans generous. The marketing surface gives sections 64–96px of vertical breathing room, body copy a 1.55 line-height, and cards 24px of interior padding. This is the deliberate opposite of a maximalist booking grid — the brand sells low-pressure, friendly travel, and crowding the page would contradict the personality. The booking funnel itself tightens up (forms, fare grids) where task density genuinely helps, but the default register is airy.
Section Cadence
The page alternates between the light-grey canvas (default), white bands (cards and feature sections lifting off the grey), and occasional navy or bold-blue feature bands for emphasis. The footer is always deep navy. Yellow appears as punctuation — the CTA in each section, a deal badge, a nav underline — never as a full-bleed surface. The rhythm is: grey calm → white content → blue/navy emphasis band → grey calm, with a yellow button moving you forward at each step.
6. Shapes & Radius Scale
| Tier | Value | Use |
|---|---|---|
| Micro | 2px | Primary CTAs, secondary buttons, inputs, search bar — the sharp signature corner |
| Small | 4px | Deal badges, NEW flags, small chips |
| Medium | 8px | Segmented controls, some compact secondary buttons |
| Comfortable | 12px | Cards, fare cards, modals, content tiles |
| Featured | 16px | Hero callout panels, large feature cells |
| Pill | 9999px | Status pills, filter chips, Rapid Rewards tier markers |
The system’s defining shape rule is the 2px interactive corner: anything you press — buttons, inputs, the search bar — stays nearly square. This is intentional brand positioning. Soft, pill-shaped buttons read as premium-consumer or fintech-glossy; the 2px corner reads as direct, dependable, scrappy, “this just works.” Cards and modals relax to 12px so content tiles feel inviting, creating a deliberate tension between sharp controls and softer containers.
Pill geometry (9999px) is rationed to status and loyalty markers only — Rapid Rewards tier badges, flight-status pills, filter chips. A pill on a primary button would break the brand. There is one compound radius in the system: the deal-card image clip at 12px 12px 0 0 to flush a destination photo against the card content beneath.
7. Depth & Elevation
| Level | Treatment | Use |
|---|---|---|
| 0 — Flat | no shadow | Body, hero, footer, navy bands, the grey canvas (~80% of surfaces) |
| 1 — Resting card | rgba(17,27,64,0.04) 0 1px 2px, rgba(17,27,64,0.08) 0 2px 6px | Cards and fare tiles at rest |
| 2 — Hover | rgba(17,27,64,0.16) 0 6px 20px | Cards on hover, dropdown menus |
| 3 — Modal | rgba(17,27,64,0.24) 0 12px 40px | Centred dialogs (date picker, login, fare details) |
| 4 — Scrim | rgba(17,27,64,0.55) ground | Global modal backdrop tone |
Shadow Philosophy
Southwest uses navy-tinted shadows (rgba(17,27,64,...)) rather than neutral grey throughout. The navy tint is a quiet brand reinforcement — even the elevation carries the brand’s deep blue. There are two practical card tiers plus the flat baseline and the modal level: resting (subtle 4–8% navy) and hover (16% navy, deeper and wider). Hover shadow is roughly 4× the resting blur and opacity, so the hover state reads as a clear lift event.
The system is deliberately low-elevation. Most of the page is flat — the grey canvas, the white bands, the navy footer all sit at level 0, separated by crisp hairlines and color contrast rather than depth. Cards earn a soft resting shadow to lift off the grey; modals earn the deepest tier to float above the scrim. There are no progressive Material-style 0–24dp ramps — Southwest trusts the canvas, the hairlines, and the rounded card clipping to communicate layering, reserving real shadow for the two moments (card hover, modal) where it matters.
8. Interaction & Motion
Easing
- Standard:
cubic-bezier(0.4, 0, 0.2, 1)— the default for hover color swaps, shadow transitions, scrim fades - Emphasized:
cubic-bezier(0.2, 0, 0, 1)— modal entry, sticky element snap-in, drawer slide - Out-soft:
cubic-bezier(0.0, 0, 0.2, 1)— date-picker month flip, accordion expand
Durations
| Bucket | Value | Use |
|---|---|---|
| Fast | 150ms | Hover color swaps, button background deepen, input border thicken |
| Standard | 240ms | Card hover shadow intensify, modal scrim fade, accordion expand |
| Slow | 320ms | Page-section transitions, image gallery slide, drawer open |
Per-Component Recipes
- Primary CTA hover: yellow background
#ffbf27→#f0b01cover 150ms standard ease; navy text holds. No transform — the button deepens in place; Southwest’s commerce-first stance avoids jumpy lifts. - Secondary CTA hover: blue background
#304cb2→#26409cover 150ms standard. - Card hover: shadow tier 1 → 2 over 240ms standard, navy-tinted; no transform. Keeps a grid of deal cards calm while scanning.
- Input focus: border thickens from 1px black to 2px bold blue (
#304cb2) over 150ms, with a 2px outline-offset ring fading in. - Nav tab hover/active: the yellow underline bar grows in from 0 → full width over 200ms emphasized ease; label color shifts to bold blue.
- Modal enter: scrim fades in over 200ms ease-out, then the dialog translates from
translateY(12px) opacity(0)totranslateY(0) opacity(1)over 280ms emphasized. - Accordion / fare details expand: height + opacity over 240ms standard; chevron rotates 180° in sync.
Page Transitions
Page-to-page navigation through the funnel (home → search → fare select → passenger info → payment) uses a soft fade and content swap rather than a slide — 200ms fade-out + 320ms fade-in. The funnel is sequential and goal-driven; the motion stays out of the way so the user keeps moving toward “Book”. Southwest optimises motion for time-to-decision and warmth, not flourish.
Reduced Motion
Respects prefers-reduced-motion: reduce. All transforms suppress; only opacity transitions remain. Card hover shadow change becomes instant; modal enter becomes a 120ms opacity-only fade; the nav underline appears instantly instead of growing; accordions snap open. Because the system is already low-motion by design, reduced-motion mode looks nearly identical to the default — the only practical change is at modal enter and the nav underline.
9. Accessibility & A11y
Contrast Pairs
| Pair | Ratio | Level |
|---|---|---|
| #000000 ink on #f4f4f4 canvas | 19.3 | AAA |
| #111b40 navy on #ffbf27 yellow (CTA) | 11.8 | AAA |
| #ffffff on #111b40 navy (footer) | 16.5 | AAA |
| #ffffff on #304cb2 blue (secondary CTA) | 7.4 | AAA |
| #304cb2 link on #f4f4f4 canvas | 6.6 | AA body / AAA large |
| #565656 muted on #f4f4f4 canvas | 6.5 | AA |
| #ffffff on #c4123c danger | 5.5 | AA body / AAA large |
| #ffffff on #1a7a3c success | 4.9 | AA body / AAA large |
The hero pairing — navy ink #111b40 on yellow #ffbf27 at 11.8:1 — is the brand’s most important contrast decision, and it passes AAA comfortably. This is why Southwest puts navy on yellow instead of white: white on #ffbf27 would land around 1.6:1 and fail every threshold. The navy-on-yellow choice is both a brand signature and an accessibility win.
Focus Indicators
Focus ring is 2px solid #304cb2 with 2px outline-offset — bold blue, matching the link colour. The funnel is keyboard-heavy (search fields, passenger forms, fare selection, payment), so a high-contrast brand-blue ring reinforces the interactive surface. Blue is chosen over yellow for the ring because yellow-on-grey focus would be lower-contrast; the blue ring reads clearly on every surface in the system.
ARIA Patterns
- Search bar:
role="search"on the outer container; the round-trip / one-way toggle is arole="radiogroup"; each city field opens arole="listbox"autocomplete - Fare grid: rendered as a
<table>with<th scope="col">fare tiers and<th scope="row">dates; each selectable cell is a<button>with a verbosearia-label(“Wanna Get Away, depart 8:05 AM, $79, select”) - Fare card: the “Select” CTA carries
aria-labelexpanding the tier and price; benefits use a real<ul> - Nav: product tabs use
aria-current="page"on the active tab; the yellow underline is decorative (aria-hidden) - Status pills: flight status conveyed in text (“Delayed”), not color alone — the pill color is reinforcement, never the sole signal
- Modal: focus trap inside, Esc closes, click-outside closes, focus returns to the trigger on close
Keyboard Navigation
- Top nav: Tab moves logo → product tabs → utilities (Español → Log in → Book CTA)
- Search bar: Tab through From → To → Depart → Return → Passengers → Search button
- Fare grid: Tab cell → cell across tiers and down dates; Enter selects a fare
- Forms: Tab top → bottom; Space toggles checkboxes (EarlyBird, bags); Enter submits the active step
- Date picker: arrow keys navigate days, Enter selects, Esc closes
- Modal: Tab cycles within the trap; Shift+Tab reverses; Esc closes
Screen Reader Hints
Southwest uses visible text labels over icon-only buttons throughout the funnel — every CTA names its outcome (“Search”, “Select”, “Continue to passenger info”), every fare cell announces tier + time + price. Color is never the sole carrier of meaning: flight status, fare differences, and validation all pair color with text. The few icon-only controls (heart-save, share, modal close) all carry aria-label. Confirmation numbers are announced character-by-character via aria-label so travellers can transcribe them accurately.
Reduced Motion
All transitions degrade to opacity-only when prefers-reduced-motion: reduce is set. Card hover shadow becomes instant, modal enter becomes a 120ms opacity-only fade, the nav underline appears instantly, and accordions snap open without height animation.
10. Responsive Behavior
Breakpoints
| Name | Width | Key Changes |
|---|---|---|
| Mobile | <640px | Top nav collapses to Heart logo + hamburger; product tabs move into a sheet; search bar stacks vertically (From → To → Depart → Return → Passengers → full-width Search); deal grid 1-up; fare grid becomes a swipeable tier carousel; footer columns become accordions |
| Tablet | 640–1024px | Nav keeps key tabs, rest behind a “More” menu; search bar in a 2-row layout; deal grid 2-up; fare grid shows 2–3 tiers with horizontal scroll |
| Desktop | 1024–1280px | Full top nav; search bar single-row with all segments + yellow Search; deal grid 3-up; full fare grid visible |
| Wide | >1536px | Content width caps at 1280px; the grey canvas absorbs the extra width in the gutters |
Touch Targets
- Primary CTAs: minimum 48×48px (meets WCAG AAA)
- Search-bar segments: 56px tall tap zones
- Nav tabs: 44px minimum height with 16px horizontal padding
- Fare-grid cells: 48px minimum tap height on touch surfaces
- Form inputs: 48px height throughout
- Icon buttons (heart, share, close): 44×44px minimum
Collapsing Strategy
- Product tabs collapse into a hamburger sheet below 640px
- The flight-search bar stacks from a single horizontal row into a vertical card with a full-width yellow Search button at the bottom
- The fare-tier comparison grid (the densest element) becomes a swipeable tier carousel on mobile, one tier per panel, with a sticky “Select” CTA
- Deal grid reflows 3-up → 2-up → 1-up
- The navy footer’s column link lists become tap-to-expand accordions on mobile
- Sticky elements (price summary, “Continue” CTA) dock to a sticky bottom bar on mobile checkout
Image Behavior
Destination and deal photos use aspect-ratio: 16/9 on desktop cards and aspect-ratio: 4/3 on mobile, filled with object-fit: cover and clipped to the card’s 12px 12px 0 0 top radius. Hero imagery is full-bleed with the yellow CTA overlaid on a navy or dark-overlay zone for contrast. Images lazy-load with low-res placeholders so the page stays fast on weak connections.
Container Queries
The fare-card uses container queries to compress its benefits list when the card narrows — the bullet list switches from full text to a count summary (“+3 more benefits”), and the price/CTA stack collapses to a single row when the card drops below ~280px.
11. Content & Voice
Tone
Friendly, warm, and a little playful — the “the Heart” personality. Southwest’s voice is the most human in US aviation: it’s confident about low fares, transparent about the no-frills-but-fair value (bags fly free, no change fees), and genuinely fun without being silly. Headlines lean into the brand’s promises (“Low fares. Nothing to hide.”, “Bags fly free.”, “Wanna Get Away?”) and treat the customer like a friend, not a transaction. The register stays warm even in a commerce funnel — the page is selling, but it’s smiling while it does.
Microcopy Patterns
- Button verbs: “Search”, “Book”, “Select”, “Continue”, “Check in” — direct and outcome-named, never “Submit”
- Value-prop recipe:
[Plain-spoken benefit] + [the "we mean it" reinforcement]— e.g., “Bags fly free. First and second checked bags. Weight and size limits apply.” - Scarcity/advisory recipe: stated plainly, never alarmist — “Only 2 seats left at this fare” rather than aggressive red-flag urgency
- Error message recipe:
[What's wrong] + [How to fix], warm — e.g., “We need a departure date to find your flights. Pick a date to keep going.” - Success confirmations: friendly and clear — “You’re all set! Confirmation #ABC123. We’ll see you at the gate.”
- Field labels: short and conversational — “Where from?”, “Where to?”, “Depart”, “Return”, “Passengers”
Empty States
Empty trip list: “No trips yet. Let’s find you a getaway — search a flight to get started.” — names the gap and points to the action with warmth. No flights found: “We couldn’t find flights for those dates. Try nearby dates or a different airport — we fly to lots of places.” — friendly, suggests two concrete remedies. Empty Rapid Rewards activity: “No recent activity. Book a flight to start earning points.” — direct and encouraging.
CTA Verb Conventions
- Primary action: “Search” (entry), “Select” (fare grid), “Continue” (funnel steps), “Book” / “Purchase” (final step)
- Secondary action: “Check in”, “Manage reservation”, “Add a flight”
- Tertiary text: “View fare rules”, “Edit search”, “Compare fares”
- Avoided: “Submit”, “Click here”, high-pressure “Buy now!” — Southwest prefers warm, plain verbs that respect the customer
12. Dark Mode & Theming
Light-only on the public web. Southwest’s brand is engineered around the warm light-grey canvas (#f4f4f4) with the yellow CTA voltage and bold-blue accents — the entire color-by-function system is tuned for a light surface. The mobile app ships a system-aware experience, but the marketing and booking web is explicitly light-only.
The brand reasoning: the yellow CTA’s power comes from its pop against light grey, and the navy-on-yellow contrast (11.8:1) is the brand’s signature accessibility move — both are calibrated for the light canvas. The deep-navy footer and the optional bold-blue/navy feature bands provide the only dark surfaces, and they’re intentional brand moments, not a theme switch. On those dark bands the system inverts cleanly: white text, yellow CTAs unchanged, blue accents lightened slightly for contrast.
If a dark theme were ever built, the safe mapping would be: canvas → deep navy (#111b40), surface → #1a2a5e, text → white, brand yellow unchanged (it works on navy), links → a lightened blue (#7e93e6 for AA on navy). But this is hypothetical — the production site is light-only by design.
13. Lineage & Influences
Southwest’s visual lineage runs through three traditions. First, mid-century American friendly-functional branding — the warm, optimistic, people-first commercial design of post-war American consumer brands, where bold flat color and approachable type signalled “this is for everyone.” The tri-color Heart and the sunny yellow descend directly from this lineage: the brand is built on warmth and inclusion, not luxury exclusivity. Second, the low-cost-carrier playbook that Southwest itself largely invented — the no-frills-but-fun register, the transparent pricing, the scrappy direct visual honesty that says “we spend on planes and people, not on a glossy website.” Third, modern transactional commerce UX — the booking funnel, the fare-comparison grid, the search-bar-leads-to-CTA pattern that every airline shares, executed here with more breathing room and warmth than legacy carriers.
What Southwest rejects is the cold corporate gravitas of legacy full-service airlines (the muted blues and silvers, the premium-cabin photography, the restrained luxury type) and equally the harsh bargain-bin austerity of ultra-low-cost rivals. It threads the needle: low-cost honesty delivered with genuine warmth. The yellow voltage, the navy-on-yellow CTA, the sharp 2px corners, the generous body line-height, and the playful “Wanna Get Away?” voice all serve one coherent personality — friendly, dependable, fun, fair. The custom Southwest Sans typeface is the keystone, engineered to feel human and legible across every device and connection its price-conscious customers travel with.
Influences:
- JetBlue — friendly low-cost-carrier branding and warm-modern airline UX, jetblue.com
- IKEA — blue + yellow value-signalling palette read as “trustworthy, accessible, fun”, ikea.com
- Mailchimp — playful-but-functional brand voice with bold flat color and warmth in a commerce context, mailchimp.com
- Paul Rand — mid-century American flat-color, logo-as-warmth corporate identity tradition, paulrand.design
- Frutiger / Helvetica — humanist and neo-grotesque sans ancestry behind Southwest Sans, linotype.com
14. Do’s and Don’ts
Do
- Put navy (
#111b40) text on the yellow CTA, never white — the navy-on-yellow contrast is the brand and the accessibility win (11.8:1) - Keep CTAs and inputs at the sharp 2px corner — it signals direct, dependable, scrappy
- Use the soft light-grey (
#f4f4f4) canvas, not pure white — warmth starts with the floor color - Make the yellow button the loudest thing in every section — it’s the funnel’s forward motion
- Use bold blue (
#304cb2) for every link and secondary action — confident and high-contrast - Run body at 16/400 with 1.55 line-height — breathing room is brand
- Reserve the Heart red (
#d31245) for the logo and love-campaign moments only - Draw input borders as crisp 1px black hairlines — the sharp black rule is a Southwest signature
- Use navy-tinted shadows (
rgba(17,27,64,...)) so even elevation carries the brand - Write CTAs as warm, plain verbs (“Search”, “Select”, “Book”) and keep the voice friendly
- Use
tnumon all fares, times, and confirmation codes so numbers align - Render the active nav tab with a 3px yellow underline + bold-blue label
Don’t
- Don’t put white text on the yellow CTA — it fails contrast (~1.6:1) and breaks the brand
- Don’t use pill radius on buttons — the 2px corner is the system; pills read premium/fintech
- Don’t switch the canvas to pure white —
#f4f4f4warmth is intentional - Don’t use the Heart red as a generic UI accent — it dilutes the logo’s meaning
- Don’t cram the page — generous spacing and 1.55 line-height are the friendly register
- Don’t add transform on card hover — only the navy shadow deepens
- Don’t introduce a fourth brand color — yellow + blue + navy (+ Heart red, sparingly) is the system
- Don’t write high-pressure urgency copy — Southwest is friendly, plain-spoken, never alarmist
- Don’t use grey input borders — Southwest draws them crisp and black
- Don’t introduce dark mode on the web — the system is tuned for the light canvas
- Don’t make blue compete with yellow — yellow leads (primary), blue follows (secondary/link)
- Don’t drop the visible CTA verbs for icon-only buttons in the funnel — name the outcome
15. Agent Prompt Guide
Quick Color Reference
Canvas (grey): #f4f4f4
White surface: #ffffff
Ink: #000000
Navy (on-yellow): #111b40
Brand-yellow: #ffbf27
Yellow-hover: #f0b01c
Bold-blue (link): #304cb2
Blue-hover: #26409c
Heart-red: #d31245
Muted: #565656
Border (hairline): #000000
Success-green: #1a7a3c
Danger-red: #c4123c
Example Component Prompts
- “Create a Southwest-style hero: warm light-grey (#f4f4f4) canvas, an 80px / 700 black headline with -0.03em tracking (‘Low fares. Nothing to hide.’), 18px / 400 supporting copy at 1.55 line-height beneath, and a primary CTA — yellow (#ffbf27) fill with navy (#111b40) text at 16px / 600, 2px radius, 12×24px padding, 48px height. Never white text on the yellow.”
- “Design a flight-search bar: white (#ffffff) surface, 2px radius, 1px crisp black (#000000) hairline, 56px tall, divided into From / To / Depart / Return / Passengers segments separated by thin black rules, terminating in a yellow (#ffbf27) ‘Search’ button with navy text at 56px height. Round-trip / one-way radio toggle above.”
- “Build a fare card: white surface, 12px radius, 2px bold-blue (#304cb2) outline to signal selectability, tier name ‘Wanna Get Away’ at 18px / 600, price ‘$79’ at 32px / 700 with tabular numerals, a benefits bullet list, and a yellow (#ffbf27) ‘Select’ CTA with navy text at the bottom (2px radius).”
- “Create a secondary button: bold-blue (#304cb2) fill, white text at 16px / 600, 2px radius, 12×24px padding, 48px height. Hover deepens to #26409c. Use for ‘Check in’ and ‘Manage reservation’ — supports the yellow primary without competing.”
- “Design a top nav: white (#ffffff) masthead at 64px with a 1px soft-grey bottom hairline, tri-color Heart logo flush left, navy (#111b40) product tabs (Book, Check in, Flight status, Rapid Rewards), a yellow ‘Book a flight’ CTA right. The active tab gets a bold-blue (#304cb2) label with a 3px yellow (#ffbf27) underline bar.”
- “Build a text input: white surface, crisp 1px black (#000000) hairline border, 2px radius, 48px height, 12×14px padding, label above at 13px / 500. On focus the border thickens to 2px bold blue (#304cb2) with a 2px outline-offset ring.”
Iteration Guide
- Start on warm grey, not white. The canvas is
#f4f4f4. If your floor is pure white, you’ve lost the brand’s warmth before you’ve placed a single element. - Yellow CTA + navy text, always. The single most recognisable Southwest move. White on yellow fails contrast and reads as a generic warning banner — navy on yellow is the brand.
- Keep interactive corners at 2px. Buttons, inputs, the search bar stay nearly square. If a button looks like a pill, it’s a different airline.
- Let the yellow lead, blue follow. Yellow = primary CTA. Blue = links and secondary actions. Never let blue out-shout the yellow button.
- Body at 16/400, line-height 1.55. Breathing room is brand. If the composition feels cramped, you’ve drifted toward a dense booking grid and away from Southwest’s friendly register.
- Ration the Heart red. Red (
#d31245) belongs in the logo and love-campaign moments. Using it as a generic accent dilutes the Heart. - Navy-tint the shadows. Use
rgba(17,27,64,...)not neutral grey — the brand lives in the elevation too. Card hover is shadow-only, never transform. - Write warm, plain CTA verbs. “Search”, “Select”, “Book”, “Check in” — friendly and outcome-named. The voice should feel like a helpful friend, not a hard sell.
Drop southwest into your project, then ship the actual sections in an afternoon.
npx @webdesignhot/design-md add southwest npx agentkit init --design southwest