/* Página pública de la murga — publica/index.php
   REGLA DURA (patrón Splash): todo el color/tipografía sale de las variables
   que inyecta el <head> desde private/temas.php. Acá NO va ningún color
   hardcodeado de marca: solo var(--brand), var(--fondo), etc. */

* { margin: 0; padding: 0; box-sizing: border-box; }

/* Utilidad: la pública no carga im.css, así que .oculto se define acá.
   Sin esto el lightbox (display:flex) nunca se ocultaba y tapaba la página. */
.oculto { display: none !important; }

html { scroll-behavior: smooth; }

body {
    font-family: var(--ff-body);
    background: var(--fondo);
    color: var(--texto);
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
    overflow-x: hidden; /* nunca scroll horizontal (el título/logo grande no debe empujar el ancho) */
}

.pp-container { max-width: 960px; margin: 0 auto; padding: 0 24px; }

/* ---- Nav ---- */
.pp-nav {
    position: sticky; top: 0; z-index: 10;
    background: var(--fondo); /* fallback sin color-mix */
    background: color-mix(in srgb, var(--fondo) 85%, transparent);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--card-borde);
}
.pp-nav-inner {
    display: flex; align-items: center; justify-content: space-between;
    gap: 16px; height: 60px;
}
.pp-marca { display: flex; align-items: center; gap: 10px; min-width: 0; }
.pp-logo {
    width: 36px; height: 36px; object-fit: contain;
    border-radius: 10px;
}
.pp-marca-nombre {
    font-family: var(--ff-display);
    font-weight: 800; font-size: 1.05rem;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* Botón de acceso a la gestión: visible y minimalista en la barra (reemplaza a
   la flecha desplegable; ya no hay que abrir nada). */
/* Solo ícono: chico y minimalista, con el color de marca (--brand resuelve al
   color propio del conjunto si se eligió uno en Apariencia, o al del tema). */
.pp-ingresar {
    display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0;
    width: 38px; height: 38px; padding: 0;
    border-radius: 50%;
    border: 1px solid var(--brand-mid);
    background: var(--brand-soft); color: var(--brand);
    text-decoration: none;
    transition: border-color 0.2s, transform 0.15s ease, filter 0.2s ease;
}
.pp-ingresar:hover { border-color: var(--brand); transform: translateY(-1px); filter: brightness(1.05); }
.pp-ingresar svg { color: var(--brand); flex-shrink: 0; }

/* Aviso de transición: barra full-width bajo la barra de navegación, cerrable. */
.pp-aviso {
    position: relative;
    padding: 11px 46px;
    text-align: center;
    font-size: 0.86rem; line-height: 1.4; color: var(--texto);
    background: var(--brand-soft);
    border-bottom: 1px solid var(--brand-mid);
}
.pp-aviso-txt strong { color: var(--brand); font-weight: 700; }
.pp-aviso-x {
    position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
    display: inline-flex; align-items: center; justify-content: center;
    width: 32px; height: 32px; padding: 0;
    background: none; border: none; cursor: pointer;
    color: var(--texto-suave); border-radius: 50%;
    transition: color 0.2s, background 0.2s;
}
.pp-aviso-x:hover { color: var(--texto); background: rgba(128,128,128,.18); }

/* ---- Hero ---- */
.pp-hero {
    position: relative;
    overflow: hidden;
    background: linear-gradient(170deg, var(--brand-soft) 0%, var(--fondo) 65%);
}

/* Carrusel de portada: capas absolutas detrás del velo; la imagen de cada
   slide la inyecta el <head> con nonce (.pp-slide-N). Con una sola foto
   queda una capa fija. */
.pp-slides { position: absolute; inset: 0; }
.pp-slide {
    position: absolute; inset: 0;
    background-size: cover;
    /* El encuadre (background-position-x:50% + background-position-y por slide,
       escritorio y móvil) lo define el <style> del <head>, con el valor que el
       admin elige con el slider de "Posición vertical". */
    background-position: 50% 50%;
    opacity: 0;
    transition: opacity 0.9s ease;
}
.pp-slide.activa { opacity: 1; }

.pp-puntos {
    position: absolute; z-index: 2;
    bottom: 14px; left: 0; right: 0;
    display: flex; justify-content: center; gap: 8px;
}
.pp-punto {
    position: relative;
    width: 10px; height: 10px; padding: 0;
    border-radius: 50%;
    border: 1px solid var(--texto);
    background: transparent;
    opacity: .55;
    cursor: pointer;
    transition: opacity 0.2s, transform 0.15s ease;
}
/* Área de toque de ~40px sin agrandar el punto visible (antes 9px, imposible
   de acertar en móvil). */
.pp-punto::after { content: ''; position: absolute; inset: -14px; }
.pp-punto:hover { opacity: .9; transform: scale(1.2); }
.pp-punto.activa { background: var(--texto); opacity: 1; }

.pp-hero-velo { position: relative; z-index: 1; background: transparent; }
.pp-hero-conportada .pp-hero-velo {
    /* Banner más alto cuando hay foto: la proporción se acerca a la de la
       imagen (16:9) y cover recorta mucho menos (la foto se ve casi completa,
       sin ampliarse ni mutilarse). El contenido queda centrado vertical. */
    min-height: clamp(440px, 58vh, 680px);
    display: flex; flex-direction: column; justify-content: center;
    /* velo sobre la foto para que el texto del tema siga legible */
    background: rgba(0, 0, 0, 0.55); /* fallback sin color-mix */
    background: linear-gradient(180deg,
        color-mix(in srgb, var(--fondo) 55%, transparent) 0%,
        color-mix(in srgb, var(--fondo) 88%, transparent) 100%);
}
@media (max-width: 640px) {
    .pp-hero-conportada .pp-hero-velo { min-height: 420px; }
}
.pp-hero-inner {
    position: relative; z-index: 1; /* el texto siempre por encima del logo */
    padding-top: 88px; padding-bottom: 72px;
    text-align: center;
    /* El velo es flex-column y esta caja lleva .pp-container, que trae
       `margin: 0 auto`. En flexbox un margen auto en el eje cruzado gana sobre
       align-self:stretch, así que sin este width la caja se encogía al ancho del
       contenido y quedaba centrada: alinear el texto a la izquierda o a la
       derecha adentro de una caja angosta y centrada se veía casi igual que
       centrado. Con width:100% la caja ocupa sus 960px (el max-width de
       .pp-container) y la alineación se nota de verdad. */
    width: 100%;
}

/* Posición del bloque de texto dentro de la cabecera (publica_config:
   texto_pos_h / texto_pos_v, se elige en Apariencia). El centro es el default
   histórico y no agrega ninguna regla: las clases solo desplazan.

   Vertical: el velo es la caja de altura fija cuando hay foto de portada; sin
   foto crece con el contenido y arriba/centro/abajo se ven igual (se avisa en
   el panel). Horizontal: alinea el texto y arrastra la bio y los botones de
   redes, que por defecto van centrados con márgenes automáticos. */
/* El velo ya era flex-column centrado cuando hay portada; se generaliza para que
   la elección valga siempre. La especificidad extra (.pp-hero ...) le gana a
   `.pp-hero-conportada .pp-hero-velo { justify-content: center }` sin depender
   del orden de las reglas. */
.pp-hero-velo { display: flex; flex-direction: column; justify-content: center; }
.pp-hero .pp-hero-velo.pp-hv-arriba { justify-content: flex-start; }
.pp-hero .pp-hero-velo.pp-hv-abajo  { justify-content: flex-end; }
/* "Al ras": pegado al borde inferior, más abajo que "abajo" (que respeta el
   padding del hero). Se recorta el padding inferior de la caja del texto para
   que quede casi tocando el filo de la portada. */
.pp-hero .pp-hero-velo.pp-hv-al-ras { justify-content: flex-end; }
.pp-hv-al-ras .pp-hero-inner { padding-bottom: 14px; }

/* ── Tamaño del título (preset). 'grande' = el histórico (clamp de arriba). ── */
.pp-display.pp-titulo-mediano { font-size: clamp(2.1rem, 6vw, 3.4rem); }
.pp-display.pp-titulo-chico   { font-size: clamp(1.7rem, 4.5vw, 2.6rem); }

/* ── Tamaño del logo sobre la portada. 'grande' = 28% / 320px (el histórico). ── */
.pp-hero-logo.pp-logo-mediano { width: 20%; max-width: 230px; }
.pp-hero-logo.pp-logo-chico   { width: 14%; max-width: 160px; }

.pp-hh-izquierda .pp-hero-inner { text-align: left; }
.pp-hh-derecha   .pp-hero-inner { text-align: right; }
.pp-hh-izquierda .pp-bio { margin-left: 0; margin-right: auto; }
.pp-hh-derecha   .pp-bio { margin-left: auto; margin-right: 0; }
.pp-hh-izquierda .pp-redes { justify-content: flex-start; }
.pp-hh-derecha   .pp-redes { justify-content: flex-end; }

/* El logo decorativo vive abajo a la derecha. Con el texto también a la derecha
   los dos pelean por el mismo rincón: el logo se pasa a la izquierda (el texto
   nunca queda tapado, pero así tampoco quedan encimados). */
.pp-hero-con-logo.pp-hh-derecha .pp-hero-logo {
    right: auto; left: clamp(12px, 4vw, 48px);
    object-position: bottom left;
}
@media (max-width: 640px) {
    .pp-hero-con-logo.pp-hh-derecha .pp-hero-logo { right: auto; left: 14px; }
}

/* Logo completo como marca decorativa: abajo-derecha, entero (object-fit:contain),
   sin deformar. Detrás del texto (z-index 0) para no restarle legibilidad.
   Escritorio ~28% del ancho; en móvil más chico, pegado a la esquina. */
.pp-hero-logo {
    position: absolute; z-index: 0;
    right: clamp(12px, 4vw, 48px);
    bottom: clamp(12px, 4vw, 44px);
    width: 28%;
    max-width: 320px;
    height: auto;
    max-height: 72%;
    object-fit: contain;
    object-position: bottom right;
    pointer-events: none;
    filter: drop-shadow(0 6px 22px rgba(0, 0, 0, 0.45));
}
@media (max-width: 640px) {
    /* Unificado a 640 (coincide con el encuadre pos_y_mov y el min-height del
       hero): antes en 560 dejaba la banda 561-640 con padding y logo de
       escritorio, y el logo se solapaba con la bio/redes.
       En móvil el hero es corto: se reserva una franja inferior para que el
       logo quede abajo-derecha y NO se meta en la zona del título. */
    .pp-hero-con-logo .pp-hero-inner { padding-bottom: 150px; }
    .pp-hero-logo {
        width: 40%;
        max-width: 130px;
        max-height: 130px;
        right: 14px;
        bottom: 18px;
    }
}
.pp-eyebrow {
    display: inline-block;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    font-size: 0.74rem; font-weight: 700;
    color: var(--brand);
    background: var(--brand-soft);
    border: 1px solid var(--brand-mid);
    padding: 6px 14px;
    border-radius: 999px;
    margin-bottom: 18px;
}
/* Subtítulo debajo del nombre: el margin-bottom del título ya da el espacio
   de arriba; acá solo el de abajo para separarlo de la bio. */
.pp-eyebrow-abajo { margin-top: 0; margin-bottom: 22px; }
.pp-display {
    font-family: var(--ff-display);
    font-size: clamp(2.6rem, 8vw, 4.6rem);
    font-weight: 800; line-height: 1.05;
    margin-bottom: 18px;
}
.pp-bio {
    color: var(--texto-suave);
    max-width: 620px;
    margin: 0 auto 26px;
    font-size: clamp(1rem, 2.2vw, 1.15rem);
}
.pp-redes {
    display: flex; flex-wrap: wrap; gap: 10px;
    justify-content: center;
}
.pp-red {
    color: var(--texto); text-decoration: none;
    font-weight: 600; font-size: 0.9rem;
    background: var(--card-bg);
    border: 1px solid var(--card-borde);
    padding: 9px 18px;
    border-radius: 999px;
    transition: border-color 0.2s, transform 0.15s ease, color 0.2s;
}
.pp-red:hover { border-color: var(--brand); transform: translateY(-2px); }
/* Como logo (Instagram, YouTube…): botón circular con el ícono, sin texto. */
.pp-red.es-icono {
    display: inline-flex; align-items: center; justify-content: center;
    width: 46px; height: 46px; padding: 0;
    border-radius: 50%;
}
.pp-red.es-icono:hover { color: var(--brand); }
.pp-red.es-icono svg { width: 22px; height: 22px; }

/* ---- Secciones ---- */
.pp-seccion { padding: 64px 24px 80px; }
.pp-titulo {
    font-family: var(--ff-display);
    font-size: clamp(1.6rem, 4vw, 2.2rem);
    font-weight: 800;
    margin-bottom: 28px;
    text-align: center;
}

/* ---- Tarjeta de fecha (toques y próximo ensayo) ---- */
.pp-fecha {
    display: flex; gap: 16px; align-items: flex-start;
    background: var(--card-bg);
    border: 1px solid var(--card-borde);
    border-radius: var(--radio);
    padding: 18px;
    transition: border-color 0.2s, transform 0.15s ease;
}
.pp-fecha:hover { border-color: var(--brand-mid); transform: translateY(-2px); }
.pp-fecha-cal {
    display: flex; flex-direction: column; align-items: center;
    background: var(--brand); color: var(--brand-on);
    border-radius: calc(var(--radio) * 0.6);
    padding: 8px 12px;
    min-width: 56px;
    flex-shrink: 0;
}
.pp-fecha-dia { font-size: 1.5rem; font-weight: 800; line-height: 1.1; }
.pp-fecha-mes { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; }
.pp-chip {
    display: inline-block;
    font-size: 0.66rem; font-weight: 700;
    text-transform: uppercase; letter-spacing: 0.1em;
    color: var(--brand);
    background: var(--brand-soft);
    padding: 2px 8px;
    border-radius: 999px;
    margin-bottom: 4px;
}
.pp-fecha-info h3 {
    font-family: var(--ff-display);
    font-size: 1.1rem; font-weight: 700;
    margin-bottom: 2px;
}
.pp-fecha-info p { color: var(--texto-suave); font-size: 0.88rem; }

/* ---- Agenda: ensayos abiertos + próximos toques ---- */
.pp-agenda {
    display: grid;
    /* min(100%, 280px): en pantallas ≤328px la pista ya no fuerza 280px fijos
       (que desbordaban y quedaban clipeados por overflow-x:hidden del body). */
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
    gap: 28px;
    max-width: 860px;
    margin: 0 auto;
    align-items: start;
}
/* Con una sola columna (solo ensayos o solo toques), que quede angosta y centrada */
.pp-agenda:has(> :only-child) { max-width: 480px; }
.pp-agenda-sub {
    font-family: var(--ff-display);
    font-size: 1.15rem; font-weight: 700;
    margin-bottom: 14px;
    text-align: center;
}
.pp-agenda-lista { display: flex; flex-direction: column; gap: 12px; }
.pp-ensayos-txt {
    color: var(--texto-suave);
    font-size: 0.92rem;
    margin-top: 14px;
    background: var(--card-bg);
    border: 1px solid var(--card-borde);
    border-radius: var(--radio);
    padding: 14px 18px;
}

/* ---- Nuestro evento (cara pública del Festival) ---- */
.pp-festi {
    max-width: 560px;
    margin: 0 auto;
    background: var(--card-bg);
    border: 1px solid var(--card-borde);
    border-radius: var(--radio);
    padding: 28px 26px;
    text-align: center;
}
.pp-festi-nombre {
    font-family: var(--ff-display);
    font-size: clamp(1.6rem, 5vw, 2.4rem);
    font-weight: 800; line-height: 1.1;
    color: var(--brand);
}
.pp-festi-meta { color: var(--texto-suave); font-size: 1rem; margin-top: 8px; }
.pp-festi-tandas { margin-top: 22px; }
.pp-festi-tandas-lbl {
    display: inline-block;
    text-transform: uppercase; letter-spacing: 0.14em;
    font-size: 0.72rem; font-weight: 700;
    color: var(--brand);
    background: var(--brand-soft);
    border: 1px solid var(--brand-mid);
    padding: 4px 12px; border-radius: 999px;
    margin-bottom: 14px;
}
.pp-festi-lista {
    list-style: none;
    display: flex; flex-direction: column; gap: 8px;
    max-width: 360px; margin: 0 auto;
}
.pp-festi-lista li {
    background: var(--fondo);
    border: 1px solid var(--card-borde);
    border-radius: calc(var(--radio) * 0.6);
    padding: 10px 16px;
    font-weight: 600;
}
.pp-festi-precio { margin-top: 18px; font-weight: 700; color: var(--brand); }

/* ---- CTA "pedí la tuya" / "pedí tu entrada" / "hacé tu pedido" (chat IG) ---- */
.pp-cta {
    display: inline-flex; align-items: center; justify-content: center; gap: 10px;
    margin-top: 22px;
    background: var(--brand); color: var(--brand-on);
    font-size: 1.05rem; font-weight: 800; letter-spacing: .01em;
    text-decoration: none; cursor: pointer;
    padding: 16px 34px;
    border-radius: 999px;
    /* Relieve para que se lea como botón físico y no como link: sombra proyectada
       + resalte superior interno + borde inferior sutil (funciona en todos los temas). */
    box-shadow: 0 9px 22px -6px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.22), inset 0 -2px 0 rgba(0,0,0,.18);
    transition: transform .12s ease, box-shadow .2s ease, filter .2s ease;
}
.pp-cta:hover { transform: translateY(-2px); filter: brightness(1.06);
    box-shadow: 0 15px 28px -8px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.22), inset 0 -2px 0 rgba(0,0,0,.18); }
