/* home.jsx — Site A homepage */ const STACK_ITEMS = [ { num: '01', name: 'Push', desc: 'Short-term trend from the EMA ribbon. Up arrow = fast EMA above slow.', detail: 'This is your directional bias. Everything downstream — Score, Trigger, Bias — must agree with Push, or you have a stack disagreement.' }, { num: '02', name: 'Score', desc: 'Multi-period Donchian agreement, 0/10 to 10/10.', detail: '≥ 6/10 needed for a valid setup. ≥ 8/10 is strong confluence. < 4/10 is auto-veto regardless of what else is on screen.' }, { num: '03', name: 'Status', desc: 'TRENDING, CHOP, or 🔒 LOCKOUT. CHOP or LOCKOUT means take no new trades.', detail: 'A yellow box on the chart and CHOP in the dashboard means stand down. 🔒 LOCKOUT means a low-quality session window is active — every signal is suppressed at its source. Wait for the breakout or the lockout to end.work is biased toward fewer, higher-quality signals.' }, { num: '04', name: 'Bias', desc: 'Structural confirmation: above demand for longs, below supply for shorts.', detail: 'Reads the Supply/Demand level arrays. Required for the Tutorial Bias row to evaluate. If the module is off, the row shows "—".' }, { num: '05', name: 'Trigger', desc: 'The actual BUY / SELL label fired by an EMA cross.', detail: 'A clean BUY or SELL label is the entry trigger. A gray ✕ is auto-veto. A yellow ⚠ means a pullback setup is forming — wait for the cross.' }, ]; function StackScroll() { const [active, setActive] = useS(0); const cur = STACK_ITEMS[active]; return (
{STACK_ITEMS.map((s, i) => (
setActive(i)} onMouseEnter={() => setActive(i)}>
{s.num}
{s.name}
{s.desc}
))}
{cur.num}

{cur.name}

{cur.desc}

{cur.detail}

); } const SCENES = [ { label: 'Bullish stack', push: 'UP', score: { value: 9, dir: 'UP' }, status: 'TRENDING', signal: 'BUY', caption: 'All five layers align — direction, score, status, bias, and trigger. Take the long.' }, { label: 'Bearish stack', push: 'DOWN', score: { value: 8, dir: 'DOWN' }, status: 'TRENDING', signal: 'SELL', caption: 'Mirror of the bullish setup — same logic, opposite direction.' }, { label: 'Chop / no trade',push: 'FLAT', score: { value: 4 }, status: 'CHOP', signal: 'NO_TRADE', caption: 'Push is flat, score is weak, chop box active. Stand down and wait for breakout.' }, { label: 'Push / Score disagree', push: 'UP', score: { value: 7, dir: 'DOWN' }, status: 'TRENDING', signal: 'BUY', caption: 'Push says up, Score says down — directional disagreement is auto-veto.' }, ]; function HomeDemo() { const [i, setI] = useS(0); const s = SCENES[i]; return (

Live Dashboard · Pick a Scenario

{s.caption}

{SCENES.map((sc, idx) => ( ))}
); } const MODULES = [ { meta: 'Module · default ON', name: 'Chop Zones', body: 'No-trade range filter. Detects compressed price action via ATR — when the recent N-bar range divided by ATR drops below threshold, GHOST draws a yellow translucent box. Combined with No-Trade ✕, signals fired inside chop become untradeable. Inside a lockout window, chop boxes recolor to the lockout color.' }, { meta: 'Module · default ON', name: 'Supply / Demand', body: 'Marks recent swing highs (supply / sellside liquidity) and swing lows (demand / buyside liquidity) with horizontal lines and price tags. Multiple pivots within ATR-tolerance merge into a single stronger level (×N). Levels auto-delete when swept by price; levels inside lockout windows inherit the lockout color.' }, { meta: 'Module · default OFF', name: 'Reversal Signals', body: 'Structure-classified swing markers — only when pivots qualify as a meaningful structure event (HH / LH / LL / HL). Auto-sensitivity by timeframe. Volume style sizes circles by ATR-normalized reversal magnitude (5 tiers); Tag style prints a small "R" label. Reversals inside a lockout window render in the lockout color.' }, { meta: 'Module · default OFF', name: '👻 Ghost Signals', body: 'Independent Signal Generator. Renders B+ / S+ capsules on Bullish / Bearish entries. Three conditions must align: Ribbon Alignment, Confirmation Window & ATR Proximity. Independent of the confluence stack — does not consult Push, Score, CHOP, or No-Trade ✕. Inside a lockout window all Ghost Signal visuals inherit the lockout color.' }, { meta: 'Module · default OFF', name: '🔒 Session Lockout', body: 'Hard signal suppression for low-quality session windows. Three Dead Zones (Asia, NY Lunch, London Lunch) and three Sweep Windows (London Open, London→NY Transition, NY Open) cover periods of thin tape or algorithmic liquidity hunts. Inside a window: BUY/SELL/TP/alerts go silent, the Status cell shows 🔒 LOCKOUT, candles overlay with a MACD-intensity gradient (dark→white).' }, { meta: 'Module · default OFF', name: '🎓 Tutorial Mode', body: 'Optional secondary dashboard that walks you through the stack with live, contextual explanations. Reads each layer of the confluence stack and color-codes the result — green ✓, red ✕, yellow ⚠, gray —. Includes a Pattern row that detects 13 candle types and chart patterns (Doji, Hammer, Bull Flag, Head & Shoulders, etc.) and an optional Context Message with a 12-tier priority ladder.' }, { meta: 'Module · default OFF', name: '🗺️ Chart Legend', body: 'Optional reference table pinned to a chart corner. Context-sensitive: only shows entries for modules currently enabled, including a dedicated Lockout section when Session Lockout is on. Adapts to your Reversal Style — shows Volume circles or Tag pills, never both.' }, ]; function ModuleAccordion() { const [open, setOpen] = useS(0); return (
{MODULES.map((m, i) => (
{i === open && (

{m.body}

)}
))}
); } function Home() { return ( <>