/* ══════════════════════════════════════════════════════════════
   jugar-view.css — Hub «Jugar» (Fase 1 de la reestructura).
   Vista inmersiva: mazo activo + botón fusionado con el modo +
   menú de modos (tarjetas grandes en escritorio / lista en móvil).
   Estética real de tcgmini (oscuro, system-ui, cristal, oro online).
   Todo scopeado bajo #view-jugar. Aditivo: no toca otras vistas.
   ══════════════════════════════════════════════════════════════ */
#view-jugar{
  position:fixed; top:48px; left:0; right:0; bottom:0; z-index:9050;
  display:none; /* switchAppTab lo pone a flex */
  flex-direction:column; overflow:hidden;
  font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  color:#efeef5; background:#0b0b11;
  --jv-gold:#ffd166; --jv-gold-deep:#f2b13a;
  --jv-line:rgba(255,255,255,0.09); --jv-line2:rgba(255,255,255,0.17);
  --jv-panel:rgba(255,255,255,0.05); --jv-panel2:rgba(255,255,255,0.09);
  --jv-muted:#9797a7; --jv-muted2:#6a6a76; --jv-live:#57dc8c;
  --jv-a-std:#ffd166; --jv-a-draft:#5ec8ff; --jv-a-evo:#59d39a; --jv-a-libre:#b79cff;
  /* alto de las bandas de modo en móvil (banners_tuner.html → «Alto de la banda») */
  --jv-band-h:114px;
  /* ancho del mazo activo: de aquí cuelga el espaciado del bloque central, así que al
     encoger el mazo en pantallas estrechas los huecos encogen con él (en escritorio da
     270px = exactamente el espaciado de siempre: 22px bajo el nombre, 62px sobre el botón) */
  --jv-deckw:min(270px,66vw);
}

/* fondo atmosférico */
#view-jugar .jv-bg{position:absolute; inset:0; z-index:0; overflow:hidden; pointer-events:none}
#view-jugar .jv-bg::before{content:""; position:absolute; inset:0;
  background:
    radial-gradient(760px 620px at 50% 20%, rgba(255,196,120,.15), transparent 62%),
    radial-gradient(720px 560px at 14% 108%, rgba(77,171,255,.12), transparent 60%),
    radial-gradient(760px 620px at 90% 112%, rgba(255,107,107,.10), transparent 60%),
    linear-gradient(180deg,#101019,#0a0a10 70%);}
#view-jugar .jv-vig{position:absolute; inset:0; background:radial-gradient(120% 100% at 50% 42%, transparent 52%, rgba(0,0,0,.5) 100%)}
/* Fondo de pokéballs (mismo tile que el draft): textura con marca + deriva lenta, muy sutil bajo los glows. */
#view-jugar .jv-pokeballs{position:absolute; inset:0; z-index:0; overflow:hidden; pointer-events:none; opacity:0.045;
  -webkit-mask-image:radial-gradient(ellipse 95% 80% at 50% 42%, #000 55%, transparent 100%);
          mask-image:radial-gradient(ellipse 95% 80% at 50% 42%, #000 55%, transparent 100%);}
#view-jugar .jv-pokeballs::before{content:''; position:absolute; top:-320px; left:-320px;
  width:calc(100% + 640px); height:calc(100% + 640px);
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 200 200'%3E%3Cg fill='none' stroke='white' stroke-width='3.2'%3E%3Cg transform='translate(50 50) rotate(22)'%3E%3Cpath fill='white' stroke='none' fill-rule='evenodd' d='M-24 0A24 24 0 0 1 24 0Z M-9 0A9 9 0 0 1 9 0Z'/%3E%3Ccircle r='24'/%3E%3Ccircle r='9'/%3E%3C/g%3E%3Cg transform='translate(150 50) rotate(112)'%3E%3Cpath fill='white' stroke='none' fill-rule='evenodd' d='M-24 0A24 24 0 0 1 24 0Z M-9 0A9 9 0 0 1 9 0Z'/%3E%3Ccircle r='24'/%3E%3Ccircle r='9'/%3E%3C/g%3E%3Cg transform='translate(50 150) rotate(205)'%3E%3Cpath fill='white' stroke='none' fill-rule='evenodd' d='M-24 0A24 24 0 0 1 24 0Z M-9 0A9 9 0 0 1 9 0Z'/%3E%3Ccircle r='24'/%3E%3Ccircle r='9'/%3E%3C/g%3E%3Cg transform='translate(150 150) rotate(298)'%3E%3Cpath fill='white' stroke='none' fill-rule='evenodd' d='M-24 0A24 24 0 0 1 24 0Z M-9 0A9 9 0 0 1 9 0Z'/%3E%3Ccircle r='24'/%3E%3Ccircle r='9'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E") 0 0 / 300px 300px repeat;
  animation:jv-bg-drift 52s linear infinite;}
@keyframes jv-bg-drift{to{transform:translate(300px,300px)}}

/* zona central */
#view-jugar .jv-home{position:relative; z-index:2; flex:1; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:14px; padding:20px; overflow:auto}
#view-jugar .jv-eyebrow{font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--jv-muted); font-weight:700}

/* ── mazo activo (HERO) ──────────────────────────────────────────────
   Reutiliza el .mz-stack de Mis Mazos, pero con presencia de héroe:
   bisel + sombra a capas + gloss para que la carta destacada se lea como
   UNA carta premium, y un hover que respira (elevación + destello +
   apertura del stack). ⚠ El contenedor REAL es #jv-deckstage (.jv2-dwrap):
   todos los :hover van scopeados a ESE id — si se renombra el markup,
   re-scopear aquí o el hover muere en silencio (ya pasó una vez). */

#view-jugar .jv-deck-wrap{position:relative; width:210px; max-width:62vw}
#view-jugar .jv-deck-wrap .mz-stack{margin-bottom:0}

/* dorsos: sombra propia + apertura suave = volumen real de mazo */
#view-jugar .jv-deck-wrap .mz-stack-back{border-radius:11px; border-color:rgba(255,255,255,.05);
  box-shadow:0 5px 12px rgba(0,0,0,.4);
  transition:transform .32s cubic-bezier(.34,1.25,.64,1), opacity .26s, box-shadow .3s}
/* spread EN REPOSO = el del hover de antes (Daniel 2026-08-08: que el mazo «tenga cartas»
   por defecto); el hover abre AÚN más (reglas :hover más abajo) */
#view-jugar .jv-deck-wrap .mz-stack-back-1{transform:translateY(8px);  opacity:.92}
#view-jugar .jv-deck-wrap .mz-stack-back-2{transform:translateY(16px); opacity:.68}
#view-jugar .jv-deck-wrap .mz-stack-back-3{transform:translateY(24px); opacity:.46}
/* «púlsame»: nudge muy sutil cada ~8 s (pausa en hover; fuera con reducir-animaciones) */
@keyframes jv2DeckNudge{0%,90%,100%{transform:translateY(0)}93%{transform:translateY(-5px)}96%{transform:translateY(1px)}98%{transform:translateY(0)}}
#view-jugar .jv-deck-wrap .mz-stack{animation:jv2DeckNudge 8s ease-in-out infinite}
#view-jugar #jv-deckstage:hover .jv-deck-wrap .mz-stack{animation-play-state:paused}
html.pb-reduce-motion #view-jugar .jv-deck-wrap .mz-stack{animation:none}

/* frente = carta premium: bisel (hairline oscuro fuera / rim claro dentro) + sombra a capas */
#view-jugar .jv-deck-wrap .mz-stack-front{border-radius:12px; border:none;
  box-shadow:
    0 0 0 1px rgba(0,0,0,.55),
    0 2px 3px rgba(0,0,0,.4),
    0 12px 26px -6px rgba(0,0,0,.55),
    0 30px 56px -22px rgba(0,0,0,.72);
  transition:transform .34s cubic-bezier(.2,.8,.3,1), box-shadow .34s}
/* gloss + viñeta estáticos: unifican las bandas bajo una sola luz → objeto único */
#view-jugar .jv-deck-wrap .mz-stack-front::after{content:""; position:absolute; inset:0; z-index:5; pointer-events:none;
  border-radius:inherit;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16), inset 0 0 0 1px rgba(255,255,255,.06);
  background:
    linear-gradient(134deg, rgba(255,255,255,.12), rgba(255,255,255,.02) 26%, transparent 46%),
    radial-gradient(150% 130% at 50% -12%, transparent 58%, rgba(0,0,0,.30) 100%)}
/* destello que barre en el hover = la carta "cobra vida" */
#view-jugar .jv-deck-wrap .mz-stack-front::before{content:""; position:absolute; top:-20%; left:-70%;
  width:46%; height:140%; z-index:6; pointer-events:none;
  background:linear-gradient(100deg, transparent, rgba(255,255,255,.38), transparent);
  transform:skewX(-16deg); opacity:0}
#view-jugar #jv-deckstage:hover .mz-stack-front::before{animation:jvDeckSheen .9s ease-out}
@keyframes jvDeckSheen{0%{left:-70%;opacity:0}16%{opacity:.85}100%{left:135%;opacity:0}}

/* hover: elevación + sombra que crece + apertura del stack */
#view-jugar #jv-deckstage:hover .mz-stack-front{transform:translateY(-6px);
  box-shadow:
    0 0 0 1px rgba(0,0,0,.55),
    0 4px 7px rgba(0,0,0,.42),
    0 22px 44px -8px rgba(0,0,0,.6),
    0 48px 84px -26px rgba(0,0,0,.82)}
#view-jugar #jv-deckstage:hover .mz-stack-back-1{transform:translateY(12px); opacity:.94; box-shadow:0 8px 16px rgba(0,0,0,.42)}
#view-jugar #jv-deckstage:hover .mz-stack-back-2{transform:translateY(23px); opacity:.7;  box-shadow:0 9px 18px rgba(0,0,0,.4)}
#view-jugar #jv-deckstage:hover .mz-stack-back-3{transform:translateY(34px); opacity:.48; box-shadow:0 10px 20px rgba(0,0,0,.38)}
html.pb-reduce-motion #view-jugar #jv-deckstage:hover .mz-stack-front::before{animation:none}

/* estados vacío / fallback */
#view-jugar .jv-empty-deck{aspect-ratio:400/559; box-sizing:border-box; border-radius:12px; text-align:center;
  padding:16px; color:var(--jv-muted); font:600 13px/1.45 system-ui,sans-serif;
  background:linear-gradient(160deg,#20202c,#14141c); border:1px solid rgba(255,255,255,.1)}
#view-jugar button.jv-empty-deck{width:100%; display:grid; place-items:center; appearance:none; cursor:pointer;
  transition:transform .18s cubic-bezier(.2,.8,.25,1),border-color .18s,background .18s,box-shadow .2s}
#view-jugar button.jv-empty-deck:hover{color:#e9e9f1; border-color:rgba(255,255,255,.2); background:linear-gradient(160deg,#262632,#171720);
  transform:translateY(-2px); box-shadow:0 16px 30px -18px #000}
#view-jugar button.jv-empty-deck:active{transform:scale(.985)}
#view-jugar .jv-empty-deck:focus-visible,#view-jugar .jv-welcome-face:focus-visible,
#view-jugar .jv-welcome-local:focus-visible{
  outline:2px solid rgba(210,216,235,.9); outline-offset:3px}

/* Bienvenida contextual: la silueta sigue siendo exactamente la de una baraja.
   El área grande inicia sesión; el botón inferior (hermano, nunca anidado) permite
   crear localmente sin obligar a abrir una cuenta. */
