2 Commits

Author SHA1 Message Date
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
Alex Dunmow
6c03f6da6c feat(brutalist): Wave A override contract — 49 builtin overrides, 7 templates, seed
WO-TF-012. Neo-brutalist creative-studio theme brought up to the Wave A
OVERRIDE-CONTRACT (frozen against cms a0f07e2ae).

- Override all 49 mandatory builtin keys in templates/overrides/brutalist/
  (chrome, marketing, primitives, commerce, blog family, auth surface, 404),
  each carrying the brutalist chrome (chunky borders, hard offset shadows,
  hover snap, mono uppercase meta, candy accents) via a raw-CSS "bru-*" kit
  shipped in manifest.yaml. Load-bearing wiring (HTMX auth endpoints, signup
  form, contact-form submit + honeypot, facade scripts, lightbox) preserved
  verbatim.
- 7 page templates: default, full-width, landing, article, blog-index,
  contact, auth (fixed a bug where templates omitted the `dark` class so dark
  presets never activated).
- Blocks rework: removed 6 blocks that duplicated builtins (masthead,
  concrete_hero, meta_strip, caption_image, pull_quote, colophon) — now
  overrides; kept project_ledger; added persona blocks sticker_wall,
  changelog, spec_sheet (4 total).
- 4 dual-mode presets (all mode "both", 19 tokens light + dark): Concrete &
  Cadmium, Hazard, Riso, Acid.
- Bundled 8 latin-subset OFL woff2 (Space Grotesk, Archivo Black, Inter, IBM
  Plex Mono) in assets/fonts/ + LICENSES.md; fonts.json populated; all
  font-family via var(--font-*). RECOMMENDED_FONTS/ICONS updated;
  required_icon_packs declared.
- Email-safe themed wrapper (tables, inline styles) cleaned up.
- master_pages.json reworked to builtin navbar/hero/cta/footer.
- Demo seed (seed/seed.json + workflows.json, demo:true): home, about, blog
  (3 posts), contact (form + contact_submissions data table + row_inserted →
  email-admins workflow), login — studio voice.

Known codeless limitation: page-suggestions renders themed 404 chrome but the
similar-pages list (server-side DB query, no template provider) can't be
reproduced; auth-form captcha widget is server-generated and can't be emitted
(seed leaves captchaEnabled=false). Verified: make exit 0; check-safety
exit 0. Visual quality UNVERIFIED until Wave B.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 10:56:49 +08:00