- deviceFingerprint now hashes only User-Agent (not UA+IP) so switching
networks (VPN, mobile data, wifi) no longer creates a new session row
- On re-login with same device, also refresh the stored IP field so the
sessions page shows the current network address
- feat(library): bulk remove and bulk shelf-change actions on /books
Long-press any card to enter selection mode; sticky action bar with
Move to shelf dropdown and Remove button; POST /api/library/bulk-remove
and POST /api/library/bulk-shelf endpoints
- fix(catalogue): make Scrape button visible with solid amber-500 fill
and dark text instead of low-opacity ghost style that blended into card