#view-jugar .jv-welcome-deck{position:relative; isolation:isolate; overflow:hidden; display:flex; flex-direction:column; gap:3px;
  padding:11px; color:#efeff5; border-color:rgba(255,255,255,.14);
  background:linear-gradient(155deg,rgba(35,35,48,.98),rgba(18,18,26,.99));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.055),0 24px 48px -32px #000;
  animation:jvWelcomeIn .38s cubic-bezier(.2,.85,.3,1) both}
#view-jugar .jv-welcome-deck::before{content:""; position:absolute; inset:-25%; z-index:-1; pointer-events:none;
  background:radial-gradient(circle at 50% 24%,rgba(195,202,230,.13),transparent 42%); transform:rotate(-8deg)}
@keyframes jvWelcomeIn{from{opacity:0;transform:translateY(7px) scale(.985)}to{opacity:1;transform:none}}
#view-jugar .jv-welcome-face{min-width:0; min-height:0; flex:1; width:100%; appearance:none; border:0; border-radius:9px;
  padding:10px 9px 7px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px;
  background:transparent; color:inherit; font:inherit; cursor:pointer; transition:background .16s,transform .15s}
#view-jugar .jv-welcome-face:hover{background:rgba(255,255,255,.035)}
#view-jugar .jv-welcome-face:active{transform:scale(.985)}
#view-jugar .jv-welcome-icon{width:48px; height:48px; display:grid; place-items:center; color:rgba(232,235,248,.55)}
#view-jugar .jv-welcome-icon svg{width:100%; height:100%; display:block; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round}
#view-jugar .jv-welcome-title{max-width:15ch; color:#f3f3f8; font-size:16px; line-height:1.22; font-weight:760; letter-spacing:-.01em; text-wrap:balance}
#view-jugar .jv-welcome-body{max-width:24ch; color:#9292a1; font-size:11.5px; line-height:1.46; font-weight:520; text-wrap:balance}
#view-jugar .jv-welcome-local{width:100%; min-height:44px; flex:none; appearance:none; border:0; border-top:1px solid rgba(255,255,255,.075);
  background:transparent; color:#a9a9b6; border-radius:0 0 8px 8px; cursor:pointer;
  font:620 12px/1.25 system-ui,sans-serif; transition:color .15s,background .15s,transform .1s}
#view-jugar .jv-welcome-local:hover{color:#fff; background:rgba(255,255,255,.045)}
#view-jugar .jv-welcome-local:active{transform:scale(.98)}

/* Espera breve entre login y resolución de la biblioteca de Firestore. */
#view-jugar .jv-welcome-wait{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px;
  color:#a4a4b2; font-size:12px; font-weight:620}
#view-jugar #jv-deckstage[data-jv-deck-state="syncing"]{cursor:wait}
#view-jugar #jv-deckstage[data-jv-deck-state="syncing"]:hover .jv2-halo{opacity:.55; transform:translateX(-50%)}
#view-jugar .jv-welcome-spinner{width:27px; height:27px; border-radius:50%; border:2px solid rgba(255,255,255,.12); border-top-color:rgba(255,255,255,.72);
  animation:jvWelcomeSpin .8s linear infinite}
@keyframes jvWelcomeSpin{to{transform:rotate(360deg)}}
#view-jugar .jv-face-fallback{aspect-ratio:400/559; border-radius:12px; background:#0a0a10 center/cover; border:1px solid rgba(255,255,255,.1)}
#view-jugar .jv-name{font-size:21px; font-weight:750; margin-top:8px; text-align:center}
#view-jugar .jv-line{display:flex; align-items:center; gap:8px; color:var(--jv-muted); font-size:13px; margin-top:2px}
#view-jugar .jv-line .n{color:var(--jv-live); font-weight:650}
#view-jugar .jv-orb{width:14px;height:14px;border-radius:50%;border:1.5px solid rgba(255,255,255,.28);display:inline-block;vertical-align:-2px;background-size:cover}

/* botón fusionado (Clash Mini): una cápsula, 2 filas */
#view-jugar .jv-shell{margin-top:16px; width:300px; max-width:82vw; border-radius:17px; overflow:hidden;
  border:1px solid rgba(255,255,255,.16); box-shadow:0 20px 44px -14px rgba(255,201,90,.4)}
#view-jugar .jv-mrow{display:flex; align-items:center; justify-content:center; gap:9px; cursor:pointer;
  background:linear-gradient(180deg,rgba(30,30,42,.98),rgba(22,22,32,.99)); padding:11px; font-weight:700; font-size:13.5px;
  letter-spacing:.01em; border-bottom:1px solid rgba(0,0,0,.35)}
#view-jugar .jv-mrow .jv-mdot{width:9px;height:9px;border-radius:50%;background:var(--jv-acc,var(--jv-gold));box-shadow:0 0 0 3px color-mix(in srgb,var(--jv-acc,var(--jv-gold)) 22%, transparent)}
#view-jugar .jv-mrow .jv-chev{color:var(--jv-acc,var(--jv-gold)); font-size:11px}
#view-jugar .jv-mrow:hover{background:linear-gradient(180deg,rgba(38,38,52,.99),rgba(26,26,36,1))}
#view-jugar .jv-arow{position:relative; overflow:hidden; cursor:pointer; text-align:center; font-weight:740; font-size:19px; color:#191408;
  background:linear-gradient(180deg,#ffe490,var(--jv-gold-deep)); padding:18px; transition:filter .15s}
#view-jugar .jv-arow.jv-soon{cursor:default; color:#4a4536; background:linear-gradient(180deg,#3a3a46,#2c2c36); font-size:15px; font-weight:680}
#view-jugar .jv-arow::after{content:"";position:absolute;top:0;left:-60%;width:38%;height:100%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent);transform:skewX(-18deg);animation:jvShine 3.8s ease-in-out infinite}
#view-jugar .jv-arow.jv-soon::after{display:none}
@keyframes jvShine{0%,72%{left:-60%}86%{left:130%}100%{left:130%}}
#view-jugar .jv-friend{font-size:13px; color:var(--jv-muted2); cursor:pointer; margin-top:12px}
#view-jugar .jv-friend.jv-hide{display:none}

/* ── menú de modos ── */
#view-jugar .jv-scrim{position:absolute; inset:0; z-index:8; background:rgba(6,6,10,.6); opacity:0; pointer-events:none; transition:opacity .28s}
#view-jugar.jv-menu-open .jv-scrim{opacity:1; pointer-events:auto}

/* móvil: lista de banners */
#view-jugar .jv-drawer{position:absolute; z-index:9; left:50%; bottom:0; transform:translate(-50%,102%); width:min(720px,96vw);
  background:linear-gradient(180deg,rgba(24,24,34,.98),rgba(16,16,24,.99)); border:1px solid var(--jv-line2); border-bottom:none;
  border-radius:22px 22px 0 0; padding:14px 20px 24px; box-shadow:0 -30px 80px -30px rgba(0,0,0,.85);
  transition:transform .32s cubic-bezier(.2,.85,.25,1); max-height:80%; overflow:auto}
#view-jugar.jv-menu-open .jv-drawer{transform:translate(-50%,0)}
#view-jugar .jv-grip{width:44px;height:5px;border-radius:3px;background:rgba(255,255,255,.18);margin:2px auto 14px}
#view-jugar .jv-dhead{display:flex;align-items:center;justify-content:space-between;margin:0 4px 14px}
#view-jugar .jv-dhead h3{margin:0;font-size:17px;font-weight:750}
#view-jugar .jv-x{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;cursor:pointer;color:var(--jv-muted);background:var(--jv-panel);border:1px solid var(--jv-line)}
#view-jugar .jv-x:hover{color:#fff}
/* Las bandas de modo se reutilizan FUERA del hub (el selector de formato al crear un mazo):
   el ámbito del componente es este contenedor, no #view-jugar. Lo único que necesita de fuera
   es --jv-line (el resto de vars van en línea por banda o tienen valor por defecto). */
.jv-bands{display:flex;flex-direction:column;gap:10px;--jv-line:rgba(255,255,255,0.09)}
/* móvil: bandas = banner horizontal (arte al fondo, scrim a la izq para el texto, franja de acento) */
#view-jugar .jv-band,.jv-bands .jv-band{position:relative;display:block;cursor:pointer;overflow:hidden;border-radius:14px;min-height:var(--jv-band-h,114px);
  border:1px solid var(--jv-line);background:#101017;transition:border-color .2s,box-shadow .2s}
/* encuadre por modo (banners_tuner.html → js/jugar-view.js): --jvbb-z = zoom en % del ANCHO
   de la banda; 100% == el `cover` de siempre (la ilustración es vertical y la banda apaisada,
   así que cover escala por el ancho). Sin vars, el encuadre general de aquí. */
#view-jugar .jv-band .jv-bbanner,.jv-bands .jv-band .jv-bbanner{position:absolute;inset:0;z-index:0;background-color:#101017;background-repeat:no-repeat;
  background-position:calc(50% + var(--jvbb-dx,0px)) calc(40% + var(--jvbb-dy,0px));
  background-size:var(--jvbb-z,100%) auto;opacity:.92}
/* el desplazamiento va en PÍXELES sobre el anclaje de siempre (--jvb-dx/--jvbb-dx…): así se
   puede sacar la ilustración fuera del hueco todo lo que haga falta — con % el recorrido
   depende del zoom y al llegar al borde ya no se movía más.
   velo de la banda, ajustable por modo: --jvbs-op = opacidad de la zona oscura ·
   --jvbs-w = hasta dónde llega OPACA (a la izquierda, la del texto) · --jvbs-fade = dónde
   acaba el fundido. Con op:1 y w alto la izquierda tapa del todo la ilustración, que es lo
   que permite encoger la carta y dejarla solo en la derecha. */
#view-jugar .jv-band .jv-bscrim,.jv-bands .jv-band .jv-bscrim{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(90deg,rgba(7,7,12,var(--jvbs-op,.95)) var(--jvbs-w,26%),
      rgba(7,7,12,calc(var(--jvbs-op,.95) * .58)) var(--jvbs-fade,62%),
      rgba(7,7,12,var(--jvbs-far,.32))),
    linear-gradient(180deg,rgba(7,7,12,.18),rgba(7,7,12,.5));
  box-shadow:inset 4px 0 0 var(--a)}
#view-jugar .jv-band .jv-bcontent,.jv-bands .jv-band .jv-bcontent{position:relative;z-index:2;display:flex;align-items:center;gap:12px;padding:15px 16px 15px 18px;min-height:calc(var(--jv-band-h,114px) - 2px)}
#view-jugar .jv-band .jv-info,.jv-bands .jv-band .jv-info{flex:1;min-width:0}
#view-jugar .jv-band .jv-t,.jv-bands .jv-band .jv-t{font-size:16px;font-weight:770;letter-spacing:-.01em;text-shadow:0 1px 7px rgba(0,0,0,.8)}
#view-jugar .jv-band .jv-d,.jv-bands .jv-band .jv-d{font-size:12px;color:rgba(230,230,242,.74);margin-top:3px;text-shadow:0 1px 7px rgba(0,0,0,.85)}
#view-jugar .jv-band:hover,.jv-bands .jv-band:hover{border-color:color-mix(in srgb,var(--a) 55%,transparent)}
#view-jugar .jv-band.jv-sel,.jv-bands .jv-band.jv-sel{border-color:color-mix(in srgb,var(--a) 82%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--a) 40%,transparent),0 8px 24px -14px color-mix(in srgb,var(--a) 55%,#000)}
#view-jugar .jv-band.jv-lock,.jv-bands .jv-band.jv-lock{cursor:default;filter:grayscale(.5) brightness(.74)}
#view-jugar .jv-band.jv-lock .jv-ppl,.jv-bands .jv-band.jv-lock .jv-ppl{color:#c8c8d4}