.pp-cta:active { transform: translateY(1px);
    box-shadow: 0 4px 12px -6px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.12), inset 0 -1px 0 rgba(0,0,0,.16); }
.pp-cta svg { flex-shrink: 0; }
.pp-cta-wrap { text-align: center; margin-top: 22px; }
.pp-cta-wrap .pp-cta { margin-top: 0; }
/* Foto del evento/rifa: arriba de la card, ENTERA sin recortar. Los flyers de
   rifa suelen ser verticales con título/pie: con object-fit:cover + tope 340px
   se cortaban justo esas zonas. contain los muestra completos (con fondo si
   sobra), y el lightbox permite ampliarlos. */
.pp-festi-img {
    width: 100%; max-height: 460px; object-fit: contain; display: block;
    background: var(--fondo);
    border-radius: calc(var(--radio) * 0.7);
    margin-bottom: 18px;
}

/* ---- A la venta (productos del módulo Ventas) ---- */
.pp-ventas {
    display: grid;
    /* auto-fill (no auto-fit) para que la última card de una fila incompleta NO
       se estire a todo el ancho (con foto quedaba una imagen enorme). min(100%)
       evita desborde en pantallas angostas. */
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));
    gap: 12px;
    max-width: 760px;
    margin: 0 auto;
}
.pp-ventas:has(> :only-child) { max-width: 380px; }
.pp-venta {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    background: var(--card-bg);
    border: 1px solid var(--card-borde);
    border-radius: var(--radio);
    padding: 14px 18px;
}
/* Producto con foto: card vertical (imagen arriba, datos abajo).
   160px y no 200: con las tarjetas grandes, cuatro productos entraban de a tres
   y el cuarto quedaba solo en una fila enorme. Más chicas entran más por fila y
   la sección deja de ocupar una pantalla entera (pedido de Lucas, 28/8). */
