Paper

Warm sheet, dark ink, one accent. Everything on it is an inscription, a manuscript or a printed page.

3 variants • document contract

When to use it

Reach for it when the content is a document, an inscription or a chart of something historical. Warm sheet, dark ink.

Quoted from the live theme.css: these charts were dark, and dark was the wrong call. A black sheet with neon letters reads as a copy of the chart that suggested the form, however different the content. Paper is more honest to the material. Warm rather than white, because a cool white sheet reads as an interface and a warm one reads as a document.

Contract: document

A family is a set of token names plus structural rules. A variant is one set of values poured into them. Every variant below satisfies this contract, so swapping between them is a palette change, not a rewrite.

Required

--bg--ink--ink-muted--rule--accent

Optional

--bg-band--surface--ink-bright--border--btn-bg--btn-border

Ink on a sheet, not foreground on a background. Load the theme file before the page stylesheet: theme owns color, page owns layout. This split is live at world-languages.com/shared/theme.css + page.css.

Variants

Same contract, different values. Click a swatch to copy it.

Paper (world-languages)

live, canonicalread live 2026-09-09

source: https://world-languages.com/shared/theme.css

source: https://world-languages.com/alphabet/

Copied
--bg
#f4efe6
Copied
--bg-band
#ebe3d5
Copied
--surface
rgba(253, 251, 247, 0.97)
Copied
--ink-bright
#17150f
Copied
--ink
#35312a
Copied
--ink-muted
#7c756a
Copied
--rule
rgba(53, 49, 42, 0.20)
Copied
--accent
#1c5f9e
Copied
--btn-bg
rgba(253, 251, 247, 0.9)
Copied
--btn-border
rgba(53, 49, 42, 0.18)
Copied
--border
rgba(53, 49, 42, 0.22)

Structure

sheet-widthmin(1520px, 100vw)
sheet-compactmin(780px, calc((100svh - 120px) * 0.8), 100vw)
border-radius4px on controls, 5px on tooltips
control-barposition: fixed; bottom: 14px; centered; backdrop-filter: blur(6px)

theme.css owns color, page.css owns layout, controls.css owns the control bar. Five charts were carrying byte-identical private copies before the split.

paste-ready :root
/* Paper (world-languages) */
:root {
  /* colors */
  --bg: #f4efe6;
  --bg-band: #ebe3d5;
  --surface: rgba(253, 251, 247, 0.97);
  --ink-bright: #17150f;
  --ink: #35312a;
  --ink-muted: #7c756a;
  --rule: rgba(53, 49, 42, 0.20);
  --accent: #1c5f9e;
  --btn-bg: rgba(253, 251, 247, 0.9);
  --btn-border: rgba(53, 49, 42, 0.18);
  --border: rgba(53, 49, 42, 0.22);
  /* structure */
  --sheet-width: min(1520px, 100vw);
  --sheet-compact: min(780px, calc((100svh - 120px) * 0.8), 100vw);
  --border-radius: 4px on controls, 5px on tooltips;
  --control-bar: position: fixed; bottom: 14px; centered; backdrop-filter: blur(6px);
}

Parchment

liveread live 2026-09-09

Warmer and yellower than world-languages, vermilion accent, soft shadow, generous radius.

source: https://diachronica.com/

Copied
--bg
#f6efe0
Copied
--bg-grain
#efe6d2
Copied
--surface
#fffdf7
Copied
--surface-2
#f3ead7
Copied
--ink
#2a2218
Copied
--ink-muted
#6b5d49
Copied
--ink-faint
#71634b
Copied
--accent
#c0341d
Copied
--accent-soft
#e8c9bf
Copied
--border
#e2d6bd
Copied
gold
#b8860b
Copied
atlas
#2f6f6a
Copied
wiktionary
#8a7d63

Structure

--radius16px
safe-area--safe-t: env(safe-area-inset-top, 0px); --safe-b: env(safe-area-inset-bottom, 0px)

Effects

--shadow0 1px 2px rgba(42, 34, 24, .06), 0 8px 24px rgba(42, 34, 24, .08)

