@import url("https://fonts.googleapis.com/css2?family=Syne:wght@700;800&family=DM+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap");
:root{--spp-bg:rgba(15,15,30,0.6);--spp-fg:#ffffff;--spp-acc:#e63946;--spp-ov:.55;--spp-glow:rgba(230,57,70,0.4);}
#spp-overlay{position:fixed;inset:0;background:rgba(0,0,0,var(--spp-ov));backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);z-index:99998;opacity:0;pointer-events:none;transition:opacity .4s ease;}
#spp-overlay.spp-on{opacity:1;pointer-events:all;}
.spp-popup{position:fixed;z-index:99999;top:50%;left:50%;transform:translate(-50%,-50%) scale(.88) translateY(22px);
  width:calc(100% - 28px);
  background:rgba(12,12,28,0.58);
  color:#fff;
  backdrop-filter:blur(22px) saturate(180%);
  -webkit-backdrop-filter:blur(22px) saturate(180%);
  border:1px solid rgba(255,255,255,0.13);
  box-shadow:0 8px 32px rgba(0,0,0,.55),0 32px 80px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.04) inset;
  opacity:0;pointer-events:none;overflow:hidden;
  transition:opacity .4s cubic-bezier(.4,0,.2,1),transform .5s cubic-bezier(.34,1.56,.64,1);}
.spp-popup::before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.07) 0%,transparent 55%);pointer-events:none;z-index:0;}
.spp-popup > *{position:relative;z-index:1;}
.spp-popup.spp-on{opacity:1;pointer-events:all;transform:translate(-50%,-50%) scale(1) translateY(0);
  box-shadow:0 8px 32px rgba(0,0,0,.55),0 32px 80px rgba(0,0,0,.35),0 0 70px var(--spp-glow),0 0 0 1px rgba(255,255,255,.06) inset;}
.spp-pos-top-left{top:20px!important;left:20px!important;transform:scale(.88) translateY(-12px)!important;}
.spp-pos-top-left.spp-on{transform:scale(1) translateY(0)!important;}
.spp-pos-top-right{top:20px!important;left:auto!important;right:20px!important;transform:scale(.88) translateY(-12px)!important;}
.spp-pos-top-right.spp-on{transform:scale(1) translateY(0)!important;}
.spp-pos-bottom-left{top:auto!important;bottom:20px!important;left:20px!important;transform:scale(.88) translateY(12px)!important;}
.spp-pos-bottom-left.spp-on{transform:scale(1) translateY(0)!important;}
.spp-pos-bottom-right{top:auto!important;bottom:20px!important;left:auto!important;right:20px!important;transform:scale(.88) translateY(12px)!important;}
.spp-pos-bottom-right.spp-on{transform:scale(1) translateY(0)!important;}
.spp-popup[data-anim="bounceIn"].spp-on{animation:sppB .65s cubic-bezier(.34,1.56,.64,1) both;}
@keyframes sppB{0%{opacity:0;transform:translate(-50%,-50%) scale(.2);}60%{opacity:1;transform:translate(-50%,-50%) scale(1.04);}100%{opacity:1;transform:translate(-50%,-50%) scale(1);}}
.spp-popup[data-anim="zoomIn"]{transform:translate(-50%,-50%) scale(.2)!important;}
.spp-popup[data-anim="zoomIn"].spp-on{transform:translate(-50%,-50%) scale(1)!important;}
.spp-popup[data-anim="slideInRight"]{transform:translateX(110vw)!important;}
.spp-popup[data-anim="slideInRight"].spp-on{transform:translate(-50%,-50%)!important;}
.spp-popup[data-anim="slideInLeft"]{transform:translateX(-110vw)!important;}
.spp-popup[data-anim="slideInLeft"].spp-on{transform:translate(-50%,-50%)!important;}
.spp-tpl-side{top:0!important;left:auto!important;right:0!important;transform:translateX(100%)!important;
  border-radius:22px 0 0 22px!important;height:100%;max-height:100vh;overflow-y:auto;max-width:380px!important;}