/* escritorio: tarjetas grandes */
#view-jugar .jv-cards{position:absolute; z-index:9; left:0; right:0; bottom:0; transform:translateY(102%);
  transition:transform .34s cubic-bezier(.2,.85,.25,1);
  background:linear-gradient(180deg,rgba(22,22,31,.98),rgba(14,14,21,.99)); border-top:1px solid var(--jv-line2);
  border-radius:24px 24px 0 0; padding:16px 24px 30px}
#view-jugar.jv-menu-open .jv-cards{transform:translateY(0)}
#view-jugar .jv-cards-head{display:flex;align-items:center;justify-content:space-between;max-width:900px;margin:0 auto 16px}
#view-jugar .jv-cards-head h3{margin:0;font-size:17px;font-weight:750}
#view-jugar .jv-cardrow{display:flex;gap:16px;justify-content:center;align-items:flex-end;max-width:900px;margin:0 auto;flex-wrap:wrap}
#view-jugar .jv-card{position:relative;width:184px;height:250px;border-radius:18px;overflow:hidden;cursor:pointer;flex:none;
  border:1px solid var(--jv-line2);transition:transform .2s cubic-bezier(.2,.8,.3,1),box-shadow .24s,border-color .24s;
  background:#0f0f16;box-shadow:0 18px 40px -22px #000}
/* banner = ilustración de carta; zoom + posición centrada en el personaje → recorta el nombre/PS
   de arriba y los ataques de abajo (mando: background-position/size) */
#view-jugar .jv-card .jv-banner{position:absolute;inset:0;z-index:0;background-color:#0f0f16;background-repeat:no-repeat;
  background-position:calc(50% + var(--jvb-dx,0px)) calc(35% + var(--jvb-dy,0px));
  background-size:auto var(--jvb-z,184%)}
/* voltear la ilustración (algunos artes miran hacia fuera de la tarjeta) */
#view-jugar .jv-banner.jv-flip,#view-jugar .jv-bbanner.jv-flip,.jv-bands .jv-bbanner.jv-flip{transform:scaleX(-1)}
/* scrim: fundido oscuro arriba (tapa el nombre si asoma) + transparente en el personaje + base
   CASI opaca (tapa los ataques de la carta) + tinte de acento */
/* velo de la tarjeta, ajustable por modo: --jvcs-op = opacidad de la base (la que tapa los
   ataques de la carta) · --jvcs-start = a qué altura empieza esa base. */
#view-jugar .jv-card .jv-cscrim{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,rgba(7,7,12,.62),transparent 22%,transparent 44%,
      rgba(7,7,12,calc(var(--jvcs-op,.95) * .63)) calc(var(--jvcs-start,80%) - 18%),
      rgba(6,6,11,var(--jvcs-op,.95)) var(--jvcs-start,80%),
      rgba(6,6,11,var(--jvcs-op,.95)) 100%),
    radial-gradient(130% 46% at 50% 0,color-mix(in srgb,var(--a) 16%,transparent),transparent 62%)}
#view-jugar .jv-card .jv-cbar{position:absolute;left:0;right:0;bottom:0;z-index:2;display:flex;align-items:flex-end;justify-content:space-between;gap:8px;padding:14px 14px 15px}
#view-jugar .jv-card .jv-clbl{min-width:0}
#view-jugar .jv-card .jv-cnm{font-size:20px;font-weight:820;letter-spacing:-.02em;line-height:1.03;text-shadow:0 2px 12px rgba(0,0,0,.8)}
#view-jugar .jv-card .jv-cds{font-size:11.5px;font-weight:600;color:rgba(232,232,244,.74);margin-top:5px;text-shadow:0 1px 8px rgba(0,0,0,.85)}
/* Subtítulos del selector de modos a UNA sola línea, para que los nombres queden al mismo nivel entre tarjetas. */
#view-jugar .jv-card .jv-clbl,#view-jugar .jv-band .jv-info,.jv-bands .jv-band .jv-info{min-width:0}
#view-jugar .jv-card .jv-cds,#view-jugar .jv-band .jv-d,.jv-bands .jv-band .jv-d{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#view-jugar .jv-card:hover{transform:translateY(-5px);border-color:color-mix(in srgb,var(--a) 50%,transparent);box-shadow:0 24px 44px -18px color-mix(in srgb,var(--a) 45%,#000)}
#view-jugar .jv-card.jv-sel{transform:translateY(-2px) scale(1.06);border-color:color-mix(in srgb,var(--a) 90%,transparent);
  box-shadow:0 26px 54px -16px color-mix(in srgb,var(--a) 60%,#000),inset 0 0 0 1.5px color-mix(in srgb,var(--a) 85%,transparent)}
#view-jugar .jv-card.jv-lock{cursor:default;filter:grayscale(.55) brightness(.7)}
#view-jugar .jv-card.jv-lock .jv-ppl{color:#c8c8d4}
/* «i» del modo: abre las reglas del formato (no elige el modo). ABSOLUTO en la esquina:
   dentro del flujo del label robaba ancho y cortaba la descripción con ellipsis. */
#view-jugar .jv-i,.jv-bands .jv-i{position:absolute;top:9px;right:9px;z-index:5;
  width:22px;height:22px;border-radius:50%;
  border:1px solid rgba(255,255,255,.3);background:rgba(0,0,0,.42);color:rgba(255,255,255,.85);
  font:800 12px/1 system-ui,serif;font-style:italic;cursor:pointer;display:flex;align-items:center;justify-content:center;
  backdrop-filter:blur(6px);
  transition:background .16s,transform .16s,border-color .16s}
#view-jugar .jv-i:hover,.jv-bands .jv-i:hover{background:rgba(255,255,255,.2);border-color:rgba(255,255,255,.55);transform:scale(1.1)}
#view-jugar .jv-i:active,.jv-bands .jv-i:active{transform:scale(.94)}
/* siluetas de jugador (1 local / 2 online) + candado — compartido por tarjetas y bandas */
#view-jugar .jv-ppl,.jv-bands .jv-ppl{display:flex;align-items:center;gap:6px;flex:none;color:color-mix(in srgb,var(--a) 84%,#fff)}
#view-jugar .jv-ppl-1,.jv-bands .jv-ppl-1,#view-jugar .jv-ppl-2,.jv-bands .jv-ppl-2{display:inline-flex;align-items:center}
#view-jugar .jv-sil,.jv-bands .jv-sil{width:19px;height:19px;display:block;fill:currentColor;filter:drop-shadow(0 1px 3px rgba(0,0,0,.75))}
#view-jugar .jv-ppl-2 .jv-sil:last-child,.jv-bands .jv-ppl-2 .jv-sil:last-child{margin-left:-8px;filter:drop-shadow(-1.5px 0 0 rgba(8,8,14,.92)) drop-shadow(0 1px 3px rgba(0,0,0,.75))}
#view-jugar .jv-lock-svg,.jv-bands .jv-lock-svg{width:16px;height:16px;display:block;fill:currentColor;color:#c8c8d4}

/* responsive: lista en móvil, tarjetas en escritorio */
#view-jugar .jv-drawer{display:none}
#view-jugar .jv-cards{display:block}
@media (max-width:720px){
  #view-jugar .jv-drawer{display:block}
  #view-jugar .jv-cards{display:none}
  #view-jugar .jv-deck-wrap{width:170px}
}

/* etiqueta de maqueta/fase (quitar en producción) */
#view-jugar .jv-tag{position:absolute;left:14px;top:10px;z-index:12;font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--jv-muted2);background:rgba(0,0,0,.4);border:1px solid var(--jv-line);padding:5px 10px;border-radius:999px}

/* ══ Pantalla «Buscando» del lobby PvP (radar + cronómetro) — de la maqueta «flujo».
   Va aquí (mi CSS, no en pvp.css dirty) scopeada al overlay del PvP. Los contadores
   «en línea / en partida» de la maqueta llegan con la presencia (Fase 2). ══ */
#pvp-content .pvp-searching-wrap{display:flex;flex-direction:column;align-items:center;gap:20px;text-align:center;padding:10px 0 4px;
  position:relative;z-index:1;animation:pvpSearchIn .5s cubic-bezier(.2,.85,.3,1) both}
@keyframes pvpSearchIn{from{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}
/* Fondo de pokéballs con «warp» de aceleración al entrar (transición generativa que pidió Daniel) */
#pvp-content .pvp-pokeballs{position:fixed;top:48px;left:0;right:0;bottom:0;z-index:0;overflow:hidden;pointer-events:none;opacity:.06;
  /* difuminado gradual en TODA la pantalla (sin borde/«charco»): centro pleno → bordes a 0 */
  -webkit-mask-image:radial-gradient(130% 120% at 50% 46%,#000 8%,rgba(0,0,0,.5) 62%,transparent 100%);
          mask-image:radial-gradient(130% 120% at 50% 46%,#000 8%,rgba(0,0,0,.5) 62%,transparent 100%);
  /* «acelerón»: el fondo entra empujado (deriva rápida) + mini zoom, no un zoom-de-pantalla */
  animation:pvpAccelIn 1s cubic-bezier(.1,.72,.18,1) both}
#pvp-content .pvp-pokeballs::before{content:'';position:absolute;top:-330px;left:-330px;width:calc(100% + 660px);height:calc(100% + 660px);
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 200 200'%3E%3Cg fill='none' stroke='white' stroke-width='3.2'%3E%3Cg transform='translate(50 50) rotate(22)'%3E%3Cpath fill='white' stroke='none' fill-rule='evenodd' d='M-24 0A24 24 0 0 1 24 0Z M-9 0A9 9 0 0 1 9 0Z'/%3E%3Ccircle r='24'/%3E%3Ccircle r='9'/%3E%3C/g%3E%3Cg transform='translate(150 50) rotate(112)'%3E%3Cpath fill='white' stroke='none' fill-rule='evenodd' d='M-24 0A24 24 0 0 1 24 0Z M-9 0A9 9 0 0 1 9 0Z'/%3E%3Ccircle r='24'/%3E%3Ccircle r='9'/%3E%3C/g%3E%3Cg transform='translate(50 150) rotate(205)'%3E%3Cpath fill='white' stroke='none' fill-rule='evenodd' d='M-24 0A24 24 0 0 1 24 0Z M-9 0A9 9 0 0 1 9 0Z'/%3E%3Ccircle r='24'/%3E%3Ccircle r='9'/%3E%3C/g%3E%3Cg transform='translate(150 150) rotate(298)'%3E%3Cpath fill='white' stroke='none' fill-rule='evenodd' d='M-24 0A24 24 0 0 1 24 0Z M-9 0A9 9 0 0 1 9 0Z'/%3E%3Ccircle r='24'/%3E%3Ccircle r='9'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E") 0 0 / 260px 260px repeat;
  /* deriva CONTINUA más rápida que en el hub (~52s) → «terminan moviéndose más rápido» */
  animation:pvpDrift 26s linear infinite}
/* el «acelerón»: la capa entra empujada (translate rápido que decelera) + mini zoom + fade breve.
   Compone con la deriva del ::before → sensación de que el fondo acelera y se asienta. */
@keyframes pvpAccelIn{0%{transform:translate(-150px,-150px) scale(1.05);opacity:0}16%{opacity:.06}100%{transform:translate(0,0) scale(1);opacity:.06}}
@keyframes pvpDrift{to{transform:translate(260px,260px)}}
html.pb-reduce-motion #pvp-content .pvp-pokeballs,
html.pb-reduce-motion #pvp-content .pvp-searching-wrap,
html.pb-reduce-motion #pvp-content .pvp-pokeballs::before{animation:none}
#pvp-content .pvp-radar{position:relative;width:148px;height:148px;display:grid;place-items:center}
#pvp-content .pvp-radar .pvp-ring{position:absolute;inset:0;border-radius:50%;border:2px solid rgba(255,209,102,.5);animation:pvpPing 2s ease-out infinite}
#pvp-content .pvp-radar .pvp-ring.r2{animation-delay:1s}
@keyframes pvpPing{0%{transform:scale(.4);opacity:.95}100%{transform:scale(1.35);opacity:0}}
/* núcleo = glow suave detrás de un pokéball SVG real (el viejo `.pvp-pk` de pseudo-elementos
   salía «amorfo» → ahora es un SVG nítido: media roja, cinturón negro, botón hueco) */
#pvp-content .pvp-radar .pvp-core{width:66px;height:66px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,224,138,.55),rgba(242,177,58,.14) 70%,transparent);
  display:grid;place-items:center;box-shadow:0 0 40px -6px rgba(255,209,102,.55)}
