DESIGN SYSTEM · ELITE TENTS · v1.0 · 2026-05-08
i.Design System

Elite Tents Design System v1.0

Editorial Luxury × Editorial Split. Production-ready tokens for the Webflow build of elitetents.ca.

2026 — 05 — 08 Companion to mockup.html and DESIGN-SYSTEM.md
02Brand Foundation

Tone, audience, and the archetype that earns the booking.

A wedding-tent rental site is a trust transaction. The system is calibrated to look like a high-end print catalog brought into the web — confident hierarchy, restrained colour, lots of whitespace. Familiar patterns prospects already trust.

Voice

Warm, considered, present-tense.

Plain-spoken with a steady hand. Never gushing, never filler. We describe what is happening and what comes next. Italic emphasis is rare and earned.

Audience

Brides and corporate planners, Lower Mainland BC.

$50K+ wedding budgets and event managers booking annual gala marquees. They evaluate quickly on photography, perceived calm, and how easy the path-to-quote is.

Archetype

Editorial Luxury × Editorial Split.

Concentric radii. Hairline dividers. Tinted multi-layer shadows. Restrained italic accents in clay and champagne. Aesop / Cereal / & Other Stories — not Awwwards.

03Colour System

Twelve colours, one moodboard.

Cream, espresso, clay, champagne — a fixed palette borrowed from natural-fibre packaging. No tinted neutrals; no pure black. Every shadow and hairline is a tinted rgb(58, 40, 24, *).

Cream
Token
--cream
Hex
#F5EFE6
RGB
245, 239, 230
Webflow
Color / Cream

Page background, card surfaces, light-pane fields.

Cream 2
Token
--cream-2
Hex
#EDE4D2
RGB
237, 228, 210
Webflow
Color / Cream 2

Secondary surface, gradient ceiling, item-rail hover.

Cream 3
Token
--cream-3
Hex
#E3D8C1
RGB
227, 216, 193
Webflow
Color / Cream 3

Bezel-out gradient floor, image placeholder fill.

Espresso
Token
--navy
Hex
#3A2818
RGB
58, 40, 24
Webflow
Color / Espresso

Body text, dark CTA fill, espresso pane, active filter.

Espresso Deep
Token
--navy-deep
Hex
#23180F
RGB
35, 24, 15
Webflow
Color / Espresso Deep

Mockup bar, hero gradient floor, mobile frame chrome.

Espresso Soft
Token
--navy-soft
Hex
#4E3828
RGB
78, 56, 40
Webflow
Color / Espresso Soft

Reserved alternate for dark surfaces — rarely needed.

Clay
Token
--clay
Hex
#B85A3B
RGB
184, 90, 59
Webflow
Color / Clay

Primary CTA fill, italic accents, eyebrows. Never body text on cream — fails AA.

Clay Dark
Token
--clay-dark
Hex
#964730
RGB
150, 71, 48
Webflow
Color / Clay Dark

Primary-CTA :hover fill only.

Champagne
Token
--champagne
Hex
#C9B08A
RGB
201, 176, 138
Webflow
Color / Champagne

Accent on dark panes, eyebrows on espresso, dark-CTA fill.

Champagne Light
Token
--champagne-light
Hex
#E0CFAF
RGB
224, 207, 175
Webflow
Color / Champagne Light

Sub-copy on dark panes, hero trust row tint.

Ink
Token
--ink
Hex
#2A1F18
RGB
42, 31, 24
Webflow
Color / Ink

Default body text colour. Slightly cooler than Navy for prose.

Muted
Token
--muted
Hex
#6B5D52
RGB
107, 93, 82
Webflow
Color / Muted

Sub-copy, descriptions, secondary text. Passes AA on cream.

Faint
Token
--faint
Hex
#928574
RGB
146, 133, 116
Webflow
Color / Faint

Eyebrows, micro-captions, count badges. Decorative use only.

How they pair · WCAG 2.1 ratios computed from hex values
Body on cream
14.05 : 1 · AAA
ink on cream — default prose
Clay on cream
4.03 : 1 · AA Large
eyebrows + accents only — never body
Champagne on espresso
6.72 : 1 · AAA
dark-CTA fill, eyebrows on dark
Cream on espresso
12.28 : 1 · AAA
dark-pane body text + buttons
04Typography