.pp-ventas.es-fotos { grid-template-columns: repeat(auto-fill, minmax(min(100%, 160px), 1fr)); }
.pp-venta.es-foto { flex-direction: column; align-items: stretch; padding: 0; overflow: hidden; }
.pp-venta-img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; }
.pp-venta.es-foto .pp-venta-datos {
    display: flex; align-items: center; justify-content: space-between; gap: 8px;
    padding: 9px 12px;
}
.pp-venta-datos { display: contents; }
.pp-venta-nombre { font-weight: 600; font-size: 0.92rem; line-height: 1.25; }
.pp-venta-precio {
    font-family: var(--ff-body); font-weight: 700; font-size: 0.92rem;
    color: var(--brand); white-space: nowrap;
}

/* ---- Escritorio: las secciones de a dos por fila ----
   Hasta el 28/8 cada sección ocupaba el ancho entero y una debajo de la otra,
   así que en un monitor había que scrollear tres pantallas para ver una agenda
   y cuatro productos. Ahora se acomodan de a dos.

   El ORDEN lo decide el CSS y no el HTML, a propósito: en el teléfono manda el
   orden del documento —ventas primero, que es lo más perecedero (19/8)— y en
   escritorio la agenda va arriba a la izquierda con lo que se vende a su
   derecha (28/8). Cambiar el HTML para lograrlo habría roto el teléfono.

   La galería queda FUERA de .pp-cols: va abajo, centrada y a todo el ancho.

   No hace falta tocar la grilla interna de la agenda: sus columnas son
   auto-fit de 280px y en media pantalla se acomodan solas a una. */
