feat: make live a first-class theme with server-side persistence (#1134)
live (ambient weather) was a separate layer on top of dark/light/system,
causing bugs on account switch. now it's a peer theme — picking live
activates ambient, picking dark/light/system deactivates it.
backend: add theme column to user_preferences (default 'dark'), return
in GET/POST preferences responses. frontend: fetch() uses server theme
instead of always overriding with localStorage. localStorage is now just
a flash-prevention cache synced from the server response.
ambient.svelte.ts: replace initialize/enable/disable with
activate/deactivate, remove DID-scoped localStorage keys, use
device-global ambient_location with migration from old keys.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
authored by