The CMS never consumes LoadedPlugin.BundledFonts, so fonts.json alone renders
fallback sans. Declare @font-face against the served artifact paths
(/templates/noir/fonts/*.woff2) in the appended CSS and set
typography.fontHeading/body/mono = template:noir:<Family> in all five presets
so --font-heading/--font-body/--font-mono resolve to the bundled faces
(IBM Plex Mono / Source Serif 4). gotham@1.2.0 precedent.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Third remediation pass, superseding the hand-rolled-CSS approach of 0b3013c
now that the host Tailwind build scans theme .ninjatpl files.
Hero blank-on-bare-string fix:
- The four styled-text fields read field.text|default:field, which
HARD-ERRORS when the seed passes a bare string (no .text attribute) and
blanks the whole hero. Switch to field|get:"text"|default:field so the
process-global get filter degrades gracefully on strings.
Layout back to Tailwind (Alex rule: don't reimplement standard utilities):
- Revert the .noir-cols*/.noir-cols-2up*/.noir-split/.noir-gap-*/.noir-hero-pad
class swaps in 15 override templates back to plain grid/gap/padding
utilities (grid-cols-*, gap-*, sm:/md:/lg: variants, py-*), and delete the
matching hand-rolled media-query block from manifest css.input_css_append.
- Hero split now uses grid grid-cols-1 lg:grid-cols-2 with a Tailwind
min-h-80 media frame (guarded so empty seed media does not balloon); the
centered hero uses py-16 md:py-20 lg:py-24 instead of min-h-[75vh], keeping
the dead-vertical-band trim.
Kept from the prior pass: robust .noir-reveal (instant reveal when already in
view + load/1600ms safety nets + no-JS/reduced-motion visible), tightened
section padding, and the genuinely bespoke safety CSS (empty-media img guards,
overflow-wrap, block max-width) — none of which are Tailwind-utility duplicates.
No version bump. make + check-safety both exit 0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Host Tailwind JIT does not scan theme templates, so responsive grid/hero
utilities (sm:/md:/lg:grid-cols-*, min-h-screen, arbitrary values) are
dropped and multi-column layouts collapse to one column. Ship the
load-bearing responsive layout as compiled theme CSS and point the
override templates at it. Layout only — colours stay on semantic tokens.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>