394 lines
29 KiB
Markdown
394 lines
29 KiB
Markdown
# Design System Inspired by Airbnb
|
||
|
||
> Category: E-Commerce & Retail
|
||
> Travel marketplace. Warm coral accent, photography-driven, rounded UI.
|
||
|
||
## 1. Visual Theme & Atmosphere
|
||
|
||
Airbnb's 2026 design feels like a travel magazine that happens to be an app — pristine white canvases give way to full-bleed photography, and the interface itself disappears so the listings can breathe. The signature Rausch coral-pink (`#ff385c`) is used sparingly but unmistakably: search CTA, active tab indicator, primary action button, the occasional price or wishlist heart. Everything else is a disciplined grayscale, with `#222222` carrying almost every line of text.
|
||
|
||
What makes the system unmistakably Airbnb is how much *faith* it places in content. Property photos are displayed at hero scale, 4:3 with edge-to-edge radius treatment. Category switching happens through a tri-tab picker (Homes / Experiences / Services) that uses 3D rendered illustrated icons (a pitched-roof house, a hot-air balloon, a service bell) — physical, tactile, almost toy-like — paired with crisp `Airbnb Cereal VF` labels. This is the rare consumer product where 3D renders and purely typographic UI coexist without tension.
|
||
|
||
The newest surface is the **Experiences** product line — same chrome, but richer card density, more photography, and a center-anchored booking panel with sticky right-rail pricing. Listing detail pages (both rooms and experiences) follow a tight template: full-bleed hero image grid → overlapping rounded booking card (sticky on scroll) → amenities → reviews (Guest Favorite awards use a big centered `4.81` rating with a laurel-wreath lockup) → map → host profile → disclosures. The rhythm is consistent whether you're booking a room or a yacht tour.
|
||
|
||
**Key Characteristics:**
|
||
- Rausch coral-pink (`#ff385c`) as a single-accent brand color, used only for primary CTAs and the search button
|
||
- Full-bleed photography at 4:3 / 16:9 with gentle corner rounding (14–20px) as the primary visual vocabulary
|
||
- 3D rendered category icons paired with typographic tabs — the one place the system allows illustration
|
||
- Circular `50%` icon buttons (back arrow, share, favorite, carousel arrows) scattered throughout
|
||
- `Airbnb Cereal VF` carries every label, from 8px legal footnote to 28px section heading — a single-family system
|
||
- Product-tier color coding: Airbnb Plus (magenta `#92174d`), Airbnb Luxe (deep purple `#460479`), Airbnb (Rausch coral)
|
||
- Guest Favorite award lockup — centered giant rating number between two laurel wreaths, one of the most recognizable moments in the system
|
||
- Sticky booking panel with a price → dates → guests stack, pinned to the right rail on desktop, transforming to a bottom-anchored "Reserve" bar on mobile
|
||
- Sticky bottom mobile navigation (Explore / Wishlists / Log in) with an active-state Rausch tint
|
||
|
||
## 2. Color Palette & Roles
|
||
|
||
### Primary
|
||
- **Rausch** (`#ff385c`): The brand's signature coral-pink. CSS variable `--palette-bg-primary-core`. Used for: primary "Reserve" button, search submit button, active tab underline, wishlist heart fill, pricing emphasis. The single highest-visibility color on every page.
|
||
|
||
### Secondary & Accent
|
||
- **Deep Rausch** (`#e00b41`): A more saturated variant. CSS variable `--palette-bg-tertiary-core`. Used for pressed/active button states and gradient terminal stops.
|
||
- **Plus Magenta** (`#92174d`): CSS variable `--palette-bg-primary-plus`. The brand color for the Airbnb Plus product tier — a higher-end curated-listing offering.
|
||
- **Luxe Purple** (`#460479`): CSS variable `--palette-bg-primary-luxe`. The brand color for the Airbnb Luxe product tier — villa/estate-level rentals.
|
||
- **Info Blue** (`#428bff`): CSS variable `--palette-text-legal`. Used for legal/informational links (terms, privacy, disclosures) — the only non-monochrome link color in the system.
|
||
|
||
### Surface & Background
|
||
- **Canvas White** (`#ffffff`): The default page background. Every card, every container, every detail page starts here.
|
||
- **Soft Cloud** (`#f7f7f7`): Subtle subsurface tint used on footer backgrounds, map-view wrappers, and "everything else" sections that want to step back from the primary white.
|
||
- **Hairline Gray** (`#dddddd`): Ubiquitous 1px border color — separates cards, amenity rows, review panels, footer columns. The workhorse of the layout system.
|
||
|
||
### Neutrals & Text
|
||
- **Ink Black** (`#222222`): CSS variable `--palette-text-primary`. The system's near-black. Every heading, every body paragraph, every nav label, every price. Used for ~90% of all text on a page.
|
||
- **Charcoal** (`#3f3f3f`): CSS variable `--palette-text-focused`. Used in focused-state input text and one-step-down emphasis copy.
|
||
- **Ash Gray** (`#6a6a6a`): CSS variable `--palette-bg-tertiary-hover`. Secondary labels, "Cottage rentals" subtitle-style copy under city names, muted footer links.
|
||
- **Mute Gray** (`#929292`): CSS variable `--palette-text-link-disabled`. Disabled buttons and low-priority metadata.
|
||
- **Stone Gray** (`#c1c1c1`): Tertiary dividers, icon strokes, placeholder avatars.
|
||
|
||
### Semantic & Accent
|
||
- **Error Red** (`#c13515`): CSS variable `--palette-text-primary-error`. Form validation errors, destructive-action warnings.
|
||
- **Deep Error** (`#b32505`): CSS variable `--palette-text-secondary-error-hover`. Pressed/active variants of error states.
|
||
- **Translucent Black** (`rgba(0, 0, 0, 0.24)`): CSS variable `--palette-text-material-disabled`. Disabled material-style labels.
|
||
|
||
### Gradient System
|
||
Airbnb's brand gradient appears sparingly, typically only on the wordmark and the search-button branded moment:
|
||
|
||
```
|
||
linear-gradient(90deg, #ff385c 0%, #e00b41 50%, #92174d 100%)
|
||
```
|
||
|
||
This coral → magenta sweep is the "branded moment" — never used as a full surface, only as a narrow pill fill or logo treatment.
|
||
|
||
## 3. Typography Rules
|
||
|
||
### Font Family
|
||
- **Airbnb Cereal VF** (primary and only): The proprietary variable-weight sans-serif that carries the entire system. Fallbacks (in order): `Circular, -apple-system, system-ui, Roboto, Helvetica Neue, sans-serif`.
|
||
|
||
Weights observed in the extracted tokens: 500, 600, 700. No 400-regular — the system's "body" weight is 500, which gives every block of text a subtle extra density that reads as confident and deliberate.
|
||
|
||
OpenType features: `salt` (stylistic alternates) is used on the compact 11px and 14px 600-weight labels — likely for tighter numerals and special-character shaping. No ligature or fractional-numeral features observed.
|
||
|
||
### Hierarchy
|
||
|
||
| Role | Size | Weight | Line Height | Letter Spacing | Notes |
|
||
|------|------|--------|-------------|----------------|-------|
|
||
| Section Heading | 28px / 1.75rem | 700 | 1.43 | 0 | "Inspiration for future getaways" — page-level headings |
|
||
| Subsection Heading | 22px / 1.38rem | 500 | 1.18 | -0.44px | "What this place offers", "Meet the hosts" — content dividers |
|
||
| Card Title | 21px / 1.31rem | 700 | 1.43 | 0 | Review panel headings, card lead titles |
|
||
| Listing Title | 20px / 1.25rem | 600 | 1.20 | -0.18px | "Small Group Yacht Tour, Unlimited Wine & Fruits" — listing headlines on detail pages |
|
||
| Subtitle Bold | 16px / 1.00rem | 600 | 1.25 | 0 | Host name, city name |
|
||
| Body Medium | 16px / 1.00rem | 500 | 1.25 | 0 | Primary body copy on detail pages |
|
||
| Button Large | 16px / 1.00rem | 500 | 1.25 | 0 | "Reserve", "Become a host" |
|
||
| Button Default | 14px / 0.88rem | 500 | 1.29 | 0 | Standard button labels |
|
||
| Link | 14px / 0.88rem | 500 | 1.43 | 0 | Nav links, footer links |
|
||
| Caption Medium | 14px / 0.88rem | 500 | 1.29 | 0 | Metadata, subtitle lines ("Cottage rentals", "Villa rentals") |
|
||
| Caption Bold | 14px / 0.88rem | 600 | 1.43 | 0 | `salt` feature enabled — numeric stats, small-text emphasis |
|
||
| Caption Small | 13px / 0.81rem | 400 | 1.23 | 0 | Review dates, micro-metadata |
|
||
| Micro Default | 12px / 0.75rem | 400 | 1.33 | 0 | Footer disclaimers, legal micro-copy |
|
||
| Micro Bold | 12px / 0.75rem | 700 | 1.33 | 0 | "NEW" pill labels |
|
||
| Badge Uppercase | 11px / 0.69rem | 600 | 1.18 | 0 | `salt` feature — compact category/status badges |
|
||
| Superscript | 8px / 0.50rem | 700 | 1.25 | 0.32px | Uppercase — price footnotes, decimal tails |
|
||
|
||
### Principles
|
||
- **One family, many weights.** Airbnb Cereal VF handles everything from 8px legal to 28px page headings — the visual identity comes from the family itself, not from typeface mixing.
|
||
- **500 is the new 400.** The system's "regular" weight is 500, giving every paragraph a slightly more confident texture than the web default.
|
||
- **Negative tracking on display type only.** Headings 20px+ compress tracking by -0.18 to -0.44px to feel chiseled; body sizes stay at 0 tracking for readability.
|
||
- **Tight line-heights for headlines, generous for body.** Display type runs at 1.18–1.25 (tight); body and caption open up to 1.43 for long-form comfort.
|
||
- **No all-caps except at 8px.** The only uppercase transform in the system is the 8px superscript — everywhere else, sentence case with subtle weight shifts does the work.
|
||
|
||
### Note on Font Substitutes
|
||
Airbnb Cereal VF is proprietary. The closest open-source substitute is **Circular Std** (still commercial) or **Inter** (free, Google Fonts) with letter-spacing reduced by -0.01em at display sizes. For strict brand fidelity, the documented fallback chain (`Circular, -apple-system, system-ui`) renders acceptably on macOS/iOS where `system-ui` resolves to San Francisco, which has similar proportions.
|
||
|
||
## 4. Component Stylings
|
||
|
||
### Buttons
|
||
|
||
**Primary CTA** ("Reserve", "Search", "Add dates")
|
||
- Background: Rausch `#ff385c`
|
||
- Text: Canvas White `#ffffff`, Airbnb Cereal 500, 16px
|
||
- Padding: ~14px vertical, 24px horizontal
|
||
- Radius: 8px (rectangular) or 50% (circular icon variant)
|
||
- Border: none
|
||
- Active/pressed: `transform: scale(0.92)` plus a 2px `#222222` focus ring at `0 0 0 2px`
|
||
|
||
**Secondary Button** ("Become a host", outlined tertiary actions)
|
||
- Background: `#ffffff`
|
||
- Text: Ink Black `#222222`, Airbnb Cereal 500, 14–16px
|
||
- Padding: 10px 16px
|
||
- Radius: 20px (pill) or 8px (rectangular)
|
||
- Border: 1px solid Hairline Gray `#dddddd`
|
||
|
||
**Icon-Only Circular Button** (back arrow, share, favorite, carousel controls)
|
||
- Background: `#f2f2f2` (slightly off-white) or white with 1px translucent black border
|
||
- Icon: `#222222` outline stroke, 16–20px
|
||
- Size: 32–44px diameter
|
||
- Radius: 50%
|
||
- Active/pressed: `transform: scale(0.92)`; subtle 4px white ring `0 0 0 4px rgb(255,255,255)` to separate from colorful photography backgrounds
|
||
|
||
**Disabled Button**
|
||
- Background: `#f2f2f2`
|
||
- Text: Stone Gray `#c1c1c1`
|
||
- Opacity: 0.5
|
||
|
||
**Pill Tab Button** (category selector "Homes / Experiences / Services")
|
||
- Background: transparent
|
||
- Text: Ink Black `#222222`, Airbnb Cereal 500, 16px
|
||
- Padding: 8px 14px
|
||
- Active state: 2px Ink Black underline beneath the label
|
||
- Paired with a 36–48px 3D-rendered illustrated icon above the label
|
||
|
||
### Cards & Containers
|
||
|
||
**Listing Card** (homepage grid, search results)
|
||
- Background: `#ffffff`
|
||
- Radius: 14px on the image, text sits directly below on transparent background
|
||
- Image: 4:3 aspect ratio, full-bleed, rounded with the same 14px radius
|
||
- Padding: none on the outer container; 12px spacing between image and metadata rows
|
||
- Shadow: none — separation comes from whitespace and the intrinsic radius of the photograph
|
||
- Metadata pattern: City/region on line 1 (16px 600), distance/duration on line 2 (14px 500 Ash Gray), date range on line 3, price row with "per night" at the bottom
|
||
|
||
**Detail Page Booking Panel** (sticky right rail on room/experience pages)
|
||
- Background: `#ffffff`
|
||
- Radius: 14–20px
|
||
- Border: 1px solid Hairline Gray `#dddddd`
|
||
- Shadow: `rgba(0, 0, 0, 0.02) 0 0 0 1px, rgba(0, 0, 0, 0.04) 0 2px 6px 0, rgba(0, 0, 0, 0.1) 0 4px 8px 0` — a stacked three-layer subtle elevation
|
||
- Padding: 24px
|
||
- Width: ~370px, pinned 120–140px below the viewport top
|
||
- Content: price headline → date picker → guest dropdown → primary CTA → "You won't be charged yet" footnote
|
||
|
||
**Amenity Grid Card** (on listing detail pages)
|
||
- Background: `#ffffff`
|
||
- Border: 1px solid Hairline Gray `#dddddd` at the row level (not per item)
|
||
- Padding: 16px vertical per amenity row
|
||
- Icon + label pattern: 24px outline icon on the left, 16px 500-weight label on the right
|
||
|
||
**Review Card** (individual review on detail pages)
|
||
- Background: `#ffffff`, no border
|
||
- Padding: 0 (relies on grid gaps)
|
||
- Content: 40px circular avatar + 16px 600-weight name + 14px 400 Ash Gray date on one row, then 14px 500 body paragraph below
|
||
|
||
### Inputs & Forms
|
||
|
||
**Search Bar** (primary home page)
|
||
- Background: `#ffffff`
|
||
- Border: 1px solid Hairline Gray `#dddddd` wrapping all three segments (Where / When / Who)
|
||
- Radius: 32px (full pill)
|
||
- Shadow: `rgba(0, 0, 0, 0.04) 0 2px 6px 0` — subtle floating feel
|
||
- Structure: three segments divided by thin vertical dividers, each segment has a 12px 500 label above a 14px 500 placeholder
|
||
- Submit: Rausch circular icon button at the right edge, 48px diameter
|
||
|
||
**Text Input** (generic forms)
|
||
- Background: `#ffffff`
|
||
- Border: 1px solid Hairline Gray `#dddddd`
|
||
- Radius: 8px
|
||
- Padding: 14px 16px
|
||
- Focus: border switches to Ink Black, adds `0 0 0 2px` black outer ring
|
||
- Error: border switches to `#c13515` (Error Red), helper text uses same color
|
||
|
||
**Date Picker**
|
||
- Calendar grid: 7-column layout, circular `50%` day cells 40–44px wide
|
||
- Selected range: Ink Black `#222222` background with white numerals
|
||
- Start/end anchors: larger filled circles; middle dates use Soft Cloud `#f7f7f7` tint
|
||
|
||
### Navigation
|
||
|
||
**Top Nav (Desktop)**
|
||
- Height: ~80px
|
||
- Background: `#ffffff`
|
||
- Left: Airbnb wordmark+logo lockup in Rausch (102×32px)
|
||
- Center: tri-tab category picker (Homes / Experiences / Services) with 36–48px 3D icons stacked above 16px 500 labels; active tab has a 2px Ink Black underline
|
||
- Right: "Become a host" text link, then 32px circular globe (language), then 36px hamburger avatar menu
|
||
- Border-bottom: 1px solid Hairline Gray `#dddddd`
|
||
|
||
**Top Nav (Mobile)**
|
||
- Single-row search pill occupies full width: "Start your search" placeholder with a small magnifier icon
|
||
- Below: tri-tab category picker persists (Homes / Experiences / Services) — illustrated icons shrink to ~28px
|
||
- Bottom-fixed tab bar: Explore (active state Rausch) / Wishlists / Log in — 24px icons above 12px labels
|
||
|
||
**Listing Detail Secondary Nav**
|
||
- Sticky horizontal scroll of anchor links (Photos · Amenities · Reviews · Location · Host) appears on scroll past the hero image
|
||
- Height: 56px
|
||
- Border-bottom: 1px solid Hairline Gray
|
||
|
||
### Image Treatment
|
||
|
||
- **Primary aspect ratios**: 4:3 for homepage listing grids, 16:9 for experience hero photography, 1:1 for avatars
|
||
- **Radius**: 14px on listing-grid images, 20px on detail-page hero photo frames, `50%` on avatars
|
||
- **Image grid on detail pages**: five-photo grid with a single large-left image (50% width) and four smaller photos in a 2×2 grid on the right, all sharing the 20px outer rounded container
|
||
- **Lazy loading**: heavy use of `loading="lazy"` with blurred placeholder previews
|
||
- **Carousel**: circular 32px arrow buttons overlay the image, centered vertically; dot indicators sit 12px above the bottom edge
|
||
|
||
### Signature Components
|
||
|
||
**Guest Favorite Award Lockup** (featured prominently on high-rated listing detail pages)
|
||
- Centered rating number rendered at 44–56px 700-weight
|
||
- Two hand-drawn laurel-wreath SVG illustrations flanking left and right at ~48px tall
|
||
- Below: "Guest Favorite" label at 12px 700 uppercase with `0.32px` tracking, and a short sub-label at 14px 500 Ash Gray
|
||
- Full-width block, no container border — sits directly on white canvas
|
||
|
||
**Tri-Tab Category Picker** (appears at the top of every browse surface)
|
||
- Three tabs: Homes / Experiences / Services
|
||
- Each tab: 3D-rendered illustrated icon (~48px tall) above 16px 500 label
|
||
- Experiences and Services currently carry a small navy-blue "NEW" pill (12px 700 white text on dark blue) floating top-right of the icon
|
||
- Active tab: 2px Ink Black underline beneath the label
|
||
|
||
**Inspiration City Grid** (homepage "Inspiration for future getaways")
|
||
- 6-column grid of destination links on desktop, 2-column on mobile
|
||
- Each cell: 16px 600 city name on line 1, 14px 500 Ash Gray rental-type subtitle on line 2 ("Cottage rentals", "Villa rentals")
|
||
- No images — text-only grid
|
||
- Tabbed above by category (Popular / Arts & culture / Beach / Mountains / Outdoors / Things to do / Travel tips & inspiration / Airbnb-friendly apartments) — active tab has 2px underline and weight shift
|
||
|
||
**Reserve Sticky Card** (listing detail pages)
|
||
- Stays fixed 120px below viewport top on desktop as the user scrolls past the hero
|
||
- Collapses to a full-width bottom bar on mobile with a "From $X / night" label and a Rausch "Reserve" pill
|
||
- Always shows: price headline → date display → guest selector → Rausch CTA → "You won't be charged yet" disclaimer
|
||
|
||
**Experience Host Card** (experience detail pages)
|
||
- Full-width rounded container with a 3:2 cover photograph at top
|
||
- Host avatar (circular, 56px) overlapping the bottom edge of the cover by 50%
|
||
- Below overlap: host name at 16px 700, host tenure at 14px 500 Ash Gray, small Rausch "Message host" pill button
|
||
- Used as the transition between reviews and the amenities/location block
|
||
|
||
**"Things to know" Strip** (listing detail pages)
|
||
- 3-column grid of rule/policy blocks (House rules, Safety & property, Cancellation policy)
|
||
- Each column: icon at the top, 16px 600 heading, 14px 500 Ash Gray body, "Show more" link in Ink Black underline
|
||
- Separator: 1px Hairline Gray top and bottom borders on the overall strip
|
||
|
||
## 5. Layout Principles
|
||
|
||
### Spacing System
|
||
- **Base unit**: 8px
|
||
- **Extracted scale**: 2, 3, 4, 5.5, 6, 8, 10, 11, 12, 15, 16, 18.5, 22, 24, 32px — fine-grained with a handful of off-grid values used for pixel-perfect icon alignment
|
||
- **Section padding**: ~48–64px top/bottom on desktop, 24–32px on mobile
|
||
- **Card internal padding**: 24px on booking panels and large cards, 16px on amenity rows, 12px on listing-card metadata
|
||
- **Gutter between listing cards**: 24px desktop, 16px mobile
|
||
- **Between stacked text rows**: 4–8px (very tight — reinforces the "dense information" feel of travel listings)
|
||
|
||
### Grid & Container
|
||
- **Max content width**: 1760–1920px on ultra-wide (Airbnb lets the grid breathe farther than most sites); 1280px on most detail pages
|
||
- **Homepage listing grid**: 6 columns at ≥1760px, 5 at ≥1440px, 4 at ≥1128px, 3 at ≥800px, 2 at ≥550px, 1 below
|
||
- **Detail page**: 2-column asymmetric — main content ~58%, sticky booking panel ~36% on the right, ~6% gutter
|
||
- **Footer**: 3-column Support / Hosting / Airbnb
|
||
|
||
### Whitespace Philosophy
|
||
Airbnb is densely informative but never cramped. Whitespace is used to *group* — listing cards have 24px of gutter so each photograph reads as a distinct object, but the metadata under each card uses 4–8px gaps so the price/city/date feels like a single unit. The detail-page booking panel has 24px internal padding, but rows within (date picker, guest selector, CTA) are stacked at 12px — the boundary between the card and the page does more separation work than the content within.
|
||
|
||
### Border Radius Scale
|
||
| Radius | Use |
|
||
|--------|-----|
|
||
| 4px | Inline anchor tags, tag chips |
|
||
| 8px | Text buttons, dropdowns, small utility buttons |
|
||
| 14px | Listing card photography, generic content containers, badges |
|
||
| 20px | Primary rounded buttons (pill shape), large images, booking panel |
|
||
| 32px | Search bar pill, extra-large containers |
|
||
| 50% | All circular icon buttons, all avatars, wishlist hearts — the system's signature round geometry |
|
||
|
||
## 6. Depth & Elevation
|
||
|
||
| Level | Treatment | Use |
|
||
|-------|-----------|-----|
|
||
| 0 | No shadow | Listing cards, body content, text-only sections |
|
||
| 1 | `rgba(0, 0, 0, 0.08) 0 4px 12px` | Active/pressed icon buttons (e.g., back, share, favorite) — subtle lift to indicate interaction |
|
||
| 2 | `rgba(0, 0, 0, 0.02) 0 0 0 1px, rgba(0, 0, 0, 0.04) 0 2px 6px 0, rgba(0, 0, 0, 0.1) 0 4px 8px 0` | Booking panel sticky card, modals, dropdown menus — the system's signature three-layer elevation |
|
||
| Focus Ring | `0 0 0 2px #222222` | Active-state buttons, focused search input |
|
||
| White Separator Ring | `rgb(255, 255, 255) 0 0 0 4px` | Circular buttons overlaid on photographs — a 4px white ring cleanly separates the button from colorful image backgrounds |
|
||
|
||
Shadow philosophy: Airbnb uses **stacked layered shadows** rather than a single drop. The three-layer booking-panel shadow reads as one cohesive lift but is actually three separate shadows at different opacity/blur values — creating subtle anti-aliasing at the shadow's perimeter that feels premium without being heavy.
|
||
|
||
### Decorative Depth
|
||
- **Photography as depth**: the system relies heavily on full-bleed photography to create visual depth; shadows and gradients are used sparingly so the photographs do the heavy lifting
|
||
- **Laurel wreath lockup**: the Guest Favorite award uses two SVG laurel illustrations that give the otherwise-flat rating number a ceremonial, trophy-like presence
|
||
- **3D rendered category icons**: Homes/Experiences/Services icons have their own soft internal lighting and subtle cast shadows baked into the artwork — the only place the brand allows "dimensional" illustration
|
||
|
||
## 7. Do's and Don'ts
|
||
|
||
### Do
|
||
- Reserve Rausch `#ff385c` for primary actions and the active-tab indicator — never dilute it with decorative uses.
|
||
- Let photography breathe — 4:3 crops with 14–20px rounded corners, no overlaid text, no gradient scrims.
|
||
- Use Ink Black `#222222` for every text layer below Rausch — this is the system's near-black, never true `#000000`.
|
||
- Pair the tri-tab category picker's 3D illustrated icons with flat typography — don't mix illustration styles within a single surface.
|
||
- Stack three low-opacity shadows (~2%, 4%, 10%) to create the signature booking-panel elevation.
|
||
- Use Hairline Gray `#dddddd` 1px borders for every card-to-card and row-to-row divider.
|
||
- Treat the booking panel as sticky on desktop, collapsing to a bottom-anchored reserve bar on mobile.
|
||
- Use 4–8px spacing within metadata groups and 24px between cards — information density is intentional.
|
||
|
||
### Don't
|
||
- Don't introduce secondary accent colors outside the Rausch / Plus Magenta / Luxe Purple product-tier palette.
|
||
- Don't place text inside photographs — captions always sit below the image, never overlaid.
|
||
- Don't use all-caps labels except the single 8px superscript role.
|
||
- Don't round icon buttons to anything other than 50% — circular is the system's signature geometry.
|
||
- Don't add drop shadows to listing cards — they sit on white canvas with no elevation.
|
||
- Don't use gradient backgrounds — the only gradient in the system is a narrow Rausch → magenta sweep on the wordmark.
|
||
- Don't use the 400-regular font weight — Airbnb Cereal's body weight is 500.
|
||
- Don't override Airbnb Cereal VF with a different display face — the system is intentionally single-family.
|
||
|
||
## 8. Responsive Behavior
|
||
|
||
### Breakpoints
|
||
|
||
Airbnb declares ~60 breakpoints (design-time artifact from their component library), but the meaningful layout shifts happen at a much smaller set:
|
||
|
||
| Name | Width | Key Changes |
|
||
|------|-------|-------------|
|
||
| Ultra-wide | ≥1760px | 6-column listing grid, 1760–1920px max content width |
|
||
| Desktop XL | 1440–1759px | 5-column grid, full nav visible, sticky right-rail booking panel |
|
||
| Desktop | 1128–1439px | 4-column grid, sticky booking panel persists |
|
||
| Laptop | 1024–1127px | 3–4 column grid, category nav remains horizontal |
|
||
| Tablet | 800–1023px | 3-column grid, global search may collapse to a single-row pill |
|
||
| Small tablet | 550–799px | 2-column grid, booking panel drops to full-width inline block |
|
||
| Mobile | 375–549px | 1-column stacked layout, bottom-fixed tab bar appears (Explore / Wishlists / Log in) |
|
||
| Small mobile | <375px | Edge padding tightens to 16px; category-picker icons shrink to ~28px |
|
||
|
||
### Touch Targets
|
||
All interactive elements meet or exceed 44×44px. The circular icon button family is specifically sized 32–44px with 8–12px extended hit-area padding. The Rausch primary Reserve button is ~48px tall. The tri-tab category picker's hit area is the full label-plus-icon rectangle (typically ~64×80px per tab).
|
||
|
||
### Collapsing Strategy
|
||
- **Nav**: Top nav keeps Airbnb wordmark + tri-tab picker on tablet and above; on mobile the picker slides just below the search pill, and the globe/avatar controls move to a bottom-anchored tab bar.
|
||
- **Search bar**: Three-segment pill (Where / When / Who) with a Rausch circular submit button on desktop; collapses to a single-row "Start your search" pill on mobile, tapping which opens a full-screen search sheet.
|
||
- **Booking panel**: Sticky right-rail on ≥1128px; inline within the main content column between 800–1127px; bottom-fixed "Reserve" pill on <800px.
|
||
- **Listing grid**: Reflows 6 → 5 → 4 → 3 → 2 → 1 columns across breakpoints.
|
||
- **Detail-page image grid**: Five-image layout (1 large + 4 small) on desktop; becomes a swipeable full-bleed carousel on mobile with page-dot indicators.
|
||
- **Footer**: 3-column layout collapses to stacked single-column at <800px.
|
||
|
||
### Image Behavior
|
||
- `loading="lazy"` universal, with blurred `im_w=` URL-parameterized preview thumbs served first
|
||
- Responsive images use Airbnb's `muscache.com` CDN with `im_w` query parameter for width-based delivery (`im_w=240`, `im_w=720`, `im_w=1200`, `im_w=2400`)
|
||
- No art-direction crops — the same image is scaled up/down across breakpoints
|
||
- Carousels auto-advance photo height to maintain a consistent 4:3 ratio regardless of source aspect
|
||
|
||
## 9. Agent Prompt Guide
|
||
|
||
### Quick Color Reference
|
||
- Primary CTA: "Rausch (#ff385c)"
|
||
- Page background: "Canvas White (#ffffff)"
|
||
- Subsurface: "Soft Cloud (#f7f7f7)"
|
||
- Heading / body text: "Ink Black (#222222)"
|
||
- Secondary text: "Ash Gray (#6a6a6a)"
|
||
- Border / divider: "Hairline Gray (#dddddd)"
|
||
- Error: "Error Red (#c13515)"
|
||
- Info link: "Info Blue (#428bff)"
|
||
- Luxe tier accent: "Luxe Purple (#460479)"
|
||
- Plus tier accent: "Plus Magenta (#92174d)"
|
||
|
||
### Example Component Prompts
|
||
- "Create a primary Reserve button: Rausch (#ff385c) background, white Airbnb Cereal 500-weight label at 16px, 14px × 24px padding, 8px border-radius, no shadow. On active/pressed add `transform: scale(0.92)` with a 2px Ink Black focus ring (`0 0 0 2px #222222`)."
|
||
- "Build a listing card with a 4:3 full-bleed photograph at 14px border-radius, no container shadow; below the image stack three text rows with 4px gaps: city name at 16px 600 Ink Black, rental type at 14px 500 Ash Gray (#6a6a6a), and price range in 16px 500 Ink Black with a 14px `per night` suffix."
|
||
- "Design a sticky booking panel: white background, 14px border-radius, 1px Hairline Gray (#dddddd) border, 3-layer elevation shadow (`rgba(0,0,0,0.02) 0 0 0 1px, rgba(0,0,0,0.04) 0 2px 6px 0, rgba(0,0,0,0.1) 0 4px 8px 0`), 24px padding, 370px width, pinned 120px below viewport top on desktop. Contents: price headline, date picker, guest dropdown, Rausch primary CTA, and a 12px Ash Gray `You won't be charged yet` disclaimer."
|
||
- "Create a tri-tab category picker: three equal-width tabs labeled Homes, Experiences, Services; each tab has a ~48px 3D-rendered illustrated icon (house, balloon, bell) above a 16px 500 Ink Black label; active tab gets a 2px Ink Black underline; add a small 12px 700 white `NEW` pill on a dark navy background to the top-right of the Experiences and Services icons."
|
||
- "Render the Guest Favorite award lockup: a centered rating number at 52px 700-weight Ink Black, flanked left and right by hand-drawn SVG laurel wreaths at ~48px tall; below, a 12px 700 uppercase `GUEST FAVORITE` label with 0.32px tracking; sub-label at 14px 500 Ash Gray; full-width block sitting directly on white canvas with no container border."
|
||
|
||
### Iteration Guide
|
||
When refining existing screens generated with this design system:
|
||
1. Focus on ONE component at a time.
|
||
2. Reference specific color names and hex codes from this document (e.g., "Ink Black #222222", not "dark gray").
|
||
3. Use natural language descriptions alongside measurements ("subtle three-layer elevation" rather than a long shadow string).
|
||
4. Describe the desired "feel" ("magazine-like, photography-first" vs "dense utility").
|
||
5. Always default to Airbnb Cereal VF 500-weight for body and 600–700 for emphasis — never 400.
|
||
6. Keep Rausch pink scarce — if more than one Rausch-colored element appears per viewport, consider whether one should be neutralized.
|
||
|
||
### Known Gaps
|
||
- **Homepage listing grid cards**: the main property-card grid (the primary visual surface of airbnb.com) was not fully captured in the extracted homepage screenshots — content loaded only partially. Listing Card specs above are inferred from the Inspiration grid structure and Airbnb's broader conventions; confirm exact aspect ratios and metadata hierarchy against the live site before production use.
|
||
- **Experiences category icons**: the 3D illustrated icons for Homes / Experiences / Services are served as raster assets; their exact source-file specifications (SVG vs PNG, rendered pixel dimensions) are not documented here.
|
||
- **Animation and transition timings**: not captured — static extraction scope.
|
||
- **Dark mode**: Airbnb does not ship a native dark mode in the extracted product surfaces; this document describes the single light-mode theme only.
|