// desktop.jsx — AlphaSuite desktop screens (modified: real API + full-screen)

const D_W = 1440;
const D_H = 900;

function getCurrentTime() {
  const d = new Date();
  return String(d.getHours()).padStart(2,'0') + ':' + String(d.getMinutes()).padStart(2,'0');
}

// ── Top chrome ─────────────────────────────────────────────
function DChrome({ goPortfolio, current, goScreen, company }) {
  const c = COMPANIES.find(x => x.id === company);
  const TabBtn = ({ id, label, sub }) => (
    <button onClick={() => goScreen && goScreen(id)} style={{
      background: 'transparent', border: 'none', padding: '0 18px',
      cursor: 'pointer', textAlign: 'left',
      borderRight: '1px solid var(--elev-2)',
    }}>
      <div style={{ fontFamily: 'var(--mono)', fontSize: 'var(--m-nav-tab-sub-size, 9px)', letterSpacing: 'var(--m-nav-tab-sub-ls, 0.16em)',
        textTransform: 'uppercase', color: 'var(--ink-3)' }}>{sub}</div>
      <div style={{ fontFamily: 'var(--mono)', fontSize: 'var(--m-nav-tab-label-size, 12px)', letterSpacing: 'var(--m-nav-tab-label-ls, 0.12em)',
        textTransform: 'uppercase', color: current === id ? 'var(--ink)' : 'var(--ink-2)',
        marginTop: 2 }}>{label}</div>
      {current === id && (
        <div style={{ marginTop: 8, height: 2, background: 'var(--ink)' }} />
      )}
    </button>
  );

  return (
    <div style={{
      display: 'flex', alignItems: 'stretch', height: 'var(--m-nav-h, 56px)',
      background: 'var(--canvas)', borderBottom: '1px solid var(--elev-2)',
      position: 'sticky', top: 0, zIndex: 30, flexShrink: 0,
    }}>
      <button onClick={goPortfolio} style={{
        background: 'transparent', border: 'none', cursor: 'pointer',
        padding: 'var(--m-nav-logo-pad, 0 28px)', display: 'flex', alignItems: 'center', gap: 14,
        borderRight: '1px solid var(--elev-2)',
      }}>
        <img src="logo.svg" alt="AlphaSuite" style={{ height: 'var(--m-nav-logo-h, 26px)', display: 'block' }} />
        <div>
          <div style={{ fontFamily: 'var(--mono)', fontSize: 'var(--m-nav-wordmark-sub-size, 9px)', letterSpacing: 'var(--m-nav-wordmark-sub-ls, 0.22em)',
            textTransform: 'uppercase', color: 'var(--ink-3)' }}>V2 · AI Venture Studio</div>
          <div style={{ fontFamily: 'var(--mono)', fontSize: 'var(--m-nav-wordmark-size, 10px)', letterSpacing: 'var(--m-nav-wordmark-ls, 0.12em)',
            color: 'var(--ink-2)', marginTop: 2, textTransform: 'uppercase' }}>Harlow &amp; Stone LLP</div>
        </div>
      </button>

      <div style={{ display: 'flex', alignItems: 'stretch', paddingTop: 10 }}>
        <TabBtn id="portfolio" label="Portfolio" sub="01" />
        {c && <TabBtn id="score" label={`${c.name} · Score`} sub="02" />}
        {c && <TabBtn id="chat" label={`${c.name} · Ask α`} sub="03" />}
        {c && <TabBtn id="notebook" label={`${c.name} · Notebook`} sub="04" />}
      </div>

      <div style={{
        marginLeft: 'auto', display: 'flex', alignItems: 'center',
        gap: 24, padding: 'var(--m-nav-ticker-pad, 0 22px)', fontFamily: 'var(--mono)',
        fontSize: 'var(--m-nav-ticker-size, 11px)', color: 'var(--ink-3)',
      }}>
        <span><span style={{ color: 'var(--ink-3)' }}>WGT-AI</span> <span style={{ color: 'var(--ink)' }}>708</span> <span style={{ color: 'var(--green)' }}>+17</span></span>
        <span><span style={{ color: 'var(--ink-3)' }}>HOLDINGS</span> <span style={{ color: 'var(--ink)' }}>5</span></span>
        <span><span style={{ color: 'var(--ink-3)' }}>FLAGS</span> <span style={{ color: 'var(--amber)' }}>3</span> <span style={{ color: 'var(--red)' }}>1</span></span>
        <span>
          <span style={{ color: 'var(--ink-3)' }}>{new Date().toLocaleDateString('en-GB',{day:'2-digit',month:'short',year:'2-digit'}).toUpperCase()}</span>
          {' '}<span style={{ color: 'var(--ink-2)' }}>{getCurrentTime()} GMT</span>
        </span>
      </div>
    </div>
  );
}

