Founders Grotesk X Condensed
A condensed grotesque from Klim Type Foundry. We license Bold (700) only and use it as a brand asset — never a UI face. The condensed proportions read as architectural at large sizes; the same proportions read as cramped at body sizes, which is why we restrict it to display.
ABCDEFGHIJKLM
NOPQRSTUVWXYZ
0123456789 .,!?
Klim Type Foundry · Licensed for Flatpay use · Bold weight only · 100 + 200 character set
Always
ALL CAPS. Bold (700). Tight leading (leading-[0.92]). One H1 per page, never used for H2 or smaller.
Inter Tight
A variable-weight neo-grotesque (100–900) from Rasmus Andersson, optimized for screens. Slightly tighter than Inter, with metrics that hold up at small sizes. The default for everything on screen that isn't a brand H1: H2/H3, body, page H1s in product UI, navigation, labels — and every numeric surface, with tabular-nums slashed-zero applied where money or IDs sit in a column.
The quick brown fox
jumps over the lazy dog.
Variable font · OFL · Italic available · Tabular figures, fractions, ligatures available via OpenType features
Martian Mono
A variable-axis monospace (weight + width) from Evil Martians. Reserved for print: customer receipts that print at the till, end-of-day reports, settlement statements, anything that leaves the screen on paper. The tabular grid and disambiguated glyphs (l/I/1, O/0) earn their place when a merchant is reconciling a stack of slips by hand.
Receipt · 80 mm thermal
Café Lucky Garden
Bredgade 12, 1260 København K
CID 39442221
Terminal T-04 · Mon 03 May 2026 14:22
End-of-day report
Variable font · OFL · Slashed zero · l/I/1 disambiguated · tabular by default
Print only — never in UI
Martian Mono lives on paper, not on screen. Don't use it for code blocks, tokens, paths, repo references, transaction IDs, or amounts in product UI — set those in Inter Tight with tabular-nums slashed-zero applied. The single exception: when the UI is previewing a printed document — a receipt preview before a reprint, a PDF report viewer — the preview should match the printed output, including the typeface.
OpenType features
OpenType features are font-level switches that change how characters render without changing the underlying text. The product depends on a few specifically: tabular figures and slashed zero for any column of money on screen (Inter Tight), tabular figures and fractions for printed receipts (Martian Mono), and standard ligatures for prose (Inter Tight).
Tabular figures
The most important feature for a payments product. Forces every digit to occupy the same width so columns of numbers stack cleanly and update without jitter.
Tabular (use this)
1123481,890
Proportional
1123481,890
css
/* Apply to every on-screen metric in Inter Tight. Martian Mono ships these on
by default, but Martian Mono only renders on print — see above. */
.tabular {
font-variant-numeric: tabular-nums slashed-zero;
}
/* Or in Tailwind */
<p className="font-sans tabular-nums slashed-zero">2.055,00 kr</p>Slashed zero
Disambiguates 0 from O in transaction IDs, account numbers, and any alphanumeric code. Always paired with tabular figures.
Slashed
CID O0440 2200
Default
CID O0440 2200
Fractions
For split bills, partial payments, and shared receipts. Inter Tight ships ready-made fractions for common values; arbitrary fractions can be set with the frac feature.
Split 1/3 with 2/4 covered · 1/2 deposit · 3/4 paid
Renders the fractions as proper composed glyphs rather than oversized digits with a slash.
Ligatures
Standard ligatures (liga) ship on by default. We do not use discretionary ligatures (dlig) — they look ornamental and break tabular alignment.
Affiliate flight office — fluid type
ff, fi, fl, ffi, and ffl render as composed glyphs.
How fonts load
All three families ship as local files via next/font/local. Founders Grotesk and Inter Tight preload — they paint the moment the page renders. Martian Mono stays unpreloaded because the only screen surfaces that need it are print-document previews, which load on demand.
apps/portal/app/fonts.ts
import localFont from "next/font/local";
export const founders = localFont({
src: [{ path: "./fonts/FoundersGroteskX-Condensed-Bold.otf", weight: "700", style: "normal" }],
variable: "--font-display",
display: "swap",
preload: true,
});
export const interTight = localFont({
src: [
{ path: "./fonts/InterTight-VariableFont_wght.ttf", weight: "100 900", style: "normal" },
{ path: "./fonts/InterTight-Italic-VariableFont_wght.ttf", weight: "100 900", style: "italic" },
],
variable: "--font-sans",
display: "swap",
preload: true,
});
export const martianMono = localFont({
src: [{ path: "./fonts/MartianMono-VariableFont_wdth,wght.ttf", weight: "100 900", style: "normal" }],
variable: "--font-mono",
display: "swap",
preload: false,
});