// === Escena 02 — "Por dónde empezar" (la raya azul, los filtros, el análisis) ===
// La raya exige DOS condiciones a la vez (Conciliar40Service.cs:559-609), y por eso significa algo:
// se enseña el contraejemplo (dos facturas del mismo importe) y el ANTES (media lista azul).
// El concepto sale en CRUDO hasta que alguien pulsa analizar: la IA es de cuota, no es el estado base.
function EscenaCN02({ t }){
  // LOCUCIÓN (audio/escena-02.mp3): por los fáciles → ya te los ha marcado → la raya azul →
  // dice dos cosas → una sola operación al céntimo → y coincide algo más: su número, o el cliente
  // que tú pusiste → si comparten importe, no hay raya → antes media lista salía azul →
  // arriba tienes con qué acotar → solo pendientes ya viene puesto → galimatías → pulsa analizar.
  const T = {
    head:0.17,       // "Por los fáciles"
    lista:1.53,      // "ya te los ha marcado"
    raya:3.51,       // "la raya azul del borde"
    nodeco:4.92,     // "No es decoración"
    dos:6.85,        // "dice dos cosas a la vez"
    c1:8.43,         // "una sola operación pendiente que cuadra al céntimo"
    c2:12.45,        // "y que además coincide algo más"
    senalA:13.89,    // "su número escrito en el concepto"
    senalB:15.89,    // "el cliente que tú le pusiste"
    contra:18.55,    // "si dos facturas comparten el mismo importe"
    antes:23.41,     // "media lista salía azul"
    nada:27.26,      // "no dice nada"
    filtros:28.64,   // "Arriba tienes con qué acotar"
    pendientes:30.44,// "Solo pendientes ya viene puesto"
    galima:34.7,     // "son un galimatías"
    analizar:35.74,  // "pulsa analizar"
    azul:37.19,      // "te colorea quién paga"
    rosa:38.56,      // "qué números trae"
    cuota:39.65,     // "Son llamadas de tu cuota"
    salida:43.22,    // "Ahora pulsa un movimiento"
  };

  const lsP = clamp((t-T.lista)/0.6,0,1), lsE = Easing.easeOutCubic(lsP);
  const rayaGlow = t >= T.raya && t < T.raya+1.5 ? Math.sin((t-T.raya)/1.5*Math.PI) : 0;
  const dosP = clamp((t-T.dos)/0.55,0,1), dosE = Easing.easeOutCubic(dosP);
  const c1P = clamp((t-T.c1)/0.6,0,1), c1E = Easing.easeOutBack(c1P);
  const c2P = clamp((t-T.c2)/0.6,0,1), c2E = Easing.easeOutBack(c2P);
  const sAP = clamp((t-T.senalA)/0.45,0,1), sAE = Easing.easeOutCubic(sAP);
  const sBP = clamp((t-T.senalB)/0.45,0,1), sBE = Easing.easeOutCubic(sBP);
  const coP = clamp((t-T.contra)/0.6,0,1), coE = Easing.easeOutCubic(coP);
  const anP = clamp((t-T.antes)/0.6,0,1), anE = Easing.easeOutCubic(anP);
  const nadaP = clamp((t-T.nada)/0.55,0,1), nadaE = Easing.easeOutCubic(nadaP);

  // Acto B: los filtros y el análisis. El acto A se retira.
  const outA = clamp((t-T.filtros)/0.55,0,1);
  const flP = clamp((t-T.filtros)/0.65,0,1), flE = Easing.easeOutCubic(flP);
  const pendGlow = t >= T.pendientes && t < T.pendientes+1.5 ? Math.sin((t-T.pendientes)/1.5*Math.PI) : 0;
  const gaP = clamp((t-T.galima)/0.5,0,1), gaE = Easing.easeOutCubic(gaP);
  const anaP = clamp((t-T.analizar)/0.45,0,1), anaE = Easing.easeOutBack(anaP);
  const azP = clamp((t-T.azul)/0.4,0,1);
  const roP = clamp((t-T.rosa)/0.4,0,1);
  const cuP = clamp((t-T.cuota)/0.55,0,1), cuE = Easing.easeOutCubic(cuP);
  const saP = clamp((t-T.salida)/0.6,0,1), saE = Easing.easeOutCubic(saP);

  // Cursor: aparca → botón analizar (clic 35.74)
  const cursor = { frames:[
    { t:0.8,  x:1780, y:1010 },
    { t:35.1, x:1780, y:1010 },
    { t:35.6, x:590,  y:872 },
  ], clicks:[T.analizar] };

  // ── Fila de la lista. `azulAntes` = la raya que salía con la regla vieja ──
  const Mov = ({ concepto, fecha, importe, evidente, azulAntes })=>{
    const viejo = 0 < anP && azulAntes;
    const borde = evidente ? '#38BDF8' : (viejo ? '#38BDF8' : 'transparent');
    return (
      <div style={{display:'grid', gridTemplateColumns:'34px 1fr auto', alignItems:'center', gap:14,
                   height:76, padding:'0 16px', borderBottom:'1px solid #EEF2F6',
                   borderLeft:`4px solid ${borde}`,
                   boxShadow:evidente && 0 < rayaGlow ? `-4px 0 ${rayaGlow*28}px rgba(56,189,248,0.95)` : 'none',
                   opacity:viejo && !evidente ? clamp(anP,0,1)*0.85 : 1}}>
        <svg width="25" height="25" viewBox="0 0 24 24" fill="none" stroke={0 < importe ? '#059669' : '#EF4444'} strokeWidth="2.2">
          <path d={0 < importe ? 'M18 6 L7 17' : 'M6 18 L17 7'} strokeLinecap="round"/>
          <path d={0 < importe ? 'M7 9 v8 h8' : 'M17 15 V7 H9'} strokeLinecap="round"/>
        </svg>
        <div style={{minWidth:0, lineHeight:1.3}}>
          <div className="f-plex" style={{fontSize:18, fontWeight:500, color:'#0F172A', whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis'}}>{concepto}</div>
          <div className="f-plex" style={{fontSize:15, color:'#94A3B8'}}>{fecha}</div>
        </div>
        <span className="f-mono" style={{fontSize:19, fontWeight:700, color:0 < importe ? '#086F0C' : '#B42318'}}>
          {(0 < importe ? '+' : '') + importe.toLocaleString('es-ES',{minimumFractionDigits:2})}
        </span>
      </div>
    );
  };

  // ── Una condición de la raya ──
  const Cond = ({ n, p, e, titulo, children })=>(
    <div style={{display:'flex', gap:20, marginTop:n === 1 ? 0 : 38, opacity:clamp(p*1.3,0,1),
                 transform:`translateY(${(1-e)*14}px)`}}>
      <span style={{width:52, height:52, flexShrink:0, borderRadius:99, background:'rgba(0,133,255,0.12)',
                    display:'flex', alignItems:'center', justifyContent:'center'}}>
        <span className="f-plex" style={{fontSize:25, fontWeight:800, color:'#0085FF'}}>{n}</span>
      </span>
      <div style={{minWidth:0}}>
        <div className="f-plex" style={{fontSize:33, fontWeight:700, color:'#0F172A', lineHeight:1.3}}>{titulo}</div>
        {children}
      </div>
    </div>
  );

  return (
    <SlideCanvas variant="light">
      <DemoHeader t={t} eyebrow="POR DÓNDE EMPEZAR" title={<span>Por los fáciles. Ya están marcados.</span>}/>

      {/* ══════ ACTO A · la raya azul ══════ */}
      <div style={{position:'absolute', inset:0, opacity:1-outA, transform:`translateY(${outA*-26}px)`, pointerEvents:'none'}}>

        {/* La lista */}
        {lsP > 0 && outA < 1 && (
          <div style={{position:'absolute', left:100, top:290, width:830, opacity:lsE, transform:`translateY(${(1-lsE)*18}px)`}}>
            {/* El "antes": rótulo sobre la lista media azul */}
            {anP > 0 && (
              <div style={{position:'absolute', left:0, right:0, top:-50, textAlign:'center', opacity:anE}}>
                <span className="f-plex" style={{display:'inline-block', padding:'7px 18px', borderRadius:99,
                        background:'rgba(239,68,68,0.10)', border:'1px solid rgba(239,68,68,0.3)',
                        fontSize:19, fontWeight:700, color:'#B42318'}}>ANTES: BASTABA EL IMPORTE</span>
              </div>
            )}
            <div style={{background:'#fff', borderRadius:16, border:'1px solid #E2E8F0', boxShadow:'0 24px 58px rgba(15,23,42,0.10)', overflow:'hidden'}}>
              <div style={{padding:'14px 16px', borderBottom:'1px solid #EEF2F6'}}>
                <span className="f-plex" style={{fontSize:19, fontWeight:700, color:'#0F172A'}}>Movimientos del mes</span>
              </div>
              <Mov concepto="TRANSF /Bizum DE RESOEX S.L. (Ext: 71689)" fecha="12/08 · Transferencia" importe={1234.56} evidente/>
              <Mov concepto="RECIBO SUMINISTRO ELECTRICO AGOSTO" fecha="15/08 · Recibo" importe={-412.9} azulAntes/>
              <Mov concepto="TRANSF DE ALMACENES DEL SUR SL" fecha="16/08" importe={2860.0}/>
              <Mov concepto="PAGO CUOTA RENTING VEHICULO" fecha="17/08 · Recibo" importe={-349.0} azulAntes/>
              <Mov concepto="COMISION BANCO MANTENIMIENTO" fecha="18/08 · Comisiones" importe={-3.5}/>
              <Mov concepto="TRANSF DE COMERCIAL LEVANTE SA" fecha="19/08" importe={980.0} azulAntes/>
              <Mov concepto="ADEUDO SEPA SEGURO FLOTA VEHICULOS" fecha="20/08 · Recibo" importe={-1120.0}/>
            </div>
            {nadaP > 0 && (
              <div className="f-plex" style={{position:'absolute', left:-40, right:-40, top:660, textAlign:'center', fontSize:32, fontWeight:700,
                                              color:'#B42318', opacity:nadaE, transform:`translateY(${(1-nadaE)*10}px)`}}>
                Una señal que sale siempre no dice nada.
              </div>
            )}
          </div>
        )}

        {/* Las dos condiciones */}
        {dosP > 0 && outA < 1 && (
          <div style={{position:'absolute', left:1000, top:266, width:820, opacity:dosE, transform:`translateY(${(1-dosE)*16}px)`}}>
            <div className="f-plex" style={{fontSize:18, fontWeight:700, letterSpacing:'2.4px', color:'#0085FF', marginBottom:18}}>
              LA RAYA AZUL DICE DOS COSAS A LA VEZ
            </div>
            <div style={{background:'#fff', borderRadius:18, border:'1px solid #E2E8F0', boxShadow:'0 24px 58px rgba(15,23,42,0.09)', padding:'44px 40px 48px'}}>
              <Cond n={1} p={c1P} e={c1E} titulo={<span>Hay <span style={{color:'#0085FF'}}>una sola</span> operación pendiente que cuadra al céntimo</span>}>
                {coP > 0 && (
                  <div style={{marginTop:16, padding:'14px 18px', borderRadius:12, background:'rgba(239,68,68,0.06)',
                               border:'1px solid rgba(239,68,68,0.22)', opacity:clamp(coP*1.3,0,1), transform:`translateY(${(1-coE)*8}px)`}}>
                    <div style={{display:'flex', alignItems:'center', gap:16, flexWrap:'wrap'}}>
                      <span className="f-mono" style={{fontSize:18, color:'#64748B'}}>Venta 1001 · 1.234,56 €</span>
                      <span className="f-mono" style={{fontSize:18, color:'#64748B'}}>Venta 1042 · 1.234,56 €</span>
                    </div>
                    <div className="f-plex" style={{fontSize:20, fontWeight:700, color:'#B42318', marginTop:7}}>Si dos comparten importe → ninguna vale</div>
                  </div>
                )}
              </Cond>

              <Cond n={2} p={c2P} e={c2E} titulo={<span>Y además coincide algo más</span>}>
                <div style={{display:'flex', flexDirection:'column', gap:11, marginTop:14}}>
                  {sAP > 0 && (
                    <div style={{display:'flex', alignItems:'center', gap:12, opacity:clamp(sAP*1.3,0,1), transform:`translateY(${(1-sAE)*8}px)`}}>
                      <span style={{width:10, height:10, borderRadius:99, background:'#0085FF', flexShrink:0}}/>
                      <span className="f-plex" style={{fontSize:24, color:'#334155'}}>Su número, escrito en el concepto</span>
                    </div>
                  )}
                  {sBP > 0 && (
                    <div style={{display:'flex', alignItems:'center', gap:12, opacity:clamp(sBP*1.3,0,1), transform:`translateY(${(1-sBE)*8}px)`}}>
                      <span style={{width:10, height:10, borderRadius:99, background:'#0085FF', flexShrink:0}}/>
                      <span className="f-plex" style={{fontSize:24, color:'#334155'}}>
                        O el cliente que <b style={{color:'#0F172A'}}>tú</b> le pusiste
                      </span>
                    </div>
                  )}
                </div>
              </Cond>
            </div>
          </div>
        )}
      </div>

      {/* ══════ ACTO B · acotar la lista, y leer el galimatías ══════ */}
      {flP > 0 && (
        <div style={{position:'absolute', left:190, top:322, width:1540, opacity:flE, transform:`translateY(${(1-flE)*20}px)`}}>
          {/* La tira de filtros */}
          <div style={{display:'flex', alignItems:'center', gap:12, flexWrap:'wrap'}}>
            <div style={{display:'inline-flex', alignItems:'center', gap:10, padding:'12px 20px', borderRadius:10,
                         border:'1px solid #E2E8F0', background:'#fff', minWidth:340}}>
              <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94A3B8" strokeWidth="2"><circle cx="11" cy="11" r="7"/><path d="M20 20 L16 16"/></svg>
              <span className="f-plex" style={{fontSize:19, color:'#94A3B8'}}>Buscar concepto, importe o nº</span>
            </div>
            <span style={{display:'inline-flex', alignItems:'center', padding:'12px 20px', borderRadius:10, border:'1px solid #E2E8F0', background:'#fff'}}>
              <span className="f-plex" style={{fontSize:19, color:'#334155'}}>Todos los tipos (128)</span>
            </span>
            <span style={{display:'inline-flex', alignItems:'center', gap:8, padding:'11px 18px', borderRadius:10,
                          background:'#fff', border:'1px solid #E2E8F0'}}>
              <span className="f-plex" style={{fontSize:18, color:'#64748B'}}>Con sugerencias</span>
            </span>
            <span style={{display:'inline-flex', alignItems:'center', gap:9, padding:'11px 18px', borderRadius:10,
                          background:'#0085FF', border:'1px solid #0085FF',
                          boxShadow:0 < pendGlow ? `0 0 ${pendGlow*34}px rgba(0,133,255,0.65)` : '0 6px 16px rgba(0,133,255,0.25)'}}>
              <svg width="19" height="19" viewBox="0 0 24 24" fill="#fff"><path d="M3 5 h18 l-7 8 v6 l-4 2 v-8 z"/></svg>
              <span className="f-plex" style={{fontSize:18, fontWeight:700, color:'#fff'}}>Solo pendientes</span>
            </span>
            {0 < pendGlow && (
              <span className="f-plex" style={{fontSize:20, color:'#0085FF', fontWeight:600}}>← ya viene puesto</span>
            )}
          </div>

          {/* El concepto en crudo → analizado */}
          {gaP > 0 && (
            <div style={{marginTop:74, opacity:gaP, transform:`translateY(${(1-gaE)*16}px)`}}>
              <div className="f-plex" style={{fontSize:18, fontWeight:700, letterSpacing:'2.4px', color:'#94A3B8', marginBottom:16}}>
                LO QUE PONE EL BANCO
              </div>
              <div style={{background:'#fff', borderRadius:16, border:'1px solid #E2E8F0', boxShadow:'0 22px 54px rgba(15,23,42,0.09)', padding:'30px 34px'}}>
                <div className="f-mono" style={{fontSize:34, lineHeight:1.5, color:'#334155'}}>
                  TRANSF /Bizum DE{' '}
                  <span style={{color:azP > 0 ? '#375a8b' : '#334155', fontWeight:azP > 0 ? 700 : 400,
                                background:azP > 0 ? `rgba(55,90,139,${azP*0.10})` : 'transparent', borderRadius:5, padding:'0 4px'}}>
                    RESOEX S.L.
                  </span>
                  ( FRANCISCO QUIJADA...) (Ext:{' '}
                  <span style={{color:roP > 0 ? '#c2185b' : '#334155', fontWeight:roP > 0 ? 700 : 400,
                                background:roP > 0 ? `rgba(194,24,91,${roP*0.10})` : 'transparent', borderRadius:5, padding:'0 4px'}}>
                    71689
                  </span>
                  )
                </div>
                {anaP > 0 && (
                  <div style={{display:'flex', alignItems:'center', gap:18, flexWrap:'wrap', marginTop:26, paddingTop:22, borderTop:'1px solid #F1F5F9'}}>
                    <span style={{display:'inline-flex', alignItems:'center', gap:10, padding:'12px 24px', borderRadius:10,
                                  background:'rgba(0,133,255,0.10)', border:'1px solid rgba(0,133,255,0.35)',
                                  transform:`scale(${lerp(0.88,1,anaE)})`}}>
                      <svg width="22" height="22" viewBox="0 0 24 24" fill="#0085FF"><path d="M12 2 l2.2 6.3 L20.5 10.5 l-6.3 2.2 L12 19 l-2.2-6.3 L3.5 10.5 l6.3-2.2 z"/></svg>
                      <span className="f-plex" style={{fontSize:21, fontWeight:700, color:'#0085FF'}}>Analizar con IA (37)</span>
                    </span>
                    {azP > 0 && <span className="f-plex" style={{fontSize:21, color:'#375a8b', fontWeight:700, opacity:azP}}>quién paga</span>}
                    {roP > 0 && <span className="f-plex" style={{fontSize:21, color:'#c2185b', fontWeight:700, opacity:roP}}>· qué números trae</span>}
                  </div>
                )}
              </div>
              {/* La honestidad del coste */}
              {cuP > 0 && (
                <div style={{display:'flex', alignItems:'center', gap:14, marginTop:20, padding:'16px 22px', borderRadius:12,
                             background:'rgba(251,140,0,0.09)', borderLeft:'4px solid #FB8C00',
                             opacity:clamp(cuP*1.3,0,1), transform:`translateY(${(1-cuE)*10}px)`}}>
                  <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#B45309" strokeWidth="2.2" style={{flexShrink:0}}>
                    <circle cx="12" cy="12" r="9"/><path d="M12 8 v5" strokeLinecap="round"/><circle cx="12" cy="16.5" r="1" fill="#B45309" stroke="none"/>
                  </svg>
                  <span className="f-plex" style={{fontSize:23, fontWeight:600, color:'#7a5b00'}}>
                    Son llamadas de tu cuota, una por concepto. Se pueden parar.
                  </span>
                </div>
              )}
            </div>
          )}
        </div>
      )}

      {saP > 0 && (
        <div className="f-plex" style={{position:'absolute', left:0, right:0, top:962, textAlign:'center', fontSize:40, fontWeight:700,
                                        color:'#0F172A', opacity:saE, transform:`translateY(${(1-saE)*12}px)`}}>
          Ahora pulsa un movimiento. Y mira la derecha.
        </div>
      )}

      <ScriptedCursor frames={cursor.frames} t={t} clickTimes={cursor.clicks}/>
    </SlideCanvas>
  );
}
Object.assign(window, { EscenaCN02 });