Two families, one editorial voice.

Fraunces carries headings, italic accents, and editorial flourishes. Geist carries everything else. Both are variable fonts — no static weights, every size tunes opsz/wght live.

Aa
Fraunces
Variable serif · opsz 9–144 · wght 300–500 · ital
Headings, italic emphasis, drop caps, quote marks. Stylistic sets ss01+ss02 on.
https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..500;1,9..144,300..500&display=swap
Webflow Variable: Type / Serif
Aa
Geist
Variable sans · wght 400–600
Body, UI, eyebrows, micro-captions. Tabular figures (font-variant-numeric: tabular-nums) on every numeric display.
https://fonts.googleapis.com/css2?family=Geist:wght@400..600&display=swap
Webflow Variable: Type / Sans
H1 Fraunces 300
clamp(48–92px) / 0.96
letter-spacing −0.02em
An evening shaped by candle light.
H2 Fraunces 300
32–44px / 1.05
letter-spacing −0.02em
Tents for every occasion.
H3 Fraunces 400
22–28px / 1.15
letter-spacing −0.015em
High-Peak Marquee · 40 × 60 ft
Body Geist 400
16px / 1.6
text-wrap: pretty
An adaptable solution for outdoor weddings, corporate launches, and private estates — engineered, dressed, and lit on site by our crew.
Body Small Geist 400
14.5px / 1.55
color: var(--muted)
Optimised line measure for sub-copy and form context. Don’t let it stretch wider than 520px.
Caption Geist 400
13px / 1.5
color: var(--muted)
Add to event · Brookside, BC · 03 Jun 2026
Eyebrow Geist 500
11px UPPERCASE
letter-spacing 0.24em
— · The Collection
Micro Geist 500
9–10px UPPERCASE
letter-spacing 0.22em
Specs · 40 × 60 · 240 guests
Drop cap · used once per article max

Designed for the long arc of a wedding day — first arrivals through last toast — every Elite Tents marquee is engineered for soft acoustics, warm sightlines, and a calm interior. Italic accents come from Fraunces in clay, never from punctuation.

Eyebrow with leading hairline

A note on emphasis

Italic em-tags inside headings render in clay; on dark panes they render in champagne. Bold body weight is reserved for stat callouts and form labels — never inline.

05Spacing & Rhythm

Generous, uneven, considered.

An 8-pixel base unit and seven section-padding stops. Major sections breathe at 96–128px between them; intra-section rhythm at 24–56px. Macro-whitespace is a feature, not a bug.

24px — intra-card spacing, button vertical pad.
56px — inter-row, hero side pad, sub-section gap.
96px — section padding (default vertical).
8px
16px
24px
32px
56px
72px
96px
128px

Max content width: 1440px (mockup uses --max-w: 1440px; this doc uses 1200px for an editorial measure). Side padding inside sections: 36px minimum, 56px on the hero rail.

06Radii & Hairlines

Concentric by rule.

Every nested surface honours the Double-Bezel: an outer 22px shell, 6px of padding, and a 16px inner core. Inner radius equals outer minus padding — the math is non-negotiable.

8chips, count pills
10filter row hover
12fields, FAQ
14cards, CTA
16inner core
18glass card, feat-card
22Double-Bezel outer
999buttons, pills, dots
outer · 22px ↔ padding · 6px
inner · 16px
The Double-Bezel
outer 22 – padding 6 = inner 16

The outer shell carries the gradient + ring + tinted shadow. The inner core carries the photo, content, and the inset 0 1px 0 rgba(255,255,255,0.5) top-edge highlight. They are always concentric — when you change one, you change the other.

Same rule applies to the filter sidebar (22 / 6 / 16), the help-panel header band (no padding so it shares the panel’s 22px radius), and any future nested card pattern.

Regular · default divider

Between sections, between rows in My Event, around tag chips. 1px solid rgba(58,40,24,0.1)

Strong · social ring, dashed CTA

Footer social-icon ring, dashed “Add more” outline, weight-bearing dividers. rgba(58,40,24,0.2)

Champagne · the “luxury packaging” cue

Top edge of the nav bar. Linear-gradient that fades in and out across the viewport. Editorial Luxury signature.

Hairline on dark · espresso pane