@media (min-width: 980px) {
    .pp-cols {
        display: grid;
        /* minmax(0, 1fr) y no 1fr: una pista 1fr no baja del tamaño de su
           contenido, así que la grilla de productos (varias tarjetas de 160px)
           ensanchaba la columna y se salía de la pantalla. */
        grid-template-columns: repeat(2, minmax(0, 1fr));
        align-items: start;
        column-gap: 16px;
        max-width: 1180px;
        margin: 0 auto;
    }
    /* Cada sección ya no se centra sola: la caja la da la columna. El min-width
       es la otra mitad del arreglo de arriba: sin esto, la sección tampoco baja
       del ancho de su contenido y el desborde vuelve. */
    .pp-cols > .pp-seccion { max-width: none; margin: 0; padding-bottom: 56px; min-width: 0; }
    /* Una sola sección (una organización que solo tiene agenda, por ejemplo):
       dos columnas la dejarían apretada a la izquierda con la mitad derecha
       vacía. Con una, vuelve a ser una sola columna centrada, como antes.
       Mismo patrón que .pp-ventas y .pp-agenda ya usan. */
    .pp-cols:has(> :only-child) {
        grid-template-columns: minmax(0, 1fr);
        max-width: 960px;
    }
    .pp-cols > .pp-sec-agenda { order: 1; }
    .pp-cols > .pp-sec-ventas { order: 2; }
    .pp-cols > .pp-sec-festi  { order: 3; }
    .pp-cols > .pp-sec-rifa   { order: 4; }
}