// ── Portfolio ───────────────────────────────────────────────
function DPortfolio({ goCompany }) {
  const ranked = [...COMPANIES].sort((a, b) => a.score - b.score);

  return (
    <div style={{
      display: 'grid', gridTemplateColumns: `1fr var(--m-p-aside-w, 380px)`, gap: 0,
      minHeight: '100%',
      animation: 'alpha-fade-up 220ms ease-out both',
    }}>
      <div style={{ padding: 'var(--m-p-main-pad, 40px 48px 48px)', overflowY: 'auto' }} className="no-scrollbar">
        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-end', marginBottom: 36 }}>
          <div>
            <Kicker color="var(--ink-3)">01 — Portfolio · Q2 2026 · 5 Holdings</Kicker>
            <h1 className="display" style={{ marginTop: 14, fontSize: 'var(--m-p-heading-size, 112px)' }}>
              Ranked by <em>risk</em><span style={{ color: 'var(--ink)' }}>.</span>
            </h1>
          </div>
          <div style={{ display: 'flex', gap: 0 }}>
            {[
              { k: 'WEIGHTED', v: '708', sub: '/1000' },
              { k: 'PORTFOLIO Δ', v: '+17', sub: 'pts / wk', tone: 'green' },
              { k: 'COVERAGE', v: '5/5', sub: 'live' },
              { k: 'CORPUS', v: '746', sub: 'atoms · 32 docs' },
            ].map((stat, i) => (
              <div key={stat.k} style={{
                paddingLeft: i === 0 ? 0 : 24, paddingRight: i === 3 ? 0 : 24,
                borderRight: i === 3 ? 'none' : '1px solid var(--elev-2)',
                paddingTop: 6, paddingBottom: 4,
              }}>
                <Kicker>{stat.k}</Kicker>
                <div className="serif-num" style={{
                  fontSize: 'var(--m-p-stat-size, 38px)', lineHeight: 1, marginTop: 4,
                  color: stat.tone === 'green' ? 'var(--green)' : 'var(--ink)',
                }}>{stat.v}</div>
                <div style={{ fontFamily: 'var(--mono)', fontSize: 10,
                  letterSpacing: '0.12em', color: 'var(--ink-3)', marginTop: 3,
                  textTransform: 'uppercase' }}>{stat.sub}</div>
              </div>
            ))}
          </div>
        </div>

        <div style={{ marginTop: 20 }}>
          <Kicker>Alpha Matrix · Ten Axes · Worst → Best</Kicker>
          <div style={{ marginTop: 14 }}>
            <MatrixTable companies={ranked} onSelect={goCompany} />
          </div>
        </div>

        <div style={{ marginTop: 36 }}>
          <div style={{ display: 'flex', justifyContent: 'space-between' }}>
            <Kicker>Cards</Kicker>
            <Kicker color="var(--ink-4)">5 of 5 visible</Kicker>
          </div>
          <div style={{ marginTop: 14, display: 'grid', gridTemplateColumns: 'repeat(5, 1fr)', gap: 1, background: 'var(--elev-2)' }}>
            {ranked.map((c, i) => (
              <DPortfolioCard key={c.id} c={c} onClick={() => goCompany(c.id)} idx={i+1} />
            ))}
          </div>
        </div>
      </div>

      <aside style={{ background: 'var(--surface)', padding: 'var(--m-p-aside-pad, 40px 32px 48px)',
        display: 'flex', flexDirection: 'column', gap: 28, overflowY: 'auto' }} className="no-scrollbar">
        <div>
          <Kicker>What's changed · 7 days</Kicker>
          <div style={{ marginTop: 18 }}>
            {[
              { c: 'Volta',      a: 'Commercial Engine → Red',          d: '2d', tone:'red',    ax:'COMM',   delta:'−12 PTS' },
              { c: 'Smithfield', a: 'Tech Stack → Green · SOC2 II',     d: '3d', tone:'green',  ax:'TECH',   delta:'+9 PTS'  },
              { c: 'Helix',     a: 'AI Durability flagged · NHS delay',d: '5d', tone:'amber', ax:'AI',     delta:'−7 PTS' },
              { c: 'Meridian',  a: 'Velocity improved · B termsheet',  d:'1d', tone:'green', ax:'VEL',    delta:'+4 PTS' },
              { c: 'Smithfield',a: 'Market & Comp → Amber',            d:'1d', tone:'amber', ax:'MARKET', delta:'−5 PTS' },
              { c: 'Orbis',     a: 'PSD3 risk surfaced',                d:'4d', tone:'amber', ax:'TECH',   delta:'−3 PTS' },
            ].map((s, i) => (
              <div key={i} style={{ padding: '14px 0', borderTop: '1px solid var(--elev-2)', animation: 'alpha-fade-up 160ms ease-out both', animationDelay: (i * 45) + 'ms' }}>
                <div style={{ display: 'flex', justifyContent: 'space-between',
                  alignItems: 'baseline', marginBottom: 6 }}>
                  <div style={{ display: 'flex', gap: 10, alignItems: 'center' }}>
                    <RagDot rag={s.tone} size={6} />
                    <span style={{ fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.14em',
                      textTransform: 'uppercase', color: 'var(--ink-2)' }}>{s.c}</span>
                  </div>
                  <span style={{ fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.14em',
                    color: 'var(--ink-3)' }}>{s.d}</span>
                </div>
                <div style={{ fontFamily: 'var(--serif)', fontSize: 'var(--m-p-signal-text-size, 16px)',
                  lineHeight: 1.35, color: 'var(--ink)' }}>{s.a}</div>
                <div style={{ marginTop: 6, display: 'flex', justifyContent: 'space-between' }}>
                  <span style={{ fontFamily: 'var(--mono)', fontSize: 9, letterSpacing: '0.14em',
                    color: 'var(--ink-3)' }}>{s.ax}</span>
                  <span style={{ fontFamily: 'var(--mono)', fontSize: 9, letterSpacing: '0.14em',
                    color: s.tone === 'green' ? 'var(--green)' : s.tone === 'red' ? 'var(--red)' : 'var(--amber)' }}>{s.delta}</span>
                </div>
              </div>
            ))}
          </div>
        </div>
        <div style={{ marginTop: 'auto', paddingTop: 32, borderTop: '1px solid var(--elev-2)',
          fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.14em',
          textTransform: 'uppercase', color: 'var(--ink-3)', lineHeight: 1.7 }}>
          Index recomputed every 24h · last cycle 09:00 GMT · methodology v3.4
        </div>
      </aside>
    </div>
  );
}