.spp-tpl-side.spp-on{transform:translateX(0)!important;}
.spp-tpl-topbar{top:0!important;left:0!important;right:0!important;transform:translateY(-100%)!important;border-radius:0!important;max-width:100%!important;width:100%!important;}
.spp-tpl-topbar.spp-on{transform:translateY(0)!important;}
.spp-tpl-bottombar{bottom:0!important;top:auto!important;left:0!important;right:0!important;transform:translateY(100%)!important;border-radius:22px 22px 0 0!important;max-width:100%!important;width:100%!important;}
.spp-tpl-bottombar.spp-on{transform:translateY(0)!important;}
.spp-tpl-fullscreen{inset:0!important;transform:none!important;border-radius:0!important;max-width:100%!important;width:100%!important;height:100%!important;display:flex;align-items:center;justify-content:center;background:rgba(5,5,15,.72)!important;}
.spp-tpl-fullscreen.spp-on{transform:none!important;}
/* Shaped template */
.spp-tpl-shaped{background:transparent!important;box-shadow:none!important;border-radius:0!important;overflow:visible!important;padding:0!important;}
.spp-tpl-shaped .spp-x{top:6%!important;right:8%!important;background:rgba(0,0,0,.35);color:#fff;}
.spp-tpl-shaped .spp-shaped-wrap{position:relative;width:100%;display:flex;align-items:center;justify-content:center;}
.spp-tpl-shaped .spp-shaped-img{width:100%;display:block;pointer-events:none;}
.spp-tpl-shaped .spp-body{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:55%;text-align:center;padding:8px 10px!important;background:transparent!important;}
.spp-tpl-shaped .spp-title{font-size:clamp(14px,3vw,22px)!important;}
.spp-tpl-shaped .spp-text{font-size:12px!important;margin-bottom:8px!important;}
.spp-tpl-luxury .spp-title{background:linear-gradient(100deg,#c9a84c,#f5e070,#c9a84c);background-size:200% auto;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:sppShine 3s linear infinite;}
@keyframes sppShine{to{background-position:200% center;}}
.spp-tpl-luxury .spp-coupon-box{border-color:rgba(201,168,76,.5);background:rgba(201,168,76,.1);}
.spp-tpl-luxury .spp-ein{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.2);}
.spp-tpl-luxury .spp-ein::placeholder{color:rgba(255,255,255,.35);}
.spp-tpl-bold .spp-title{font-size:clamp(26px,5vw,36px);}
.spp-tpl-bold .spp-cta{border-radius:6px;text-transform:uppercase;letter-spacing:.12em;}
.spp-x{position:absolute;top:12px;right:14px;z-index:10;
  background:rgba(255,255,255,.1);color:#fff;
  border:1px solid rgba(255,255,255,.18);border-radius:50%;
  width:30px;height:30px;font-size:16px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:background .2s,transform .25s,border-color .2s;backdrop-filter:blur(8px);}
.spp-x:hover{background:rgba(255,255,255,.22);transform:rotate(90deg) scale(1.1);border-color:rgba(255,255,255,.4);}
.spp-img{position:relative;overflow:hidden;}
.spp-img img{width:100%;display:block;max-height:200px;object-fit:cover;filter:brightness(.88);}
.spp-img::after{content:"";position:absolute;bottom:0;left:0;right:0;height:45%;background:linear-gradient(to top,rgba(12,12,28,.6),transparent);}
.spp-body{padding:24px 22px 18px;}
.spp-tpl-topbar .spp-body,.spp-tpl-bottombar .spp-body{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:12px 18px;}
.spp-badge{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  padding:5px 13px;border-radius:99px;margin-bottom:12px;font-family:"DM Sans",sans-serif;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.2);color:#fff;
  box-shadow:0 2px 10px rgba(0,0,0,.2);animation:sppBadgePop .5s cubic-bezier(.34,1.56,.64,1) both .15s;}
@keyframes sppBadgePop{from{opacity:0;transform:scale(.7) translateY(-5px);}to{opacity:1;transform:scale(1) translateY(0);}}
.spp-title{margin:0 0 8px;font-family:"Syne",sans-serif;font-size:clamp(19px,3.5vw,26px);font-weight:800;line-height:1.2;color:#fff;text-shadow:0 2px 18px rgba(0,0,0,.35);}
.spp-text{margin:0 0 14px;font-size:13.5px;line-height:1.65;color:rgba(255,255,255,.78);font-family:"DM Sans",sans-serif;}
.spp-stars{color:#f59e0b;font-size:20px;letter-spacing:3px;margin-bottom:8px;text-shadow:0 0 10px rgba(245,158,11,.5);}
.spp-review{margin:0 0 13px;font-style:italic;font-size:13px;color:rgba(255,255,255,.7);border-left:2px solid var(--spp-acc);padding-left:10px;font-family:"DM Sans",sans-serif;}
.spp-cta{display:block;width:100%;padding:13px 16px;
  background:linear-gradient(135deg,var(--spp-acc) 0%,rgba(230,57,70,.75) 100%);
  color:#fff;border:none;border-radius:12px;font-size:14px;font-weight:700;
  font-family:"DM Sans",sans-serif;cursor:pointer;text-decoration:none;text-align:center;
  transition:filter .2s,transform .2s,box-shadow .2s;
  box-shadow:0 4px 20px rgba(0,0,0,.3),0 0 0 1px rgba(255,255,255,.1) inset;position:relative;overflow:hidden;}
.spp-cta::after{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.15) 0%,transparent 50%);pointer-events:none;}
.spp-cta:hover{filter:brightness(1.12);transform:translateY(-2px);color:#fff;box-shadow:0 8px 28px rgba(0,0,0,.4),0 0 40px var(--spp-glow);}
.spp-cta:active{transform:translateY(0);}
.spp-nothanks{display:block;width:100%;margin-top:8px;padding:6px;background:transparent;border:none;
  cursor:pointer;font-size:11.5px;color:rgba(255,255,255,.42);font-family:"DM Sans",sans-serif;text-decoration:underline;transition:color .15s;}
.spp-nothanks:hover{color:rgba(255,255,255,.72);}
.spp-coupon-wrap{margin:13px 0;}
.spp-coupon-lbl{font-size:9.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.48);display:block;margin-bottom:5px;}
.spp-coupon-box{display:flex;align-items:center;justify-content:space-between;
  background:rgba(255,255,255,.07);border:1.5px dashed rgba(255,255,255,.28);
  border-radius:11px;padding:10px 14px;cursor:pointer;transition:background .2s,border-color .2s;user-select:none;backdrop-filter:blur(6px);}
.spp-coupon-box:hover{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.5);}
.spp-coupon-box code{font-size:16px;font-weight:800;font-family:monospace;letter-spacing:.1em;color:#fff;}
.spp-copy-btn{font-size:11px;color:rgba(255,255,255,.58);white-space:nowrap;}
.spp-eform{display:flex;flex-direction:column;gap:9px;}
.spp-ein{width:100%;padding:11px 13px;border-radius:11px;border:1px solid rgba(255,255,255,.18);
  font-size:13.5px;font-family:"DM Sans",sans-serif;background:rgba(255,255,255,.08);
  color:#fff;transition:border-color .2s,background .2s;backdrop-filter:blur(8px);}
.spp-ein::placeholder{color:rgba(255,255,255,.38);}
.spp-ein:focus{outline:none;border-color:var(--spp-acc);background:rgba(255,255,255,.12);}
.spp-gdpr{display:flex;align-items:flex-start;gap:6px;font-size:11px;color:rgba(255,255,255,.58);cursor:pointer;font-family:"DM Sans",sans-serif;}
.spp-gdpr input{margin-top:2px;flex-shrink:0;accent-color:var(--spp-acc);}
.spp-timer{margin:12px 0;text-align:center;}
.spp-timer-lbl{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.52);display:block;margin-bottom:8px;}
.spp-timer-digs{display:flex;gap:5px;justify-content:center;align-items:center;}
.spp-tunit{display:flex;flex-direction:column;align-items:center;background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.11);border-radius:10px;padding:7px 12px;min-width:50px;backdrop-filter:blur(8px);}
.spp-tunit b{font-size:21px;font-weight:800;font-family:monospace;line-height:1;color:#fff;text-shadow:0 0 18px var(--spp-acc);}
.spp-tunit em{font-size:8px;font-style:normal;color:rgba(255,255,255,.44);text-transform:uppercase;letter-spacing:.06em;margin-top:3px;}
.spp-tsep{font-size:21px;font-weight:800;color:rgba(255,255,255,.32);animation:sppBlink 1s step-end infinite;}
@keyframes sppBlink{50%{opacity:0;}}
.spp-fomo{display:inline-block;text-align:center;font-size:12px;font-weight:700;color:rgba(255,255,255,.85);margin-bottom:12px;
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);border-radius:99px;padding:5px 14px;
  animation:sppFP 2.5s ease-in-out infinite;font-family:"DM Sans",sans-serif;}
