v1.1.0-beta.040 - feat(reader): pinch-zoom + per-series reader preferences
📖 Reader
- Two-finger pinch-to-zoom via native non-passive listeners; page-load-error overlay + Skip Page; image decode() preload; a11y labels; removed the fit-width-shrink scale option
- Per-series preferences load on open and save debounced, so choices — especially manga RTL — persist across reloads and carry across issues of the same series
🗄️ Persistence (SQLite-adapted)
- New /api/reader/preferences GET/POST keyed by user+series (ReaderPreference)
- settings stored as a JSON string, parsed/serialized at the route boundary (SQLite has no Json type; rust-engine/Postgres uses Json) — client API contract stays plain objects, reader UI unchanged
✅ Verification
- tsc --noEmit clean; vitest 210/210 across 63 files