// === 17:00 · El equipo (13s) — el plan en un Gantt: responsables, fechas y Kanban ===
// Coreografía honesta (sin "recálculo de cadenas" — Dinaup no lo soporta, pero SÍ
// soporta arrastrar una tarjeta entre columnas del Kanban — eso es lo que se muestra):
// el Gantt se puebla → hover en una tarea (responsable + fechas en tooltip) →
// clic en el tab Kanban → el cursor agarra «Pruebas» en Pendiente y la suelta en
// «En curso» (contadores de origen/destino se actualizan) → hint «Mi día».
// El slide MUERE en Kanban: no vuelve al Gantt.
// Sincronizado con CAPTIONS.slide_equipo: 0.4-2.6 el proyecto · 2.6-5.2 el Gantt ·
// 5.2-7.6 responsable y fechas · 7.6-10.2 «arrastras la tarjeta y listo» · 10.2-12.6
// «Mi día». dur 13.

function SlideEquipo({ t }){
  const show = (at, dur=0.5) => clamp((t-at)/dur, 0, 1);

  // Interpolador de frames {t,x,y,arc} — misma fórmula que ScriptedCursor (primitives.jsx),
  // reutilizada aquí para que la tarjeta arrastrada comparta trayectoria exacta con el cursor.
  const framePos = (frames, tt) => {
    if (tt <= frames[0].t) return { x:frames[0].x, y:frames[0].y };
    if (tt >= frames[frames.length-1].t) return { x:frames[frames.length-1].x, y:frames[frames.length-1].y };
    for (let i=0;i<frames.length-1;i++){
      if (tt>=frames[i].t && tt<=frames[i+1].t){
        const p = (tt-frames[i].t)/(frames[i+1].t-frames[i].t);
        const e = Easing.easeInOutCubic(p);
        let x = lerp(frames[i].x, frames[i+1].x, e);
        let y = lerp(frames[i].y, frames[i+1].y, e);
        if (frames[i].arc) y -= Math.sin(p*Math.PI) * frames[i].arc;
        return { x, y };
      }
    }
    return { x:frames[frames.length-1].x, y:frames[frames.length-1].y };
  };

  // ---------- Timeline ----------
  const barsT       = 2.7;    // cue 2.6-5.2 · el plan se puebla
  const hoverT      = 5.52;   // cue 5.2-7.6 · el cursor aterriza en «Desarrollo»
  const hoverEnd    = 7.45;   //  …y sale hacia el selector de vistas
  const clickKanban = 7.70;   // cue 7.6-10.2 · clic en el tab «Kanban»…
  const arriveCardT = 8.20;   //  …crossfade al tablero y el cursor llega a «Pruebas»
  const pressT      = 8.35;   //  …pausa 0.15s → PRESS: la tarjeta se levanta
  const dropArriveT = 9.55;   //  …viaje en curva hasta «En curso»
  const dropT       = 9.70;   //  …pausa 0.15s → suelta: la tarjeta se asienta
  const midiaT      = 10.4;   // cue 10.2-12.6 · hint «Mi día»

  // Layout real del grid Kanban (3 columnas dentro del panel — coords del lienzo
  // 1920×1080, calibradas con getBoundingClientRect vía harness de QA):
  const kbColX   = [457, 960, 1463];  // centro x de Pendiente / En curso / Hecho
  const kbCardY  = 451;               // y de la 1ª tarjeta de cada columna («Pruebas»)
  const kbDropY  = 547;               // y de destino en «En curso» (debajo de las 2 existentes)

  const dragging = t >= pressT && t < dropT;
  const dragDone = t >= dropT;
  const dragFrames = [
    { t:pressT,      x:kbColX[0], y:kbCardY },
    { t:dropArriveT, x:kbColX[1], y:kbDropY, arc:55 },
    { t:dropT,       x:kbColX[1], y:kbDropY },
  ];
  const flyPos = dragging ? framePos(dragFrames, t) : null;

  // ---------- Datos (proyecto "Web nueva", 12 → 23 de mayo) ----------
  const days = ['L 12','M 13','X 14','J 15','V 16','L 19','M 20','X 21','J 22','V 23'];
  const tasks = [
    { name:'Diseño',      who:'Marta R.', ini:'MR', start:0, len:3, color:'#0085FF', col:2 },
    { name:'Contenidos',  who:'Jorge M.', ini:'JM', start:2, len:3, color:'#00C1FF', col:1 },
    { name:'Desarrollo',  who:'Lucía P.', ini:'LP', start:3, len:5, color:'#8B5CF6', col:1 },
    { name:'Pruebas',     who:'Dani S.',  ini:'DS', start:7, len:2, color:'#F59E0B', col:0 },
    { name:'Publicación', who:'Marta R.', ini:'MR', start:9, len:1, color:'#FF6751', col:0 },
  ];
  const hoverIdx = 2; // Desarrollo · Lucía P. · 15 → 21 may
  const hovering = t >= hoverT && t < hoverEnd;

  // Vista activa: Gantt → Kanban (click 7.70) y se queda: el slide muere en Kanban.
  const kanbanE     = Easing.easeInOutQuad(clamp((t - clickKanban - 0.05)/0.4, 0, 1));
  const activeView  = t >= clickKanban + 0.08 ? 'Kanban' : 'Gantt';
  const pressKanban = t >= clickKanban && t < clickKanban + 0.18;

  const vistas = ['Gantt','Kanban','Tabla','Lista'];
  const kanbanCols = [
    { name:'Pendiente', dot:'#94A3B8' },
    { name:'En curso',  dot:'#0085FF' },
    { name:'Hecho',     dot:'#10B981' },
  ];

  // Cursor orgánico: entra en curva, aterriza en la barra (pausa larga = hover),
  // sube en arco al selector, click en Kanban, viaja a «Pruebas» (Pendiente),
  // pausa+PRESS, viaje en curva con la tarjeta hasta «En curso», pausa+suelta,
  // y aparca abajo-derecha fuera del foco. Pausa ~0.15s antes de cada click.
  const cursorFrames = [
    { t:4.80,        x:1555,      y:915,     arc:90 },
    { t:hoverT,       x:1060,      y:578 },
    { t:hoverEnd,     x:1060,      y:578,     arc:70 },
    { t:7.55,         x:325,       y:347 },
    { t:clickKanban,  x:325,       y:347 },
    { t:arriveCardT,  x:kbColX[0], y:kbCardY, arc:40 },
    { t:pressT,       x:kbColX[0], y:kbCardY },
    { t:dropArriveT,  x:kbColX[1], y:kbDropY, arc:55 },
    { t:dropT,        x:kbColX[1], y:kbDropY },
    { t:10.65,        x:1620,      y:975,     arc:50 },
  ];

  const winE = Easing.easeOutCubic(show(0.5, 0.7));

  return (
    <SlideCanvas variant="light-soft">
      <TimeBadge t={t} hora="17:00" label="El proyecto del equipo"/>
      <DemoHeader t={t} eyebrow="TAREAS · PROYECTOS" title={<>Todo el proyecto. <span className="grad-text">Cada uno, lo suyo.</span></>}/>

      <div style={{position:'absolute',top:170,left:160,right:160,bottom:305,background:'#fff',borderRadius:12,boxShadow:'0 30px 80px rgba(0,133,255,0.15)',overflow:'hidden',border:'1px solid #E2E8F0',opacity:winE,transform:`translateY(${(1-winE)*22}px)`}}>
        <BrowserChrome url="play.dinaup.com/App/ToDo/Proyecto"/>
        <DinaupAppHeader breadcrumb={["Tareas","Web nueva","Gantt"]}/>

        <div style={{padding:'20px 30px',background:'#FAFBFC',height:'calc(100% - 142px)',display:'flex',flexDirection:'column',gap:13}}>

          {/* Selector de vistas + rango de fechas */}
          <div style={{display:'flex',alignItems:'center',gap:10,opacity:show(0.9,0.5)}}>
            <div style={{display:'flex',background:'#fff',border:'1px solid #E2E8F0',borderRadius:9,padding:3,gap:2}}>
              {vistas.map(v => {
                const active = v === activeView;
                const pressing = v === 'Kanban' && pressKanban;
                return (
                  <span key={v} className="f-plex" style={{display:'inline-block',width:86,textAlign:'center',padding:'6px 0',borderRadius:7,fontSize:12,fontWeight:600,
                    background: active ? 'var(--dn-primary)' : 'transparent',
                    color: active ? '#fff' : '#64748B',
                    transform: pressing ? 'scale(0.93)' : 'scale(1)',
                    transition:'background 200ms, color 200ms, transform 120ms'}}>{v}</span>
                );
              })}
            </div>
            <span style={{fontSize:11,color:'#94A3B8'}}>el mismo proyecto, cuatro vistas</span>
            <div className="f-mono" style={{marginLeft:'auto',padding:'6px 12px',background:'#fff',border:'1px solid #E2E8F0',borderRadius:6,fontSize:11,fontWeight:600,color:'#475569',opacity:show(1.6,0.4)}}>12 → 23 may</div>
          </div>

          {/* Panel: Gantt ⇄ Kanban */}
          <div style={{flex:1,background:'#fff',border:'1px solid #E2E8F0',borderRadius:10,padding:'14px 22px',position:'relative',overflow:'hidden',opacity:show(1.0,0.5)}}>

            {/* === Vista Gantt === */}
            <div style={{display:'flex',flexDirection:'column',height:'100%',opacity:1-kanbanE,transform:`translateY(${-6*kanbanE}px)`}}>
              {/* Cabecera de días */}
              <div className="f-mono" style={{display:'grid',gridTemplateColumns:'200px repeat(10, 1fr)',gap:0,paddingBottom:10,borderBottom:'1px solid #E2E8F0',fontSize:10,color:'#94A3B8',opacity:show(1.1,0.5)}}>
                <div style={{fontWeight:700}}>TAREA</div>
                {days.map(d => <div key={d} style={{textAlign:'center'}}>{d}</div>)}
              </div>

              {/* Filas */}
              <div style={{flex:1,position:'relative',paddingTop:12}}>
                {/* Gridlines verticales sutiles */}
                {[1,2,3,4,5,6,7,8,9].map(k => (
                  <div key={k} style={{position:'absolute',top:0,bottom:0,left:`calc(200px + (100% - 200px)*${k/10})`,width:1,background:'rgba(15,23,42,0.035)'}}/>
                ))}

                {tasks.map((tk, i) => {
                  const rowE  = Easing.easeOutCubic(clamp((t - (1.25 + i*0.14))/0.45, 0, 1));
                  const growE = Easing.easeOutCubic(clamp((t - (barsT + i*0.28))/0.55, 0, 1));
                  const isHover = hovering && i === hoverIdx;
                  const dim = hovering && i !== hoverIdx ? 0.62 : 1;
                  return (
                    <div key={tk.name} style={{display:'flex',alignItems:'center',height:59,borderBottom: i<tasks.length-1?'1px solid #F1F5F9':'none',position:'relative',
                      background: isHover ? 'rgba(0,133,255,0.05)' : 'transparent',
                      opacity: rowE * dim, transition:'opacity 200ms, background 200ms'}}>
                      {/* Tarea + responsable */}
                      <div style={{width:200,flexShrink:0,display:'flex',alignItems:'center',gap:9}}>
                        <span className="f-plex" style={{width:24,height:24,borderRadius:100,background:'#EEF2F7',color:'#475569',display:'inline-flex',alignItems:'center',justifyContent:'center',fontSize:9,fontWeight:700,flexShrink:0}}>{tk.ini}</span>
                        <span>
                          <span className="f-plex" style={{display:'block',fontSize:13,fontWeight:600,color: isHover ? '#0066CC' : '#0F172A',lineHeight:1.15,transition:'color 200ms'}}>{tk.name}</span>
                          <span style={{display:'block',fontSize:10.5,color:'#94A3B8',lineHeight:1.2}}>{tk.who}</span>
                        </span>
                      </div>
                      {/* Barra */}
                      <div style={{flex:1,position:'relative',height:34}}>
                        <div style={{position:'absolute',top:0,bottom:0,left:`${tk.start*10}%`,width:`${tk.len*10}%`,borderRadius:7,background:tk.color,
                          transform:`scaleX(${growE})`,transformOrigin:'left center',
                          display:'flex',alignItems:'center',padding:'0 10px',overflow:'hidden',
                          boxShadow: isHover ? `0 6px 18px ${tk.color}66` : `0 2px 6px ${tk.color}33`,transition:'box-shadow 200ms'}}>
                          <span style={{fontSize:10,fontWeight:700,color:'#fff',whiteSpace:'nowrap',opacity: growE > 0.85 ? 1 : 0,transition:'opacity 150ms'}}>{tk.who}</span>
                        </div>
                      </div>
                    </div>
                  );
                })}

                {/* Tooltip: responsable + fechas de «Desarrollo» */}
                {t >= hoverT + 0.12 && t < hoverEnd + 0.22 && (()=>{
                  const inE  = Easing.easeOutBack(clamp((t - (hoverT + 0.12))/0.4, 0, 1));
                  const outP = clamp((t - hoverEnd)/0.2, 0, 1);
                  return (
                    <div style={{position:'absolute',left:'calc(200px + (100% - 200px)*0.55)',top:hoverIdx*59 - 58,transform:`translateX(-50%) translateY(${(1-inE)*8}px) scale(${lerp(0.85,1,inE)})`,opacity:clamp(inE*1.2,0,1)*(1-outP),zIndex:6}}>
                      <div style={{display:'flex',alignItems:'center',gap:10,padding:'9px 14px',background:'#0F172A',borderRadius:10,boxShadow:'0 12px 32px rgba(15,23,42,0.35)',whiteSpace:'nowrap'}}>
                        <span className="f-plex" style={{width:24,height:24,borderRadius:100,background:'rgba(255,255,255,0.14)',color:'#fff',display:'inline-flex',alignItems:'center',justifyContent:'center',fontSize:9.5,fontWeight:700}}>LP</span>
                        <span className="f-plex" style={{fontSize:12.5,fontWeight:700,color:'#fff'}}>Lucía P.</span>
                        <span style={{width:1,height:16,background:'rgba(255,255,255,0.18)'}}/>
                        <svg width="13" height="13" viewBox="0 0 24 24" fill="none"><rect x="4" y="5.5" width="16" height="14.5" rx="2" stroke="rgba(255,255,255,0.75)" strokeWidth="1.7"/><path d="M4 10 H20 M8.3 3.5 V7 M15.7 3.5 V7" stroke="rgba(255,255,255,0.75)" strokeWidth="1.7"/></svg>
                        <span className="f-mono" style={{fontSize:11.5,fontWeight:600,color:'#BFE0FF'}}>15 may → 21 may</span>
                      </div>
                      <div style={{width:0,height:0,margin:'0 auto',borderLeft:'7px solid transparent',borderRight:'7px solid transparent',borderTop:'7px solid #0F172A'}}/>
                    </div>
                  );
                })()}
              </div>
            </div>

            {/* === Vista Kanban — «Pruebas» se arrastra de Pendiente a En curso === */}
            {kanbanE > 0.01 && (
              <div style={{position:'absolute',inset:'14px 22px',opacity:kanbanE,transform:`translateY(${(1-kanbanE)*10}px)`,display:'grid',gridTemplateColumns:'repeat(3,1fr)',gap:14}}>
                {kanbanCols.map((c, ci) => {
                  const baseCount = tasks.filter(tk => tk.col === ci).length;
                  const count = ci===0 && dragDone ? baseCount-1 : ci===1 && dragDone ? baseCount+1 : baseCount;
                  const justDropped = ci===1 && t >= dropT && t < dropT + 0.9;
                  return (
                  <div key={c.name} data-kanban-col={ci} style={{background:'#F8FAFC',border:'1px solid #EEF2F7',borderRadius:10,padding:'12px 12px'}}>
                    <div style={{display:'flex',alignItems:'center',gap:8,marginBottom:10}}>
                      <span style={{width:8,height:8,borderRadius:100,background:c.dot}}/>
                      <span className="f-plex" style={{fontSize:12.5,fontWeight:700,color:'#0F172A'}}>{c.name}</span>
                      <span className="f-mono" style={{marginLeft:'auto',fontSize:10,fontWeight:600,color:'#94A3B8',background: justDropped || (ci===0 && dragDone && t<dropT+0.9) ? 'rgba(0,133,255,0.12)' : 'transparent',borderRadius:100,padding:'1px 6px',transition:'background 300ms'}}>{count}</span>
                    </div>
                    <div style={{display:'flex',flexDirection:'column',gap:8}}>
                      {tasks.filter(tk => tk.col === ci).map((tk, ti) => {
                        // «Pruebas»: es la tarjeta agarrada — desaparece de Pendiente en cuanto se levanta.
                        if (tk.name === 'Pruebas' && (dragging || dragDone)) {
                          return (ci===0 && ti===0) ? (
                            <div key="placeholder-pruebas" style={{border:'2px dashed #CBD5E1',borderRadius:8,padding:'9px 12px',minHeight:38,background:'rgba(148,163,184,0.06)'}}/>
                          ) : null;
                        }
                        return (
                          <div key={tk.name} data-kanban-card={tk.name} style={{background:'#fff',border:'1px solid #E2E8F0',borderLeft:`3px solid ${tk.color}`,borderRadius:8,padding:'9px 12px',display:'flex',alignItems:'center',gap:8,boxShadow:'0 2px 6px rgba(15,23,42,0.04)'}}>
                            <span className="f-plex" style={{fontSize:12.5,fontWeight:600,color:'#0F172A'}}>{tk.name}</span>
                            <span className="f-plex" style={{marginLeft:'auto',width:22,height:22,borderRadius:100,background:'#EEF2F7',color:'#475569',display:'inline-flex',alignItems:'center',justifyContent:'center',fontSize:9,fontWeight:700}}>{tk.ini}</span>
                          </div>
                        );
                      })}
                      {/* «Pruebas» aterrizando en En curso, tras soltar */}
                      {ci===1 && dragDone && (()=>{
                        const tk = tasks.find(x => x.name==='Pruebas');
                        return (
                          <div data-kanban-card="Pruebas-dropped" style={{background:'#fff',border:'1px solid #E2E8F0',borderLeft:`3px solid ${tk.color}`,borderRadius:8,padding:'9px 12px',display:'flex',alignItems:'center',gap:8,
                            boxShadow: justDropped ? `0 10px 26px ${tk.color}55` : '0 2px 6px rgba(15,23,42,0.04)',
                            animation:'eqCardDrop 0.45s ease-out',transition:'box-shadow 500ms'}}>
                            <span className="f-plex" style={{fontSize:12.5,fontWeight:600,color:'#0F172A'}}>{tk.name}</span>
                            <span className="f-plex" style={{marginLeft:'auto',width:22,height:22,borderRadius:100,background:'#EEF2F7',color:'#475569',display:'inline-flex',alignItems:'center',justifyContent:'center',fontSize:9,fontWeight:700}}>{tk.ini}</span>
                          </div>
                        );
                      })()}
                    </div>
                  </div>
                  );
                })}
              </div>
            )}
          </div>
        </div>

        {/* Hint «Mi día» — toast flotante */}
        {t >= midiaT && (()=>{
          const p = clamp((t - midiaT)/0.55, 0, 1);
          const e = Easing.easeOutBack(p);
          return (
            <div style={{position:'absolute',left:'50%',bottom:12,transform:`translateX(-50%) translateY(${(1-e)*14}px)`,opacity:clamp(p*1.3,0,1),zIndex:7}}>
              <div style={{display:'flex',alignItems:'center',gap:11,padding:'11px 18px',background:'#fff',border:'1px solid rgba(0,133,255,0.30)',borderRadius:12,boxShadow:'0 16px 40px rgba(0,133,255,0.18)',whiteSpace:'nowrap'}}>
                <span style={{width:30,height:30,borderRadius:9,background:'rgba(0,133,255,0.10)',display:'inline-flex',alignItems:'center',justifyContent:'center',flexShrink:0}}>
                  <svg width="16" height="16" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="8.5" stroke="#0085FF" strokeWidth="1.8"/><circle cx="12" cy="12" r="4.5" stroke="#0085FF" strokeWidth="1.8"/><circle cx="12" cy="12" r="1.4" fill="#0085FF"/></svg>
                </span>
                <span className="f-plex" style={{fontSize:13.5,color:'#0F172A'}}><b>«Mi día»</b>: cada uno del equipo ve solo lo suyo, ya filtrado.</span>
              </div>
            </div>
          );
        })()}
      </div>

      {/* Tarjeta volando — agarrada por el cursor, mismo trayecto exacto (coords del lienzo) */}
      {flyPos && (()=>{
        const tk = tasks.find(x => x.name==='Pruebas');
        const p = clamp((t-pressT)/(dropT-pressT), 0, 1);
        return (
          <div style={{position:'absolute',left:flyPos.x-100,top:flyPos.y-19,width:200,padding:'9px 12px',background:'#fff',border:`2px solid ${tk.color}`,borderLeft:`3px solid ${tk.color}`,borderRadius:8,boxShadow:'0 18px 40px rgba(15,23,42,0.28)',transform:`scale(1.03) rotate(${lerp(0,2.5,p)}deg)`,display:'flex',alignItems:'center',gap:8,zIndex:11,pointerEvents:'none'}}>
            <span className="f-plex" style={{fontSize:12.5,fontWeight:600,color:'#0F172A'}}>{tk.name}</span>
            <span className="f-plex" style={{marginLeft:'auto',width:22,height:22,borderRadius:100,background:'#EEF2F7',color:'#475569',display:'inline-flex',alignItems:'center',justifyContent:'center',fontSize:9,fontWeight:700}}>{tk.ini}</span>
          </div>
        );
      })()}

      {/* Cursor */}
      {t >= 4.8 && <ScriptedCursor frames={cursorFrames} t={t} clickTimes={[clickKanban, pressT, dropT]}/>}

      <style>{`
        @keyframes eqCardDrop { 0%{transform:translateY(-12px) scale(1.05);opacity:0} 100%{transform:translateY(0) scale(1);opacity:1} }
      `}</style>
      <SocialCaption t={t} cues={CAPTIONS.slide_equipo}/>
    </SlideCanvas>
  );
}

Object.assign(window, { SlideEquipo });
