Marriott Bonvoy Design System
Marriott Bonvoy's hotel look: Swiss 721 type, near-black ink, a coral #ff8d6b accent and 52px pill buttons, as a DESIGN.md for React and AI tools.
- Primary color
- #1c1c1c
- Typeface
- Swiss-721
- Shape
- Soft
- Base radius
- 0px
- Colors
- 21
- Type tokens
- 13
- Components
- 20
- Spacing values
- 8
About Marriott Bonvoy DESIGN.md
Curated by Dov Azencot, updated May 13, 2026. Source marriott.com (opens in a new tab).
Marriott Bonvoy's homepage is built around an inversion most hospitality brands resist: the primary action button ("Find Hotels") renders dark-on-dark — #1c1c1c fill, #ffffff text, 52px pill radius — not the bright coral the brand owns. Coral (#ff8d6b) appears in only 12 page occurrences and is declared in just two CSS custom properties: `--t-accent-color` and `--t-icon-color-decorative`. The voltage is a decorative ornament, not a load-bearing CTA color. The system trusts destination photography (alternating amber sunsets, navy oceans, palm-shaded resort decks) to do the marketing work that competitors hand to colored CTAs.
This page captures the Bonvoy chrome as a DESIGN.md file — Google Labs' open spec for machine-readable design tokens. Inside: 21 colors tokens covering the inverted CTA fill, the cool-gray hairline rule (#c4c4c4), form label gray (#707070), the scarce coral accent, plus alpha-overlay scrim tokens lifted from `--t-color-scrim-100` and `--t-color-control-background-overlay`. 13 typography tokens run entirely on Swiss-721 across 12–40px with the only humanist tracking move reserved for 12px uppercase overlines at 1.296px. The radius scale resolves to two anchors — 52px pill for every button, 16px card corner appearing 23 times — and 20 components covering the dark CTA, search dropdown, property tile, vacation-rental card, points stat block, and the editorial logo-strip footer.
Drop this file into Claude, Cursor, or any AI assistant that reads structured design tokens. The agent reproduces Marriott's hospitality discipline — inverted primary CTAs, 52px pill geometry, decorative-only accent voltage, photography-first tiles — instead of a generic travel theme. Reference tokens directly in Tailwind config or CSS variables, audit an existing hospitality storefront against this baseline, or use the file as a teaching artifact for what restraint looks like when the brand's color owner is asked to recede in favor of the destination.
What makes it distinct
5 highlights
- Inverted primary CTAFind Hotels renders #1c1c1c fill with white text at 52px pill radius, the opposite of the bright-accent CTA convention
- Coral as decorative scarcityBonvoy #ff8d6b lives in only 2 CSS variables (`--t-accent-color`, `--t-icon-color-decorative`) and 12 page occurrences, never load-bearing
- Single-typeface systemSwiss-721 carries every tier from 12px uppercase overline (1.296px tracking) to 40px hero h2, only weight 400/500/700 changes
- Two-radius rhythm52px pill on every button and 16px card corner (23 occurrences); the rest of the page is 0px right-angle
- Inverted form fieldsThe search dropdown input renders #1c1c1c background with white foreground, mirroring the CTA so search reads as a primary action band
Live at marriott.com
Marriott Bonvoy in production, as captured. Scroll the window to see the whole page.

