// === Escena IN03 — "Replicada en dos países, al instante" ===
// Duración real del mp3: 37.9s. SlideCanvas variant="light".
// El motivo GEMELO en su forma más pura: dos cilindros de base de datos (País A / País B)
// con una línea de sincronía viva. 1ª mitad → la réplica en tiempo real y la resiliencia
// (A cae en rojo, B sigue en verde). 2ª mitad → réplica (disponibilidad) vs copia
// (recuperación) como comparativa de 2 columnas, y el remate "No pasa" con escudo verde.
// Rojo SOLO en las dos caídas (8.63 y 29.86), siempre devuelto a verde. Salida: "¿Y EL PROGRAMA? →".
// LOCUCIÓN (audio/escena-03.mp3, 37.9s):
// "Tus datos no viven en un sitio. Viven en dos países a la vez. Cada cambio que haces se
//  escribe en los dos, al instante. Si un país entero se cayera... el otro tiene lo mismo, al
//  segundo. Y además, dos copias de seguridad cada día. ¿Por qué las dos cosas? La réplica te
//  salva de un desastre. La copia te salva de un error. Una te mantiene en marcha. La otra te
//  deja volver atrás. Para perderlo todo, tendrían que caer dos países y fallar las copias. No
//  pasa. Los datos, a salvo. ¿Y el programa que los usa?"
function EscenaIN03({ t }){
  const T = {
    solo:    1.09,  // "no viven en un sitio"        → un solo cilindro de BD centrado (solo/precario)
    dos:     2.71,  // "Viven en dos países"         → aparece el 2º nodo (País B) y se DIBUJA la línea A↔B
    escribe: 6.10,  // "se escribe en los dos"       → punto-pulso viaja de A a B (una vez); chip "en tiempo real"
    cae:     8.63,  // "Si un país entero se cayera" → nodo A pasa a rojo/atenuado (caída dosificada)
    otro:   10.98,  // "el otro tiene lo mismo"      → B pulsa verde con check "sigue en marcha"; A se recupera
    copias: 14.23,  // "dos copias de seguridad"     → 2 tarjetas snapshot de backup (06:00 / 22:00) "×2 al día"
    replica:18.68,  // "La réplica te salva"         → columna izq: RÉPLICA → te salva de un DESASTRE
    copia:  21.57,  // "La copia te salva"           → columna der: COPIA → te salva de un ERROR
    volver: 26.69,  // "deja volver atrás"           → rebobinar (↺) sobre la copia
    doscaen:29.86,  // "caer dos países"             → AMBAS columnas parpadean rojo (escenario imposible)
    nopasa: 32.92,  // "No pasa"                     → todo a verde; escudo verde grande y "No pasa."
    salida: 36.07,  // "el programa que los usa"     → píldora salida "¿Y EL PROGRAMA? →"
  };

  // ---- Naturalezas del cilindro (contrato de color del deck) ----
  const BLUE  = { stroke:'#0085FF', fill:'#F0F7FF', top:'#DCEBFF', line:'#0085FF' };
  const GREEN = { stroke:'#10B981', fill:'#ECFDF5', top:'#C7F2DE', line:'#10B981' };
  const RED   = { stroke:'#EF4444', fill:'#FEF2F2', top:'#FBD5D5', line:'#EF4444' };

  // ---- Geometría (1920×1080) ----
  const cy = 320;                 // eje vertical de los cilindros
  const NW = 150, NH = 168;
  const LX1 = 858, LX2 = 1062, LY = 320;   // línea de sincronía (entre A y B ya asentados)

  // ---- Entrada de nodos ----
  const aIn = clamp((t-T.solo)/0.6, 0, 1), aE = Easing.easeOutBack(aIn);
  const bIn = clamp((t-T.dos)/0.7, 0, 1),  bE = Easing.easeOutBack(bIn);
  const aX  = lerp(960, 780, Easing.easeInOutCubic(clamp((t-T.dos)/0.8, 0, 1))); // A cede el centro
  const bX  = 1140;

  // ---- Salud de cada país (rojo dosificado) ----
  const aFall = clamp((t-T.cae)/0.35, 0, 1) * (1 - clamp((t-12.4)/0.6, 0, 1)); // A cae 8.63 → recupera ~13
  const bSafe = clamp((t-T.otro)/0.4, 0, 1);                                   // B pasa a verde en 10.98
  const aAcc  = aFall > 0.5 ? RED : BLUE;
  const bAcc  = bSafe > 0.4 ? GREEN : BLUE;
  const aDim  = 1 - 0.42*aFall;

  // ---- Línea de sincronía + pulso ----
  const lineDraw = Easing.easeInOutCubic(clamp((t-T.dos)/0.9, 0, 1));
  const LLEN = LX2 - LX1;
  const pulseP = clamp((t-T.escribe)/0.9, 0, 1);
  const showPulse = t >= T.escribe && pulseP < 1;
  const pulseX = lerp(LX1, LX2, Easing.easeInOutCubic(pulseP));

  // ---- Check "sigue en marcha" sobre B ----
  const chkP = clamp((t-T.otro)/0.4, 0, 1), chkE = Easing.easeOutBack(chkP);
  const chkDraw = Easing.easeInOutCubic(clamp((t-(T.otro+0.1))/0.4, 0, 1));

  // ---- Segmento 1 se despeja para dar paso a la comparativa ----
  const seg1Vis = 1 - clamp((t-17.6)/1.0, 0, 1);

  // ---- Backups (×2 al día) ----
  const BK = [
    { t0:T.copias,      time:'06:00', tag:'COPIA MATINAL'  },
    { t0:T.copias+0.18, time:'22:00', tag:'COPIA NOCTURNA' },
  ];
  const bkLabP = clamp((t-T.copias)/0.5, 0, 1);

  // ---- Escenario imposible: parpadeo rojo de ambas columnas ----
  const flashK = clamp((t-T.doscaen)/0.3, 0, 1) * (1 - clamp((t-31.6)/1.0, 0, 1));

  // ---- Remate "No pasa" ----
  const shP    = clamp((t-T.nopasa)/0.55, 0, 1), shE = Easing.easeOutBack(shP);
  const shDraw = Easing.easeInOutCubic(clamp((t-(T.nopasa+0.2))/0.5, 0, 1));
  const shPulse = Math.sin(clamp((t-T.nopasa)/1.1, 0, 1) * Math.PI);
  const compDim = 1 - 0.72*shP;   // la comparativa se atenúa cuando entra el escudo

  // ---- Salida ----
  const salP = clamp((t-T.salida)/0.55, 0, 1), salE = Easing.easeOutBack(salP);

  // ---- Cilindro de base de datos ----
  const Cyl = ({ acc }) => (
    <svg width={NW} height={NH} viewBox="0 0 150 168" fill="none">
      <ellipse cx="75" cy="148" rx="68" ry="17" fill={acc.fill} stroke={acc.stroke} strokeWidth="3"/>
      <rect x="7" y="20" width="136" height="128" fill={acc.fill}/>
      <path d="M7 20 V148"   stroke={acc.stroke} strokeWidth="3" strokeLinecap="round"/>
      <path d="M143 20 V148" stroke={acc.stroke} strokeWidth="3" strokeLinecap="round"/>
      <ellipse cx="75" cy="62"  rx="68" ry="17" fill="none" stroke={acc.line} strokeWidth="1.6" opacity="0.5"/>
      <ellipse cx="75" cy="104" rx="68" ry="17" fill="none" stroke={acc.line} strokeWidth="1.6" opacity="0.4"/>
      <ellipse cx="75" cy="20"  rx="68" ry="17" fill={acc.top} stroke={acc.stroke} strokeWidth="3"/>
    </svg>
  );

  // ---- Píldora atrezzo (marca / jerga: se percibe, no se lee) ----
  const Pill = ({ txt, dot='#123F6D', fg='#334155' }) => (
    <span className="f-mono" style={{display:'inline-flex', alignItems:'center', gap:7, padding:'6px 12px',
      background:'#fff', border:'1px solid #E2E8F0', borderRadius:100, fontSize:12, fontWeight:700, color:fg,
      boxShadow:'0 4px 12px rgba(15,23,42,0.06)', whiteSpace:'nowrap'}}>
      <span style={{width:7, height:7, borderRadius:100, background:dot}}/>{txt}
    </span>
  );

  // ---- Etiqueta de país bajo el cilindro ----
  const CountryLabel = ({ x, name, region, appear }) => {
    const p = clamp((t-appear)/0.5, 0, 1);
    if (p <= 0) return null;
    return (
      <div className="f-mono" style={{position:'absolute', left:x, top:cy+96, transform:'translate(-50%,0)',
        display:'inline-flex', alignItems:'center', gap:8, padding:'6px 14px',
        background:'#fff', border:'1px solid #E2E8F0', borderRadius:100,
        fontSize:12, fontWeight:700, color:'#334155', boxShadow:'0 4px 12px rgba(15,23,42,0.06)',
        opacity:clamp(p*1.3,0,1), whiteSpace:'nowrap'}}>
        {name}<span style={{color:'#CBD5E1'}}>·</span><span style={{color:'#94A3B8'}}>{region}</span>
      </div>
    );
  };

  // ---- Columna de la comparativa (réplica / copia) ----
  const Col = (c) => {
    const p = clamp((t-c.appear)/0.7, 0, 1);
    if (p <= 0) return null;
    const e = Easing.easeOutCubic(p);
    const bd = flashK > 0.5 ? '#EF4444' : c.accBd;
    const iconStroke = flashK > 0.5 ? '#EF4444' : c.iconFg;

    const tagP = clamp((t-c.tagStart)/0.5, 0, 1), tagE = Easing.easeOutBack(tagP);
    const spin = c.side==='cop' ? -300*Easing.easeOutCubic(clamp((t-T.volver)/0.5,0,1)) : 0;

    return (
      <div key={c.side} style={{position:'absolute', left:c.x, top:372, width:470, height:392,
        background:'#fff', border:`1.6px solid ${bd}`, borderRadius:22,
        boxShadow:'0 16px 40px rgba(15,23,42,0.09)',
        opacity:clamp(p*1.3,0,1)*compDim, transform:`translateY(${(1-e)*24}px)`}}>

        {/* icono-motivo */}
        <div style={{position:'absolute', left:191, top:34, width:88, height:88, borderRadius:24,
          background:c.accBg, display:'flex', alignItems:'center', justifyContent:'center'}}>
          {c.side==='rep' ? (
            <svg width="64" height="40" viewBox="0 0 64 40" fill="none">
              <line x1="24" y1="20" x2="40" y2="20" stroke={iconStroke} strokeWidth="2.6"/>
              <circle cx="14" cy="20" r="11" fill="#fff" stroke={iconStroke} strokeWidth="2.6"/>
              <circle cx="50" cy="20" r="11" fill="#fff" stroke={iconStroke} strokeWidth="2.6"/>
              <circle cx="32" cy="20" r="3.4" fill={iconStroke}/>
            </svg>
          ) : (
            <svg width="58" height="46" viewBox="0 0 58 46" fill="none">
              <rect x="8"  y="6"  width="30" height="24" rx="5" fill="#fff" stroke={iconStroke} strokeWidth="2.5"/>
              <rect x="18" y="16" width="30" height="24" rx="5" fill="#fff" stroke={iconStroke} strokeWidth="2.5"/>
              <circle cx="33" cy="28" r="8.5" fill="#fff" stroke={iconStroke} strokeWidth="2.3"/>
              <path d="M33 23 V28 L36.5 30.5" stroke={iconStroke} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
            </svg>
          )}
        </div>

        {/* título */}
        <div className="f-plex" style={{position:'absolute', left:0, right:0, top:148, textAlign:'center',
          fontSize:40, fontWeight:800, letterSpacing:'0.02em', color:c.iconFg}}>{c.title}</div>

        {/* te salva de un ... */}
        <div className="f-mono" style={{position:'absolute', left:0, right:0, top:216, textAlign:'center',
          fontSize:12, fontWeight:600, letterSpacing:'3px', color:'#94A3B8'}}>TE SALVA DE UN</div>
        <div className="f-plex" style={{position:'absolute', left:0, right:0, top:238, textAlign:'center',
          fontSize:46, fontWeight:800, letterSpacing:'-0.03em', color:'#0F172A'}}>{c.save}</div>

        {/* tag inferior (rep: con la columna · cop: al "volver atrás") */}
        {tagP > 0 && (
          <div style={{position:'absolute', left:0, right:0, top:318, textAlign:'center',
            opacity:clamp(tagP*1.3,0,1), transform:`translateY(${(1-tagE)*10}px)`}}>
            <span className="f-plex" style={{display:'inline-flex', alignItems:'center', gap:9, padding:'9px 18px',
              background:c.accBg, border:`1px solid ${c.accBd}`, borderRadius:100,
              fontSize:16, fontWeight:600, color:c.iconFg, whiteSpace:'nowrap'}}>
              {c.side==='cop' ? (
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style={{transform:`rotate(${spin}deg)`}}>
                  <path d="M5 8 A8 8 0 1 1 4 13" stroke={c.iconFg} strokeWidth="2.2" strokeLinecap="round" fill="none"/>
                  <path d="M5 3 V8 H10" stroke={c.iconFg} strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round" fill="none"/>
                </svg>
              ) : (
                <span style={{width:9, height:9, borderRadius:100, background:c.iconFg,
                  boxShadow:`0 0 0 4px ${c.accBg}`}}/>
              )}
              {c.tag}
            </span>
          </div>
        )}
      </div>
    );
  };
  const COLS = [
    { x:380,  appear:T.replica, tagStart:T.replica+0.35, side:'rep', title:'RÉPLICA', save:'DESASTRE',
      tag:'Te mantiene en marcha', iconFg:'#059669', accBd:'rgba(16,185,129,0.35)', accBg:'#ECFDF5' },
    { x:1070, appear:T.copia,   tagStart:T.volver,       side:'cop', title:'COPIA',   save:'ERROR',
      tag:'Te deja volver atrás', iconFg:'#0085FF', accBd:'rgba(0,133,255,0.35)', accBg:'#EFF6FF' },
  ];

  return (
    <SlideCanvas variant="light">
      <DemoHeader t={t} eyebrow="INFRAESTRUCTURA · TUS DATOS"
        title={<span>Replicada en <span className="grad-text">dos países</span>, al instante</span>}/>

      {/* Wash rojo dosificado del escenario imposible (se va a verde) */}
      {flashK > 0.01 && (
        <div style={{position:'absolute', inset:0, pointerEvents:'none', opacity:flashK,
          background:'radial-gradient(ellipse 72% 60% at 50% 46%, rgba(239,68,68,0.12), transparent 70%)'}}/>
      )}

      {/* ============================ SEGMENTO 1: el par gemelo ============================ */}
      {seg1Vis > 0 && (
        <div style={{position:'absolute', inset:0, opacity:seg1Vis}}>

          {/* atrezzo de proveedor (marca = se percibe, no se lee) */}
          <div style={{position:'absolute', top:150, right:64, display:'flex', gap:8,
            opacity:clamp((t-0.5)/0.8,0,1)*0.95}}>
            <Pill txt="OVHcloud"/>
            <Pill txt="Open Trusted Cloud" dot="#0085FF" fg="#64748B"/>
          </div>

          {/* capa SVG: línea de sincronía + pulso */}
          <svg width="1920" height="1080" viewBox="0 0 1920 1080" style={{position:'absolute', inset:0, pointerEvents:'none'}}>
            {t >= T.dos && (
              <line x1={LX1} y1={LY} x2={LX2} y2={LY} stroke="#0085FF" strokeWidth="3" strokeLinecap="round"
                strokeDasharray={LLEN} strokeDashoffset={LLEN*(1-lineDraw)} opacity={0.6*(1-0.55*aFall)}/>
            )}
            {showPulse && (
              <g>
                <circle cx={pulseX} cy={LY} r="14" fill="#10B981" opacity={0.18*Math.sin(pulseP*Math.PI)}/>
                <circle cx={pulseX} cy={LY} r="7"  fill="#10B981"
                  style={{filter:'drop-shadow(0 0 8px rgba(16,185,129,0.7))'}}/>
              </g>
            )}
          </svg>

          {/* chip "en tiempo real" (sobre la línea) */}
          {t >= T.escribe && (
            <div style={{position:'absolute', left:960, top:250, transform:'translate(-50%,0)'}}>
              <StatusChip label="En tiempo real" color="success" start={T.escribe} t={t} icon="⚡"/>
            </div>
          )}

          {/* Nodo A (País A) */}
          {aIn > 0 && (
            <div style={{position:'absolute', left:aX-NW/2, top:cy-NH/2, width:NW, height:NH,
              opacity:clamp(aIn*1.3,0,1)*aDim,
              transform:`translateY(${(1-aE)*18}px) scale(${lerp(0.82,1,aE)}) rotate(${aFall*-2.2}deg)`,
              filter:`drop-shadow(0 18px 40px rgba(15,23,42,0.14))`}}>
              <Cyl acc={aAcc}/>
            </div>
          )}
          <CountryLabel x={aX} name="PAÍS A" region="GRA" appear={T.solo+0.2}/>
          {/* apunte "sin servicio" mientras A cae */}
          {aFall > 0.02 && (
            <div className="f-mono" style={{position:'absolute', left:aX, top:cy+134, transform:'translate(-50%,0)',
              display:'inline-flex', alignItems:'center', gap:7, padding:'5px 12px',
              background:'#FEF2F2', border:'1px solid #FECACA', borderRadius:100,
              fontSize:11, fontWeight:700, letterSpacing:'1px', color:'#DC2626',
              opacity:aFall, whiteSpace:'nowrap'}}>
              <span style={{width:6, height:6, borderRadius:100, background:'#EF4444'}}/>SIN SERVICIO
            </div>
          )}

          {/* Nodo B (País B) */}
          {bIn > 0 && (
            <div style={{position:'absolute', left:bX-NW/2, top:cy-NH/2, width:NW, height:NH,
              opacity:clamp(bIn*1.3,0,1),
              transform:`translateY(${(1-bE)*24}px) scale(${lerp(0.8,1,bE)})`,
              filter:`drop-shadow(0 18px 40px rgba(15,23,42,${lerp(0.14,0.22,bSafe)}))`}}>
              <Cyl acc={bAcc}/>
            </div>
          )}
          {bIn > 0 && <CountryLabel x={bX} name="PAÍS B" region="RBX" appear={T.dos+0.3}/>}
          {/* check verde "sigue en marcha" sobre B */}
          {chkP > 0 && (
            <div style={{position:'absolute', left:bX+52, top:cy-84, transform:`translate(-50%,-50%) scale(${lerp(0.5,1,chkE)})`,
              opacity:clamp(chkP*1.3,0,1)}}>
              <div style={{width:44, height:44, borderRadius:100, background:'linear-gradient(180deg,#34D399,#10B981)',
                display:'flex', alignItems:'center', justifyContent:'center', boxShadow:'0 8px 20px rgba(16,185,129,0.4)'}}>
                <svg width="24" height="24" viewBox="-12 -12 24 24" fill="none">
                  <path d="M -6 0.5 L -1.5 5 L 7 -5" stroke="#fff" strokeWidth="3.4" strokeLinecap="round" strokeLinejoin="round"
                    strokeDasharray="22" strokeDashoffset={22*(1-chkDraw)}/>
                </svg>
              </div>
            </div>
          )}
          {chkP > 0 && (
            <div style={{position:'absolute', left:bX, top:cy+134, transform:'translate(-50%,0)',
              opacity:clamp((chkP-0.2)*1.5,0,1)}}>
              <StatusChip label="Sigue en marcha" color="success" start={T.otro+0.1} t={t}/>
            </div>
          )}

          {/* ===== Backups ×2 al día ===== */}
          {bkLabP > 0 && (
            <div className="f-mono" style={{position:'absolute', left:0, right:0, top:498, textAlign:'center',
              opacity:bkLabP}}>
              <span style={{fontSize:12, fontWeight:700, letterSpacing:'3px', color:'#94A3B8'}}>
                COPIAS DE SEGURIDAD
              </span>
              <span style={{marginLeft:12, fontSize:12, fontWeight:800, letterSpacing:'2px', color:'#0085FF'}}>×2 AL DÍA</span>
            </div>
          )}
          {BK.map((b, i) => {
            const p = clamp((t-b.t0)/0.6, 0, 1);
            if (p <= 0) return null;
            const e = Easing.easeOutBack(p);
            const cx = i===0 ? 700 : 1220;
            return (
              <div key={b.tag} style={{position:'absolute', left:cx-150, top:528, width:300, height:104,
                background:'#fff', border:'1px solid #E2E8F0', borderRadius:16, boxShadow:'0 12px 30px rgba(15,23,42,0.07)',
                display:'flex', alignItems:'center', gap:14, padding:'0 18px',
                opacity:clamp(p*1.3,0,1), transform:`translateY(${(1-e)*16}px) scale(${lerp(0.9,1,e)})`}}>
                <div style={{width:46, height:46, borderRadius:13, background:'#EFF6FF', flexShrink:0,
                  display:'flex', alignItems:'center', justifyContent:'center'}}>
                  <svg width="24" height="24" viewBox="0 0 24 24" fill="none">
                    <rect x="3" y="7" width="18" height="13" rx="3" stroke="#0085FF" strokeWidth="2"/>
                    <path d="M9 7 L10.5 4 H13.5 L15 7" stroke="#0085FF" strokeWidth="2" strokeLinejoin="round"/>
                    <circle cx="12" cy="13.5" r="3.2" stroke="#0085FF" strokeWidth="2"/>
                  </svg>
                </div>
                <div style={{flex:1, minWidth:0}}>
                  <div className="f-mono" style={{fontSize:26, fontWeight:800, color:'#0F172A', lineHeight:1}}>{b.time}</div>
                  <div className="f-mono" style={{fontSize:10, fontWeight:700, letterSpacing:'1.5px', color:'#94A3B8', marginTop:4}}>{b.tag}</div>
                </div>
                <div style={{display:'flex', flexDirection:'column', alignItems:'flex-end', gap:6}}>
                  <div style={{width:26, height:26, borderRadius:100, background:'linear-gradient(180deg,#34D399,#10B981)',
                    display:'flex', alignItems:'center', justifyContent:'center'}}>
                    <svg width="15" height="15" viewBox="-8 -8 16 16" fill="none">
                      <path d="M -4 0.5 L -1 3.5 L 5 -3.5" stroke="#fff" strokeWidth="2.4" strokeLinecap="round" strokeLinejoin="round"/>
                    </svg>
                  </div>
                  <span className="f-mono" style={{fontSize:9, fontWeight:700, letterSpacing:'0.5px', color:'#94A3B8',
                    border:'1px solid #E2E8F0', borderRadius:6, padding:'2px 6px'}}>R2</span>
                </div>
              </div>
            );
          })}
        </div>
      )}

      {/* ============================ SEGMENTO 2: réplica vs copia ============================ */}
      {COLS.map(Col)}

      {/* ===== EL REMATE (32.92): escudo verde "No pasa." ===== */}
      {shP > 0 && (
        <div style={{position:'absolute', left:0, right:0, top:300, textAlign:'center', opacity:clamp(shP*1.3,0,1)}}>
          <div style={{display:'inline-block', transform:`translateY(${(1-shE)*22}px) scale(${lerp(0.7,1,shE)*(1+0.03*shPulse)})`,
            filter:`drop-shadow(0 22px ${lerp(44,60,shPulse)}px rgba(16,185,129,${0.28+0.18*shPulse}))`}}>
            <svg width="150" height="176" viewBox="0 0 100 118" fill="none">
              <defs><linearGradient id="shg_in03" x1="0" y1="0" x2="0" y2="1">
                <stop offset="0" stopColor="#34D399"/><stop offset="1" stopColor="#10B981"/>
              </linearGradient></defs>
              <path d="M50 8 L86 22 V58 C86 86 70 104 50 112 C30 104 14 86 14 58 V22 Z"
                fill="url(#shg_in03)" stroke="#059669" strokeWidth="2.5" strokeLinejoin="round"/>
              <path d="M34 60 L46 72 L68 44" stroke="#fff" strokeWidth="7" strokeLinecap="round" strokeLinejoin="round"
                strokeDasharray="70" strokeDashoffset={70*(1-shDraw)}/>
            </svg>
          </div>
          <div className="f-plex" style={{fontSize:56, fontWeight:800, letterSpacing:'-0.03em', color:'#0F172A', marginTop:6}}>
            No pasa.
          </div>
          <div className="f-plex" style={{fontSize:24, fontWeight:500, color:'#64748B', marginTop:8,
            opacity:clamp((t-(T.nopasa+0.5))/0.6, 0, 1)}}>
            Los datos, a salvo.
          </div>
        </div>
      )}

      {/* ===== Salida ===== */}
      {salP > 0 && (
        <div style={{position:'absolute', left:0, right:0, bottom:64, textAlign:'center',
          opacity:clamp(salP*1.3,0,1), transform:`translateY(${(1-salE)*16}px)`}}>
          <span className="f-mono" style={{display:'inline-flex', alignItems:'center', gap:12,
            fontSize:13, fontWeight:700, letterSpacing:'2.5px', color:'#0F172A',
            background:'#fff', border:'1px solid #E2E8F0', borderRadius:100, padding:'12px 26px',
            boxShadow:'0 10px 28px rgba(15,23,42,0.08)'}}>
            ¿Y EL PROGRAMA?
            <span style={{color:'#0085FF', fontSize:16}}>→</span>
          </span>
        </div>
      )}
    </SlideCanvas>
  );
}
Object.assign(window, { EscenaIN03 });
