Declare @font-face for the bundled Playfair Display + Source Serif 4 faces
against /templates/editorial/fonts/*.woff2 and point every preset's
typography.fontHeading/fontBody at template:editorial:<Family> so
--font-heading/--font-body resolve to the bundled serifs (gotham@1.2.0
precedent; CMS BundledFonts is dead code). Declare required_icon_packs
[lucide, simple-icons] for the sprite pipeline. Recapture the 6-shot gallery
(home/about/article x light+dark) now that the serif actually renders.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- article template now renders <h1>{{ title }} once (was absent — title never showed)
- marginalia anchor label is block-level foreground ink (was inline muted run-on)
- landing lead top padding trimmed to close the dead band above the hero card
- 22 icon-sprite <use> SVGs carry explicit width/height (JIT balloon guard)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Layout/whitespace:
- Hero: gate min-h-[75vh] + vertical-centering on hasImage so the text-only
masthead no longer floats in ~800px of dead space; large display headline
via CSS class (was collapsed to 0.72rem by editorial-caps clobbering text-6xl).
- Restore heading hierarchy: swap editorial-caps -> editorial-heading on every
title/headline element (hero, card, newsletter, contact-form, cta, countdown,
feature-grid, team, featured-posts, post-hero, menu-list, hours-location,
author-bio-hero, password-reset-form). Masthead wordmarks (navbar/footer)
keep editorial-caps by design.
- Home "river": constrain to a 48rem reading measure and add vertical rhythm
(editorial-river/editorial-flow CSS) so stacked essay cards stop fusing into
one seam-y block and body text no longer runs full-bleed wide.
- Newsletter: remove stray empty double-hairline artifact (single centered rule).
- Image: guard empty src so absent media no longer renders an empty muted box.
Mobile / JIT-safety:
- New width/spacing/hero-title behavior defined as theme CSS in manifest
input_css_append (not JIT-scanned Tailwind), so it always compiles.
- Marginalia stack breakpoint widened 768px -> 1023px to match the article
grid collapse, so the rail always gets its separator when stacked.
Build + check-safety green (32 checks: 19 ok 13 skip). No version bump.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deliver the full Wave A contract for the editorial theme (personal
essayist / independent newsletter persona).
- 49 mandatory builtin overrides in templates/overrides/editorial/,
re-skinned from the frozen builtins: hairline rules, small-caps labels,
drop caps, narrow reading measure, oxblood accent. All content fields,
provider fields, custom tags ({% img %}/{% form %}/{% signup_form %}),
hx wiring, navbar drawer JS and auth/contact form wiring preserved
verbatim; legacy button/card field reads reconciled (link/style/label,
media/text).
- 7 page templates (default, full-width, landing, article, blog-index,
contact, auth); article is the reading centrepiece with drop-cap opener,
marginalia rail and a CSS-only reading-progress underline. All set the
html.dark class and route body font through var(--font-body).
- Block rework: masthead/byline/pullquote/section_label/colophon deleted
(now overrides of navbar/post-metadata/quote/divider/footer). Persona
blocks: dropcap_intro, marginalia, reading_list, field_notes.
- 4 presets, all mode "both", book-paper light + sepia-on-charcoal dark.
- Bundled Playfair Display + Source Serif 4 (OFL, latin subset) in
assets/fonts with license record; fonts.json populated; every
font-family via var(--font-heading|body|mono, fallback).
- Themed email-safe wrapper (tables, inline styles, literal fonts).
- Master pages + seed demo site (home, about, blog with 3 essays,
contact with form + data table + row_inserted email-admins workflow,
login) in essayist voice.
- required_icon_packs=["lucide"]; RECOMMENDED_FONTS/ICONS updated.
Motion tier: CSS-first (progress underline, marginalia fade-in;
prefers-reduced-motion honored). Verified: make + ninja plugin verify +
check-safety all exit 0. Visual quality UNVERIFIED until Wave B.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the retired .so Makefile with the wasm/.bnp convention (build /
verify / archive-check / publish via ninja plugin build), gitignore *.so
and *.bnp artifacts, and refresh the stale [compatibility] block_core
constraint to the v0.15 era.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add wasmguest.Serve(Registration) boilerplate and bump block/core to v0.15.2
for the .so->wasm migration. Built + published as .bnp to the dev registry.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bootstrapped during the 2026-06-06 BlockNinja consolidation. Was previously
an unversioned directory inside ~/src/blockninja-themes/editorial.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>