function MatrixTable({ companies, onSelect }) {
  return (
    <div style={{ background: 'var(--surface)' }}>
      <div style={{
        display: 'grid',
        gridTemplateColumns: 'var(--m-p-matrix-name-w, 180px) repeat(10, 1fr) 64px 100px 56px',
        gap: 0, padding: 'var(--m-p-matrix-head-pad, 12px 16px)',
        fontFamily: 'var(--mono)', fontSize: 9, letterSpacing: '0.14em',
        textTransform: 'uppercase', color: 'var(--ink-3)',
        borderBottom: '1px solid var(--elev-2)',
      }}>
        <span>Company</span>
        {AXES.map(a => <span key={a.key} style={{ textAlign: 'center' }}>{AXIS_SHORT[a.key]}</span>)}
        <span style={{ textAlign: 'right' }}>α</span>
        <span style={{ textAlign: 'right' }}>Δ wk</span>
        <span></span>
      </div>
      {companies.map((c, index) => {
        const [hovered, setHovered] = React.useState(false);
        const ragColor = { red: 'var(--red)', amber: 'var(--amber)', green: 'var(--green)' }[c.rag];
        return (
          <button key={c.id} onClick={() => onSelect(c.id)}
            onMouseEnter={() => setHovered(true)}
            onMouseLeave={() => setHovered(false)}
            style={{
              width: '100%', border: 'none', cursor: 'pointer',
              textAlign: 'left', padding: 0, color: 'var(--ink)',
              display: 'grid',
              gridTemplateColumns: 'var(--m-p-matrix-name-w, 180px) repeat(10, 1fr) 64px 100px 56px',
              alignItems: 'center', borderBottom: '1px solid var(--elev-1)',
              background: hovered ? 'var(--elev-1)' : 'transparent',
              transition: 'background 80ms',
              animation: 'alpha-fade-up 160ms ease-out both',
              animationDelay: (index * 25) + 'ms',
            }}>
            <span style={{ padding: '14px 16px', display: 'flex', flexDirection: 'column', gap: 5 }}>
              <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
                <span style={{ fontFamily: 'var(--serif)', fontSize: 'var(--m-p-matrix-name-size, 20px)', color: 'var(--ink)',
                  letterSpacing: '-0.01em' }}>{c.name}</span>
                <span style={{
                  background: ragColor, color: '#000',
                  fontFamily: 'var(--mono)', fontSize: 8, fontWeight: 600,
                  letterSpacing: '0.14em', textTransform: 'uppercase',
                  padding: '2px 5px', flexShrink: 0,
                }}>{c.rag}</span>
              </span>
              <span style={{ fontFamily: 'var(--mono)', fontSize: 9, letterSpacing: '0.14em',
                textTransform: 'uppercase', color: 'var(--ink-3)' }}>
                {c.sector} · {c.stage}
              </span>
            </span>
            {c.axes.map((s, i) => {
              const rag = ragOf(s);
              const fg = { red: 'var(--red)', amber: 'var(--amber)', green: 'var(--green)' }[rag];
              return (
                <span key={i} style={{
                  padding: '14px 0', textAlign: 'center',
                  fontFamily: 'var(--mono)', fontSize: 'var(--m-p-matrix-score-size, 12px)', color: fg,
                }}>{s}</span>
              );
            })}
            <span className="serif-num" style={{
              padding: '14px 16px', textAlign: 'right', fontSize: 'var(--m-p-matrix-total-size, 26px)', color: ragColor,
            }}>{c.score}</span>
            <span style={{ padding: '14px 8px', textAlign: 'right',
              fontFamily: 'var(--mono)', fontSize: 12,
              color: c.delta < 0 ? 'var(--red)' : 'var(--green)' }}>
              {c.delta > 0 ? '+' : ''}{c.delta}
            </span>
            <span style={{ padding: '14px 16px', textAlign: 'right',
              fontFamily: 'var(--mono)', fontSize: 12, color: 'var(--ink-3)' }}>→</span>
          </button>
        );
      })}
    </div>
  );
}