/* ---- Galería (minimalista: centrada, hover sutil) ----
   Flex + justify-center: con 1, 2 o 3 fotos quedan centradas con su tamaño
   fijo en vez de estirarse a todo el ancho; con más, llenan y bajan de fila. */
.pp-galeria {
    display: flex; flex-wrap: wrap; justify-content: center;
    gap: 10px;
    max-width: 960px;
    margin: 0 auto;
}
.pp-galeria-item {
    flex: 0 0 auto;
    width: clamp(150px, 30vw, 210px);
    aspect-ratio: 1 / 1;
    padding: 0; margin: 0; cursor: pointer;
    overflow: hidden;
    border-radius: var(--radio);
    background: var(--card-bg);
    border: 1px solid var(--card-borde);
}
.pp-galeria-item img {
    width: 100%; height: 100%;
    object-fit: cover; display: block;
    transition: transform 0.4s ease;
}
.pp-galeria-item:hover img { transform: scale(1.05); }
@media (prefers-reduced-motion: reduce) {
    .pp-galeria-item img { transition: none; }
}

/* ---- Lightbox (imagen grande, misma pestaña) ---- */
.pp-zoom { cursor: zoom-in; }
.pp-noscroll { overflow: hidden; }
.pp-lightbox {
    position: fixed; inset: 0; z-index: 100;
    display: flex; align-items: center; justify-content: center;
    padding: 24px;
    background: rgba(0, 0, 0, 0.88);
    cursor: zoom-out;
}
.pp-lightbox img {
    max-width: 100%; max-height: 100%;
    object-fit: contain;
    border-radius: 8px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);
    cursor: default;
}
.pp-lightbox-cerrar {
    position: absolute; top: 14px; right: 20px;
    width: 44px; height: 44px;
    background: transparent; border: 0;
    color: #fff; font-size: 2.4rem; line-height: 1;
    cursor: pointer; opacity: 0.85;
}
.pp-lightbox-cerrar:hover { opacity: 1; }

