wonk.blog ← back to the actual site

style guide — because you asked

ok fine,
it is
pretty
good.

so you liked the design of wonk.blog and you want to know how it was made. flattering. genuinely. here you go.

every color, every font, every decision is documented below with a completely real but also kind of unhinged backstory. because good design has a reason, even when the reason is "it just felt right and i needed to justify it after the fact."

note: no a.i. was consulted on the aesthetic opinions expressed herein.
any resemblance to actual graphic design school curriculum is coincidental.
please don't start a substack about this.

the colors

#1c1a17

background

--color-bg / canvas

not #000000. not even #080808 anymore. this is the warmest near-black you can get away with — the color of a cinema at 2 a.m. with the house lights barely on. screens are cold. this one isn't. it is doing a lot of work quietly.

#f0ece3

text

--color-text / primary foreground

old vellum. the color of the page in a 16th-century venetian printing house. people spreading ideas that got them in trouble. we are continuing that tradition. white text on dark backgrounds gives people headaches. this doesn't.

#c49a3c

accent

--color-accent / emphasis / "look here"

amber. old gold. the color of lamplight on a manuscript page. it says "here is the important thing" without shouting it. it is the color of the argument that has been tested and survived. not flashy. patient.

#8ab5c8

emphasis

--color-emphasis / secondary / cool contrast

cyan-blue slate. the color of the sky over the north sea at noon, or ink on old blueprint paper. where amber is warm and patient, this is cool and precise — the color of the argument that has been checked against the data. keeps the palette honest.

#2e2b25

border

--color-border / structure

a good suit has contrast stitching you only notice on close inspection. that's this. it divides space and suggests hierarchy without demanding attention. the unsung hero of the whole palette.

the fonts

cormorant garamond

display serif / headings

a revival of claude garamond's 16th-century french typefaces, redrawn by christian thalmann for screens. it has the narrow elegance of old-style serifs but with optical weights designed for modern display sizes. at 300 weight it is almost calligraphic.

the font that says "i have thought carefully about this for a long time and i am ready to explain it." which is exactly the register we want.

used for: wordmark · headings · topic cards · pull quotes
weights: 300 light · 400 regular · 600 semibold · italics of each

fixing
broken
systems.
the light italic is for when you want to be emphatic but also a little wistful about it

lora

contemporary serif / body text

designed by olga karpushina, lora was built specifically for reading on screens — not scanned from metal type, but drawn from scratch with pixel grids in mind. it has calligraphic roots but optimized for a medium that didn't exist when serifs were invented.

the long arc of typographic history bending toward legibility. also the italic is extremely beautiful.

used for: body copy · manifesto text · blockquotes
weights: 400 regular · 400 italic · 600 semibold

most political disagreement is a category error — conflating empirical questions about mechanism efficiency with normative questions about redistribution. separate those two things and most of the fighting disappears.

"voter satisfaction efficiency doesn't care about your feelings about i.r.v. it's a number."

dm sans

geometric sans-serif / labels & ui

designed by colophon foundry for google fonts. clean, slightly humanist geometry — readable at small sizes where a serif would collapse. it plays the supporting role: nav links, section labels, stat annotations, tags.

the font that says "here is the metadata about the thing." not the thing itself.

used for: nav · eyebrows · labels · tags · stat labels
weights: 300 light · 400 regular · 500 medium

section label treatment

— featured argument


stat label treatment

64% · fargo, n.d. — approval voting (c.e.s.)


nav link treatment

topics · about · electionbyjury.org

jetbrains mono

monospace / code & data

literally made by the company that makes i.d.e.s. designed after jetbrains analyzed how developers actually read code — ligatures, increased x-height, reduced eye strain at 2 a.m. debugging something stupid.

on this site: the voice of the data. the font that says "i measured this and here is the number." inline code, footnotes, hex values.

used for: inline code · hex values · doc metadata
weights: 400 regular · 700 bold

--color-accent: #c49a3c;

--font-display: 'Cormorant Garamond';


voter satisfaction efficiency · n = 10,000 simulations

the principles

01

everything lowercase

capitalization is a power move. it implies some words matter more based on position rather than content. we disagree with this ontologically. initialisms get periods because i.r.v. looks more human than IRV and we are, allegedly, humans.

02

grid as argument

the hard-edged grid isn't just aesthetic — it's the visual equivalent of logical structure. borders don't blur. columns don't drift. everything is where it says it is. this is what policy arguments should look like too, but that's a longer essay.

03

warmth over flash

the warm near-black, the amber accent, the vellum text — these prevent the page from feeling like a u.i. kit. screens are cold. ideas are warm. the design's job is not to get in the way of the argument, and cold high-contrast aesthetics absolutely do.

document components

wrap content in .container for max-width centred layout. the four box types handle different rhetorical weights.

boxes

.box

generic inset panel. for f.a.q. answers, supplementary content, anything that needs to breathe separately from the main prose without screaming at you.
the important thing you'd bold in a textbook. accent-coloured left border, faint accent-wash background. use for conclusions, key assertions, the thing the reader should remember if they skim.

perfect investment incentives

.box-accent — for a cluster of related points. the ▪ marker is a css pseudo-element. pairs well with an h4 inside.

.box-labeled

floating label rendered from the data-label attribute via css content: attr(data-label). no extra markup needed.

steps

first thing

.steps + .step. the → is a pure css pseudo-element. use for sequential processes where order matters.

second thing

nest a ul inside for sub-items.

third thing
  • sub-item one
  • sub-item two

tables

component class rhetorical weight
generic panel.boxlow — supplementary
callout.box-highlighthigh — conclusion / key claim
feature entry.box-accentmedium — one point in a set
worked example.box-labeledmedium — named instance
process.steps / .stepsequential — ordered argument

utilities

u-mono — jetbrains mono at 0.85em
u-accent — accent color text
u-emphasis — emphasis color, italic
u-muted — 60% opacity
u-small — 0.85em
u-large — 1.35em
u-italic — italic

inline spans (for headings & titles)

use .text-accent and .text-emphasis for colored words in display headings. these are purpose-named — if the brand palette changes, only the css :root values change. no html edits needed.