Studio Œ
Remix this template to create a similar design — same sections, layout, animations, colors, and typography.
A landing page for an editorial branding studio. Deep teal-black canvas, burnt-orange and seafoam accents, Fraunces and Italiana serifs.
Palette
Typography
clamp(34px, 5vw, 84px)
clamp(64px, 8vw, 112px)
13px
17px
11px
Spacing & Shape
| Token | Value | Preview |
|---|---|---|
| xs | 4px | |
| sm | 8px | |
| md | 16px | |
| lg | 24px | |
| xl | 36px | |
| 2xl | 48px | |
| 3xl | 64px | |
| 4xl | 80px |
Border Radius
| Token | Value | Preview |
|---|---|---|
| none | 0px | |
| card | clamp(18px, 1.6vw, 28px) | |
| full | 9999px |
design.md
tokens (raw)
name: studio-oe-design
version: alpha
description: >
A dark, editorial branding-studio site set on a deep teal-black surface
(`#0D1A1C`) with warm parchment ink (`#F5EDD8`). Its signature is the italic
Fraunces display face (optical-size 144, SOFT 0) carrying every headline, paired
with italic JetBrains Mono captions and Italiana eyebrows. Two voltages do the
accenting: a burnt-amber (`#E8621A`) for highlights, links and hover states, and
a muted teal-sage (`#4DAA8C`) for secondary labels. The hero is an edge-bleed
video behind a refractive glass card (SVG turbulence "water" distortion), and the
body is built from full-viewport scroll-pinned scenes — sticky-stacked work
panels, a pinned split text/image swap, and a cursor-tracked client list with a
floating image preview. Geometry is near-flat: soft radius only on the hero card,
hairline rules everywhere else.
colors:
# Surface
bg-primary: '#0D1A1C' # page background, hero/footer dark fields
bg-secondary: '#1A2E2C' # footer, split-pin, panel tone 2, preview card bg
surface: '#243430' # stack panel tone 3 text field
# Brand / voltages
accent-1: '#E8621A' # burnt amber — links, hovers, cursor dot, footer rule, current-index
accent-2: '#4DAA8C' # teal-sage — secondary eyebrows/labels, footer email
# Text
text-primary: '#F5EDD8' # parchment — headings, body, wordmark
text-muted: '#A89E8A' # warm grey — captions, meta, descriptions
# Hairlines (parchment at low alpha)
hairline-strong: 'rgba(245, 237, 216, 0.14)' # list/section rules
hairline-soft: 'rgba(245, 237, 216, 0.08)' # footer top/base rules
# Glass / overlay
glass-border: 'rgba(255, 255, 255, 0.35)' # hero card border
hero-overlay: 'rgba(13, 26, 28, 0.55)' # hero video darkening gradient stop
typography:
display:
fontFamily: "'Fraunces', Georgia, serif"
fontSize: clamp(34px, 5vw, 84px)
fontWeight: 500
lineHeight: 1.04
letterSpacing: -0.025em
display-wordmark:
fontFamily: "'Fraunces', Georgia, serif"
fontSize: clamp(64px, 8vw, 112px)
fontWeight: 500
lineHeight: 1
letterSpacing: -0.025em
accent-eyebrow:
fontFamily: "'Italiana', Georgia, serif"
fontSize: 13px
fontWeight: 400
lineHeight: 1.7
letterSpacing: 0.32em
textTransform: uppercase
body:
fontFamily: "'Inter Tight', sans-serif"
fontSize: 17px
fontWeight: 400
lineHeight: 1.7
mono-caption:
fontFamily: "'JetBrains Mono', monospace"
fontSize: 11px
fontWeight: 400
lineHeight: 1.8
letterSpacing: 0.14em
textTransform: uppercase
rounded:
none: 0px
card: clamp(18px, 1.6vw, 28px) # hero glass card only
full: 9999px # cursor dot
spacing: # base unit: 4px
xs: 4px
sm: 8px
md: 16px
lg: 24px
xl: 36px
'2xl': 48px
'3xl': 64px
'4xl': 80px
components:
nav:
backgroundColor: 'linear-gradient(to bottom, rgba(13,26,28,0.8), rgba(13,26,28,0))'
textColor: '{colors.text-primary}'
typography: '{typography.mono-caption}'
padding: '20px 64px'
note: 'fixed, blur(2px) backdrop; logo in Fraunces italic 22px; links in italic mono uppercase, hover -> accent-1'
heroCard:
backgroundColor: 'linear-gradient(160deg, rgba(245,237,216,0.18), rgba(245,237,216,0.05), rgba(245,237,216,0.16))'
textColor: '{colors.text-primary}'
border: '1px solid {colors.glass-border}'
rounded: '{rounded.card}'
padding: 'clamp(32px,4.5vw,64px) clamp(28px,5vw,72px)'
note: 'refractive glass: backdrop-filter blur(3px) saturate(125%) + SVG water-distort filter; layered inset highlights + deep drop shadow'
heroCta:
backgroundColor: 'transparent'
textColor: '{colors.text-primary}'
typography: '{typography.body}'
border: '1.5px solid rgba(245,237,216,0.45)'
rounded: '{rounded.none}'
padding: '14px 28px'
note: 'uppercase 14px tracked label; hover fills accent-1 with white text, arrow nudges +6px'
stackLink:
textColor: '{colors.accent-1}'
typography: '{typography.body}'
border: 'bottom 1.5px solid {colors.accent-1}'
padding: '0 0 4px 0'
note: 'underlined uppercase case-study link with arrow'
splitProgressDot:
backgroundColor: 'rgba(245,237,216,0.25)'
rounded: '{rounded.none}'
note: 'vertical bar 6x28px; active -> accent-1, height grows to 56px'
cursorPreview:
backgroundColor: '{colors.bg-secondary}'
rounded: '{rounded.none}'
note: '320x420 fixed floating image; clip-path inset(50%)->inset(0) reveal, follows cursor with lerp easing, deep drop shadow'
cursorDot:
backgroundColor: '{colors.accent-1}'
rounded: '{rounded.full}'
note: '12px dot, mix-blend-mode difference, follows cursor'
footer:
backgroundColor: '{colors.bg-secondary}'
textColor: '{colors.text-muted}'
border: 'top 1px solid {colors.hairline-soft}'
padding: '120px 64px 48px'
note: 'centered Fraunces wordmark flanked by amber scaleX rules; 3-col grid of mono labels'
motion:
hero-water-rise: 'card rises 60px + scales 0.96->1 with clip-path inset reveal, 1.4s cubic-bezier(0.25,0,0.15,1) 0.25s'
hero-words: 'each headline word blur(18px)->0 + fade, 0.9s ease, staggered ~130ms via JS'
hero-video: 'scale(1.04)->1 over 2s on load'
water-distort: 'SVG feTurbulence baseFrequency animates over 16s loop, feDisplacementMap scale 14 — refractive ripple behind hero card'
stack-panels: 'translateY(100%)->0 active, prior panels translateY(-12vh) scale(0.94) opacity 0.55; 0.6s cubic-bezier(0.4,0,0.2,1), scroll-driven'
split-swap: 'image opacity/scale + text panel fade/translate on scroll progress; 0.35-0.45s ease-soft'
cursor-preview: 'lerp follow (0.18 factor) + clip-path reveal 0.55s ease-soft'
footer-rules: 'scaleX(0)->1 0.95s on intersect; wordmark per-char clip-path wipe staggered 80ms'
icons:
library: inline unicode glyphs
style: 'text arrows (→) and em-dash markers (—); no icon font'
color: '{colors.accent-1}'Studio Œ
studio-oe-design · alpha
Design spec — version alpha. Source: static HTML (
index.html); tokens read from inline styles + class rules. Fictional/sample product; described factually.
Overview
Studio Œ is an editorial branding-studio landing page built on a deep teal-black
field (--bg-primary #0D1A1C) inked in warm parchment (--text-primary #F5EDD8),
with two adjacent darks (#1A2E2C, #243430) used to tint stacked panels. The
whole type story rests on an italic Fraunces display face tuned to its highest
optical size (opsz 144, SOFT 0, weight 500) — every headline, title, name and
wordmark is italic Fraunces with tight -0.025em tracking. Around it sit three
supporting voices: Italiana for wide-tracked (0.32em) uppercase eyebrows,
Inter Tight for 17px body copy at a generous 1.7 line-height, and italic
JetBrains Mono for the small uppercase captions, indices and coordinates that
give the page its log-book feel. Two voltages do all the accenting: a burnt amber
(--accent-1 #E8621A) owns links, hovers, the cursor dot and the active index,
while a teal-sage (--accent-2 #4DAA8C) handles secondary labels and the footer
email. The signature moves are theatrical and scroll-driven: a full-bleed hero
video sits behind a refractive glass card (real backdrop-filter blur plus an
animated SVG turbulence "water" distortion), then three full-viewport pinned scenes
follow — sticky-stacked work panels, a pinned split text/image swap, and a
cursor-tracked client list that floats a 320×420 image preview under the pointer.
Geometry stays near-flat: the only rounded element is the hero card; everything
else is hairlines and hard edges.
Colors
Surface. Three darks: --bg-primary #0D1A1C is the page, hero overlay base and
footer's adjacent dark; --bg-secondary #1A2E2C backs the footer, the split-pin,
panel tone 2 and the cursor-preview card; --surface #243430 tints the third
stack panel's text field. Brand voltages. --accent-1 #E8621A (burnt amber)
is the dominant accent — nav-link hover, hero-CTA hover fill, stack/cursor links,
the active counter index, the footer rule, the cursor dot and list-item hover.
--accent-2 #4DAA8C (teal-sage) is the quieter secondary — section eyebrows
(.stack-eyebrow, .split-section-label, .cursor-eyebrow) and the footer email.
Text. --text-primary #F5EDD8 (parchment) for all headings and primary copy;
--text-muted #A89E8A (warm grey) for captions, meta, descriptions and indices.
Body sub-copy frequently uses rgba(245,237,216,…) at 0.65–0.92 alpha rather than
the muted token. Hairlines. Parchment at low alpha: 0.14 for list/section
rules, 0.12 for footer grid tops, 0.08 for the footer's outer rules. Glass.
The hero card uses a white rgba(255,255,255,0.35) border over a parchment-tinted
translucent gradient; the hero overlay darkens the video with a top-to-bottom
rgba(13,26,28,…) 0.55 → 0.18 → 0.6 gradient.
Typography
Four families, all loaded from Google Fonts in one @import:
Fraunces (variable, opsz 9–144, wght 400–900, SOFT 0–100, italic), Inter Tight
(400/500/600), Italiana, and JetBrains Mono (italic 400/500). Fraunces is the
soul of the system — used exclusively in italic at opsz 144 / SOFT 0 for big
display and opsz 60 for the nav logo and footer names. Italiana provides the
high-contrast serif eyebrow; Inter Tight is the only sans (body and CTA labels);
JetBrains Mono italic is the captioning voice. No bespoke faces — all four are
open-source via Google Fonts.
| Token | Size | Weight | Line-height | Tracking | Usage |
|---|---|---|---|---|---|
| display | clamp(34px, 5vw, 84px) | 500 | 1.04 | -0.025em | Hero headline, stack/split/cursor titles (titles scale to clamp 56–96px) |
| display-wordmark | clamp(64px, 8vw, 112px) | 500 | 1 | -0.025em | Footer "STUDIO Œ" wordmark |
| accent-eyebrow | 13px (hero 14px) | 400 | 1.7 | 0.32em | Italiana uppercase section eyebrows |
| body | 17px | 400 | 1.7 | — | Inter Tight body copy; descriptions 16px |
| mono-caption | 11px (12–13px variants) | 400 | 1.8 | 0.14–0.18em | Italic JetBrains Mono captions, indices, coords, meta |
Layout
Base unit 4px; the recurring rhythm is 20 / 28 / 36 / 48 / 64 / 80px with
horizontal page padding of 64px on desktop (24px under 900px). The page is a
fixed translucent nav over a 100vh hero, then three tall scroll-pinned sections
each 400vh with a sticky top:0 100vh pin: Section 1 sticky-stacks three
absolute panels (two-column 1fr/1fr image-text, alternating via data-side);
Section 2 is a pinned 1fr/1fr split with image stack on one side and swapping text
panels on the other, plus a vertical progress rail; Section 3 is a normal-flow
cursor-tracked list (grid 80px / 1fr / auto) inside an overflow:hidden,
cursor:none section. Content blocks cap at max-width: 1280px centered. On mobile
all three pins are dropped — sections collapse to stacked, single-column,
full-height-ish blocks with transforms forced off. Whitespace is generous and
cinematic: sections breathe at 100–220px vertical padding.
Elevation & Depth
Mostly flat, depth created by overlap and one heavy glass moment. The hero card is
the elevation set-piece: a deep 0 36px 80px -24px rgba(0,0,0,0.55) drop shadow
plus three inset highlight/shadow lines and a 0 0 0 1px inset ring, over a real
backdrop-filter: blur(3px) saturate(125%) and an SVG feDisplacementMap "water"
filter. The cursor preview floats with 0 30px 80px -20px rgba(0,0,0,0.5).
Everywhere else, separation is by hairline rule (parchment 0.08–0.14 alpha) and by
the stack-panel dim/scale (prior panels recede to scale(0.94) at 0.55 opacity).
The nav adds a faint blur(2px) backdrop.
Shapes
Near-brutalist rectangularity. The only rounded element is the hero glass card at
clamp(18px,1.6vw,28px). Buttons, panels, image frames, progress dots and rules
are all hard-cornered (0). The single full-round is the 12px border-radius:50%
cursor dot. The character is sharp and editorial — softness is reserved for the one
floating glass card.
Components
- nav — fixed, fade-to-transparent gradient +
blur(2px); logo Fraunces italic 22px (opsz 60); links italic JetBrains Mono 11px uppercase0.14em, hover →accent-1. Padding20px 64px. - heroCard (.hero-meta) — translucent parchment glass card,
1px rgba(255,255,255,0.35)border, radiusclamp(18px,1.6vw,28px), paddingclamp(32px,4.5vw,64px)/clamp(28px,5vw,72px); refractive backdrop + layered inset highlights + deep drop shadow. - heroCta — transparent,
1.5px rgba(245,237,216,0.45)border, square; uppercase 14px label "See Selected Work →"; hover fillsaccent-1, text white, arrow nudges +6px. - stackLink / cursorLink —
accent-1uppercase label with a 1.5pxaccent-1bottom border; "View Case Study →". - stackCounter / splitCounter — italic mono "01 / 03" index; the current digit in
accent-1(split counter is a giant Italiana numeral atclamp(80px,12vw,160px)withmix-blend-mode: difference). - splitProgressDot — 6×28px parchment-25% vertical bar; active →
accent-1, grows to 56px tall. - splitDeliverables — mono italic list, hairline
border-top, each prefixed with anaccent-1em-dash "— ". - cursorPreview — 320×420 fixed image card on
bg-secondary, clip-path reveal, cursor-following with lerp, deep shadow. - cursorDot — 12px
accent-1circle,mix-blend-mode: difference. - footer —
bg-secondary, centered Fraunces wordmark flanked by amberscaleXrules; 3-column mono-labelled grid; email inaccent-2.
Motion
Everything is choreographed. On load the hero card runs hero-water-rise (1.4s,
cubic-bezier(0.25,0,0.15,1)): rises 60px, scales 0.96→1, with a clip-path inset
reveal; headline words individually de-blur (blur(18px)→0) on a JS ~130ms stagger;
the hero video scales 1.04→1 over 2s. The hero card's backdrop carries a live SVG
turbulence filter whose baseFrequency animates on a 16s loop for a constant
water ripple. Scroll drives the two pinned scenes via a requestAnimationFrame
loop: stack panels slide translateY(100%)→0 (0.6s cubic-bezier(0.4,0,0.2,1))
with prior panels receding to translateY(-12vh) scale(0.94); the split scene
cross-fades image + text panels and animates the progress rail. IntersectionObserver
fires the footer: amber rules scaleX(0→1) (0.95s) and the wordmark wipes in
per-character via clip-path on an 80ms stagger. The cursor preview follows the
pointer with a 0.18 lerp and clip-path reveal. A 1500ms safety timeout force-shows
any entrance element that hasn't fired.
Iconography
No icon font. Iconography is pure typographic glyphs: right-arrows (→) on CTAs and
links, em-dash (—) bullet markers in deliverable lists and the index counter, and a
middot (·) separator throughout eyebrows and meta. Accent glyphs (arrows, list
dashes) render in accent-1. The only drawn shape is the 12px circular cursor dot.
Do's and Don'ts
- Do keep every headline in italic Fraunces at
opsz 144 / SOFT 0, weight 500,-0.025emtracking — it is the brand. - Do reserve
accent-1amber for interaction (hovers, links, active index, cursor) andaccent-2sage for quiet secondary labels. - Do caption with italic JetBrains Mono uppercase at wide tracking, and eyebrow with
Italiana at
0.32em. - Do keep edges hard — hairline rules over shadows; the hero glass card is the one rounded, elevated exception.
- Don't introduce a third accent or recolor the parchment ink.
- Don't add an icon font — stay with unicode arrows, dashes and middots.
- Don't soften corners on buttons, panels or images, and don't drop the scroll-pinned scene structure that defines the page.
Known Gaps
- The hero "water" refraction is an animated SVG
feTurbulence/feDisplacementMapfilter; its visual result is described qualitatively (the numericbaseFrequencykeyframes andscale 14are read from markup but the perceived effect is approximate). - Image and video assets are remote CDN URLs (bunny.net); their actual artwork is not inspected — only their roles and frame treatments are described.
- The spacing scale is inferred from the most-repeated values; the design uses many
one-off
clamp()paddings beyond the named steps. - Body sub-copy alpha colors (
rgba(245,237,216,0.65–0.92)) are used inline rather than as named tokens; captured under Text rather than as discrete tokens.