// === Escena 03 — "La cuenta" ===  [VALLE, antes del clímax]
// Sin navegador y sin conflicto: las dos únicas líneas de aritmética de la pantalla
// (ReposicionSubpage.razor:177-178) sobre la fila de Cemento gris en Tienda, con la de Silicona
// blanca al lado para el caso sin máximo (objetivo = el propio mínimo). Un solo contador: el 80.
// Y el desmentido caro: aquí no hay histórico, ni consumo medio, ni plazo de proveedor.
function EscenaRP03({ t }){
  const T = {
    dos:0.1,          // "Dos líneas de aritmética" -> las 2 líneas punteadas
    objetivo:3.8,     // "Primero, el objetivo" -> se rellena la línea 1
    max:8.2,          // "el objetivo es el máximo" -> se enciende el 120 + llave
    propio:12.5,      // "su propio mínimo" -> la fila sin máximo sube; su 0 se ilumina
    menos:16.0,       // "objetivo menos disponible" -> se rellena la línea 2
    cuarenta:20.6,    // "cuarenta disponibles" -> se enciende el 40
    sesenta:22.0,     // "mínimo sesenta" -> se enciende el 60
    ciento:23.2,      // "máximo ciento veinte" -> se enciende el 120
    pide:25.3,        // "Pide ochenta" -> contador 0 → 80 (único contador)
    fantasmas:30.2,   // "ni consumo medio" -> 3 tarjetas fantasma entran, se tachan y se van
    dosManeras:35.2,  // "te la enseña de dos maneras" -> las líneas se recogen · calma
    filaDelay:1.10,    // retardo de la fila de Cemento desde T.objetivo
    celdaStep:0.12,    // cascada de las 4 celdas de la fila
    siliconaDelay:2.00, // retardo de la fila pequeña de Silicona desde T.objetivo
    subeDur:2.90,      // cuánto se queda arriba la fila de Silicona
    fantasmaStep:0.25, // desfase entre las 3 tarjetas fantasma
  };

  const AZUL = '#1d73e2';    // --rz-primary
  const AMBAR = '#918908';   // --rz-warning-dark (la desviación declarada del plan)

  // ── Geometría ──
  const LX = 260;                       // margen izquierdo de las dos líneas
  const L1Y = 262, L2Y = 386;           // baselines de las dos líneas
  const CX = 200, CY = 566, CW = 1120;  // fila de Cemento gris
  const CIX = CX + 28, CIW = CW - 56;   // 228 · 1064
  const CCW = CIW / 4;                  // 266 por celda
  const SX = 1400, SY = 616, SW = 420;  // fila pequeña de Silicona blanca
  const SIX = SX + 28, SCW = (SW - 56) / 4;  // 1428 · 91

  // ── Progresos ──
  const dosP = clamp((t-T.dos)/0.6, 0, 1);
  const l1P = clamp((t-T.objetivo)/0.6, 0, 1), l1E = Easing.easeOutCubic(l1P);
  const l2P = clamp((t-T.menos)/0.6, 0, 1), l2E = Easing.easeOutCubic(l2P);
  const recoge = Easing.easeOutCubic(clamp((t-T.dosManeras)/0.8, 0, 1));

  const filP = clamp((t-T.objetivo-T.filaDelay)/0.6, 0, 1), filE = Easing.easeOutCubic(filP);
  const silP = clamp((t-T.objetivo-T.siliconaDelay)/0.6, 0, 1);

  // La fila de Silicona sube al mismo plano y vuelve a atenuarse. Único movimiento amplio.
  const subeIn  = Easing.easeOutCubic(clamp((t-T.propio)/0.55, 0, 1));
  const subeOut = Easing.easeInOutCubic(clamp((t-T.propio-T.subeDur)/0.6, 0, 1));
  const sube = subeIn * (1-subeOut);

  // Las dos llaves: primero al 120, después al 20 de Silicona
  const llaveA = Easing.easeInOutCubic(clamp((t-T.max)/0.7, 0, 1));
  const llaveAop = clamp((t-T.max)/0.4, 0, 1) * (1 - clamp((t-T.propio)/0.35, 0, 1));
  const llaveB = Easing.easeInOutCubic(clamp((t-T.propio-0.15)/0.7, 0, 1));
  const llaveBop = clamp((t-T.propio-0.15)/0.4, 0, 1) * (1 - clamp((t-T.propio-T.subeDur)/0.5, 0, 1));

  const pide = useCountUp(0, 80, T.pide, 1.0, t);
  const pideP = clamp((t-T.pide)/0.3, 0, 1);

  const cientoPulse = (t >= T.ciento && t < T.ciento+1.1) ? Math.sin((t-T.ciento)/1.1*Math.PI) : 0;

  // ── Una celda de la fila grande ──
  const Celda = ({ i, rotulo, valor, encendida, pulse, contador })=>{
    const p = clamp((t-T.objetivo-T.filaDelay-0.2-i*T.celdaStep)/0.4, 0, 1);
    const col = encendida ? (contador ? AMBAR : AZUL) : '#0F172A';
    return (
      <div style={{width:CCW, textAlign:'center', opacity:p}}>
        <div className="f-plex" style={{fontSize:20, fontWeight:600, color:'#94A3B8', letterSpacing:'0.4px'}}>{rotulo}</div>
        <div style={{height:96, marginTop:6, display:'flex', alignItems:'flex-end', justifyContent:'center'}}>
          <span className="f-mono" style={{fontSize:contador ? 88 : 60, fontWeight:800, color:col, lineHeight:1,
                                           textShadow:pulse > 0 ? `0 0 ${pulse*34}px rgba(29,115,226,0.65)` : 'none',
                                           opacity:contador ? pideP : 1}}>
            {valor}
          </span>
        </div>
      </div>
    );
  };

  // ── Una celda de la fila pequeña ──
  const CeldaMin = ({ rotulo, valor, encendida })=>(
    <div style={{width:SCW, textAlign:'center'}}>
      <div className="f-plex" style={{fontSize:14, fontWeight:600, color:'#94A3B8'}}>{rotulo}</div>
      <div className="f-mono" style={{fontSize:32, fontWeight:800, color:encendida ? AZUL : '#0F172A', marginTop:4}}>{valor}</div>
    </div>
  );

  return (
    <SlideCanvas variant="light-soft">
      <DemoHeader t={t} eyebrow="LA CUENTA" title={<span>El objetivo, y la resta</span>}/>

      {/* ─────────── Línea 1 · el objetivo ─────────── */}
      <div style={{position:'absolute', left:LX, top:L1Y, whiteSpace:'nowrap',
                   opacity:dosP*(1-recoge), transform:`translateY(${-recoge*70}px)`}}>
        <span className="f-plex" style={{fontSize:50, fontWeight:700, color:'#0F172A', letterSpacing:'-0.02em'}}>objetivo</span>
        <span className="f-plex" style={{fontSize:50, fontWeight:500, color:'#94A3B8'}}>{'  =  '}</span>
        <span className="f-plex" style={{fontSize:50, fontWeight:600, letterSpacing:'-0.02em',
                opacity:l1P, display:'inline-block', transform:`translateY(${(1-l1E)*10}px)`}}>
          <span style={{color:t >= T.max ? AZUL : '#334155'}}>máximo</span>
          <span style={{color:'#94A3B8'}}>, o el </span>
          <span style={{color:t >= T.propio ? AZUL : '#334155'}}>mínimo</span>
          <span style={{color:'#94A3B8'}}> si no hay máximo</span>
        </span>
      </div>
      <div style={{position:'absolute', left:LX, top:L1Y+72, width:1180, height:3, borderRadius:2,
                   background:l1P > 0.5 ? '#CBD5E1' : 'transparent',
                   borderTop:l1P > 0.5 ? 'none' : '3px dashed #CBD5E1',
                   transform:`scaleX(${Easing.easeOutCubic(dosP)}) translateY(${-recoge*70}px)`, transformOrigin:'left',
                   opacity:dosP*(1-recoge)}}/>

      {/* ─────────── Línea 2 · la cifra ─────────── */}
      <div style={{position:'absolute', left:LX, top:L2Y, whiteSpace:'nowrap',
                   opacity:clamp((t-T.dos-0.3)/0.6,0,1)*(1-recoge), transform:`translateY(${-recoge*70}px)`}}>
        <span className="f-plex" style={{fontSize:50, fontWeight:700, color:'#0F172A', letterSpacing:'-0.02em'}}>pedir</span>
        <span className="f-plex" style={{fontSize:50, fontWeight:500, color:'#94A3B8'}}>{'  =  '}</span>
        <span className="f-plex" style={{fontSize:50, fontWeight:600, color:'#334155', letterSpacing:'-0.02em',
                opacity:l2P, display:'inline-block', transform:`translateY(${(1-l2E)*10}px)`}}>
          objetivo <span style={{color:'#94A3B8'}}>−</span> disponible
        </span>
      </div>
      <div style={{position:'absolute', left:LX, top:L2Y+72, width:900, height:3, borderRadius:2,
                   background:l2P > 0.5 ? '#CBD5E1' : 'transparent',
                   borderTop:l2P > 0.5 ? 'none' : '3px dashed #CBD5E1',
                   transform:`scaleX(${Easing.easeOutCubic(clamp((t-T.dos-0.3)/0.6,0,1))}) translateY(${-recoge*70}px)`, transformOrigin:'left',
                   opacity:clamp((t-T.dos-0.3)/0.6,0,1)*(1-recoge)}}/>

      {/* ─────────── Las llaves ─────────── */}
      {llaveAop > 0 && (
        <svg style={{position:'absolute', inset:0, pointerEvents:'none', opacity:llaveAop*(1-recoge)}} width="1920" height="1080" fill="none">
          <path d="M365 338 C365 460 893 540 893 670" pathLength="1" stroke={AZUL} strokeWidth="3.5" strokeLinecap="round"
                strokeDasharray="1" strokeDashoffset={1-llaveA} opacity="0.75"/>
          <circle cx="365" cy="338" r="6" fill={AZUL} opacity={clamp(llaveA*3,0,1)}/>
        </svg>
      )}
      {llaveBop > 0 && (
        <svg style={{position:'absolute', inset:0, pointerEvents:'none', opacity:llaveBop*(1-recoge)}} width="1920" height="1080" fill="none">
          <path d="M365 338 C365 480 1564 500 1564 674" pathLength="1" stroke={AZUL} strokeWidth="3.5" strokeLinecap="round"
                strokeDasharray="1" strokeDashoffset={1-llaveB} opacity="0.75"/>
          <circle cx="365" cy="338" r="6" fill={AZUL} opacity={clamp(llaveB*3,0,1)}/>
        </svg>
      )}

      {/* ─────────── La fila de Cemento gris en Tienda ─────────── */}
      <div style={{position:'absolute', left:CX, top:CY, width:CW, borderRadius:18, background:'#fff',
                   border:'1px solid #E2E8F0', boxShadow:'0 26px 62px rgba(15,23,42,0.10)', padding:'24px 28px 26px',
                   opacity:filP*(1-recoge*0.85), transform:`translateY(${(1-filE)*16}px)`}}>
        <div className="f-plex" style={{fontSize:24, fontWeight:700, color:'#0F172A'}}>
          Cemento gris <span style={{color:'#94A3B8', fontWeight:500}}>· Tienda</span>
        </div>
        <div style={{display:'flex', marginTop:16}}>
          <Celda i={0} rotulo="Disponible" valor="40"  encendida={t >= T.cuarenta} pulse={0}/>
          <Celda i={1} rotulo="Mínimo"     valor="60"  encendida={t >= T.sesenta}  pulse={0}/>
          <Celda i={2} rotulo="Máximo"     valor="120" encendida={t >= T.max}      pulse={cientoPulse}/>
          <Celda i={3} rotulo="Pedir"      valor={pide} encendida contador pulse={0}/>
        </div>
      </div>

      {/* ─────────── La fila pequeña: el caso sin máximo ─────────── */}
      <div style={{position:'absolute', left:SX, top:SY, width:SW, borderRadius:14, background:'#fff',
                   border:`1px solid ${sube > 0.5 ? AZUL : '#E2E8F0'}`, padding:'18px 28px 20px',
                   boxShadow:sube > 0 ? `0 ${18*sube}px ${44*sube}px rgba(29,115,226,${0.22*sube})` : '0 2px 8px rgba(15,23,42,0.05)',
                   opacity:silP*lerp(0.42, 1, sube)*(1-recoge*0.85),
                   transform:`translateY(${-18*sube}px) scale(${lerp(1, 1.06, sube)})`, transformOrigin:'center'}}>
        <div className="f-plex" style={{fontSize:17, fontWeight:700, color:'#0F172A'}}>
          Silicona blanca <span style={{color:'#94A3B8', fontWeight:500}}>· Nave</span>
        </div>
        <div style={{display:'flex', marginTop:10}}>
          <CeldaMin rotulo="Disp." valor="5"  encendida={false}/>
          <CeldaMin rotulo="Mín."  valor="20" encendida={sube > 0.3}/>
          <CeldaMin rotulo="Máx."  valor="0"  encendida={sube > 0.3}/>
          <CeldaMin rotulo="Pedir" valor="15" encendida={false}/>
        </div>
        {sube > 0.3 && (
          <div className="f-plex" style={{fontSize:16, fontWeight:600, color:AZUL, marginTop:12, opacity:sube}}>
            sin máximo → el techo es el mínimo
          </div>
        )}
      </div>

      {/* ─────────── Lo que NO entra en la cuenta ─────────── */}
      {clamp((t-T.fantasmas+T.fantasmaStep)/0.4,0,1) > 0 && (
        <div style={{position:'absolute', left:300, top:866, display:'flex', gap:30}}>
          {['Histórico de ventas', 'Consumo medio', 'Plazo del proveedor'].map((n,i)=>{
            const st = T.fantasmas + (i-1)*T.fantasmaStep;
            const p = clamp((t-st)/0.4, 0, 1);
            const tacha = Easing.easeInOutCubic(clamp((t-st-0.35)/0.4, 0, 1));
            const out = clamp((t-st-1.45)/0.3, 0, 1);
            return (
              <div key={n} style={{position:'relative', width:420, height:110, borderRadius:14,
                                   background:'#F1F5F9', border:'2px dashed #CBD5E1',
                                   display:'flex', alignItems:'center', justifyContent:'center',
                                   opacity:p*(1-out), transform:`translateY(${(1-Easing.easeOutCubic(p))*10}px)`}}>
                <span className="f-plex" style={{fontSize:26, fontWeight:600, color:'#94A3B8'}}>{n}</span>
                <span style={{position:'absolute', left:32, right:32, top:'50%', height:3, borderRadius:2, background:'#94A3B8',
                              transform:`scaleX(${tacha})`, transformOrigin:'left'}}/>
              </div>
            );
          })}
        </div>
      )}
    </SlideCanvas>
  );
}
Object.assign(window, { EscenaRP03 });
