/* ═══════════════════════════════════════════════════════════════════ COIN HEADER · identity + live price + 24h stats + correlation strip ═══════════════════════════════════════════════════════════════════ */ function CoinHeader({ coin, live }) { const chgUp = live.chg >= 0; return (
{/* identity */}
{coin.name} {coin.sym}/USDT
RANK #{coin.rank} MCAP $42.18B
{/* price block */}
${ST_fmt.price(live.price)}
{/* correlation strip */}
); } function ChangeBlock({ chg, chgAbs }) { const up = chg >= 0; return (
{chgAbs >= 0 ? '+' : ''}{ST_fmt.price(chgAbs)} ({ST_fmt.pct(chg, 2)})
); } function KvInline({ k, v }) { return (
{k} {v}
); } function GroupPill({ group }) { const g = ST_GROUP[group]; return ( {group.toUpperCase()} ); } function CorrBlock({ dir, arrow, coins, c }) { return (
{arrow} {dir}
{coins.map(({ sym, score }) => (
{sym}
ρ {score.toFixed(2)}
))}
); } /* ── Coin glyph (real-looking, per-coin gradient + monogram) ───────── */ function CoinGlyph({ sym, size = 32 }) { // per-coin palette const PAL = { SOL: ['#9945FF', '#14F195'], BTC: ['#F7931A', '#FFB13B'], ETH: ['#627EEA', '#3C5BCB'], BNB: ['#F0B90B', '#F8D33A'], XRP: ['#23292F', '#5A6066'], DOGE: ['#C2A633', '#E1C757'], AVAX: ['#E84142', '#F8696A'], SUI: ['#4DA2FF', '#80C0FF'], NEAR: ['#000000', '#5F8AFA'], APT: ['#0EA5E9', '#1E2A3A'], }; const [a, b] = PAL[sym] || ['#5A6276', '#3D4458']; const gid = `cg-${sym}`; return (
{sym === 'SOL' ? ( // Solana mark: three slanted parallelograms (gradient hint) ) : ( {sym[0]} )}
); } window.CoinHeader = CoinHeader; window.CoinGlyph = CoinGlyph; window.GroupPill = GroupPill;