feat(#64): dark mode — semantic tokens, ThemeToggle, and UI fixes #65
Reference in New Issue
Block a user
Delete Branch "feat/64-dark-mode"
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?
Summary
text-gray-*,bg-gray-*,border-gray-*, etc.) with semantic Tailwind tokens (text-ink,bg-surface,border-line, etc.) across all components.layout.cssis now the single source of truth for theming.localStorage; no-flash script inapp.htmlprevents light-mode flicker on load.input/textarea/selectalways usebg-surfaceandtext-inkinstead of browser-default white backgrounds.text-white; replaced withtext-primary-fgwhich resolves to navy in dark mode (mint primary background is light).showAnnotations = true, so drawing works even if the user previously hid annotations. Also restores the missingdocumentFileHashprop threading throughDocumentViewer→PdfViewer(lost in rebase).bg-surface→bg-canvas) and removed thepy-6layout padding that made the page scrollable.e2eprofile, preventing test runs from permanently corrupting login credentials.Test plan
The password-reset E2E test changes the admin password mid-test and relies on a UI step to restore it. If that step fails or the test is interrupted the account is left with the wrong password, locking out all subsequent runs. Fix: in DataInitializer.initE2EData (e2e profile only), always reset the admin password to the value from ${app.admin.password} (default: admin123) on startup. This is idempotent — it is safe to run even when the password is already correct. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>0142ad9639to29a71f4421