function DPortfolioCard({ c, idx, onClick }) {
  const ragColor = { red: 'var(--red)', amber: 'var(--amber)', green: 'var(--green)' }[c.rag];
  const [hovered, setHovered] = React.useState(false);
  return (
    <button onClick={onClick} className={`card-rag-${c.rag}`}
      onMouseEnter={() => setHovered(true)}
      onMouseLeave={() => setHovered(false)}
      style={{
        border: 'none', cursor: 'pointer',
        color: 'var(--ink)', textAlign: 'left', padding: 0,
        display: 'flex', flexDirection: 'column', position: 'relative',
        background: hovered ? 'var(--elev-1)' : 'var(--surface)',
        transition: 'background 80ms',
        animation: 'alpha-fade-up 180ms ease-out both',
        animationDelay: ((idx - 1) * 40) + 'ms',
      }}>
      <div style={{ padding: 'var(--m-p-card-pad, 22px 24px 24px)', display: 'flex', flexDirection: 'column',
        gap: 18, flex: 1 }}>
        <div style={{ display: 'flex', justifyContent: 'space-between',
          fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.18em',
          textTransform: 'uppercase', color: 'var(--ink-3)' }}>
          <span><span style={{ color: 'var(--ink-2)' }}>{String(idx).padStart(2, '0')}</span> · {c.sector}</span>
          <span style={{
            display: 'inline-flex', alignItems: 'center',
            background: ragColor, color: '#000',
            fontFamily: 'var(--mono)', fontSize: 9, fontWeight: 600,
            letterSpacing: '0.14em', textTransform: 'uppercase',
            padding: '2px 6px',
          }}>{c.rag}</span>
        </div>
        <div>
          <div style={{ fontFamily: 'var(--sans)', fontWeight: 700, fontSize: 'var(--m-p-card-name-size, 30px)', lineHeight: 0.95,
            letterSpacing: '-0.025em', color: 'var(--ink)' }}>{c.name}</div>
          <div style={{ fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.16em',
            color: 'var(--ink-3)', marginTop: 5, textTransform: 'uppercase' }}>{c.stage}</div>
        </div>
        <div style={{ fontFamily: 'var(--sans)', fontStyle: 'italic', fontWeight: 500,
          fontSize: 'var(--m-p-card-score-size, 80px)', lineHeight: 0.9, letterSpacing: '-0.05em', color: ragColor,
          fontVariantNumeric: 'lining-nums tabular-nums' }}>{c.score}</div>
        <div style={{ marginTop: 'auto' }}>
          <AxisFingerprint company={c} size="sm" />
          <div style={{ marginTop: 12, display: 'flex', justifyContent: 'space-between',
            fontFamily: 'var(--mono)', fontSize: 10, color: 'var(--ink-2)',
            letterSpacing: '0.12em', textTransform: 'uppercase' }}>
            <span>{c.arr} ARR</span>
            <span style={{ color: c.delta < 0 ? 'var(--red)' : 'var(--green)' }}>
              {c.delta > 0 ? '+' : ''}{c.delta} pts
            </span>
          </div>
        </div>
      </div>
    </button>
  );
}