#pvp-content .pvp-radar .pvp-pk-svg{width:44px;height:44px;display:block;filter:drop-shadow(0 2px 4px rgba(0,0,0,.4))}
#pvp-content .pvp-search-title{margin:0;font-size:27px;font-weight:780;letter-spacing:-.015em;color:#f3f2f8}
/* «Modo Estándar · 0:08» — pie discreto pero con presencia (tabular para que no baile) */
#pvp-content .pvp-elapsed{margin-top:-4px;font:600 11.5px/1 system-ui,sans-serif;letter-spacing:.1em;text-transform:uppercase;
  color:#7b7b88;font-variant-numeric:tabular-nums}
html.pb-reduce-motion #pvp-content .pvp-radar .pvp-ring{animation:none}

/* Cancelar de las colas = botón SÓLIDO con acento ROJO (mismo lenguaje que «Partida
   privada» del hub, en rojo). Global: lo usan la cola Estándar y la del Draft. */
.pb-cancelbtn{margin-top:6px;display:inline-flex;align-items:center;justify-content:center;
  font:650 11.5px/1 system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;color:#ff9d9d;cursor:pointer;
  padding:11px 22px;border-radius:12px;border:1px solid rgba(255,107,107,.38);background:#231620;transition:.15s}
.pb-cancelbtn:hover{color:#ffbdbd;border-color:rgba(255,107,107,.62);background:#2e1a24}
.pb-cancelbtn:active{transform:scale(.97)}

/* ══ Píldora «en línea / en partida» — COMPARTIDA por el hub «Jugar» y la cola de
   búsqueda (misma pieza, mismo tamaño). Sin punto separador central: un divisor
   fino y grupos juntos (Daniel 2026-08-13). El HTML lo genera pbPresencePill(). ══ */
.pb-onpill{display:inline-flex;align-items:center;gap:9px;padding:7px 15px;border-radius:999px;
  border:1px solid rgba(95,220,147,.36);background:rgba(95,220,147,.075);
  font:600 12px/1 system-ui,sans-serif;color:#a7d6bc;white-space:nowrap}
.pb-onpill-i{display:inline-flex;align-items:baseline;gap:5px}
.pb-onpill-i b{color:#f0f1f6;font-weight:760;font-size:13px;font-variant-numeric:tabular-nums}
.pb-onpill-div{width:1px;height:12px;background:rgba(255,255,255,.16);flex:none}
.pb-onpill-dot{width:7px;height:7px;border-radius:50%;background:#5fdc93;box-shadow:0 0 8px rgba(95,220,147,.85);flex:none;
  animation:pbOnPul 2s ease-in-out infinite}
@keyframes pbOnPul{0%,100%{opacity:1}50%{opacity:.4}}
html.pb-reduce-motion .pb-onpill-dot{animation:none}

/* ══ Modo INMERSIVO del overlay PvP (pantallas de flujo: buscando / fin).
   Ocupa el ÁREA DE CONTENIDO (top:48px, heredado de .pb-modal-overlay), NO tapa la barra
   superior (petición de Daniel: nada superpuesto sobre la nav; se navega a Cartas/Mazos
   en partida y estas pantallas se suspenden/restauran vía switchAppTab). ══ */
#pvp-overlay.pvp-immersive{
  /* fondo PLANO (los gradientes anchos bandean = el «brillito raro»); la única textura son
     las pokéballs, que se difuminan suave hacia los bordes → sin banding, sin viñeta rara */
  background:#0b0b12;
  -webkit-backdrop-filter:none; backdrop-filter:none}
#pvp-overlay.pvp-immersive .pvp-modal{
  max-width:none; width:100%; height:100%; min-height:100%;
  border:none; border-radius:0; background:none; box-shadow:none;
  display:block; padding:0}
#pvp-overlay.pvp-immersive #pvp-close{display:none}
/* SUSPENDIDO: al navegar a Cartas/Mazos en partida, el flujo PvP se oculta (la sesión sigue
   viva); al volver a «Jugar» se restaura. Lo togglea switchAppTab vía _pvpFlowSuspend/Restore. */
#pvp-overlay.pvp-suspended,#pvp-vs-curtain.pvp-suspended,#pvp-board-coin.pvp-suspended{display:none !important}
/* #pvp-content = centrador a pantalla completa (evita que la tarjeta del Fin se estire) */
#pvp-overlay.pvp-immersive #pvp-content{
  width:100%; height:100%; max-width:none;
  display:flex; align-items:center; justify-content:center;
  padding:24px; box-sizing:border-box}
#pvp-overlay.pvp-immersive #pvp-content>*{flex:0 0 auto}

/* ══ Pantalla «Fin» del PvP — MINIMALISTA (sin rayos) + carta y stats de cada jugador (idea TCG Live) ══ */
#pvp-content .pvp-fin{display:flex;flex-direction:column;align-items:center;text-align:center;width:min(560px,94vw);
  animation:pvpFinIn .5s cubic-bezier(.2,.8,.3,1) both}
@keyframes pvpFinIn{from{transform:translateY(14px);opacity:0}to{transform:translateY(0);opacity:1}}
#pvp-content .pvp-fin-tag{font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:650;color:#8a8a98;margin-bottom:12px}
#pvp-content .pvp-fin-res{font-size:44px;font-weight:800;letter-spacing:-.02em;line-height:1;color:#efeef5;position:relative;padding-bottom:16px}
#pvp-content .pvp-fin-res::after{content:'';position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:38px;height:3px;border-radius:2px}
#pvp-content .pvp-fin.win .pvp-fin-res::after{background:#57dc8c}
#pvp-content .pvp-fin.lose .pvp-fin-res::after{background:#ff6b6b}
#pvp-content .pvp-fin.draw .pvp-fin-res::after{background:#c9c9d4}   /* empate: neutro, ni verde ni rojo */
/* marcador centrado, bajo el resultado (no en medio de las cartas → menos «desordenado») */
#pvp-content .pvp-fin-score{font-size:30px;font-weight:700;font-variant-numeric:tabular-nums;color:#efeef5;margin-top:18px}
#pvp-content .pvp-fin-score span{color:#565664;font-weight:500;margin:0 6px}
/* cuerpo: los dos paneles (carta+nombre+stats) centrados, lado a lado, alineados arriba */
#pvp-content .pvp-fin-body{display:flex;align-items:flex-start;justify-content:center;gap:26px;margin-top:24px}
#pvp-content .pvp-fin-side{display:flex;flex-direction:column;align-items:center;gap:10px;flex:0 0 auto;width:148px}
#pvp-content .pvp-fin-card{width:82px;aspect-ratio:367/512;border-radius:7px;object-fit:cover;
  box-shadow:0 8px 22px rgba(0,0,0,.5);border:1px solid rgba(255,255,255,.09)}
#pvp-content .pvp-fin-card.ph{background:#1a1a24}
#pvp-content .pvp-fin-side.me .pvp-fin-card{box-shadow:0 8px 22px rgba(0,0,0,.5),0 0 0 1px rgba(77,171,255,.4)}
#pvp-content .pvp-fin-side.opp .pvp-fin-card{box-shadow:0 8px 22px rgba(0,0,0,.5),0 0 0 1px rgba(255,107,107,.4)}
#pvp-content .pvp-fin-pname{font-size:13.5px;font-weight:700;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#pvp-content .pvp-fin-side.me .pvp-fin-pname{color:#4dabff}
#pvp-content .pvp-fin-side.opp .pvp-fin-pname{color:#ff6b6b}
/* stats en CAJAS (estilo TCG Live): etiqueta arriba + valor en caja, todo centrado */
#pvp-content .pvp-fin-stats{display:flex;flex-direction:column;gap:8px;width:100%;margin-top:2px}
#pvp-content .pvp-fin-stats .st{display:flex;flex-direction:column;align-items:center;gap:4px}
#pvp-content .pvp-fin-stats .st span{font-size:9.5px;line-height:1.25;letter-spacing:.05em;text-transform:uppercase;
  color:#8a8a98;font-weight:600;min-height:24px;display:flex;align-items:flex-end}
#pvp-content .pvp-fin-stats .st b{font-size:19px;font-weight:750;color:#efeef5;font-variant-numeric:tabular-nums;width:100%;
  background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.07);border-radius:9px;padding:5px 0}
#pvp-content .pvp-fin-meta{font-size:13px;color:#8a8a98;margin-top:20px}
#pvp-content .pvp-fin-btns{display:flex;flex-direction:column;gap:10px;width:100%;max-width:320px;margin-top:30px}
#pvp-content .pvp-fin-btns .pvp-opt{width:100%}
/* Apoyo solo al terminar una partida online: una invitación tranquila tras haber recibido
   valor, nunca un pop-up ni una interrupción durante el juego. */
#pvp-content .pvp-fin-support{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 7px;width:100%;max-width:420px;
  margin-top:18px;text-decoration:none;font-size:11.5px;line-height:1.4;color:#8a8a98;transition:color .15s}
#pvp-content .pvp-fin-support b{color:#e3a765;font-weight:700}
#pvp-content .pvp-fin-support:hover{color:#c3c3ce}
#pvp-content .pvp-fin-support:hover b{color:#f3cd93;text-decoration:underline;text-underline-offset:3px}
@media (max-width:520px){
  #pvp-content .pvp-fin-body{gap:14px}
  #pvp-content .pvp-fin-side{width:130px}
  #pvp-content .pvp-fin-card{width:68px}
}
html.pb-reduce-motion #pvp-content .pvp-fin{animation:none}

/* ══ VS = CORTINA de TRANSICIÓN (no un overlay-pantalla): dos mitades HORIZONTALES —
   RIVAL arriba (rojo), YO abajo (azul, = zonas del tablero) — que CIERRAN sobre la búsqueda,
   sostienen avatares+«VS», y ABREN revelando el tablero ya cargado debajo (transición real,
   fondo negro por debajo). La moneda va DESPUÉS, ya en el tablero. Bajo la nav (top:48px). ══ */
#pvp-vs-curtain{position:fixed;top:48px;left:0;right:0;bottom:0;z-index:99992;overflow:hidden;pointer-events:none}
#pvp-vs-curtain .cur-half{position:absolute;left:0;right:0;height:50%;display:flex;justify-content:center}
/* bandas METÁLICAS (petición Daniel: menos planas): color rico + veta metálica sutil + sheen
   diagonal + borde/glow luminoso en la costura donde se juntan */
#pvp-vs-curtain .cur-half.top{top:0;transform:translateY(-100%);align-items:flex-end;padding-bottom:74px;
  background:
    repeating-linear-gradient(115deg, rgba(255,255,255,.022) 0 2px, transparent 2px 7px),
    linear-gradient(125deg, rgba(255,255,255,.09), transparent 32%, transparent 68%, rgba(0,0,0,.22)),
    linear-gradient(180deg, #7a2536, #3f131d 60%, #230a0e);
  box-shadow:inset 0 -1.5px 0 rgba(255,175,185,.5), inset 0 -38px 66px -34px rgba(255,95,115,.45)}
