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>
Brutalist
A loud, honest theme built on chunky black borders, candy-bright accents, and hard offset shadows that snap on hover. Oversized grotesque headings sit on a strict grid, with structure left exposed on purpose. It has the sticker energy of a creative studio that wants its work to shout. The look is playful, and it stays legible.
Good for
We built Brutalist for studios and makers who want a confident, unmissable site. Treat these as starting points, not limits. If the mood fits your brand, use it:
- Design and creative studios
- Indie software and product launches
- Architecture and interior firms
- Art galleries and zine shops
- Portfolios that want to stand out
What you get
- Four color presets, each with a tuned light mode and a tuned dark mode: Concrete & Cadmium, Hazard, Riso, and Acid.
- Space Grotesk and Archivo Black for headings, Inter for body, and IBM Plex Mono for details, all bundled. Fonts stay admin-controlled, so you can swap them from the typography settings.
- Four persona blocks: a project ledger for indexing work, a sticker wall of pinned badges, a changelog for release notes, and a spec sheet for hard facts.
- A demo site that installs when you activate the theme: a home page, an about page, a short blog, and a contact page whose form emails your admins.
- Every core block restyled to match, plus a themed login screen and a themed 404 page.
Install
Install from the BlockNinja registry, then pick a preset and assign your fonts in the admin. Activate the demo content if you want a fully built starting point.
Description
Languages
CSS
77.2%
Makefile
19.7%
AMPL
3.1%