// ── Score ───────────────────────────────────────────────────
function DScore({ companyId, goChat, goPortfolio, goNotebook }) {
  const c = COMPANIES.find(x => x.id === companyId);
  const order = worstFirst(c);
  const negDelta = c.delta < 0;
  const deltaColor = negDelta ? 'var(--red)' : 'var(--green)';
  const ragColor = { red: 'var(--red)', amber: 'var(--amber)', green: 'var(--green)' }[c.rag];

  return (
    <div style={{
      display: 'grid', gridTemplateColumns: 'var(--m-s-left-w, 440px) 1fr var(--m-s-right-w, 340px)', gap: 0,
      minHeight: '100%',
      animation: 'alpha-fade-up 220ms ease-out both',
    }}>
      <div style={{ padding: 'var(--m-s-left-pad, 40px 36px 40px 48px)', background: 'var(--canvas)',
        borderRight: '1px solid var(--elev-2)', overflowY: 'auto' }} className="no-scrollbar">
        <div style={{ display: 'flex', alignItems: 'center', gap: 12, marginBottom: 26 }}>
          <button onClick={goPortfolio} style={{
            background: 'transparent', border: 'none', cursor: 'pointer',
            color: 'var(--ink-3)', fontFamily: 'var(--mono)', fontSize: 10,
            letterSpacing: '0.16em', textTransform: 'uppercase',
            display: 'inline-flex', alignItems: 'center', gap: 6, padding: 0,
          }}>
            <Chev color="currentColor" /> Portfolio
          </button>
        </div>

        <Kicker>{c.sector} · {c.stage}</Kicker>
        <div style={{ marginTop: 6, fontFamily: 'var(--serif)', fontSize: 'var(--m-s-name-size, 60px)',
          lineHeight: 0.95, letterSpacing: '-0.025em', color: 'var(--ink)' }}>
          {c.name}
        </div>

        <div style={{ marginTop: 20, display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 18 }}>
          {[['ARR', c.arr], ['YoY Growth', c.growth], ['NRR', c.nrr], ['Runway', c.runway]].map(([k, v]) => (
            <div key={k}>
              <Kicker>{k}</Kicker>
              <div className="serif-num" style={{ fontSize: 22, color: 'var(--ink)', marginTop: 4 }}>{v}</div>
            </div>
          ))}
        </div>

        <div style={{ marginTop: 44, animation: 'alpha-scale-in 280ms ease-out 120ms both' }}>
          <Kicker color="var(--ink-2)">Alpha Index · {c.weighting} Weighting</Kicker>
          <div className="serif-num" style={{
            fontSize: 'var(--m-s-hero-size, 232px)', lineHeight: 0.85, letterSpacing: '-0.06em',
            color: ragColor, marginTop: 16,
          }}>{c.score}</div>
          <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'baseline', marginTop: 2 }}>
            <Kicker>/ 1000</Kicker>
            <div style={{ display: 'flex', alignItems: 'baseline', gap: 10 }}>
              <span className="serif-num" style={{ fontSize: 'var(--m-s-delta-size, 38px)', color: deltaColor, lineHeight: 1 }}>
                {negDelta ? '' : '+'}{c.delta}
              </span>
              <Kicker color={deltaColor}>Δ wk</Kicker>
            </div>
          </div>
        </div>

        <div style={{ marginTop: 36, paddingTop: 24, borderTop: '1px solid var(--elev-2)' }}>
          <Kicker color="var(--gold)">α · Assessment</Kicker>
          <div style={{ marginTop: 12, fontFamily: 'var(--serif)', fontSize: 'var(--m-s-quote-size, 21px)', lineHeight: 1.4,
            color: 'var(--ink)', letterSpacing: '-0.005em' }}>
            "{c.headline}"
          </div>
          <button onClick={goChat} style={{
            marginTop: 18, background: 'transparent', border: 'none',
            color: 'var(--gold)', fontFamily: 'var(--mono)', fontSize: 11,
            letterSpacing: '0.16em', textTransform: 'uppercase', cursor: 'pointer',
            padding: 0, display: 'inline-flex', alignItems: 'center', gap: 10,
          }}>
            Open intelligence brief <Arrow size={14} />
          </button>
        </div>
      </div>

      <div style={{ padding: 'var(--m-s-mid-pad, 40px 36px 40px)', background: 'var(--canvas)', overflowY: 'auto' }} className="no-scrollbar">
        <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 16 }}>
          <Kicker color="var(--ink-2)">Ten Axes · Worst First</Kicker>
          <div style={{ display: 'flex', gap: 16 }}>
            <Kicker>Score / 100</Kicker>
            <Kicker>RAG</Kicker>
          </div>
        </div>
        <div style={{ background: 'var(--surface)' }}>
          {order.map((axisIdx, rank) => {
            const score = c.axes[axisIdx];
            const rag = ragOf(score);
            const axis = AXES[axisIdx];
            const note = AXIS_NOTES[c.id]?.[axisIdx] ?? '';
            return <DAxisRow key={axisIdx} rank={rank + 1} label={axis.label} score={score} rag={rag} note={note}
              onClick={() => goChat(axis)} />;
          })}
        </div>
        <div style={{ marginTop: 18, fontFamily: 'var(--mono)', fontSize: 10,
          letterSpacing: '0.14em', textTransform: 'uppercase', color: 'var(--ink-3)' }}>
          Methodology v3.4 · last recomputed 09:00 GMT · click axis to interrogate
        </div>
      </div>

      <aside style={{ background: 'var(--surface)', padding: 'var(--m-s-right-pad, 40px 30px 40px)',
        borderLeft: '1px solid var(--elev-2)', display: 'flex', flexDirection: 'column',
        gap: 30, overflowY: 'auto' }} className="no-scrollbar">
        <div>
          <Kicker>Ten Week Trail</Kicker>
          <div style={{ marginTop: 16, padding: '20px 4px 8px' }}>
            <Spark data={c.spark} w={280} h={88} color={deltaColor} stroke={1.5} />
          </div>
          <div style={{ display: 'flex', justifyContent: 'space-between',
            fontFamily: 'var(--mono)', fontSize: 10, color: 'var(--ink-3)', marginTop: 4 }}>
            <span>{c.spark[0]}</span>
            <span>{c.spark[c.spark.length - 1]}</span>
          </div>
        </div>
        <div>
          <Kicker>Signal · 7 d</Kicker>
          <div style={{ marginTop: 14 }}>
            {[
              { t: 'SOC2 Type II audit closed', d: '3d', tone: 'green' },
              { t: 'Veritas Series B announced', d: '4d', tone: 'amber' },
              { t: 'CTO hire process opened', d: '6d', tone: 'amber' },
              { t: 'Q1 revenue lands +6% above plan', d: '8d', tone: 'green' },
            ].map((s, i) => (
              <div key={i} style={{
                padding: '12px 0', borderTop: '1px solid var(--elev-2)',
                display: 'grid', gridTemplateColumns: '14px 1fr auto', gap: 10, alignItems: 'start',
              }}>
                <RagDot rag={s.tone} size={6} style={{ marginTop: 6 }} />
                <div style={{ fontSize: 13, lineHeight: 1.4, color: 'var(--ink)' }}>{s.t}</div>
                <span style={{ fontFamily: 'var(--mono)', fontSize: 10, color: 'var(--ink-3)' }}>{s.d}</span>
              </div>
            ))}
          </div>
        </div>
        <div>
          <Kicker>Corpus</Kicker>
          <div style={{ marginTop: 14, fontFamily: 'var(--mono)', fontSize: 11, color: 'var(--ink-2)', lineHeight: 1.8 }}>
            {[['Pitch Deck \'25','38 atoms'],['Tech Audit Q1','24 atoms'],['Financial Model','12 atoms'],
              ['Competitor Analysis','19 atoms'],['Team Bios','11 atoms'],['Roadmap \'25','31 atoms']].map(([k,v]) => (
              <div key={k} style={{ display: 'flex', justifyContent: 'space-between' }}>
                <span>{k}</span><span>{v}</span>
              </div>
            ))}
            <div style={{ marginTop: 14, paddingTop: 12, borderTop: '1px solid var(--elev-2)',
              display: 'flex', justifyContent: 'space-between',
              fontFamily: 'var(--mono)', fontSize: 10, color: 'var(--ink-3)',
              letterSpacing: '0.14em', textTransform: 'uppercase' }}>
              <span>Total</span><span><span style={{ color: 'var(--ink)' }}>135</span> atoms · 6 docs</span>
            </div>
          </div>
        </div>
      </aside>
    </div>
  );
}