#pvp-vs-curtain .cur-half.bottom{bottom:0;transform:translateY(100%);align-items:flex-start;padding-top:74px;
  background:
    repeating-linear-gradient(115deg, rgba(255,255,255,.022) 0 2px, transparent 2px 7px),
    linear-gradient(125deg, rgba(255,255,255,.09), transparent 32%, transparent 68%, rgba(0,0,0,.22)),
    linear-gradient(0deg, #143053, #0b1730 60%, #060c17);
  box-shadow:inset 0 1.5px 0 rgba(160,195,255,.5), inset 0 38px 66px -34px rgba(70,125,255,.45)}
/* UNA sola animación cierra→settle→hold→abre, sincronizada al mp3 (2,9s): slam ~25,6%≈780ms,
   hold, ABRE 79-100% (≈2410-3050ms) = coincide con la COLA del sonido (Daniel: «terminar con el
   sonido» y no abrir en cuanto sale el VS). */
/* 3,7 s desde 2026-08-15 (+1 s de sostén para ver los EMBLEMAS): mismos instantes absolutos
   de cierre (~780ms) y asentado; ABRE en 88-100% (≈3270-3700ms). El mp3 (2,9s) ya ha acabado
   cuando abre: el sostén extra es en silencio, a propósito. */
#pvp-vs-curtain.run .cur-half.top{animation:pvpCurTop 3.7s forwards}
#pvp-vs-curtain.run .cur-half.bottom{animation:pvpCurBot 3.7s forwards}
@keyframes pvpCurTop{
  0%{transform:translateY(-100%);animation-timing-function:cubic-bezier(.4,0,.14,1)}
  21.2%{transform:translateY(0);animation-timing-function:ease-out}
  23.7%{transform:translateY(-2.2%);animation-timing-function:ease-in}
  26.3%{transform:translateY(0)}
  88.3%{transform:translateY(0);animation-timing-function:cubic-bezier(.45,0,.7,.35)}
  100%{transform:translateY(-100%)}}
@keyframes pvpCurBot{
  0%{transform:translateY(100%);animation-timing-function:cubic-bezier(.4,0,.14,1)}
  21.2%{transform:translateY(0);animation-timing-function:ease-out}
  23.7%{transform:translateY(2.2%);animation-timing-function:ease-in}
  26.3%{transform:translateY(0)}
  88.3%{transform:translateY(0);animation-timing-function:cubic-bezier(.45,0,.7,.35)}
  100%{transform:translateY(100%)}}
/* shake sutil (tipo impacto, no golpe duro) en el clash del sonido */
#pvp-vs-curtain.shake{animation:pvpCurShake .28s ease}
@keyframes pvpCurShake{0%,100%{transform:translate(0,0)}18%{transform:translate(-4px,2px)}38%{transform:translate(3px,-3px)}58%{transform:translate(-3px,2px)}80%{transform:translate(2px,-1px)}}
/* avatares a un PUNTO MEDIO del centro (no chocan con el «VS»). Entrada ÉPICA pero SMOOTH tras
   el slam (Daniel): CONVERGEN hacia el centro (el de arriba baja, el de abajo sube) con escala +
   fade + un halo que respira, escalonados. */
#pvp-vs-curtain .pvp-vs-in{display:flex;flex-direction:column;align-items:center;gap:11px;opacity:0}
#pvp-vs-curtain.run .cur-half.top .pvp-vs-in{animation:pvpAvaTop .62s cubic-bezier(.16,.84,.3,1) .86s both}
#pvp-vs-curtain.run .cur-half.bottom .pvp-vs-in{animation:pvpAvaBot .62s cubic-bezier(.16,.84,.3,1) .96s both}
@keyframes pvpAvaTop{0%{opacity:0;transform:translateY(-34px) scale(.86)}60%{opacity:1}100%{opacity:1;transform:translateY(0) scale(1)}}
@keyframes pvpAvaBot{0%{opacity:0;transform:translateY(34px) scale(.86)}60%{opacity:1}100%{opacity:1;transform:translateY(0) scale(1)}}
#pvp-vs-curtain.run .pvp-vs-ava{animation:pvpAvaGlow 2.4s ease-in-out 1.5s infinite}
@keyframes pvpAvaGlow{0%,100%{filter:none}50%{filter:drop-shadow(0 0 10px rgba(255,255,255,.28))}}
#pvp-vs-curtain .pvp-vs-ava{width:90px;height:90px;border-radius:50%;object-fit:cover;background:#1a1a24;
  display:grid;place-items:center;font-size:36px;font-weight:800;color:#fff}
#pvp-vs-curtain .cur-half.top .pvp-vs-ava{box-shadow:0 0 0 3px rgba(255,107,107,.85),0 10px 30px rgba(0,0,0,.5)}
#pvp-vs-curtain .cur-half.bottom .pvp-vs-ava{box-shadow:0 0 0 3px rgba(77,171,255,.85),0 10px 30px rgba(0,0,0,.5)}
#pvp-vs-curtain .pvp-vs-name{font-size:21px;font-weight:800;letter-spacing:-.01em;max-width:72vw;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}
#pvp-vs-curtain .cur-half.top .pvp-vs-name{color:#ff8a8a}
#pvp-vs-curtain .cur-half.bottom .pvp-vs-name{color:#7dc0ff}
/* EMBLEMAS equipados de cada jugador (Maestría Pokémon, hasta 3): fila bajo el nombre; entran
   escalonados tras el avatar y reciben un destello (misma clase md-glow del Perfil). Al ser la
   mitad de ARRIBA la del rival, sus emblemas quedan pegados a la costura (align flex-end). */
#pvp-vs-curtain .pvp-vs-embs{display:flex;gap:12px;justify-content:center;min-height:0;margin-top:4px}
#pvp-vs-curtain .pvp-vs-embs:empty{display:none}
#pvp-vs-curtain .pvp-vs-emb{width:84px;opacity:0;transform:translateY(10px) scale(.9)}
#pvp-vs-curtain.run .pvp-vs-emb{animation:pvpEmbIn .5s cubic-bezier(.16,.84,.3,1) both}
#pvp-vs-curtain.run .pvp-vs-emb:nth-child(1){animation-delay:1.25s}
#pvp-vs-curtain.run .pvp-vs-emb:nth-child(2){animation-delay:1.36s}
#pvp-vs-curtain.run .pvp-vs-emb:nth-child(3){animation-delay:1.47s}
@keyframes pvpEmbIn{0%{opacity:0;transform:translateY(10px) scale(.9)}100%{opacity:1;transform:none}}
#pvp-vs-curtain .pvp-vs-emb .md-plate{font-size:8px;letter-spacing:1.1px}
/* el destello del metal (md-glow) recorre cada emblema una vez al aparecer */
#pvp-vs-curtain.run .pvp-vs-emb .md-fr{animation:md-glint 1.4s cubic-bezier(.4,0,.2,1) 1.9s 1}
#pvp-vs-curtain.run .pvp-vs-emb:nth-child(2) .md-fr{animation-delay:2.05s}
#pvp-vs-curtain.run .pvp-vs-emb:nth-child(3) .md-fr{animation-delay:2.2s}
/* pantallas bajas (móvil apaisado / portátiles chicos): emblemas menores y sin placa */
@media (max-height:720px){
  #pvp-vs-curtain .cur-half.top{padding-bottom:52px}
  #pvp-vs-curtain .cur-half.bottom{padding-top:52px}
  #pvp-vs-curtain .pvp-vs-ava{width:70px;height:70px;font-size:28px}
  #pvp-vs-curtain .pvp-vs-emb{width:62px}
  #pvp-vs-curtain .pvp-vs-emb .md-fr{padding-bottom:5px}
  #pvp-vs-curtain .pvp-vs-emb .md-plate{display:none}
  #pvp-vs-curtain .pvp-vs-emb .md-fr::before{bottom:5px}
}
/* «VS»: oculto hasta que ESTALLA en el clash principal del sonido (~1460ms, .burst) */
#pvp-vs-curtain .cur-vs{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.6);opacity:0;
  font-size:clamp(56px,13vw,124px);font-weight:900;font-style:italic;letter-spacing:-.04em;line-height:1;color:#fff;
  text-shadow:0 6px 26px rgba(0,0,0,.6),0 0 50px rgba(255,209,102,.4)}
#pvp-vs-curtain .cur-vs.burst{animation:pvpVsBurst .5s cubic-bezier(.2,1.5,.35,1) forwards}
@keyframes pvpVsBurst{0%{transform:translate(-50%,-50%) scale(2.4) rotate(-8deg);opacity:0}
  55%{transform:translate(-50%,-50%) scale(.92) rotate(0);opacity:1}
  100%{transform:translate(-50%,-50%) scale(1);opacity:1}}
@media (max-width:520px){
  #pvp-vs-curtain .pvp-vs-ava{width:74px;height:74px;font-size:29px}
  #pvp-vs-curtain .pvp-vs-name{font-size:17px}
  #pvp-vs-curtain .cur-half.top{padding-bottom:58px}
  #pvp-vs-curtain .cur-half.bottom{padding-top:58px}
}
html.pb-reduce-motion #pvp-vs-curtain.run .cur-half{animation:none}
html.pb-reduce-motion #pvp-vs-curtain .cur-vs.burst{animation:none;opacity:1;transform:translate(-50%,-50%) scale(1)}

/* Aceleración del fondo de pokéballs (transición continua búsqueda→VS; sin jump-cut): la capa
   hace zoom-in + brillo mientras la cortina cierra encima (la deriva del ::before sigue) */
#pvp-content .pvp-pokeballs.pvp-warp{animation:pvpWarp .85s cubic-bezier(.4,0,.7,1) forwards}
@keyframes pvpWarp{from{transform:scale(1);opacity:.06}to{transform:scale(1.9);opacity:.16}}
html.pb-reduce-motion #pvp-content .pvp-pokeballs.pvp-warp{animation:none}

/* Moneda «quién empieza» YA en el TABLERO (tras abrirse el VS). 50% más grande. Cada jugador
   ve si va PRIMERO (azul) o SEGUNDO (rojo). Bajo la nav (top:48px). */
#pvp-board-coin{position:fixed;top:48px;left:0;right:0;bottom:0;z-index:99991;display:flex;align-items:center;justify-content:center;
  background:rgba(6,6,12,.42);opacity:0;transition:opacity .3s}
#pvp-board-coin.show{opacity:1}
#pvp-board-coin .pbc-col{display:flex;flex-direction:column;align-items:center;gap:20px}
#pvp-board-coin .pbc-label{font-size:32px;font-weight:850;letter-spacing:-.01em;opacity:0;transform:translateY(8px);
  transition:opacity .3s,transform .3s}
#pvp-board-coin .pbc-label.show{opacity:1;transform:none}

/* ══ «Jugar online» con la textura METÁLICA de las bandas del VS (petición Daniel):
   veta + sheen + borde/glow luminoso, dorado (play premium). ══
   OJO: esta textura es SOLO de este botón. «Activar mazo» la tenía y Daniel la quitó
   (2026-08-12): vive en mazos-view.css con el material neutro del resto de la app. */
#view-jugar .jv-arow:not(.jv-soon){
  background:
    repeating-linear-gradient(115deg, rgba(255,255,255,.07) 0 2px, transparent 2px 7px),
    linear-gradient(125deg, rgba(255,255,255,.32), transparent 34%, transparent 66%, rgba(0,0,0,.16)),
    linear-gradient(180deg, #ffe694, #f2b13a) !important;
  box-shadow:inset 0 1.5px 0 rgba(255,255,255,.65), inset 0 -3px 9px rgba(120,80,10,.3), 0 7px 24px -8px rgba(255,200,80,.55)}