@keyframes sppFP{0%,100%{opacity:.75;transform:scale(1);}50%{opacity:1;transform:scale(1.02);}}
.spp-prog{margin:12px 0;}
.spp-prog-txt{font-size:12px;font-weight:600;margin-bottom:6px;color:rgba(255,255,255,.8);font-family:"DM Sans",sans-serif;}
.spp-prog-bar{background:rgba(255,255,255,.1);border-radius:99px;height:6px;overflow:hidden;}
.spp-prog-fill{height:100%;border-radius:99px;transition:width .9s cubic-bezier(.4,0,.2,1);box-shadow:0 0 8px var(--spp-glow);}
.spp-prods{display:grid;grid-template-columns:repeat(auto-fill,minmax(86px,1fr));gap:8px;margin:12px 0;}
.spp-pcard{display:flex;flex-direction:column;text-decoration:none;color:#fff;
  border-radius:10px;border:1px solid rgba(255,255,255,.14);overflow:hidden;
  background:rgba(255,255,255,.05);backdrop-filter:blur(8px);transition:transform .2s,box-shadow .2s;}
.spp-pcard:hover{transform:translateY(-3px);box-shadow:0 8px 22px rgba(0,0,0,.3);}
.spp-pcard img{width:100%;height:68px;object-fit:cover;}
.spp-pname{font-size:10.5px;font-weight:600;padding:4px 6px;line-height:1.3;color:rgba(255,255,255,.9);}
.spp-pprice{font-size:10.5px;font-weight:700;padding:0 6px 6px;color:var(--spp-acc);}
.spp-spin{display:flex;flex-direction:column;align-items:center;gap:12px;padding:8px 0;}
.spp-spin-c{position:relative;display:inline-block;}
.spp-spin-cv{border-radius:50%;box-shadow:0 8px 30px rgba(0,0,0,.4),0 0 0 4px rgba(255,255,255,.1);}
.spp-spin-ptr{position:absolute;top:-10px;left:50%;transform:translateX(-50%);font-size:22px;filter:drop-shadow(0 3px 6px rgba(0,0,0,.4));}
.spp-spin-btn{padding:12px 26px;border:none;border-radius:99px;color:#fff;font-size:14px;font-weight:800;cursor:pointer;font-family:"DM Sans",sans-serif;
  box-shadow:0 4px 18px rgba(0,0,0,.3),0 0 28px var(--spp-glow);transition:transform .2s,box-shadow .2s;
  background:linear-gradient(135deg,var(--spp-acc),rgba(230,57,70,.7));}
