Vellum
Remix this template to create a similar design — same sections, layout, animations, colors, and typography.
A landing page for architectural residences. Concrete-grey canvas, burnt-orange accent, Archivo display over Hanken Grotesk.
Palette
Typography
clamp(3.5rem, 9vw, 7rem)
clamp(1.5rem, 4vw, 2.6rem)
clamp(4rem, 12vw, 9rem)
clamp(1.4rem, 3.2vw, 2.6rem)
15px
11px
9px
Spacing & Shape
| Token | Value | Preview |
|---|---|---|
| xs | 4px | |
| sm | 8px | |
| md | 16px | |
| lg | 24px | |
| xl | 40px | |
| 2xl | 56px |
Border Radius
| Token | Value | Preview |
|---|---|---|
| none | 0px |
design.md
tokens (raw)
name: vellum-design
version: alpha
description: >
An architectural-residence catalogue rendered as a gallery wall. The surface is
a warm concrete grey (#C8C4BC) on near-black ink (#1A1A1A), incised everywhere by
thin translucent hairlines that ledger the page into a strict grid. A single
oxide-orange voltage (#D24B16) marks every accent, label and active state. The
type story is heavy compressed Archivo Black display set in caps against a
JetBrains Mono micro-label system; body runs in Hanken Grotesk. Photography is
desaturated and revealed with a left-to-right clip-path wipe, oversized Roman
plate numerals rising from the corners. Zero corner radius throughout — the whole
composition is borders, not boxes.
colors:
# Brand / Voltage
oxide: '#D24B16' # the single accent — labels, plate numerals, active nav, buttons, rules, selection
# Surface
concrete: '#C8C4BC' # primary page surface (warm grey)
bone: '#EDEAE3' # light section surface (materials), inverse text on dark
ink: '#1A1A1A' # near-black — dark sections (statement, footer, table head), primary text
# Text
ink-85: 'rgba(26,26,26,0.85)' # subhead on light
ink-80: 'rgba(26,26,26,0.80)' # body copy on light
ink-60: 'rgba(26,26,26,0.60)' # mono meta labels
ink-55: 'rgba(26,26,26,0.55)' # section eyebrow counts
ink-50: 'rgba(26,26,26,0.50)' # micro field labels
bone-70: 'rgba(237,234,227,0.70)' # muted text on dark
bone-45: 'rgba(237,234,227,0.45)' # footer micro labels on dark
bone-40: 'rgba(237,234,227,0.40)' # input placeholder on dark
# Hairlines
hairline: 'rgba(26,26,26,0.22)' # ink hairline on light surfaces
hairline-light: 'rgba(237,234,227,0.22)' # bone hairline on dark surfaces
# Gradient / Overlay
caption-scrim: 'linear-gradient(to top, rgba(0,0,0,0.6), transparent)' # image caption gradient
typography:
display:
fontFamily: "'Archivo', sans-serif"
fontSize: clamp(3.5rem, 9vw, 7rem)
fontWeight: 900
lineHeight: 0.86
letterSpacing: 0.02em
textTransform: uppercase
display-section:
fontFamily: "'Archivo', sans-serif"
fontSize: clamp(1.5rem, 4vw, 2.6rem)
fontWeight: 900
lineHeight: 1.0
letterSpacing: 0.05em
textTransform: uppercase
plate-numeral:
fontFamily: "'Archivo', sans-serif"
fontSize: clamp(4rem, 12vw, 9rem)
fontWeight: 900
lineHeight: 1.0
letterSpacing: 0.02em
textTransform: uppercase
body:
fontFamily: "'Hanken Grotesk', sans-serif"
fontSize: 15px
fontWeight: 400
lineHeight: 1.6
blockquote:
fontFamily: "'Hanken Grotesk', sans-serif"
fontSize: clamp(1.4rem, 3.2vw, 2.6rem)
fontWeight: 500
lineHeight: 1.18
letterSpacing: -0.01em
mono-label:
fontFamily: "'JetBrains Mono', monospace"
fontSize: 11px
fontWeight: 400
lineHeight: 1.4
letterSpacing: 0.25em
textTransform: uppercase
mono-micro:
fontFamily: "'JetBrains Mono', monospace"
fontSize: 9px
fontWeight: 400
lineHeight: 1.4
letterSpacing: 0.25em
textTransform: uppercase
rounded:
none: 0px # everything — corners are never rounded
spacing: # base unit 4px
xs: 4px
sm: 8px
md: 16px
lg: 24px
xl: 40px
'2xl': 56px
components:
nav-link:
backgroundColor: 'transparent'
textColor: '{colors.ink}'
typography: '{typography.mono-micro}'
rounded: '{rounded.none}'
padding: '12px 20px'
border: '1px solid {colors.hairline} (left)'
hover: 'background {colors.ink}, text {colors.bone}'
nav-link-active:
backgroundColor: '{colors.oxide}'
textColor: '{colors.bone}'
typography: '{typography.mono-micro}'
rounded: '{rounded.none}'
padding: '12px 20px'
button-primary:
backgroundColor: '{colors.ink}'
textColor: '{colors.bone}'
typography: '{typography.mono-label}'
rounded: '{rounded.none}'
padding: '16px 24px'
border: '1px solid {colors.hairline}'
hover: 'background {colors.oxide}'
button-ghost:
backgroundColor: 'transparent'
textColor: '{colors.ink}'
typography: '{typography.mono-label}'
rounded: '{rounded.none}'
padding: '16px 24px'
border: '1px solid {colors.ink}'
decoration: 'underline, offset 4px; hover text {colors.oxide}'
data-cell:
backgroundColor: 'transparent'
textColor: '{colors.ink}'
typography: '{typography.mono-micro}'
rounded: '{rounded.none}'
padding: '16px'
border: '1px solid {colors.hairline} (right + bottom)'
table-head-cell:
backgroundColor: '{colors.ink}'
textColor: '{colors.bone}'
typography: '{typography.mono-micro}'
rounded: '{rounded.none}'
padding: '16px'
border: '1px solid {colors.hairline-light}'
enquire-form:
backgroundColor: 'transparent'
textColor: '{colors.bone}'
typography: '{typography.mono-label}'
rounded: '{rounded.none}'
padding: '16px 20px'
border: '1px solid {colors.hairline-light}'
submitButton: 'background {colors.oxide}, hover background {colors.bone} text {colors.ink}'
image-caption:
backgroundColor: '{colors.caption-scrim} or {colors.ink} at 70%'
textColor: '{colors.bone}'
typography: '{typography.mono-micro}'
rounded: '{rounded.none}'
padding: '12px 20px'
motion:
plate-img-wipe: 'clip-path inset(0 100% 0 0) → inset(0 0% 0 0), 1s power3.out, ScrollTrigger top 75% (left-to-right reveal)'
plate-num-rise: 'from y:40 opacity:0, 0.9s power3.out, ScrollTrigger top 85%'
rule-x-draw: 'scaleX 0 → 1 from left origin, 0.9s power3.out, ScrollTrigger top 85%'
nav-hover: 'background/text transition-colors'
smooth-scroll: 'Lenis smoothWheel inertial scrolling'
icons:
library: none
style: 'no icon set — directional arrows (→) typed as text glyphs in mono labels'
color: '{colors.bone} / {colors.ink}'Vellum
vellum-design · alpha
Design spec — version alpha. Source: static HTML (
index.html); tokens read from inline styles + class rules. Fictional/sample product; described factually.
Overview
Vellum presents twenty-eight concrete residences as a printed catalogue of plates,
and the interface behaves like a gallery wall. The page surface is a warm concrete
grey #C8C4BC; light "wall text" sections drop to bone #EDEAE3 and the statement,
data table and footer invert to near-black ink #1A1A1A with bone type. A single
oxide-orange voltage #D24B16 does all the accenting — eyebrow labels, the giant
Roman plate numerals, the active nav pill, primary buttons, the drawn rules, even
the ::selection highlight. The whole composition is built from thin translucent
hairlines (rgba(26,26,26,0.22) on light, rgba(237,234,227,0.22) on dark)
that segment the max-w-[1440px] canvas into a ledger of bordered cells — there is
no corner radius and no shadow anywhere; structure is drawn, not lifted. Type is a
three-voice system: compressed Archivo Black (weight 900, font-stretch: 125%,
always uppercase) for the display and the oversized numerals, JetBrains Mono at
9–11px with 0.25em tracking for every label and meta line, and Hanken Grotesk
for body and the principal's blockquote. Photography is desaturated (grayscale(0.85))
and revealed on scroll with a left-to-right clip-path wipe while the plate numeral
rises into place.
Colors
Brand / Voltage. A single accent, oxide #D24B16, carries every highlight:
eyebrow labels ("Exhibition 01", "Plate 01", "Wall Text 02"), the large plate
numerals I & III, the active "Enquire" nav cell, primary buttons on hover, the
rule-x divider, the footer's top hairline bar, table plate references, and the
::selection background.
Surface. concrete #C8C4BC is the default page background (header is the same
at 95% with backdrop-blur-xs). bone #EDEAE3 is the light Materials section and
the inverse text color on dark surfaces. ink #1A1A1A is the page text color and
the fill for the Statement, Checklist header row, and footer.
Text. On light surfaces text steps down through opacity of ink: ink-85 for the
subhead, ink-80 for body copy, ink-60 for mono medium labels, ink-55 for
section counts, ink-50 for micro field labels. On dark surfaces: bone solid,
bone-70 attribution, bone-45 footer micro labels, bone-40 input placeholder.
Hairlines. hairline rgba(26,26,26,0.22) rules every cell on light surfaces;
hairline-light rgba(237,234,227,0.22) does the same on dark.
Gradient / Overlay. Image captions sit on a caption-scrim bottom-up gradient
(from-black/60 to-transparent) or on an ink/70 chip.
Typography
Three families loaded from Google Fonts (Archivo 400/600/900, Hanken Grotesk
400/500/700, JetBrains Mono 400/500/700). The display face is Archivo set to
weight 900 with font-stretch: 125% and text-transform: uppercase — the
compression and caps are the brand signature. Hanken Grotesk handles body and the
medium-weight pull quote; JetBrains Mono handles all labels with wide 0.25em–0.3em
tracking. No bespoke fonts — all three are open-source.
| Token | Size | Weight | Line-height | Tracking | Usage |
|---|---|---|---|---|---|
| display | clamp(3.5rem,9vw,7rem) | 900 | 0.86 | 0.02em | Hero "Vellum" wordmark |
| display-section | clamp(1.5rem,4vw,2.6rem) | 900 | 1.0 | 0.05em | Section headings ("The Plates", "Checklist") |
| plate-numeral | clamp(4rem,12vw,9rem) | 900 | 1.0 | 0.02em | Oversized Roman numerals on plate images |
| blockquote | clamp(1.4rem,3.2vw,2.6rem) | 500 | 1.18 | -0.01em | Architect's statement quote (Hanken) |
| body | 15px | 400 | 1.6 | — | Paragraph copy |
| mono-label | 11px | 400 | 1.4 | 0.25em | Buttons, nav, plate meta, attribution |
| mono-micro | 9px | 400 | 1.4 | 0.25em | Field labels, captions, table head |
Note: the hero subhead uses display at clamp(1.3rem,3.2vw,2.4rem) / lh 1.02; the
footer wordmark scales to clamp(5rem,23vw,20rem) at lh 0.7.
Layout
Base unit 4px. The entire site is a single max-w-[1440px] centered column divided
into full-width horizontal sections, each separated by a border-b hairline. Inside,
two-column CSS grids drive the rhythm: the hero is 45% / 55% (copy / image), plates
alternate lg:grid-cols-2 with the image and text swapping order, Materials is
40% / 60%, the Statement is 62% / 38%. Data is presented as bordered grids —
4-up fact strips, a 2-column materials ledger, and a 5-column specifications table
(grid-cols-[1.4fr_1fr_1fr_0.8fr_1fr]) that scrolls horizontally inside min-w-[680px].
Images are tall (min-h-[55vh]–88vh), full-bleed within their cell, object-cover.
The dominant move is the ledger: nothing floats; every block is a cell in a drawn grid.
Elevation & Depth
Flat by design. There are no box-shadows on surfaces — depth is created entirely by
hairline borders and the light/dark surface inversions. The only shadows are the
drop-shadow-[0_0_30px_rgba(0,0,0,0.4-0.5)] glows behind the oversized plate
numerals so they read against busy photography, and a bg-gradient-to-t from-black/60
scrim under image captions. The header uses backdrop-blur-xs over concrete/95.
Shapes
Strictly rectilinear — rounded.none (0px) everywhere. No pills, no soft cards. The
geometry is all right angles and 1px hairlines; the personality comes from the grid
divisions and the compressed type, not from corner treatment.
Components
- nav-link — transparent,
mono-microcaps, left hairline, 12×20px; hover fillsinkwithbonetext. Active "Enquire" cell is solidoxidewithbonetext. - button-primary — solid
ink,bonetext,mono-labelcaps, 16×24px, hairline border, no radius; hover background →oxide. Label e.g. "Request The Folio →". - button-ghost — transparent with solid
ink1px border, underlined offset-4,mono-label; hover text →oxide. Label "View Plates". - fact / data cell — transparent, right+bottom hairline, 16px pad; micro caps
label (
ink-50) over a 12px uppercase value. Used in hero stats, materials ledger. - table-head-cell —
inkfill,bonetext,mono-micro,hairline-lightborders; body rows are12pxuppercase with plate refs inoxide. - enquire-form — single hairline-light bordered bar on dark; transparent email
input (placeholder
bone-40) + solidoxidesubmit button "Submit →" that hovers tobone/ink. - image-caption —
mono-microbonetext on a black-to-transparent scrim or anink/70chip, e.g. "Fig. A — West elevation at noon".
Motion
Scroll-driven via GSAP + ScrollTrigger over Lenis smooth scroll. Three signature
moves: plate images reveal with a left-to-right clip-path wipe
(inset(0 100% 0 0) → inset(0 0% 0 0), 1s power3.out, trigger top 75%); plate
numerals rise (y:40, opacity:0 → in, 0.9s, trigger top 85%); and the statement
rule-x draws horizontally (scaleX 0 → 1 from the left, 0.9s). Nav and buttons use
CSS transition-colors on hover. Lenis provides inertial smoothWheel scrolling.
Iconography
No icon library is loaded. Direction and action are signaled by typed arrow glyphs
(→) inside mono labels — "Request The Folio →", "Submit →". All other ornament is
typographic: Roman numerals, "Fig." / "Det." captions, and MMXXVI-style Roman dates.
Do's and Don'ts
- Do keep every block inside the hairline grid — borders define structure, not fills.
- Do use the single
oxide #D24B16voltage for accents only; let it stay rare. - Do set all display and label text in uppercase with wide mono tracking.
- Do keep corners at 0 and surfaces flat; reveal photography with the clip wipe.
- Don't add shadows, rounded corners, or a second accent color.
- Don't mix the three type voices' roles (Archivo display, Mono label, Hanken body).
- Don't present full-color photography — desaturate to
grayscale(0.85).
Known Gaps
- Spacing scale is inferred from the recurring Tailwind paddings (p-4, px-6/10/12, py-12/14/16/24) onto a 4px base; named steps (xs–2xl) are an approximation of the values actually used, not a declared scale.
font-stretch: 125%on the display face renders only where the variable Archivo axis is supported; the visual width may vary by browser.- The
backdrop-blur-xsvalue is Tailwind's token; exact blur radius not specified in the markup.