6 Commits

Author SHA1 Message Date
Alex Dunmow
63dfff0f19 feat(brutalist): bundle fonts + declare icon packs + Wave B reshoot (0.7.0)
@font-face for the 4 bundled families (8 woff2) served from
/templates/brutalist/fonts/, typography refs in all 4 presets
(Space Grotesk / Inter / IBM Plex Mono), required_icon_packs
[lucide, simple-icons], and recaptured gallery screenshots
(home/about/article x light+dark) with fonts now loading.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 20:54:19 +08:00
Alex Dunmow
72f1a7c8f4 fix(brutalist): Wave B design-review remediation + fresh gallery captures (0.6.0)
- 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>
2026-07-06 15:53:35 +08:00
Alex Dunmow
44f94ac93e refactor: replace hand-rolled utility CSS with Tailwind classes (host build now scans theme templates) 2026-07-05 17:55:50 +08:00
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
Alex Dunmow
979516b5e9 feat: convert to codeless .bnp — templates + manifest, Go/templ deleted (WO-WZ-021)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 15:08:06 +08:00