.spp-spin-btn:hover:not(:disabled){transform:scale(1.06);box-shadow:0 6px 26px rgba(0,0,0,.4),0 0 48px var(--spp-glow);}
.spp-spin-btn:disabled{opacity:.55;cursor:not-allowed;}
.spp-spin-res{text-align:center;padding:11px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:11px;font-weight:700;font-size:14px;color:#fff;backdrop-filter:blur(8px);}
.spp-step-q{font-weight:700;font-size:15px;margin-bottom:11px;font-family:"Syne",sans-serif;color:#fff;}
.spp-step-opts{display:flex;flex-direction:column;gap:8px;}
.spp-step-btn{padding:10px 14px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.18);
  border-radius:11px;cursor:pointer;font-size:13px;font-weight:600;font-family:"DM Sans",sans-serif;
  text-align:left;transition:all .2s;color:#fff;backdrop-filter:blur(6px);}
.spp-step-btn:hover{background:rgba(255,255,255,.17);border-color:rgba(255,255,255,.38);transform:translateX(3px);}
.spp-step-final{padding-top:7px;}
.spp-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(24px);
  background:rgba(8,8,20,.85);border:1px solid rgba(255,255,255,.11);
  color:#fff;padding:12px 22px;border-radius:12px;font-size:13px;
  font-family:"DM Sans",sans-serif;font-weight:600;z-index:1000002;opacity:0;
  transition:all .35s cubic-bezier(.34,1.56,.64,1);pointer-events:none;
  box-shadow:0 8px 30px rgba(0,0,0,.45);white-space:nowrap;backdrop-filter:blur(16px);}
.spp-toast.spp-ton{opacity:1;transform:translateX(-50%) translateY(0);}
@media(max-width:600px){
  .spp-body{padding:20px 16px 16px;}
  .spp-tpl-side{max-width:100%!important;border-radius:22px 22px 0 0!important;top:auto!important;bottom:0!important;transform:translateY(100%)!important;height:auto!important;}
  .spp-tpl-side.spp-on{transform:translateY(0)!important;}
  .spp-title{font-size:clamp(18px,4vw,22px);}
}
'; }

/* ═══════════════════════════ JS FRONTEND ═════════════════════════ */
function spp_frontend_js(): string { return '
(function(){
"use strict";
const shown=JSON.parse(localStorage.getItem("spp_s")||"{}");
const sess=JSON.parse(sessionStorage.getItem("spp_ss")||"{}");
const timers={};
let exitDone=false, currentOpen=null;
function saveS(){try{localStorage.setItem("spp_s",JSON.stringify(shown));}catch(e){}}
function saveSS(){try{sessionStorage.setItem("spp_ss",JSON.stringify(sess));}catch(e){}}

function canShow(cfg){
  const id=cfg.id,fr=cfg.frequency,key="p"+id,now=Date.now();
  if(fr==="always") return true;
  if(fr==="once_session") return !sess[key];
  if(fr==="once_ever") return !shown[key];
  if(fr==="once_day") return !shown[key]||(now-shown[key])>86400000;
  if(fr==="once_week") return !shown[key]||(now-shown[key])>604800000;
  return true;
}
function markShown(id){const key="p"+id;shown[key]=Date.now();sess[key]=1;saveS();saveSS();}

window.sppOpen=function(id){
  const pop=document.getElementById("spp-popup-"+id);
  const ov=document.getElementById("spp-overlay");
  if(!pop||pop.classList.contains("spp-on")) return;
  document.querySelectorAll(".spp-popup.spp-on").forEach(p=>sppClose(+p.dataset.id));
  ov.style.setProperty("--spp-ov", getComputedStyle(pop).getPropertyValue("--spp-ov").trim()||".65");
  ov.classList.add("spp-on");
  pop.classList.add("spp-on");
  currentOpen=id; markShown(id);
  sppTrack(id,"impression");
  sppStartTimer(id,pop);
  sppStartFomo(id,pop);
  sppUpdateProg(id,pop);
  sppInitSpin(id,pop);
  if(window.sppData?.gtmEnabled){window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:sppData.gtmEvent,popup_id:id,popup_event:"open"});}
  document.body.style.overflow="hidden";
};

window.sppClose=function(id){
  const pop=document.getElementById("spp-popup-"+id);
  const ov=document.getElementById("spp-overlay");
  if(!pop) return;
  pop.classList.remove("spp-on"); ov.classList.remove("spp-on");
  sppTrack(id,"close");
  if(timers[id+"_c"]) clearInterval(timers[id+"_c"]);
  if(timers[id+"_f"]) clearInterval(timers[id+"_f"]);
  if(currentOpen===id) currentOpen=null;
  document.body.style.overflow="";
};

document.addEventListener("DOMContentLoaded",function(){
  const ov=document.getElementById("spp-overlay");
  if(ov) ov.addEventListener("click",()=>{if(currentOpen!==null)sppClose(currentOpen);});
  document.addEventListener("keydown",e=>{if(e.key==="Escape"&&currentOpen!==null)sppClose(currentOpen);});
  // Email forms
  document.querySelectorAll(".spp-eform").forEach(form=>{
    form.addEventListener("submit",async function(e){
      e.preventDefault();
      const email=this.querySelector(".spp-ein").value;
      const pid=this.dataset.popup; const doConf=this.dataset.confetti==="true";
      const btn=this.querySelector("button[type=submit]");
      btn.disabled=true; btn.textContent="⏳ Enviando...";
      const fd=new FormData();
      fd.append("action","spp_subscribe");fd.append("nonce",sppData.nonce);
      fd.append("email",email);fd.append("popup_id",pid);
      try{
        const res=await fetch(sppData.ajaxUrl,{method:"POST",body:fd});
        const data=await res.json();
        if(data.success){
          btn.textContent="✅ ¡Suscrito!";
          sppTrack(pid,"conversion");
          if(data.data.coupon){
            const body=document.querySelector("#spp-popup-"+pid+" .spp-body");
            if(body&&!body.querySelector(".spp-coupon-wrap"))
              body.insertAdjacentHTML("beforeend","<div class='spp-coupon-wrap'><div class='spp-coupon-box' onclick='sppCopy(this)' data-coupon='"+data.data.coupon+"'><code>"+data.data.coupon+"</code><span class='spp-copy-btn'>📋 Copiar</span></div></div>");
            sppToast("🎁 Tu cupón: "+data.data.coupon,5000);
          } else sppToast("🎉 ¡Gracias por suscribirte!");
          if(doConf) sppConfetti();
          if(window.sppData?.gtmEnabled){window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:sppData.gtmEvent,popup_id:pid,popup_event:"conversion"});}
          setTimeout(()=>sppClose(+pid),2800);
        } else { btn.textContent="❌ Error"; btn.disabled=false; }
      }catch(err){btn.textContent="❌ Error";btn.disabled=false;}
    });
  });
});

