/* ============================================================ FIFA EDGE — app root + Tweaks ============================================================ */ const { useState: useS, useEffect: useE } = React; const ACCENTS = [ { id:'green', color:'oklch(0.78 0.16 155)', letter:'G' }, { id:'amber', color:'oklch(0.80 0.14 75)', letter:'A' }, { id:'cyan', color:'oklch(0.80 0.12 210)', letter:'C' }, { id:'violet', color:'oklch(0.72 0.17 300)', letter:'V' }, ]; function TweaksPanel({ tweaks, set, editMode, onClose }) { if (!editMode) return null; return (

Tweaks

Acento de cor
{ACCENTS.map(a => (
set('accent', a.id)} title={a.id}>{a.letter}
))}
Densidade
{['compact','comfortable','spacious'].map(d => ( ))}
Mostrar coluna EV
); } function App() { const [section, setSection] = useS(() => { const s = localStorage.getItem('fe.section') || 'today'; return s === 'settings' ? 'today' : s; }); const [h2hId, setH2hId] = useS(null); const [tweaks, setTweaks] = useS(window.TWEAKS); const [editMode, setEditMode] = useS(false); useE(() => localStorage.setItem('fe.section', section), [section]); // expose opener for match rows React.useEffect(() => { window.openH2H = (id) => setH2hId(id); }, []); useE(() => { document.documentElement.setAttribute('data-accent', tweaks.accent); document.documentElement.setAttribute('data-density', tweaks.density); }, [tweaks]); // Tweaks protocol useE(() => { const onMsg = (e) => { if (!e.data || typeof e.data !== 'object') return; if (e.data.type === '__activate_edit_mode') setEditMode(true); if (e.data.type === '__deactivate_edit_mode') setEditMode(false); }; window.addEventListener('message', onMsg); window.parent.postMessage({ type: '__edit_mode_available' }, '*'); return () => window.removeEventListener('message', onMsg); }, []); const setTweak = (k, v) => { const next = { ...tweaks, [k]: v }; setTweaks(next); window.parent.postMessage({ type: '__edit_mode_set_keys', edits: { [k]: v } }, '*'); }; if (h2hId) { return (
{ setH2hId(null); setSection(s); }} />
setH2hId(null)} />
setEditMode(false)} />
); } const viewMap = { today: , live: , signals: , elo: , stats: , perf: , }; return (
{viewMap[section]}
setEditMode(false)} />
); } const __feRoot = ReactDOM.createRoot(document.getElementById('root')); const __feMount = () => __feRoot.render(); (window.__FIFA_READY__ || Promise.resolve()).finally(__feMount); window.addEventListener('fifa:data', __feMount); // re-render on future refreshes