themes-magazine-bold/RECOMMENDED_FONTS.md
Alex Dunmow 98293cf8ab feat(magazine-bold): Wave A theme lane (WO-TF-021) — streetwear / fashion drops
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>
2026-07-05 12:38:05 +08:00

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

  1. In the BlockNinja admin, open Settings → Theme → Typography.
  2. In the Bundled tab, assign Archivo Black to the Heading slot.
  3. Assign Inter to the Body slot.
  4. 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.