const PREFIX = "ihasmail:"; export function loadJson(key: string, fallback: T): T { try { const raw = localStorage.getItem(PREFIX + key); if (raw == null) return fallback; return { ...fallback, ...(JSON.parse(raw) as T) }; } catch { return fallback; } } export function loadRaw(key: string, fallback: T): T { try { const raw = localStorage.getItem(PREFIX + key); if (raw == null) return fallback; return JSON.parse(raw) as T; } catch { return fallback; } } export function saveJson(key: string, value: unknown): void { try { localStorage.setItem(PREFIX + key, JSON.stringify(value)); } catch { /* quota exceeded or private mode */ } } export function removeKey(key: string): void { try { localStorage.removeItem(PREFIX + key); } catch { /* ignore */ } } /** Namespaced per account so multiple logins on one browser don't collide. */ export function accountKey(accountId: string | null | undefined, key: string): string { return `${accountId ?? "anon"}:${key}`; }