21 colors
Marriott Bonvoy's system runs on #1c1c1c as its primary voltage, used in 2 of 20 components. Type is set in Swiss-721 across 13 tokens from 12px to 40px, weights 400–700. Shape language is soft — components average 19px corner radius, with no sharp interactive edges.
Brand & Accent
Sparing, CTA-only voltage · 4
Surface
Page and card backgrounds · 4
Text
Headlines, body, captions · 6
Borders & Hairlines
Dividers, outlines, rules · 2
Semantic
Status, errors, success, links · 1
Other
Specialty colors · 4
13 type tokens
Set in Swiss-721 across 13 tokens, from 12px to 40px, weights 400–700. Shown in its own stack: where the font isn't installed, the fallback the file names stands in.
- display-hero40px · weight 700 · lh 1.15The quick brown fox jumps over the lazy dog
- heading-xl29px · weight 700 · lh 1.2The quick brown fox jumps over the lazy dog
- heading-lg22px · weight 700 · lh 1.2The quick brown fox jumps over the lazy dog
- heading-md18px · weight 700 · lh 1.25The quick brown fox jumps over the lazy dog
- heading-sm16px · weight 700 · lh 1.375The quick brown fox jumps over the lazy dog
- input-display22px · weight 400 · lh 1.09The quick brown fox jumps over the lazy dog
- body-md16px · weight 500 · lh 1.375The quick brown fox jumps over the lazy dog
- body-sm14px · weight 500 · lh 1.5The quick brown fox jumps over the lazy dog
- caption12px · weight 500 · lh 1.5The quick brown fox jumps over the lazy dog
- overline-md12px · weight 500 · lh 1.33 · tracking 1.296pxThe quick brown fox jumps over the lazy dog
- overline-sm12px · weight 700 · lh 1 · tracking 1.2pxThe quick brown fox jumps over the lazy dog
- button-primary18px · weight 700 · lh 1.33The quick brown fox jumps over the lazy dog
- nav-link14px · weight 400 · lh 1.14The quick brown fox jumps over the lazy dog
Radii and spacing
7 corner radii and 8 spacing values. Shape language: soft, on a 0px base radius.
Radii7
- none0px
- card-inset14px
- card-md15px
- card-lg16px
- pill-md22px
- pill-cta52px
- full9999px
Spacing8
- xxs4px
- xs8px
- sm12px
- base16px
- md24px
- lg32px
- xl40px
- xxl52px
20 components
Each rendered from its tokens (color, type, radius, padding) on Marriott Bonvoy's own canvas.
- Button PrimaryButton Primarybutton-primary
- Button Primary HoverButton Primary Hoverbutton-primary-hover
- Button SecondaryButton Secondarybutton-secondary
- Button Secondary HoverButton Secondary Hoverbutton-secondary-hover
- Button Tertiary TextButton Tertiary Textbutton-tertiary-text
- Top NavTop Navtop-nav
- Nav LinkNav Linknav-link
- Search Input DropdownSearch Input Dropdownsearch-input-dropdown
- Type here…Text Inputtext-input
- Form LabelForm Labelform-label
- Hero BannerHero Bannerhero-banner
- Destination TileDestination Tiledestination-tile
- Property CardProperty Cardproperty-card
- Vacation Rental CardVacation Rental Cardvacation-rental-card
- Rate Stat BlockRate Stat Blockrate-stat-block
- Overline TagOverline Tagoverline-tag
- Brand Strip LogoBrand Strip Logobrand-strip-logo
- Divider RuleDivider Ruledivider-rule
- Icon Button Circleicon-button-circle
- Carousel Dot ActiveCarousel Dot Activecarousel-dot-active
The system, in use
Marriott Bonvoy's tokens on the kind of product it builds.
Find your place anywhere in the world
Book flights, stays and experiences, with flexible plans and help around the clock.
Marriott Bonvoy design system FAQ
Marriott Bonvoy's tokens, its components and how to use this DESIGN.md in your project.
Related reading
Specs, directories and component libraries that pair with this design system.
- Browse all design systemsThe full directory of DESIGN.md files on shadcn.io, with live mockups for each.shadcn.io
- Marriott Bonvoy — official siteThe global hospitality brand's booking interface — the source for this design system.marriott.com (opens in a new tab)
- The DESIGN.md specificationGoogle Labs' open spec for machine-readable design system files.github.com (opens in a new tab)
Use Marriott Bonvoy in your project
One machine-readable file. Drop it into Claude Code, Cursor, VS Code or any AI tool that reads DESIGN.md.
Download the DESIGN.md
One machine-readable file: every color, type, radius, spacing, and component token of Marriott Bonvoy.
Feed it to your AI tool
Drop it into Claude, Cursor, or GitHub Copilot. The agent writes React components and Tailwind classes that match Marriott Bonvoy's visual language.
Reference the tokens directly
Or paste the values into your Tailwind config, CSS variables, or component library: every color, size and radius is a quoted, ready-to-copy value.
Read the full DESIGN.md overview, rationale, do’s and don’ts
Overview
Marriott Bonvoy's homepage is an inversion of the hospitality-booking convention. Inverted primary: the load-bearing CTA ("Find Hotels") renders #1c1c1c fill with #ffffff text at 52px pill radius ({rounded.pill-cta}) and 18px / 700 Swiss-721 — the opposite of the bright-accent CTAs Booking, Expedia, and Airbnb use to anchor their search bars. The coral that most people associate with Bonvoy ({colors.accent-coral} — #ff8d6b) is scoped to just two CSS custom properties — --t-accent-color and --t-icon-color-decorative — and renders only 12 times across the page, used as small icon strokes and decorative ornaments rather than on any button surface.
Type runs Swiss-721 for everything — display, body, navigation, captions, microcopy. There is no separate display family. The variable comes from three weight steps (400, 500, 700) and one tracking departure: the 12px uppercase overline at letterSpacing: 1.296px (the next-most-tracked label sits at 1.2px). The hero h2 at 40px / 700 ("Explore the Beauty of Spring with SIXT") works because the photography behind it — sunset desert highway, woman driving with hair in the wind — is doing the persuasion. The chrome stays quiet.
The geometric language resolves to two corner anchors. Every button — primary, secondary, tertiary — uses the 52px pill ({rounded.pill-cta}) declared as --t-button-border-radius. Cards and tiles sit at 16px (23 occurrences) with a 14px sibling (20 occurrences) for inset image plates inside cards. Where most travel marketplaces lean on rounded-rectangle CTAs at 8–12px, Marriott picks a fully-capsule pill and pairs it with squarer 14–16px cards — the contrast reads as hotel-lobby signage paired with editorial property tiles.
Key Characteristics:
- Inverted primary CTA:
{component.button-primary}is #1c1c1c fill, white text — declared by--t-button-primary-bg-color: #1c1c1cand used across "Find Hotels", "Book Now", "Search Rates". - Single-typeface system: Swiss-721 carries every tier; weight 400/500/700 and tracking (normal, 1.2px, 1.296px) are the only voice levers.
- Scarcity coral:
{colors.accent-coral}(#ff8d6b) appears in 12 page occurrences as decorative icon strokes — never as a CTA background, never as link text. - Two-radius rhythm: 52px pill on every button, 16px card corner across destination tiles, property cards, and vacation-rental tiles.
- Inverted search dropdown:
{component.search-input-dropdown}uses #1c1c1c background with #ffffff foreground — the search field reads as a primary action band rather than a passive form input. - Hairline-led rules: a single 1px #c4c4c4 line (
--t-horizontal-vertical-rule) carries every section separator and form-field underline — no shadow, no card border, no gradient. - Photography-first tiles: destination cards present a full-bleed image with a 16px corner, a 16px label band beneath, no overlay text, no shadow — the image alone carries the visual weight.
- 16px base spacing rhythm: 23 occurrences of 16px gaps, 19 of 8px, 17 of 4px; section bands run 32px vertical, generous-but-tight for a marketplace that wants density per scroll.
Colors
Brand & Accent
- Accent Coral (
{colors.accent-coral}— #ff8d6b): frequency 12. Used as text (6), border (6). Declared in--t-accent-colorand--t-icon-color-decorative. The Bonvoy voltage — scoped to icon strokes and small ornament moments, never a CTA background. - Accent Icon (
{colors.accent-icon}— #ff8d6b): same hex, semantic alias for icon-color-decorative usage in the points-icon, the Bonvoy ribbon glyph, and the rate-promo asterisk.
Surface
- Canvas (
{colors.canvas}— #ffffff): frequency 828. Used as text-on-dark (405), border (403), gradient (10), background (10). The dominant surface — the homepage is 80%+ white, with--t-brand-bg-colordeclared as pure white globally. - Surface Card (
{colors.surface-card}— #ffffff): same hex, semantic alias for the destination tile, property card, and vacation-rental tile base. - Surface Soft (
{colors.surface-soft}— #eeeeee): frequency 3. Used as background (1), border (2). Scoped to--t-icon-btn-focus-bg-colorand--t-icon-btn-primary-bg-color— the circular icon-button rest state. - On Primary / On Dark (
{colors.on-primary}/{colors.on-dark}— #ffffff): white text on every dark surface — the inverted CTA, the search dropdown input, the hero overlay text.
Ink & Surface-Control
- Primary / Ink (
{colors.primary}— #1c1c1c): frequency 757. Used as text (366), border (356), background (35). Declared in 18 CSS variables including--t-button-primary-bg-color,--t-brand-fg-color,--t-interactive-accent-color,--t-link-text-color. The load-bearing color of the system — not coral. - Surface Control Dark (
{colors.surface-control-dark}— #1c1c1c): same hex, semantic alias for--t-color-control-background— the dark fill of the search input dropdown and the inverted CTA backplate. - Ink Overlay (
{colors.ink-overlay}— #1c1c1c): same hex, semantic alias for the 52% scrim declared at--t-color-control-background-overlay: rgba(28,28,28,.52)— applied as a dark wash over hero photography to keep white headlines readable.
Hairlines & Borders
- Hairline (
{colors.hairline}— #c4c4c4): frequency 71. Used as text (33), border (33), gradient (5). Declared in--t-horizontal-vertical-rule— the single hairline tone for section separators, form-field underlines, and card 1px borders. - Border Rule (
{colors.border-rule}— #c4c4c4): same hex, semantic alias for the divider-rule component.
Text
- Ink Muted (
{colors.ink-muted}— #707070): frequency 64. Used as text (32), border (32). Declared in--t-form-label-color,--t-brand-alt-color,--t-overline-normal-color. Form labels, overline meta text, "View all" links. - Form Label (
{colors.form-label}— #707070): same hex, semantic alias for the uppercase 12px form-label component above input fields.
Scrim & Shadow
- Scrim Overlay (
{colors.scrim-overlay}— #000000): frequency 40. Used as shadow (14), gradient (22), text (2), border (2). The black-base for the 52% dark scrim wash applied over hero photography, declared asrgba(28,28,28,.52)at render time. - Shadow Base (
{colors.shadow-base}— #000000): same hex, semantic alias for the rare drop-shadow on dropdown menus (--t-icon-btn-hover-bg-colorresolves to pure black).
Semantic
- Error (
{colors.error}— #d0021b): zero page occurrences in the captured surfaces. Declared in--t-form-error-color; reserved for form-validation messages on the booking flow. - Carousel Blue (
{colors.carousel-blue}— #007aff): zero page occurrences. Declared in--swiper-theme-color; reserved for active-dot color in the destination-tile carousel. Not part of the brand voltage — it inherits from the Swiper.js default.
Typography
Font Family
The system runs Swiss-721 for everything — display, body, navigation, captions, microcopy. The CSS declares it as --t-title-font-family, --t-font-family, and --t-base-font-family, all pointing at the same family. Fallbacks walk Helvetica, Arial, sans-serif. There is no separate display face; the variable comes from weight and tracking, not from family swap.
Hierarchy
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
{typography.display-hero} | 40px | 700 | 1.15 | 0 | Hero h2 ("Explore the Beauty of Spring with SIXT") over destination photography |
{typography.heading-xl} | 29px | 700 | 1.2 | 0 | Section heads ("Get Away, Get More", "Vacation Home Rentals") |
{typography.heading-lg} | 22px | 700 | 1.2 | 0 | Destination-tile headlines, property-card titles |
{typography.input-display} | 22px | 400 | 1.09 | 0 | The search dropdown input value at rest |
{typography.heading-md} | 18px | 700 | 1.25 | 0 | Sub-section heads, "Best Rates" card title |
{typography.heading-sm} | 16px | 700 | 1.375 | 0 | Card meta strong labels, "Discover" link emphasis |
{typography.body-md} | 16px | 500 | 1.375 | 0 | Default running-text inside body bands and card descriptions |
{typography.button-primary} | 18px | 700 | 1.33 | 0 | Primary CTA button labels ("Find Hotels", "Book Now") |
{typography.body-sm} | 14px | 500 | 1.5 | 0 | Card meta lines, dates, "Member rates from" prefixes |
{typography.nav-link} | 14px | 400 | 1.14 | 0 | Top-nav labels (Book, Shop, My Trips, Find a Reservation) |
{typography.caption} | 12px | 500 | 1.5 | 0 | Footer copyright, micro-help text, brand-strip captions |
{typography.overline-md} | 12px | 500 | 1.33 | 1.296px (uppercase) | Section overlines ("OUR DESTINATIONS", "MEMBER BENEFITS") |
{typography.overline-sm} | 12px | 700 | 1.0 | 1.2px (uppercase) | Form labels above input fields ("DESTINATION", "CHECK-IN") |
Principles
Weight as voice: Marriott runs only three weights — 400, 500, 700 — and skips the 600 that most type ladders include. The result is a visible step from body (500) to heading (700) with no soft middle tier. Where most marketplaces use a 500/600/700 ladder for hierarchical comfort, Marriott picks the contrast move — body recedes, headings declare.
Tracking as overline: the only place tracking departs from normal is the 12px uppercase overline at 1.296px ({typography.overline-md}) and the 12px form label at 1.2px ({typography.overline-sm}). Both function as small-caps substitutes — the Swiss-721 grotesque doesn't ship a small-caps cut, so tracking carries the typographic role that a serif system would hand to small caps.
Note on Font Substitutes
If Swiss-721 is unavailable, Helvetica Now is the closest licensed match (it's the contemporary Swiss-721 sibling) and Inter at weight 400/500/700 is the closest open-source substitute. Akzidenz-Grotesk is a closer historical match but is a licensed face. Never substitute Roboto or Open Sans — both are humanist grotesques and will shift the brand from Swiss-modernist hospitality to generic SaaS.
Layout
Spacing System
- Base unit: 4px (with 8px micro-step).
- Tokens:
{spacing.xxs}4px ·{spacing.xs}8px ·{spacing.sm}12px ·{spacing.base}16px ·{spacing.md}24px ·{spacing.lg}32px ·{spacing.xl}40px ·{spacing.xxl}52px. - Dominant rhythm: 16px (23 occurrences) for card internal padding and inter-tile gutters; 8px (19 occurrences) for inline element gaps; 4px (17 occurrences) for chip and tag micro-padding.
- Property-card padding: the asymmetric
24px 0px 24px 24px(11 occurrences in the extraction) — top-bottom-left padding on the content panel, with the right edge flush so the image plate can run edge-to-edge inside the card's 16px rounded clip.
Grid & Container
- Max content width: the homepage centers a ~1280px container with full-bleed hero photography behind it; the hero h2 and search dropdown sit on a 770px reading column inside the 1440px viewport.
- Destination-tile grid: 4-column at desktop with a 16px gutter; each cell holds a full-bleed photo, a 22px h3 destination label, and a single-line rate caption.
- Property-card grid: 3-up at desktop, 2-up at tablet, 1-up at mobile; the asymmetric card padding (24px on three sides, 0px right) keeps the rounded photo plate visually connected to the card edge.
- Vacation-rental rail: horizontal scroll with 3 tiles visible above the fold; each tile carries a 16px rounded photo, a 22px destination name, and a "from $X / night" line.
Whitespace Philosophy
Marriott runs 32px section bands (10 occurrences) between major content rails — tighter than the 64–80px most SaaS marketing pages use, but wider than the 16–24px most marketplace listing pages use. The result is a hybrid: the homepage reads like editorial (generous between sections) but the property grids inside each section read like a marketplace (dense, with 16px gutters).
Elevation & Depth
The system has no shadow tier. Depth comes from three moves:
- Inversion — the dark CTA (
{component.button-primary}) on a white canvas reads as elevated through pure tonal contrast. - Hairline borders — 1px
{colors.hairline}rules separate sections and underline form fields, doing the work that drop shadows handle in shadow-heavy systems. - Photography overlay — hero bands apply a 52%
{colors.ink-overlay}scrim wash (--t-color-control-background-overlay: rgba(28,28,28,.52)) over destination photography so that white headlines ({typography.display-hero}at 40px / 700) remain readable. The scrim is the only "elevation" device in the homepage chrome.
There is essentially no box-shadow on cards, on buttons, or on dropdowns. The single shadow-base hex ({colors.shadow-base} — #000000, 14 shadow occurrences) is reserved for the icon-button hover state (--t-icon-btn-hover-bg-color resolves to pure black), which is a fill, not a shadow.
Shapes
The corner-radius scale resolves to two anchors and a pill:
- 0px (
{rounded.none}): the hero band, the search dropdown input, every divider rule, the brand-strip footer logo cells. - 14px (
{rounded.card-inset}): inset image plates inside cards (20 occurrences) — when a property card holds a rounded photo within a larger rounded card edge. - 15–16px (
{rounded.card-md},{rounded.card-lg}): the dominant card corner — 23 occurrences of 16px on destination tiles, vacation-rental tiles, and the "Best Rates" card; 7 occurrences of 15px on micro-card variants. - 22px (
{rounded.pill-md}): the secondary-pill corner on small chip buttons (2 occurrences). - 52px (
{rounded.pill-cta}): the brand's signature — every CTA button via--t-button-border-radius: 52px. At typical button heights (44–52px), this renders as a fully-rounded capsule. - 9999px (
{rounded.full}): avatar dots, the circular icon buttons, the carousel-dot indicators.
The 14/16/52 ladder is the system's typographic geometry — squarer cards, fully pill buttons, with the rest of the page held at right-angle 0px corners.
Components
Buttons
button-primary — #1c1c1c fill, white text, 52px pill radius, 0×24px padding, 52px height, 18px / 700 Swiss-721. The most common CTA across the site: "Find Hotels", "Book Now", "Search Rates", "View Hotel". The inverted move is load-bearing — copying this token onto a light-coral background defeats the brand's restraint.
button-primary-hover — same dark fill, 92% opacity. No transform, no shadow change, no color shift.
button-secondary — Transparent fill with #1c1c1c text and a 1px #1c1c1c outline. 52px pill radius. Used for "Cancel", "Continue browsing", and inverse CTAs on dark surfaces.
button-secondary-hover — flips to a #1c1c1c fill with white text — the same dark look as {component.button-primary} but reached through state, not default.
button-tertiary-text — Plain ink text, no surface, no border. Underlined on hover. Used for "Show more" and "View all" links in card rails.
Navigation
top-nav — White surface, 64px height, 0×24px horizontal padding. The Marriott Bonvoy wordmark sits flush left, the four top-level utility links (Book, Shop, My Trips, Find a Reservation) sit center-right, and the sign-in / register dropdown sits flush right. No bottom border at rest; a 1px {colors.hairline} rule appears on scroll.
nav-link — 14px / 400 Swiss-721 in ink (or white on dark backgrounds). 4px vertical padding. Active state is underline-only, no color shift.
Search
search-input-dropdown — The signature inverted form field. #1c1c1c background, #ffffff text, 22px / 500 Swiss-721, 52px height. The "Where to?" combobox sits at the center of the hero photo band — the dark fill on top of dimmed destination photography is the visual moment that signals "you are about to book a hotel."
text-input — White fill, 1px {colors.hairline} outline, 14px rounded corner, 52px height, 16×16px padding. Used inside the booking-detail accordion on property pages. Stacked above with a {component.form-label} in {typography.overline-sm}.
form-label — Uppercase 12px / 700 Swiss-721 in #707070, 1.2px tracking. The grotesque-doesn't-ship-small-caps move — tracking carries the small-caps role.
Hero
hero-banner — #1c1c1c surface (visually muted via 52% {colors.ink-overlay} scrim over destination photography), white text, 0px corners, 32×24px padding. Holds the hero h2 ({typography.display-hero} — 40px / 700) and a one-line tagline beneath. No CTA inside the hero band — the search dropdown carries the action.
Tiles & Cards
destination-tile — White card surface, 16px {rounded.card-lg} corner, 16px internal padding. Full-bleed photo above, a single-line {typography.heading-md} destination label below, no shadow, no border. Used in the "Ready When You Are" and "Get Away, Get More" rails.
property-card — White surface, 16px rounded corner, 1px {colors.hairline} border, asymmetric 24px 0px 24px 24px padding. The right edge runs flush so the image plate inside (rounded at 14px via {rounded.card-inset}) reaches the card's 16px outer corner — a 2px corner-stack visible at the photo edge. Used for the featured property tiles ("The Best Rates Are Always Here").
vacation-rental-card — Similar to property card but without the 1px border — the photo plate carries the visual edge. Used in the "Vacation Home Rentals" horizontal scroll rail.
rate-stat-block — Plain text, no surface — a 29px / 700 rate number ("$199") above a 12px overline label ("AVG NIGHTLY"). Used inside the "Best Rates Are Always Here" card.
overline-tag — Uppercase 12px / 500 Swiss-721 at 1.296px tracking, #707070. The category label above section heads — "OUR DESTINATIONS", "MEMBER BENEFITS".
brand-strip-logo — A footer band cell holding a sub-brand wordmark (Ritz-Carlton, JW Marriott, Westin, etc.) at {typography.caption}. 8×16px padding, no border, no surface — the wordmarks rest directly on the white canvas.
divider-rule — A 1px {colors.hairline} line. Section separator, form-field underline, footer column splitter. The single elevation alternative in the system.
icon-button-circle — A 40×40px circular button at {rounded.full} with a #eeeeee fill — the only place {colors.surface-soft} appears. Used for the search-suggest close icon, the carousel control arrows, and the dropdown caret triggers.
carousel-dot-active — The Swiper.js inherited carousel indicator at #007aff. Sits in the destination-tile rail beneath the photo strip. Not part of the brand voltage — it inherits from the library default and was not overridden.
Do's and Don'ts
Do use #1c1c1c ({colors.primary}) on every primary CTA background. The dark-on-white inversion is the brand's load-bearing chrome move. Switching this to coral ({colors.accent-coral}) reads as a generic travel marketplace, not Marriott.
Do preserve the 52px pill radius ({rounded.pill-cta}) on every button regardless of size. At small buttons (32–40px height), 52px renders as fully rounded; at 52px height the corner reaches the height itself. Substituting {rounded.full} (9999px) is visually identical but breaks the token-trace audit.
Do scope the coral accent ({colors.accent-coral} — #ff8d6b) to icon strokes and decorative ornaments only. It is declared in only two CSS variables (--t-accent-color, --t-icon-color-decorative) — keep that semantic boundary in your component code.
Do use uppercase overlines ({typography.overline-md}, {typography.overline-sm}) with their respective tracking values (1.296px and 1.2px). The tracking is the small-caps substitute — without it, the overlines collapse into ordinary 12px captions.
Don't use {colors.accent-coral} as a button background. It has 0 background occurrences in the extracted CSS — every coral instance is a text or border color. For a CTA, use {colors.primary} (#1c1c1c).
Don't use {colors.carousel-blue} (#007aff) anywhere outside the destination-tile carousel dots. It is inherited from --swiper-theme-color and is not a Marriott brand color — putting it on a link or button breaks the monochrome chrome.
Don't add a box-shadow on cards, buttons, or dropdowns. The system runs zero shadow tiers — depth comes from the dark CTA on white canvas, 1px {colors.hairline} rules, and the 52% ink overlay ({colors.ink-overlay}) over hero photography. Adding shadow reads as Material Design contamination.
Don't use weight 600 anywhere. The system runs only 400 / 500 / 700; the visible gap between body (500) and heading (700) is intentional. Filling that gap with 600 softens the typographic step the brand owns.
Don't use #c4c4c4 ({colors.hairline}) as a background or text fill. It is a 1px border-only token (33 border occurrences, 33 text occurrences as the same hairline glyph color on icon strokes). For a light surface fill, use {colors.surface-soft} (#eeeeee).
Known Gaps
- Authenticated dashboard: the signed-in Bonvoy member chrome (points-balance hero, stay-history calendar, status-tier badges, member-rate strikethrough) is gated and not captured.
- Property detail pages: the room-type stepper, rate-comparison grid, amenity matrix, and review module live one click below the homepage; not extracted.
- Sub-brand overrides: Ritz-Carlton, St. Regis, JW, Edition, Westin, W, Sheraton, and Aloft each carry typographic and color overrides on their dedicated property pages. Only the parent Bonvoy chrome is captured.
- Booking flow: rate-quote, payment, and confirmation pages carry form-error states (
{colors.error}— #d0021b) that were not visible in the homepage extraction. - Motion: the destination-tile carousel auto-advance, search-dropdown reveal, and mobile booking widget collapse are undocumented.
- Mobile breakpoint: the mobile booking widget renders as a sticky bottom bar with a different CTA layout; only the desktop chrome at 1440px is captured here.
More systems like this
Airbnb, American Airlines, Delta Air Lines and 16 more in Travel & Hospitality: each brand's colors, type and components in one file your AI agent builds from.
Build it with Pro
The DESIGN.md files are free. Pro adds 6,000+ blocks, premium templates and the MCP server, so your AI editor builds in your system for you.
4.9/5 out of 5 · 150+ reviewsfrom 150+ founders and developers.
Billing
Billed once a year in USD. Cancel anytime.
- How many people can use the license.
- Client work, SaaS products and anything you charge for.
- Page sections in 56 categories, from heroes and pricing tables to dashboards and settings, on every framework and UI library, in your theme.
- Complete Next.js sites for startups, SaaS, agencies and portfolios, every page designed, ready to ship.
- Your AI agent searches, previews and installs any component, block, icon or DESIGN.md from a prompt: 22 tools in Claude Code, Cursor, VS Code and 35 more clients.
- Buttons with motion and states of their own, from an arrow that slides in to a burst of confetti.
- Typewriters, scrambles, counters and more, for headlines, labels and numbers.
- Animated backgrounds for heroes, sections and cards, from a soft aurora to a flock that flees the cursor. Most are pure CSS.
- WebGPU shaders, from a slow aurora to a black hole, each drawing only while it's on screen.
- One design and one theme on all four: the components, blocks and effects are built for each framework.
- React on Base UI, Radix UI, React Aria or Ark UI: install the version for the library your project already uses. Vue, Svelte and Solid run on Ark UI.
- From a button to a date picker, a color picker or a guided tour: accessible, typed in TypeScript, each with live demos.
- Real-world patterns built from the components, in 53 galleries: forms, tables, menus, dialogs and more.
- Area, bar, line, pie, radar and radial charts on TanStack Charts, on every framework. React also gets the Recharts originals.
- Debounce, local storage, media queries and more: each hook is one typed file you own.
- From 222 libraries, Lucide, Heroicons, Tabler and Material Symbols among them, as SVG or a React component in one command.
- Stripe, Linear, Apple and 497 more: a brand's colors, typography and components in one file your AI agent builds from.
- Restyle every component and block at once: 8 styles, 8 grays, 18 colors and 5 radii, shared as a shadcn preset code.
- Priority requests are answered first.
Individual
For personal projects & open source
$32instead of $49/mo
$389 billed yearly
- Seats: 1 seat
- Commercial use: Personal & open source only
- Blocks: All 6,181 blocks
- Templates: All 14 templates
- MCP server: 38 AI clients
- Animated buttons: All 35 buttons
- Text effects: All 97 effects
- Backgrounds: All 100 backgrounds
- Shaders: All 100 shaders
- Frameworks: React, Vue, Svelte, Solid
- UI libraries: Base UI, Radix, Aria, Ark
- Components: All 174 components
- Examples: All 1,103 examples
- Charts: All 70 charts
- React hooks: All 35 hooks
- Icons: 294k+ icons
- DESIGN.md files: All 500 brands
- Theme builder: 8 styles × 18 colors
- Support: Standard
Team
Most popularFor freelancers, agencies & startups
$66instead of $99/mo
$789 billed yearly · ≈ $13/dev/mo
- Seats: Up to 5 seats
- Commercial use: Included
- Blocks: All 6,181 blocks
- Templates: All 14 templates
- MCP server: 38 AI clients
- Animated buttons: All 35 buttons
- Text effects: All 97 effects
- Backgrounds: All 100 backgrounds
- Shaders: All 100 shaders
- Frameworks: React, Vue, Svelte, Solid
- UI libraries: Base UI, Radix, Aria, Ark
- Components: All 174 components
- Examples: All 1,103 examples
- Charts: All 70 charts
- React hooks: All 35 hooks
- Icons: 294k+ icons
- DESIGN.md files: All 500 brands
- Theme builder: 8 styles × 18 colors
- Support: Priority
Organization
For companies with larger teams
$132instead of $199/mo
$1,589 billed yearly
- Seats: Unlimited seats
- Commercial use: Included
- Blocks: All 6,181 blocks
- Templates: All 14 templates
- MCP server: 38 AI clients
- Animated buttons: All 35 buttons
- Text effects: All 97 effects
- Backgrounds: All 100 backgrounds
- Shaders: All 100 shaders
- Frameworks: React, Vue, Svelte, Solid
- UI libraries: Base UI, Radix, Aria, Ark
- Components: All 174 components
- Examples: All 1,103 examples
- Charts: All 70 charts
- React hooks: All 35 hooks
- Icons: 294k+ icons
- DESIGN.md files: All 500 brands
- Theme builder: 8 styles × 18 colors
- Support: Priority
Billed once a year in USD. Cancel anytime.
Individual
For personal projects & open source
$32instead of $49/mo
$389 billed yearly
- How many people can use the license.Seats: 1 seat
- Client work, SaaS products and anything you charge for.Commercial use: Personal & open source only
- Page sections in 56 categories, from heroes and pricing tables to dashboards and settings, on every framework and UI library, in your theme.Blocks: All 6,181 blocks
- Complete Next.js sites for startups, SaaS, agencies and portfolios, every page designed, ready to ship.Templates: All 14 templates
- Your AI agent searches, previews and installs any component, block, icon or DESIGN.md from a prompt: 22 tools in Claude Code, Cursor, VS Code and 35 more clients.MCP server: 38 AI clients
- Buttons with motion and states of their own, from an arrow that slides in to a burst of confetti.Animated buttons: All 35 buttons
- Typewriters, scrambles, counters and more, for headlines, labels and numbers.Text effects: All 97 effects
- Animated backgrounds for heroes, sections and cards, from a soft aurora to a flock that flees the cursor. Most are pure CSS.Backgrounds: All 100 backgrounds
- WebGPU shaders, from a slow aurora to a black hole, each drawing only while it's on screen.Shaders: All 100 shaders
- One design and one theme on all four: the components, blocks and effects are built for each framework.Frameworks: React, Vue, Svelte, Solid
- React on Base UI, Radix UI, React Aria or Ark UI: install the version for the library your project already uses. Vue, Svelte and Solid run on Ark UI.UI libraries: Base UI, Radix, Aria, Ark
- From a button to a date picker, a color picker or a guided tour: accessible, typed in TypeScript, each with live demos.Components: All 174 components
- Real-world patterns built from the components, in 53 galleries: forms, tables, menus, dialogs and more.Examples: All 1,103 examples
- Area, bar, line, pie, radar and radial charts on TanStack Charts, on every framework. React also gets the Recharts originals.Charts: All 70 charts
- Debounce, local storage, media queries and more: each hook is one typed file you own.React hooks: All 35 hooks
- From 222 libraries, Lucide, Heroicons, Tabler and Material Symbols among them, as SVG or a React component in one command.Icons: 294k+ icons
- Stripe, Linear, Apple and 497 more: a brand's colors, typography and components in one file your AI agent builds from.DESIGN.md files: All 500 brands
- Restyle every component and block at once: 8 styles, 8 grays, 18 colors and 5 radii, shared as a shadcn preset code.Theme builder: 8 styles × 18 colors
- Priority requests are answered first.Support: Standard
Team
Most popularFor freelancers, agencies & startups
$66instead of $99/mo
$789 billed yearly · ≈ $13/dev/mo
Everything in Individual, plus
- How many people can use the license.Seats: Up to 5 seats
- Client work, SaaS products and anything you charge for.Commercial use: Included
- Priority requests are answered first.Support: Priority
Organization
For companies with larger teams
$132instead of $199/mo
$1,589 billed yearly
Everything in Team, plus
- How many people can use the license.Seats: Unlimited seats
- Secure checkout via Stripe
- Code lives in your repo
- Keep what you've shipped if you cancel
- License terms
4.9 out of 5 from 150+ developers
Your system, built for you
Every block, template and icon, installed by your AI agent in your design system. The DESIGN.md files stay free.
- Cancel anytime
- Keep what you've shipped