/* ---- Pie ---- */
.pp-pie {
    border-top: 1px solid var(--card-borde);
    padding: 22px 0;
    font-size: 0.85rem;
    color: var(--texto-suave);
}
.pp-pie-inner {
    display: flex; flex-wrap: wrap; align-items: center;
    justify-content: space-between;
    gap: 8px;
}
.pp-pie a { color: var(--brand); text-decoration: none; font-weight: 600; }
/* Crédito "Creado por MiSplash" con la mascota animada (igual al SaaS) */
.pp-pie-splash {
    display: inline-flex; align-items: center; gap: 6px;
    color: var(--texto-suave) !important; font-weight: 700;
    opacity: 0.75; transition: opacity 0.2s ease;
}
.pp-pie-splash:hover { opacity: 1; }
.pp-pie-splash .pp-pie-splash-pre { font-weight: 400; }
.pp-pie-splash img {
    width: 24px; height: auto; display: block;
    animation: pp-splash-float 3s ease-in-out infinite;
}
@keyframes pp-splash-float {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(-5px); }
}

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    .pp-red, .pp-fecha, .pp-slide, .pp-punto { transition: none; }
    .pp-pie-splash img { animation: none; }
}

@media (max-width: 560px) {
    .pp-hero-inner { padding-top: 56px; padding-bottom: 48px; }
    .pp-seccion { padding: 48px 24px 64px; }

    /* "A la venta" en DOS columnas en el teléfono (19/8).
       El auto-fill de arriba pide 200 px por columna, y en un teléfono de 390
       el contenedor queda en ~342: no entran dos, cae a una sola, y con la foto
       en 4/3 cada producto medía 342×256. Cuatro pastas eran cuatro pantallas
       de scroll para leer cuatro precios — y desde que la sección va arriba,
       eso es lo primero que se comía quien entraba. En dos columnas los mismos
       cuatro entran de un vistazo. */
    .pp-ventas.es-fotos { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
    /* Cuadrada y no 4/3: en media pantalla la foto tiene que identificar el
       producto, no lucirse, y el cuadrado deja más lugar al nombre. */
    .pp-venta-img { aspect-ratio: 1 / 1; }
    /* Nombre arriba y precio abajo: en 165 px de ancho, uno contra el otro se
       apretaban hasta partir "Sorrentinos 15u" en dos renglones pegados al
       precio. */
    .pp-venta.es-foto .pp-venta-datos {
        flex-direction: column; align-items: flex-start; gap: 2px; padding: 10px 12px;
    }
    .pp-venta-nombre { font-size: 14px; line-height: 1.3; }

    /* Un solo producto no se parte al medio: ocupa el ancho y conserva su
       proporción, que es como se veía antes de este breakpoint. */
    .pp-ventas.es-fotos:has(> :only-child) { grid-template-columns: 1fr; }
    .pp-ventas:has(> :only-child) .pp-venta-img { aspect-ratio: 4 / 3; }
}

/* Modo vista previa (editor de apariencia): solo visual — los links no
   navegan, pero el scroll sigue funcionando. */
body.pp-preview a, body.pp-preview button { pointer-events: none; cursor: default; }

/* ---- Multi-rifa: varias tarjetas en "Nuestras rifas" ---- */
.pp-rifa-card + .pp-rifa-card { margin-top: 22px; }

/* ---- Detalle ampliado (rifa / evento / producto) ----
   Modal centrado que abre la tarjeta entera (elemento .pp-ampliable con
   data-detalle). Debajo del lightbox (z 90 < 100): tocar la imagen del
   detalle la amplía a pantalla completa encima. Cero colores hardcodeados:
   todo sale de los tokens del tema, como el resto de la pública. */
.pp-ampliable { cursor: pointer; }
.pp-ampliable:focus-visible { outline: 2px solid var(--brand); outline-offset: 3px; }

/* En el preview del editor los <a>/<button> quedan sin pointer-events, pero
   el detalle tiene que poder abrirse (las tarjetas son divs, no les afecta)
   y CERRARSE: la X queda exceptuada del bloqueo. El velo también cierra. */
body.pp-preview .pp-detalle-cerrar { pointer-events: auto; }

.pp-detalle {
    position: fixed; inset: 0; z-index: 90;
    display: flex; align-items: center; justify-content: center;
    padding: 16px;
}
.pp-detalle.oculto { display: none; }
.pp-detalle-velo {
    position: absolute; inset: 0;
    background: rgba(0, 0, 0, 0.62);
}
.pp-detalle-caja {
    position: relative; z-index: 1;
    width: 100%; max-width: 480px;
    max-height: min(88vh, 720px);
    overflow-y: auto;
    overscroll-behavior: contain;
    /* card-bg en los temas oscuros trae alpha (es un velo sobre el fondo de
       la página): solo, dejaría ver el contenido de atrás a través del modal.
       Se apila sobre --fondo opaco para que la caja sea sólida. */
    background-color: var(--fondo);
    background-image: linear-gradient(var(--card-bg), var(--card-bg));
    border: 1px solid var(--card-borde);
    border-radius: var(--radio);
    box-shadow: 0 24px 64px rgba(0, 0, 0, 0.45);
    text-align: center;
}
.pp-detalle-cerrar {
    position: sticky; top: 10px;
    float: right; margin: 10px 12px 0 0;
    width: 38px; height: 38px;
    border: 1px solid var(--card-borde);
    border-radius: 12px;
    background: var(--fondo); color: var(--texto);
    font-size: 1.5rem; line-height: 1;
    cursor: pointer; z-index: 2;
}
.pp-detalle-img {
    display: block;
    width: 100%;
    max-height: 300px;
    object-fit: contain;
    background: var(--brand-soft);
    cursor: zoom-in;
}
.pp-detalle-cuerpo {
    padding: 20px 24px 26px;
    display: flex; flex-direction: column; gap: 12px;
    align-items: center;
}
.pp-detalle-titulo {
    font-family: var(--ff-display);
    font-size: 1.5rem; font-weight: 800;
    color: var(--texto);
    margin: 0;
    overflow-wrap: anywhere;
}
.pp-detalle-meta {
    margin: 0;
    font-size: 0.95rem;
    color: var(--texto-suave);
}
.pp-detalle-lista { width: 100%; }
.pp-detalle-lista .pp-festi-lista li { white-space: pre-line; }
.pp-detalle-precio {
    margin: 0;
    font-size: 1.15rem; font-weight: 800;
    color: var(--brand);
}
.pp-detalle .pp-cta { margin-top: 8px; }

/* ── Mostrador: pedir desde la página pública (migración #26) ─────────────── */
/* Nace oculto en el HTML y lo destapa publica.js: sin JS no hay quien arme el
   carrito, y la sección queda como vidriera con el CTA de siempre. */
.pp-pedido { margin-top: 18px; }
.pp-pedido.oculto { display: none; }
.pp-pedido-abrir { width: 100%; }
.pp-pedido-caja {
  display: flex; flex-direction: column; gap: 14px;
  margin-top: 12px; padding: 16px;
  border: 1px solid var(--card-borde); border-radius: 14px; background: var(--card-bg);
}
/* `.oculto` es display:none de una sola clase y este display:flex también:
   sin la regla de dos clases gana el que cargue después. */
.pp-pedido-caja.oculto { display: none; }
.pp-pedido-lbl,
.pp-pedido-ops-lbl {
  font-size: 11px; letter-spacing: .05em; text-transform: uppercase; color: var(--texto-suave);
}
.pp-pedido-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 8px;
}
.pp-pedido-tile {
  display: flex; flex-direction: column; align-items: center; gap: 5px;
  padding: 10px 6px; border-radius: 12px; cursor: pointer; text-align: center;
  border: 1px solid var(--card-borde); background: var(--fondo); color: inherit;
  font: inherit; transition: border-color .15s ease, transform .12s ease;
}
.pp-pedido-tile:hover, .pp-pedido-tile:focus-visible { border-color: var(--brand); transform: translateY(-2px); }
.pp-pedido-tile-img { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; }
.pp-pedido-tile-nombre { font-size: 12px; line-height: 1.25; }
.pp-pedido-tile-precio { font-size: 12px; font-weight: 700; color: var(--brand); }

