// One-time guidance memory: which partner nudges and per-case brief overlays this // browser has already seen. Falls back to an in-memory set in private mode, so // everything still fires exactly once per session there. const KEY = 'cz-tips' const CAP = 100 const mem = new Set() function stored(): string[] { try { const raw = localStorage.getItem(KEY) if (!raw) return [] const data = JSON.parse(raw) as { v: 1; seen: string[] } if (data?.v !== 1 || !Array.isArray(data.seen)) return [] return data.seen.filter((x) => typeof x === 'string') } catch { return [] } } export function hasSeen(key: string): boolean { return mem.has(key) || stored().includes(key) } export function markSeen(key: string): void { mem.add(key) try { const seen = stored().filter((x) => x !== key) seen.push(key) localStorage.setItem(KEY, JSON.stringify({ v: 1, seen: seen.slice(-CAP) })) } catch { /* private mode — the in-memory set covers this session */ } }