window.sppTrack=function(id,event){
  if(!window.sppData) return;
  const body=new URLSearchParams({action:"spp_track",nonce:sppData.nonce,popup_id:id,event,session_id:sppData.sessionId,page_url:sppData.pageUrl});
  navigator.sendBeacon?navigator.sendBeacon(sppData.ajaxUrl,body):fetch(sppData.ajaxUrl,{method:"POST",body,keepalive:true}).catch(()=>{});
};

window.sppCopy=function(el){
  const code=el.dataset.coupon; if(!code) return;
  (navigator.clipboard?navigator.clipboard.writeText(code):Promise.reject()).catch(()=>{
    const ta=document.createElement("textarea");ta.value=code;ta.style="position:fixed;opacity:0";
    document.body.appendChild(ta);ta.select();document.execCommand("copy");document.body.removeChild(ta);
  }).finally(()=>{
    const btn=el.querySelector(".spp-copy-btn");
    if(btn){btn.textContent="✅ ¡Copiado!";setTimeout(()=>btn.textContent="📋 Copiar",2500);}
    sppToast("✅ Cupón copiado: "+code);
  });
};

window.sppToast=function(msg,dur=3000){
  const t=document.getElementById("spp-toast"); if(!t) return;
  t.textContent=msg; t.classList.add("spp-ton");
  setTimeout(()=>t.classList.remove("spp-ton"),dur);
};