function DAxisRow({ rank, label, score, rag, note, onClick }) {
  const ragColor = { red: 'var(--red)', amber: 'var(--amber)', green: 'var(--green)' }[rag];
  const [hovered, setHovered] = React.useState(false);
  return (
    <div onClick={onClick}
      onMouseEnter={() => setHovered(true)}
      onMouseLeave={() => setHovered(false)}
      style={{
        padding: 'var(--m-ax-pad, 20px 26px)', borderBottom: '1px solid var(--elev-1)',
        display: 'grid', gridTemplateColumns: '32px 1fr 120px 80px',
        gap: 22, alignItems: 'center',
        cursor: onClick ? 'pointer' : 'default',
        background: hovered && onClick ? 'var(--elev-1)' : 'transparent',
        transition: 'background 80ms',
        animation: 'alpha-fade-up 180ms ease-out both',
        animationDelay: (rank * 30) + 'ms',
      }}>
      <div style={{ fontFamily: 'var(--mono)', fontSize: 'var(--m-ax-rank-size, 11px)', color: 'var(--ink-3)' }}>
        {String(rank).padStart(2, '0')}
      </div>
      <div>
        <div style={{ fontFamily: 'var(--serif)', fontSize: 'var(--m-ax-label-size, 24px)', lineHeight: 1.1,
          color: 'var(--ink)', letterSpacing: '-0.01em' }}>{label}</div>
        <div style={{ fontSize: 'var(--m-ax-note-size, 13px)', color: 'var(--ink-2)', marginTop: 4, lineHeight: 1.45 }}>{note}</div>
      </div>
      <div><AxisBar score={score} rag={rag} h={5} /></div>
      <div style={{ textAlign: 'right' }}>
        <span className="serif-num" style={{ fontSize: 'var(--m-ax-score-size, 30px)', color: 'var(--ink)' }}>{score}</span>
        <div style={{ display: 'flex', justifyContent: 'flex-end', gap: 6, alignItems: 'center', marginTop: 6 }}>
          <RagDot rag={rag} size={6} />
          <span style={{ fontFamily: 'var(--mono)', fontSize: 9, letterSpacing: '0.16em',
            textTransform: 'uppercase', color: ragColor }}>{rag}</span>
        </div>
      </div>
    </div>
  );
}

