/* ============================================================================ VIEW 1 — TODAY'S VERDICTS (hero pick + rich ranked rows) ============================================================================ */ /* compact vertical mini-bars for the 8 signal sub-scores */ function SignalStrip({ factors, color, label=true }){ const keys = Object.keys(factors); return (
{label &&
Signals
}
{keys.map(k=>{ const v = factors[k]; return (
{(FACTOR_LABELS[k]||k)} {v}
); })}
); } function HeroPick({ v, onOpen }){ const t = tierOf(v.tier); return (
#1 TODAY Top conviction {v.manipulation_flag && }
{/* left */}

{v.ticker}

{v.company}

{v.thesis}

Catalysts
{v.catalysts.length ? v.catalysts.map((c,i)=>{c}) : None identified}
Risks
{v.risks.map((c,i)=>{c})}
{/* right rail */}
); } function VerdictRow({ v, rank, onOpen }){ const t = tierOf(v.tier); return ( ); } function TodaysVerdicts({ verdicts, onOpen }){ const sorted = [...verdicts].sort((a,b)=> b.conviction - a.conviction); const sum = verdictSummary(sorted); const [hero, ...rest] = sorted; return (
{/* summary stats */}
Market Open
Last run 06:40 ET Fri · May 30, 2026
onOpen(hero.ticker)} /> {/* rich rows */}

Remaining ranked picks

{rest.length} more
{rest.map((v,i)=>( onOpen(v.ticker)} /> ))}

Illustrative tickers for demonstration — not investment advice.

); } Object.assign(window, { TodaysVerdicts, SignalStrip });