Inside .me-submit-pane and the help-panel header. rgba(245,239,230,0.12) — never the inverse of the light hairline.

07Shadows & Inset Highlights

Layered, tinted, never black.

Four shadow stacks. Each is a multi-layer composition tinted with rgb(58, 40, 24, *) — a deep brown — so light catches like sunset on cream linen, not like a black drop-shadow on a screen.

resting
--shadow-card
0 1 1 / 0 4 10 / 0 14 32

Resting state on every card. Always paired with --ring-hair in usage.

lifted
--shadow-card-hover
0 1 1 / 0 8 20 / 0 28 56

Hover state. Larger blur and more opacity on the bottom layer for a calm lift.

modal
--shadow-pop
0 12 28 / 0 30 80

Modal panes, lightboxes, help panel. Two large layers — feels detached from the page.

bubble
--shadow-bubble
0 8 24 / 0 24 48

Help bubble + toast. Sits on the dark espresso, paired with the inset-highlight-dark top edge.

--inset-highlight

Inner core of every Double-Bezel. inset 0 1px 0 rgba(255,255,255,0.5)

--inset-highlight-dark

Top edge on espresso CTAs, active filter, mockup-bar floor. inset 0 1px 0 rgba(255,255,255,0.08)

Rule: always layered, always tinted with rgb(58, 40, 24, *). Never pure black. Never single-layer. The ring-hair (0 0 0 1px rgba(58,40,24,0.06)) prefixes every card box-shadow so the edge stays defined at low blur radii.

08Components

The system, made visible.

Every component is rendered live — hover them, press them. Press states scale to 0.96, never below. The trailing-circle “Button-in-Button” translates 2px right + 1px up on hover.

Buttons

primary · ghost · ghost-light · champagne
Primary · clay
Pressed (0.96)
Ghost · espresso border
Ghost-light · for dark backgrounds
Champagne · dark-pane CTA

Form fields

label-on-top · 12px radius · clay focus ring

Card anatomy · Double-Bezel

collection card · centerpiece
Marquee
High-Peak Marquee
Size 40 × 60
Guests 240

Engineered cathedral-pitch frame. Glassed walls optional. Best for receptions of 150 to 240, with a clear-span dance floor.

Outer 22pxshell · gradient · ring-hair · shadow-card Tag chipcream-fill · ring-hair · no blur (perf) Inner 16px22 − 6 padding = 16 Image outline1px black/0.1 · offset −1px
Sailcloth
Sailcloth Pavilion
Size 32 × 48
Guests 120

Soft-pole sailcloth with translucent canvas — glows beautifully at twilight. Romantic profile for vineyard and beach receptions.

Without callouts. The card is the production-target visual; the annotated twin documents what it’s made of.

Filter row & tab pill

10px radius row · 999px nav pill
Filter row · resting + active
Tab pill · 999px · active espresso

Editorial split heading

eyebrow · h2 · sub
— · The Approach

An evening shaped by candle light.

An adaptable solution for outdoor weddings, corporate launches, and private estates — engineered, dressed, and lit on site by our crew.

Glass card · hero quote

backdrop-filter · rgba bg · italic

The crew made our outdoor reception feel sheltered without losing the open sky. Calm, on-time, and quietly generous.

M. Leclerc · Brookside Estate · 2025

Safari note: backdrop-filter requires -webkit-backdrop-filter for iOS < 18. Fall-back: opaque rgba(245,239,230,0.18) when backdrop-filter isn’t supported.

Help bubble & toast

fixed · espresso · champagne dot
Help bubble
Toast · pill Added to my event
09Motion

Restraint is the curve.

Three CSS easings power state transitions, plus Motion One spring physics on scroll-triggered reveals. Specify properties — never transition: all. Reduce-motion disables every entrance.

Primary spring
--ease
cubic-bezier(0.32, 0.72, 0, 1)
Default for all interactive state. Anticipatory front-loaded, eases out hard.
Reveals
--ease-out
cubic-bezier(0.16, 1, 0.3, 1)
Scroll-triggered reveals, image zooms. Aggressive front-load, slow tail.
Exits
--ease-in
cubic-bezier(0.4, 0, 1, 1)
Page-leave + dismiss. Slow start, accelerating exit. Use sparingly.
Library curve
Motion One spring
stiffness 220 · damping 24
Used via inView reveals + spring on stagger. Not a CSS bezier.
0.20sQuick state — focus rings, hovers on subtle UI.
0.25sDefault interactive — buttons, tabs, filter rows, fields.
0.45sView transitions — between Home / Collection / My Event.
0.60–0.95sScroll-triggered reveals, blur-in. Always paired with --ease-out.
0.90sImage zoom on hover (scale(1.04) on collection cards).
Stagger demo · scroll into view