/* Opciones del producto tocado: se eligen acá y recién ahí entra al carrito. */
.pp-pedido-ops {
  display: flex; flex-direction: column; gap: 8px;
  padding: 10px 12px; border-radius: 12px;
  border: 1px solid var(--brand); background: var(--fondo);
}
.pp-pedido-ops.oculto { display: none; }
.pp-pedido-ops-cab { display: flex; align-items: center; gap: 10px; font-weight: 600; }
.pp-pedido-ops-cab > span { flex: 1; min-width: 0; }
.pp-pedido-ops-cerrar {
  border: 0; background: none; cursor: pointer; font-size: 20px; line-height: 1;
  color: var(--texto-suave); padding: 0 4px;
}
.pp-pedido-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.pp-pedido-chip {
  padding: 7px 14px; border-radius: 999px; cursor: pointer; font: inherit; font-size: 13px;
  border: 1px solid var(--card-borde); background: var(--card-bg); color: inherit;
}
.pp-pedido-chip:hover, .pp-pedido-chip:focus-visible { border-color: var(--brand); }

/* Carrito */
.pp-pedido-carrito { display: flex; flex-direction: column; gap: 6px; }
.pp-pedido-carrito:empty { display: none; }
.pp-pedido-linea {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px; border-radius: 10px; background: var(--fondo);
}
.pp-pedido-linea-nombre { flex: 1; min-width: 0; font-size: 13px; }
.pp-pedido-linea-cant { font-size: 13px; font-variant-numeric: tabular-nums; min-width: 28px; text-align: center; }
.pp-pedido-linea-precio { font-size: 13px; font-weight: 700; color: var(--brand); white-space: nowrap; }
.pp-pedido-paso {
  width: 30px; height: 30px; flex-shrink: 0; cursor: pointer; font: inherit; font-size: 16px;
  border: 1px solid var(--card-borde); border-radius: 8px; background: var(--card-bg); color: inherit;
}
.pp-pedido-paso:hover { border-color: var(--brand); }
.pp-pedido-total { text-align: right; font-weight: 700; padding: 4px 10px; }
.pp-pedido-vacio { font-size: 13px; color: var(--texto-suave); margin: 0; }
.pp-pedido-vacio.oculto { display: none; }

