// Testing Ads — écrans secondaires (Détail vidéo, Ad Live, Fiche influenceuse)

const { Avatar, StatusPill, FilterPill, Btn, Thumb, PromoCode, Card } = window.WF;
const { KillModal, PushMetaModal } = window.TA_MODALS;
const { TA_FORMAT, TA_STATUS_META } = window;

// ——— Back bar ———
function BackBar({ to = 'Pipeline', onBack, right }) {
  return (
    <div style={{ display: 'flex', alignItems: 'center', gap: 10, marginBottom: 12 }}>
      <Btn variant="ghost" size="sm" onClick={onBack}>← {to}</Btn>
      {right}
    </div>
  );
}

// ——— Détail vidéo (desktop) ———
function DetailScreen({ video, isMobile, onBack, onOpenInfluencer, onOpenAdLive, dispatch }) {
  const [pushTarget, setPushTarget] = React.useState(null);
  const [killTarget, setKillTarget] = React.useState(null);
  if (!video) return null;

  const inf = window.TA_INFLUENCERS[video.inf];
  const status = TA_STATUS_META[video.status];
  const hooks = window.TA_HOOKS_FOR(video.id);
  const brief = window.TA_BRIEF_FOR(video.id);
  const transcript = window.TA_TRANSCRIPT_FOR(video.id);

  // Action principale (CTA contextuel)
  const cta = (() => {
    if (video.status === 'toEdit') return (
      <Btn variant="dark" size="lg" onClick={() => dispatch({ type: 'moveTo', id: video.id, status: 'editing', extra: { takenBy: 'Katlyn', takenHoursAgo: 0 } })}>
        Je prends ce montage
      </Btn>
    );
    if (video.status === 'editing') return (
      <Btn variant="primary" size="lg">↑ Déposer le final</Btn>
    );
    if (video.status === 'edited') return (
      <Btn variant="success" size="lg" onClick={() => setPushTarget({ video, mode: 'push' })}>📡 Pousser en testing</Btn>
    );
    if (video.status === 'testing') return (
      <div style={{ display: 'flex', gap: 8 }}>
        <Btn variant="success" size="lg" onClick={() => setPushTarget({ video, mode: 'scale' })}>✓ Scaler</Btn>
        <Btn variant="danger" size="lg" onClick={() => setKillTarget(video)}>✗ Killer</Btn>
        <Btn variant="ghost" size="lg" onClick={() => onOpenAdLive(video)}>📡 Voir live →</Btn>
      </div>
    );
    return null;
  })();

  // —— Mobile layout (Katlyn dans CapCut)
  if (isMobile) {
    return (
      <div className="scroll-y" style={{ flex: 1, padding: 14, minHeight: 0 }}>
        <BackBar onBack={onBack} right={
          <div style={{ marginLeft: 'auto' }}>
            <StatusPill emoji={status.emoji} variant={status.variant} size="sm">{status.short}</StatusPill>
          </div>
        } />

        {/* En-tête mobile compact */}
        <div style={{ display: 'flex', alignItems: 'center', gap: 10, marginBottom: 12 }}>
          <Avatar name={inf.name} size={42} />
          <div style={{ flex: 1, minWidth: 0 }}>
            <div style={{ font: '700 16px var(--font-sans)' }}>{inf.handle} <span style={{ font: '400 12px var(--font-sans)', color: 'var(--ink-3)' }} onClick={() => onOpenInfluencer(inf)}>↗</span></div>
            <div style={{ font: '500 11.5px var(--font-sans)', color: 'var(--ink-3)' }}>{inf.name}</div>
          </div>
        </div>

        {/* Code promo géant copyable */}
        <Card style={{ padding: 14, marginBottom: 12, textAlign: 'center', background: 'linear-gradient(180deg, #fff 0%, #fdfbf3 100%)' }}>
          <div style={{ font: '500 10.5px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1, marginBottom: 4 }}>Code promo · tape pour copier</div>
          <div style={{
            font: '800 30px var(--font-mono)', color: 'var(--ink)',
            letterSpacing: 2, display: 'inline-block',
            padding: '4px 14px', background: 'rgba(198,161,91,0.16)', borderRadius: 8,
          }}>{inf.code}</div>
        </Card>

        {/* Vidéo source */}
        <Card style={{ padding: 8, marginBottom: 12 }}>
          <Thumb ratio={9/16} dur={`0:00 / ${video.dur}`} />
          <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginTop: 8, font: '500 11px var(--font-mono)', color: 'var(--ink-3)' }}>
            <StatusPill variant="gray" size="sm">tc visible</StatusPill>
            <StatusPill variant="gray" size="sm">1×</StatusPill>
            <span style={{ marginLeft: 'auto', color: 'var(--primary)' }}>↓ .mov</span>
          </div>
        </Card>

        {/* CTA mobile en haut, gros */}
        <div style={{ marginBottom: 12 }}>{cta && React.cloneElement(cta, { style: { width: '100%', minHeight: 48, ...(cta.props.style || {}) } })}</div>
        <Btn variant="ghost" size="md" style={{ width: '100%', marginBottom: 14 }}>↓ Kit complet (.zip · 47 Mo)</Btn>

        {/* Hooks mobiles (gros boutons tap) */}
        <div style={{ font: '600 11px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1, marginBottom: 6 }}>
          3 hooks candidats
        </div>
        {hooks.map((h, i) => (
          <Card key={i} style={{ padding: '10px 12px', marginBottom: 6, display: 'grid', gridTemplateColumns: '46px 1fr auto', gap: 10, alignItems: 'center' }}>
            <span style={{ font: '700 11.5px var(--font-mono)', color: 'var(--primary)', background: 'var(--primary-soft)', padding: '3px 0', borderRadius: 6, textAlign: 'center' }}>{h.tc}</span>
            <span style={{ font: '500 12.5px var(--font-sans)' }}>{h.text}</span>
            <Btn size="sm" variant="ghost">⧉</Btn>
          </Card>
        ))}

        {/* Brief */}
        <Card style={{ padding: 14, marginTop: 14 }}>
          <div style={{ font: '700 13px var(--font-sans)', marginBottom: 8 }}>Brief</div>
          <div style={{ font: '500 13px var(--font-sans)', padding: 10, background: 'var(--paper-2)', borderRadius: 8, marginBottom: 10, lineHeight: 1.5 }}>
            « {brief.angle} »
          </div>
          <div style={{ font: '600 10.5px var(--font-sans)', color: '#166534', letterSpacing: 0.5, marginBottom: 4 }}>✓ MENTIONNER</div>
          <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4, marginBottom: 10 }}>
            {brief.mentions_obligatoires.map(m => <StatusPill key={m} variant="grn" size="sm">{m}</StatusPill>)}
          </div>
          <div style={{ font: '600 10.5px var(--font-sans)', color: '#b91c1c', letterSpacing: 0.5, marginBottom: 4 }}>✗ ÉVITER</div>
          <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>
            {brief.mentions_a_eviter.map(m => <StatusPill key={m} variant="red" size="sm">{m}</StatusPill>)}
          </div>
          <div style={{ marginTop: 10, font: '500 11.5px var(--font-sans)', color: 'var(--ink-3)' }}>
            durée cible <b style={{ color: 'var(--ink)' }}>{brief.duree_cible}</b> · contrat {brief.contract}
          </div>
        </Card>

        {/* Transcription complète */}
        <Card style={{ padding: 14, marginTop: 12 }}>
          <div style={{ font: '700 13px var(--font-sans)', marginBottom: 8 }}>Transcription complète</div>
          <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>
            {transcript.map((l, i) => (
              <div key={i} style={{ display: 'grid', gridTemplateColumns: '46px 1fr', gap: 8, font: '500 12.5px var(--font-sans)', color: 'var(--ink-2)' }}>
                <span style={{ font: '600 11px var(--font-mono)', color: 'var(--primary)' }}>{l.tc}</span>
                <span>{l.text}</span>
              </div>
            ))}
          </div>
        </Card>

        <PushMetaModal open={!!pushTarget} video={pushTarget?.video} mode={pushTarget?.mode} onClose={() => setPushTarget(null)}
          onConfirm={() => { dispatch({ type: 'moveTo', id: video.id, status: pushTarget.mode === 'scale' ? 'scaled' : 'testing' }); setPushTarget(null); }} />
        <KillModal open={!!killTarget} video={killTarget} onClose={() => setKillTarget(null)}
          onConfirm={({ reason, comment }) => { dispatch({ type: 'moveTo', id: video.id, status: 'killed', extra: { killReason: reason, killNote: comment } }); setKillTarget(null); onBack(); }} />
      </div>
    );
  }

  // —— Desktop layout
  return (
    <div className="scroll-y" style={{ flex: 1, padding: '0 22px 22px', minHeight: 0 }}>
      <BackBar onBack={onBack} right={
        <>
          <span style={{ marginLeft: 'auto', font: '500 12px var(--font-sans)', color: 'var(--ink-3)' }}>contrat {brief.contract}</span>
          <StatusPill emoji={status.emoji} variant={status.variant}>{status.label}</StatusPill>
        </>
      } />

      {/* Header */}
      <Card style={{ padding: 18, marginBottom: 14, display: 'flex', alignItems: 'center', gap: 16 }}>
        <Avatar name={inf.name} size={56} />
        <div style={{ flex: 1, minWidth: 0 }}>
          <h1 style={{ margin: 0, font: '700 24px var(--font-sans)', letterSpacing: -0.5 }}>
            {inf.handle} <span style={{ font: '400 14px var(--font-sans)', color: 'var(--primary)', cursor: 'pointer' }} onClick={() => onOpenInfluencer(inf)}>↗</span>
          </h1>
          <div style={{ font: '500 12.5px var(--font-sans)', color: 'var(--ink-3)' }}>
            {inf.name} · reçue {TA_FORMAT.age(video.receivedHours)} · source {video.dur} · <span style={{ color: 'var(--primary)', cursor: 'pointer' }} onClick={() => onOpenInfluencer(inf)}>fiche influenceuse</span>
          </div>
        </div>
        <div style={{ textAlign: 'right' }}>
          <div style={{ font: '500 11px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1, marginBottom: 4 }}>Code promo</div>
          <PromoCode code={inf.code} size="xl" />
        </div>
      </Card>

      {/* Grid */}
      <div style={{ display: 'grid', gridTemplateColumns: '1.2fr 1fr', gap: 14 }}>
        {/* Gauche */}
        <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
          {/* Vidéo source */}
          <Card style={{ padding: 12 }}>
            <Thumb ratio={9/16} dur={`0:00 / ${video.dur}`} />
            <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginTop: 10, font: '500 11px var(--font-mono)', color: 'var(--ink-3)' }}>
              <StatusPill variant="gray" size="sm">tc visible</StatusPill>
              <StatusPill variant="gray" size="sm">vitesse 1×</StatusPill>
              <span style={{ marginLeft: 'auto', color: 'var(--primary)', cursor: 'pointer' }}>↓ source .mov</span>
            </div>
          </Card>

          {/* Workflow */}
          <Card style={{ padding: 16 }}>
            <div style={{ font: '600 11px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1, marginBottom: 12 }}>Workflow</div>
            <div style={{ display: 'flex', alignItems: 'flex-start', gap: 4 }}>
              {(() => {
                const order = ['source','kit','toEdit','editing','edited','testing'];
                const cur = order.indexOf(video.status);
                return order.map((s, i, a) => {
                  const m = TA_STATUS_META[s];
                  const done = i < cur;
                  const current = i === cur;
                  return (
                    <React.Fragment key={s}>
                      <div style={{ textAlign: 'center', flex: 1, minWidth: 0, font: '500 11px var(--font-mono)', color: 'var(--ink-2)' }}>
                        <div style={{
                          width: 30, height: 30, borderRadius: '50%',
                          background: done ? '#16a34a' : current ? 'var(--primary)' : 'var(--paper)',
                          border: done ? '1px solid #16a34a' : current ? '1px solid var(--primary)' : '1.5px dashed var(--border-2)',
                          color: done || current ? '#fff' : 'var(--ink-3)',
                          margin: '0 auto', display: 'flex', alignItems: 'center', justifyContent: 'center',
                          font: '600 12px var(--font-sans)',
                        }}>{done ? '✓' : current ? '·' : i+1}</div>
                        <div style={{ marginTop: 6, font: `${current ? 700 : 500} 11.5px var(--font-sans)`, color: current ? 'var(--primary)' : 'var(--ink)' }}>{m.short}</div>
                        <div style={{ color: 'var(--ink-3)' }}>{m.who}</div>
                      </div>
                      {i < a.length - 1 && <div style={{ flex: 'none', alignSelf: 'center', width: 20, marginTop: 7, height: 0, borderTop: '1.5px solid var(--border-2)' }} />}
                    </React.Fragment>
                  );
                });
              })()}
            </div>
          </Card>

          {/* Action principale */}
          {cta && <div style={{ display: 'flex', gap: 8 }}>
            {cta}
            {video.status !== 'testing' && <Btn variant="ghost" size="lg" style={{ flex: 1 }}>↓ Kit complet (.zip · 47 Mo)</Btn>}
          </div>}
        </div>

        {/* Droite */}
        <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
          {/* Hooks */}
          <Card style={{ padding: 16 }}>
            <div style={{ display: 'flex', alignItems: 'baseline', marginBottom: 10 }}>
              <span style={{ font: '700 13px var(--font-sans)' }}>3 hooks candidats</span>
              <span style={{ marginLeft: 8, font: '500 11.5px var(--font-sans)', color: 'var(--ink-3)' }}>classés par perf attendue</span>
            </div>
            <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>
              {hooks.map((h, i) => (
                <div key={i} style={{
                  display: 'grid', gridTemplateColumns: '52px 1fr auto',
                  alignItems: 'center', gap: 12, padding: '10px 12px',
                  background: i === 0 ? 'var(--primary-soft)' : 'var(--paper-2)',
                  border: i === 0 ? '1px solid #c9d6ff' : '1px solid transparent',
                  borderRadius: 8,
                }}>
                  <span style={{ font: '700 12px var(--font-mono)', color: 'var(--primary)', background: '#fff', padding: '4px 0', borderRadius: 6, textAlign: 'center', border: '1px solid #d8e2ff' }}>{h.tc}</span>
                  <span style={{ font: '500 13.5px var(--font-sans)' }}>{h.text}</span>
                  <Btn size="sm" variant="ghost">⧉</Btn>
                </div>
              ))}
            </div>
          </Card>

          {/* Brief */}
          <Card style={{ padding: 16 }}>
            <div style={{ font: '700 13px var(--font-sans)', marginBottom: 10 }}>Brief — angle vendu</div>
            <div style={{ font: '500 13.5px var(--font-sans)', padding: 12, background: 'var(--paper-2)', borderRadius: 8, marginBottom: 12, lineHeight: 1.5 }}>
              « {brief.angle} »
            </div>
            <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 14 }}>
              <div>
                <div style={{ font: '600 11px var(--font-sans)', color: '#166534', letterSpacing: 0.5, marginBottom: 6 }}>✓ MENTIONNER</div>
                {brief.mentions_obligatoires.map(m => <div key={m} style={{ marginBottom: 4 }}><StatusPill variant="grn" size="sm">{m}</StatusPill></div>)}
              </div>
              <div>
                <div style={{ font: '600 11px var(--font-sans)', color: '#b91c1c', letterSpacing: 0.5, marginBottom: 6 }}>✗ ÉVITER</div>
                {brief.mentions_a_eviter.map(m => <div key={m} style={{ marginBottom: 4 }}><StatusPill variant="red" size="sm">{m}</StatusPill></div>)}
              </div>
            </div>
            <div style={{ marginTop: 12, font: '500 11.5px var(--font-sans)', color: 'var(--ink-3)' }}>
              durée cible <b style={{ color: 'var(--ink)' }}>{brief.duree_cible}</b> · contrat {brief.contract} · <span style={{ color: 'var(--primary)', cursor: 'pointer' }}>ouvrir →</span>
            </div>
          </Card>

          {/* Transcription complète */}
          <Card style={{ padding: 16 }}>
            <div style={{ display: 'flex', alignItems: 'center', marginBottom: 10 }}>
              <span style={{ font: '700 13px var(--font-sans)' }}>Transcription</span>
              <span style={{ marginLeft: 'auto', font: '500 11.5px var(--font-sans)', color: 'var(--ink-3)' }}>cliquer un timecode → vidéo</span>
            </div>
            <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
              {transcript.map((l, i) => (
                <div key={i} style={{ display: 'grid', gridTemplateColumns: '52px 1fr', gap: 10, font: '500 13px var(--font-sans)', color: 'var(--ink-2)', lineHeight: 1.5 }}>
                  <span style={{ font: '600 11px var(--font-mono)', color: 'var(--primary)', cursor: 'pointer' }}>{l.tc}</span>
                  <span>{l.text}</span>
                </div>
              ))}
            </div>
          </Card>
        </div>
      </div>

      <PushMetaModal open={!!pushTarget} video={pushTarget?.video} mode={pushTarget?.mode} onClose={() => setPushTarget(null)}
        onConfirm={() => { dispatch({ type: 'moveTo', id: video.id, status: pushTarget.mode === 'scale' ? 'scaled' : 'testing' }); setPushTarget(null); }} />
      <KillModal open={!!killTarget} video={killTarget} onClose={() => setKillTarget(null)}
        onConfirm={({ reason, comment }) => { dispatch({ type: 'moveTo', id: video.id, status: 'killed', extra: { killReason: reason, killNote: comment } }); setKillTarget(null); onBack(); }} />
    </div>
  );
}

