Skip to content

Newsprint

A quality broadsheet on cream paper. Serif everywhere, black rules, square corners, one yellow button.

  • Light by default
  • 35 colours · 14 type steps
  • Inspired by monocle.com
Use Newsprint
localhost:3000

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

What it is

Newsprint sets a product like a quality broadsheet. A warm cream page, black ink, and one serif, Newsreader, for every word from 72px headlines to 13px capital labels. Structure comes from black column rules and grey hairlines, never shadows, and every corner is square. The one colour is a signal yellow, kept for the primary action. Dark mode is the night edition: charcoal paper, cream ink, the same yellow.

Maintained by @agentic-studio in the open registry.

Best for

Products with a voice: publishing and newsletter tools, research and analysis, media, and B2B software that sells on trust and taste. Also any team that writes a lot and wants the interface to read like a well edited page.

Trade-offs

  • Serif everywhere, including buttons, forms and tables. Dense tables scan a little slower than they would in a grotesque, and the mono face is kept for code only.
  • The yellow is rationed. It works because it marks one action per view. A screen with three yellow buttons loses the signal, so every other action is black, outlined or ghost.
  • No shadows and square corners mean depth comes only from rules and tone. Menus and dialogs carry a 1px black border instead of a soft shadow, which reads heavier on busy screens.

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

    #000000

  • accent-1

    #141414

  • accent-2

    #ffc500

  • accent-3

    #1f8ac0

  • accent-4

    #d4553a

  • accent-5

    #9a9a9a

  • accent-6

    #2d6a47

  • accent-hover

    #333333

  • accent-soft

    #e9e8e0

  • primary

    #ffc500

Surface

  • canvas

    #fdfcf3

  • hairline

    #d9d9d9

  • surface-card

    #f1f0ea

  • surface-dark

    #2a2929

  • surface-dark-elevated

    #383736

  • surface-soft

    #fdfbe4

  • surface-solid

    #ffffff

  • surface-strong

    #e7e6df

Text

  • body

    #262626

  • body-strong

    #141414

  • ink

    #000000

  • muted

    #666666

  • muted-soft

    #8a8a8a

  • on-accent

    #fdfcf3

  • on-dark

    #fdfcf3

  • on-primary

    #000000

Semantic

  • error

    #b3261e

  • success

    #1f6b3a

  • warning

    #8a5a00

Other

  • danger

    #b3261e

  • danger-soft

    #f8e6e1

  • error-soft

    #f8e6e1

  • primary-hover

    #f2b600

  • success-soft

    #e7f0e3

  • warning-soft

    #f5ecd6

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
    4.5rem · 72px · 400 · lh 1.02 · ls -0.02em
  • Ship faster

    Token
    display-lg
    Values
    3.5rem · 56px · 400 · lh 1.04 · ls -0.02em
  • Ship faster

    Token
    display-md
    Values
    2.5rem · 40px · 400 · lh 1.08 · ls -0.02em
  • Ship faster

    Token
    display-sm
    Values
    2rem · 32px · 400 · lh 1.12 · ls -0.02em
  • Ship faster

    Token
    title-lg
    Values
    1.5rem · 24px · 400 · lh 1.2 · ls -0.02em
  • Ship faster

    Token
    title-md
    Values
    1.25rem · 20px · 400 · lh 1.25 · ls -0.02em
  • Ship faster

    Token
    body-lg
    Values
    1.125rem · 18px · 400 · lh 1.45 · ls 0
  • Ship faster

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

    Token
    title-sm
    Values
    1rem · 16px · 600 · lh 1.3 · ls 0
  • Ship faster

    Token
    body-sm
    Values
    0.875rem · 14px · 400 · lh 1.45 · ls 0.005em
  • Ship faster

    Token
    nav-link
    Values
    0.875rem · 14px · 400 · lh 1.2 · ls 0.06em
  • Ship faster

    Token
    button
    Values
    0.8125rem · 13px · 600 · lh 1 · ls 0.07em
  • Ship faster

    Token
    caption
    Values
    0.8125rem · 13px · 400 · lh 1.35 · ls 0.01em
  • SHIP FASTER

    Token
    caption-uppercase
    Values
    0.8125rem · 13px · 400 · lh 1.2 · ls 0.075em