/* Datos de quien pide */
.pp-pedido-campos { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
@media (max-width: 520px) { .pp-pedido-campos { grid-template-columns: 1fr; } }
.pp-pedido-campo { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--texto-suave); }
.pp-pedido-campo.oculto { display: none; }
.pp-pedido-campo input {
  padding: 10px 12px; border-radius: 10px; font: inherit; font-size: 14px;
  border: 1px solid var(--card-borde); background: var(--fondo); color: inherit;
}
.pp-pedido-campo input:focus { outline: 2px solid var(--brand); outline-offset: 1px; }
.pp-pedido-entrega { display: flex; flex-direction: column; gap: 8px; }
.pp-pedido-radio { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; cursor: pointer; }
.pp-pedido-error { font-size: 13px; color: var(--brand); margin: 0; }
.pp-pedido-error.oculto { display: none; }
.pp-pedido-enviar { width: 100%; text-align: center; }
.pp-pedido-nota { font-size: 12px; color: var(--texto-suave); margin: 0; text-align: center; }

/* El flyer encabeza la sección: la pieza que la gente ya reconoce de Instagram. */
.pp-ventas-flyer {
  display: block; width: 100%; max-width: 520px; margin: 0 auto 18px;
  border-radius: 14px; cursor: zoom-in;
}

/* ── Promos por cantidad ("3 por $250") ────────────────────────────────── */
.pp-promo { display: inline-block; font-size: .78em; font-weight: 700; padding: 2px 8px; border-radius: 999px;
  background: color-mix(in srgb, var(--pp-acento, #c9a227) 18%, transparent); color: inherit; white-space: nowrap; }
.pp-pedido-tile-promo { display: block; font-size: 10px; font-weight: 700; opacity: .85; }
