Leo Lutz Design System
Leo Lutz is a quiet, dark one-person resume. It feels like a gallery wall at night: a pure black page, very light Satoshi set large and calm, and one colourful portrait that stays pinned on the left while everything else scrolls past on the right. There are almost no boxes. Structure comes from hairline rules, alpha-stepped white text and space.
Four signatures make it recognisable:
- The pinned, tilted portrait. The left half of the page holds one portrait photo, skewed in perspective (the near edge taller than the far edge), sticky for the whole page, and nudged by the mouse. The right half carries the content.
- Light-weight poster type. Headlines are Satoshi 300: the hero Digital Designer Based In London. at 8vw (115px at 1440), section titles at 43px, and metrics at 100px.
- Rolling counters. Metrics (394+, 79, 300%) are built from digit columns that roll upward on load, with a smaller grey affix (+, %) beside them.
- The ©-name logo and round controls. The logo reads ©Leo Lutz top-left; the menu is a hamburger inside a thin 1px circle top-right; a small light/dark switch sits bottom-left.
Colors
Surfaces
#000000Page background
#090909Slightly lifted blocks behind images
#1B1B1BFilled buttons (--black-2)
Ink
#FFFFFF#000000Text on primary-hover
#FFFFFFHeadlines, titles, metrics, nav links
#FFFFFF · 60%Paragraphs (p and .paragraph, 33 uses), section labels like Achievements, metric affixes
#FFFFFF · 70%Metric labels (Projects done), experience meta (Webflow at 2010-2014), placeholders
#FFFFFF · 50%Social links
#FFFFFF · 36%Menu group headings
#FFFFFFAction
#1B1B1BFilled buttons (--black-2)
#FFFFFFButtons invert to white with black text on hover
Lines & effects
#FFFFFF · 20%1px rules between experience items and under section labels, input underlines, the menu circle
#FFFFFF · 22%Rules under menu group headings
#FFFFFF · 35%The theme switch outline
#FFFFFF · 20%Small translucent fills (switch track, hover states)
#000000 · 30%The bottom stop of the gradient over project images (transparent until 54%)
Typography
Satoshi · display-hero
The quick brown fox jumpsHero title (.title-1, 8vw), capitalised. 115px · 300 · 1.0
Satoshi · metric-affix
The quick brown fox jumps+ and % after a counter, in ink-muted. 55px · 300 · 1.0
Satoshi · headline-lg
The quick brown fox jumpsLarger headings lower on the page (4 uses). 52px · 300 · 1.05
Satoshi · title-lg
The quick brown fox jumpsPricing and process figures. 29px · 400 · 1.24
Satoshi · body-lg
The quick brown fox jumpsFAQ questions (.faq-small-text). 23px · 400 · 1.26
Satoshi · label-nav
The quick brown fox jumpsMenu links and menu group headings. 20px · 400 · 1.0
Spacing & shape
| Purpose | Value |
|---|---|
| Container | max 1200px, centred, with 5% side padding (72px at 1440px) |
| Section rhythm | sections in the right column are separated by about 80–120px of space and introduced by a label over a 1px rule; there are no background bands |
| Breakpoints | 991px, 767px and 479px |
Spacing scale
| Token | Value | Preview |
|---|---|---|
xs | 7px | |
sm | 16px | |
md | 20px | |
lg | 40px | |
xl | 80px |
Layout spacing
| Token | Value | Preview |
|---|---|---|
gutter | 72px | |
section | 80px | |
column-gap | 80px | |
hero-top | 190px |
Border radius
Surfaces
How the surfaces stack, from the page background up. Hex codes and roles are in Colors above.
Motion
| Counter roll | Digit columns move y 0 → -700%, 2500ms, cubic-bezier(0.784, 0.325, 0.222, 0.98) |
| Scroll reveal | Opacity 0 to 1 at 300ms ease, with a y 10px → 0 move over 500ms |
| Portrait parallax | The portrait shifts ±7–10px with the mouse, 500ms |
| Menu panel | x 100% → 0%, 300ms ease; links fade in from opacity 0 |
| Theme switch | Background, text colour, border and filter change, 300ms ease |
| Button hover | Background #1B1B1B to #FFFFFF and text to black, 300ms (transition: all .3s) |
| Hamburger | Lines rotate, 400ms swingTo |
| Link hover | Line-through on text links; nav links fade to 60%; social links 200ms |
Do’s and don’ts
- Keep the canvas pure #000000 and text pure #FFFFFF, stepped down only by alpha (60% for body, 70% for meta).
- Set every headline in Satoshi 300: 115px hero, 43px sections, 100px metrics.
- Pin one portrait on the left and scroll all content in the right column.
- Separate items with 1px white-20% rules instead of cards or panels.
- Use #1B1B1B square buttons (3px radius) that invert to white on hover.
- Keep project photography black and white.
- Add an accent colour, gradients on UI or drop shadows.
- Use Playfair Display or any serif, even though the page loads it.
- Set headlines in bold or uppercase; capitalised Title Case is the most emphasis the hero gets.
- Use ink-faint (36%) below 20px or for anything a reader must read; keep it for menu group headings.
- Round images or put content in filled cards.
- Animate longer than 500ms, except the 2500ms counter roll.
Example prompt
Any page in the Leo Lutz style
More design systems like this
Portfolio design systems, the same colors first.
Bring any of them to your AI tool
All Access unlocks all 398 design systems, ready for Claude, ChatGPT, Gemini, Cursor, v0 and Lovable, plus 400+ templates on all 5 platforms.
Get All AccessUpgrade to All AccessHow to use the Leo Lutz design system
Pick a file to see what it’s for and where it goes.
What it is
The whole design system in one markdown file, written for AI: every color, type style, spacing value, component and motion rule, plus do's, don'ts and a ready prompt.
Best for
Claude, ChatGPT, Gemini, Cursor and v0, or any other AI tool that builds pages or code.
How to use it
- Put
DESIGN.mdin your project and mention it in your request, or save it as.cursor/rules/leo.mdc - For the rule file, start it with a front-matter block that sets
alwaysApply: true, so every chat uses it - Ask: “Build a pricing page using DESIGN.md.” Cursor follows the colors, fonts, spacing and rules
- Put
DESIGN.mdin the project root - Add one line to
CLAUDE.md: “Follow DESIGN.md for all UI.” - Ask for any page or component; Claude reads the file first
- Attach
DESIGN.mdto the chat (or paste it in) - Ask: “Build a landing page in this design system.”
- Keep the file in the chat or project knowledge, so follow-up pages stay on style
What it is
Every token as data, in the W3C Design Tokens format: colors with their roles, type styles, radius, spacing, and component tokens that point at them.
Best for
Figma (Tokens Studio), Style Dictionary and other design-token tools, and build scripts.
How to use it
- In Figma, open Tokens Studio, choose Import, and pick
tokens.json - Or point Style Dictionary’s
sourceat it to generate tokens for any platform - In code, import it like any JSON file
What it is
A Tailwind CSS v4 theme: every color, font, type style, radius and spacing value becomes a Tailwind utility, like bg-canvas, text-headline-lg or rounded-md.
Best for
Tailwind v4 projects, and AI builders that write Tailwind (v0, Lovable, Bolt).
How to use it
- Save
theme.cssnext to your main CSS file - Import it after Tailwind:
@import "tailwindcss"; @import "./theme.css"; - Use the classes:
bg-canvas text-ink rounded-md p-lg
What it is
The same tokens as plain CSS variables on :root. Component values point at the color variables, so changing one color updates everything that uses it.
Best for
Any website: plain CSS, Webflow custom code, Framer, WordPress.
How to use it
- Add it to your stylesheet, or in Webflow paste it into Site settings → Custom code inside a
<style>tag - Use the variables anywhere:
color: var(--color-ink) - Change a token once and every place that uses it follows