Vanilla IntersectionObserver, threshold 0.2, unobserve on first hit. Children rise on a 100ms cadence.

10Mobile breakpoint

At ≤ 860px, the page collapses with intent.

Single-column everywhere. Tabs become a hamburger overlay. The hero quote card is hidden entirely. Heights use 100dvh so iOS Safari toolbar shrink doesn’t hide content.

  • NavTabs hidden. Hamburger replaces them. Mobile menu overlay panel slides in from the right with backdrop blur.
  • BodyThe .app-main container becomes a horizontal swipe-snap surface — IntersectionObserver syncs location.hash to whichever view is centered.
  • GridsAll grid layouts (collection, my-event, featured-strip) collapse to single column.
  • Hero quoteThe glass-card carousel is display: none on mobile. Reviews still rotate in the body section.
  • iOS notch100dvh + safe-area-inset-top/bottom padding — never 100vh.
  • Min-width: 0Required on every flex/grid cell that contains an <input> — browser default min-content is ~150-200px and propagates up.
11Webflow mapping

Tokens → Site Variables.

The checklist for the Webflow build. Register these in Site Settings → Variables. The mockup’s CSS custom properties are 1:1 with the Variables column on the right.

Design token Value Webflow Variable
Colour
--cream#F5EFE6Color / Cream
--cream-2#EDE4D2Color / Cream 2
--cream-3#E3D8C1Color / Cream 3
--navy#3A2818Color / Espresso
--navy-deep#23180FColor / Espresso Deep
--navy-soft#4E3828Color / Espresso Soft
--clay#B85A3BColor / Clay
--clay-dark#964730Color / Clay Dark
--champagne#C9B08AColor / Champagne
--champagne-light#E0CFAFColor / Champagne Light
--ink#2A1F18Color / Ink
--muted#6B5D52Color / Muted
--faint#928574Color / Faint
Type
--serifFraunces, Georgia, serifType / Serif
--sansGeist, ui-sans-serif, system-uiType / Sans
font-size · h1clamp(48px, 6.4vw, 92px)Type / Size / H1
font-size · h2clamp(32px, 3.6vw, 44px)Type / Size / H2
font-size · body16px / 1.6Type / Size / Body
font-size · eyebrow11px · 0.24em · UPPERType / Size / Eyebrow
font-size · micro9px · 0.22em · UPPERType / Size / Micro
Spacing
space / xs8pxSpace / XS
space / sm16pxSpace / SM
space / md32pxSpace / MD
space / lg56pxSpace / LG
space / xl96pxSpace / XL
space / 2xl128pxSpace / 2XL
--max-w1440pxLayout / Max
Radius
radius / sm8pxRadius / SM
radius / md12pxRadius / MD
radius / inner16pxRadius / Inner
radius / outer22pxRadius / Outer
radius / pill999pxRadius / Pill
Shadow
--ring-hair0 0 0 1px rgba(58,40,24,0.06)Shadow / Ring Hair
--shadow-card3-layer · 0.04 / 0.04 / 0.06Shadow / Card
--shadow-card-hover3-layer · 0.05 / 0.08 / 0.10Shadow / Card Hover
--shadow-pop2-layer · 0.14 / 0.14Shadow / Pop
--shadow-bubble2-layer · 0.18 / 0.10Shadow / Bubble
--inset-highlightinset 0 1px 0 rgba(255,255,255,0.5)Shadow / Inset Highlight
--inset-highlight-darkinset 0 1px 0 rgba(255,255,255,0.08)Shadow / Inset Highlight Dark
Motion
--easecubic-bezier(0.32, 0.72, 0, 1)Motion / Ease
--ease-outcubic-bezier(0.16, 1, 0.3, 1)Motion / Ease Out
--ease-incubic-bezier(0.4, 0, 1, 1)Motion / Ease In