/* entry-gate.jsx — Frosted glass entry/disclaimer overlay */ /* Auto-mounts on every page; dismissed state persists in localStorage. */ (function () { const ENTRY_KEY = 'ghost.entry.accepted.v1'; function EntryGate() { const [open, setOpen] = React.useState(() => { try { return sessionStorage.getItem(ENTRY_KEY) !== '1'; } catch { return true; } }); const [agreed, setAgreed] = React.useState(false); React.useEffect(() => { if (!open) { document.body.style.overflow = ''; return; } document.body.style.overflow = 'hidden'; return () => { document.body.style.overflow = ''; }; }, [open]); if (!open) return null; const enter = () => { if (!agreed) return; try { sessionStorage.setItem(ENTRY_KEY, '1'); } catch {} try { localStorage.removeItem(ENTRY_KEY); } catch {} setOpen(false); }; return (
Trading Framework

Read The Chart.
Wait For The Stack.
Take The Trade.

Ghost is a confluence-based trading framework for TradingView, built for education and decision-support. It does not predict price, place orders, or guarantee outcomes. You alone are responsible for every trade.

); } // Mount on its own root, appended to body, so every page picks it up // just by including this script. function mount() { if (document.getElementById('entry-gate-root')) return; const host = document.createElement('div'); host.id = 'entry-gate-root'; document.body.appendChild(host); ReactDOM.createRoot(host).render(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', mount, { once: true }); } else { mount(); } })();