// ── Chat (desktop) ──────────────────────────────────────────
function DChat({ companyId, initialAxis, onAxisConsumed, goPortfolio, goScore, goNotebook }) {
  const c = COMPANIES.find(x => x.id === companyId);
  const [messages, setMessages] = React.useState(() => ([
    { role: 'user',
      text: 'What is the AI durability risk and how should I think about it ahead of Series B?',
      time: '09:38' },
    { role: 'alpha', time: '09:38', brief: RICH_BRIEF_AI },
  ]));
  const [showRails, setShowRails] = React.useState(true);
  const scrollRef = React.useRef(null);

  React.useEffect(() => {
    if (!initialAxis) return;
    onPickAxis(initialAxis, null, null);
    onAxisConsumed?.();
  }, [initialAxis]);

  const onPickAxis = (axis, score, rag) => {
    const q = `What is the state of ${axis.label} and what should I do about it?`;
    setMessages(m => [
      ...m,
      makeUserMsg(q, getCurrentTime()),
      makeAlphaPlaceholder(axis.key, axis.label, score, rag, getCurrentTime()),
    ]);
    setTimeout(() => scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight, behavior: 'smooth' }), 60);
  };

  const onSendText = async (text) => {
    const time = getCurrentTime();
    const loadingBrief = {
      lead: `Querying Alpha Spine for "${text}"…`,
      signals: [{ t: 'Searching corpus…', src: 'Alpha Spine', ref: 0 }],
      citedAtoms: [], confidence: '—', atoms: 0, sources: 0,
    };
    setMessages(m => [...m, makeUserMsg(text, time), { role: 'alpha', time, brief: loadingBrief }]);
    setTimeout(() => scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight, behavior: 'smooth' }), 60);

    try {
      const resp = await fetch(`${window.BACKEND_URL}/query`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ question: text, corpus_id: companyId, top_k: 6 }),
      });
      if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
      const data = await resp.json();
      const cits = data.citations || [];
      const brief = {
        lead: data.answer || 'No answer returned.',
        signals: cits.map((cit, i) => ({
          t: cit.text ? cit.text.slice(0, 200) : '',
          src: cit.title ? cit.title.slice(0, 28) : `Source ${i+1}`,
          ref: i + 1,
        })),
        citedAtoms: [],
        confidence: cits.length > 3 ? 'high' : cits.length > 1 ? 'medium' : 'low',
        atoms: data.atom_count || 0,
        sources: cits.length,
      };
      setMessages(m => [...m.slice(0, -1), { role: 'alpha', time, brief }]);
    } catch (err) {
      const errBrief = {
        lead: `Could not reach Alpha Spine: ${err.message}. Check the backend connection.`,
        signals: [], citedAtoms: [], confidence: '—', atoms: 0, sources: 0,
      };
      setMessages(m => [...m.slice(0, -1), { role: 'alpha', time, brief: errBrief }]);
    }
    setTimeout(() => scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight, behavior: 'smooth' }), 120);
  };

  return (
    <div className="chat-light" style={{
      flex: 1, display: 'grid',
      gridTemplateColumns: showRails ? 'var(--m-c-rail-w, 300px) 1fr var(--m-c-rail-w, 300px)' : 'var(--m-c-rail-collapsed-w, 64px) 1fr var(--m-c-rail-collapsed-w, 64px)',
      transition: 'grid-template-columns 220ms ease',
      background: 'var(--canvas)', minHeight: 0,
      animation: 'alpha-fade-up 220ms ease-out both',
    }}>
      <aside style={{
        background: 'var(--surface)', borderRight: '1px solid var(--elev-2)',
        display: 'flex', flexDirection: 'column', overflow: 'hidden',
      }}>
        <button onClick={() => setShowRails(!showRails)} style={{
          background: 'transparent', border: 'none', cursor: 'pointer',
          padding: '20px 16px', textAlign: showRails ? 'left' : 'center',
          color: 'var(--ink-2)', fontFamily: 'var(--mono)', fontSize: 9,
          letterSpacing: '0.2em', textTransform: 'uppercase',
          borderBottom: '1px solid var(--elev-2)',
          display: 'flex', alignItems: 'center', justifyContent: 'space-between',
          flexShrink: 0,
        }}>
          {showRails ? `Sources · ${SOURCES.length}` : '«'}
          {showRails && <span style={{ color: 'var(--ink-3)' }}>collapse</span>}
        </button>
        {showRails ? (
          <div style={{ flex: 1, overflowY: 'auto' }} className="no-scrollbar">
            {SOURCES.map((s, i) => (
              <div key={s.id} style={{ padding: 'var(--m-c-source-pad, 14px 18px)', borderBottom: '1px solid var(--elev-2)' }}>
                <div style={{ display: 'flex', justifyContent: 'space-between' }}>
                  <span style={{ fontFamily: 'var(--mono)', fontSize: 9,
                    letterSpacing: '0.18em', textTransform: 'uppercase',
                    color: 'var(--gold)' }}>{KIND_LABEL[s.kind]}</span>
                  <span style={{ fontFamily: 'var(--mono)', fontSize: 9, color: 'var(--ink-3)' }}>[{i+1}]</span>
                </div>
                <div style={{ marginTop: 6, fontFamily: 'var(--serif)', fontSize: 'var(--m-c-source-title-size, 15px)',
                  lineHeight: 1.3, color: 'var(--ink)' }}>{s.title}</div>
                <div style={{ marginTop: 4, fontFamily: 'var(--mono)', fontSize: 9,
                  letterSpacing: '0.12em', textTransform: 'uppercase', color: 'var(--ink-3)' }}>
                  {s.origin}
                </div>
              </div>
            ))}
          </div>
        ) : (
          <div style={{ padding: '20px 14px', display: 'flex', flexDirection: 'column',
            alignItems: 'center', gap: 18 }}>
            <div style={{ writingMode: 'vertical-rl', transform: 'rotate(180deg)',
              fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.22em',
              textTransform: 'uppercase', color: 'var(--ink-3)' }}>
              {c.name} · Sources · {SOURCES.length}
            </div>
          </div>
        )}
      </aside>

      <main style={{ display: 'flex', flexDirection: 'column', minHeight: 0, overflow: 'hidden' }}>
        <header style={{
          padding: 'var(--m-c-header-pad, 28px 56px 6px)',
          display: 'flex', justifyContent: 'space-between', alignItems: 'baseline',
          borderBottom: '1px solid var(--elev-2)', flexShrink: 0,
        }}>
          <div style={{ display: 'flex', alignItems: 'baseline', gap: 18 }}>
            <span style={{
              width: 30, height: 30, background: 'var(--ink)', color: 'var(--canvas)',
              display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
              fontFamily: 'var(--serif)', fontSize: 22, fontStyle: 'italic',
              transform: 'translateY(4px)',
            }}>α</span>
            <div style={{ fontFamily: 'var(--serif)', fontSize: 'var(--m-c-header-title-size, 38px)', lineHeight: 1,
              letterSpacing: '-0.022em', color: 'var(--ink)' }}>
              Ask <span style={{ fontStyle: 'italic', color: 'var(--ink-3)' }}>about</span> {c.name}
            </div>
          </div>
          <div style={{ display: 'flex', gap: 24, alignItems: 'baseline', paddingBottom: 8 }}>
            <span style={{ fontFamily: 'var(--mono)', fontSize: 10,
              letterSpacing: '0.2em', textTransform: 'uppercase', color: 'var(--ink-3)' }}>
              α index {c.score}
            </span>
            <span style={{ fontFamily: 'var(--mono)', fontSize: 10,
              letterSpacing: '0.2em', textTransform: 'uppercase',
              color: c.delta < 0 ? 'var(--red)' : 'var(--green)' }}>
              Δ {c.delta > 0 ? '+' : ''}{c.delta} wk
            </span>
            <button onClick={goScore} style={{
              background: 'transparent', border: 'none', cursor: 'pointer',
              color: 'var(--ink-2)', fontFamily: 'var(--mono)', fontSize: 10,
              letterSpacing: '0.2em', textTransform: 'uppercase',
              display: 'inline-flex', alignItems: 'center', gap: 8, padding: 0,
            }}>
              Score view <Arrow size={11} color="currentColor"/>
            </button>
          </div>
        </header>

        <div style={{ padding: 'var(--m-c-topics-pad, 20px 56px 8px)', flexShrink: 0 }}>
          <div style={{ display: 'flex', justifyContent: 'space-between',
            alignItems: 'baseline', marginBottom: 14 }}>
            <Kicker color="var(--ink-3)">Open a thread · worst first</Kicker>
            <Kicker color="var(--ink-3)">10 axes · 135 atoms</Kicker>
          </div>
          <TopicCards companyId={companyId} onPick={onPickAxis} />
        </div>

        <div ref={scrollRef} style={{
          flex: 1, overflowY: 'auto', padding: 'var(--m-c-body-pad, 12px 56px 24px)',
        }} className="no-scrollbar">
          <div style={{ maxWidth: 820, margin: '0 auto' }}>
            {messages.map((m, i) => m.role === 'user'
              ? <UserPrompt key={i} m={m} />
              : <ImmersiveBrief key={i} m={m} />
            )}
          </div>
        </div>

        <ImmersiveComposer onSend={onSendText} companyName={`${c.name} Digital`} />
      </main>

      <aside style={{
        background: 'var(--surface)', borderLeft: '1px solid var(--elev-2)',
        display: 'flex', flexDirection: 'column', overflow: 'hidden',
      }}>
        <button onClick={() => setShowRails(!showRails)} style={{
          background: 'transparent', border: 'none', cursor: 'pointer',
          padding: '20px 16px', textAlign: showRails ? 'left' : 'center',
          color: 'var(--ink-2)', fontFamily: 'var(--mono)', fontSize: 9,
          letterSpacing: '0.2em', textTransform: 'uppercase',
          borderBottom: '1px solid var(--elev-2)',
          display: 'flex', alignItems: 'center', justifyContent: 'space-between',
          flexShrink: 0,
        }}>
          {showRails ? 'Pinned · Atoms' : '»'}
          {showRails && <span style={{ color: 'var(--ink-3)' }}>collapse</span>}
        </button>
        {showRails ? (
          <div style={{ flex: 1, overflowY: 'auto', padding: '18px 18px' }} className="no-scrollbar">
            <Kicker color="var(--ink-3)">Pinned excerpt</Kicker>
            <div style={{ marginTop: 12, padding: '16px 16px', background: 'var(--elev-1)' }}>
              <div style={{ fontFamily: 'var(--mono)', fontSize: 9, letterSpacing: '0.18em',
                textTransform: 'uppercase', color: 'var(--ink-3)' }}>
                Tech Audit Q1 · p.7
              </div>
              <div style={{ marginTop: 10, fontFamily: 'var(--serif)', fontSize: 14,
                lineHeight: 1.5, color: 'var(--ink)', fontStyle: 'italic' }}>
                "Matching engine processes 2.3M txns/day.{' '}
                <mark>No proprietary dataset</mark>{' '}
                underlies the matching logic; rules-engine + heuristics."
              </div>
            </div>
            <div style={{ marginTop: 22 }}>
              <Kicker color="var(--ink-3)">Cited atoms</Kicker>
              <div style={{ marginTop: 10 }}>
                {RICH_BRIEF_AI.citedAtoms.map(aid => {
                  const a = ATOM_BY_ID[aid];
                  if (!a) return null;
                  return (
                    <div key={aid} style={{
                      padding: '10px 0', borderTop: '1px solid var(--elev-2)',
                      display: 'grid', gridTemplateColumns: '14px 1fr 36px', gap: 8, alignItems: 'center',
                    }}>
                      <RagDot rag={a.rag} size={6}/>
                      <span style={{ fontSize: 12, color: 'var(--ink)' }}>{a.label}</span>
                      <span style={{ fontFamily: 'var(--mono)', fontSize: 9,
                        textAlign: 'right', color: 'var(--ink-3)' }}>
                        {Math.round(a.conf * 100)}%
                      </span>
                    </div>
                  );
                })}
              </div>
            </div>
          </div>
        ) : (
          <div style={{ padding: '20px 14px', display: 'flex', flexDirection: 'column',
            alignItems: 'center', gap: 18 }}>
            <div style={{ writingMode: 'vertical-rl', transform: 'rotate(180deg)',
              fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.22em',
              textTransform: 'uppercase', color: 'var(--ink-3)' }}>
              Pinned · 1 excerpt
            </div>
            <button onClick={goNotebook} style={{
              background: 'transparent', border: 'none', cursor: 'pointer',
              writingMode: 'vertical-rl', transform: 'rotate(180deg)',
              fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.22em',
              textTransform: 'uppercase', color: 'var(--ink-2)',
            }}>
              Notebook →
            </button>
          </div>
        )}
      </aside>
    </div>
  );
}

