Throwaway. Tokenises the theme's literal colours so candidate palettes can be
swapped in the browser, adds three candidates (Plum Noir one-metal, two-metal
pewter, two-metal plus a champagne inset), a WCAG checker, a seeder and the
screenshots they are judged on.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The `.wg-topbar` background used `rgba(24, 20, 29, 0.98)`, letting page content faintly bleed through the header. Set it to a solid `rgb(24, 20, 29)` so the bar is fully opaque.
Left `$wg-topbar-panel-bg` (dropdown/drawer panels, still `0.98`) untouched — those are popovers, not the bar itself.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reviewed-on: #38
Reviewed-by: xtul <mpiasecki720@protonmail.com>
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
Adds an Unread dropdown to the topbar utilities (before notifications), per docs/superpowers/plans/2026-07-17-topbar-unread-drawer.md.
- New partial `templates/partials/header/unread-drawer.tpl`: toggle with live `component="unread/count"` badge (core socket updates), server-rendered empty/footer rows.
- `public/client.js`: on dropdown open, fetches `GET /api/unread` and injects up to 10 topic rows (titles/categories via textContent only); fetch failure falls back to the empty state.
- Mobile burger drawer gets an Unread row with the same badge.
- SCSS: unread dropdown joins the shared dropdown width rule; flex row styles for topic items.
Deviations from the plan's example code, found by live verification against the dev forum:
- Plan's `api.get('/unread')` hits the v3 write API and 404s → replaced with a fetch of the `/api/unread` read route.
- NodeBB 4 has no global `window.require`, so runtime translation of the static `[[unread:...]]` strings never ran → those strings are now server-rendered in the template (also removes the plan's translate-over-innerHTML step, which would have re-parsed untrusted titles as HTML).
Verified: full plain-node test suite passes; Playwright against the dev container passed all checks (badge count, item ordering before notifications, dropdown topic links + navigation, /unread footer link, mobile drawer badge at 390px).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reviewed-on: #28
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
Code blocks in posts rendered with the markdown plugin's default light highlight.js theme — white blocks on the dark ledger. This adds dark velvet pre/code styling and a Westgate-toned syntax palette (gold keywords, ledger-ink titles, muted green strings) for post content and the composer preview.
Also picks up the quick wins from an impeccable audit:
- Visible focus ring on the mobile drawer search (input had `outline: 0` with no replacement)
- Input placeholder contrast raised to pass WCAG 4.5:1; tagsinput placeholder reuses the token instead of `$gray-500`
- `prefers-reduced-motion` block zeroing transitions/animations (there were none before)
- Fixed a stray `</li>` closing a `<div>` in `quick-search-results.tpl`
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reviewed-on: #25
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
- Replaces the diagonal plum/velvet panel gradients with flat subtle purples (anchored to the group-card tone `rgb(24,20,29)`); the topbar uses the same flat tone so it meshes with the panels.
- Adds a Westgate-themed 404 page ("You've wandered off the map." / Night Masks warning) with a mask icon, vertically centered in the content area. Strings live in `languages/en-GB/westgate.json`.
- Sets Bootstrap link CSS variables globally so utility-classed links (`alert-link`, `link-*`) get the wiki gold like plain anchors already did. Topic-title parchment override is untouched.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reviewed-on: #23
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
The notifications, chat, and drafts buttons had their icons pinned to the left of the hover box while search was centered.
Root cause: Harmony's notifications/chats/drafts links (pulled in at runtime from core partials, not this repo) carry Bootstrap's justify-content-between utility class, which is !important and beat the theme's justify-content: center on .wg-topbar__utility-list .nav-link. The search link doesn't have that class, so it centered correctly.
Reviewed-on: #16
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
## Summary
- capture the post-review topbar refinements and implementation plan
- simplify the topbar brand to one SHADOWS OVER WESTGATE lockup
- remove the redundant desktop Forums dropdown and its custom panel handling
- give topbar dropdown and drawer surfaces an opaque local panel base
## Tests
- node --test tests/*.test.js
Reviewed-on: #7
Reviewed-by: xtul <mpiasecki720@protonmail.com>
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>