# ZABA & ZINGO — Typography System > Source: the ratified **ZZ Typography System v1** (`discord.zabazingo.eu/typography.html`, > 2026-05-14). Fonts are **self-hosted** — no CDN substitutes. Body minimum **16px**. > Wordmarks single-colour — accent runs through **weight**, never colour. --- ## Two voices, sharp roles **Display carries the brand voice** — headlines, wordmarks, heroes. **Sans carries the body** — UI, text, editorial. There is **no third font**. | | Display · Serif | Sans · Neo-Grotesque | |---|---|---| | Family | **Noto Serif Display ExtraCondensed** | **PP Neue Montreal** | | Cuts | ExtraLight 200 · Regular 400 · Bold 700 | Light 300 · Regular 400 · Semibold 600 · Bold 700 | | Use | headlines, wordmarks, brand elements | UI, body, editorial, captions, buttons, labels | | Tracking | −0.05em (default) | −0.015em (headlines) · 0 (body) · +0.14em (caps labels) | | Leading | 1.05 (display) · 1.02 (extreme tight) | 1.2 (headlines) · 1.5–1.65 (body) | | Case | see wordmark rules | headlines lowercase · UPPERCASE only in labels | | Italic | **none** (Noto has no italic cut) | allowed (PP only) | | Min size | **40px** — below that use Sans | body **16px** absolute floor | Font-family alias `Zaba Logo` = *Noto Serif Display ExtraCondensed Bold* (logo-only weight). --- ## Cap-Accent rule (Display only) Display headlines set the whole line **ExtraLight 200**, and the **first letter of each capitalised word** jumps to **Regular 400**. Tracking `−0.05em`, leading `1.05`. ```html

The Signal Noise Ratio

``` ```css .zz-display{ font-family:var(--zz-display); font-weight:200; letter-spacing:-0.05em; line-height:1.05; } .zz-display span{ font-weight:400; } /* the cap-accent */ ``` PP Neue Montreal headlines do the **opposite**: **lowercase**, no cap-accent, no italic. --- ## Display type-scale (H1 → H4, stops at 40px) | Step | Size | lh | ls | |------|------|----|----| | H1 | 96px | 1.05 | −0.05em | | H2 | 72px | 1.05 | −0.05em | | H3 | 54px | 1.05 | −0.05em | | H4 | 40px | 1.05 | −0.05em | Below H4 the ExtraCondensed cut becomes illegible — **PP Neue Montreal takes over**. ## Sans type-scale (H1 → Caption) | Step | Cut | Size / setting | Example | |------|-----|----------------|---------| | H1 Sans | Light 300 | 72px · lh 1.2 · lowercase | reality is built by those who refuse it. | | H2 Sans | Light 300 | 54px · lh 1.2 · lowercase | | | H3 Sans | Light 300 | 40px · lh 1.2 · lowercase | | | H4 Sans | Light 300 | 30px · lh 1.2 · lowercase | promo headline / card title | | H5 Sans | Regular 400 | 22px · lh 1.25 · lowercase | | | H6 Sans | Regular 400 | 18px · lh 1.3 · lowercase | ui sub-header | | Body L | Light 300 | 16px · lh 1.6 | default body — web minimum | | Body S | Light 300 | 13px · lh 1.5 | captions, metadata, footnotes — sparingly | | Caption | Regular 400 CAPS | 11px · lh 1.4 · ls +0.14em | EYEBROW · LABEL · CATEGORY · TAG | --- ## The Slogan — one rule, no exception `Reality isn't given. It's chosen.` — **not** a headline, does **not** follow the cap-accent rule. Its own setting: - Mantel (Reality, isn't, It's): **ExtraLight 200** - Accent **`given.`** and **`chosen.`**: **Bold 700** - Sentence case (R, I capital **without** weight-accent) - Tracking `−0.05em`, leading `1.02`, apostrophe **typographic ’ (U+2019)** - Always stands **alone** — 2 or 3 lines, never 1, never 4+. ```html

Reality isn’t given.
It’s chosen.

``` ```css .zz-slogan{ font-family:var(--zz-sans); text-transform:none; font-weight:200; font-size:clamp(2rem,6vw,4.5rem); line-height:1.02; letter-spacing:-0.05em; color:var(--zz-ink); } .zz-slogan b{ font-weight:700; } ``` **Forbidden:** cap-accent on R+I · Title Case · All Caps · fully bold · italic · two-colour · random weight mix · wrong apostrophes (´ acute or straight ' are wrong). --- ## Platform sizing | Context | Body | H1 Display | |---------|------|-----------| | Mobile ≤640px | 16–17px | 48–72px | | Tablet 641–1024px | 17–18px | 72–96px | | Desktop ≥1024px | 17–19px | 96–160px | | Instagram Story | 40–48px | 120–200px | | OOH / Billboard | — | 2000–3000pt, max 3–5 words | | Email | 16px min | CTA buttons min 44×44px | Social media: text **3–5× larger** than the web equivalent. --- ## @font-face (self-hosted, see `fonts/`) ```css @font-face{font-family:"Zaba Logo";src:url("/fonts/NotoSerifDisplay_ExtraCondensed-Bold.ttf") format("truetype");font-weight:700;font-display:swap} @font-face{font-family:"Noto Serif Display ExtraCondensed";src:url("/fonts/NotoSerifDisplay_ExtraCondensed-ExtraLight.ttf") format("truetype");font-weight:200;font-display:swap} @font-face{font-family:"Noto Serif Display ExtraCondensed";src:url("/fonts/NotoSerifDisplay_ExtraCondensed-Regular.ttf") format("truetype");font-weight:400;font-display:swap} @font-face{font-family:"Noto Serif Display ExtraCondensed";src:url("/fonts/NotoSerifDisplay_ExtraCondensed-Bold.ttf") format("truetype");font-weight:700;font-display:swap} @font-face{font-family:"PP Neue Montreal";src:url("/fonts/PPNeueMontreal-Light.otf") format("opentype");font-weight:300;font-display:swap} @font-face{font-family:"PP Neue Montreal";src:url("/fonts/PPNeueMontreal-Regular.otf") format("opentype");font-weight:400;font-display:swap} @font-face{font-family:"PP Neue Montreal";src:url("/fonts/PPNeueMontreal-Semibold.otf") format("opentype");font-weight:600;font-display:swap} @font-face{font-family:"PP Neue Montreal";src:url("/fonts/PPNeueMontreal-Bold.otf") format("opentype");font-weight:700;font-display:swap} ```