All GET calls in client.ts now fall back to Dexie when a network error
(TypeError) is caught, so pages render from cached data when the server
is unreachable:
- entries.list() → db.entries filtered by day_key range
- days.list() → db.closed_days filtered by day_key range
- weeks.list() → db.closed_weeks filtered by week_key range
- weeks.balance() → computed locally from closed_weeks + balance_adjustments
- balance.list() → db.balance_adjustments ordered by effective_at DESC
- settings.current() → db.settings_history, latest row with effective_from <= today
- settings.history() → db.settings_history ordered by effective_from DESC
Day/week close and reopen remain online-only (they require server-side
computation).
Add isOnline store (navigator.onLine + window online/offline events) and
an amber 'Offline — showing cached data' banner in +layout.svelte shown
whenever the store is false.