function sppStartTimer(id,pop){
  const el=pop.querySelector(".spp-timer"); if(!el) return;
  const mins=parseInt(el.dataset.minutes||10); let secs=mins*60;
  const hEl=el.querySelector(".spp-th"),mEl=el.querySelector(".spp-tm"),sEl=el.querySelector(".spp-ts");
  if(!hEl||!mEl||!sEl) return;
  const pad=n=>String(n).padStart(2,"0");
  const tick=()=>{if(secs<=0){clearInterval(timers[id+"_c"]);return;}hEl.textContent=pad(Math.floor(secs/3600));mEl.textContent=pad(Math.floor((secs%3600)/60));sEl.textContent=pad(secs%60);secs--;};
  tick(); timers[id+"_c"]=setInterval(tick,1000);
}

function sppStartFomo(id,pop){
  const el=pop.querySelector(".spp-fomo"); if(!el) return;
  const mn=parseInt(el.dataset.min||8),mx=parseInt(el.dataset.max||24);
  const tpl=el.dataset.text||"{n} personas ven esto";
  const rand=()=>Math.floor(Math.random()*(mx-mn+1))+mn;
  el.textContent=tpl.replace("{n}",rand());
  timers[id+"_f"]=setInterval(()=>el.textContent=tpl.replace("{n}",rand()),5000+Math.random()*5000);
}

function sppUpdateProg(id,pop){
  const fill=pop.querySelector(".spp-prog-fill"),text=pop.querySelector(".spp-prog-txt"); if(!fill) return;
  const goal=parseFloat(fill.dataset.goal||0),cart=window.sppData?sppData.cartTotal:0;
  const pct=goal>0?Math.min((cart/goal)*100,100):0;
  fill.style.width=pct+"%";
  if(text&&text.dataset.text) text.textContent=text.dataset.text.replace("{r}","$"+(Math.max(0,goal-cart)).toFixed(2)).replace("{pct}",Math.round(pct)+"%");
}