#view-jugar .jv-arow:not(.jv-soon):hover{filter:brightness(1.07) saturate(1.05)}

/* Contadores «en línea / en partida» del hub (Daniel: online siempre visible). Solo modos online. */
#view-jugar .jv-online{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:11px;
  font-size:13px;color:var(--jv-muted)}
#view-jugar .jv-online.jv-hide{display:none}
#view-jugar .jv-online b{color:#eaeaf2;font-weight:750;font-variant-numeric:tabular-nums;margin:0 1px}
#view-jugar .jv-online .jv-osep{opacity:.4;margin:0 2px}
#view-jugar .jv-online .jv-live-dot{width:8px;height:8px;border-radius:50%;background:var(--jv-live);
  box-shadow:0 0 8px rgba(87,220,140,.8);animation:jvLiveDot 2s ease-in-out infinite}
@keyframes jvLiveDot{0%,100%{opacity:1}50%{opacity:.4}}
html.pb-reduce-motion #view-jugar .jv-online .jv-live-dot{animation:none}

/* Búsqueda de la COLA de Draft online (en el overlay del lobby de draft-multi) */
#dr-lobby-content .dr-qsearch{display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center;padding:14px 4px 6px}
#dr-lobby-content .dr-qonline{display:flex;align-items:center;gap:7px;font-size:13px;color:#9a9aa8}
#dr-lobby-content .dr-qonline b{color:#eaeaf2;font-weight:750;font-variant-numeric:tabular-nums}
#dr-lobby-content .dr-qsep{opacity:.4}
#dr-lobby-content .dr-qdot{width:8px;height:8px;border-radius:50%;background:#57dc8c;box-shadow:0 0 8px rgba(87,220,140,.8);animation:jvLiveDot 2s ease-in-out infinite}
/* opciones secundarias del hub = BOTONES de verdad (Daniel: reutilizar el botón «jugar con un
   amigo» del draft, ya no un texto). Estándar = 1; Draft = 2 (amigo · solo). */
#view-jugar .jv-friend{display:flex;gap:12px;align-items:center;justify-content:center;margin-top:14px}
#view-jugar .jv-friend .jv-fk{cursor:pointer;color:#cbcbd8;font-weight:640;font-size:13.5px;
  padding:10px 18px;border-radius:12px;border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.05);
  transition:background .15s,border-color .15s,color .15s,transform .12s}
#view-jugar .jv-friend .jv-fk:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.3);color:#fff}
#view-jugar .jv-friend .jv-fk:active{transform:scale(.97)}
#view-jugar .jv-friend .jv-fkdot{display:none}

/* ── Draft: el SOBRE en el hub (en vez del selector de mazo) — Tanda A ── */
/* Héroe de altura FIJA → el botón NO se mueve entre modos. */
#view-jugar .jv-hero{position:relative; display:flex; flex-direction:column; align-items:center; justify-content:flex-end; height:340px; overflow:visible}
#view-jugar .jv-hero .jv-name{margin:0 0 12px}   /* nombre ARRIBA del mazo (antes iba debajo) */
/* El sobre es tan ANCHO como el mazo; su parte inferior (lo que sobra por ser más alto) queda
   RECORTADA tras el botón. Flota en idle sin asomar nunca por debajo (el recorte lo garantiza). */
/* 👇 TAMAÑO DEL SOBRE: cambia SOLO este número. 1 = máximo, 0.85 = medio, 0.7 = pequeño. */
#view-jugar .jv-pack-stage{--pack-scale:0.95;
  position:relative; width:220px; max-width:64vw; height:300px;   /* alto VISIBLE ≈ mazo */
  margin:0 auto -36px; overflow:hidden}                           /* recorta abajo, solapando el botón → el corte queda TRAS él */
#view-jugar .jv-pack-stage.jv-hide,
#view-jugar #jv-deckstage.jv-hide,
#view-jugar #jv-name.jv-hide{display:none}
#view-jugar .jv-pack-stage .dr-pack{margin:0 !important;
  position:absolute; left:50%; top:12px;
  transform:translateX(-50%) scale(var(--pack-scale)); transform-origin:top center;
  animation:jvPackFloat 3.8s ease-in-out infinite; cursor:default}
@keyframes jvPackFloat{
  0%,100%{transform:translateX(-50%) translateY(0) scale(var(--pack-scale))}
  50%{transform:translateX(-50%) translateY(-6px) scale(var(--pack-scale))}}
#view-jugar.jv-exiting .jv-pack-stage .dr-pack{animation-play-state:paused}   /* congela el float en la salida */
html.pb-reduce-motion #view-jugar .jv-pack-stage .dr-pack{animation:none}
#view-jugar .jv-pack-stage .dr-cut-hint{display:none}
/* el botón tapa la parte inferior del sobre → el z-index vive en .jv2-shell (regla principal) */
/* salida de la UI del hub al pulsar «Jugar online» (el sobre NO se desvanece: viaja) */
#view-jugar.jv-exiting #jv-name,
#view-jugar.jv-exiting .jv2-shell,
#view-jugar.jv-exiting #jv-online,
#view-jugar.jv-exiting .jv2-secrow{opacity:0; transform:translateY(16px); transition:opacity .26s ease, transform .26s ease}

/* ══════════════════════════════════════════════════════════════
   DIRECCIÓN LATERAL · hextech (doble marco + brackets) sobre pokéballs.
   Paneles y sus botones = angular/oro; cluster de acción del centro
   (Jugar / online / partida privada) = redondeado suave.
   ══════════════════════════════════════════════════════════════ */
#view-jugar .jv2-stage{position:relative; z-index:2; flex:1; display:grid;
  grid-template-columns:322px 380px 322px; column-gap:84px; row-gap:0; justify-content:center; align-items:start; align-content:safe center;
  padding:36px 24px 12px; overflow:auto;
  --au:#c8aa6e; --au2:#f4dfa8; --jtx:#efe7d2; --jmut:#948d73; --jlive:#5fdc93}
#view-jugar .jv-hide{display:none !important}
/* columnas fijadas a mano: el aviso legal va en la fila 2 y así nada se le cuela */
#view-jugar .jv2-colmeta{grid-column:1; grid-row:1}
#view-jugar .jv2-center{grid-column:2; grid-row:1}
#view-jugar .jv2-colexp{grid-column:3; grid-row:1}

/* panel = tarjeta NEUTRA (lenguaje del selector de modos; fuera el oro/brackets — Daniel 2026-08-08).
   540px, un pelín más bajo que el corebox (584) y CENTRADO sobre él (margin-top 22 = (584-540)/2). */
#view-jugar .jv2-panel{position:relative; height:540px; margin-top:22px; display:flex; flex-direction:column; text-align:left;
  background:linear-gradient(180deg,rgba(22,22,31,.92),rgba(13,13,20,.96)); border:1px solid rgba(255,255,255,.13); border-radius:18px;
  box-shadow:0 24px 54px -24px #000}
#view-jugar .jv2-panel > *{position:relative; z-index:1}

/* cabecera: título con peso + «Ver todo ›» a la derecha (sustituye a los botones inferiores) */
#view-jugar .jv2-ph{display:flex; align-items:center; gap:10px; padding:17px 18px 13px; flex:none}
#view-jugar .jv2-k{font-size:12.5px; letter-spacing:.15em; text-transform:uppercase; font-weight:830; color:#e7e7f0}
/* «Ver todo ›» = chip mínimo: pill tenue que se enciende al hover, chevrón que se desliza */
#view-jugar .jv2-vt{margin-left:auto; display:inline-flex; align-items:center; gap:5px; cursor:pointer;
  font-family:inherit; font-size:10.5px; font-weight:750; letter-spacing:.06em; text-transform:uppercase; color:#a2a2b2;
  background:rgba(255,255,255,.035); border:1px solid rgba(255,255,255,.12); border-radius:999px; padding:6px 12px;
  transition:color .15s, background .15s, border-color .15s}
#view-jugar .jv2-vt:hover{color:#fff; background:rgba(255,255,255,.09); border-color:rgba(255,255,255,.24)}
#view-jugar .jv2-vtc{font-size:13px; line-height:1; margin-top:-1px; transition:transform .18s}
#view-jugar .jv2-vt:hover .jv2-vtc{transform:translateX(2px)}

/* mejores mazos = BANDAS-BANNER (A v2): arte del mazo de fondo + scrim + franja de acento
   por energía (--a, EL_COLORS); la banda entera abre el mazo en Meta. Sin «Activar». */
#view-jugar .jv2-bands{flex:1; display:flex; flex-direction:column; justify-content:space-evenly; padding:2px 15px 4px}
#view-jugar .jv2-band{position:relative; height:118px; border-radius:14px; overflow:hidden; cursor:pointer;
  border:1px solid rgba(255,255,255,.11); transition:border-color .2s, transform .18s, box-shadow .22s}
/* hover con algo más de acento (como las tarjetas de modo): borde + glow del color del mazo */
#view-jugar .jv2-band:hover{border-color:color-mix(in srgb,var(--a) 60%,transparent); transform:translateY(-2px);
  box-shadow:0 12px 30px -14px color-mix(in srgb,var(--a) 55%,#000), inset 0 0 0 1px color-mix(in srgb,var(--a) 22%,transparent)}
#view-jugar .jv2-bart{position:absolute; inset:0; background-position:center 24%; background-size:135% auto; background-repeat:no-repeat; background-color:#12121a}
/* scrim algo MÁS ligero (Daniel: bajar el oscurecimiento un poco) */
#view-jugar .jv2-bscrim{position:absolute; inset:0;
  background:linear-gradient(90deg,rgba(7,7,12,.88) 30%,rgba(7,7,12,.44) 62%,rgba(7,7,12,.14)),linear-gradient(180deg,rgba(7,7,12,.10),rgba(7,7,12,.34));
  box-shadow:inset 4px 0 0 var(--a)}
#view-jugar .jv2-bin{position:relative; display:flex; align-items:center; gap:11px; height:100%; padding:0 14px 0 16px}
#view-jugar .jv2-brk{width:23px; height:23px; border-radius:7px; display:grid; place-items:center; font-weight:800; font-size:12px; flex:none;
  color:#cfcfda; background:rgba(10,10,16,.7); border:1px solid rgba(255,255,255,.2)}
#view-jugar .jv2-brk.t{background:#eef0f6; color:#14141c; border-color:transparent}
#view-jugar .jv2-binfo{min-width:0}
#view-jugar .jv2-bt{display:block; font-size:14.5px; font-weight:790; color:#f2f2f8; line-height:1.2; text-shadow:0 1px 8px rgba(0,0,0,.85)}
#view-jugar .jv2-bs{display:block; font-size:11.5px; color:rgba(226,226,238,.75); margin-top:4px; text-shadow:0 1px 6px rgba(0,0,0,.85)}
/* frescura del meta = MISMA píldora que la de «en línea» (Daniel 2026-08-13):
   mismo shape/tamaño/tipografía, en tono neutro (no es un indicador «en vivo»),
   y ALINEADA A LA IZQUIERDA con el padding del panel (18px), no centrada. */
#view-jugar .jv2-freshrow{flex:none; display:flex; justify-content:flex-start; padding:2px 18px 13px}
#view-jugar .jv2-fresh{font:600 11px/1 system-ui,sans-serif; letter-spacing:.02em; color:#9a9aa6; white-space:nowrap;
  display:inline-flex; align-items:center; gap:7px; padding:6px 12px; border-radius:999px;
  border:1px solid rgba(255,255,255,.12); background:rgba(255,255,255,.045)}
