Alex Dunmow 50f58205f0 fix(brutalist): remediate layout/whitespace + mobile responsiveness
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>
2026-07-05 17:26:15 +08:00
2026-07-05 16:43:17 +08:00
2026-07-05 13:42:54 +08:00

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
No description provided
Readme 3.1 MiB
Languages
CSS 77.2%
Makefile 19.7%
AMPL 3.1%