- Article title no longer rendered twice: seed article pages drop the duplicate
level-1 heading block; the article template's page <h1> is the sole title.
- Home dead gap resolved: landing sections divided by a hard 4px rule. The CMS
wraps each block in its own <div data-block-id>, so the divider adjacency now
targets the block wrappers ([data-block-id]+[data-block-id] .bru-section), not
the (non-sibling) sections; landing section padding reduced 4rem->3rem.
- SVG geometry guard completed: explicit width/height on every <use> icon SVG,
including the 5 testimonial star ratings the earlier regex missed (the ">="
in their class conditional).
- Seed quality: HARDSET site title hardset; article expanded to ~9 hard-edged
paragraphs to kill the below-article void.
- Fresh 2880x1800 light+dark captures for home/about/article; preview = home-light.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The host public CSS is a render-driven JIT (`@import "tailwindcss"
source(none)`); a runtime-installed codeless theme lives in data/plugins,
which is in NO @source glob, so its .ninjatpl utility classes only compile
if a built-in emits the exact string or the class is safelisted. Non-
safelisted families were silently dropping on a fresh provision, causing:
feature-grid rendering full-width instead of 3 columns (lg:grid-cols-3
absent), card/section content crammed against borders (p-* shorthand
absent), and touching grid items (gap-6 absent).
- manifest.yaml: add a "layout guarantee layer" of raw CSS scoped to
.brutalist-page (compiled unconditionally via input_css_append) defining
grid-cols/col-span/columns + all sm/md/lg responsive variants, p-*
shorthand, gap-*, space-y-*, aspect-*, object-*, w/h-full. Deterministic
columns on desktop AND 1-col collapse on mobile via real media queries.
- manifest.yaml: cut excessive .bru-section padding (6rem->4rem desktop,
4rem->2.75rem mobile) to remove the oversized dead bands between sections.
- project_ledger: was a bare <section> with no wrap -> rendered full-bleed
(rows touched the viewport edges). Wrap in bru-section + bru-wrap; add an
optional heading field (parity with changelog/spec_sheet).
- navbar: move mobile drawer + overlay geometry (fixed/top/right/h-full/
w-80/max-w-[85vw]/inset-0/z) into the inline <style> so the non-safelisted
positioning classes can't leave the drawer unpositioned; display stays on
safelisted flex/md:hidden. Neutral rgba scrim.
- image: guard empty src so absent media collapses instead of an empty
bordered box (empty-media graceful state).
Persona (concrete, chunky borders, hard offset shadows, candy accents)
unchanged. No .reveal/scroll-hide pattern in this theme. Version not bumped.
make build, ninja plugin verify, and check-safety all exit 0.
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/brutalist.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>