Restage
Remix this template to create a similar design — same sections, layout, animations, colors, and typography.
Landing page for a home staging service. Style: retro-chic editorial, light, blush-pink pinstripe wallpaper canvas, emerald and ochre accents, Fraunces serif over Hanken Grotesk. Layout: arched before/after window centered beside a persuasion copy column. Components: drag-to-reveal comparison slider, arch-framed room photo, book-a-walkthrough nav button, start-a-project CTA, mixed serif/italic display headline. Vibe: charming, styled, aspirational — real estate.
Palette
Typography
clamp(48px, 9vw, 160px)
clamp(48px, 9vw, 160px)
clamp(36px, 6vw, 72px)
18px
11px
clamp(48px, 6vw, 60px)
Spacing & Shape
| Token | Value | Preview |
|---|---|---|
| xs | 4px | |
| sm | 8px | |
| md | 16px | |
| lg | 24px | |
| xl | 32px | |
| 2xl | 56px | |
| 3xl | 80px |
Border Radius
| Token | Value | Preview |
|---|---|---|
| none | 0px | |
| arch | 50% 50% 0 0 / 38% 38% 0 0 | |
| pill | 30px |
design.md
tokens (raw)
name: restage-design
version: alpha
description: >
Restage is an editorial, magazine-page home-staging site set on a warm cream
paper surface, built from saturated heritage blocks — deep emerald, ochre,
plum and blush — separated by hard plum hairlines. The signature moves are
ticking-stripe and honeycomb section backgrounds, an arched before/after image
slider, a tilted "pinboard" of taped-and-paperclipped photos, and a
horizontal rail of scalloped ticket-stub cards. Type is a three-voice system:
a high-contrast Fraunces serif (often italic) for display, Hanken Grotesk for
body, and uppercase Space Mono for every label and version stamp (V.01–V.05).
Geometry is overwhelmingly square — 2–6px borders, zero radius — with the
arch and pill-shaped paperclip as the only curves.
colors:
# Brand / heritage palette
emerald: '#1E4A3C' # primary surface + body text + heading ink on light
ochre: '#D2954A' # primary accent / CTA fill / divider / brand dot
plum: '#4A2740' # secondary accent + all section hairlines
blush: '#E7B9B1' # tertiary accent / hero stripe field / muted text on dark
# Surface
cream: '#F4ECE2' # page background + paper-frame borders + text on dark
# Hairlines (use the palette directly)
hairline: '#4A2740' # 2px section borders (= plum)
# Pattern overlays (rgba, baked into backgrounds)
stripe-light: 'rgba(244,236,226,0.55)' # blush ticking stripe (cream ink)
stripe-faint: 'rgba(244,236,226,0.10)' # emerald ticking stripe
stripe-ochre: 'rgba(210,149,74,0.18)' # plum ticking stripe (ochre ink)
typography:
display:
fontFamily: "'Fraunces', serif"
fontSize: clamp(48px, 9vw, 160px)
fontWeight: 300
lineHeight: 0.85
display-italic:
fontFamily: "'Fraunces', serif"
fontSize: clamp(48px, 9vw, 160px)
fontWeight: 900
lineHeight: 0.8
fontStyle: italic
heading:
fontFamily: "'Fraunces', serif"
fontSize: clamp(36px, 6vw, 72px)
fontWeight: 300
lineHeight: 0.9
body:
fontFamily: "'Hanken Grotesk', sans-serif"
fontSize: 18px
fontWeight: 400
lineHeight: 1.6
label:
fontFamily: "'Space Mono', monospace"
fontSize: 11px
fontWeight: 700
lineHeight: 1.4
letterSpacing: 1.5px
textTransform: uppercase
stat:
fontFamily: "'Space Mono', monospace"
fontSize: clamp(48px, 6vw, 60px)
fontWeight: 700
lineHeight: 1
rounded: # near-zero by design; curves are bespoke shapes
none: 0px
arch: 50% 50% 0 0 / 38% 38% 0 0 # arched image frame
pill: 30px # paperclip only
spacing: # base unit 4px (Tailwind scale)
xs: 4px
sm: 8px
md: 16px
lg: 24px
xl: 32px
'2xl': 56px
'3xl': 80px
components:
navLink:
textColor: '{colors.plum}'
typography: '{typography.label}'
hoverColor: '{colors.ochre}'
buttonPrimary:
backgroundColor: '{colors.ochre}'
textColor: '{colors.emerald}'
border: '2px solid {colors.emerald}'
typography: '{typography.label}'
rounded: '{rounded.none}'
padding: '12px 20px'
# hover inverts to emerald fill / cream text
buttonSolid:
backgroundColor: '{colors.emerald}'
textColor: '{colors.cream}'
border: '2px solid {colors.emerald}'
typography: '{typography.label}'
rounded: '{rounded.none}'
padding: '16px 24px'
buttonOutline:
backgroundColor: 'transparent'
textColor: '{colors.plum}'
border: '2px solid {colors.plum}'
typography: '{typography.label}'
rounded: '{rounded.none}'
padding: '20px 24px'
# hover fills plum / cream text
statRow:
backgroundColor: '{colors.emerald}' # alternates with ochre
textColor: '{colors.cream}'
border: '2px solid {colors.plum}'
typography: '{typography.stat}'
rounded: '{rounded.none}'
padding: '28px'
photoCard:
backgroundColor: '{colors.cream}'
border: '6px solid {colors.cream}'
rounded: '{rounded.none}'
# paper-bordered, rotated, drop-shadowed; clip + tape label attached
ticketCard:
backgroundColor: '{colors.cream}'
textColor: '{colors.emerald}'
rounded: '{rounded.none}'
padding: '20px'
# scalloped left/right edges via CSS mask; fixed 280px width
tapeLabel:
backgroundColor: '{colors.cream}' # also ochre variant
textColor: '{colors.plum}'
typography: '{typography.label}'
rounded: '{rounded.none}'
padding: '4px 12px'
# rotated, with a soft drop shadow ("tape" look)
archFrame:
border: '6px solid {colors.emerald}'
rounded: '{rounded.arch}'
shadow: '0 28px 60px rgba(30,74,60,0.4)'
motion:
ba-slider: 'JS pointer-drag before/after reveal; clip-path inset updated live, no easing'
hover: 'transition-colors on buttons + links (Tailwind default ~150ms)'
pulse: 'animate-pulse on the "Drag to reveal" prompt and pin hints'
divider-glow: 'static ochre glow box-shadow 0 0 22px 3px rgba(210,149,74,.5) on slider divider'
icons:
library: Tabler icons-webfont (linked, not visibly used)
style: outline
color: '{colors.plum}'
note: 'No icons rendered in markup; arrows are text glyphs (→ ‹ ›) in Space Mono'Restage
restage-design · alpha
Design spec — version alpha. Source: static HTML (
index.html); tokens read from inline styles +:rootvariables + Tailwind arbitrary values. Fictional/sample product; described factually.
Overview
Restage is an editorial home-staging site built like a printed lookbook. The
page sits on a warm cream paper field (#F4ECE2) and is carved into full-bleed
colour blocks in a heritage palette — deep emerald (#1E4A3C), ochre
(#D2954A), plum (#4A2740) and blush (#E7B9B1) — every block divided from
the next by a hard 2px plum hairline. The surfaces themselves are patterned:
"ticking" repeating-linear-gradient pinstripes in blush, emerald and plum, plus
a honeycomb radial-gradient grid behind the gallery. The signature interactions
are an arched before/after image slider with an ochre diamond handle, a tilted
"pinboard" of photos held by drawn paperclips and taped mono labels, and a
horizontal rail of scalloped ticket-stub product cards. Typography is a
deliberate three-voice system: Fraunces serif (light weight for headings,
heavy italic for the giant hero word "story") for display, Hanken Grotesk for
running text, and uppercase Space Mono for every micro-label and the
running V.01–V.05 "Spatial Revision" version stamps. The geometry is almost
entirely square — thick borders, zero corner radius — so the lone arch and the
pill-shaped paperclips read as intentional curves.
Colors
Brand / heritage. Four saturated tones drive the page, all declared as
:root CSS variables. --emerald #1E4A3C is the workhorse: the body-text ink
on cream, the heading ink, the dark section fills, and the dominant border
colour. --ochre #D2954A is the primary accent — the brand dot after "RESTAGE",
CTA button fills, the slider divider/handle, the underline rule, and label
accents. --plum #4A2740 is the secondary accent and, crucially, the colour of
nearly every section hairline (border-b-2) plus stat-row borders and mono
labels. --blush #E7B9B1 is the tertiary tone: the hero/CTA ticking-stripe
field, and muted text on dark sections.
Surface. --cream #F4ECE2 is the page background, the thick photo-frame
borders on the pinboard, the ticket-card fill, and the text colour on every
dark block.
Hairlines. Section dividers are 2px solid plum (border-[var(--plum)]); one
section (the rail) divides with an ochre border instead, and the footer top-rule
uses --ochre at 40% opacity.
Pattern overlays. Backgrounds bake cream/ochre at low alpha into repeating
gradients: blush ticking uses rgba(244,236,226,.55), emerald ticking
rgba(244,236,226,.10), plum ticking rgba(210,149,74,.18), and the honeycomb
mixes rgba(255,255,255,.04) highlights with rgba(0,0,0,.18) shadows.
Typography
Three Google-Fonts families loaded in one @import. Fraunces (an opsz
high-contrast serif) is the display face — used light (300) for section
headings and dramatically heavy italic (900) for the oversized hero word
"story", which carries a hard 2px 4px 0 emerald drop-shadow. Hanken
Grotesk is the humanist body sans for paragraphs. Space Mono is the label
voice: every kicker, nav item, stat caption, tape label, ticket code and the
V.0x stamps are uppercase Space Mono with wide tracking (0.3em on kickers).
| Token | Size | Weight | Line-height | Tracking | Usage |
|---|---|---|---|---|---|
| display | clamp(48–160px) | 300 | 0.85 | — | hero words, big section heads |
| display-italic | clamp(48–160px) | 900 italic | 0.8 | — | hero "story" word |
| heading | clamp(36–72px) | 300 | 0.9 | — | section h2 |
| body | 18px | 400 | 1.6 | — | paragraphs (text-lg/text-xl) |
| label | 11px | 700 | 1.4 | 0.15–0.3em | kickers, nav, captions, stamps |
| stat | clamp(48–60px) | 700 | 1.0 | — | metric figures (2.5×, +18%) |
Layout
Base unit is 4px (Tailwind scale). The page is a vertical stack of full-width
sections, each centred in a max-w-[1280px] container with px-6 lg:px-16
gutters and generous py-20–py-24 vertical rhythm. A sticky cream header
(80px tall, 2px plum bottom border) holds the wordmark, mono nav, and an ochre
CTA. The hero is a 12-column grid: an 8-col composition stacking layered display
words around an arched before/after slider, beside a 4-col intro column. Other
signature compositions: the stats section as a stacked grid of bordered
rows alternating emerald/ochre fills; the pinboard, an absolutely-positioned
collage of rotated photo frames over a honeycomb field; and the rail, a
horizontally-scrolling flex row of fixed 280px ticket cards. Whitespace is
confident and editorial, with deliberate overlap (negative margins pull display
words over the image).
Elevation & Depth
Depth comes mostly from thick borders and rotation, not soft shadows. The arch
frame carries a large coloured shadow 0 28px 60px rgba(30,74,60,.4); pinboard
photos use Tailwind shadow-2xl/shadow-xl; tape labels use a small
0 2px 6px rgba(0,0,0,.25); the paperclip and handle add 0 6px 18px rgba(0,0,0,.35). The slider divider has a static ochre glow
0 0 22px 3px rgba(210,149,74,.5), and the seam strip uses a 2px
backdrop-filter: blur. Otherwise sections are flat colour planes separated by
hairlines.
Shapes
Resolutely rectangular: borders run 2px (hairlines/stat rows), 3px (CTA panel),
and 6px (photo frames, arch frame), all with zero corner radius. The
exceptions are deliberate: the .arch image frame
(border-radius:50% 50% 0 0 / 38% 38% 0 0), the pill-shaped drawn paperclips
(.clip, 30px radius open loop), the rotated diamond slider handle (45°
square), and the scalloped ticket edges produced with radial-gradient CSS masks.
Components
- navLink — uppercase Space Mono 11px, plum, hover→ochre.
- buttonPrimary — ochre fill, emerald text, 2px emerald border, square,
px-5 py-3; hover inverts to emerald fill / cream text. Label e.g. "Book a walkthrough". - buttonSolid — emerald fill, cream text, 2px emerald border,
px-6 py-4; hover→ochre fill. Label "Start a project →". - buttonOutline — transparent, 2px plum border, plum text,
px-6 py-5; hover fills plum / cream text. Label "View our portfolio". - statRow — bordered 2px plum row, fills alternate emerald/ochre, mono stat figure left + body caption right (e.g. "2.5×", "14", "+18%", "300+").
- photoCard — image inside a 6px cream frame, rotated a few degrees, with a
drawn paperclip and a rotated tape label;
shadow-2xl. - ticketCard — cream card with scalloped left/right edges (CSS mask), fixed 280px, vertical mono stub code + image + Fraunces title + ochre mono caption.
- tapeLabel — small rotated mono caption on cream or ochre with a tape shadow (e.g. "RM.02 — Dining / dark walnut + blush linen").
- archFrame — the hero's arched, 6px-emerald-bordered before/after viewport.
Motion
Restrained and mostly interaction-driven. The hero before/after slider is a
vanilla-JS pointer drag: clip-path: inset() on the after-image and the
divider/handle/seam positions update live on pointermove, with no easing. All
buttons and links use Tailwind transition-colors for hover state swaps
(~150ms). animate-pulse runs on the "‹ Drag to reveal ›" prompt. There are no
authored @keyframes or scroll animations; the rail simply native-scrolls
horizontally with a custom 8px ochre scrollbar thumb.
Iconography
There are effectively no rendered icons: the Tabler icons-webfont stylesheet is
linked at the end of <body> but no ti-* classes appear in the markup. All
directional cues are typographic glyphs in Space Mono — → on CTAs, ‹ ›
around the drag prompt. If icons are added, keep them Tabler outline, plum or
ochre, sized small (16–20px) to match the mono labels.
Do's and Don'ts
- Do keep every section a single saturated colour plane separated by 2px plum hairlines; let the ticking/honeycomb patterns carry texture.
- Do use the three-voice type split strictly: Fraunces for display (italic for emphasis), Hanken Grotesk for body, uppercase Space Mono for every label.
- Do keep corners square and borders thick; reserve curves for the arch and paperclips only.
- Do keep the
V.0x — …mono stamps as the throughline of the editorial voice. - Don't round corners, soften borders, or add gradients beyond the existing ticking/honeycomb patterns.
- Don't introduce colours outside emerald / ochre / plum / blush / cream.
- Don't swap the CTA inversion behaviour or drop the ochre divider glow on the slider.
Known Gaps
- Type sizes are responsive Tailwind utilities (
text-5xl lg:text-7xl,text-[10rem]); the spec records representativeclamp()ranges rather than per-breakpoint pixel values. letterSpacingon labels varies in markup betweentracking-widest(~0.1em),tracking-wider, andtracking-[0.3em]; the token uses a representative mid value.rounded.archand the ticket scallop are bespoke CSS shapes, not a simple radius; values are copied verbatim from the stylesheet.- Tabler icons are linked but unused; the icon guidance is forward-looking.