// === 16:40 · Tus agentes (17s) — lista de agentes, entrenar chateando, MCP y gobierno ===
// Reinvención spec-flex-v4 §B. Ventana "Agentes": LISTA en el panel izquierdo
// (4 agentes + «+ Nuevo agente») y chat oscuro a la derecha. María entrena
// «Resumen del día» aplicando la REGLA GLOBAL de chats: el texto se teclea EN LA
// CASILLA de entrada (caret), se envía (la casilla se vacía) y ENTONCES aparece
// la burbuja. El agente memoriza (chip «Memorizado»), el badge MCP se ilumina
// con tooltip, se selecciona «Cloudflare Gastos» (cursor orgánico) y se ve UNA
// línea de su actividad. Beat final: banda de gobierno (permisos por persona).

function SlideAgente({ t }){
  const winShow = clamp((t-0.5)/0.6, 0, 1);

  // --- Timeline (cues slide_agente: 0.5-3.0 crea / 3.0-5.8 lista / 5.8-8.4
  //     entrenar / 8.4-11.2 MCP / 11.2-13.8 Cloudflare / 13.8-16.6 permisos) ---
  const AGENTS = [
    { at:3.15, name:'Cloudflare Gastos',     task:'Revisa gastos cada día',    tile:'#F6821F', icon:'cloud', mcp:true },
    { at:3.75, name:'Resumen del día',       task:'Ventas y caja, cada tarde', tile:'#0085FF', icon:'doc'  },
    { at:4.35, name:'Cobros pendientes',     task:'Reclama facturas vencidas', tile:'#10B981', icon:'coin' },
    { at:4.95, name:'Bienvenida a clientes', task:'Escribe el primer email',   tile:'#8B5CF6', icon:'mail' },
  ];
  const plusAt       = 1.5;    // «+ Nuevo agente» visible desde el beat 1 (crea TUS agentes)
  const click1At     = 6.05;   // click en «Resumen del día»
  const selResumenAt = 6.1;
  const historyAt    = 6.3;    // mensaje previo del agente (contexto del entrenamiento)
  const typeStart    = 6.55;   // se teclea EN LA CASILLA (regla global de chats)
  const typeCps      = 32;
  const sendAt       = 7.8;    // se envía: la casilla se vacía
  const bubbleAt     = 7.9;    // ...y ENTONCES aparece la burbuja en el hilo
  const ackAt        = 8.15;   // el agente confirma y guarda en memoria
  const chipAt       = 8.35;   // chip «Memorizado» en la lista
  const mcpGlowAt    = 8.6;    // beat MCP: el badge se ilumina
  const tipInAt      = 8.8;    // tooltip «Se conecta a servicios externos»
  const tipOutAt     = 10.9;
  const click2At     = 11.45;  // click en «Cloudflare Gastos»
  const selCloudAt   = 11.5;
  const actAt        = 12.15;  // UNA línea de actividad (breve: es un ejemplo)
  const bandAt       = 13.8;   // banda de gobierno
  const trainMsg     = 'A partir de ahora, redondea a euros';

  const sel = t >= selCloudAt ? 'cloud' : (t >= selResumenAt ? 'resumen' : null);
  const nIn = AGENTS.filter(a => t >= a.at + 0.25).length;

  // Texto tecleado en la casilla (se vacía al enviar — nunca se teclea en burbuja)
  const typedN   = Math.floor(Math.max(0, t - typeStart) * typeCps);
  const typedTxt = (t >= typeStart && t < sendAt) ? trainMsg.slice(0, typedN) : '';
  const caretOn  = t >= typeStart && t < sendAt;
  const sendPressed = t >= sendAt && t < sendAt + 0.25;

  // --- Geometría ---
  // Ventana: top 175 · left/right 280 → 1360 ancho, 850 alto. Chrome 76 + app
  // header 66 = 142 → top del grid = 317. Grid: 440px lista · 920px chat.
  // Lista: padding 16/20, cabecera 34 + 12 → filas desde y=379, cada una 64+10.
  // Centros de fila (abs): row0 (Cloudflare) y=411 · row1 (Resumen) y=485. x=500.
  const qbez = (a,c,b,p) => (1-p)*(1-p)*a + 2*(1-p)*p*c + p*p*b;
  const cursorAt = (tt) => {
    const P0 = {x:1150,y:945}, C1 = {x:895,y:610}, P1 = {x:498,y:483}, C2 = {x:566,y:446}, P2 = {x:498,y:409};
    if (tt < 5.3) return null;
    if (tt < 5.9){ // vuelo 1: curva con control lateral + aterrizaje easeInOut
      const p = Easing.easeInOutCubic(clamp((tt-5.3)/0.6, 0, 1));
      return { x:qbez(P0.x,C1.x,P1.x,p), y:qbez(P0.y,C1.y,P1.y,p), o:clamp((tt-5.3)/0.25,0,1) };
    }
    if (tt < 10.8) return { x:P1.x, y:P1.y, o:1 };            // pausa pre-click + reposo mientras teclea
    if (tt < 11.3){ // vuelo 2: salto corto con curva lateral hasta Cloudflare
      const p = Easing.easeInOutCubic(clamp((tt-10.8)/0.5, 0, 1));
      return { x:qbez(P1.x,C2.x,P2.x,p), y:qbez(P1.y,C2.y,P2.y,p), o:1 };
    }
    return { x:P2.x, y:P2.y, o:1-clamp((tt-13.5)/0.5, 0, 1) };
  };
  const cur = cursorAt(t);
  const clicking = (t >= click1At && t < click1At + 0.6) || (t >= click2At && t < click2At + 0.6);

  // --- Iconos SVG (cero emojis en la UI de la demo) ---
  const agIcon = (kind, size) => {
    if (kind === 'cloud') return <svg width={size} height={size} viewBox="0 0 24 24" fill="none"><path d="M7 17 A4.2 4.2 0 0 1 7.6 8.7 A5.4 5.4 0 0 1 18 10.2 A3.6 3.6 0 0 1 17.4 17 Z" fill="#fff"/></svg>;
    if (kind === 'doc')   return <svg width={size} height={size} viewBox="0 0 24 24" fill="none"><rect x="5.5" y="3.5" width="13" height="17" rx="2" stroke="#fff" strokeWidth="1.7"/><path d="M9 8.5 H15 M9 12 H15 M9 15.5 H12.5" stroke="#fff" strokeWidth="1.7" strokeLinecap="round"/></svg>;
    if (kind === 'coin')  return <svg width={size} height={size} viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="8.4" stroke="#fff" strokeWidth="1.7"/><path d="M15.2 9.2 A4 4 0 1 0 15.2 14.8" stroke="#fff" strokeWidth="1.7" strokeLinecap="round"/><path d="M8 11 H12.6 M8 13.2 H12" stroke="#fff" strokeWidth="1.5" strokeLinecap="round"/></svg>;
    return <svg width={size} height={size} viewBox="0 0 24 24" fill="none"><rect x="3.5" y="6" width="17" height="12.5" rx="2.2" stroke="#fff" strokeWidth="1.7"/><path d="M4.5 7.5 L12 13 L19.5 7.5" stroke="#fff" strokeWidth="1.7" strokeLinecap="round" strokeLinejoin="round"/></svg>;
  };
  const robotSvg = (size) => (
    <svg width={size} height={size} viewBox="0 0 24 24" fill="none">
      <path d="M12 3 V6" stroke="#fff" strokeWidth="1.7" strokeLinecap="round"/>
      <circle cx="12" cy="2.6" r="1.3" fill="#fff"/>
      <rect x="5" y="6.5" width="14" height="11" rx="3.2" stroke="#fff" strokeWidth="1.7"/>
      <circle cx="9.4" cy="11.4" r="1.35" fill="#fff"/>
      <circle cx="14.6" cy="11.4" r="1.35" fill="#fff"/>
      <path d="M9.4 14.8 H14.6" stroke="#fff" strokeWidth="1.6" strokeLinecap="round"/>
      <path d="M3 10.5 V13.5 M21 10.5 V13.5" stroke="#fff" strokeWidth="1.7" strokeLinecap="round"/>
    </svg>
  );
  const sparkSvg = (size, color) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none"><path d="M12 2 L14 9 L21 11 L14 13 L12 20 L10 13 L3 11 L10 9 Z" fill={color}/></svg>;
  const checkSvg = (size, color) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none"><path d="M4.5 12.5 L9.8 17.8 L19.5 6.5" stroke={color} strokeWidth="2.6" strokeLinecap="round" strokeLinejoin="round"/></svg>;
  const plugSvg = (
    <svg width="13" height="13" viewBox="0 0 24 24" fill="none" style={{flexShrink:0}}>
      <path d="M9 3.5 V8 M15 3.5 V8" stroke="#7DD3FC" strokeWidth="1.8" strokeLinecap="round"/>
      <path d="M7 8 H17 V11 A5 5 0 0 1 7 11 Z" stroke="#7DD3FC" strokeWidth="1.8" strokeLinejoin="round"/>
      <path d="M12 16 V20.5" stroke="#7DD3FC" strokeWidth="1.8" strokeLinecap="round"/>
    </svg>
  );

  // Opacidades de vistas del panel derecho
  const emptyOp   = clamp((t-1.4)/0.5, 0, 1) * clamp((selResumenAt-t)/0.25, 0, 1);
  const resumenOp = clamp((t-(selResumenAt+0.1))/0.35, 0, 1) * (1 - clamp((t-selCloudAt)/0.3, 0, 1));
  const cloudOp   = clamp((t-(selCloudAt+0.15))/0.35, 0, 1);
  const headerOp  = clamp((t-(selResumenAt+0.1))/0.3, 0, 1);

  return (
    <SlideCanvas variant="light">
      <TimeBadge t={t} hora="16:40" label="Tus agentes"/>
      <DemoHeader t={t} eyebrow="AGENTES · CREA LOS TUYOS" title={<>Tus agentes. <span className="grad-text">Tus tareas. Tus permisos.</span></>}/>

      {/* ===== Ventana Agentes ===== */}
      <div style={{position:'absolute',top:175,left:280,right:280,bottom:55,background:'#fff',borderRadius:12,boxShadow:'0 30px 80px rgba(0,133,255,0.15)',overflow:'hidden',border:'1px solid #E2E8F0',opacity:winShow,transform:`translateY(${(1-winShow)*20}px)`}}>
        <BrowserChrome url="play.dinaup.com/App/Agentes" title="Agentes — Dinaup"/>
        <DinaupAppHeader breadcrumb={["Agentes"]}/>

        <div style={{display:'grid',gridTemplateColumns:'440px 1fr',height:'calc(100% - 142px)'}}>

          {/* IZQUIERDA — lista de agentes */}
          <div style={{background:'#FAFBFC',borderRight:'1px solid #E2E8F0',padding:'16px 20px',overflow:'hidden'}}>
            <div style={{height:34,display:'flex',alignItems:'center',justifyContent:'space-between',marginBottom:12,opacity:clamp((t-1.1)/0.5,0,1)}}>
              <div className="f-plex" style={{fontSize:18,fontWeight:700,color:'#0F172A',letterSpacing:'-0.02em'}}>Agentes</div>
              <span className="f-mono" style={{fontSize:9.5,fontWeight:600,color:'#94A3B8',letterSpacing:1}}>{nIn} ACTIVOS</span>
            </div>

            {AGENTS.map((a,i)=>{
              const p = clamp((t-a.at)/0.45, 0, 1);
              const e = Easing.easeOutCubic(p);
              const selP = (i===1)
                ? clamp((t-selResumenAt)/0.3,0,1) * (1 - clamp((t-selCloudAt)/0.3,0,1))
                : (i===0 ? clamp((t-selCloudAt)/0.3,0,1) : 0);
              const isSel = selP > 0.5;
              const mcpOn = a.mcp && t >= mcpGlowAt;
              const mcpPulse = a.mcp ? 1 + 0.14*Math.sin(clamp((t-mcpGlowAt)/0.5,0,1)*Math.PI) : 1;
              const chipP = (i===1) ? clamp((t-chipAt)/0.45, 0, 1) : 0;
              const chipE = Easing.easeOutBack(chipP);
              return (
                <div key={i} style={{height:lerp(0,64,e),marginBottom:lerp(0,10,e),overflow:'hidden',opacity:clamp(p*1.4,0,1)}}>
                  <div style={{height:64,display:'flex',alignItems:'center',gap:12,padding:'0 14px',borderRadius:12,
                    background: isSel ? '#F0F7FF' : '#fff',
                    border:`1px solid ${isSel ? 'rgba(0,133,255,0.45)' : '#E2E8F0'}`,
                    boxShadow: isSel ? `0 4px 16px rgba(0,133,255,${0.14*selP})` : '0 2px 8px rgba(15,23,42,0.05)',
                    transform:`translateX(${(1-e)*-18}px)`}}>
                    <div style={{width:40,height:40,borderRadius:11,background:a.tile,display:'flex',alignItems:'center',justifyContent:'center',flexShrink:0,position:'relative'}}>
                      {agIcon(a.icon, 20)}
                      <span style={{position:'absolute',right:-2,bottom:-2,width:10,height:10,borderRadius:100,background:'#10B981',border:'2px solid #FAFBFC'}}/>
                    </div>
                    <div style={{flex:1,minWidth:0}}>
                      <div style={{display:'flex',alignItems:'center',gap:8}}>
                        <span className="f-plex" style={{fontSize:14,fontWeight:700,color:'#0F172A',whiteSpace:'nowrap'}}>{a.name}</span>
                        {a.mcp && (
                          <span className="f-mono" style={{fontSize:8.5,fontWeight:700,letterSpacing:1,padding:'2px 7px',borderRadius:100,flexShrink:0,
                            background: mcpOn ? 'rgba(246,130,31,0.14)' : 'rgba(148,163,184,0.12)',
                            border:`1px solid ${mcpOn ? 'rgba(246,130,31,0.55)' : '#E2E8F0'}`,
                            color: mcpOn ? '#C2410C' : '#64748B',
                            boxShadow: mcpOn ? '0 0 14px rgba(246,130,31,0.35)' : 'none',
                            transform:`scale(${mcpPulse})`}}>MCP</span>
                        )}
                      </div>
                      <div style={{fontSize:10.5,color:'#64748B',marginTop:2,whiteSpace:'nowrap'}}>{a.task}</div>
                    </div>
                    {chipP > 0 && (
                      <span style={{display:'inline-flex',alignItems:'center',gap:5,padding:'4px 9px',borderRadius:100,background:'rgba(16,185,129,0.10)',border:'1px solid rgba(16,185,129,0.4)',flexShrink:0,
                        opacity:clamp(chipP*1.3,0,1),transform:`scale(${lerp(0.6,1,chipE)})`}}>
                        {sparkSvg(10, '#059669')}
                        <span className="f-mono" style={{fontSize:9.5,fontWeight:700,color:'#059669',letterSpacing:0.5}}>Memorizado</span>
                      </span>
                    )}
                  </div>
                </div>
              );
            })}

            {/* «+ Nuevo agente» — presente desde el beat 1: la lista se crea */}
            {(()=>{
              const p = clamp((t-plusAt)/0.5, 0, 1);
              const e = Easing.easeOutCubic(p);
              const pulse = (t > 1.9 && t < 3.1) ? Math.abs(Math.sin((t-1.9)*Math.PI/0.6)) * clamp((3.1-t)/0.4,0,1) : 0;
              return (
                <div style={{height:52,display:'flex',alignItems:'center',justifyContent:'center',gap:9,borderRadius:12,
                  border:'1.5px dashed #C6CFDB',background:'#fff',
                  boxShadow:`0 0 0 ${4*pulse}px rgba(0,133,255,${0.15*pulse})`,
                  opacity:e,transform:`translateY(${(1-e)*8}px)`}}>
                  <svg width="15" height="15" viewBox="0 0 24 24" fill="none"><path d="M12 5 V19 M5 12 H19" stroke="#0085FF" strokeWidth="2.2" strokeLinecap="round"/></svg>
                  <span className="f-plex" style={{fontSize:13.5,fontWeight:600,color:'#475569'}}>Nuevo agente</span>
                </div>
              );
            })()}
          </div>

          {/* DERECHA — chat con el agente seleccionado */}
          <div style={{background:'#0F172A',color:'#fff',position:'relative',overflow:'hidden'}}>
            <div style={{position:'absolute',inset:0,background:'radial-gradient(circle at 18% 15%, rgba(0,133,255,0.16), transparent 50%), radial-gradient(circle at 85% 85%, rgba(139,92,246,0.14), transparent 45%)',pointerEvents:'none'}}/>

            {/* Cabecera del chat (cambia con la selección) */}
            <div style={{position:'absolute',top:0,left:0,right:0,height:62,borderBottom:'1px solid rgba(255,255,255,0.08)',opacity:headerOp}}>
              {/* Resumen del día */}
              <div style={{position:'absolute',inset:0,padding:'0 18px',display:'flex',alignItems:'center',gap:11,opacity:resumenOp > 0 ? 1 : 0}}>
                <div style={{width:32,height:32,borderRadius:10,background:'#0085FF',display:'flex',alignItems:'center',justifyContent:'center',boxShadow:'0 0 22px rgba(0,133,255,0.4)',flexShrink:0,opacity:resumenOp}}>
                  {agIcon('doc', 17)}
                </div>
                <div style={{flex:1,minWidth:0,opacity:resumenOp}}>
                  <div className="f-plex" style={{fontSize:14,fontWeight:700}}>Resumen del día <span style={{fontSize:9,color:'rgba(255,255,255,0.5)',fontWeight:500,marginLeft:6,padding:'2px 7px',background:'rgba(255,255,255,0.08)',borderRadius:100,letterSpacing:0.5}}>AGENTE</span></div>
                  <div style={{fontSize:10.5,color:'rgba(255,255,255,0.5)',marginTop:2,display:'flex',alignItems:'center',gap:6}}>
                    <span style={{width:6,height:6,borderRadius:100,background:'#10B981',boxShadow:'0 0 6px #10B981'}}/>
                    Activo · aprende de ti
                  </div>
                </div>
              </div>
              {/* Cloudflare Gastos */}
              <div style={{position:'absolute',inset:0,padding:'0 18px',display:'flex',alignItems:'center',gap:11,opacity:cloudOp}}>
                <div style={{width:32,height:32,borderRadius:10,background:'#F6821F',display:'flex',alignItems:'center',justifyContent:'center',boxShadow:'0 0 22px rgba(246,130,31,0.4)',flexShrink:0}}>
                  {agIcon('cloud', 17)}
                </div>
                <div style={{flex:1,minWidth:0}}>
                  <div className="f-plex" style={{fontSize:14,fontWeight:700}}>Cloudflare Gastos <span style={{fontSize:9,color:'rgba(255,255,255,0.5)',fontWeight:500,marginLeft:6,padding:'2px 7px',background:'rgba(255,255,255,0.08)',borderRadius:100,letterSpacing:0.5}}>AGENTE · MCP</span></div>
                  <div style={{fontSize:10.5,color:'rgba(255,255,255,0.5)',marginTop:2,display:'flex',alignItems:'center',gap:6}}>
                    <span style={{width:6,height:6,borderRadius:100,background:'#10B981',boxShadow:'0 0 6px #10B981'}}/>
                    Activo · conectado por MCP
                  </div>
                </div>
              </div>
            </div>

            {/* Estado vacío — antes de elegir agente */}
            {emptyOp > 0.01 && (
              <div style={{position:'absolute',inset:'62px 0 56px',display:'flex',flexDirection:'column',alignItems:'center',justifyContent:'center',gap:14,opacity:emptyOp}}>
                <div style={{width:64,height:64,borderRadius:100,border:'1.5px dashed rgba(255,255,255,0.22)',display:'flex',alignItems:'center',justifyContent:'center'}}>
                  {robotSvg(30)}
                </div>
                <div style={{textAlign:'center'}}>
                  <div className="f-plex" style={{fontSize:15,fontWeight:600,color:'rgba(255,255,255,0.75)'}}>Elige un agente de la lista</div>
                  <div style={{fontSize:11.5,color:'rgba(255,255,255,0.40)',marginTop:5}}>o crea uno nuevo para tu tarea</div>
                </div>
              </div>
            )}

            {/* Vista Resumen del día — entrenamiento por chat */}
            {resumenOp > 0.01 && (
              <div style={{position:'absolute',top:62,left:0,right:0,bottom:56,padding:'16px 18px',display:'flex',flexDirection:'column',gap:12,overflow:'hidden',opacity:resumenOp}}>
                {/* Mensaje previo del agente (contexto) */}
                {t >= historyAt && (()=>{
                  const p = clamp((t-historyAt)/0.4, 0, 1);
                  return (
                    <div style={{alignSelf:'flex-start',maxWidth:540,opacity:p,transform:`translateY(${(1-Easing.easeOutCubic(p))*8}px)`}}>
                      <div className="f-plex" style={{fontSize:10.5,fontWeight:600,color:'rgba(255,255,255,0.55)',marginBottom:6}}>Resumen del día · hoy 16:32</div>
                      <div style={{background:'rgba(255,255,255,0.06)',border:'1px solid rgba(255,255,255,0.10)',borderRadius:'14px 14px 14px 4px',padding:'10px 13px',fontSize:13,color:'#fff',lineHeight:1.45}}>
                        Ventas de hoy: <span style={{fontWeight:700}}>1.847,60 €</span> · 96 tickets
                      </div>
                    </div>
                  );
                })()}

                {/* Burbuja de María — aparece SOLO tras enviar (regla global) */}
                {t >= bubbleAt && (()=>{
                  const p = clamp((t-bubbleAt)/0.4, 0, 1);
                  return (
                    <div style={{alignSelf:'flex-end',maxWidth:540,opacity:p,transform:`translateY(${(1-Easing.easeOutCubic(p))*8}px)`}}>
                      <div style={{display:'flex',alignItems:'center',justifyContent:'flex-end',gap:7,marginBottom:6}}>
                        <span className="f-plex" style={{fontSize:10.5,fontWeight:600,color:'rgba(255,255,255,0.55)'}}>María · Contabilidad</span>
                        <div style={{width:20,height:20,borderRadius:100,background:'linear-gradient(135deg,#0085FF,#56E16A)',display:'flex',alignItems:'center',justifyContent:'center',fontSize:9.5,fontWeight:700,color:'#fff',fontFamily:"'IBM Plex Sans',sans-serif"}}>M</div>
                      </div>
                      <div style={{background:'rgba(0,133,255,0.18)',border:'1px solid rgba(0,133,255,0.35)',borderRadius:'14px 14px 4px 14px',padding:'10px 13px',fontSize:13,color:'#fff',lineHeight:1.45}}>
                        {trainMsg}
                      </div>
                    </div>
                  );
                })()}

                {/* Confirmación del agente + memoria */}
                {t >= ackAt && (()=>{
                  const p = clamp((t-ackAt)/0.45, 0, 1);
                  return (
                    <div style={{alignSelf:'flex-start',maxWidth:540,opacity:p,transform:`translateY(${(1-Easing.easeOutCubic(p))*8}px)`}}>
                      <div style={{background:'rgba(255,255,255,0.06)',border:'1px solid rgba(255,255,255,0.10)',borderRadius:'14px 14px 14px 4px',padding:'10px 13px'}}>
                        <div style={{fontSize:13,color:'#fff',lineHeight:1.45}}>Anotado. Desde ahora: <span style={{fontWeight:700}}>1.848 €</span>.</div>
                        <div style={{display:'flex',alignItems:'center',gap:6,marginTop:8,paddingTop:8,borderTop:'1px solid rgba(255,255,255,0.08)',opacity:clamp((t-ackAt-0.25)/0.3,0,1)}}>
                          {sparkSvg(11, '#34D399')}
                          <span className="f-mono" style={{fontSize:9.5,fontWeight:600,color:'#34D399',letterSpacing:0.8}}>Guardado en memoria</span>
                        </div>
                      </div>
                    </div>
                  );
                })()}
              </div>
            )}

            {/* Vista Cloudflare Gastos — UNA línea de actividad (es un ejemplo) */}
            {cloudOp > 0.01 && (
              <div style={{position:'absolute',top:62,left:0,right:0,bottom:56,padding:'18px 20px',overflow:'hidden',opacity:cloudOp}}>
                <div className="f-mono" style={{fontSize:9,fontWeight:700,letterSpacing:2,color:'rgba(255,255,255,0.45)',textTransform:'uppercase',opacity:clamp((t-(actAt-0.2))/0.3,0,1)}}>Actividad de hoy</div>
                {t >= actAt && (()=>{
                  const p = clamp((t-actAt)/0.45, 0, 1);
                  return (
                    <div style={{marginTop:10,display:'flex',alignItems:'center',gap:12,padding:'14px 16px',background:'rgba(255,255,255,0.06)',border:'1px solid rgba(255,255,255,0.10)',borderRadius:12,opacity:p,transform:`translateY(${(1-Easing.easeOutCubic(p))*10}px)`}}>
                      <div style={{width:28,height:28,borderRadius:8,background:'rgba(16,185,129,0.16)',border:'1px solid rgba(16,185,129,0.4)',display:'flex',alignItems:'center',justifyContent:'center',flexShrink:0}}>
                        {checkSvg(14, '#10B981')}
                      </div>
                      <div style={{flex:1,fontSize:13.5,color:'#fff'}}><span style={{fontWeight:700}}>12 cargos</span> revisados · <span style={{fontWeight:700}}>1 gasto</span> registrado</div>
                      <span className="f-mono" style={{fontSize:10,color:'rgba(255,255,255,0.45)'}}>16:38</span>
                    </div>
                  );
                })()}
              </div>
            )}

            {/* Casilla de entrada — aquí se teclea (regla global de chats) */}
            <div style={{position:'absolute',left:0,right:0,bottom:0,height:56,padding:'0 14px',borderTop:'1px solid rgba(255,255,255,0.08)',background:'rgba(0,0,0,0.25)',display:'flex',alignItems:'center'}}>
              <div style={{flex:1,display:'flex',alignItems:'center',gap:9,background:'rgba(255,255,255,0.05)',border:`1px solid ${caretOn ? 'rgba(0,133,255,0.45)' : 'rgba(255,255,255,0.1)'}`,borderRadius:10,padding:'7px 10px'}}>
                <svg width="13" height="13" viewBox="0 0 24 24" fill="none" style={{opacity:0.55,flexShrink:0}}><path d="M20 11 L11.5 19.5 A5 5 0 0 1 4.5 12.5 L13 4 A3.5 3.5 0 0 1 18 9 L9.8 17.2 A2 2 0 0 1 7 14.4 L14.5 7" stroke="#fff" strokeWidth="1.6" strokeLinecap="round"/></svg>
                {typedTxt !== '' || caretOn
                  ? <span style={{flex:1,color:'#fff',fontSize:11.5,whiteSpace:'nowrap',overflow:'hidden'}}>{typedTxt}{caretOn && <span className="caret"/>}</span>
                  : <span style={{flex:1,color:'rgba(255,255,255,0.45)',fontSize:11.5}}>Escribe al agente en tus palabras…</span>}
                <span style={{padding:'4px 9px',background: sendPressed ? '#0066CC' : 'var(--dn-primary)',borderRadius:6,color:'#fff',fontSize:10.5,fontWeight:600,transform:`scale(${sendPressed ? 0.86 : 1})`,boxShadow: sendPressed ? '0 0 0 5px rgba(0,133,255,0.30)' : 'none'}}>↑</span>
              </div>
            </div>
          </div>
        </div>

        {/* Tooltip MCP — sobre el badge de Cloudflare Gastos (coords rel. ventana) */}
        {t >= tipInAt && t < tipOutAt + 0.3 && (()=>{
          const inP  = clamp((t-tipInAt)/0.35, 0, 1);
          const outP = clamp((tipOutAt + 0.3 - t)/0.3, 0, 1);
          const p = Math.min(Easing.easeOutBack(inP), outP);
          return (
            <div style={{position:'absolute',left:230,top:176,transform:`translateX(-50%) translateY(${(1-clamp(p,0,1))*6}px)`,opacity:clamp(p,0,1),zIndex:25,pointerEvents:'none'}}>
              <div style={{display:'flex',alignItems:'center',gap:7,background:'rgba(15,23,42,0.95)',border:'1px solid rgba(0,133,255,0.40)',borderRadius:9,padding:'7px 12px',boxShadow:'0 10px 26px rgba(15,23,42,0.35)',whiteSpace:'nowrap'}}>
                {plugSvg}
                <span className="f-plex" style={{fontSize:12,fontWeight:600,color:'#E0F2FE'}}>Se conecta a servicios externos</span>
              </div>
              <div style={{width:9,height:9,background:'#131E32',borderRight:'1px solid rgba(0,133,255,0.40)',borderBottom:'1px solid rgba(0,133,255,0.40)',transform:'rotate(45deg)',margin:'-5px auto 0'}}/>
            </div>
          );
        })()}
      </div>

      {/* ===== Banda de gobierno (beat final) ===== */}
      {t >= bandAt && (()=>{
        const p = clamp((t-bandAt)/0.5, 0, 1);
        const e = Easing.easeOutCubic(p);
        const p1 = clamp((t-(bandAt+0.4))/0.5, 0, 1);
        const p2 = clamp((t-(bandAt+1.4))/0.5, 0, 1);
        return (
          <div style={{position:'absolute',left:0,right:0,bottom:0,height:114,zIndex:30,background:'linear-gradient(180deg, rgba(15,23,42,0.97), #0B1220)',borderTop:'1px solid rgba(255,255,255,0.08)',boxShadow:'0 -18px 50px rgba(15,23,42,0.35)',display:'flex',alignItems:'center',justifyContent:'center',gap:22,opacity:e,transform:`translateY(${(1-e)*40}px)`}}>
            <div style={{width:42,height:42,borderRadius:12,background:'linear-gradient(135deg,#0085FF,#56E16A)',display:'flex',alignItems:'center',justifyContent:'center',flexShrink:0,boxShadow:'0 0 24px rgba(0,133,255,0.4)'}}>
              <svg width="20" height="20" viewBox="0 0 24 24" fill="none">
                <rect x="5" y="10.5" width="14" height="9.5" rx="2.4" stroke="#fff" strokeWidth="1.8"/>
                <path d="M8 10.5 V7.5 A4 4 0 0 1 16 7.5 V10.5" stroke="#fff" strokeWidth="1.8"/>
                <circle cx="12" cy="15.2" r="1.5" fill="#fff"/>
              </svg>
            </div>
            <span className="f-plex" style={{fontSize:21,fontWeight:500,color:'rgba(255,255,255,0.82)',letterSpacing:'-0.015em',opacity:p1,transform:`translateY(${(1-Easing.easeOutCubic(p1))*8}px)`}}>
              Cuatro agentes, <span style={{fontWeight:700,color:'#fff'}}>cero contraseñas repartidas</span>
            </span>
            <span style={{width:1,height:28,background:'rgba(255,255,255,0.18)',opacity:Math.min(p1,p2)}}/>
            <span className="f-plex" style={{fontSize:21,fontWeight:500,color:'rgba(255,255,255,0.82)',letterSpacing:'-0.015em',opacity:p2,transform:`translateY(${(1-Easing.easeOutCubic(p2))*8}px)`}}>
              Cada uno actúa <span style={{fontWeight:700,color:'#fff'}}>con los permisos de quien lo creó</span>
            </span>
          </div>
        );
      })()}

      {/* Cursor orgánico: curva + aterrizaje + pausa pre-click + anillo */}
      {cur && cur.o > 0.01 && (
        <div style={{opacity:cur.o}}>
          <CineCursor x={cur.x} y={cur.y} clicking={clicking}/>
        </div>
      )}

      <SocialCaption t={t} cues={CAPTIONS.slide_agente}/>
    </SlideCanvas>
  );
}

Object.assign(window, { SlideAgente });
