8 Commits

Author SHA1 Message Date
Alex Dunmow
3c42d1348f fix(gotham): move on-image hero ink to reel-onimg-* theme utilities (check-safety: no hardcoded hsl in ninjatpl)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 19:41:25 +08:00
Alex Dunmow
ff2c30103b fix(gotham): activate bundled display faces — @font-face in theme CSS + preset typography
The host never consumes bundled_fonts (LoadedPlugin.BundledFonts is dead),
so Antonio/Cormorant rendered as system sans. Declare @font-face against
the served artifact paths (/templates/gotham/fonts/) and set
typography.fontHeading/body/mono (template:gotham:*) on all five presets.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 19:33:58 +08:00
Alex Dunmow
f6a21c1295 fix(gotham): declare required_icon_packs [lucide, simple-icons] — /icons/lucide.svg 404'd on fresh installs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 19:24:01 +08:00
Alex Dunmow
f5af05fd5f fix(gotham): noir remediation — SVG geometry guards, shortcode→SVG, hero string-vs-object, reveal no-scroll fallback, deeper blacks, seed media
- Replace ::icon:: shortcodes with explicit sized <svg><use> (events_marquee,
  membership_tiers, button, hours-location, divider).
- Add width/height presentation attrs to every <use> SVG (recipe 4d guard).
- hero: field.text -> field|get:"text"|default:field (bare-string seed fields
  no longer error the block to EMPTY — About orphaned-rule root cause).
- reveal script: rAF kick + all() no-scroll fallback 2600ms -> 650ms across all
  templates so above/below-fold content never strands invisible without scroll.
- article: render aside + vertical divider only when slots.aside is non-empty
  (kills the empty fenced right column); narrow single-column when no aside.
- presets: deeper near-black backgrounds, higher-contrast foregrounds, richer
  brass/gold accents across all five palettes (light + dark).
- divider/quote: retire busy reel-strip sunburst for clean centred gold rules.
- seed: longer members-club articles; wire licensed noir stock imagery
  (bar-scene B&W hero, bar-shelf About, bar-interior/dark-lounge blog cards).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 16:31:20 +08:00
Alex Dunmow
6b8367377b refactor: replace hand-rolled utility CSS with Tailwind classes (host build now scans theme templates)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:53:54 +08:00
Alex Dunmow
486d3a283e fix(gotham): remediate whitespace stranding, imageless hero void, mobile grid collapse
- Robust scroll-reveal: replace observer-only reveal (which stranded
  below-fold .reveal blocks at opacity:0 while they still occupied layout
  height, producing a huge dead band before the footer) with an instant
  in-view pass + scroll/resize/load listeners + safety-net full reveal.
  Applied identically to all 8 page templates. Never strands content;
  fixes the invisible hero text and the giant empty band.
- Imageless hero: cap to a compact 520px (380px mobile) letterboxed text
  plate with a token spotlight backdrop instead of a 75vh empty void.
  Height moved to a raw manifest CSS class (JIT-scan-independent).
- Mobile safety net: raw @media(max-width:640px) rules force the events,
  membership and feature-grid layouts to a single column so a dropped
  responsive Tailwind prefix can never strand a wide grid on a phone.
- Shorten reveal transition .7s -> .5s for screenshot-safe opacity.

check-safety: 32 checks 19 ok 13 skip -> OK; codeless build exit 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:20:44 +08:00
Alex Dunmow
8da60d7d5a feat(gotham): Wave A theme-fleet rework — nightlife/private-club identity (WO-TF-018)
Re-skin gotham to the locked nightlife / private members' club persona:
cinematic near-black luxe, brass hairline accents, letterboxed heroes and
tall condensed display type. Codeless .bnp; MID motion tier (JS effects, no
canvas), prefers-reduced-motion honored, no-JS fallback.

- 49 mandatory builtin overrides in templates/overrides/gotham/ (chrome,
  marketing, primitives, commerce/local, blog family, auth surface, 404).
  Field reads, provider fields, form wiring and block JS preserved verbatim
  from the frozen builtins (cms a0f07e2ae); only presentation reskinned.
- 8 page templates (default, landing, article, full-width, blog-index,
  contact, auth + retained centered), dual-mode via theme_mode.
- 4 persona blocks: door_strip, events_marquee, membership_tiers, bottle_menu.
  Removed old theme blocks that duplicated builtins (hero, stats, features,
  footer) — now overrides.
- 5 dual-mode presets (all 19 tokens, light + dark intentional).
- Bundled OFL woff2: Antonio (heading), Cormorant Garamond (body), Inter
  (meta), IBM Plex Mono (mono); all font-family via var(--font-*).
- Themed email-safe wrapper, master pages, seed demo (home/about/blog x3/
  contact+workflow/login) in private-club voice.
- Gotham utility CSS (reel-*, film-grain, spotlight, letterbox-scrim, reveal)
  via manifest css.input_css_append; semantic color tokens only.
- plugin.mod kind="theme", required_icon_packs=["lucide"]; *.bnp gitignored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 11:18:21 +08:00
Alex Dunmow
dfe3bd780d 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:06:38 +08:00