function sppInitSpin(id,pop){
  const wrap=pop.querySelector(".spp-spin"),cv=pop.querySelector(".spp-spin-cv"); if(!wrap||!cv) return;
  const prizes=JSON.parse(wrap.dataset.prizes||"[]"),acc=wrap.dataset.accent||"#e63946";
  if(!prizes.length) return;
  const ctx=cv.getContext("2d"),W=cv.width,R=W/2,sl=(2*Math.PI)/prizes.length;
  const cols=["#e63946","#457b9d","#2a9d8f","#e9c46a","#f4a261","#a8dadc","#1d3557","#264653"];
  function draw(rot){
    ctx.clearRect(0,0,W,W);
    prizes.forEach((p,i)=>{
      const s=rot+i*sl; ctx.beginPath();ctx.moveTo(R,R);ctx.arc(R,R,R-4,s,s+sl);ctx.closePath();
      ctx.fillStyle=cols[i%cols.length];ctx.fill();ctx.strokeStyle="#fff";ctx.lineWidth=2;ctx.stroke();
      ctx.save();ctx.translate(R,R);ctx.rotate(s+sl/2);ctx.textAlign="right";ctx.fillStyle="#fff";
      ctx.font="bold "+(prizes.length>5?"10":"12")+"px DM Sans,sans-serif";ctx.fillText(p.label,R-9,4);ctx.restore();
    });
    ctx.beginPath();ctx.arc(R,R,18,0,2*Math.PI);ctx.fillStyle=acc;ctx.fill();ctx.strokeStyle="#fff";ctx.lineWidth=3;ctx.stroke();
  }
  draw(0); wrap._prizes=prizes; wrap._draw=draw;
}

window.sppSpin=function(btn){
  const wrap=btn.closest(".spp-spin");const prizes=wrap._prizes;if(!prizes||btn.disabled)return;
  btn.disabled=true;const pid=wrap.dataset.popup;
  const tot=prizes.reduce((s,p)=>s+(p.prob||10),0);let r=Math.random()*tot,chosen=0;
  for(let i=0;i<prizes.length;i++){r-=(prizes[i].prob||10);if(r<=0){chosen=i;break;}}
  const sl=(2*Math.PI)/prizes.length,target=-(chosen*sl+sl/2+Math.PI/2);
  const spins=5+Math.random()*3,finalRot=target-spins*Math.PI*2;
  const start=performance.now(),dur=3500;
  const ease=t=>1-(1-t)*(1-t)*(1-t);
  function frame(now){
    const t=Math.min((now-start)/dur,1); wrap._draw(finalRot*ease(t));
    if(t<1){requestAnimationFrame(frame);}else{
      const prize=prizes[chosen],res=wrap.querySelector(".spp-spin-res");
      res.style.display="block";res.innerHTML="<div style='font-size:22px;margin-bottom:7px'>🎉</div><div>¡Ganaste: <strong>"+prize.label+"</strong>!</div>";
      if(prize.coupon) res.innerHTML+="<div class='spp-coupon-box' onclick='sppCopy(this)' data-coupon='"+prize.coupon+"' style='margin-top:9px;border-radius:9px;padding:9px 12px;background:rgba(0,0,0,.08);cursor:pointer;border:2px dashed currentColor'><code style='font-size:15px;font-weight:800'>"+prize.coupon+"</code><span class='spp-copy-btn' style='font-size:11px;opacity:.7'> 📋 Copiar</span></div>";
      fetch(sppData.ajaxUrl,{method:"POST",body:new URLSearchParams({action:"spp_spin",nonce:sppData.nonce,popup_id:pid,prize_idx:chosen,session_id:sppData.sessionId})});
      if(prize.coupon) sppToast("🎉 Cupón: "+prize.coupon,5000);
      sppConfetti();
    }
  }
  requestAnimationFrame(frame);
};

window.sppNextStep=function(btn,popupId,nextIndex){
  const steps=document.querySelector("#spp-popup-"+popupId+" .spp-steps");if(!steps)return;
  btn.closest(".spp-step").style.display="none";
  const next=steps.querySelector(".spp-step[data-step='"+nextIndex+"']");
  const final=steps.querySelector(".spp-step-final");
  if(next) next.style.display="";
  else if(final){final.style.display="";sppTrack(popupId,"conversion");}
};