#view-jugar .jv2-fresh::before{content:""; width:6px; height:6px; border-radius:50%; background:#6f6f7c; flex:none}

/* centro */
#view-jugar .jv2-center{display:flex; flex-direction:column; align-items:center}
/* corebox = MISMA altura que los paneles → el borde inferior del botón JUGAR queda
   alineado con el de los paneles; el nombre del mazo se centra en el hueco libre
   (flex:1) con min-height que garantiza que el spread del hover (21px) no lo tape. */
#view-jugar .jv2-corebox{height:584px; width:100%; display:flex; flex-direction:column; align-items:center}
#view-jugar .jv2-stage.jv2-draft .jv2-corebox{height:auto}   /* en Elección: bloque compacto centrado */
#view-jugar .jv2-hero{position:relative; display:flex; flex-direction:column; align-items:center; justify-content:flex-end}
#view-jugar .jv2-dwrap{position:relative; display:flex; flex-direction:column; align-items:center; cursor:pointer; padding:6px 0 2px}
#view-jugar .jv2-halo{position:absolute; width:296px; height:296px; top:-24px; left:50%; transform:translateX(-50%); z-index:0; border-radius:50%;
  background:radial-gradient(circle,rgba(168,178,220,.26),transparent 62%); filter:blur(24px); opacity:.55; pointer-events:none;
  transition:opacity .3s ease, transform .3s ease}
#view-jugar #jv-deckstage:hover .jv2-halo{opacity:.85; transform:translateX(-50%) scale(1.06)}
#view-jugar .jv2-center .jv-deck-wrap{position:relative; z-index:1; width:var(--jv-deckw)}
/* nombre del mazo ARRIBA (Daniel 2026-08-08); es la misma affordance que el mazo →
   clicable, con icono ⇄ sutil (cambiar mazo / Mis Mazos) que se enciende al hover */
#view-jugar .jv2-dn{font-size:16px; font-weight:800; letter-spacing:.04em; text-transform:uppercase; margin:2px 0 16px; text-align:center; color:#eef0f6;
  flex:none; display:flex; align-items:center; gap:8px; cursor:pointer}
#view-jugar .jv2-dn:hover{color:#fff}
#view-jugar .jv2-dnic{display:inline-flex; opacity:.38; transition:opacity .18s, transform .18s}
#view-jugar .jv2-dnic svg{width:15px; height:15px; fill:currentColor; display:block}
#view-jugar .jv2-dn:hover .jv2-dnic{opacity:.95; transform:translateX(1px)}
#view-jugar .jv2-dn.jv2-dn-welcome{display:none}
#view-jugar .jv-welcome-preparing{color:#8d8d9b; font-size:11.5px; font-weight:650; letter-spacing:.02em; text-transform:none}

/* Confirmación única tras recibir la baraja: mismo cristal global, con el stack real. */
.pb-welcome-modal{width:min(560px,92vw); max-width:92vw; display:grid; grid-template-columns:142px minmax(0,1fr); align-items:center;
  gap:27px; padding:26px 27px}
.pb-welcome-stack{width:132px; justify-self:center; position:relative}
.pb-welcome-stack .mz-stack{width:100%; margin:0}
.pb-welcome-stack::after{content:""; position:absolute; inset:0; z-index:4; opacity:0; pointer-events:none; border-radius:10px;
  border:1px solid rgba(255,255,255,.1);
  background:#171720 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 56'%3E%3Crect x='15' y='12' width='29' height='39' rx='4' fill='none' stroke='%239898a8' stroke-width='2'/%3E%3Cpath d='M11 17v30a4 4 0 0 0 4 4M30 23v17M21.5 31.5h17' fill='none' stroke='%239898a8' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") center/44% no-repeat}
.pb-welcome-stack.pb-welcome-stack-fallback .mz-stack{opacity:0}
.pb-welcome-stack.pb-welcome-stack-fallback::after{opacity:.46}
.pb-welcome-content{min-width:0; display:flex; flex-direction:column; gap:13px}
.pb-welcome-modal .pb-modal-title{font-size:16px; font-weight:680; color:#f1f1f6}
.pb-welcome-deckname{font:780 21px/1.18 system-ui,sans-serif; letter-spacing:-.02em; color:#fff; text-wrap:balance}
.pb-welcome-modal .pb-modal-msg{margin:0; color:rgba(238,238,246,.58); font-size:12.5px; line-height:1.58}
.pb-welcome-modal .pb-modal-actions{margin-top:2px; flex-wrap:wrap}
.pb-welcome-modal .pb-btn{min-height:44px}
@media (max-width:520px){
  .pb-welcome-modal{width:min(352px,91vw); grid-template-columns:88px minmax(0,1fr); gap:18px; padding:22px 20px}
  .pb-welcome-stack{width:82px}
  .pb-welcome-content{gap:10px}
  .pb-welcome-deckname{font-size:18px}
  .pb-welcome-modal .pb-modal-actions{display:grid; grid-template-columns:1fr; width:100%}
  .pb-welcome-modal .pb-btn{width:100%}
}
@media (max-width:360px){
  .pb-welcome-modal{grid-template-columns:1fr; text-align:center}
  .pb-welcome-stack{width:72px}
  .pb-welcome-modal .pb-modal-actions{justify-content:center}
}
html.pb-reduce-motion #view-jugar .jv-welcome-deck,
html.pb-reduce-motion #view-jugar .jv-welcome-spinner{animation:none}
/* el hueco flexible vive AHORA entre el mazo y el botón (nombre arriba) — y da sitio al spread */
#view-jugar .jv2-corebox .jv2-hero{margin-bottom:auto}
/* Jugar online = redondeado (como antes) */
#view-jugar .jv2-shell{position:relative; z-index:3;   /* POR DELANTE del sobre del draft (su corte inferior queda detrás) */
  margin-top:12px; width:348px; max-width:84vw; overflow:visible; border:1px solid rgba(255,255,255,.18); border-radius:15px; box-shadow:0 18px 40px -16px #000}
#view-jugar .jv2-mode{position:relative; display:flex; align-items:center; justify-content:center; gap:9px; padding:11px; font-weight:700; font-size:13px; letter-spacing:.03em; cursor:pointer;
  border-radius:14px 14px 0 0;
  background:linear-gradient(180deg,#161a24,#0e1119); border-bottom:1px solid rgba(0,0,0,.45)}
#view-jugar .jv2-mdot{width:8px; height:8px; background:var(--jv-acc,var(--au)); box-shadow:0 0 0 3px color-mix(in srgb,var(--jv-acc,var(--au)) 22%,transparent)}
#view-jugar .jv2-chev{color:#9a9aa8; font-size:11px}
#view-jugar .jv2-play{position:relative; overflow:hidden; display:flex; align-items:center; justify-content:center; gap:10px; text-align:center; font-weight:800; font-size:21px; letter-spacing:.05em; text-transform:uppercase; color:#171204; padding:19px; cursor:pointer;
  border-radius:0 0 14px 14px;
  background:repeating-linear-gradient(115deg,rgba(255,255,255,.08) 0 2px,transparent 2px 7px),linear-gradient(125deg,rgba(255,255,255,.32),transparent 34%,transparent 66%,rgba(0,0,0,.16)),linear-gradient(180deg,var(--au2),#f2b13a);
  box-shadow:inset 0 1.5px 0 rgba(255,255,255,.6),inset 0 -3px 9px rgba(90,60,10,.3)}
#view-jugar .jv2-play-label,#view-jugar .jv2-beta{position:relative; z-index:1}
#view-jugar .jv2-beta{display:inline-flex; align-items:center; min-height:18px; padding:2px 6px; border-radius:999px;
  font:800 8px/1 system-ui,sans-serif; letter-spacing:.11em; color:rgba(255,255,255,.88);
  border:1px solid rgba(255,255,255,.18); background:rgba(18,16,12,.58); box-shadow:inset 0 1px 0 rgba(255,255,255,.08)}

/* ══ Racha de victorias — indicador de texto (hub + Fin PvP) ══
   Píldora del MISMO material que el resto de la web (cristal + borde de 1px), como la de
   «en línea»: «RACHA DE VICTORIAS · N». Sin icono — el texto ya lo dice. El número vira a
   azul a partir de 10 (maestría ×2). En el hub va DEBAJO del botón, en el flujo. */
#view-jugar .jv2-streak-host{display:flex; justify-content:center; margin-top:13px; pointer-events:none}
#view-jugar .jv2-streak-host[hidden]{display:none}
/* El bloque central mide LO MISMO con y sin racha: el hueco que la píldora ocupa arriba se
   descuenta de este pad del final. Así el mazo, el botón y los paneles no se recolocan
   cuando la racha aparece (el stage centra el conjunto verticalmente). */
#view-jugar .jv2-streak-pad{flex:none; height:var(--jv-streak-space,51px); pointer-events:none}
#view-jugar .jv2-center.jv2-has-streak .jv2-streak-pad{height:0}

.pb-streak{--sk-acc:#ffd166; --sk-acc2:#f2a93a; --sk-glow:rgba(255,209,102,.5);
  --sk-shadow:0 6px 18px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.17);
  position:relative; display:inline-flex; align-items:center; gap:9px; line-height:1;
  padding:7px 15px 8px 14px; border-radius:999px; overflow:hidden; white-space:nowrap;
  background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.13);
  backdrop-filter:blur(14px) saturate(1.4); -webkit-backdrop-filter:blur(14px) saturate(1.4);
  box-shadow:var(--sk-shadow)}
.pb-streak.is-blue{--sk-acc:#8fdcff; --sk-acc2:#3aa9ff; --sk-glow:rgba(90,190,255,.55)}
/* brillo que la recorre de vez en cuando (mismo gesto que el resto del cristal de la web) */
.pb-streak::after{content:""; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(105deg,transparent 40%,rgba(255,255,255,.22) 50%,transparent 60%);
  background-size:300% 100%; animation:pbStreakSheen 7s ease-in-out infinite}
/* el rótulo lleva una corrección óptica: sin ella el texto queda alto respecto al número */
.pb-streak-cap{position:relative; top:.08em; font-size:10.5px; letter-spacing:.15em;
  text-transform:uppercase; font-weight:800; color:#8a8a97; line-height:1}
.pb-streak-num{position:relative; display:inline-grid; justify-items:center; min-width:.62em;
  font-size:21px; font-weight:900; letter-spacing:-.02em; line-height:1}
.pb-streak-num>span{grid-area:1/1;
  background:linear-gradient(160deg,#fff,var(--sk-acc) 44%,var(--sk-acc2));
  -webkit-background-clip:text; background-clip:text; color:transparent;
  filter:drop-shadow(0 0 8px var(--sk-glow)); animation:pbStreakGlow 3.4s ease-in-out infinite}
/* entrada */
.pb-streak.is-enter{animation:pbStreakIn .46s cubic-bezier(.2,.85,.3,1) both}
/* subida de una victoria: el dígito rueda hacia arriba y el halo late una vez. Sutil: sin
   rebote ni escalones — solo desplazamiento corto, opacidad y un resplandor que se apaga. */
.pb-streak.is-bump{animation:pbStreakPulse .66s ease-out}
.pb-streak-num>span.is-in{animation:pbStreakDigitIn .42s cubic-bezier(.22,.8,.28,1) both,
  pbStreakGlow 3.4s ease-in-out .42s infinite}
.pb-streak-num>span.is-out{animation:pbStreakDigitOut .34s cubic-bezier(.4,0,.7,.4) both}
@keyframes pbStreakIn{from{opacity:0; transform:translateY(7px)}to{opacity:1; transform:none}}
@keyframes pbStreakGlow{0%,100%{filter:drop-shadow(0 0 7px var(--sk-glow))}
  50%{filter:drop-shadow(0 0 14px var(--sk-glow))}}
@keyframes pbStreakSheen{0%,60%{background-position:190% 0}100%{background-position:-95% 0}}
@keyframes pbStreakDigitIn{from{opacity:0; transform:translateY(.55em)}to{opacity:1; transform:none}}
@keyframes pbStreakDigitOut{from{opacity:1; transform:none}to{opacity:0; transform:translateY(-.55em)}}
@keyframes pbStreakPulse{0%{box-shadow:var(--sk-shadow), 0 0 17px 1px var(--sk-glow)}
  100%{box-shadow:var(--sk-shadow), 0 0 0 0 transparent}}

/* Fin PvP: la MISMA píldora, en grande, debajo del marcador. El slot no ocupa nada
   mientras no haya un resultado verificado. */
#pvp-content .pvp-fin-streak-slot{width:100%; height:0; overflow:hidden; margin:0;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:9px;
  opacity:0; transition:opacity .28s ease; pointer-events:none}
#pvp-content .pvp-fin-streak-slot.is-active{height:auto; margin-top:12px; opacity:1}
.pvp-fin-streak-slot .pb-streak{gap:13px; padding:12px 22px 13px 20px}
.pvp-fin-streak-slot .pb-streak-cap{font-size:12.5px; letter-spacing:.16em}
.pvp-fin-streak-slot .pb-streak-num{font-size:31px}
.pb-streak-x2{font:800 10.5px/1 system-ui,-apple-system,"Segoe UI",sans-serif; letter-spacing:.15em;
  text-transform:uppercase; color:#8fdcff; animation:pbStreakX2 .46s .1s cubic-bezier(.2,.85,.3,1) both}
.pb-streak-x2[hidden]{display:none}
@keyframes pbStreakX2{from{opacity:0; transform:translateY(-5px)}to{opacity:1; transform:none}}
html.pb-reduce-motion .pb-streak,html.pb-reduce-motion .pb-streak *{animation:none !important}


@media (max-width:520px){
  #view-jugar .jv2-streak-host{margin-top:11px}
  .pb-streak{gap:8px; padding:6px 13px 7px 12px}
  .pb-streak-cap{font-size:9.5px; letter-spacing:.13em}
  .pb-streak-num{font-size:19px}
  #pvp-content .pvp-fin-streak-slot.is-active{margin-top:9px}
  .pvp-fin-streak-slot .pb-streak{gap:11px; padding:10px 18px 11px 16px}
  .pvp-fin-streak-slot .pb-streak-cap{font-size:11px; letter-spacing:.13em}
  .pvp-fin-streak-slot .pb-streak-num{font-size:26px}
}
@media (max-height:740px){
  #pvp-content .pvp-fin-streak-slot.is-active{margin-top:6px}
  .pvp-fin-streak-slot .pb-streak{padding:10px 19px 11px 17px}
  .pvp-fin-streak-slot .pb-streak-num{font-size:27px}
  #pvp-content .pvp-fin-body{margin-top:14px}
  #pvp-content .pvp-fin-btns{margin-top:18px}
  #pvp-content .pvp-fin-support{margin-top:11px}
}
@media (prefers-reduced-motion:reduce){
  .pb-streak,.pb-streak *,.pb-streak::after,.pb-streak-x2{animation:none!important}
}
#view-jugar .jv2-play::after{content:""; position:absolute; top:0; left:-60%; width:36%; height:100%; background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent); transform:skewX(-18deg); animation:jv2Shn 3.8s ease-in-out infinite}
@keyframes jv2Shn{0%,72%{left:-60%}86%{left:132%}100%{left:132%}}
#view-jugar .jv2-play.jv2-soon{cursor:default; color:#8d8770; background:linear-gradient(180deg,#2a2c34,#1e2028)}
#view-jugar .jv2-play.jv2-soon::after{display:none}
/* chip de online = pill VERDE redondeada */
/* el hub solo aporta el hueco; la píldora en sí es .pb-onpill (compartida con la cola) */
#view-jugar .jv2-online{margin-top:14px; display:flex; justify-content:center}
/* fila de secundarios: Estándar = «Partida privada»; Elección = «Partida privada» + «En solitario» */
#view-jugar .jv2-secrow{display:flex; gap:10px; align-items:center; justify-content:center; margin-top:14px}
/* botón SÓLIDO (Daniel 2026-08-08: nada de transparente) */
#view-jugar .jv2-friend{display:inline-flex; align-items:center; gap:8px; font-size:11.5px; letter-spacing:.06em; text-transform:uppercase; font-weight:650; color:#c6c6d2; cursor:pointer; padding:9px 15px; border-radius:11px;
  border:1px solid rgba(255,255,255,.16); background:#1a1b26; transition:.15s}
#view-jugar .jv2-friend:hover{color:#fff; border-color:rgba(255,255,255,.3); background:#242534}
/* aviso legal: al FINAL DEL CONTENIDO, sin franja ni línea divisoria — texto tenue sobre el
   fondo del hub, que scrollea con lo demás. Se toca para leerlo entero en «Acerca de». */
#view-jugar .jv2-legal{grid-column:1 / -1; grid-row:2; align-self:end; text-align:center; cursor:default;
  margin:18px auto 0; max-width:900px; padding:0 8px;
  font-size:10px; line-height:1.5; color:#4e4e5a; text-wrap:balance; transition:color .15s}
#view-jugar .jv2-legal:hover{color:#75757f}
#view-jugar .jv2-friend svg{width:18px; height:18px; fill:currentColor}

/* última expansión: bocadillo REAL del draft (.dr-peek / .dr-peek-reel, mismo CSS) +
   sobre completo (reflejo sutil difuminado). El override sólo neutraliza el posicionado
   absoluto del draft para que el bocadillo viva dentro del panel; el look es el del draft. */
#view-jugar .jv-exp-peek{position:relative; left:auto; transform:none; width:auto; max-width:none; margin:10px 16px 0; z-index:3; flex:none;
  /* +sustancia: gradiente en vez de tinte plano, filo de luz arriba, pozo interior abajo y sombra a capas */
  background:linear-gradient(180deg, rgba(40,43,58,.88), rgba(21,23,34,.95));
  border-color:rgba(255,255,255,.17);
  box-shadow:0 16px 38px rgba(0,0,0,.55), 0 3px 9px rgba(0,0,0,.4),
    inset 0 1px 0 rgba(255,255,255,.13), inset 0 -14px 22px rgba(0,0,0,.3)}
#view-jugar .jv-exp-peek::after{border-top-color:rgb(31,33,46)}   /* la cola casa con el fondo nuevo */
/* margin-top 18 = hueco para la COLA del bocadillo (14px) → nunca pisa el sobre */
#view-jugar .jv2-packarea{flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; position:relative; min-height:0; margin-top:18px; padding-bottom:12px}
/* sobre ENTERO y protagonista (png con el fondo blanco eliminado → el drop-shadow sigue la
   SILUETA real). overflow:hidden = recorta el glint/holo a la caja del sobre. */
#view-jugar .jv2-mpack{--seam-y:14.9%;   /* línea de soldadura REAL de la imagen (medida: y=195/1307) */
  position:relative; width:164px; height:315px; overflow:hidden;
  background-position:center; background-size:contain; background-repeat:no-repeat;
  filter:drop-shadow(0 22px 32px rgba(0,0,0,.7)); animation:jv2Float 5.4s ease-in-out infinite}
@keyframes jv2Float{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
/* holo foil sutil del sobre del draft (misma banda diagonal, opacidad baja) */
#view-jugar .jv2-mpack::after{content:""; position:absolute; top:-30%; bottom:-30%; left:-28%; width:60px;
  transform:rotate(15deg); pointer-events:none;
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.15), transparent);
  animation:jv2Holo 5.2s ease-in-out infinite alternate}