--ink-faint #71634b is documented in the source as holding 4.5:1 on both parchment surfaces. Keep that when restyling. The gold, atlas and wiktionary colors are source-attribution markers, not decoration.

paste-ready :root
/* Parchment */
:root {
  /* colors */
  --bg: #f6efe0;
  --bg-grain: #efe6d2;
  --surface: #fffdf7;
  --surface-2: #f3ead7;
  --ink: #2a2218;
  --ink-muted: #6b5d49;
  --ink-faint: #71634b;
  --accent: #c0341d;
  --accent-soft: #e8c9bf;
  --border: #e2d6bd;
  --gold: #b8860b;
  --atlas: #2f6f6a;
  --wiktionary: #8a7d63;
  /* structure */
  --radius: 16px;
  --safe-area: --safe-t: env(safe-area-inset-top, 0px); --safe-b: env(safe-area-inset-bottom, 0px);
  /* effects */
  --shadow: 0 1px 2px rgba(42, 34, 24, .06), 0 8px 24px rgba(42, 34, 24, .08);
}

Heritage

datavis legacy

Memorial. Cream ground, Playfair display, dark red headings.

Copied
--bg
#f3efe6
Copied
--ink
#2d2d2d
Copied
--ink-muted
#5c5c5c
Copied
--accent
#8b0000
Copied
--surface
rgba(255, 253, 250, 0.90)
Copied
--border
#d4c5b0
Copied
axis-line
#5c4d3c
Copied
stem-green
#2e3b1f
Copied
flower-blue
#779ecb

Typography

font-display'Playfair Display', serif
font-body'Lato', sans-serif

Structure

--radius4px

Effects

bg-gradientlinear-gradient(#edeae2, #d4d4d4, #6e7f8f)

Used on

paste-ready :root
/* Heritage */
:root {
  /* colors */
  --bg: #f3efe6;
  --ink: #2d2d2d;
  --ink-muted: #5c5c5c;
  --accent: #8b0000;
  --surface: rgba(255, 253, 250, 0.90);
  --border: #d4c5b0;
  --axis-line: #5c4d3c;
  --stem-green: #2e3b1f;
  --flower-blue: #779ecb;
  /* structure */
  --radius: 4px;
  /* effects */
  --bg-gradient: linear-gradient(#edeae2, #d4d4d4, #6e7f8f);
  /* typography */
  --font-display: 'Playfair Display', serif;
  --font-body: 'Lato', sans-serif;
}

Typography

The script-family posters load Noto Serif plus per-script faces (Noto Sans Phoenician, Noto Sans Old Italic, Uncial Antiqua, UnifrakturMaguntia) as content, not chrome.

font-body
The quick brown fox jumps over the lazy dog 0123456789
font-display-serif
The quick brown fox jumps over the lazy dog 0123456789
font-serif-alt
The quick brown fox jumps over the lazy dog 0123456789

Stacks

font-bodysystem-ui, -apple-system, sans-serif
font-display-serif'Cormorant Garamond', Georgia, serif
font-serif-alt"Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif

Spacing

Base unit 8px. Every gap, pad and margin is a multiple of it.

8px
16px
24px
32px
40px
48px
64px

Do / Don't

Do
  • Load the theme file before the page stylesheet: theme owns color, page owns layout.
  • Keep the ground warm. A cool white sheet reads as an interface.
  • Use --ink-muted for datings, captions and stage names so the hierarchy survives at poster scale.
  • Check contrast when you shift the ground. Diachronica documents --ink-faint as 4.5:1 on both its surfaces.
Don't
  • Do not invert this family to a dark ground. The rationale in theme.css is explicit about why that was the wrong call.
  • Do not use pure #fff for a surface; every live surface here is tinted.
  • Do not treat the attribution colors (gold, atlas, wiktionary) as a decorative palette. They encode source.
  • Do not add a second accent. One is the whole point.

Generated from themes/tokens.json v2.0.0 by build-themes.py. Values were read from the live surfaces on 2026-09-09. Edit the tokens, not this page.

Copied to clipboard