No content blocks assigned to this page.
diff --git a/BUILD_REPORT.md b/BUILD_REPORT.md index 829fd5a..b449d29 100644 --- a/BUILD_REPORT.md +++ b/BUILD_REPORT.md @@ -1,143 +1,65 @@ # Noir — Build Report -Implementation pass: wave-1 scaffold of the `noir` theme plugin. +Wave A pass (WO-TF-022): re-persona from a photography/portfolio theme to the +LOCKED **detective / true-crime dossier** direction. Codeless `.bnp`. -Plugin slug: `noir` -Module path: `git.dev.alexdunmow.com/block/themes/noir` -SDK pinned to: `git.dev.alexdunmow.com/block/core v0.11.1` -Go directive: `go 1.26.4` -Tech style: templ (per spec §11) +Plugin slug: `noir` · kind: `theme` · version: `0.2.0` -## What landed +## Identity -### Metadata & build glue -- `plugin.mod` — name, display_name, scope `@themes`, kind `theme`, version `0.1.0`, categories `["templates", "media"]`, tags array (8 entries, includes the four spec-required minimums), `[compatibility] block_core = ">=0.11.0 <0.12.0"`. -- `go.mod` — pins `block/core v0.11.1` and `templ v0.3.1020`, mirrors gotham's indirect set, no `replace` directives. -- `Makefile` — local-only targets (`all`, `templ`, `clean`). No `rebuild` target. Default builds `noir.so` via `CGO_ENABLED=1 go build -buildmode=plugin`. -- `embed.go` — five canonical `//go:embed` directives plus a `ThemeCSSManifest()` that surfaces `assets/style.css` through `CSSManifest.InputCSSAppend` so the custom utilities (`.tracked-mono`, `.bleed`, `.hairline`, sprocket motif, lightbox overlay) survive Tailwind's content scanner. -- `registration.go` — exports `var Registration plugin.PluginRegistration` with all functions wired. +Case-file panels, typewriter type, redaction bars, evidence board and film +grain. High-key gallery by day (ink type, evidence-red accent); darkroom black by +night (bone type, amber safelight accent). Motion tier MID: JS scroll-reveal +(reduced-motion honored, static no-JS fallback) plus the builtin gallery lightbox +showpiece (no canvas). -### System & page templates -- `tr.RegisterSystemTemplate({Key: "noir", …})` — exactly once. -- Four `tr.RegisterPageTemplate("noir", …)` calls with the spec's slot sets: - - `default` — `["header", "main", "footer"]` - - `landing` — `["hero", "main", "cta", "footer"]` - - `article` — `["header", "main", "aside", "footer"]` - - `full-width` — `["header", "main", "footer"]` -- Each page renderer lives in `template.templ` and consumes the shared `bn.Head` / `bn.AdminBypassBanner` / `bn.BodyEnd` helpers, mirroring gotham. +## What shipped -### Blocks (6 theme-specific) -- `noir:lightbox_gallery` — grid + vanilla keyboard-aware lightbox overlay (Esc + Enter/Space, click-outside dismiss, ARIA-modal). -- `noir:contact_sheet` — sprocket-framed numbered grid; `data-frame-number` attribute on each frame for UAT §13.9. -- `noir:case_study` — sticky meta rail (client / year / credits) + image stack. -- `noir:caption_strip` — 10px mono full-width strip. -- `noir:image_pair` — 50/50 diptych with shared caption. -- `noir:footer` — dissolved-rail footer with optional social links. +- **49 mandatory template overrides** in `templates/overrides/noir/` + a + `template_overrides` entry per key in `manifest.yaml`. Each re-skins the frozen + builtin default, preserving every content field, provider var, custom tag and + ` +
No content blocks assigned to this page.