Typefaces

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

  • DisplayNewsreader, ui-serif, Georgia, "Times New Roman", serif
  • BodyNewsreader, ui-serif, Georgia, "Times New Roman", serif
  • MonoIBM Plex Mono, ui-monospace, SFMono-Regular, Menlo, 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
  • xl2rem · 32px
  • xxl3rem · 48px
  • 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.

  • lg0 · 0px
  • md0 · 0px
  • sm0 · 0px
  • xs0 · 0px
  • xl0.5rem · 8px
  • full9999px
  • pill9999px

Elevation

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

  • inset0 0 #0000
  • lift0 0 #0000
  • overlay0 0 #0000
  • ring0 0 0 1px #000000
  • soft0 0 #0000
  • xs0 0 #0000

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.

Newsprint is a quality broadsheet on cream paper, where every column earns its space and the only colour is the action that matters. One serif, Newsreader, sets every word. Structure comes from black rules and grey hairlines, every corner is square, and nothing casts a shadow. Dark mode is the night edition: charcoal paper, cream ink, the same yellow.

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: black ink on cream paper (#fdfcf3). Dark is the night edition on charcoal (#1c1b1a) with cream ink, not an inversion.
TypeNewsreader for every word: headlines at 400 with -0.02em, labels, buttons and table heads in tracked capitals. IBM Plex Mono for code, keys and ids only.
ColourBlack ink and warm greys, one signal yellow (#ffc500) for the primary action, green, amber and red for status only.
ShapeSquare: 0 on controls, cards, menus and dialogs. 8px only on picture frames, plates, the CTA panel and the dark card. Circles for avatars, radios and status dots.
DepthFlat. No shadows: rules and tone do the work. Floating layers carry a 1px black border; a 1px ink ring thickens a focused field to 2px.
SignatureA masthead with a black foot rule and piped capitals nav, a folio line over a 72px regular headline, black column rules, and a charcoal broadcast card with a yellow foot rule.

Principles

  1. One serif for every word. Newsreader sets headlines, body, buttons, labels and tables.
  2. One yellow button per view, on the action that matters.
  3. Draw structure with rules: 1px black for structure, grey hairlines inside, 3px black for emphasis.
  4. Keep corners square. 8px belongs to pictures and the broadcast card.
  5. Depth is tone and rules, never a shadow, a glow or a gradient.

Colour

Palette

TokenLightDarkRole
canvas (--background)#fdfcf3#1c1b1aThe page floor
surface-soft#fdfbe4#2a2929Section bands, sidebars, table heads
surface-card (--muted)#f1f0ea#353331Tinted fills: inactive tabs, hover rows, code
surface-strong#e7e6df#423f3cPressed fills, progress tracks
surface-solid (--popover)#ffffff#282726Menus, selects, toasts: always opaque
card#ffffff#232221The card fill
surface-dark#2a2929#0f0f0eThe inverted panel
hairline (--border)#d9d9d9#403e3bEvery border and divider
ink (--foreground)#000000#f6f3e8Headings and primary text
body-strong#141414#e9e5d9Emphasised body text
body#262626#d5d0c4Running text
muted (--muted-foreground)#666666#b0ab9fSecondary text, captions
muted-soft#8a8a8a#807b73Placeholders, disabled text, icons at rest
primary#ffc500#ffc500The action colour
accent (--accent-fill)#000000#f6f3e8The saturated accent: links, the accent badge
accent-soft#e9e8e0#3b3936The tint an accent label sits on
danger (--destructive)#b3261e#f0846eDestructive actions and errors

success, warning and error each come with a -soft tint for the back of a badge or an alert: #1f6b3a, #8a5a00 and #b3261e in light, #86c99a, #e2b05a and #f0846e in dark.

Newsprint's own variables, read by the landing hooks and the kit: --rule (#000000 light, #cfc9bb dark), --signal (#ffc500 light, #ffc500 dark), --on-signal (#000000 light, #000000 dark), --halftone (rgb(0 0 0 / 0.1) light, rgb(246 243 232 / 0.08) dark).

How colour is used

  • Signal yellow (bg-primary, #ffc500) fills the primary button and the app tile. It is never text, an icon, a link, a badge or a progress bar.
  • Black ink draws the structure and fills the reversed secondary button, the accent badge, checked controls and the current page.
  • Surfaces step by tone: cream page, white bg-card for working surfaces, margin cream bg-surface-soft for featured blocks, grey bg-surface-card and bg-surface-strong below.
  • Green, amber and red mark status only, on their -soft tints with a border at 30% and a 3px left rule.
  • Selection is reversed: an ink ground with paper text.

Charts

accent-1 to accent-6 (also chart-1 to chart-6) are six series colours ordered so neighbours stay distinguishable. Six series: ink, yellow, blue, coral, grey and green (cream, yellow, sky, coral, grey and green at night). They live in charts, avatars and status dots, never in the interface chrome. 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 Newsprint is drawn in light first. The theme menu in the header offers light, dark and system and remembers the choice.

Type

Faces

  • Newsreader (font-display, font-body): headings and display type; running text and interface copy (with italics).
  • IBM Plex Mono (font-mono): code, ids and tabular labels (weights 400, 500).

Newsreader is a screen-first news serif with a large x-height and an optical size axis, so one family sets crisp 72px headlines and sturdy 13px capital labels. IBM Plex Mono has small slab serifs that sit well beside it, and is kept for code, keys and ids.

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-xl72px1.02-0.02em400The hero headline, desktop
text-display-lg56px1.04-0.02em400The hero headline, tablet
text-display-md40px1.08-0.02em400Section headlines, the hero on phones
text-display-sm32px1.12-0.02em400Section headlines on phones, big numbers
text-title-lg24px1.2-0.02em400Page titles in the app
text-title-md20px1.25-0.02em400Card titles
text-title-sm16px1.30600Small headings, table titles
text-body-lg18px1.450400Lead paragraphs
text-body-md16px1.50400Running text
text-body-sm14px1.450.005em400Interface copy, table cells
text-caption13px1.350.01em400Metadata, helper text
text-caption-uppercase13px1.20.075em400Eyebrows above headings
text-button13px10.07em600Buttons
text-nav-link14px1.20.06em400Header and footer links

Rules: one h1 per page. Display sizes are for marketing pages; the app tops out at text-title-lg. Headlines are Newsreader 400 from 20 to 72px with -0.02em tracking, never bold. Body runs 14 to 18px at 400. Buttons, labels, eyebrows, nav, tabs and table heads are 12 to 14px capitals with 0.06em to 0.075em tracking, and numbers use tabular figures.

Space and layout

  • Spacing tokens: xxs 4px, xs 8px, sm 12px, md 16px, lg 24px, xl 32px, xxl 48px, 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 steps are 4, 8, 12, 16, 24, 32 and 48px, with 80px between sections.
  • Density is compact: 8px element gaps, 16px card padding in the app, rules instead of extra air.
  • Headlines, section heads and body copy are left-aligned. Only the logo strip and the closing card are centred.
  • Content stays in the 80rem column; the hero deck stops at 40rem.

Shape and depth

TokenValueWhere
rounded-xs0Not used by the kit
rounded-sm0Tabs, the landing page
rounded-md0The landing page
rounded-lg0The landing page
rounded-xl8pxCard, the landing page
rounded-pill9999pxThe landing page
rounded-full9999pxAvatar, RadioGroup

Radius is 0 on every control, card, menu, dialog and tab. 8px appears only on the product frame, the showcase plates, the CTA panel and the dark card; circles are for avatars, radios and status dots. Lines are always solid: grey hairlines for edges and rows, 1px black for structure, 3px black for emphasis. No shadows: floating layers get a 1px black border and a focused field a 1px ink ring.

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 Newsprint
ButtonSquare, Newsreader 13px at 600 in capitals with 0.07em tracking. Primary is signal yellow with black text, a deeper yellow on hover (brighter at night) and a 1px ink ring when pressed; secondary is reversed ink with paper text; outline is a 1px ink line that inverts to an ink fill on hover; ghost is body text with a faint ink wash; danger is red with a contrasting label; link is sentence case ink at 400 with an underline and no side padding. Sizes are 32, 40 and 48px tall. Focus is a 2px ink outline at a 2px offset.
BadgeSquare, a 1px border, 12px capitals at 500 with 0.06em tracking. Neutral is transparent with an ink border; accent is reversed ink with paper text; success, warning and danger sit on their soft tints with a status border at 30%. Never yellow.
CardSquare with no shadow. Default is white with a hairline; soft is margin cream with a hairline; strong is grey with no border; outline is a 1px ink box on transparent; dark is the charcoal broadcast card with cream text and 8px corners. Titles are 20px regular serif.
Input, Textarea, Select40px white fields, square, with a 1px grey line that turns ink on hover, 14px serif text and an italic grey placeholder. Focus is an ink border plus a 1px ink ring, so the frame thickens to 2px. Select content is white with a 1px ink border, a grey highlight and an ink check.
Checkbox, RadioGroup, SwitchCheckboxes are 16px squares with a 1px ink border that fill ink with a paper check, or show an ink bar when indeterminate. The radio is the one round control, with an 8px ink dot. The switch is square too: a 36 by 20px ink-bordered track whose square thumb slides right as the track turns ink.
TabsNo track and no pill, in both variants. Triggers are 13px muted capitals at 500 on a 1px ink rule; the active tab turns ink with a 3px ink underline laid over the rule.
AccordionRows split by hairlines under a 1px ink top rule. Triggers are 16px serif at 600 with an ink chevron that flips when open and an underline on hover. Answers are 16px body text.
Dialog, AlertDialog, SheetA charcoal overlay at 60% in both themes. Panels are opaque, square and shadowless with a 1px ink border and 24px regular serif titles; footers set outline before primary, and a destructive confirm uses danger. The close button is a 32px ink cross. Sheets are cream with an ink rule on the inner edge.
DropdownMenu, Popover, Select content, TooltipWhite by day and dark grey at night, with a 1px ink border, square, no shadow. Items are 32px, 14px serif, highlighted in grey; labels are 11px grey capitals and shortcuts are IBM Plex Mono. Tooltips are reversed: charcoal with 13px cream serif.
Table14px serif rows split by hairlines, with tabular figures. Heads are 12px muted capitals over a 1px ink rule. Hover is grey, a selected row takes the accent tint, the footer is margin cream under an ink rule, and the caption is italic. Right-align number columns.
AlertSquare, a 1px border plus a 3px left rule, 14px text with a 600 title. Info is margin cream with an ink left rule; success, warning and danger sit on soft tints with a status border at 30% and the full status colour on the left rule.
Avatar, Progress, Skeleton, Spinner, Separator, Kbd, Breadcrumb, Pagination, Field, Label, ToasterAvatars are circles with ink serif initials on grey. Progress is a 4px square ink bar, never yellow. Skeletons pulse in grey and spinners are spinning arcs in the current colour. Separators are 1px hairlines. Kbd is IBM Plex Mono 12px on white with a grey border. Breadcrumbs are 12px capitals split by grey chevrons; the current page in pagination is reversed ink. Labels are 12px capitals at 500, descriptions 13px muted, errors red. Toasts are white with a 1px ink border and a 3px left rule in the status colour.

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. Newsprint styles these:

  • site-header: an opaque cream masthead with a 1px black foot rule and no blur.
  • brand and brand-mark: a 700 serif capitals wordmark beside a square ink nameplate with a paper initial.
  • site-nav: ink serif capitals split by black pipes, with a thin underline on hover and on the current page.
  • hero-backdrop: bare paper. No wash, no grid, no dots.
  • hero-eyebrow: a folio line in 13px ink capitals that runs the full column between two black rules.
  • hero-title, hero-actions: the lead story, left-aligned: a 72px regular headline with balanced lines, then the buttons.
  • hero-subtitle: a near-black deck that stops at 40rem.
  • hero-note: a grey capitals dateline.
  • product-preview and hero-visual: a 1px black frame with 8px corners and no shadow; product-preview-bar is margin cream over a black rule with square window dots.
  • section: no bands and no borders; a 1px black rule across the content column sits between two sections (not above the logo strip).
  • section-heading and section-eyebrow: heads sit flush left; eyebrows are ink capitals.
  • logo-cloud and logo: a centred row of 24px serif names between two grey rules, split by hairline pipes.
  • feature-grid, feature-card and feature-icon: an editorial grid with a black rule on top, grey rules between cells only, no card fills and boxed ink pictograms.
  • showcase-visual: a margin cream plate with a faint halftone dot screen, framed in black at 8px.
  • step and step-marker: each step opens on a black rule with a 44px regular serif numeral. No circles, no connector line.
  • stat-grid, stat and stat-value: a 3px black rule on top and a 1px rule below, 56px left-aligned numerals over grey capitals labels.
  • testimonial: pull quotes in 22px italic serif under a black rule, no card, with a 32px gutter between columns.
  • faq: an ink top rule and questions set as 20px regular headlines that underline on hover with an ink chevron.
  • cta-panel: the charcoal broadcast card in both themes, 8px corners, no wash, and a 4px signal yellow rule along its foot.
  • site-footer: the colophon, a full-width thick-thin black rule (3px, a 3px gap, 1px) on cream, signed with a larger wordmark.

Everything else is type, space and the kit.

Signed-in screens

The dashboard is the back office of the same paper: a margin cream sidebar split by a hairline, the yellow app tile, the active item on grey, 24px regular page titles, white hairline cards and tables with capitals heads over a black rule.

Sign-in is one white square card on bare cream: a 24px regular title, capitals labels, white inputs that turn black on focus, a full-width yellow button and outline provider buttons.

Do and don't

Do

  • Set every word in Newsreader: headlines at 400 with -0.02em, labels, buttons and table heads in capitals with 0.06em to 0.075em tracking.
  • Keep one yellow button per view, on the action that matters: sign up, save, send, pay.
  • Draw structure with rules: 1px black for the header, section dividers, grid tops and table heads; grey hairlines inside grids and lists.
  • Left-align headlines, section heads and body text. Centre only the logo strip and the closing broadcast card.
  • Keep corners square. Use 8px only on picture frames, plates, the CTA panel and the dark card.
  • Put menus, popovers, dialogs, sheets and toasts on an opaque surface with a 1px black border and no shadow.
  • Use margin cream (bg-surface-soft) for featured blocks and sidebars, white bg-card for working surfaces, and the charcoal dark card for the one block that must stand apart.
  • Check both editions: the day paper (cream) and the night edition (charcoal), including the charcoal CTA card on each.

Don't

  • Don't add a shadow, a glow or a gradient. Depth is tone and rules.
  • Don't use yellow for text, icons, links, eyebrows, badges, progress bars or highlights. It is 1.5:1 on cream, and every extra use weakens the one signal.
  • Don't set body copy, labels or buttons in a sans or in the mono. IBM Plex Mono is for code, keys and ids.
  • Don't bold headlines. 600 is for small titles and buttons, 700 only for the wordmark.
  • Don't round buttons, inputs, cards, badges, tabs or dialogs, and don't turn buttons into pills.
  • Don't use dashed or dotted lines. The halftone plate is the only dot pattern.
  • Don't set two yellow buttons side by side. Pair yellow with a black secondary or an outline.
  • Don't add a second accent hue. The chart colours live in charts, avatars and status dots only.

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 Newsprint

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