/* Design 7 — "Pulse" Map as full-screen background; a single floating panel on the left with three stacked sections: Spending by country, Spending by sector, Recent deals. Click a country to drill into its sectors and deals. Light SaaS palette — navy + cyan accent on slate. */ const psFmt = (v, d = 1) => v.toLocaleString('en-GB', { minimumFractionDigits: d, maximumFractionDigits: d }); const psInt = (v) => v.toLocaleString('en-GB'); function PSPanelBack({ onBack, label }) { return ( ); } // CPV → human-readable label, sourced from the 45-division palette. const cpvName = (cpv) => { const code = String(cpv).slice(0, 2); const s = (window.EU_SECTOR_PALETTE || []).find((x) => x.code === code); return s ? s.officialName : 'Other'; }; // ISO-3 alpha → ISO-2 alpha lookup (EU-27 only). const iso2FromIso3 = (iso3) => { if (!iso3) return null; const c = window.EU_COUNTRIES.find((x) => x.iso === iso3); return c ? c.iso2 : null; }; // Render the buyer flag, with a secondary winner flag offset behind when the // winner country differs from the buyer country. function DealFlags({ buyerIso2, winnerIso2 }) { const flag = (iso2) => `https://flagcdn.com/${iso2.toLowerCase()}.svg`; const showSecondary = winnerIso2 && buyerIso2 && winnerIso2 !== buyerIso2; return (