Full Wave A build to the OVERRIDE-CONTRACT (frozen cms a0f07e2ae): - 49 mandatory builtin overrides in templates/overrides/magazine-bold/, re-skinned to streetwear cover-story chrome (massive condensed uppercase Archivo Black headlines, heavy 2px rules, hard square edges, mono datelines, fluoro accent slabs). Every content field, provider var, custom tag and JS block preserved verbatim from the frozen builtin defaults; legacy button (link/style/label) and card (media/text) field reads already reconciled. - 7 page templates: default, full-width, landing, article, blog-index, contact, auth. - 4 persona blocks (deleted masthead/photo_essay/pull_quote/issue_archive/ colophon — now overrides of navbar/gallery/quote/post-index/footer): cover_story, lookbook, drop_calendar, credits_ticker. - 5 dual-mode presets (newsprint+voltage light / ink-black+fluoro dark), all 19 tokens, dark tuned not inverted. - Bundled OFL woff2: Archivo Black (display), Inter (body), IBM Plex Mono (labels); fonts.json + assets/fonts/LICENSES.md. All font-family via var(--font-heading|body|mono, fallback). - Themed email-safe wrapper (tables, inline styles, streetwear defaults). - Master pages (navbar/footer/slot chrome) + seed demo site (OFFCUT label: home, about, blog + 3 posts, contact with data table + row_inserted → email-admins workflow, login) in fashion-label voice. - MID motion tier: marquee ticker, scroll reveal, duotone hover, scroll progress bar — all prefers-reduced-motion honored with static fallback, no canvas. - Icon packs (lucide, simple-icons) declared in plugin.mod + RECOMMENDED_ICONS. Verified: `make build` exit 0; `check-safety` 32 checks 19 ok 13 skip -> OK. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.4 KiB
Magazine Bold — fonts
This theme bundles a Latin subset of three open-licence (SIL OFL 1.1)
families, so it looks correct the moment it is activated — no admin setup
required. The bundled faces are declared in fonts.json and land in the
typography picker as source=template rows.
| Slot | Bundled family | Weights / styles | Role |
|---|---|---|---|
| Heading | Archivo Black | 400 normal | Massive condensed uppercase cover headlines and the wordmark |
| Body | Inter | 400 / 500 / 700 normal | Body copy, decks and UI text |
| Mono | IBM Plex Mono | 400 / 500 normal | Kickers, datelines, folio numbers, captions and button labels |
The bundled woff2 files and their licence record live in assets/fonts/
(LICENSES.md). Every font-family in the theme is routed through
var(--font-heading, ...), var(--font-body, ...) and var(--font-mono, ...)
with a fallback stack, so the layout is usable before any font is assigned and
the admin font picker stays in full control.
Assigning the bundled faces
- In the BlockNinja admin, open Settings → Theme → Typography.
- In the Bundled tab, assign Archivo Black to the Heading slot.
- Assign Inter to the Body slot.
- Assign IBM Plex Mono to the Mono slot.
Optional swaps (Google Fonts tab)
The identity is condensed-heavy display + neutral sans body + mono details. Any of these drop in via the CSS variables with no template change:
- Anton (
google:Anton) — a taller, more condensed display face for the Heading slot; the loudest cover-headline option and the WO's alternate. - Archivo (
google:Archivo) — for the Body slot if you want the body to echo the display family. - Space Grotesk (
google:Space Grotesk) — an alternative body / deck face. - Space Mono (
google:Space Mono) — a chunkier mono for the Mono slot.
Bundling a commercial display face (out of scope for Wave A)
If the brand locks in a licensed display face in place of Archivo Black, licence
and subset the woff2 set, drop it in assets/fonts/, and add the family +
variants to fonts.json. The CSS does not change — the same var(--font-heading)
consumer picks up whichever face an admin assigns.