Skip to content

Paper

Serif headlines on white paper, a grainy peach haze, black pill buttons and product sheets that float.

  • Light by default
  • 35 colours · 14 type steps
  • Inspired by steep.app
Use Paper
localhost:3000

The same generated app in every design. Scroll inside the window to see the whole page.

What it is

Paper sets its headlines in a light serif on a white page, with a grainy peach and lilac haze behind the hero. Everything else is a quiet grotesque in fine half-step weights, and nothing is ever bold. Cards are flat grey panels with 24px corners and no lines, and only product pictures float, as white sheets with a soft shadow. Every button is a pill: a black one, with an ink outline beside it. Peach and a deep sienna are the only warm colours, kept for one quote card, small labels and the focus glow.

Maintained by @agentic-studio in the open registry.

Best for

Analytics, reporting and AI products that want to feel calm and considered, and tools that sell on clear thinking. It suits teams with short, well-written headlines, because the serif carries the page.

Trade-offs

  • The serif headline is the whole voice. A short title reads like a magazine cover; a long one runs to three or four lines at 90px.
  • Grey cards on white are low contrast by design (about 1.1:1). On a washed-out screen or a projector the card edges fade and only the type holds the layout.
  • Colour is rationed to peach and sienna. A product with a loud brand colour, or a dashboard that needs many status colours at once, will fight the calm.

Tokens

Generated from this design’s design.yaml, and shipped as CSS variables plus a Tailwind theme. Templates may use these names and nothing else.

Colours

Every colour token in design.yaml, grouped the way the system documents them. These are the light palette's values. The dark palette uses the same names with its own values, and tokens.css ships both.

Brand and accent

  • accent

    #5d2a1a

  • accent-1

    #9a4a2b

  • accent-2

    #33598a

  • accent-3

    #4c8a61

  • accent-4

    #b07f1f

  • accent-5

    #8a6aad

  • accent-6

    #6d717c

  • accent-hover

    #7a3822

  • accent-soft

    #fbe1d1

  • primary

    #17191c

Surface

  • canvas

    #ffffff

  • hairline

    #e4e4e7

  • surface-card

    #f2f2f3

  • surface-dark

    #17191c

  • surface-dark-elevated

    #26292e

  • surface-soft

    #fafafb

  • surface-solid

    #ffffff

  • surface-strong

    #e8e8eb

Text

  • body

    #3f434a

  • body-strong

    #26292e

  • ink

    #17191c

  • muted

    #676b75

  • muted-soft

    #8a8d96

  • on-accent

    #ffffff

  • on-dark

    #ffffff

  • on-primary

    #ffffff

Semantic

  • error

    #b42318

  • success

    #2b6a45

  • warning

    #8a5a0a

Other

  • danger

    #b42318

  • danger-soft

    #fce9e7

  • error-soft

    #fce9e7

  • primary-hover

    #2e3136

  • success-soft

    #e2f0e6

  • warning-soft

    #f9efd9

Type scale

Each token rendered at its real size, weight, line height and tracking. Specimens fall back to this site's typeface when the design's own face is not installed locally, so read the numbers, not the letterforms.

  • Ship faster

    Token
    display-xl
    Values
    5.625rem · 90px · 450 · lh 1.12 · ls -0.025em
  • Ship faster

    Token
    display-lg
    Values
    4rem · 64px · 450 · lh 1.12 · ls -0.015em
  • Ship faster

    Token
    display-md
    Values
    2.75rem · 44px · 450 · lh 1.15 · ls -0.015em
  • Ship faster

    Token
    display-sm
    Values
    2rem · 32px · 450 · lh 1.2 · ls -0.01em
  • Ship faster

    Token
    title-lg
    Values
    1.625rem · 26px · 450 · lh 1.25 · ls -0.009em
  • Ship faster

    Token
    body-lg
    Values
    1.25rem · 20px · 400 · lh 1.5 · ls -0.005em
  • Ship faster

    Token
    title-md
    Values
    1.25rem · 20px · 480 · lh 1.35 · ls -0.005em
  • Ship faster

    Token
    title-sm
    Values
    1.0625rem · 17px · 480 · lh 1.4 · ls 0
  • Ship faster

    Token
    body-md
    Values
    1rem · 16px · 400 · lh 1.5 · ls 0
  • Ship faster

    Token
    nav-link
    Values
    1rem · 16px · 400 · lh 1.5 · ls 0
  • Ship faster

    Token
    body-sm
    Values
    0.9375rem · 15px · 400 · lh 1.5 · ls 0
  • Ship faster

    Token
    button
    Values
    0.9375rem · 15px · 430 · lh 1 · ls 0
  • Ship faster

    Token
    caption
    Values
    0.875rem · 14px · 430 · lh 1.43 · ls 0
  • SHIP FASTER

    Token
    caption-uppercase
    Values
    0.75rem · 12px · 480 · lh 1.33 · ls 0.06em

