Mockup pixel-match: amethyst palette + room Details panel #537
Loading…
Reference in a new issue
No description provided.
Delete branch "docs/lets-chat-mockup-pixel-match"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements the safe, verifiable parts of the "completely match the mockups" overhaul. Full progress log + morning screenshot checklist:
docs/superpowers/2026-07-10-overnight-progress-and-screenshot-checklist.md.What is in this PR
Amethyst palette (LC-567) - a new additive 7th theme palette (violet); blue-harbor stays the default. Full 4-mode token set in main.css, wired through every palette enumeration (backend allow-lists, the no-flash bootstrap JS map, the cookie-sync list, settings picker, dev gallery, contrast checker). Contrast checker passes 84/84. A review pass caught two would-be-silent fallbacks (base.html + auth.rs) and fixed them.
Room Details panel (LC-568) - inline Details panel in the room right column below the thread panel (Created / Members / Notifications / Pinned / Leave room), matching the design comp. Coexists with the full-page room/info.html route. i18n en+es parity holds.
Connection-status banner (LC-570) - moved fixed-hex status colors onto the warning/danger/success tokens so the banner themes. The rest of the app was already tokenized.
Please review before merge
I added a new mutating endpoint
POST /room/{id}/leavebecause no room-level leave control existed and the comp shows a functional "Leave room" button. It is security-reviewed and verified safe (authenticated-only, membership-gated via is_room_accessible, deletes only the caller's own membership, server-side gated to private rooms, CSRF-covered by the app's SameSite session cookie). It is new surface beyond the ticket scope - veto it if you would prefer the button link to the info page instead.Not in this PR (deferred)
The fine chat-surface pixel pass (LC-569) is deliberately left for the screenshot loop - doing it blind would risk regressing the shipped UI. The static reference at
docs/superpowers/reference/2026-07-10-mockup-reference.htmlencodes the target.Verification
./dev/cargo check, the i18n_catalog test, and the contrast checker all pass. The binary compiles and boots to the pre-existing Bunyip-SSO config gate (LC-22); a full rendered boot needs the SSO env/OP. Visual screenshot verification across the four target states (blue-harbor/amethyst x light/dark) is the remaining step - see the checklist doc.Rows: Created / Members / Notifications / Pinned / Leave room. The Notifications row shows the current mute_mode label and reuses the header's existing notify dropdown (room/notify_dropdown.html) by triggering its toggle button, rather than duplicating the hx-post wiring. No existing self-serve leave-room control existed to reuse (grepped for leave-room/leave_room; only routes::enclave::post_leave, which is enclave-scoped). Added a small POST /room/{id}/leave handler mirroring that pattern, gated to room_type == "private" only: public-room access is derived from enclave membership rather than the room_members table (see db::chat::search_messages_filtered's scope_clause), so leaving would not actually revoke access there. The template only renders the Leave button for private rooms. #LC-568