Light mode
Added
- Light theme using a slate palette, with an iOS-style toggle in Settings → General → Appearance. First-load default respects the browser's
prefers-color-scheme; saved preference lives inlocalStorageunderbindery.themeand syncs instantly across tabs via thedarkclass on<html>. - Pre-paint bootstrap script in
index.htmlapplies the saved theme before React hydrates, eliminating the dark-to-light flash on page load. - New
useThemehook (web/src/theme.ts) andThemeTogglecomponent (web/src/components/ThemeToggle.tsx) that both modules outside Settings can reuse later.
Changed
- Every hardcoded
zinc-*utility class across the UI (App shell, all 10 pages, Pagination, AddAuthorModal) now has a paireddark:variant. Light mode is the default, dark mode activates when<html>has thedarkclass. No semantic-color token refactor — just the standard Tailwind class-based strategy. tailwind.config.jswas already set todarkMode: 'class'— no config change needed.
Image: ghcr.io/vavallee/bindery:v0.4.2
Full changelog: https://github.com/vavallee/bindery/blob/main/CHANGELOG.md

