-
Reuses the existing nickname-modal/.nickname-box comic-panel look (a new .auth-error line and a plain-text auth-link-btn are the only new CSS) rather than inventing a second visual language. A "登录" topbar button opens the modal (email/password, toggle between login/ register, cancel); once logged in it becomes "<nickname or email prefix> · 退出". Entirely optional, same as T19-T21 designed it: the modal's only trigger is that one button, nothing forces it open, and free browsing/ voting keeps working on the plain viewer_uid cookie exactly as before. Manually verified end to end against the real running server (Chrome): register auto-logs in, an existing viewer_nickname cookie bound onto the new account and shown in the button, logout reverts the UI. auth-ui.test.js is a structural check (id/getElementById consistency, all four /api/auth/* endpoints wired, modal starts hidden) since no DOM/browser tooling is available to `node --test` here to render the pages for a full interaction test. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Deddn3sM3oQnmvqWSMb4y