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

45 lines
2.4 KiB
Markdown

# 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.