/** Fetch JSON from `/api/*` (Vite proxies to FastAPI). */ async function http(path, params) { const qs = params ? "?" + new URLSearchParams(params).toString() : ""; const res = await fetch(`/api${path}${qs}`); if (!res.ok) throw new Error(`HTTP ${res.status} for ${path}`); return res.json(); } export async function fetchMeta(query) { return http("/meta", query); } export async function fetchCountryDivergence(query) { return http("/map/divergence", query); } export async function fetchMapArticles(query, iso = null) { const params = iso ? { ...query, iso } : query; return http("/map/articles", params); } export async function fetchTimeline(query) { return http("/timeline", query); } export async function fetchContrastingGroups(query) { return http("/contrasting-groups", query); }