Typefaces

The families the generated Tailwind theme points at. A licensed face is named here even when the substitute below is what actually renders.

  • DisplaySource Serif 4, ui-serif, Georgia, "Times New Roman", serif
  • BodyArchivo, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
  • MonoSource Code Pro, ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace

Spacing scale

Drawn at true size. These are the only gaps and paddings a generated repo is allowed to use.

  • xxs0.25rem · 4px
  • xs0.5rem · 8px
  • sm0.75rem · 12px
  • md1rem · 16px
  • lg1.5rem · 24px
  • xl2.5rem · 40px
  • xxl4rem · 64px
  • section5rem · 80px

Radius scale

Sample shapes at true corner radius. Buttons and inputs sit at the small end of this scale, feature cards at the large end.

  • xs0.375rem · 6px
  • sm0.75rem · 12px
  • md1rem · 16px
  • lg1.25rem · 20px
  • xl1.5rem · 24px
  • full9999px
  • pill9999px

Elevation

Shadow tokens on a neutral card, at true blur and spread.

  • inset0 0 #0000
  • lift0 0 0 1px rgb(4 23 43 / 0.05), 0 20px 25px -5px rgb(23 25 28 / 0.1), 0 8px 10px -6px rgb(23 25 28 / 0.1)
  • overlay0 0 0 1px rgb(23 25 28 / 0.05), 0 8px 40px 0 rgb(23 25 28 / 0.12)
  • ring0 0 0 4px rgb(251 225 209 / 0.9)
  • soft0 0 0 1px rgb(23 25 28 / 0.05), 0 4px 24px 0 rgb(23 25 28 / 0.08)
  • xs0 1px 2px 0 rgb(23 25 28 / 0.08)

DESIGN.md

Ships in your repo as DESIGN.md. The designer agent reads it before it may introduce a new visual pattern. This is the briefing, not a page about the briefing.

Paper is a magazine page for software: serif headlines on white paper, one peach note and product sheets floating in a warm, grainy haze. Headlines are a light serif that never goes bold, and everything else is a quiet grotesque in half-step weights. Cards are flat mist panels with no lines; only product pictures and overlays float. Every button is a pill.

Read this before you add a screen, a component or a colour. The tokens live in src/app/globals.css, the faces in src/app/fonts.ts, the kit in src/components/ui/.

At a glance