// ── Full-screen app orchestrator ────────────────────────────
function AlphaSuiteApp() {
  const [screen, setScreen] = React.useState('portfolio');
  const [company, setCompany] = React.useState('smithfield');
  const [chatAxis, setChatAxis] = React.useState(null);

  return (
    <div style={{
      width: '100vw', height: '100vh',
      background: 'var(--canvas)', color: 'var(--ink)',
      display: 'flex', flexDirection: 'column', overflow: 'hidden',
    }}>
      <DChrome
        current={screen}
        company={screen !== 'portfolio' ? company : null}
        goPortfolio={() => setScreen('portfolio')}
        goScreen={(s) => setScreen(s)}
      />
      <div style={{ flex: 1, overflow: 'auto', display: 'flex', flexDirection: 'column' }} className="no-scrollbar">
        {screen === 'portfolio' && (
          <DPortfolio goCompany={(id) => { setCompany(id); setScreen('score'); }} />
        )}
        {screen === 'score' && (
          <DScore companyId={company}
            goPortfolio={() => setScreen('portfolio')}
            goChat={(axis) => { setChatAxis(axis || null); setScreen('chat'); }}
            goNotebook={() => setScreen('notebook')} />
        )}
        {screen === 'chat' && (
          <DChat companyId={company} initialAxis={chatAxis}
            onAxisConsumed={() => setChatAxis(null)}
            goPortfolio={() => setScreen('portfolio')}
            goScore={() => setScreen('score')}
            goNotebook={() => setScreen('notebook')} />
        )}
        {screen === 'notebook' && (
          <DNotebook companyId={company}
            goPortfolio={() => setScreen('portfolio')}
            goScore={() => setScreen('score')}
            goChat={() => setScreen('chat')} />
        )}
      </div>
    </div>
  );
}

Object.assign(window, { DesktopApp, AlphaSuiteApp });