window.sppConfetti=function(){
  const cv=document.getElementById("spp-confetti");if(!cv)return;
  cv.style.display="block";const ctx=cv.getContext("2d");
  cv.width=window.innerWidth;cv.height=window.innerHeight;
  const pieces=Array.from({length:110},()=>({
    x:Math.random()*cv.width,y:Math.random()*-cv.height,vx:(Math.random()-.5)*5,vy:2+Math.random()*5,
    w:8+Math.random()*11,h:5+Math.random()*7,rot:Math.random()*360,vr:(Math.random()-.5)*8,
    color:["#e63946","#f59e0b","#22c55e","#6366f1","#0ea5e9","#f97316"][Math.floor(Math.random()*6)]
  }));
  let fr;
  const draw=()=>{ctx.clearRect(0,0,cv.width,cv.height);let done=true;
    pieces.forEach(p=>{p.x+=p.vx;p.y+=p.vy;p.rot+=p.vr;p.vy+=.1;if(p.y<cv.height)done=false;
      ctx.save();ctx.translate(p.x,p.y);ctx.rotate(p.rot*Math.PI/180);ctx.fillStyle=p.color;ctx.fillRect(-p.w/2,-p.h/2,p.w,p.h);ctx.restore();});
    if(done){cv.style.display="none";cancelAnimationFrame(fr);}else fr=requestAnimationFrame(draw);};
  fr=requestAnimationFrame(draw);
  setTimeout(()=>{cv.style.display="none";cancelAnimationFrame(fr);},4000);
};

// EXIT INTENT
document.addEventListener("mouseleave",function(e){
  if(e.clientY>10||exitDone||!window.sppConfigs)return;
  const exits=sppConfigs.filter(c=>c.triggerType==="exit_intent"&&canShow(c));
  if(!exits.length)return; exitDone=true; sppOpen(exits[0].id);
});

// INICIALIZACIÓN — se llama DESPUÉS del HTML (spp_render priority 10)
window.sppInit=async function(){
  if(!window.sppConfigs||!sppConfigs.length)return;
  // Geo check solo si hay popups con países
  let country="";
  if(sppConfigs.some(c=>c.targetCountries&&c.targetCountries.length&&!c.targetCountries.includes("all"))){
    try{const r=await fetch("https://ipapi.co/json/");const dg=await r.json();country=dg.country_code||"";}catch(e){}
  }
  sppConfigs.forEach(cfg=>{
    if(!canShow(cfg))return;
    const cart=window.sppData?sppData.cartTotal:0;
    if(cfg.cartMin>0&&cart<cfg.cartMin)return;
    if(cfg.cartMax>0&&cart>cfg.cartMax)return;
    if(country&&cfg.targetCountries&&cfg.targetCountries.length&&!cfg.targetCountries.includes("all")&&!cfg.targetCountries.includes(country))return;
    const tv=cfg.triggerType;
    if(tv==="page_load"){sppOpen(cfg.id);}
    else if(tv==="time_delay"){setTimeout(()=>{if(!currentOpen)sppOpen(cfg.id);},parseFloat(cfg.triggerValue||3)*1000);}
    else if(tv==="scroll"){
      const pct=parseFloat(cfg.triggerValue||50)/100;let fired=false;
      const fn=()=>{if(fired||currentOpen)return;const s=(window.scrollY||document.documentElement.scrollTop)/(document.body.scrollHeight-window.innerHeight);if(s>=pct){fired=true;sppOpen(cfg.id);window.removeEventListener("scroll",fn);}};
      window.addEventListener("scroll",fn,{passive:true});
    }
    else if(tv==="inactivity"){
      let tt;const reset=()=>{clearTimeout(tt);if(!currentOpen)tt=setTimeout(()=>sppOpen(cfg.id),parseFloat(cfg.triggerValue||10)*1000);};
      ["mousemove","keypress","scroll","touchstart"].forEach(ev=>document.addEventListener(ev,reset,{passive:true}));reset();
    }
    else if(tv==="click_element"){
      const sel=cfg.triggerValue;if(sel)document.addEventListener("click",e=>{if(e.target.matches(sel)||e.target.closest(sel))sppOpen(cfg.id);});
    }
    else if(tv==="cart_value"){if(cart>0)setTimeout(()=>{if(!currentOpen)sppOpen(cfg.id);},1500);}
    else if(tv==="page_count"){
      const n=parseInt(sessionStorage.getItem("spp_pgs")||0)+1;sessionStorage.setItem("spp_pgs",n);
      if(n>=parseInt(cfg.triggerValue||3))setTimeout(()=>{if(!currentOpen)sppOpen(cfg.id);},500);
    }
  });
};
})();