A self-hosted custom sync server for kobo devices.

feat: settings screen + per-user per-book sync toggle master

Add a web Settings page with two runtime-toggleable server settings and a per-book sync switch in the library. - New key/value `settings` table (app DB): `proxy_unimplemented` gates whether `handle_unimplemented` 307-redirects unknown Kobo store paths to storeapi.kobo.com (on) or returns 404 (off); `sync_new_uploads` is the default sync flag stamped on new uploads. Both default on, preserving prior behavior on upgrade. - Per-user per-book sync: `books.default_sync` (per-book default, DEFAULT 1) + `book_sync_prefs(user_id, book_id, enabled)` override. A user's syncable set is COALESCE(pref, default_sync)=1, filtered in fetch_syncable_books_with_format(user_id), so a toggled-off book drops out of that user's next sync-point snapshot (emitted as removed). Calibre ingest stamps default_sync=true; uploads use the sync_new_uploads setting. - Web API: GET/PUT /api/settings, PUT /api/books/{id}/sync; BookJson gains sync_enabled (per requesting user). - Web UI: new /settings page, a Settings link, and a per-book Sync switch under each library card; new .switch slider style. No Kobo wire-contract change: the proxy toggle only flips the store fallback between 307 and 404; real endpoints are untouched.