// === Escena 06 — «La tabla y los cuatro avisos» + ECO ===  [51.6 s · 12 beats del plan]
//
// LOCUCIÓN (audio/escena-06.mp3): la cuarta vista es la tabla, y trae el primer aviso: está
// acotada solo por el proyecto → segundo: cinco atajos no se escriben en la dirección → tercero:
// el texto buscado sí filtra al abrir el enlace, pero la caja llega vacía → y cuarto: Mi día no
// es una quinta vista → la regla cabe en una línea: lo que no está escrito en la dirección, no
// viaja. Y lo que sí: LA ÚNICA COSA (eco).
//
// Una pieza de formación que esconde los límites fabrica usuarios que se estrellan solos: los
// cuatro avisos son el motivo por el que existe la pieza, no una nota al pie.
//
// FIDELIDAD:
//   · Aviso 1 · `ProjectSubpage.razor:91` monta el `ReportU` con un único `FilterCondition` por
//     proyecto: la rejilla enseña filas que el filtro de arriba excluía. Y no se enseña ni se
//     nombra edición en línea ni selección múltiple: lo que hace `DnzReportGrid` por dentro no
//     está comprobado.
//   · Aviso 2 · los cinco atajos NO se dibujan como parámetros inventados de la dirección: se
//     dibujan como lo que son, cinco filtros que no tienen sitio ahí.
//   · Aviso 3 · los demás chips SÍ se reconstruyen; el texto es el único que filtra a escondidas.
//     Sus dos rastros son el botón de limpiar, que aparece porque ya hay algo puesto, y el
//     marcador, que se acorta a «Buscar...».
//   · Aviso 4 · los grupos de Mi día son POR ESTADO. No existe ningún grupo «Hoy».
function EscenaTV06({ t }){
  const T = {
    tabla:0.1,        // "La cuarta vista es la tabla" -> la rejilla entra
    aviso1:2.9,       // "trae el primer aviso" -> se enciende el 1 del contador
    acotada:4.4,      // "acotada solo por el proyecto" -> las filas que el filtro excluia
    chipsarriba:6.9,  // "Los chips siguen arriba"
    nomira:8.6,       // "la rejilla no los mira" -> los chips se tachan en gris
    aviso2:10.8,      // "Segundo:" -> se enciende el 2
    cinco:11.7,       // "cinco atajos" -> los cinco atajos, en fila
    mistareas:14.9,   // "Mis tareas, sin asignar" -> se van encendiendo uno a uno
    sinasignar:15.9,  // "sin asignar"
    vencidas:16.9,    // "vencidas, esta semana"
    semana:17.7,      // "esta semana"
    prioridad:18.4,   // "prioridad alta"
    compartes:20.2,   // "Si compartes con esos puestos"
    sinellos:22.2,    // "al otro le llega sin ellos" -> la direccion, ampliada, SIN esos filtros
    aviso3:24.5,      // "Tercero:" -> se enciende el 3
    texto:25.3,       // "el texto buscado" -> la barra de quien recibe
    sifiltra:26.2,    // "sí filtra al abrir el enlace" -> las filas ya vienen recortadas
    vaciaCaja:28.9,   // "la caja llega vacía" -> el unico rastro: el boton de limpiar, solo
    porque:31.0,      // "El otro no ve por qué faltan filas"
    aviso4:33.9,      // "Y cuarto:" -> se enciende el 4
    midia:34.7,       // "Mi día no es una quinta vista" -> fuera del marco del proyecto
    otrapantalla:37.1,// "Es otra pantalla, sin barra de filtros"
    agrupada:39.7,    // "agrupada por estado" -> sus grupos literales, en cascada
    regla:41.7,       // "La regla cabe en una línea"
    noescrito:43.7,   // "no está escrito en la dirección" -> la regla, en grande
    ylo:47.0,         // "Y lo que sí"
    eco:49.4,         // "se comparte pegándola" -> ECO: La Unica Cosa entera
    filaStep:0.08,     // cascada entre filas de la rejilla
    atajoStep:0.10,    // cascada entre los cinco atajos
    grupoStep:0.13,    // cascada entre los grupos de Mi dia
  };

  // Ventanas de cada aviso: entran y salen, nunca dos a la vez.
  const AV = [
    { ini:-0.40,     fin:10.45 },
    { ini:10.60,     fin:24.15 },
    { ini:24.30,     fin:33.62 },
    { ini:33.74,     fin:99 },     // el aviso 4 no se retira: se queda de fondo bajo el velo final
  ];
  const vis = (i)=>{
    const p = clamp((t-AV[i].ini)/0.45,0,1), out = clamp((t-AV[i].fin)/0.4,0,1);
    return { p, out, on:p > 0 && out < 1, op:p*(1-out) };
  };
  const encendido = [T.aviso1, T.aviso2, T.aviso3, T.aviso4];

  const reglaP = clamp((t-T.regla)/0.5,0,1);
  const noeE = Easing.easeOutCubic(clamp((t-T.noescrito)/0.6,0,1));
  const ecoVelo = clamp((t-T.ylo)/0.8,0,1);
  const veloFinal = Math.max(clamp((t-T.regla)/0.7,0,1)*0.93, ecoVelo*0.95);
  const e1 = Easing.easeOutCubic(clamp((t-T.ylo)/0.7,0,1));
  const e2 = Easing.easeOutCubic(clamp((t-T.eco)/0.7,0,1));

  const Ico = ({ n, s=24, c='#64748B', sw=2 })=>{
    const Q = {
      lupa:  <><circle cx="11" cy="11" r="6"/><path d="M15.6 15.6 L20 20"/></>,
      filtroOff:<><path d="M3.5 5h17l-6.8 8v5.6l-3.4 1.9V13Z"/><path d="M3 3 L21 21"/></>,
      tabla: <><rect x="3" y="4.5" width="18" height="15" rx="2"/><path d="M3 9.5h18M3 14.5h18M9 4.5v15"/></>,
      dia:   <><circle cx="12" cy="12" r="4"/><path d="M12 2.5v2.6M12 18.9v2.6M2.5 12h2.6M18.9 12h2.6M5.2 5.2l1.9 1.9M16.9 16.9l1.9 1.9M18.8 5.2l-1.9 1.9M7.1 16.9l-1.9 1.9"/></>,
      alerta:<><path d="M12 3.5 21.5 20.5H2.5Z"/><path d="M12 10v4.4"/><circle cx="12" cy="17.6" r="1" fill={c} stroke="none"/></>,
      escudo:<path d="M12 2.5 4.5 6v6c0 5 3.3 8.4 7.5 9.6 4.2-1.2 7.5-4.6 7.5-9.6V6Z"/>,
      chevron:<path d="M6 9.5 L12 15.5 L18 9.5"/>,
      check: <path d="M5 12.5 L10 17 L19 7"/>,
      cerrar:<path d="M6 6 L18 18M18 6 L6 18"/>,
    };
    return <svg width={s} height={s} viewBox="0 0 24 24" fill="none" stroke={c} strokeWidth={sw} strokeLinecap="round" strokeLinejoin="round">{Q[n]}</svg>;
  };

  const CHIPS = [['Abiertas','#DCFCE7','#15803D'],['Marta Ruiz','#E4F1FF','#0B4F86'],['Error','#E4F1FF','#0B4F86']];

  const REJILLA = [
    { cl:'NTO-14', re:'Revisar etiquetas de producto',       tp:'Error',  es:'Pendiente',  qu:'Marta Ruiz',  ve:'Hoy',    pasa:true },
    { cl:'NTO-21', re:'Importar catálogo del proveedor',     tp:'Tarea',  es:'En proceso', qu:'Javier Sanz', ve:'Mañana', pasa:false },
    { cl:'NTO-08', re:'Pasarela de pago en pruebas',         tp:'Tarea',  es:'Pendiente',  qu:'Ana Costa',   ve:'18 ago', pasa:false },
    { cl:'NTO-33', re:'Etiquetas duplicadas en el buscador', tp:'Error',  es:'En proceso', qu:'Marta Ruiz',  ve:'Ayer',   pasa:true },
    { cl:'NTO-05', re:'Fotos de la portada',                 tp:'Mejora', es:'Completado', qu:'Ana Costa',   ve:'21 ago', pasa:false },
    { cl:'NTO-40', re:'Aviso de cookies',                    tp:'Tarea',  es:'Cancelado',  qu:'Javier Sanz', ve:'',       pasa:false },
    { cl:'NTO-27', re:'Etiquetas con acentos rotos',         tp:'Error',  es:'Pendiente',  qu:'Marta Ruiz',  ve:'Hoy',    pasa:true },
    { cl:'NTO-12', re:'Alta del transportista',              tp:'Tarea',  es:'Backlog',    qu:'Ana Costa',   ve:'25 ago', pasa:false },
  ];

  const ATAJOS = [
    { n:'Mis tareas',     on:T.mistareas },
    { n:'Sin asignar',    on:T.sinasignar },
    { n:'Vencidas',       on:T.vencidas },
    { n:'Esta semana',    on:T.semana },
    { n:'Prioridad alta', on:T.prioridad },
  ];

  const GRUPOS = ['En proceso','Pausadas','Pendientes','Completadas','Canceladas','Backlog','Otros'];

  return (
    <SlideCanvas variant="light">
      <DinaupLogo size={34} style={{position:'absolute', left:56, top:46, opacity:0.45, zIndex:6}}/>
      <div style={{opacity:lerp(1,0.2,clamp((t-T.regla)/0.8,0,1))}}>
        <DemoHeader t={t} eyebrow="LA CUARTA VISTA · Y LOS CUATRO AVISOS" title={<span>Lo que no viaja en el enlace</span>}/>
      </div>

      {/* ═════════ El contador de avisos: cuatro, y se van encendiendo ═════════ */}
      {t < T.regla+0.6 && (
        <div style={{position:'absolute', left:0, right:0, top:154, display:'flex', justifyContent:'center', gap:22, zIndex:40,
                     opacity:clamp((T.regla+0.6-t)/0.5,0,1)}}>
          {[0,1,2,3].map(i=>{
            const on = t >= encendido[i];
            const e = Easing.easeOutBack(clamp((t-encendido[i])/0.45,0,1));
            return (
              <span key={i} style={{width:52, height:52, borderRadius:99, display:'inline-flex', alignItems:'center', justifyContent:'center',
                        background:on ? '#B45309' : '#EEF2F6', border:`2px solid ${on ? '#B45309' : '#E2E8F0'}`,
                        boxShadow:on ? '0 8px 22px rgba(180,83,9,0.28)' : 'none',
                        transform:`scale(${on ? lerp(0.6,1,e) : 0.86})`}}>
                <span className="f-plex" style={{fontSize:24, fontWeight:800, color:on ? '#fff' : '#CBD5E1'}}>{i+1}</span>
              </span>
            );
          })}
        </div>
      )}

      {/* ═════════ AVISO 1 · la tabla está acotada solo por el proyecto ═════════ */}
      {vis(0).on && (
        <div style={{position:'absolute', left:300, top:230, width:1320, zIndex:20, opacity:vis(0).op,
                     transform:`translateY(${(1-Easing.easeOutCubic(vis(0).p))*16}px)`}}>
          <div style={{borderRadius:16, overflow:'hidden', background:'#fff', border:'1px solid #E2E8F0',
                       boxShadow:'0 30px 72px rgba(15,23,42,0.15)'}}>
            <BrowserChrome url="play.dinaup.com/App/ToDo/8f3c1d92…/Workitems?q=etiquetas&users=…&types=…" title="Tareas — Nueva tienda online"/>
            {/* los chips siguen arriba… y la rejilla no los mira */}
            <div style={{display:'flex', alignItems:'center', gap:10, height:60, padding:'0 20px', borderBottom:'1px solid #F1F5F9'}}>
              {CHIPS.map((c,i)=>{
                const gris = clamp((t-T.nomira-i*0.10)/0.4,0,1);
                const tacha = Easing.easeInOutCubic(clamp((t-T.nomira-0.12-i*0.10)/0.45,0,1));
                return (
                  <span key={c[0]} style={{position:'relative', display:'inline-flex', alignItems:'center', height:40, padding:'0 16px', borderRadius:20,
                            background:gris > 0 ? '#EEF2F6' : c[1],
                            boxShadow:(t >= T.chipsarriba && t < T.nomira) ? '0 0 0 3px rgba(0,133,255,0.28)' : 'none'}}>
                    <span className="f-plex" style={{fontSize:19, fontWeight:600, color:gris > 0 ? '#94A3B8' : c[2]}}>{c[0]}</span>
                    {tacha > 0 && <span style={{position:'absolute', left:10, right:10, top:'50%', height:3, borderRadius:2,
                                    background:'#94A3B8', transformOrigin:'left', transform:`scaleX(${tacha})`}}/>}
                  </span>
                );
              })}
              <div style={{flex:1}}/>
              {t >= T.nomira && (
                <span className="f-plex" style={{fontSize:19, fontWeight:700, color:'#B45309', opacity:clamp((t-T.nomira)/0.4,0,1)}}>
                  la rejilla no los mira
                </span>
              )}
            </div>
            {/* la rejilla: acotada por un único criterio, el proyecto */}
            <div style={{display:'flex', alignItems:'center', gap:14, height:52, padding:'0 20px', background:'#FBFCFE', borderBottom:'1px solid #EEF2F6'}}>
              <Ico n="tabla" s={20} c="#94A3B8"/>
              <span className="f-plex" style={{fontSize:18, fontWeight:600, color:'#64748B'}}>Tareas</span>
              <span style={{display:'inline-flex', alignItems:'center', gap:8, padding:'6px 14px', borderRadius:8,
                            background:t >= T.acotada ? 'rgba(180,83,9,0.12)' : '#EEF2F6',
                            boxShadow:t >= T.acotada && t < T.acotada+1.8 ? '0 0 0 3px rgba(180,83,9,0.25)' : 'none'}}>
                <span className="f-mono" style={{fontSize:17, fontWeight:700, color:t >= T.acotada ? '#B45309' : '#94A3B8'}}>
                  Proyecto = Nueva tienda online
                </span>
              </span>
              <span className="f-plex" style={{fontSize:17, color:'#94A3B8'}}>· y nada más</span>
            </div>
            <div style={{display:'flex', alignItems:'center', height:48, padding:'0 20px', background:'#F6F8FB', borderBottom:'1px solid #E8EDF3'}}>
              {[['Clave',120],['Resumen',430],['Tipo',130],['Estado',170],['Responsable',210],['Vence',140]].map(h=>(
                <span key={h[0]} className="f-plex" style={{width:h[1], fontSize:17, fontWeight:700, color:'#475569'}}>{h[0]}</span>
              ))}
            </div>
            {REJILLA.map((r,i)=>{
              const e = Easing.easeOutCubic(clamp((t-T.tabla-0.3-i*T.filaStep)/0.4,0,1));
              const marca = !r.pasa ? clamp((t-T.acotada-0.1-i*0.06)/0.4,0,1) : 0;
              return (
                <div key={r.cl} style={{display:'flex', alignItems:'center', height:56, padding:'0 20px',
                             borderBottom:'1px solid #F4F7FA', opacity:e,
                             background:marca > 0 ? `rgba(245,158,11,${0.10*marca})` : 'transparent',
                             borderLeft:`4px solid ${marca > 0 ? '#F59E0B' : 'transparent'}`}}>
                  <span className="f-mono" style={{width:120, fontSize:17, color:'#94A3B8'}}>{r.cl}</span>
                  <span className="f-plex" style={{width:430, fontSize:18, color:'#0F172A', whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis'}}>{r.re}</span>
                  <span className="f-plex" style={{width:130, fontSize:17, color:'#475569'}}>{r.tp}</span>
                  <span className="f-plex" style={{width:170, fontSize:17, color:'#475569'}}>{r.es}</span>
                  <span className="f-plex" style={{width:210, fontSize:17, color:'#475569'}}>{r.qu}</span>
                  <span className="f-plex" style={{width:140, fontSize:17, color:'#94A3B8'}}>{r.ve}</span>
                  {marca > 0.5 && (
                    <span className="f-plex" style={{fontSize:15, fontWeight:700, color:'#B45309', opacity:clamp((marca-0.5)*2,0,1)}}>
                      el filtro la excluía
                    </span>
                  )}
                </div>
              );
            })}
          </div>
        </div>
      )}

      {/* ═════════ AVISO 2 · cinco atajos no se escriben en la dirección ═════════ */}
      {vis(1).on && (
        <div style={{position:'absolute', left:210, top:242, width:1500, zIndex:20, opacity:vis(1).op,
                     transform:`translateY(${(1-Easing.easeOutCubic(vis(1).p))*16}px)`}}>
          <div className="f-plex" style={{textAlign:'center', fontSize:40, fontWeight:700, color:'#0F172A'}}>
            Cinco atajos no se escriben en la dirección
          </div>

          {/* Las dos listas, enfrentadas: lo que cabe en la dirección y lo que no. Los cinco
              atajos NO se dibujan como parámetros: no existen como parámetros. */}
          <div style={{display:'flex', gap:60, marginTop:40}}>
            <div style={{flex:1}}>
              <div className="f-plex" style={{fontSize:19, fontWeight:700, letterSpacing:'2.2px', color:'#0085FF', marginBottom:16}}>
                LO QUE SE ESCRIBE · SEIS CLAVES
              </div>
              {[['q','lo que buscas'],['users','quién la lleva'],['types','de qué tipo es'],
                ['statuses','en qué estado'],['nat','naturaleza'],['open','solo abiertas']].map((k,i)=>{
                const e = Easing.easeOutCubic(clamp((t-T.cinco-0.1-i*0.07)/0.4,0,1));
                return (
                  <div key={k[0]} style={{display:'flex', alignItems:'center', gap:16, height:74, padding:'0 22px', marginBottom:12,
                               borderRadius:12, background:'rgba(0,133,255,0.07)', border:'1px solid rgba(0,133,255,0.28)',
                               opacity:e, transform:`translateX(${(1-e)*-16}px)`}}>
                    <span className="f-mono" style={{width:150, fontSize:24, fontWeight:700, color:'#0085FF'}}>{k[0]}</span>
                    <span className="f-plex" style={{fontSize:21, color:'#475569'}}>{k[1]}</span>
                  </div>
                );
              })}
            </div>

            <div style={{flex:1}}>
              <div className="f-plex" style={{fontSize:19, fontWeight:700, letterSpacing:'2.2px', color:'#B45309', marginBottom:16}}>
                LO QUE NO · CINCO ATAJOS
              </div>
              {ATAJOS.map((a,i)=>{
                const ent = Easing.easeOutBack(clamp((t-T.cinco-0.1-i*T.atajoStep)/0.45,0,1));
                const on = t >= a.on;
                const tacha = clamp((t-T.sinellos-i*0.07)/0.5,0,1);
                return (
                  <div key={a.n} style={{position:'relative', display:'flex', alignItems:'center', gap:16, height:74, padding:'0 22px',
                               marginBottom:12, borderRadius:12,
                               background:on ? '#FEF3C7' : '#F4F6F9', border:`1px solid ${on ? '#F59E0B' : '#E6EAF0'}`,
                               boxShadow:on && t < a.on+1.0 ? `0 0 ${Math.sin(clamp((t-a.on)/1.0,0,1)*Math.PI)*26}px rgba(245,158,11,0.55)` : 'none',
                               opacity:clamp((t-T.cinco-0.1-i*T.atajoStep)/0.4,0,1)*(1-tacha*0.4),
                               transform:`translateX(${(1-ent)*16}px)`}}>
                    <span className="f-plex" style={{flex:1, fontSize:23, fontWeight:700, color:on ? '#B45309' : '#94A3B8'}}>{a.n}</span>
                    <span className="f-mono" style={{fontSize:19, color:'#CBD5E1'}}>sin clave</span>
                    {tacha > 0 && <span style={{position:'absolute', left:14, right:14, top:'50%', height:3, borderRadius:2,
                                    background:'#94A3B8', transformOrigin:'left', transform:`scaleX(${tacha})`}}/>}
                  </div>
                );
              })}
              {t >= T.compartes && (
                <div className="f-plex" style={{fontSize:24, fontWeight:600, color:'#64748B', marginTop:24, lineHeight:1.35,
                             opacity:clamp((t-T.compartes)/0.45,0,1)}}>
                  Si compartes con esos puestos,<br/>al otro <b style={{color:'#B42318'}}>le llega sin ellos</b>.
                </div>
              )}
            </div>
          </div>

          {/* La dirección, tal cual sale: solo lo que sí cabe */}
          {t >= T.sinellos-0.5 && (
            <div style={{marginTop:34, opacity:clamp((t-T.sinellos+0.5)/0.5,0,1),
                         transform:`translateY(${(1-Easing.easeOutBack(clamp((t-T.sinellos+0.5)/0.6,0,1)))*16}px)`}}>
              <div style={{display:'flex', alignItems:'center', gap:14, padding:'20px 28px', borderRadius:22,
                           background:'#fff', border:'2px solid #DADCE0', boxShadow:'0 24px 56px rgba(15,23,42,0.16)'}}>
                <Ico n="escudo" s={26} c="#94A3B8"/>
                <span className="f-mono" style={{fontSize:28, color:'#0F172A', whiteSpace:'nowrap', overflow:'hidden'}}>
                  …/Kanban<span style={{color:'#0085FF'}}>?q=etiquetas&amp;users=</span><span style={{opacity:0.4}}>1d4b8e77-…</span>
                  <span style={{color:'#0085FF'}}>&amp;types=</span><span style={{opacity:0.4}}>6a02f5c1-…</span>
                </span>
              </div>
            </div>
          )}
        </div>
      )}

      {/* ═════════ AVISO 3 · el texto filtra, pero la caja llega vacía ═════════ */}
      {vis(2).on && (
        <div style={{position:'absolute', left:260, top:236, width:1400, zIndex:20, opacity:vis(2).op,
                     transform:`translateY(${(1-Easing.easeOutCubic(vis(2).p))*16}px)`}}>
          <div className="f-plex" style={{textAlign:'center', fontSize:40, fontWeight:700, color:'#0F172A'}}>
            El texto filtra. La caja llega vacía.
          </div>

          {/* La barra tal como le sale a quien abre el enlace */}
          <div style={{marginTop:32, borderRadius:16, background:'#fff', border:'1px solid #E2E8F0',
                       boxShadow:'0 26px 60px rgba(15,23,42,0.14)', padding:'22px 24px'}}>
            <div className="f-plex" style={{fontSize:19, fontWeight:700, letterSpacing:'2.2px', color:'#94A3B8', marginBottom:18}}>
              LA BARRA DE JAVIER, RECIÉN ABIERTO EL ENLACE
            </div>
            <div style={{display:'flex', alignItems:'center', gap:12}}>
              <span style={{flex:1, display:'inline-flex', alignItems:'center', gap:12, height:60, padding:'0 18px', borderRadius:12,
                            border:`2px solid ${t >= T.vaciaCaja ? '#B45309' : '#E2E8F0'}`, background:'#fff',
                            boxShadow:t >= T.vaciaCaja && t < T.vaciaCaja+1.6 ? '0 0 0 5px rgba(180,83,9,0.18)' : 'none'}}>
                <Ico n="lupa" s={24} c="#94A3B8"/>
                {/* el marcador se ha acortado: ya hay algo puesto */}
                <span className="f-plex" style={{fontSize:22, color:'#94A3B8'}}>Buscar...</span>
              </span>
              {/* el otro rastro: el botón de limpiar, que solo sale cuando hay algo puesto */}
              <span style={{width:60, height:60, borderRadius:12, display:'inline-flex', alignItems:'center', justifyContent:'center',
                            background:'#F1F5F9',
                            boxShadow:t >= T.vaciaCaja+0.9 ? '0 0 0 4px rgba(0,133,255,0.28)' : 'none'}}>
                <Ico n="filtroOff" s={26} c="#64748B"/>
              </span>
            </div>
            <div style={{display:'flex', alignItems:'center', gap:10, marginTop:18}}>
              {CHIPS.map(c=>(
                <span key={c[0]} style={{display:'inline-flex', alignItems:'center', height:40, padding:'0 16px', borderRadius:20, background:c[1]}}>
                  <span className="f-plex" style={{fontSize:19, fontWeight:600, color:c[2]}}>{c[0]}</span>
                </span>
              ))}
              <span className="f-plex" style={{fontSize:19, color:'#64748B', marginLeft:10}}>estos sí se reconstruyen</span>
            </div>
          </div>

          {/* Lo que sí ha hecho el texto: recortar la lista, sin decirlo */}
          <div style={{display:'flex', gap:26, marginTop:28}}>
            <div style={{flex:1, padding:'24px 26px', borderRadius:14, background:'rgba(16,185,129,0.09)'}}>
              <div className="f-plex" style={{fontSize:24, fontWeight:700, color:'#047857'}}>Sí filtra</div>
              <div className="f-plex" style={{fontSize:21, color:'#334155', marginTop:10, lineHeight:1.4,
                           opacity:clamp((t-T.sifiltra)/0.5,0,1)}}>
                La lista le llega ya recortada por <span className="f-mono" style={{color:'#0F172A'}}>etiquetas</span>.
              </div>
            </div>
            <div style={{flex:1, padding:'24px 26px', borderRadius:14, background:'rgba(239,68,68,0.08)'}}>
              <div className="f-plex" style={{fontSize:24, fontWeight:700, color:'#B42318'}}>Y no lo dice</div>
              <div className="f-plex" style={{fontSize:21, color:'#334155', marginTop:10, lineHeight:1.4,
                           opacity:clamp((t-T.porque)/0.5,0,1)}}>
                El otro no ve por qué faltan filas.
              </div>
            </div>
          </div>

          {/* Lo que le queda delante: tres filas de ocho, y ni un rastro del porqué */}
          <div style={{marginTop:32, borderRadius:14, overflow:'hidden', background:'#fff', border:'1px solid #E2E8F0'}}>
            {REJILLA.filter(r=>r.pasa).map((r,i)=>{
              const e = Easing.easeOutCubic(clamp((t-T.sifiltra-0.25-i*0.12)/0.45,0,1));
              return (
                <div key={r.cl} style={{display:'flex', alignItems:'center', gap:18, height:64, padding:'0 24px',
                             borderBottom:'1px solid #F4F7FA', opacity:e, transform:`translateY(${(1-e)*10}px)`}}>
                  <span style={{width:24, height:24, borderRadius:99, border:'3px solid #94A3B8'}}/>
                  <span className="f-plex" style={{flex:1, fontSize:21, color:'#0F172A'}}>{r.re}</span>
                  <span className="f-plex" style={{fontSize:16, fontWeight:600, color:'#DC2626', background:'rgba(220,38,38,0.10)', borderRadius:7, padding:'4px 10px'}}>{r.tp}</span>
                  <span className="f-mono" style={{width:86, textAlign:'right', fontSize:17, color:'#94A3B8'}}>{r.cl}</span>
                  <img src="../_engine/assets/avatares/marta.jpg" alt="" style={{width:32, height:32, borderRadius:99, objectFit:'cover'}}/>
                </div>
              );
            })}
            <div style={{display:'flex', alignItems:'center', height:56, padding:'0 24px', background:'#FBFCFE'}}>
              <span className="f-plex" style={{fontSize:20, color:'#94A3B8'}}>tres filas de ocho · y ni un rastro del porqué</span>
            </div>
          </div>
        </div>
      )}

      {/* ═════════ AVISO 4 · Mi día no es una quinta vista ═════════ */}
      {vis(3).on && (
        <div style={{position:'absolute', left:260, top:250, width:1400, zIndex:20, opacity:vis(3).op,
                     transform:`translateY(${(1-Easing.easeOutCubic(vis(3).p))*16}px)`}}>
          <div className="f-plex" style={{textAlign:'center', fontSize:40, fontWeight:700, color:'#0F172A'}}>
            Mi día no es una quinta vista
          </div>
          <div className="f-plex" style={{textAlign:'center', fontSize:24, color:'#64748B', marginTop:12}}>
            Es otra pantalla, fuera del proyecto: tiene todos tus proyectos, no uno.
          </div>

          <div style={{display:'flex', gap:30, marginTop:40}}>
            {/* la pantalla */}
            <div style={{flex:1, borderRadius:16, overflow:'hidden', background:'#fff', border:'1px solid #E2E8F0',
                         boxShadow:'0 26px 60px rgba(15,23,42,0.14)'}}>
              <div style={{display:'flex', alignItems:'center', gap:14, height:74, padding:'0 24px', borderBottom:'1px solid #EEF2F6'}}>
                <Ico n="dia" s={28} c="#0085FF"/>
                <span className="f-plex" style={{fontSize:30, fontWeight:700, color:'#0F172A'}}>Mi día</span>
                <span className="f-mono" style={{fontSize:19, color:'#94A3B8'}}>/App/ToDo/MyDay</span>
              </div>
              {/* donde estaría la barra de filtros, no hay nada */}
              <div style={{position:'relative', display:'flex', alignItems:'center', height:60, padding:'0 24px',
                           background:'#FBFCFE', borderBottom:'1px dashed #E2E8F0'}}>
                <span className="f-plex" style={{fontSize:20, color:'#CBD5E1'}}>barra de filtros</span>
                <span style={{position:'absolute', left:24, width:220, top:'50%', height:3, borderRadius:2, background:'#EF4444',
                              transformOrigin:'left', transform:`scaleX(${Easing.easeInOutCubic(clamp((t-T.otrapantalla)/0.5,0,1))})`}}/>
                <span className="f-plex" style={{marginLeft:'auto', fontSize:19, fontWeight:700, color:'#B42318',
                             opacity:clamp((t-T.otrapantalla)/0.5,0,1)}}>aquí no hay</span>
              </div>
              <div style={{padding:'14px 24px 22px'}}>
                {GRUPOS.map((g,i)=>{
                  const e = Easing.easeOutCubic(clamp((t-T.agrupada-i*T.grupoStep)/0.4,0,1));
                  const abierto = i < 3;   // abiertos por defecto: En proceso, Pendiente y Pausado
                  return (
                    <div key={g} style={{display:'flex', alignItems:'center', gap:12, height:52, borderBottom:'1px solid #F4F7FA',
                                 opacity:e, transform:`translateX(${(1-e)*-14}px)`}}>
                      <span style={{transform:`rotate(${abierto ? 0 : -90}deg)`}}><Ico n="chevron" s={20} c="#94A3B8"/></span>
                      <span className="f-plex" style={{flex:1, fontSize:23, fontWeight:600, color:'#0F172A'}}>{g}</span>
                      <span className="f-mono" style={{fontSize:19, color:'#94A3B8'}}>{[2,1,3,4,1,5,0][i]}</span>
                    </div>
                  );
                })}
              </div>
            </div>

            {/* las tres razones, en corto */}
            <div style={{width:430, display:'flex', flexDirection:'column', gap:16, paddingTop:6}}>
              {[['No está dentro de un proyecto','lee tus tareas de toda la cuenta'],
                ['No tiene barra de filtros','y por tanto no entra en el enlace'],
                ['Agrupa por estado','no por fecha: no existe ningún grupo «Hoy»']].map((r,i)=>{
                const e = Easing.easeOutBack(clamp((t-T.midia-0.4-i*0.28)/0.5,0,1));
                return (
                  <div key={r[0]} style={{padding:'20px 22px', borderRadius:14, background:'#fff', border:'1px solid #E2E8F0',
                               opacity:clamp((t-T.midia-0.4-i*0.28)/0.4,0,1), transform:`translateX(${(1-e)*22}px)`}}>
                    <div className="f-plex" style={{fontSize:24, fontWeight:700, color:'#0F172A', lineHeight:1.25}}>{r[0]}</div>
                    <div className="f-plex" style={{fontSize:19, color:'#64748B', marginTop:8, lineHeight:1.35}}>{r[1]}</div>
                  </div>
                );
              })}
            </div>
          </div>
        </div>
      )}

      {/* ═════════ LA REGLA · un solo velo blanco para la regla y para el eco ═════════
             El aviso 4 sigue debajo, casi apagado: el mismo tratamiento que La Única Cosa en
             las escenas 01 y 04. El lienzo nunca se queda vacío detrás del texto. */}
      {veloFinal > 0.01 && <div style={{position:'absolute', inset:0, background:'#fff', opacity:veloFinal, zIndex:44}}/>}
      {reglaP > 0 && ecoVelo < 1 && (
        <div style={{position:'absolute', left:0, right:0, top:392, textAlign:'center', zIndex:46,
                     opacity:reglaP*(1-ecoVelo)}}>
          <div className="f-plex" style={{fontSize:28, fontWeight:600, letterSpacing:'2.6px', color:'#94A3B8'}}>
            LA REGLA CABE EN UNA LÍNEA
          </div>
          {noeE > 0 && (
            <div className="f-plex" style={{fontSize:62, fontWeight:800, letterSpacing:'-0.03em',
                         color:'#0F172A', lineHeight:1.2, marginTop:34,
                         opacity:noeE, transform:`translateY(${(1-noeE)*18}px)`}}>
              Lo que no está escrito en la dirección,<br/>no viaja.
            </div>
          )}
        </div>
      )}

      {/* ═════════ ECO · La Única Cosa entera, y pantalla fija hasta el corte ═════════ */}
      {e1 > 0 && (
        <div className="f-plex" style={{position:'absolute', left:0, right:0, top:296, textAlign:'center', zIndex:52,
                     fontSize:30, fontWeight:600, letterSpacing:'2.6px', color:'#94A3B8', opacity:e1}}>
          Y LO QUE SÍ
        </div>
      )}
      {e1 > 0 && (
        <div className="f-plex" style={{position:'absolute', left:0, right:0, top:412, textAlign:'center', zIndex:52,
                     fontSize:76, fontWeight:800, letterSpacing:'-0.03em', color:'#0F172A',
                     opacity:e1, transform:`translateY(${(1-e1)*18}px)`}}>
          La dirección es el filtro,
        </div>
      )}
      {e2 > 0 && (
        <div className="f-plex" style={{position:'absolute', left:0, right:0, top:524, textAlign:'center', zIndex:52,
                     fontSize:76, fontWeight:800, letterSpacing:'-0.03em',
                     opacity:e2, transform:`translateY(${(1-e2)*18}px)`}}>
          <span className="grad-text">y se comparte pegándola.</span>
        </div>
      )}
      {e2 > 0 && (
        <div style={{position:'absolute', left:0, right:0, top:700, textAlign:'center', zIndex:52, opacity:e2*0.9}}>
          <DinaupLogo size={44} style={{display:'inline-block', opacity:0.8}}/>
        </div>
      )}
    </SlideCanvas>
  );
}
Object.assign(window, { EscenaTV06 });