ThemeLight native on white paper (#ffffff). Dark is Paper at night: the same page on graphite (#111214), with peach taking over as the accent.
TypeSource Serif 4 at 450 for h1, h2 and dialog titles, never bold, italic only for kickers and numerals. Archivo in half steps (400, 430, 480, 500 at most) for everything else. Source Code Pro for keys and code only.
ColourInk (#17191c) on white, mist (#f2f2f3) cards, slate (#676b75) quiet text. Peach (#fbe1d1) and sienna (#5d2a1a) are the only warm colours.
ShapePills for every button, badge, tab and switch; 24px corners for every card, stage and dialog; 16px for fields; 20px for menus.
DepthFlat mist content. Only things that float cast a shadow (product sheets, the featured plan, the CTA, menus and dialogs), each with a 5% ring as its edge.
SignatureA grainy peach and lilac haze behind a 90px serif headline, with a white product sheet floating out of it and a collaborator's cursor on its button.

Principles

  1. The serif names things (pages, sections, dialogs); the sans runs everything inside a card or a control.
  2. Nothing is bold. The serif stays at 450 and the sans tops out at 500.
  3. A card is made by its fill, not by a line. Lines only split rows.
  4. Only things that float cast a shadow. Content lies flat on the page.
  5. Peach is spent once per page at card size; sienna marks small things.

Colour

Palette

TokenLightDarkRole
canvas (--background)#ffffff#111214The page floor
surface-soft#fafafb#151618Section bands, sidebars, table heads
surface-card (--muted)#f2f2f3#1b1c1fTinted fills: inactive tabs, hover rows, code
surface-strong#e8e8eb#2a2c31Pressed fills, progress tracks
surface-solid (--popover)#ffffff#202226Menus, selects, toasts: always opaque
card#ffffff#202226The card fill
surface-dark#17191c#0a0b0cThe inverted panel
hairline (--border)#e4e4e7rgb(255 255 255 / 0.09)Every border and divider
ink (--foreground)#17191c#f4f4f5Headings and primary text
body-strong#26292e#e6e6e9Emphasised body text
body#3f434a#cbccd1Running text
muted (--muted-foreground)#676b75#a1a4adSecondary text, captions
muted-soft#8a8d96#7d808aPlaceholders, disabled text, icons at rest
primary#17191c#f4f4f5The action colour
accent (--accent-fill)#5d2a1a#f2b497The saturated accent: links, the accent badge
accent-soft#fbe1d1#3a2119The tint an accent label sits on
danger (--destructive)#b42318#f08b80Destructive actions and errors

success, warning and error each come with a -soft tint for the back of a badge or an alert: #2b6a45, #8a5a0a and #b42318 in light, #7ccf98, #e6b45a and #f08b80 in dark.

Paper's own variables, read by the landing hooks and the kit: --header-glass (rgb(255 255 255 / 0.78) light, rgb(17 18 20 / 0.74) dark), --haze-peach (rgb(252 204 192 / 0.9) light, rgb(232 140 110 / 0.24) dark), --haze-lilac (rgb(232 220 238 / 0.85) light, rgb(150 120 196 / 0.2) dark), --haze-cream (rgb(250 240 222 / 0.9) light, rgb(214 176 120 / 0.12) dark), --haze-sky (rgb(226 233 246 / 0.6) light, rgb(110 140 196 / 0.14) dark), --grain (rgb(23 25 28 / 0.08) light, rgb(255 255 255 / 0.06) dark), --tint-blue (#e8f0fc light, #16202d dark), --tint-blush (#faeeeb light, #291c19 dark), --tint-mint (#e8f4ec light, #15231a dark).

How colour is used

  • Ink (#17191c) carries text and the one dark fill, the black primary pill. At night paper white takes that role, with ink text.
  • Mist (#f2f2f3) fills cards, fog (#fafafb) the one tinted band and the sidebar, and white the floating sheets, menus and fields.
  • Peach (bg-accent-soft) is the first quote card, accent badges and the focus glow. Sienna (text-accent) is check marks, progress, the focus ring and text on peach. At night they swap: peach is the accent on a deep sienna fill.
  • Green, amber and red mark status only, as soft fills with the status colour as text or icon.
  • Pastel blue, blush and mint are mats under showcase pictures only, never under text.

Charts

accent-1 to accent-6 (also chart-1 to chart-6) are six series colours ordered so neighbours stay distinguishable. Six printed inks: sienna, navy, sage, ochre, mauve and graphite, lifted for the dark page. They read as ink on paper rather than a rainbow, ordered so neighbours stay distinct. Assign them in order; never let colour be the only way to tell two series apart.

Dark mode

The palette is declared twice in src/app/globals.css: light on :root, dark under @media (prefers-color-scheme: dark) and again on .dark, where the class wins in both directions. @theme inline points every utility at those variables, so bg-canvas is one class that follows the mode. src/lib/design.ts sets the theme a first visit opens in: light here, because Paper is drawn in light first. The theme menu in the header offers light, dark and system and remembers the choice.

Type

Faces

  • Source Serif 4 (font-display): headings and display type (with italics).
  • Archivo (font-body): running text and interface copy (with italics).
  • Source Code Pro (font-mono): code, ids and tabular labels.

Source Serif 4 has sharp wedge serifs, a small x-height and a narrow calligraphic italic, and its optical size axis keeps a 90px headline crisp. Archivo is a tight grotesque whose variable weight gives the half steps (430, 480), and Source Code Pro is the serif's calm sibling for keys and code.

Every face loads through next/font/google in src/app/fonts.ts: downloaded at build time and served from this app. Change a face there and here, together.

Scale

TokenSizeLineTrackingWeightUse
text-display-xl90px1.12-0.025em450The hero headline, desktop
text-display-lg64px1.12-0.015em450The hero headline, tablet
text-display-md44px1.15-0.015em450Section headlines, the hero on phones
text-display-sm32px1.2-0.01em450Section headlines on phones, big numbers
text-title-lg26px1.25-0.009em450Page titles in the app
text-title-md20px1.35-0.005em480Card titles
text-title-sm17px1.40480Small headings, table titles
text-body-lg20px1.5-0.005em400Lead paragraphs
text-body-md16px1.50400Running text
text-body-sm15px1.50400Interface copy, table cells
text-caption14px1.430430Metadata, helper text
text-caption-uppercase12px1.330.06em480Eyebrows above headings
text-button15px10430Buttons
text-nav-link16px1.50400Header and footer links

Rules: one h1 per page. Display sizes are for marketing pages; the app tops out at text-title-lg. Headlines are Source Serif 4 at 450 with tracking that tightens with size: 90px at -0.025em in the hero, 64px and 44px for sections, 26px for page and dialog titles. Text is Archivo at 400, with 430 for captions, badges and buttons and 480 for titles and labels. Sentence case everywhere; italic belongs to the serif kickers, the step numerals and the brand initial.

Space and layout

  • Spacing tokens: xxs 4px, xs 8px, sm 12px, md 16px, lg 24px, xl 40px, xxl 64px, section 80px (the gap between landing sections).
  • Content sits in max-w-content (1280px) with px-md on phones and px-lg from sm up. Reading text stops at max-w-measure (672px).
  • Spacing runs on 4px: 4, 8, 12, 16, 24, 40, 64 and 80px.
  • Sections sit 80px apart and are split by space, never by rules; a heading sits 64px above its content.
  • Cards pad 16, 24 or 40px and sit 24px apart; stat tiles sit 16px apart.
  • Marketing is spacious, one idea per band. The app is comfortable: 32 to 44px controls, 48px table rows, 15px interface text.

Shape and depth

TokenValueWhere
rounded-xs6pxBreadcrumb, Checkbox, Kbd
rounded-sm12pxAccordion, DropdownMenu, Select, the landing page
rounded-md16pxAlert, Input, Skeleton, Tabs, the landing page
rounded-lg20pxDropdownMenu, Popover, Select, Toaster, the landing page
rounded-xl24pxAlertDialog, Card, Dialog, the landing page
rounded-pill9999pxBadge, Button, Input, Progress, Switch, Tabs, Toaster, Tooltip, the landing page
rounded-full9999pxAvatar, Dialog, RadioGroup, Sheet, Switch

Two structural radii: pills for every control and 24px for every card, dialog and stage. Fields take 16px, menus and popovers 20px, list rows and menu items 12px, the checkbox and kbd 6px. Borders are 1px solid and split rows; they never frame a mist card. Shadows belong to floating things only: soft for menus, toasts and the hero chip, lift for product sheets, the featured plan and the CTA, overlay for dialogs and sheets.

Components

Every component lives in src/components/ui/ and is written against the tokens above. Import from there; never restyle a kit component inline to make a one-off.

ComponentIn Paper
ButtonA full pill at every size in Archivo 15px at 430, sentence case, no shadow, with a 1px clear border on every variant so sizes match. Primary is the black pill (paper white with ink text at night); outline is the ink-ringed pill that sits beside it; secondary is a 5% ink wash that reads as mist on white and still shows on a mist card; ghost washes ink at 5% on hover; danger is red; link is ink text that underlines on hover. Small is 32px, medium 40px, large 44px at 17px, icon a 40px circle. Focus is a 2px sienna outline 2px out, a press nudges the pill down 1px, and disabled fades to 45%.
BadgeA 24px pill with 14px text at 430, no border and no shadow. Neutral is body grey on the strong surface, accent is sienna on peach, and status badges take their soft fill with the status colour as text. The uppercase mode (12px, 480, 0.06em) is the only tracked capitals in the system.
Card24px corners and never a shadow. Default is a flat mist panel with no line; soft is fog with a hairline; strong is the strong grey; outline is a hairline on nothing; dark is ink. Padding is 16, 24 or 40px. Titles are the sans at 20px and 480; descriptions are slate.
Input, Textarea, Select40px white fields with 16px corners, a 1px grey line, 15px ink text and grey placeholders. Focus turns the line sienna and adds a 4px peach glow in place of the outline; invalid turns it red, with a soft red glow on focus. Textareas start at 96px, and the file button is a small mist pill. Select keeps the sienna line while open; its list is a white sheet with 20px corners and the soft shadow, with 36px items that wash to mist (5% ink) and an ink check.
Checkbox, RadioGroup, SwitchCheckboxes are 16px with 6px corners and radios are circles; both sit white with a grey line and fill ink when on, with a white check or dot. The switch is a 44 by 24px pill, grey off and ink on, with a 20px knob and a tiny shadow. All three take the 2px sienna focus outline.
TabsDefault tabs are 32px pills, 15px at 430 in slate, inside a 40px mist pill track (a 5% ink wash); the active one is a white chip with a hairline and a tiny shadow. Line tabs drop the track and mark the active tab in ink with a 2px ink bar.
AccordionRows split by hairlines, 17px questions at 480 in ink with no underline, and a soft grey chevron that turns ink on hover and turns over in 200ms. Answers are 16px body text.
Dialog, AlertDialog, SheetA frosted paper scrim (a graphite veil at night), never a black curtain. Panels are white with 24px corners and the overlay shadow, no border, and a 26px serif title. Dialogs pad 24px (32px from small screens) and close with a 36px round ghost button. Alert dialogs pair an outline cancel with a primary or danger action; sheets round only the edge that faces the page.
DropdownMenu, Popover, Select content, TooltipWhite sheets with 20px corners and the soft shadow, no border. Menu items are 36px with 12px corners and wash to mist (5% ink) when highlighted; destructive items turn red. Labels and shortcuts are quiet grey in sentence case. Tooltips are small ink pills (paper white at night) with no arrow and no shadow.
TableNo header band: 14px slate head cells over a hairline, then 48px rows split by hairlines, none after the last. Hover washes ink at 3% and selected rows at 5%. Figures are tabular and right aligned; ids and keys are Source Code Pro. The footer is fog at 480.
Alert16px corners and 16px padding, no border and no shadow, with the icon in its own column. Info is mist with an ink icon; success, warning and danger take their soft fill with the icon in the status colour.
Avatar, Progress, Skeleton, Spinner, Separator, Kbd, Breadcrumb, Pagination, Field, Label, ToasterAvatars are circles with grey fallbacks and ink initials at 480, never peach; when stacked, give each a canvas ring (ring-2 ring-canvas). Progress is a 6px pill with a sienna fill (peach at night). Skeletons pulse at 6% ink with 16px corners; spinners spin in the current colour. Separators are 1px hairlines. Kbd is Source Code Pro 12px on mist with a hairline. Breadcrumbs are grey links split by a small chevron, with the current page in ink at 480; pagination items are 40px circles and the current page wears the ink ring. Labels are 15px at 480 in ink, 8px above their field. Toasts are white sheets with 20px corners and the soft shadow, with status shown only in the icon and a small black pill for the action.

The landing page

The landing page is the same in every design; the design decides how it looks. Its sections carry data-slot hooks (listed at the top of src/components/marketing/section-heading.tsx) that globals.css may style. Paper styles these:

  • hero: extra air above the headline (24px, 56px on wide screens), so the page opens like a cover.
  • hero-backdrop: a 56rem grainy haze, peach to the right, lilac to the left, cream below and a breath of sky top left, faded out at the top and bottom. The grain is SVG noise used as a mask over --grain.
  • site-header: white glass with no rule, so the haze shows through on scroll.
  • site-nav: ink links 36px apart with no fill and a thin underline on hover and on the current page; from 80rem the nav sits in the dead centre of the page.
  • brand-mark: an ink circle holding an italic serif initial, beside the serif wordmark.
  • section-eyebrow: an italic serif kicker at 20px in slate, sentence case, no tracking.
  • hero-eyebrow: a white paper tag on the haze with a hairline, the soft shadow and a sienna arrow.
  • hero-title and section-title: balanced lines. Section titles and the CTA title grow to 64px on wide screens; the FAQ title keeps 44px.
  • hero-subtitle and hero-note: a 22px subtitle in soft ink and a note in body grey, both readable on the peach.
  • showcase-copy: the row titles go back to the serif at 450.
  • product-preview and product-preview-bar: a white sheet with no line and the lift shadow. On wide screens hero-visual adds an ink cursor and a round initials bubble over its New request button.
  • showcase-visual: pastel mats (blue, blush and mint in turn) holding the picture as a white sheet with 20px corners and the lift shadow.
  • feature-grid, feature-card and feature-icon: flat mist cards 24px apart, each opening with a 44px white coin and an ink icon.
  • stat-grid, stat and stat-value: separate mist tiles 16px apart, each figure a 44px serif with lining tabular numbers.
  • testimonial: mist quote cards with 18px quotes; the first is the page's one peach card, every word in sienna.
  • section how-it-works: the one fog band, edge to edge, with no rules. Soft sections lose their rules too.
  • step and step-marker: editorial columns with a hairline on top and a 44px italic serif numeral, no circle and no connector.
  • section logos: the strip title becomes a 15px slate line in sentence case over the serif wordmarks.
  • faq: hairline rows with 20px of air each way.
  • cta-panel: the one dark block, graphite with the hero's haze laid twice so it glows, the same grain, a 64px title and a body grey line.
  • site-footer: plain paper with a hairline on top, sentence-case sans column titles and links that underline on hover.
  • The featured plan (card with data-highlighted): a white sheet with the lift shadow instead of an accent ring, the one plan that floats.

Everything else is type, space and the kit.

Signed-in screens

The dashboard and settings sit on white paper with a fog sidebar, 26px serif page titles, flat mist cards with 24px corners, hairline tables with no header band and one black pill per screen.

Sign-in is one mist card about 24rem wide with the soft shadow, a 26px serif title, white 40px fields with the peach focus glow, a full-width black pill and outline pills for social sign-in.

Do and don't

Do

  • Set every h1 and h2 in the serif at 450, and let the big ones be big: 90px for the hero, 64px for section titles on wide screens.
  • Pair every black primary pill with an ink outline pill on the same row, and keep one black pill per view.
  • Use pills for every button, badge, tab and switch, and 24px corners for every card, stage and dialog.
  • Keep content cards flat mist. Give the lift shadow only to things that float: product pictures, the featured plan, the CTA.
  • Spend peach once per page at card size (the first quote), plus small accent badges and the focus glow.
  • Write eyebrows in plain sentence case; the design turns them into italic serif kickers.
  • Use the half-step weights: 430 for small text, 480 for titles and labels, 500 at most.
  • Set stats and prices in the serif with lining tabular figures, and table figures in the sans with tabular-nums.

Don't

  • Don't bold the serif, italicise body text, or set a paragraph in the serif.
  • Don't add a chromatic colour beyond peach and sienna: no blue buttons, no green highlights outside a status.
  • Don't put a shadow on a content card, a button or an input.
  • Don't square a corner: nothing interactive goes below 12px, except the 6px checkbox and kbd.
  • Don't put the peach card on a grey, tinted or dark band; it sits on white.
  • Don't use sienna for paragraphs. It is for labels on peach, focus and small marks.
  • Don't draw rules between sections or under the header; use space, or the one fog band.
  • Don't use the haze or the grain anywhere but behind the hero and inside the CTA.

Working in this design

Pasting from shadcn/ui. The token layer carries shadcn's variable names, so most snippets render unmodified. Two utility names mean something else here: bg-muted becomes bg-surface-card, and bg-accent / text-accent-foreground (a hover surface upstream) become bg-surface-card / text-ink. Here muted is a text colour and accent is the saturated accent.

Adding a token. Add it to all three palette blocks in globals.css (light, the dark media query, .dark), map it in @theme inline, and document it in the palette table above. Check contrast in both modes.

Adding a component. Check the kit first: most needs are a variant of Button, Card or Badge, or a composition on the page. A new component gets its own file in src/components/ui/, token classes only, a data-slot, and a row in the Components table here. The designer subagent owns this.

Build a repo in Paper

The builder opens with Paper picked. Pick your batteries and the design is applied to every template before the zip is built.