// ——— Ad Live — vue d'une ad en testing avec KPI live ———
function AdLiveScreen({ video, onBack, onOpenInfluencer, dispatch }) {
  const [pushTarget, setPushTarget] = React.useState(null);
  const [killTarget, setKillTarget] = React.useState(null);
  if (!video) return null;
  const inf = window.TA_INFLUENCERS[video.inf];
  const k = video.kpi || {};
  const signal = k.signal;

  // Sparkline placeholder (SVG)
  const sparkline = (color = 'var(--primary)') => (
    <svg width="100%" height="40" viewBox="0 0 200 40" preserveAspectRatio="none">
      <path d="M0 30 Q 30 20 50 22 T 100 18 T 150 12 T 200 14" fill="none" stroke={color} strokeWidth="1.6" strokeLinecap="round" />
      <path d="M0 30 Q 30 20 50 22 T 100 18 T 150 12 T 200 14 L 200 40 L 0 40 Z" fill={color} opacity="0.08" />
    </svg>
  );

  return (
    <div className="scroll-y" style={{ flex: 1, padding: '0 22px 22px', minHeight: 0 }}>
      <BackBar onBack={onBack} right={
        <>
          <span style={{ marginLeft: 'auto', font: '500 11.5px var(--font-mono)', color: 'var(--ink-3)' }}>
            Meta · camp #{video.metaCampaign} · <span style={{ color: 'var(--primary)', cursor: 'pointer' }}>ouvrir dans Ads Manager ↗</span>
          </span>
        </>
      } />

      {/* Header avec signal */}
      <Card style={{ padding: 18, marginBottom: 14, display: 'flex', alignItems: 'center', gap: 16,
        borderColor: signal === 'scale' ? '#bbe6b5' : signal === 'kill' ? '#ffcdc7' : 'var(--border)',
        background: signal === 'scale' ? 'linear-gradient(180deg, #fff 0%, #f5fbf2 100%)' : signal === 'kill' ? 'linear-gradient(180deg, #fff 0%, #fef7f5 100%)' : '#fff',
      }}>
        <div style={{ width: 56, height: 80, borderRadius: 7, overflow: 'hidden', flex: 'none' }}>
          <Thumb ratio={80/56} />
        </div>
        <div style={{ flex: 1, minWidth: 0 }}>
          <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
            <Avatar name={inf.name} size={28} />
            <h1 style={{ margin: 0, font: '700 22px var(--font-sans)', letterSpacing: -0.4 }}>{inf.handle}</h1>
            <StatusPill emoji="📡" variant="prp" size="sm">En testing · J{video.daysLive}</StatusPill>
          </div>
          <div style={{ font: '500 12.5px var(--font-sans)', color: 'var(--ink-3)', marginTop: 4 }}>
            {inf.name} · pousseé par Benjamin il y a {video.daysLive}j · audience <b style={{ color: 'var(--ink)' }}>FR · Femmes 22-38</b>
          </div>
        </div>
        <div style={{ textAlign: 'right' }}>
          <div style={{ font: '500 11px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1, marginBottom: 4 }}>Code promo</div>
          <PromoCode code={inf.code} size="lg" />
        </div>
      </Card>

      {/* Recommandation */}
      {signal && (
        <Card style={{
          padding: '12px 18px', marginBottom: 14,
          display: 'flex', alignItems: 'center', gap: 14,
          borderColor: signal === 'scale' ? '#bbe6b5' : '#ffcdc7',
          background: signal === 'scale' ? '#eefbef' : '#fff0ee',
        }}>
          <span style={{ fontSize: 24 }}>{signal === 'scale' ? '↑' : '↓'}</span>
          <div style={{ flex: 1 }}>
            <div style={{ font: '700 14px var(--font-sans)', color: signal === 'scale' ? '#166534' : '#b91c1c' }}>
              {signal === 'scale' ? 'Signal scale — perf au-dessus du seuil' : 'Signal kill — perf en-dessous du seuil'}
            </div>
            <div style={{ font: '500 12px var(--font-sans)', color: 'var(--ink-3)' }}>
              {signal === 'scale'
                ? `CPA ${k.cpa} < cible 25€ · ROAS ${k.roas} > 1.5. Recommandé : ×3 le budget.`
                : `CPA ${k.cpa} > cible 25€ · ROAS ${k.roas} < 1.0. Recommandé : killer la créa.`}
            </div>
          </div>
          {signal === 'scale'
            ? <Btn variant="success" size="lg" onClick={() => setPushTarget({ video, mode: 'scale' })}>🚀 Scaler</Btn>
            : <Btn variant="danger" size="lg" onClick={() => setKillTarget(video)}>❌ Killer</Btn>}
        </Card>
      )}

      {/* KPI grid */}
      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 12, marginBottom: 14 }}>
        {[
          { lbl: 'CTR', val: k.ctr, sub: 'cible · 2,0%', good: signal === 'scale' },
          { lbl: 'CPA', val: k.cpa, sub: 'cible · 25€', good: signal === 'scale' },
          { lbl: 'ROAS', val: k.roas, sub: 'cible · 1,5', good: signal === 'scale' },
          { lbl: 'Spend', val: k.spend, sub: `budget 12€/j` },
        ].map(m => (
          <Card key={m.lbl} style={{ padding: 14 }}>
            <div style={{ font: '600 11px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1 }}>{m.lbl}</div>
            <div style={{ font: '700 28px var(--font-sans)', color: m.good !== undefined ? (m.good ? '#166534' : '#b91c1c') : 'var(--ink)', letterSpacing: -0.5, marginTop: 2 }}>{m.val}</div>
            <div style={{ font: '500 11.5px var(--font-sans)', color: 'var(--ink-3)' }}>{m.sub}</div>
            <div style={{ marginTop: 8 }}>{sparkline(m.good !== undefined ? (m.good ? '#16a34a' : '#dc2626') : 'var(--primary)')}</div>
          </Card>
        ))}
      </div>

      {/* Détails secondaires */}
      <div style={{ display: 'grid', gridTemplateColumns: '1.5fr 1fr', gap: 14 }}>
        {/* Activity log */}
        <Card style={{ padding: 16 }}>
          <div style={{ font: '700 13px var(--font-sans)', marginBottom: 12 }}>Historique de la campagne</div>
          <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>
            {[
              { t: `J${video.daysLive}, 14h`, evt: `Mise à jour KPI auto — CPA ${k.cpa}, CTR ${k.ctr}` },
              { t: `J${video.daysLive-1}, 09h`, evt: 'Première vente détectée — code utilisé' },
              { t: 'J0, 18h', evt: 'Campagne lancée par Benjamin', who: 'Benjamin' },
              { t: 'J0, 18h', evt: 'Audience · FR Femmes 22-38 · 1,8M', who: 'preset' },
            ].map((l, i) => (
              <div key={i} style={{ display: 'grid', gridTemplateColumns: '88px 1fr', gap: 10, font: '500 12.5px var(--font-sans)' }}>
                <span style={{ font: '500 11px var(--font-mono)', color: 'var(--ink-3)' }}>{l.t}</span>
                <span style={{ color: 'var(--ink-2)' }}>{l.evt} {l.who && <span style={{ color: 'var(--ink-3)' }}>· {l.who}</span>}</span>
              </div>
            ))}
          </div>
        </Card>

        {/* Audience + créa */}
        <Card style={{ padding: 16 }}>
          <div style={{ font: '700 13px var(--font-sans)', marginBottom: 10 }}>Audience & créa</div>
          <div style={{ font: '500 12.5px var(--font-sans)', color: 'var(--ink-2)', marginBottom: 6 }}>FR · Femmes 22-38 · bijoux & mode</div>
          <div style={{ font: '500 11.5px var(--font-mono)', color: 'var(--ink-3)', marginBottom: 12 }}>~1,8M personnes · {k.impressions} impressions servies</div>
          <div style={{ display: 'flex', gap: 8, marginTop: 12 }}>
            <Btn variant="ghost" size="sm">Voir la créa →</Btn>
            <Btn variant="ghost" size="sm">Voir audience Meta ↗</Btn>
          </div>
        </Card>
      </div>

      <PushMetaModal open={!!pushTarget} video={pushTarget?.video} mode={pushTarget?.mode} onClose={() => setPushTarget(null)}
        onConfirm={() => { dispatch({ type: 'moveTo', id: video.id, status: 'scaled' }); setPushTarget(null); onBack(); }} />
      <KillModal open={!!killTarget} video={killTarget} onClose={() => setKillTarget(null)}
        onConfirm={({ reason, comment }) => { dispatch({ type: 'moveTo', id: video.id, status: 'killed', extra: { killReason: reason, killNote: comment } }); setKillTarget(null); onBack(); }} />
    </div>
  );
}

// ——— Fiche influenceuse (similaire à Annuaire) ———
function InfluencerScreen({ influencer, allVideos, onBack, onOpenVideo }) {
  if (!influencer) return null;
  const inf = influencer;
  const handleKey = inf.handle.replace('@', '').replace(/[.]/g, '.');
  const herVideos = allVideos.filter(v => window.TA_INFLUENCERS[v.inf]?.handle === inf.handle);

  return (
    <div className="scroll-y" style={{ flex: 1, padding: '0 22px 22px', minHeight: 0 }}>
      <BackBar onBack={onBack} right={
        <span style={{ marginLeft: 'auto', font: '500 11.5px var(--font-sans)', color: 'var(--primary)', cursor: 'pointer' }}>
          Ouvrir dans Annuaire ↗
        </span>
      } />

      {/* Header */}
      <Card style={{ padding: 22, marginBottom: 14 }}>
        <div style={{ display: 'flex', alignItems: 'center', gap: 16 }}>
          <Avatar name={inf.name} size={64} />
          <div style={{ flex: 1, minWidth: 0 }}>
            <div style={{ display: 'flex', alignItems: 'baseline', gap: 10 }}>
              <h1 style={{ margin: 0, font: '700 26px var(--font-sans)', letterSpacing: -0.5 }}>{inf.name}</h1>
              <span style={{ font: '500 14px var(--font-sans)', color: 'var(--ink-3)' }}>{inf.handle}</span>
              <StatusPill emoji="🤝" variant="grn">Active</StatusPill>
            </div>
            <div style={{ font: '500 12.5px var(--font-sans)', color: 'var(--ink-3)', marginTop: 4 }}>
              {inf.tier} · ouverte aux co-créations · dernière activité il y a 1 jour
            </div>
          </div>
          <div style={{ textAlign: 'right' }}>
            <div style={{ font: '500 11px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1, marginBottom: 4 }}>Code promo</div>
            <PromoCode code={inf.code} size="lg" />
          </div>
        </div>

        {/* Stats grid */}
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 12, marginTop: 20, paddingTop: 18, borderTop: '1px solid var(--border)' }}>
          {[
            { lbl: 'Abonnés', val: inf.abonnes },
            { lbl: 'ER', val: inf.er },
            { lbl: 'Vidéos faites', val: inf.videos },
            { lbl: 'CA généré', val: inf.ca },
          ].map(m => (
            <div key={m.lbl}>
              <div style={{ font: '600 11px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1 }}>{m.lbl}</div>
              <div style={{ font: '700 22px var(--font-sans)', marginTop: 2 }}>{m.val}</div>
            </div>
          ))}
        </div>
      </Card>

      {/* Ses vidéos */}
      <div style={{ font: '600 11px var(--font-sans)', color: 'var(--ink-3)', textTransform: 'uppercase', letterSpacing: 1, margin: '4px 4px 8px' }}>
        Ses vidéos dans Testing Ads · {herVideos.length}
      </div>
      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))', gap: 12 }}>
        {herVideos.length === 0 && (
          <Card style={{ padding: 22, textAlign: 'center', font: '500 13px var(--font-sans)', color: 'var(--ink-3)', gridColumn: '1 / -1' }}>
            Aucune vidéo en pipeline.
          </Card>
        )}
        {herVideos.map(v => {
          const s = TA_STATUS_META[v.status];
          return (
            <Card key={v.id} style={{ padding: 8, cursor: 'pointer' }} onClick={() => onOpenVideo(v)}>
              <div style={{ position: 'relative' }}>
                <Thumb ratio={0.9} dur={v.dur} />
                <div style={{ position: 'absolute', top: 8, right: 8 }}>
                  <StatusPill emoji={s.emoji} variant={s.variant} size="sm">{s.short}</StatusPill>
                </div>
              </div>
              <div style={{ padding: '8px 2px 2px', font: '500 11.5px var(--font-mono)', color: 'var(--ink-3)' }}>
                reçue {TA_FORMAT.age(v.receivedHours)}{v.kpi && ` · CTR ${v.kpi.ctr}`}
              </div>
            </Card>
          );
        })}
      </div>
    </div>
  );
}

window.TA_SCREENS = { DetailScreen, AdLiveScreen, InfluencerScreen, BackBar };
