Repository source: docs/plans/archive/chouse_theme_step4_implementation_summary.md
Chouse Theme — Step 4: Implementation Summary
Note: this summary was written retroactively alongside Stage 5, after Stages 1-4 were already implemented and committed. Each stage's commit is accurate and stage-scoped; only the summary-doc update lagged behind rather than landing in the same commit as its stage, as the process otherwise calls for.
Stage 1 - Registry + palette
Changes:
src/ForumRewrite/View/ThemeRegistry.php: new entry['name' => 'chouse', 'label' => 'Chouse', 'mode' => 'dark']public/assets/site.css: new variable block for:root[data-theme="chouse"]— a warm walnut/brass dark palette (deep walnut--page-bg, cream--ink, bronze--line, brass--active-bg/--active-line), serif body font, no reference to Red Bull's actual colorstests/LocalAppSmokeTest.php: updated the one existing assertion that hardcodes the theme allow-list string, an unavoidable consequence of the registry addition
Verification:
php -lon the touched PHP file — no syntax errorsphp tests/run.php— full suite green
Notes: none
Stage 2 - Header/wordmark chrome
Changes:
public/assets/site.css: brass.theme-swatch[data-theme="chouse"]swatch; scoped.site-header/.eyebrowrules turning the site-name label into a vertical brass signage tab (writing-mode: vertical-rl, CSS-only, no image assets)
Verification:
Headless Chrome screenshots at 1280px and 380px widths (
FORUM_SITE_ID=chouse, theme forced via the Stage 4 default) — wordmark renders as a legible vertical tab; confirmed no "Continue to Markit event page" link or reference to the concluded external event anywhere in the rendered headerScreenshot comparison against the default zenmemes theme at 380px confirmed the "Comfortable ▾" control overflow is a pre-existing app-wide issue, not introduced by this stage
php tests/run.php— full suite green (verified with the Stage 4 preview change stashed, so the check reflects only this stage's diff)
Notes: none
Stage 3 - Shell-wide chrome
Changes:
public/assets/site.css: brass top-accent strip on.card(via::before), inset shadow oninput/textareafor tactile depth, brass hover borders on buttons/nav links — all scoped under[data-theme="chouse"]
Verification:
Headless Chrome screenshots of the board (all-threads view) and about page — cards, thread titles, bylines, and the composer all read clearly against the palette
Screenshot of the default zenmemes theme confirmed pixel-unchanged rendering (no bleed from the new scoped rules)
php tests/run.php— full suite green (Stage 4 preview change stashed during verification)
Notes:
Buttons, inputs, and
.nav-link.is-activealready inherit correctly from the theme's CSS custom properties via existing generic rules (:root:not([data-theme="chicago"]) .nav-link.is-active, basebutton/inputvariable usage) — no theme-specific override was needed for those, which kept this stage smaller than planned
Stage 4 - Wire as chouse default
Changes:
src/ForumRewrite/SiteProfileRegistry.php:chouseentry'sdefaultThemechanged from'auto'to'chouse';zenmemesentry unchangedtests/LocalAppSmokeTest.php: updatedtestBoardPageRendersActiveSiteProfilePerFormSiteIdto expectdata-default-theme="chouse"for the chouse case (was asserting the priorautodefault)
Verification:
php tests/run.php— full suite greenManual render check:
FORUM_SITE_ID=chousenow yieldsdata-default-theme="chouse"; zenmemes still yieldsdata-default-theme="auto"
Notes:
This change was implemented early (before Stages 2-3) and used, uncommitted, to drive visual QA screenshots for those stages — each of those stages' own verification was re-run with this change stashed out to confirm their diffs pass in isolation before committing
Stage 5 - Coverage, verification, docs
Changes: none (verification-only stage; the allow-list and default-theme test updates it called for were already made in Stages 1 and 4 respectively, as direct consequences of those changes)
Verification:
Ran the theme guide's three stale-state traps: deleted
public/index.html(and, after an exploratoryphp scripts/build_static_artifacts.phprun against the existing zenmemes local repository produced a large batch of gitignored static artifacts unrelated to this feature, deleted all ofpublic/*.htmland the generatedpublic/tags/,public/about/,public/tools/*.htmlrecursively to fully reset)php tests/run.php— full suite green from a clean stateVisual sweep via headless Chrome screenshots: board (all-threads view), about page, header at desktop and ~380px widths, all under the chouse theme; one comparison screenshot of the default zenmemes theme to confirm no regression
Notes:
Full interactive verification (theme popover open/close, keyboard focus, text selection,
:targetpermalink jump) from the theme guide's workflow was not performed — this environment has headless Chrome but noplaywright-core/interaction-scripting installed, so only static screenshots were captured. Recommend a manual interactive pass before treating this as production-ready.No custom scrollbar styling was added for this theme, so the guide's headed-Chrome scrollbar-rendering caveat does not apply here.