@keyframes jv2Holo{from{left:-28%}to{left:88%}}
/* brillo puntual que RECORRE la línea de rotura (idéntico al dr-pack-seam-shine del draft:
   recorrido rápido + pausa larga), alineado a la soldadura real de la imagen */
#view-jugar .jv2-seamglint{position:absolute; top:calc(var(--seam-y) - 4px); left:0; width:44px; height:8px; z-index:2;
  border-radius:50%; pointer-events:none; opacity:0;
  background:radial-gradient(ellipse at center, #fff 0%, #fff 24%, rgba(255,255,255,.6) 46%, transparent 74%);
  box-shadow:0 0 12px 3px rgba(255,255,255,.8); filter:blur(.8px);
  animation:jv2SeamSweep 6s ease-in-out infinite}
@keyframes jv2SeamSweep{
  0%{transform:translateX(-46px); opacity:0}
  2%{opacity:1}
  25%{transform:translateX(166px); opacity:1}
  28%{transform:translateX(186px); opacity:0}
  100%{transform:translateX(186px); opacity:0}}
html.pb-reduce-motion #view-jugar .jv2-mpack::after,
html.pb-reduce-motion #view-jugar .jv2-seamglint{animation:none}
/* (el botón inferior «Ver todas las cartas» pasó a «Ver todo ›» en la cabecera — Daniel 2026-08-08) */

/* Elección (draft): oculta los laterales, centra el sobre del draft */
#view-jugar .jv2-stage.jv2-draft{grid-template-columns:1fr}
#view-jugar .jv2-stage.jv2-draft .jv2-panel{display:none}
#view-jugar .jv2-stage.jv2-draft .jv2-center{grid-column:1}
#view-jugar .jv2-stage.jv2-draft .jv2-legal{grid-column:1}

/* móvil: una columna con scroll (centro primero) */
@media (max-width:860px){
  /* `safe center`: centra mientras quepa, pero al desbordar se comporta como flex-start —
     con `center` a secas el contenido se sale por ARRIBA y esa parte era INALCANZABLE
     (el mazo activo quedaba cortado y el scroll ya estaba a 0). */
  #view-jugar .jv2-stage{display:flex; flex-direction:column; align-items:center; gap:20px;
    padding:20px 16px 24px; justify-content:safe center}
  #view-jugar .jv2-stage > *{flex:none}
  #view-jugar .jv2-center{order:-1; transform:none}
  /* mismo reparto que en escritorio, pero proporcional al mazo (no fijo) */
  #view-jugar .jv2-corebox{height:auto}
  #view-jugar .jv2-corebox .jv2-hero{margin-bottom:0}
  #view-jugar .jv2-dn{margin-bottom:calc(var(--jv-deckw) * .059)}
  #view-jugar .jv2-shell{margin-top:calc(var(--jv-deckw) * .222)}
  /* En Elección el centro NO es el mazo sino el SOBRE, y su corte inferior tiene que quedar
     TAPADO por el botón (por eso `.jv-pack-stage` lleva `margin-bottom:-36px`). El margin-top
     de arriba —pensado para el mazo— bajaba el botón y dejaba el corte del sobre a la vista. */
  #view-jugar .jv2-stage.jv2-draft .jv2-shell{margin-top:0}
  #view-jugar .jv2-panel{width:min(94vw,360px); height:auto; min-height:0; margin-top:0}


  /* el aviso legal, al final del scroll y a DOS líneas como mucho (ocupaba media pantalla) */
  #view-jugar .jv2-legal{margin:16px auto calc(4px + env(safe-area-inset-bottom,0px)); padding:0 8px;
    font-size:9.5px; line-height:1.45; cursor:pointer}
  #view-jugar .jv2-legal-t{display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden}
  /* tocarlo lo despliega entero aquí mismo */
  #view-jugar .jv2-legal.jv2-legal-open .jv2-legal-t{-webkit-line-clamp:unset; display:block}
}
