Previously reader ink was localStorage-only so it never followed the
user to a different browser or device.
- New reader_ink table (user_id, book_abbrev, chapter, strokes JSON)
- GET /api/reader/ink — loads all pages for the signed-in user
- PUT /api/reader/ink/:book/:chapter — upserts one page
- On startup, client fetches server ink and merges it over localStorage
(server wins so the most-recently saved version always wins)
- updateReaderPageInk debounces a PUT call 1 s after the last stroke,
so rapid Apple Pencil strokes don't flood the server
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>