/* ==========================================================================
   Acción Republicana — DISEÑO DE PORTADA
   Hoja de las páginas servidas por views/layouts/portada.php, que trae su
   propia cabecera y su propio pie al margen de layouts/public.php. Hoy la usan
   la portada (/) y la agenda (/eventos); las páginas que aún no migran siguen
   con app.css.
   Referencias: juventudrepublicana.cl (editorial, afiche) + puntoticket.com
   (cartelera: tarjetas de evento, filtros por categoría, carrusel destacado).
   Todas las clases van con prefijo .p- para no chocar con app.css.
   ========================================================================== */

/* --- Tipografía autoalojada (ya presente en /assets/fonts) ---------------- */
@font-face { font-family:'Barlow Condensed'; src:url('/assets/fonts/barlow-condensed-600-latin.woff2') format('woff2'); font-weight:600; font-style:normal; font-display:swap; }
@font-face { font-family:'Barlow Condensed'; src:url('/assets/fonts/barlow-condensed-700-latin.woff2') format('woff2'); font-weight:700; font-style:normal; font-display:swap; }
@font-face { font-family:'Manrope'; src:url('/assets/fonts/manrope-400-latin.woff2') format('woff2'); font-weight:400; font-style:normal; font-display:swap; }
@font-face { font-family:'Manrope'; src:url('/assets/fonts/manrope-700-latin.woff2') format('woff2'); font-weight:700; font-style:normal; font-display:swap; }

:root {
    /* Paleta institucional (brandbook AR) + neutros de apoyo */
    --p-void:      #08111F;
    --p-navy:      #0F2547;
    --p-navy-2:    #12305E;
    --p-azul:      #204C97;
    --p-azul-hot:  #2E5FB7;
    --p-azul-soft: #EDF2FB;
    --p-rojo:      #D14B45;
    --p-rojo-hot:  #C8102E;
    --p-oro:       #C9A961;
    --p-oro-soft:  #F6EFDF;

    --p-white:     #FFFFFF;
    --p-paper:     #F5F7FB;
    --p-paper-2:   #EDF1F7;
    --p-line:      #E3E9F3;
    --p-line-2:    #D3DCEA;
    --p-ink:       #0F1B2E;
    --p-ink-2:     #56637A;
    --p-ink-3:     #8C99AD;

    --p-display: 'Barlow Condensed', 'Arial Narrow', system-ui, sans-serif;
    --p-sans:    'Manrope', 'Segoe UI', system-ui, -apple-system, sans-serif;

    --p-r-sm: 8px;
    --p-r:    14px;
    --p-r-lg: 20px;

    --p-sh-sm: 0 2px 10px rgba(15,37,71,.06);
    --p-sh:    0 12px 34px rgba(15,37,71,.10);
    --p-sh-lg: 0 28px 70px rgba(15,37,71,.18);

    --p-ease: cubic-bezier(.22,.61,.36,1);
    --p-t:    .32s var(--p-ease);
    --p-head: 76px;
}

/* --- Base ---------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: calc(var(--p-head) + 20px); }
body.p-body {
    margin: 0; background: var(--p-white); color: var(--p-ink);
    font-family: var(--p-sans); font-size: 1rem; line-height: 1.65;
    -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
    overflow-x: hidden;
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; }
h1, h2, h3, h4 { margin: 0; font-family: var(--p-display); font-weight: 700; line-height: .95; letter-spacing: .005em; text-transform: uppercase; }
p { margin: 0; }
ul { margin: 0; padding: 0; list-style: none; }
:focus-visible { outline: 3px solid var(--p-oro); outline-offset: 3px; border-radius: 4px; }

.p-wrap { width: min(1240px, 100% - 2.6rem); margin-inline: auto; }
.p-wrap--narrow { width: min(880px, 100% - 2.6rem); }

/* Aparición al hacer scroll */
.p-rev { opacity: 0; transform: translateY(22px); transition: opacity .7s var(--p-ease), transform .7s var(--p-ease); }
.p-rev.is-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .p-rev { opacity:1; transform:none; transition:none; } html { scroll-behavior:auto; } }

/* --- Piezas tipográficas reutilizables ----------------------------------- */
.p-kick {
    display: inline-flex; align-items: center; gap: .6rem;
    font-family: var(--p-sans); font-weight: 700; font-size: .68rem;
    letter-spacing: .24em; text-transform: uppercase; color: var(--p-azul);
}
.p-kick::before { content:''; width: 26px; height: 2px; background: var(--p-rojo); flex: none; }
.p-kick--light { color: rgba(255,255,255,.62); }
.p-kick--gold::before { background: var(--p-oro); }

.p-h2 { font-size: clamp(2rem, 1.3rem + 2.6vw, 3.1rem); color: var(--p-navy); margin-top: .7rem; }
.p-h2 em { font-style: normal; color: var(--p-rojo); }
.p-lead { color: var(--p-ink-2); font-size: 1.02rem; max-width: 62ch; margin-top: .9rem; line-height: 1.75; }

/* Antetítulo de las piezas de marca (tomado de /test3). */
.p-eyebrow { display: inline-block; font-size: .74rem; font-weight: 700; letter-spacing: .04em; color: var(--p-azul); }
.p-eyebrow--light { color: rgba(255,255,255,.66); }
.p-eyebrow--gold  { color: var(--p-oro); }

.p-head-row { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--p-r-lg); flex-wrap: wrap; margin-bottom: 2.2rem; }
.p-head-row > div { min-width: 0; }

.p-sec { padding-block: clamp(3.4rem, 2rem + 5vw, 6rem); }
.p-sec--tight { padding-block: clamp(2.6rem, 1.6rem + 3vw, 4rem); }
.p-sec--paper { background: var(--p-paper); }

/* Enlace-flecha (accesos, pilares) */
.p-arrow { display: inline-flex; align-items: center; gap: .4rem; margin-top: .5rem; font-size: .75rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; color: var(--p-azul); }
.p-arrow svg { width: 14px; height: 14px; transition: var(--p-t); }
.p-access__it:hover .p-arrow svg, .p-arrow:hover svg { translate: 4px 0; }

/* --- Botones ------------------------------------------------------------- */
.p-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: .55rem;
    padding: .82rem 1.5rem; border: 1px solid transparent; border-radius: var(--p-r-sm);
    font-family: var(--p-sans); font-weight: 700; font-size: .88rem; letter-spacing: .015em;
    cursor: pointer; white-space: nowrap; transition: background var(--p-t), color var(--p-t), border-color var(--p-t), transform var(--p-t), box-shadow var(--p-t);
}
.p-btn svg { width: 17px; height: 17px; flex: none; }
.p-btn:hover { transform: translateY(-2px); }
.p-btn--primary { background: var(--p-azul); color: #fff; box-shadow: 0 10px 24px rgba(32,76,151,.28); }
.p-btn--primary:hover { background: var(--p-azul-hot); box-shadow: 0 14px 30px rgba(32,76,151,.36); }
.p-btn--red { background: var(--p-rojo); color: #fff; box-shadow: 0 10px 24px rgba(209,75,69,.3); }
.p-btn--red:hover { background: var(--p-rojo-hot); }
.p-btn--gold { background: var(--p-oro); color: #2B2110; box-shadow: 0 10px 24px rgba(201,169,97,.34); }
.p-btn--gold:hover { filter: brightness(1.06); }
.p-btn--dark { background: var(--p-navy); color: #fff; }
.p-btn--dark:hover { background: var(--p-navy-2); }
.p-btn--line { border-color: var(--p-line-2); color: var(--p-navy); background: #fff; }
.p-btn--line:hover { border-color: var(--p-azul); color: var(--p-azul); background: var(--p-azul-soft); }
.p-btn--ghost { border-color: rgba(255,255,255,.34); color: #fff; background: rgba(255,255,255,.05); backdrop-filter: blur(6px); }
.p-btn--ghost:hover { border-color: #fff; background: rgba(255,255,255,.14); }
.p-btn--white { background: #fff; color: var(--p-navy); }
.p-btn--white:hover { background: var(--p-azul-soft); }
.p-btn--lg { padding: 1rem 1.85rem; font-size: .95rem; }
.p-btn--sm { padding: .58rem 1rem; font-size: .8rem; }
.p-btn--block { width: 100%; }

/* ==========================================================================
   1. Barra superior + Encabezado
   ========================================================================== */
.p-top {
    background: var(--p-navy); color: rgba(255,255,255,.72);
    font-size: .76rem; letter-spacing: .02em;
}
.p-top__in { display: flex; align-items: center; justify-content: space-between; gap: 1rem; height: 38px; }
.p-top__msg { display: flex; align-items: center; gap: .55rem; min-width: 0; }
.p-top__msg svg { width: 15px; height: 15px; color: var(--p-oro); flex: none; }
.p-top__msg span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.p-top__msg a { color: #fff; font-weight: 700; border-bottom: 1px solid rgba(201,169,97,.6); }
.p-top__msg a:hover { color: var(--p-oro); }
.p-top__right { display: flex; align-items: center; gap: 1.1rem; flex: none; }
.p-top__soc { display: flex; gap: .55rem; }
.p-top__soc a { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; color: rgba(255,255,255,.66); transition: var(--p-t); }
.p-top__soc a:hover { background: rgba(255,255,255,.12); color: #fff; }
.p-top__soc svg { width: 14px; height: 14px; }
.p-top__link { color: rgba(255,255,255,.8); font-weight: 700; }
.p-top__link:hover { color: var(--p-oro); }
@media (max-width: 900px) { .p-top__msg { display: none; } .p-top__in { justify-content: flex-end; } }

.p-head {
    position: sticky; top: 0; z-index: 60; background: #fff;
    border-bottom: 1px solid var(--p-line);
    transition: box-shadow var(--p-t), height var(--p-t);
}
.p-head.is-stuck { box-shadow: 0 10px 30px rgba(15,37,71,.10); }
.p-head__in { position: relative; }
.p-head__in { display: flex; align-items: center; gap: 1.4rem; height: var(--p-head); transition: height var(--p-t); }
.p-head.is-stuck .p-head__in { height: 64px; }

.p-brand { display: block; flex: none; }
.p-brand__logo {
    display: block; width: 210px; aspect-ratio: 842 / 183; background-color: var(--p-navy);
    -webkit-mask: url('/assets/img/logo-brand.png') left center / contain no-repeat;
            mask: url('/assets/img/logo-brand.png') left center / contain no-repeat;
    transition: width var(--p-t);
}
.p-head.is-stuck .p-brand__logo { width: 170px; }

.p-nav { display: flex; align-items: center; gap: .2rem; margin-left: auto; }
.p-nav a {
    position: relative; padding: .55rem .75rem; border-radius: var(--p-r-sm);
    font-weight: 700; font-size: .88rem; color: var(--p-navy); transition: var(--p-t);
}
.p-nav a::after {
    content: ''; position: absolute; left: .75rem; right: .75rem; bottom: .18rem; height: 2px;
    background: var(--p-rojo); transform: scaleX(0); transform-origin: left; transition: transform var(--p-t);
}
.p-nav a:hover { color: var(--p-azul); }
.p-nav a:hover::after, .p-nav a.is-on::after { transform: scaleX(1); }
.p-nav a.is-on { color: var(--p-azul); }

.p-head__cta { display: flex; align-items: center; gap: .5rem; flex: none; }

.p-burger { display: none; flex: none; width: 44px; height: 44px; border: 1px solid var(--p-line-2); border-radius: var(--p-r-sm); background: #fff; cursor: pointer; position: relative; margin-left: auto; }
.p-burger span { position: absolute; left: 12px; right: 12px; height: 2px; background: var(--p-navy); transition: var(--p-t); }
.p-burger span:nth-child(1) { top: 15px; } .p-burger span:nth-child(2) { top: 21px; } .p-burger span:nth-child(3) { top: 27px; }
body.p-open .p-burger span:nth-child(1) { top: 21px; rotate: 45deg; }
body.p-open .p-burger span:nth-child(2) { opacity: 0; }
body.p-open .p-burger span:nth-child(3) { top: 21px; rotate: -45deg; }

@media (max-width: 1000px) {
    .p-burger { display: block; }
    .p-head__panel {
        position: absolute; top: 100%; left: 0; right: 0; background: #fff;
        border-bottom: 1px solid var(--p-line); box-shadow: var(--p-sh);
        display: grid; gap: .4rem; padding: 1.2rem 1.3rem 1.6rem;
        transform: translateY(-14px); opacity: 0; pointer-events: none; transition: var(--p-t);
    }
    body.p-open .p-head__panel { transform: none; opacity: 1; pointer-events: auto; }
    .p-nav { flex-direction: column; align-items: stretch; margin: 0; }
    .p-nav a { padding: .8rem .4rem; border-bottom: 1px solid var(--p-line); border-radius: 0; font-size: 1rem; }
    .p-nav a::after { display: none; }
    .p-head__cta { margin-top: .8rem; }
    body.p-open { overflow: hidden; }
    .p-head__cta .p-btn { flex: 1; }
}
@media (min-width: 1001px) { .p-head__panel { display: contents; } }

/* ==========================================================================
   2. Portada — carrusel de cartelera (puntoticket) con titular editorial (JR)
   ========================================================================== */
.p-hero { position: relative; background: var(--p-void); overflow: hidden; isolation: isolate; }
/* El suelo sube de 500 a 600 px. Con el texto centrado, en una ventana baja
   —1280×700, 1366×768— el hueco libre entre el encabezado pegajoso y la barra
   de controles se quedaba en 419 px para un contenido de 409: entraba con 5 px
   por lado y el bloque acababa pisando los puntos y las flechas. Con 600 px de
   suelo el hueco pasa a ~473 px y el texto respira por los dos lados. */
.p-hero__stage { position: relative; min-height: clamp(600px, 78vh, 760px); }
.p-hero__slide { position: absolute; inset: 0; opacity: 0; visibility: hidden; transition: opacity .9s var(--p-ease), visibility .9s; }
.p-hero__slide.is-on { opacity: 1; visibility: visible; }
.p-hero__ph {
    position: absolute; inset: 0; background-size: cover; background-position: center;
    transform: scale(1.05); transition: transform 11s linear;
}
.p-hero__slide.is-on .p-hero__ph { transform: scale(1.16); }
.p-hero__scrim {
    position: absolute; inset: 0;
    background:
        linear-gradient(97deg, rgba(8,17,31,.96) 0%, rgba(8,17,31,.86) 34%, rgba(8,17,31,.42) 66%, rgba(8,17,31,.62) 100%),
        linear-gradient(0deg, rgba(8,17,31,.9) 0%, rgba(8,17,31,0) 46%);
}
/* Trama de estrellas muy sutil, motivo republicano */
.p-hero__grain { position: absolute; inset: 0; opacity: .5; background:
    radial-gradient(1px 1px at 20% 30%, rgba(201,169,97,.5), transparent 60%),
    radial-gradient(1px 1px at 72% 18%, rgba(255,255,255,.32), transparent 60%),
    radial-gradient(1.5px 1.5px at 46% 72%, rgba(201,169,97,.32), transparent 60%); }

/* El texto va centrado, no apoyado abajo: las tres diapositivas tienen textos
   de largos muy distintos y, ancladas al pie, cada una arrancaba a una altura
   —a 1440×900 la segunda empezaba 125 px más abajo que las otras dos— y el
   carrusel daba un salto en cada cambio. Centradas en altura, las tres
   comparten eje; la alineación a la izquierda no se toca.
   El aire de abajo sigue siendo mayor que el de arriba: es el que reserva sitio
   a los puntos y las flechas del carrusel. */
/* Con el texto centrado, el aire de abajo tiene que ser bastante mayor que el
   de arriba: la barra de controles ocupa los últimos ~127 px de la banda, y al
   centrar en la caja de relleno el bloque baja la mitad de lo que sobra. Estos
   valores están calculados para que en las ventanas bajas —1280×700 y
   1366×768, portátiles corrientes— el texto no pise ni el encabezado ni los
   controles. */
.p-hero__body { position: absolute; inset: 0; z-index: 2; display: flex; align-items: center; padding-block: clamp(3.5rem, 2.5rem + 5vw, 6rem) clamp(12rem, 8rem + 7vw, 16rem); }
.p-hero__slide .p-hero__box { opacity: 0; transform: translateY(26px); transition: opacity .8s .25s var(--p-ease), transform .8s .25s var(--p-ease); }
.p-hero__slide.is-on .p-hero__box { opacity: 1; transform: none; }
.p-hero__box { max-width: 780px; color: #fff; }

.p-hero__tag {
    display: inline-flex; align-items: center; gap: .5rem; padding: .38rem .85rem; border-radius: 999px;
    background: var(--p-rojo); color: #fff; font-size: .68rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase;
}
.p-hero__tag--gold { background: var(--p-oro); color: #2B2110; }
.p-hero__tag--blue { background: var(--p-azul); }
.p-hero__tag svg { width: 14px; height: 14px; }

.p-hero h1, .p-hero h2.p-hero__t {
    font-size: clamp(2.6rem, 1.4rem + 6.2vw, 5.7rem); color: #fff; line-height: .9;
    margin: 1.1rem 0 0; text-wrap: balance;
}
.p-hero h2.p-hero__t { font-size: clamp(1.95rem, 1.1rem + 4.4vw, 4.3rem); }
.p-hero h1 em, .p-hero__t em { font-style: normal; color: var(--p-oro); }
.p-hero h1 i, .p-hero__t i { font-style: italic; font-weight: 600; color: rgba(255,255,255,.9); }
.p-hero__sub { color: rgba(255,255,255,.72); font-size: 1.06rem; line-height: 1.7; max-width: 56ch; margin-top: 1.1rem; }

.p-hero__meta { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 1.3rem; }
.p-hero__meta li {
    display: inline-flex; align-items: center; gap: .5rem; padding: .45rem .85rem;
    border: 1px solid rgba(255,255,255,.2); border-radius: 999px; background: rgba(255,255,255,.06);
    color: rgba(255,255,255,.88); font-size: .82rem; font-weight: 700; white-space: nowrap;
}
.p-hero__meta svg { width: 15px; height: 15px; color: var(--p-oro); }

.p-hero__cta { display: flex; flex-wrap: wrap; gap: .7rem; margin-top: 1.8rem; }

/* Controles */
.p-hero__ctrl { position: absolute; z-index: 4; left: 0; right: 0; bottom: clamp(4.6rem, 3.6rem + 2vw, 5.6rem); }
.p-hero__ctrl-in { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.p-hero__dots { display: flex; gap: .5rem; }
.p-hero__dots button {
    width: 40px; height: 4px; border: 0; padding: 0; border-radius: 99px; cursor: pointer;
    background: rgba(255,255,255,.28); position: relative; overflow: hidden; transition: var(--p-t);
}
.p-hero__dots button:hover { background: rgba(255,255,255,.5); }
.p-hero__dots button.is-on { width: 66px; background: rgba(255,255,255,.3); }
.p-hero__dots button.is-on::after { content:''; position: absolute; inset: 0; background: var(--p-oro); transform-origin: left; animation: p-fill 7s linear forwards; }
@keyframes p-fill { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.p-hero__arrows { display: flex; gap: .5rem; }
.p-hero__arrows button {
    width: 44px; height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,.28);
    background: rgba(8,17,31,.4); color: #fff; display: grid; place-items: center; cursor: pointer;
    backdrop-filter: blur(8px); transition: var(--p-t);
}
.p-hero__arrows button:hover { background: var(--p-azul); border-color: var(--p-azul); transform: scale(1.06); }
.p-hero__arrows svg { width: 20px; height: 20px; }
@media (max-width: 700px) {
    .p-hero__arrows { display: none; }
    .p-hero__stage { min-height: 640px; }
    .p-hero__body { padding-block: 3.2rem clamp(5.8rem, 4.8rem + 4vw, 7rem); }
    .p-hero__sub { font-size: .95rem; margin-top: .9rem; }
    .p-hero__meta { gap: .4rem; margin-top: 1rem; }
    .p-hero__meta li { font-size: .76rem; padding: .35rem .7rem; }
    .p-hero__cta { margin-top: 1.4rem; gap: .55rem; }
    .p-hero__cta .p-btn { flex: 1 1 100%; }
}

/* ==========================================================================
   3. Accesos rápidos superpuestos
   ========================================================================== */
.p-access { position: relative; z-index: 5; margin-top: -58px; }
.p-access__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; background: var(--p-line); border-radius: var(--p-r); overflow: hidden; box-shadow: var(--p-sh-lg); }
.p-access__it {
    display: flex; align-items: flex-start; gap: .9rem; padding: 1.5rem 1.4rem; background: #fff;
    transition: background var(--p-t), transform var(--p-t);
}
.p-access__it:hover { background: var(--p-azul-soft); }
.p-access__ic { display: grid; place-items: center; width: 42px; height: 42px; flex: none; border-radius: 11px; background: var(--p-navy); color: #fff; transition: var(--p-t); }
.p-access__it:hover .p-access__ic { background: var(--p-rojo); rotate: -6deg; }
.p-access__ic svg { width: 20px; height: 20px; }
.p-access__it > div { min-width: 0; }
.p-access__it h3 { font-size: 1.16rem; color: var(--p-navy); }
.p-access__it p { font-size: .82rem; color: var(--p-ink-2); line-height: 1.5; margin-top: .25rem; }
@media (max-width: 980px) { .p-access__grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .p-access { margin-top: -30px; } .p-access__grid { grid-template-columns: 1fr; } .p-access__it { padding: 1.15rem 1.1rem; } }

/* ==========================================================================
   4. Cartelera — filtros + grilla de eventos
   ========================================================================== */
.p-filters { display: flex; flex-wrap: wrap; gap: .5rem; }
.p-chip {
    padding: .5rem 1.05rem; border: 1px solid var(--p-line-2); border-radius: 999px; background: #fff;
    font-size: .82rem; font-weight: 700; color: var(--p-ink-2); cursor: pointer; transition: var(--p-t); white-space: nowrap;
}
.p-chip:hover { border-color: var(--p-azul); color: var(--p-azul); }
.p-chip.is-on { background: var(--p-navy); border-color: var(--p-navy); color: #fff; }
.p-chip span { opacity: .55; font-weight: 700; margin-left: .3rem; }
.p-filters { align-items: center; }
/* Separador entre los filtros por estado de inscripción y los de categoría:
   son dos ejes distintos y conviene que se lean como dos grupos. */
.p-filters__sep { width: 1px; height: 22px; background: var(--p-line-2); margin-inline: .35rem; flex: none; }
/* Punto verde del filtro «Abierto», el mismo verde del sello .is-open. */
.p-chip--open::before {
    content: ''; display: inline-block; width: 7px; height: 7px; border-radius: 50%;
    background: #1F9254; margin-right: .45rem; vertical-align: .05em;
}
.p-chip--open.is-on::before { background: #58D48D; }
@media (max-width: 720px) { .p-filters__sep { display: none; } }

/* Carril horizontal (tomado de /test3) en lugar de la grilla de tres columnas.
   El desbordamiento horizontal implica recorte vertical, así que el carril
   lleva relleno arriba y abajo para que quepan el alzado y la sombra de la
   tarjeta al pasar el cursor. */
.p-railwrap { position: relative; margin-top: 2rem; }
.p-rail {
    display: flex; gap: 1.6rem; overflow-x: auto; scroll-snap-type: x mandatory;
    padding: .6rem .3rem 1rem; margin-inline: -.3rem;
    scrollbar-width: thin; scrollbar-color: var(--p-line-2) transparent;
    overscroll-behavior-x: contain;
}
.p-rail::-webkit-scrollbar { height: 6px; }
.p-rail::-webkit-scrollbar-thumb { background: var(--p-line-2); border-radius: 99px; }
.p-rail::-webkit-scrollbar-track { background: transparent; }
.p-rail > .p-ev { flex: 0 0 clamp(280px, 30%, 368px); scroll-snap-align: start; }
.p-ev.is-hidden { display: none; }

/* Flechas del carril, junto al enlace «Ver todo» de la cabecera. */
.p-head-row__side { display: flex; align-items: center; gap: .8rem; flex: none; }
.p-arrows { display: flex; gap: .4rem; }
.p-arrows button {
    width: 42px; height: 42px; border-radius: 50%; border: 1px solid var(--p-line-2); background: #fff;
    color: var(--p-navy); display: grid; place-items: center; cursor: pointer; transition: var(--p-t);
}
.p-arrows button:hover:not(:disabled) { background: var(--p-navy); border-color: var(--p-navy); color: #fff; }
.p-arrows button:disabled { opacity: .32; cursor: default; }
.p-arrows svg { width: 18px; height: 18px; }
@media (max-width: 700px) { .p-arrows { display: none; } }

.p-ev {
    display: flex; flex-direction: column; background: #fff; border: 1px solid var(--p-line);
    border-radius: var(--p-r); overflow: hidden; box-shadow: var(--p-sh-sm);
    transition: transform var(--p-t), box-shadow var(--p-t), border-color var(--p-t);
}
.p-ev:hover { transform: translateY(-6px); box-shadow: var(--p-sh); border-color: var(--p-line-2); }
.p-ev__media { position: relative; display: block; aspect-ratio: 16 / 10; overflow: hidden; background: var(--p-paper-2); }
.p-ev__media img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--p-ease); }
.p-ev:hover .p-ev__media img { transform: scale(1.07); }
.p-ev__media::after { content:''; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8,17,31,.32) 0%, rgba(8,17,31,0) 40%, rgba(8,17,31,.28) 100%); }


.p-ev__date {
    position: absolute; z-index: 2; right: .8rem; bottom: .8rem; width: 58px; padding: .45rem 0 .5rem;
    border-radius: 11px; background: #fff; text-align: center; box-shadow: var(--p-sh);
    border-top: 3px solid var(--p-rojo);
}
.p-ev__date b { display: block; font-family: var(--p-display); font-size: 1.65rem; line-height: 1; color: var(--p-navy); }
.p-ev__date i { display: block; font-style: normal; font-size: .64rem; font-weight: 700; letter-spacing: .16em; color: var(--p-ink-2); margin-top: .12rem; }

.p-ev__body { display: flex; flex-direction: column; flex: 1; padding: 1.2rem 1.25rem 1.35rem; }
.p-ev__over { display: flex; align-items: center; gap: .5rem; font-size: .69rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--p-azul); }
.p-ev__over em { font-style: normal; color: var(--p-ink-3); }
.p-ev__over em::before { content: '·'; margin-right: .5rem; color: var(--p-line-2); }
.p-ev__body h3 { margin: .55rem 0 0; font-size: 1.42rem; line-height: 1.02; color: var(--p-navy); }
.p-ev__body h3 a { transition: color var(--p-t); display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.p-ev:hover .p-ev__body h3 a { color: var(--p-azul); }

.p-ev__meta { margin-top: .85rem; display: grid; gap: .38rem; }
.p-ev__meta li { display: flex; align-items: flex-start; gap: .5rem; font-size: .83rem; color: var(--p-ink-2); line-height: 1.45; }
.p-ev__meta svg { width: 15px; height: 15px; color: var(--p-azul); flex: none; margin-top: .12rem; }

.p-ev__foot { margin-top: auto; padding-top: 1.1rem; display: flex; align-items: center; justify-content: space-between; gap: .8rem; border-top: 1px dashed var(--p-line-2); }
.p-ev__price { font-family: var(--p-display); font-size: 1.2rem; color: var(--p-navy); letter-spacing: .02em; }
.p-ev__price small { display: block; font-family: var(--p-sans); font-size: .64rem; font-weight: 700; letter-spacing: .14em; color: var(--p-ink-3); text-transform: uppercase; }
.p-ev__off { padding: .58rem 1rem; border-radius: var(--p-r-sm); background: var(--p-paper-2); color: var(--p-ink-3); font-size: .8rem; font-weight: 700; }

.p-empty { padding: 3rem 1rem; text-align: center; color: var(--p-ink-3); font-weight: 700; }

/* ==========================================================================
   5. Franja Academia Republicana (editorial oscura, oro)
   ========================================================================== */
.p-acad {
    position: relative; overflow: hidden; color: rgba(255,255,255,.86);
    background:
        radial-gradient(900px 420px at 84% 0%, rgba(32,76,151,.26), transparent 62%),
        radial-gradient(620px 340px at 6% 100%, rgba(201,169,97,.09), transparent 62%),
        #05080F;
    padding-block: clamp(3.4rem, 2rem + 5vw, 5.6rem);
}
.p-acad__ph { position: absolute; inset: 0; display: flex; align-items: flex-end; justify-content: flex-end; pointer-events: none; opacity: .18;
    -webkit-mask-image: linear-gradient(90deg, transparent 14%, #000 48%); mask-image: linear-gradient(90deg, transparent 14%, #000 48%); }
.p-acad__ph img { height: 92%; width: auto; filter: grayscale(1) brightness(.85) contrast(1.06); }
.p-acad__ph img + img { margin-left: -9%; }
.p-acad__ph img:last-child { margin-right: -3%; }
@media (max-width: 860px) { .p-acad__ph { display: none; } }
.p-acad__grid { position: relative; display: grid; grid-template-columns: 1.5fr auto; gap: 2rem; align-items: center; }
.p-acad h2 { color: #fff; font-size: clamp(2.1rem, 1.3rem + 3.2vw, 3.6rem); margin: .8rem 0 .55rem; }
.p-acad h2 b { color: var(--p-oro); font-weight: 700; }
.p-acad__lema { color: #fff; font-weight: 700; text-transform: uppercase; letter-spacing: .26em; font-size: .7rem; margin-bottom: .9rem; }
.p-acad__lema em { font-style: normal; color: var(--p-oro); }
.p-acad__txt { color: rgba(255,255,255,.58); max-width: 52ch; font-size: .95rem; line-height: 1.75; }
.p-acad__cta { display: flex; flex-direction: column; gap: .65rem; align-items: stretch; min-width: 230px; }
@media (max-width: 860px) { .p-acad__grid { grid-template-columns: 1fr; } .p-acad__cta { min-width: 0; } }

/* ==========================================================================
   6. Pilares
   ========================================================================== */
.p-pil { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.6rem; margin-top: 2.4rem; }
@media (max-width: 900px) { .p-pil { grid-template-columns: 1fr; } }
.p-pil__it { position: relative; padding: 2rem 1.7rem 1.9rem; background: #fff; border: 1px solid var(--p-line); border-radius: var(--p-r); overflow: hidden; transition: var(--p-t); }
.p-pil__it::before { content:''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--p-azul); transform: scaleY(0); transform-origin: top; transition: transform .45s var(--p-ease); }
.p-pil__it:hover { transform: translateY(-5px); box-shadow: var(--p-sh); }
.p-pil__it:hover::before { transform: scaleY(1); }
.p-pil__it:nth-child(2)::before { background: var(--p-rojo); }
.p-pil__it:nth-child(3)::before { background: var(--p-oro); }
.p-pil__n { font-family: var(--p-display); font-size: 3.4rem; line-height: 1; color: var(--p-paper-2); position: absolute; right: 1.2rem; top: .9rem; }
.p-pil__ic { display: grid; place-items: center; width: 46px; height: 46px; border-radius: 12px; background: var(--p-azul-soft); color: var(--p-azul); margin-bottom: 1.1rem; }
.p-pil__it:nth-child(2) .p-pil__ic { background: #FBEDEC; color: var(--p-rojo); }
.p-pil__it:nth-child(3) .p-pil__ic { background: var(--p-oro-soft); color: #9C7C33; }
.p-pil__ic svg { width: 22px; height: 22px; }
.p-pil__it h3 { font-size: 1.5rem; color: var(--p-navy); }
.p-pil__it p { margin-top: .7rem; font-size: .92rem; color: var(--p-ink-2); line-height: 1.7; }
.p-pil__it p:last-child { margin-top: 1.2rem; }

/* ==========================================================================
   7. Cifras
   ========================================================================== */
.p-stats { background: var(--p-navy); color: #fff; position: relative; overflow: hidden; }
.p-stats::before { content:''; position: absolute; inset: 0; background: radial-gradient(700px 300px at 15% 0%, rgba(32,76,151,.5), transparent 60%); }
.p-stats__grid { position: relative; display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; }
.p-stats__it { padding: clamp(1.8rem, 1.2rem + 2vw, 2.8rem) 1.3rem; text-align: center; border-left: 1px solid rgba(255,255,255,.12); }
.p-stats__it:first-child { border-left: 0; }
.p-stats__it b { display: block; font-family: var(--p-display); font-size: clamp(2.6rem, 1.8rem + 3vw, 4rem); line-height: 1; color: #fff; }
.p-stats__it b i { font-style: normal; color: var(--p-oro); }
.p-stats__it span { display: block; margin-top: .5rem; font-size: .74rem; font-weight: 700; letter-spacing: .18em; text-transform: uppercase; color: rgba(255,255,255,.58); }
@media (max-width: 760px) { .p-stats__grid { grid-template-columns: repeat(2, 1fr); } .p-stats__it:nth-child(odd) { border-left: 0; } .p-stats__it:nth-child(n+3) { border-top: 1px solid rgba(255,255,255,.12); } }

/* ==========================================================================
   8. Franja Cruzada Republicana
   ========================================================================== */
.p-czr {
    position: relative; overflow: hidden; color: #F2F5FB;
    padding-block: clamp(3.4rem, 2rem + 5vw, 5.6rem);
    background:
        radial-gradient(90% 120% at 100% 8%, rgba(46,95,183,.28) 0%, rgba(7,14,28,0) 62%),
        radial-gradient(70% 110% at 0% 92%, rgba(201,169,97,.08) 0%, rgba(7,14,28,0) 64%),
        linear-gradient(180deg, #0B1730 0%, #070E1C 55%, #0A1832 100%);
}
.p-czr__head { display: flex; align-items: center; gap: 1.1rem; margin-bottom: 2rem; }
.p-czr__head img { height: 44px; width: auto; }
.p-czr__head::after { content:''; flex: 1; height: 1px; background: rgba(150,178,225,.3); }
.p-czr__grid { display: grid; grid-template-columns: 1.1fr .9fr; gap: 2.4rem; align-items: center; }
@media (max-width: 900px) { .p-czr__grid { grid-template-columns: 1fr; } }
.p-czr h2 { color: #fff; font-size: clamp(2.1rem, 1.3rem + 3.4vw, 3.6rem); margin: .7rem 0 .6rem; }
.p-czr h2 b { color: #6FA3FF; font-weight: 700; }
.p-czr__lema { color: #fff; font-weight: 700; text-transform: uppercase; letter-spacing: .26em; font-size: .7rem; margin-bottom: .9rem; }
.p-czr__lema em { font-style: normal; color: var(--p-oro); }
.p-czr__txt { color: #8FA2C2; max-width: 52ch; font-size: .95rem; line-height: 1.75; }
.p-czr__cta { display: flex; gap: .7rem; flex-wrap: wrap; margin-top: 1.5rem; }
.p-czr__ba { display: grid; grid-template-columns: 1fr 1fr; gap: .9rem; }
.p-czr__ba figure { margin: 0; border-radius: var(--p-r); overflow: hidden; border: 1px solid rgba(150,178,225,.24); position: relative; }
.p-czr__ba img { aspect-ratio: 4/3; object-fit: cover; width: 100%; }
.p-czr__ba figcaption { position: absolute; left: .6rem; top: .6rem; padding: .28rem .7rem; border-radius: 999px; background: rgba(7,14,28,.78); color: #fff; font-size: .64rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; }

/* ==========================================================================
   9. Archivo — mosaico
   ========================================================================== */
.p-mos { display: grid; grid-template-columns: 1.6fr 1fr 1fr; gap: 1.1rem; margin-top: 2.2rem; }
@media (max-width: 900px) { .p-mos { grid-template-columns: 1fr 1fr; } .p-mos__it:first-child { grid-column: span 2; } }
@media (max-width: 560px) { .p-mos { grid-template-columns: 1fr; } .p-mos__it:first-child { grid-column: auto; } }
.p-mos__it { position: relative; display: block; border-radius: var(--p-r); overflow: hidden; min-height: 260px; background: var(--p-paper-2); }
.p-mos__it:first-child { min-height: 380px; }
.p-mos__it img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--p-ease); }
.p-mos__it:hover img { transform: scale(1.07); }
.p-mos__it::after { content:''; position: absolute; inset: 0; background: linear-gradient(0deg, rgba(8,17,31,.9) 0%, rgba(8,17,31,.15) 55%, rgba(8,17,31,.05) 100%); }
.p-mos__cap { position: absolute; z-index: 2; left: 1.2rem; right: 1.2rem; bottom: 1.1rem; color: #fff; }
.p-mos__cap h3 { font-size: 1.28rem; text-wrap: balance; }
.p-mos__cap span { display: inline-flex; align-items: center; gap: .4rem; margin-top: .45rem; font-size: .76rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: rgba(255,255,255,.72); }
.p-mos__n { position: absolute; z-index: 2; top: .9rem; right: .9rem; display: inline-flex; align-items: center; gap: .35rem; padding: .3rem .65rem; border-radius: 999px; background: rgba(8,17,31,.6); color: #fff; font-size: .7rem; font-weight: 700; backdrop-filter: blur(5px); }
.p-mos__n svg { width: 13px; height: 13px; }

/* ==========================================================================
   9 bis. Cabecera de página interior y grilla de eventos (/eventos)
   ==========================================================================
   La portada abre con el carrusel .p-hero, que ocupa media pantalla y va
   cambiando de foto. .p-phead es su hermana quieta para una página de listado:
   una sola fotografía a sangre, en color sobre el azul del pie, con el oro como
   remate. Mismo material que el héroe de la portada, que ya iba así: el negro
   puro y el blanco y negro dejaban estas páginas más apagadas que la portada.
   La banda es más baja que el héroe —termina antes del pliegue— para que los
   filtros y las primeras tarjetas se vean sin bajar. */
.p-phead {
    position: relative; isolation: isolate; overflow: hidden;
    display: flex; align-items: flex-end;
    min-height: clamp(340px, 44vh, 480px);
    background: var(--p-void); color: #fff;
    padding-block: clamp(3rem, 2rem + 4vw, 5rem);
}
/* Filete de oro en el canto inferior: cierra el negro contra el blanco de la
   grilla en vez de cortarlo en seco. */
.p-phead::after {
    content: ''; position: absolute; z-index: 3; left: 0; right: 0; bottom: 0; height: 1px;
    background: linear-gradient(90deg, var(--p-oro) 0%, rgba(201,169,97,.35) 38%, rgba(201,169,97,0) 72%);
}

/* La fotografía va en <img> y no en background-image para que el navegador la
   descubra en el HTML y la descargue con prioridad: es lo primero que se ve. */
.p-phead__ph {
    position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%;
    object-fit: cover; object-position: center 28%;
    filter: saturate(1.06) contrast(1.04) brightness(.86);
    transform: scale(1.06); animation: p-phead-zoom 26s var(--p-ease) forwards;
}
@keyframes p-phead-zoom { to { transform: scale(1); } }
@media (prefers-reduced-motion: reduce) { .p-phead__ph { animation: none; transform: none; } }

/* Velo negro: opaco donde cae el texto y casi limpio hacia la derecha, para que
   la foto se adivine sin disputarle la lectura al titular. */
.p-phead__scrim {
    position: absolute; inset: 0; z-index: 1;
    background:
        linear-gradient(94deg, rgba(9,22,44,.97) 0%, rgba(12,31,62,.9) 36%, rgba(14,37,73,.58) 60%, rgba(14,37,73,.24) 80%, rgba(8,17,31,.56) 100%),
        linear-gradient(0deg, rgba(8,17,31,.96) 0%, rgba(10,25,49,.56) 30%, rgba(12,31,62,.1) 62%, rgba(8,17,31,.34) 100%);
}
/* Misma trama de estrellas del héroe, para que las dos cabeceras se sientan del
   mismo material. */
.p-phead__grain {
    position: absolute; inset: 0; z-index: 2; pointer-events: none; opacity: .6;
    background:
        radial-gradient(1px 1px at 20% 30%, rgba(201,169,97,.5), transparent 60%),
        radial-gradient(1px 1px at 72% 18%, rgba(255,255,255,.32), transparent 60%),
        radial-gradient(1.5px 1.5px at 46% 72%, rgba(201,169,97,.32), transparent 60%);
}
.p-phead > .p-wrap { position: relative; z-index: 3; }
.p-phead__in { max-width: 720px; }
.p-phead h1 { font-size: clamp(2.4rem, 1.5rem + 3.6vw, 4.2rem); color: #fff; margin-top: .8rem; text-shadow: 0 2px 30px rgba(0,0,0,.5); }
.p-phead h1 em { font-style: normal; color: var(--p-oro); }
.p-phead__lead { color: rgba(255,255,255,.76); font-size: 1.04rem; line-height: 1.7; max-width: 46ch; margin-top: 1.1rem; }

/* Fichas de vidrio con lo que la agenda promete. Mismo objeto que .p-hero__meta
   de la portada: si un día cambia una, cambian las dos. */
.p-phead__meta { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 1.7rem; }
.p-phead__meta li {
    display: inline-flex; align-items: center; gap: .5rem; padding: .45rem .85rem;
    border: 1px solid rgba(255,255,255,.2); border-radius: 999px; background: rgba(255,255,255,.07);
    -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
    color: rgba(255,255,255,.88); font-size: .82rem; font-weight: 700; white-space: nowrap;
}
.p-phead__meta svg { width: 15px; height: 15px; color: var(--p-oro); flex: none; }

@media (max-width: 700px) {
    .p-phead { min-height: 300px; }
    .p-phead__ph { object-position: center 24%; }
    .p-phead__lead { font-size: .96rem; }
    .p-phead__meta li { font-size: .76rem; padding: .38rem .7rem; }
}

/* Con un filtro puesto, una línea que confirme qué se está viendo. */
.p-phead__count { margin-top: 1.5rem; font-size: .78rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: rgba(255,255,255,.58); }
.p-phead__count b { color: var(--p-oro); }

/* Migas de pan: discretas, sobre el negro. */
.p-crumb { display: flex; align-items: center; gap: .5rem; font-size: .78rem; color: rgba(255,255,255,.5); margin-bottom: 1.4rem; }
.p-crumb a { color: rgba(255,255,255,.72); transition: var(--p-t); }
.p-crumb a:hover { color: #fff; }
.p-crumb span { color: rgba(255,255,255,.3); }


/* Grilla de la agenda. Es la misma tarjeta .p-ev de la cartelera, pero aquí
   no va en carril: en un listado se quiere ver todo de una, no desplazar. */
.p-evgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.6rem; margin-top: 2rem; }
@media (max-width: 1000px) { .p-evgrid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px)  { .p-evgrid { grid-template-columns: 1fr; } }

/* Páginas de dentro del archivo (una colección, un álbum): misma banda, más
   baja. El titular ahí es un nombre propio, no un lema, y lo que interesa está
   más abajo —las fotos—, así que la cabecera cede altura. */
.p-phead--sub { min-height: clamp(260px, 32vh, 360px); }
.p-phead--sub h1 { font-size: clamp(1.9rem, 1.3rem + 2.4vw, 3.1rem); }

/* ==========================================================================
   9 ter. Archivo fotográfico (/archivo y sus páginas interiores)
   ==========================================================================
   El mosaico .p-mos de la portada muestra tres álbumes escogidos con tamaños
   distintos; aquí están todos y ninguno manda sobre otro, así que la retícula
   es regular. auto-fit hace el trabajo de equilibrio: con dos álbumes salen dos
   tarjetas anchas en vez de dos angostas y un hueco a la derecha. */
.p-arch { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr)); gap: 1.5rem; margin-top: 2.2rem; }
.p-arch__it {
    position: relative; display: block; overflow: hidden; aspect-ratio: 3/2;
    border-radius: var(--p-r); background: var(--p-paper-2);
    box-shadow: var(--p-sh-sm); transition: transform var(--p-t), box-shadow var(--p-t);
}
.p-arch__it:hover { transform: translateY(-4px); box-shadow: var(--p-sh); }
.p-arch__it img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--p-ease); }
.p-arch__it:hover img { transform: scale(1.06); }
/* Velo de abajo hacia arriba: el rótulo se lee sea cual sea la foto. */
.p-arch__it::after {
    content: ''; position: absolute; inset: 0;
    background: linear-gradient(0deg, rgba(8,17,31,.92) 0%, rgba(8,17,31,.5) 34%, rgba(8,17,31,.06) 66%, rgba(8,17,31,.28) 100%);
}
.p-arch__cap { position: absolute; z-index: 2; left: 1.4rem; right: 1.4rem; bottom: 1.25rem; color: #fff; }
.p-arch__cap h3 { font-size: clamp(1.2rem, 1rem + .7vw, 1.6rem); text-wrap: balance; }
.p-arch__m { display: flex; flex-wrap: wrap; gap: .35rem .9rem; margin-top: .5rem; font-size: .74rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: rgba(255,255,255,.74); }
/* Contador de fotos, arriba a la derecha: mismo objeto que .p-mos__n. */
.p-arch__n {
    position: absolute; z-index: 2; top: .95rem; right: .95rem;
    display: inline-flex; align-items: center; gap: .35rem; padding: .32rem .7rem;
    border-radius: 999px; background: rgba(8,17,31,.55); color: #fff;
    font-size: .72rem; font-weight: 700; -webkit-backdrop-filter: blur(5px); backdrop-filter: blur(5px);
}
.p-arch__n svg { width: 13px; height: 13px; }
/* Ficha de carpeta: distingue una colección de un álbum antes de entrar. */
.p-arch__k {
    position: absolute; z-index: 2; top: .95rem; left: .95rem;
    display: inline-flex; align-items: center; gap: .35rem; padding: .32rem .7rem;
    border-radius: 999px; background: var(--p-oro); color: #2B2110;
    font-size: .68rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
}
.p-arch__k svg { width: 13px; height: 13px; }
/* Colección todavía sin nada dentro: no hay portada que heredar. En vez de un
   hueco roto, la misma tarjeta en papel con el icono al centro. El velo de
   .p-arch__it::after se apaga porque aquí no hay foto que oscurecer. */
.p-arch__it--sf { background: var(--p-paper-2); }
.p-arch__it--sf::after { background: none; }
.p-arch__it--sf .p-arch__cap { color: var(--p-ink); }
.p-arch__it--sf .p-arch__m { color: var(--p-ink-3); }
.p-arch__sf {
    position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
    color: var(--p-ink-3); opacity: .35;
}
.p-arch__sf svg { width: 44px; height: 44px; }

/* --- Álbum: mampostería de fotos ---------------------------------------- */
/* Columnas CSS y no grid: las fotos vienen con proporciones distintas y aquí
   interesa que cada una conserve la suya, sin recortes. */
.p-mason { columns: 3; column-gap: 1.1rem; margin-top: 2rem; }
@media (max-width: 1000px) { .p-mason { columns: 2; } }
@media (max-width: 620px)  { .p-mason { columns: 1; } }
.p-mason__it {
    position: relative; break-inside: avoid; margin-bottom: 1.1rem; cursor: zoom-in;
    border-radius: var(--p-r-sm); overflow: hidden; background: var(--p-paper-2); box-shadow: var(--p-sh-sm);
}
.p-mason__it img { display: block; width: 100%; height: auto; transition: transform var(--p-t), filter var(--p-t); }
.p-mason__it:hover img { transform: scale(1.04); filter: brightness(1.06); }
.p-mason__z {
    position: absolute; top: .6rem; right: .6rem; width: 34px; height: 34px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: rgba(8,17,31,.5); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
    color: #fff; opacity: 0; transform: scale(.85); transition: opacity var(--p-t), transform var(--p-t);
}
.p-mason__z svg { width: 17px; height: 17px; }
.p-mason__it:hover .p-mason__z { opacity: 1; transform: scale(1); }

/* --- Visor a pantalla completa ------------------------------------------ */
/* Lo mueve assets/js/album.js, que trabaja por id y por [data-viewer]: estas
   reglas solo lo visten, así que el mismo script sirve a los dos marcos. */
.p-viewer { position: fixed; inset: 0; z-index: 300; display: none; opacity: 0; background: rgba(3,6,12,.97); transition: opacity .2s ease; touch-action: none; user-select: none; }
.p-viewer.is-open { display: block; opacity: 1; }
.p-viewer__stage { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.p-viewer__img { max-width: 92vw; max-height: 88vh; border-radius: 4px; box-shadow: 0 20px 60px rgba(0,0,0,.5); transform-origin: center center; transition: opacity .18s ease; will-change: transform; -webkit-user-drag: none; }
.p-viewer.is-zoomed .p-viewer__img { cursor: grab; border-radius: 0; }
.p-viewer.is-panning .p-viewer__img { cursor: grabbing; transition: none; }
.p-viewer__btn { position: absolute; z-index: 2; border: 0; background: rgba(255,255,255,.1); color: #fff; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background .15s ease; -webkit-tap-highlight-color: transparent; }
.p-viewer__btn:hover { background: var(--p-oro); color: #2B2110; }
.p-viewer__close { top: 1rem; right: 1.1rem; width: 48px; height: 48px; border-radius: 50%; font-size: 1.7rem; line-height: 1; }
.p-viewer__nav { top: 50%; transform: translateY(-50%); width: 56px; height: 56px; border-radius: 50%; font-size: 2rem; line-height: 1; padding-bottom: 4px; }
.p-viewer__prev { left: 1.2rem; }
.p-viewer__next { right: 1.2rem; }
.p-viewer__nav[hidden] { display: none; }
.p-viewer__count { position: absolute; top: 1.3rem; left: 50%; transform: translateX(-50%); z-index: 2; padding: .35rem .9rem; border-radius: 999px; background: rgba(0,0,0,.4); color: #fff; font-size: .9rem; font-weight: 700; }
.p-viewer__count b { color: var(--p-oro); }
.p-viewer__tools { position: absolute; bottom: 1.3rem; left: 50%; transform: translateX(-50%); z-index: 2; display: flex; gap: .5rem; }
.p-viewer__tools .p-viewer__btn { position: static; width: 44px; height: 44px; border-radius: 50%; font-size: 1.4rem; line-height: 1; }
.p-viewer__hint { position: absolute; bottom: 1.55rem; right: 1.4rem; z-index: 2; color: rgba(255,255,255,.55); font-size: .8rem; transition: opacity .4s ease; }
@media (max-width: 700px) {
    .p-viewer__nav { width: 46px; height: 46px; font-size: 1.6rem; }
    .p-viewer__prev { left: .5rem; }
    .p-viewer__next { right: .5rem; }
    .p-viewer__hint { display: none; }
    .p-viewer__img { max-width: 100vw; }
}

/* ==========================================================================
   10. Directorio
   ========================================================================== */
/* El directorio va en el mismo carril desplazable que la cartelera: hereda
   .p-rail (desbordamiento, ajuste por tarjeta y flechas) y solo fija el ancho
   de la ficha, más angosta que la de un evento porque la foto es 3/4. */
.p-rail--team > .p-team__it { flex: 0 0 clamp(216px, 22%, 268px); scroll-snap-align: start; }
.p-team__it { text-align: left; }
.p-team__ph { position: relative; display: block; aspect-ratio: 3/4; border-radius: var(--p-r); overflow: hidden; background: var(--p-paper-2); }
.p-team__ph img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(1) contrast(1.02); transition: filter .5s var(--p-ease), transform .6s var(--p-ease); }
.p-team__it:hover .p-team__ph img { filter: none; transform: scale(1.04); }
.p-team__ph::after { content:''; position: absolute; inset: 0; background: linear-gradient(0deg, rgba(15,37,71,.55), transparent 55%); }
.p-team__it h3 { margin-top: .85rem; font-size: 1.15rem; color: var(--p-navy); }
.p-team__it span { display: block; margin-top: .18rem; font-size: .76rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--p-rojo); }

/* ==========================================================================
   11. Cierre: aporte + súmate
   ========================================================================== */
.p-close { display: grid; grid-template-columns: 1.05fr .95fr; gap: 0; border-radius: var(--p-r-lg); overflow: hidden; box-shadow: var(--p-sh-lg); }
@media (max-width: 900px) { .p-close { grid-template-columns: 1fr; } }
.p-close__l { position: relative; padding: clamp(2.4rem, 1.6rem + 3vw, 3.6rem); background: var(--p-navy); color: #fff; overflow: hidden; }
.p-close__l::before { content:''; position: absolute; inset: 0; background: radial-gradient(600px 300px at 100% 0%, rgba(201,169,97,.22), transparent 60%); }
.p-close__star { position: absolute; right: -40px; bottom: -40px; width: 230px; color: rgba(255,255,255,.045); }
.p-close__l > :not(.p-close__star) { position: relative; }
.p-close__l h2 { color: #fff; font-size: clamp(2rem, 1.4rem + 2.4vw, 3rem); margin: .8rem 0 .8rem; }
.p-close__l h2 em { font-style: normal; color: var(--p-oro); }
.p-close__l p { color: rgba(255,255,255,.66); font-size: .95rem; line-height: 1.75; max-width: 46ch; }
.p-close__amounts { display: flex; flex-wrap: wrap; gap: .55rem; margin: 1.5rem 0; }
.p-close__amounts a {
    padding: .6rem 1.05rem; border: 1px solid rgba(255,255,255,.24); border-radius: var(--p-r-sm);
    font-family: var(--p-display); font-size: 1.15rem; letter-spacing: .03em; color: #fff; transition: var(--p-t);
}
.p-close__amounts a:hover { background: var(--p-oro); border-color: var(--p-oro); color: #2B2110; }
.p-close__r { padding: clamp(2.4rem, 1.6rem + 3vw, 3.6rem); background: #fff; }
.p-close__r h3 { font-size: 1.9rem; color: var(--p-navy); margin-top: .7rem; }
.p-close__r p { color: var(--p-ink-2); font-size: .93rem; margin-top: .6rem; line-height: 1.7; }
.p-form { display: grid; gap: .75rem; margin-top: 1.4rem; }
.p-form__row { display: grid; grid-template-columns: 1fr 1fr; gap: .75rem; }
@media (max-width: 520px) { .p-form__row { grid-template-columns: 1fr; } }
.p-form input, .p-form select, .p-form textarea {
    width: 100%; padding: .8rem .95rem; border: 1px solid var(--p-line-2); border-radius: var(--p-r-sm);
    background: var(--p-paper); font: inherit; font-size: .9rem; color: var(--p-ink); transition: var(--p-t);
}
.p-form input:focus, .p-form select:focus, .p-form textarea:focus { outline: none; border-color: var(--p-azul); background: #fff; box-shadow: 0 0 0 4px rgba(32,76,151,.10); }
.p-form small { color: var(--p-ink-3); font-size: .75rem; line-height: 1.5; }

/* ==========================================================================
   12. Pie
   ========================================================================== */
.p-foot { background: var(--p-void); color: rgba(255,255,255,.6); padding-top: clamp(3rem, 2rem + 3vw, 4.5rem); }
.p-foot__grid { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1.3fr; gap: 2.4rem; padding-bottom: 2.8rem; }
@media (max-width: 900px) { .p-foot__grid { grid-template-columns: 1fr 1fr; gap: 2rem; } }
@media (max-width: 520px) { .p-foot__grid { grid-template-columns: 1fr; } }
.p-foot__logo { display: block; width: 200px; aspect-ratio: 842/183; background-color: #fff;
    -webkit-mask: url('/assets/img/logo-brand.png') left center / contain no-repeat; mask: url('/assets/img/logo-brand.png') left center / contain no-repeat; }
.p-foot p { margin-top: 1rem; font-size: .88rem; line-height: 1.7; max-width: 34ch; }
.p-foot h4 { font-family: var(--p-sans); font-size: .72rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: #fff; margin-bottom: 1rem; }
.p-foot__col a { display: flex; align-items: center; gap: .55rem; padding: .3rem 0; font-size: .89rem; color: rgba(255,255,255,.6); transition: var(--p-t); }
.p-foot__col a:hover { color: var(--p-oro); translate: 3px 0; }
.p-foot__col svg { width: 15px; height: 15px; flex: none; color: rgba(255,255,255,.36); }
.p-foot__soc { display: flex; gap: .55rem; margin-top: 1.4rem; }
.p-foot__soc a { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; border: 1px solid rgba(255,255,255,.16); color: rgba(255,255,255,.7); transition: var(--p-t); }
.p-foot__soc a:hover { background: var(--p-azul); border-color: var(--p-azul); color: #fff; }
.p-foot__soc svg { width: 16px; height: 16px; }
.p-foot__bot { border-top: 1px solid rgba(255,255,255,.1); padding-block: 1.4rem; display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; font-size: .8rem; color: rgba(255,255,255,.42); }
.p-foot__bot a:hover { color: var(--p-oro); }

/* ==========================================================================
   13. Cintillo de propuesta (solo en /test1)
   ========================================================================== */
.p-flag {
    position: fixed; z-index: 90; right: 1rem; bottom: 1rem;
    display: flex; align-items: center; gap: .7rem; padding: .6rem .75rem .6rem 1rem;
    border-radius: 999px; background: rgba(8,17,31,.92); color: #fff;
    box-shadow: var(--p-sh-lg); backdrop-filter: blur(10px); font-size: .78rem; font-weight: 700;
    border: 1px solid rgba(255,255,255,.14);
}
.p-flag i { font-style: normal; width: 8px; height: 8px; border-radius: 50%; background: var(--p-oro); box-shadow: 0 0 0 4px rgba(201,169,97,.22); }
.p-flag a { padding: .34rem .8rem; border-radius: 999px; background: rgba(255,255,255,.12); color: #fff; transition: var(--p-t); }
.p-flag a:hover { background: var(--p-azul); }
@media (max-width: 560px) { .p-flag { left: 1rem; right: 1rem; justify-content: center; } }

/* ==========================================================================
   6. Academia y Cruzada — par de piezas de marca (tomado de /test3)
   Mismos fondos, fotografías y proporciones; el titular usa la condensada
   de esta página en vez de la Manrope 800 de /test3, porque aquí la Manrope
   solo está cargada en 400 y 700 y el 800 saldría sintetizado.
   ========================================================================== */
.p-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 1.6rem; }
@media (max-width: 860px) { .p-pair { grid-template-columns: 1fr; } }
.p-brandtile {
    position: relative; border-radius: var(--p-r); overflow: hidden;
    padding: clamp(1.6rem, 1.2rem + 2vw, 2.6rem); display: flex; flex-direction: column; min-height: 330px;
}
.p-brandtile > * { position: relative; z-index: 2; }
.p-brandtile h3 { font-size: clamp(1.9rem, 1.3rem + 2vw, 2.8rem); color: #fff; margin-top: .6rem; }
.p-brandtile p { font-size: .91rem; line-height: 1.7; margin-top: .8rem; max-width: 40ch; }
.p-brandtile .p-cta { margin-top: auto; padding-top: 1.4rem; display: flex; gap: .5rem; flex-wrap: wrap; }

.p-brandtile--acad { background: #07090D; color: rgba(255,255,255,.62); }
.p-brandtile--acad h3 b { color: var(--p-oro); font-weight: 700; }
.p-brandtile--acad .p-faces {
    position: absolute; z-index: 1; inset: 0; display: flex; align-items: flex-end; justify-content: flex-end; opacity: .16;
    -webkit-mask-image: linear-gradient(90deg, transparent 22%, #000 62%); mask-image: linear-gradient(90deg, transparent 22%, #000 62%);
}
.p-brandtile--acad .p-faces img { height: 88%; width: auto; filter: grayscale(1) contrast(1.05); }
.p-brandtile--acad .p-faces img + img { margin-left: -10%; }

.p-brandtile--czr { background: #0A1732; color: rgba(255,255,255,.62); }
.p-brandtile--czr h3 b { color: #7FA9F0; font-weight: 700; }
.p-brandtile--czr { min-height: 390px; }
/* El logotipo es un escudo completo de 1311x1022. En una columna flex los hijos
   se estiran a lo ancho por defecto, así que con la altura fija salía deformado:
   align-self lo devuelve a su ancho natural. */

/* Antes/después: las dos fotos son panorámicas de calle (1600x388). Puestas una
   al lado de la otra —como en /test3— cada mitad recibe una caja casi cuadrada y
   el recorte se come la fachada, que es justo lo que hay que ver. Apiladas en dos
   bandas a todo el ancho conservan su proporción y se comparan solas: es el mismo
   muro, rayado arriba y pintado abajo. */
.p-brandtile--czr .p-ba {
    position: absolute; z-index: 1; inset: auto 0 0 0; height: 58%;
    display: grid; grid-template-rows: 1fr 1fr; gap: 1px;
}
.p-brandtile--czr .p-ba__it { position: relative; overflow: hidden; }
/* Las dos fotos traen pegada una franja azul oscura en el borde derecho (desde
   el píxel 1553 de 1600, el canto del visor de Street View). Se recorta pidiendo
   un 104% de ancho anclado a la izquierda: lo que sobra cae fuera del contenedor.
   No se tocan los archivos, que también los usa /cruzadarepublicana. */
.p-brandtile--czr .p-ba img {
    width: 104%; max-width: none; height: 100%;
    object-fit: cover; object-position: left center; opacity: .9;
}
/* El velo baja donde están las fotos y sube donde está el texto. */
.p-brandtile--czr::after {
    content: ''; position: absolute; z-index: 1; inset: 0;
    background: linear-gradient(0deg,
        rgba(10,23,50,.50) 0%, rgba(10,23,50,.60) 30%, rgba(10,23,50,.95) 58%, rgba(10,23,50,.99) 72%);
}

/* ==========================================================================
   Cierre (aporte + súmate) — copia literal del bloque de /test3
   Se traen las clases .q- tal cual están en /test3/propuesta.css, con las
   variables que usan definidas localmente sobre .q-close: así el bloque se ve
   exactamente igual que en la v3 sin arrastrar el resto de aquella hoja ni
   pisar nada del prefijo .p-.
   Nota: manrope-400-latin.woff2 es una fuente VARIABLE (eje wght 200–800);
   declarada por rango entrega el 800 real de la v3 sin añadir un byte.
   ========================================================================== */
@font-face {
    font-family: 'Manrope VF';
    src: url('/assets/fonts/manrope-400-latin.woff2') format('woff2');
    font-weight: 200 800; font-style: normal; font-display: swap;
}

.q-close {
    --q-ground:  #FAFAFB;
    --q-white:   #FFFFFF;
    --q-ink:     #101A2C;
    --q-ink-2:   #59657A;
    --q-ink-3:   #8E99AB;
    --q-azul:    #204C97;
    --q-azul-l:  #E9EFFA;
    --q-oro:     #C9A961;
    --q-line:    #E4E7EC;
    --q-line-2:  #CFD6E0;
    --q-r:    14px;
    --q-r-sm: 9px;
    --q-gap:  14px;
    --q-ease: cubic-bezier(.3,.7,.4,1);
    --q-t:    .25s var(--q-ease);

    font-family: 'Manrope VF', 'Manrope', 'Helvetica Neue', Arial, sans-serif;
    color: var(--q-ink);
    display: grid; grid-template-columns: 1fr 1fr; gap: var(--q-gap);
}
@media (max-width: 900px) { .q-close { grid-template-columns: 1fr; } }

/* La firma tipográfica de la v3: caja baja, peso 800 y muy ajustada. Hay que
   decirlo aquí porque en /final los h2/h3 son Barlow Condensed en versalitas. */
.q-close h2 {
    margin: 0; font-family: inherit; font-weight: 800;
    letter-spacing: -.035em; line-height: 1.02; text-transform: none; text-wrap: balance;
}
.q-close p { margin: 0; }

.q-eyebrow { display: inline-block; font-size: .74rem; font-weight: 700; letter-spacing: .04em; color: var(--q-azul); }
.q-eyebrow--gold { color: var(--q-oro); }

.q-close .q-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
    padding: .8rem 1.4rem; border: 1px solid transparent; border-radius: 999px;
    font-family: inherit; font-weight: 700; font-size: .87rem; letter-spacing: -.005em;
    cursor: pointer; white-space: nowrap;
    transition: background var(--q-t), color var(--q-t), border-color var(--q-t);
}
.q-close .q-btn svg { width: 16px; height: 16px; flex: none; }
.q-btn--ink   { background: var(--q-ink); color: #fff; }
.q-btn--ink:hover   { background: #060D18; }
.q-btn--white { background: #fff; color: var(--q-ink); }
.q-btn--white:hover { background: var(--q-azul-l); }
.q-close .q-btn--lg { padding: .95rem 1.7rem; font-size: .93rem; }
.q-btn--block { width: 100%; }

.q-give { background: var(--q-ink); color: #fff; border-radius: var(--q-r); padding: clamp(1.8rem, 1.3rem + 2.2vw, 3rem); }
.q-give h2 { font-size: clamp(1.7rem, 1.3rem + 1.8vw, 2.4rem); color: #fff; margin-top: .6rem; }
.q-give p { color: rgba(255,255,255,.62); font-size: .92rem; margin-top: .8rem; line-height: 1.7; max-width: 40ch; }
.q-amounts { display: flex; flex-wrap: wrap; gap: .5rem; margin: 1.4rem 0 1.3rem; }
.q-amounts a {
    padding: .58rem 1.05rem; border: 1px solid rgba(255,255,255,.26); border-radius: 999px;
    font-weight: 700; font-size: .9rem; font-variant-numeric: tabular-nums; color: #fff; transition: var(--q-t);
}
.q-amounts a:hover { background: #fff; color: var(--q-ink); border-color: #fff; }
.q-join { background: var(--q-white); border: 1px solid var(--q-line); border-radius: var(--q-r); padding: clamp(1.8rem, 1.3rem + 2.2vw, 3rem); }
.q-join h2 { font-size: clamp(1.7rem, 1.3rem + 1.8vw, 2.4rem); margin-top: .6rem; }
.q-join > p { color: var(--q-ink-2); font-size: .92rem; margin-top: .7rem; line-height: 1.7; max-width: 42ch; }
.q-form { display: grid; gap: .65rem; margin-top: 1.4rem; }
.q-form__row { display: grid; grid-template-columns: 1fr 1fr; gap: .65rem; }
@media (max-width: 520px) { .q-form__row { grid-template-columns: 1fr; } }
.q-form input, .q-form select {
    width: 100%; padding: .78rem .95rem; border: 1px solid var(--q-line-2); border-radius: var(--q-r-sm);
    background: var(--q-ground); font: inherit; font-size: .9rem; color: var(--q-ink); transition: var(--q-t);
}
.q-form input:focus, .q-form select:focus { outline: none; border-color: var(--q-azul); background: #fff; }
.q-form small { color: var(--q-ink-3); font-size: .76rem; line-height: 1.5; }

/* La foto de la diapositiva institucional (entrega de diplomas) es panorámica,
   casi la proporción del héroe: `cover` deja apenas un puñado de píxeles de
   holgura a los lados. Quien recortaba de verdad el borde derecho —donde está
   Kast, pegado al canto de la foto— era el zoom lento del carrusel, que crece
   desde el centro y se come otro tanto por cada lado. Anclando el origen del
   transform a la derecha, ese borde queda fijo: la ampliación se desarrolla
   hacia la izquierda, sobre la esquina que el velo oscurece de todos modos.
   La posición al 100% suma la poca holgura que sí existe. */
.p-hero__ph--diplomas { background-position: 100% center; transform-origin: 100% 50%; }

/* Fondo del titular: el velo general (.p-hero__scrim) tiñe la foto entera y
   por eso no puede ser muy denso sin apagarla. Este segundo degradado va solo
   detrás del texto —una elipse anclada abajo a la izquierda que se apaga antes
   de llegar al centro— así que asienta las letras sobre un fondo parejo sin
   tocar la mitad derecha, que es donde está la gente. Va en z-index -1 dentro
   del propio .p-hero__body, es decir sobre la foto y por debajo del titular. */
.p-hero__body::before {
    content: ''; position: absolute; z-index: -1; inset: 0; pointer-events: none;
    background:
        radial-gradient(78% 82% at 4% 84%,
            rgba(5,11,22,.86) 0%, rgba(5,11,22,.66) 30%, rgba(5,11,22,.30) 54%, rgba(5,11,22,0) 74%),
        linear-gradient(0deg, rgba(5,11,22,.5) 0%, rgba(5,11,22,0) 52%);
}

/* --- Portada · Cruzada: el antes y el después en vez de una foto ---------
   Las dos tomas son panorámicas del mismo muro (1600x388 cada una); apiladas
   dan 1600x776, prácticamente la proporción del héroe, así que llenan el fondo
   casi sin recorte y la comparación se lee de un vistazo. Heredan el mismo
   zoom lento del carrusel que el resto de las diapositivas.
   Igual que en la teja de la Cruzada más abajo, los archivos traen pegada una
   franja azul oscura en el canto derecho (desde el píxel 1553 de 1600, el borde
   del visor de Street View): se recorta pidiendo un 104% de ancho anclado a la
   izquierda, sin tocar los archivos, que también usa /cruzadarepublicana. */
.p-hero__ba {
    position: absolute; inset: 0; display: grid; grid-template-rows: 1fr 1fr; gap: 2px;
    transform: scale(1.05); transition: transform 11s linear;
}
.p-hero__slide.is-on .p-hero__ba { transform: scale(1.16); }
.p-hero__ba__it { position: relative; overflow: hidden; }
.p-hero__ba__it img {
    width: 104%; max-width: none; height: 100%;
    object-fit: cover; object-position: left center;
}
/* Las etiquetas van a la derecha: la izquierda se la lleva el velo y el texto. */
.p-hero__ba__t {
    position: absolute; z-index: 1; right: clamp(1rem, 3vw, 2.6rem); top: 50%; translate: 0 -50%;
    padding: .34rem .85rem; border-radius: 999px;
    border: 1px solid rgba(255,255,255,.26); background: rgba(8,17,31,.5); backdrop-filter: blur(6px);
    font-size: .68rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: #fff;
}
.p-hero__ba__t--ok { border-color: rgba(201,169,97,.55); color: var(--p-oro); }

/* ==========================================================================
   Textos traídos de la home real: piezas que antes no existían aquí
   ========================================================================== */

/* Los cuatro cuadrados ahora llevan rótulo + título y nada más, como las
   .hcard de la home. Sin bajada, la flecha se va al costado. */
.p-access__it { align-items: center; }
.p-access__tag {
    display: block; font-size: .68rem; font-weight: 700; letter-spacing: .18em;
    text-transform: uppercase; color: var(--p-azul); margin-bottom: .3rem;
}
.p-access__go { margin-left: auto; color: var(--p-line-2); transition: var(--p-t); }
.p-access__go svg { width: 18px; height: 18px; display: block; }
.p-access__it:hover .p-access__go { color: var(--p-azul); translate: 4px 0; }

/* Lema de las tejas: «2026 — Reconstrucción Nacional», «Piloto Conchalí — …» */
.p-lema {
    margin-top: .7rem; font-weight: 800; text-transform: uppercase;
    letter-spacing: .22em; font-size: .7rem; color: #fff;
}
.p-lema em { font-style: normal; color: var(--p-oro); }
.p-brandtile p.p-lema + p { margin-top: .55rem; }

/* Las dos columnas del cierre van lado a lado, como en /test3. */

/* Formulario «Súmate»: los mismos campos de /contacto, vestidos con las clases
   de esta propuesta. Las etiquetas envuelven al campo, así que el bloque es
   <label> y el control va dentro. */
.q-join { --q-ground: #FAFAFB; --q-line-2: #CFD6E0; --q-azul: #204C97; --q-ink: #101A2C; --q-ink-3: #8E99AB; }

/* Once campos ocupaban demasiado alto. Cada rótulo va en su propio <span>, en
   una sola línea junto al asterisco de obligatorio, y el control debajo bien
   pegado: así el bloque «rótulo + campo» mide poco más que el campo solo. */
.q-form label { display: grid; gap: .2rem; font-size: .78rem; font-weight: 700; color: var(--p-navy); }
.q-form label > span { display: block; line-height: 1.25; }
.q-form label b { color: var(--p-rojo); font-weight: 700; }
.q-form label i { font-style: normal; font-weight: 400; color: var(--p-ink-3); }
.q-form input, .q-form select, .q-form textarea { padding: .62rem .8rem; font-size: .88rem; }
.q-form { gap: .55rem; }
.q-form textarea {
    width: 100%; border: 1px solid var(--q-line-2); border-radius: var(--q-r-sm, 9px);
    background: var(--q-ground); font: inherit; color: var(--q-ink); resize: vertical;
}
.q-form textarea:focus { outline: none; border-color: var(--q-azul); background: #fff; }
.q-alert { margin-top: 1.2rem; padding: .8rem 1rem; border-radius: 10px; font-size: .88rem; }
.q-alert--ok    { background: #E8F5EC; border: 1px solid #BFE0C9; color: #1D6A34; }
.q-alert--error { background: #FDECEC; border: 1px solid #F3C5C3; color: #A3251F; }

/* La columna izquierda son dos tarjetas apiladas —el aporte y, debajo, los
   datos de contacto directo—; la derecha es el formulario, que por sí solo mide
   casi lo mismo que las dos juntas. */
.q-col { display: grid; gap: var(--q-gap, 14px); align-content: start; }
.q-info {
    background: var(--q-white, #fff); border: 1px solid var(--q-line, #E4E7EC);
    border-radius: var(--q-r, 14px); padding: clamp(1.4rem, 1rem + 1.6vw, 2.1rem);
}
.q-info h3 {
    margin-top: .5rem; font-family: inherit; font-weight: 800; text-transform: none;
    letter-spacing: -.02em; line-height: 1.15; font-size: 1.2rem; color: var(--p-navy);
}
.q-info__list { display: grid; gap: .85rem; margin-top: 1.2rem; }
.q-info__list small {
    display: block; font-size: .68rem; font-weight: 700; letter-spacing: .16em;
    text-transform: uppercase; color: var(--p-ink-3); margin-bottom: .2rem;
}
.q-info__list a {
    display: inline-flex; align-items: center; gap: .5rem;
    font-size: .92rem; font-weight: 700; color: var(--p-navy); transition: color var(--p-t);
}
.q-info__list a:hover { color: var(--p-azul); }
.q-info__list svg { width: 16px; height: 16px; flex: none; color: var(--p-azul); }
.q-info__soc { display: flex; gap: .5rem; margin-top: 1.3rem; padding-top: 1.2rem; border-top: 1px solid var(--q-line, #E4E7EC); }
.q-info__soc a {
    display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%;
    border: 1px solid var(--p-line-2); color: var(--p-ink-2); transition: var(--p-t);
}
.q-info__soc a:hover { background: var(--p-navy); border-color: var(--p-navy); color: #fff; }
.q-info__soc svg { width: 16px; height: 16px; }

/* ==========================================================================
   Pie — copia del de /test3
   Las reglas van tal cual están en /test3/propuesta.css, con las variables que
   usan definidas sobre el propio .q-foot, igual que se hizo con el bloque de
   cierre: así el pie se ve idéntico al de la v3 sin arrastrar el resto de
   aquella hoja ni pisar nada del prefijo .p-.
   ========================================================================== */
.q-foot {
    --q-ink:  #101A2C;
    --q-ease: cubic-bezier(.3,.7,.4,1);
    --q-t:    .25s var(--q-ease);

    font-family: 'Manrope VF', 'Manrope', 'Helvetica Neue', Arial, sans-serif;
    background: var(--q-ink); color: rgba(255,255,255,.56);
    margin-top: clamp(2.4rem, 1.6rem + 3vw, 4rem);
    padding-top: clamp(2.4rem, 1.8rem + 2.6vw, 3.6rem);
}
.q-foot__grid { display: grid; grid-template-columns: 1.7fr 1fr 1fr 1.4fr; gap: 2.2rem; padding-bottom: 2.4rem; }
@media (max-width: 900px) { .q-foot__grid { grid-template-columns: 1fr 1fr; gap: 1.9rem; } }
@media (max-width: 520px) { .q-foot__grid { grid-template-columns: 1fr; } }
.q-foot__logo {
    display: block; width: 186px; aspect-ratio: 842/183; background-color: #fff;
    -webkit-mask: url('/assets/img/logo-brand.png') left center / contain no-repeat;
            mask: url('/assets/img/logo-brand.png') left center / contain no-repeat;
}
.q-foot__grid > div > p { margin: .9rem 0 0; font-size: .88rem; line-height: 1.7; max-width: 32ch; }
/* En /final los h4 son Barlow Condensed en versalitas; el pie de la v3 los
   quiere en caja baja y peso 800, como el resto de esa propuesta. */
.q-foot h4 {
    font-family: inherit; font-size: .87rem; font-weight: 800; text-transform: none;
    letter-spacing: -.02em; line-height: 1.2; color: #fff; margin: 0 0 .8rem;
}
.q-foot__col a { display: flex; align-items: center; gap: .5rem; padding: .26rem 0; font-size: .88rem; font-weight: 500; color: rgba(255,255,255,.56); transition: color var(--q-t); }
.q-foot__col a:hover { color: #fff; }
.q-foot__col svg { width: 14px; height: 14px; flex: none; color: rgba(255,255,255,.34); }
.q-foot__soc { display: flex; gap: .5rem; margin-top: 1.2rem; }
.q-foot__soc a { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; border: 1px solid rgba(255,255,255,.16); color: rgba(255,255,255,.6); transition: var(--q-t); }
.q-foot__soc a:hover { background: #fff; border-color: #fff; color: var(--q-ink); }
.q-foot__soc svg { width: 16px; height: 16px; }
.q-foot__bot { border-top: 1px solid rgba(255,255,255,.12); padding-block: 1.2rem; display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; font-size: .8rem; color: rgba(255,255,255,.38); }
.q-foot__bot a:hover { color: #fff; }

/* Tarjeta de la Cruzada en la cartelera: en vez de una foto, el antes y el
   después del mismo muro, apilados como en la portada. Las dos tomas son
   panorámicas (1600x388) y la tarjeta es 16/10, así que cada banda queda en
   8/2,5: entran de lado a lado casi sin recorte. El 104% de ancho anclado a la
   izquierda corta la franja azul del visor de Street View pegada al canto. */
.p-ev__media--ba { display: grid; grid-template-rows: 1fr 1fr; gap: 2px; }
.p-ev__media--ba img { width: 104%; max-width: none; height: 100%; object-fit: cover; object-position: left center; }


/* ==========================================================================
   11. Conoce AR (/nosotros)
   ==========================================================================
   La página venía del marco antiguo (app.css) y aquí se rehace con las piezas
   de la portada. Solo se define lo que no existía ya: el resto —.p-phead,
   .p-sec, .p-kick, .p-h2, .p-btn, .p-team__it— es el mismo de las otras. */

/* Cabecera: el titular es una frase entera y la bajada un párrafo, no un lema
   de tres palabras. Se le da más ancho al bloque y se baja un punto el cuerpo
   del h1 para que no salgan cuatro líneas de mayúsculas condensadas. */
.p-phead--about .p-phead__in { max-width: 880px; }
.p-phead--about h1 { font-size: clamp(2.1rem, 1.4rem + 2.7vw, 3.4rem); }
.p-phead__lead--wide { max-width: 74ch; }

/* --- Propósito: declaración a la izquierda, desarrollo a la derecha ------- */
.p-split { display: grid; grid-template-columns: 5fr 7fr; gap: clamp(1.8rem, 1rem + 3vw, 4rem); align-items: start; }
@media (max-width: 880px) { .p-split { grid-template-columns: 1fr; } }
/* El titular acompaña a los párrafos mientras se leen; en pantallas cortas se
   suelta, porque pegarlo arriba dejaría el texto sin sitio. */
@media (min-width: 881px) and (min-height: 640px) {
    .p-split__l { position: sticky; top: calc(var(--p-head) + 2rem); }
}
.p-split__r { display: grid; gap: 1.1rem; }
.p-split__r p { color: var(--p-ink-2); font-size: 1rem; line-height: 1.8; }
/* El primer párrafo es la idea de la que cuelgan los otros dos. */
.p-split__r .p-split__first { font-size: 1.16rem; line-height: 1.65; color: var(--p-navy); font-weight: 700; }

/* --- Pilares: cinco columnas -------------------------------------------- */
/* Un pilar es alto y estrecho, así que la sección se compone como cinco fustes
   verticales y no como cinco fichas apaisadas. No hay recuadro, ni sombra, ni
   esquina redondeada, ni icono dentro de un cuadradito de color: el filete
   grueso de arriba hace de capitel y el hilo vertical separa una columna de la
   siguiente. Toda la sección es tipografía y reglas. */
.p-cols { display: grid; grid-template-columns: repeat(5, 1fr); margin-top: 2.6rem; }
/* El aire de abajo es lo que alarga el hilo divisorio más allá del texto: sin
   él las cinco columnas se quedan en una fila achaparrada y no en cinco fustes. */
.p-cols__it { padding: 0 clamp(1rem, .6rem + 1.2vw, 1.7rem) clamp(1.6rem, 1rem + 2.4vw, 3.4rem); }
/* El hilo va a la izquierda de cada columna salvo la primera: así el bloque no
   arranca ni termina con una línea suelta al aire. */
.p-cols__it + .p-cols__it { border-left: 1px solid var(--p-line-2); }
.p-cols__it:first-child { padding-left: 0; }
.p-cols__it:last-child { padding-right: 0; }
/* Capitel: un trazo corto y grueso, en los tres colores de la casa por turno. */
.p-cols__it::before {
    content: ''; display: block; width: 40px; height: 4px;
    background: var(--p-navy); margin-bottom: 1.5rem;
}
.p-cols__it:nth-child(2)::before, .p-cols__it:nth-child(5)::before { background: var(--p-rojo); }
.p-cols__it:nth-child(3)::before { background: var(--p-oro); }
.p-cols__it h3 {
    font-size: clamp(1.1rem, .95rem + .5vw, 1.42rem); line-height: 1.04;
    color: var(--p-navy); text-wrap: balance;
}
.p-cols__it p { margin-top: .85rem; font-size: .88rem; line-height: 1.75; color: var(--p-ink-2); }

/* A partir de aquí cinco columnas dejan de ser columnas y pasan a ser cinco
   rendijas: se reparten en dos filas y el hilo cambia de sitio con ellas. */
@media (max-width: 1080px) {
    .p-cols { grid-template-columns: repeat(3, 1fr); row-gap: 2.6rem; }
    .p-cols__it:nth-child(4) { padding-left: 0; border-left: 0; }
    .p-cols__it:nth-child(3) { padding-right: 0; }
}
/* En tableta tres columnas dejan una medida de ~28 caracteres, y justificado a
   esa medida se abren ríos de espacio entre palabras: pasan a dos antes. */
@media (max-width: 900px) {
    .p-cols { grid-template-columns: repeat(2, 1fr); }
    .p-cols__it { padding-inline: clamp(.9rem, .5rem + 1.5vw, 1.4rem); }
    .p-cols__it:nth-child(odd) { padding-left: 0; border-left: 0; }
    .p-cols__it:nth-child(even) { padding-right: 0; }
    .p-cols__it:nth-child(3) { padding-right: clamp(.9rem, .5rem + 1.5vw, 1.4rem); }
}
@media (max-width: 470px) {
    .p-cols { grid-template-columns: 1fr; row-gap: 2.2rem; }
    .p-cols__it, .p-cols__it:nth-child(n) { padding-inline: 0; border-left: 0; }
}

/* --- Director Ejecutivo --------------------------------------------------- */
/* Su reseña es diez veces más larga que la de los demás: en la grilla estiraba
   la fila entera. Aparte, y en horizontal, el texto tiene dónde correr. */
.p-dir {
    display: grid; grid-template-columns: minmax(0, 300px) 1fr; gap: clamp(1.5rem, 1rem + 2vw, 2.8rem);
    align-items: start; padding: clamp(1.5rem, 1rem + 2vw, 2.4rem);
    background: var(--p-paper); border: 1px solid var(--p-line); border-radius: var(--p-r-lg);
}
@media (max-width: 760px) { .p-dir { grid-template-columns: 1fr; } .p-dir__ph { max-width: 260px; } }
.p-dir__ph { position: relative; display: block; aspect-ratio: 3/4; border-radius: var(--p-r); overflow: hidden; background: var(--p-paper-2); }
.p-dir__ph img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(1) contrast(1.02); transition: filter .5s var(--p-ease), transform .6s var(--p-ease); }
.p-dir:hover .p-dir__ph img { filter: none; transform: scale(1.03); }
.p-dir__ph::after { content: ''; position: absolute; inset: 0; background: linear-gradient(0deg, rgba(15,37,71,.42), transparent 55%); }
.p-dir__cargo { display: block; font-size: .74rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: var(--p-rojo); }
.p-dir__body h3 { margin-top: .5rem; font-size: clamp(1.7rem, 1.3rem + 1.4vw, 2.3rem); color: var(--p-navy); }
.p-dir__body h3 a:hover { color: var(--p-azul); }
/* Un párrafo de este largo se lee mejor en una medida corta; el filete de oro
   lo separa del nombre sin meter una línea de más. */
.p-dir__body p {
    margin-top: 1.1rem; padding-top: 1.1rem; border-top: 2px solid var(--p-oro);
    max-width: 72ch; color: var(--p-ink-2); font-size: .95rem; line-height: 1.8;
}

/* --- Resto del directorio ------------------------------------------------- */
/* Rótulo de subdivisión: dentro de una sección que ya tiene su h2, este h3 no
   compite por tamaño; se apoya en el filete para marcar que abre un bloque. */
.p-subhead {
    display: flex; align-items: center; gap: 1rem; margin: clamp(2.4rem, 1.6rem + 2vw, 3.4rem) 0 1.6rem;
    font-size: 1.5rem; color: var(--p-navy);
}
.p-subhead::after { content: ''; flex: 1; height: 1px; background: var(--p-line-2); }

.p-dirgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.8rem 1.6rem; }
@media (max-width: 900px) { .p-dirgrid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .p-dirgrid { grid-template-columns: 1fr; } }
/* Tarjeta de persona con el rótulo dentro de la fotografía, como las del
   archivo: la foto es la tarjeta entera y el texto se apoya sobre ella. Es una
   pieza propia y no el .p-team__it del carril de la portada, que lleva el
   nombre debajo de la foto y no debe cambiar por esto. */
.p-mem {
    position: relative; display: block; overflow: hidden; aspect-ratio: 3/4;
    border-radius: var(--p-r); background: var(--p-paper-2);
    box-shadow: var(--p-sh-sm); transition: transform var(--p-t), box-shadow var(--p-t);
}
.p-mem:hover { transform: translateY(-4px); box-shadow: var(--p-sh); }
.p-mem__ph {
    position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center top;
    filter: grayscale(1) contrast(1.02); transition: filter .5s var(--p-ease), transform .6s var(--p-ease);
}
.p-mem:hover .p-mem__ph { filter: none; transform: scale(1.04); }
/* Velo de abajo hacia arriba. Los retratos tienen la cara en el tercio
   superior, así que puede ser opaco donde va el texto sin taparla. */
.p-mem__veil {
    position: absolute; inset: 0;
    background: linear-gradient(0deg,
        rgba(8,17,31,.96) 0%, rgba(8,17,31,.9) 32%, rgba(8,17,31,.5) 54%,
        rgba(8,17,31,.06) 76%, rgba(8,17,31,.14) 100%);
}
.p-mem__in { position: absolute; z-index: 2; left: 1.25rem; right: 1.25rem; bottom: 1.15rem; color: #fff; }
/* Sobre foto, el cargo va en oro: el rojo institucional pierde legibilidad
   contra un fondo oscuro y de contraste variable. */
.p-mem__cargo { display: block; font-size: .7rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: var(--p-oro); }
/* Los titulares van con line-height .95; en un nombre de dos líneas eso deja
   las tildes de las mayúsculas rozando la línea de abajo (BENJAMÍN / MORENO). */
.p-mem__name { margin-top: .38rem; font-size: 1.22rem; line-height: 1.06; color: #fff; text-wrap: balance; }
.p-mem__txt { margin-top: .55rem; font-size: .84rem; line-height: 1.6; color: rgba(255,255,255,.82); }

/* --- Justificado ---------------------------------------------------------- */
/* Los textos corridos de la página van con los dos márgenes rectos. La
   partición de palabras evita que justificar abra ríos de espacio en las
   medidas cortas —tarjetas de pilar y de miembro—; el idioma lo toma del
   lang="es" del documento. La bajada de la cabecera es la excepción: es la
   primera frase que se lee y un guion partiendo palabra ahí se nota. */
.p-phead__lead--wide,
.p-split__r p,
.p-cols__it p,
#directorio .p-lead,
.p-dir__body p,
.p-mem__txt { text-align: justify; }

.p-split__r p,
.p-cols__it p,
#directorio .p-lead,
.p-dir__body p,
.p-mem__txt { hyphens: auto; }

.p-phead__lead--wide { hyphens: none; }


/* ==========================================================================
   12. Súmate / Contacto (/contacto)
   ==========================================================================
   El formulario que se pinta aquí es views/partials/contacto-form.php tal
   cual, sin tocarle un campo: esa pieza la comparte /voluntarios, que sigue en
   app.css, así que su HTML —.field, .input, .select, .textarea, .combobox,
   .btn— no se puede cambiar. Lo que se hace es vestirlo: todo va colgado de
   .p-cform para que estas reglas no alcancen a ninguna otra página. */

.p-contact { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: clamp(1.6rem, 1rem + 2.4vw, 3rem); align-items: start; }
/* minmax(0,1fr) y no 1fr: el mínimo automático de una pista de rejilla es el
   ancho mínimo de su contenido, así que en pantallas de 320 px el formulario
   se salía cinco píxeles por la derecha en vez de encogerse. */
@media (max-width: 940px) { .p-contact { grid-template-columns: minmax(0, 1fr); } }

/* --- El formulario -------------------------------------------------------- */
/* Sin recuadro: el formulario se apoya directo en la página. Los campos ya
   tienen su propio fondo, así que la caja blanca con borde y sombra alrededor
   solo metía un marco de más y desalineaba el bloque respecto del titular de
   la cabecera. Los campos cortos van de a dos: el HTML no cambia —son once
   .field seguidos— y es la retícula la que los empareja. */
.p-cform form { display: grid; grid-template-columns: 1fr 1fr; column-gap: 1.1rem; }
/* De partida todo ocupa el ancho completo; abajo se rebaja a media columna lo
   que cabe de a dos. Si el navegador no entiende :has(), se queda en una
   columna: exactamente lo que había antes, nunca roto. */
.p-cform form > * { grid-column: 1 / -1; }
.p-cform form:has(.field) .field:has(input[name="nombre"]),
.p-cform form:has(.field) .field:has(input[name="apellido"]),
.p-cform form:has(.field) .field:has(input[name="rut"]),
.p-cform form:has(.field) .field:has(input[name="fecha_nacimiento"]),
.p-cform form:has(.field) .field:has(input[name="telefono"]),
.p-cform form:has(.field) .field:has(input[name="email"]),
.p-cform form:has(.field) .field:has(input[name="comuna"]),
.p-cform form:has(.field) .field:has(input[name="region"]) { grid-column: span 1; }
@media (max-width: 560px) { .p-cform form { grid-template-columns: 1fr; } .p-cform form > * { grid-column: 1 / -1; } }

/* Ahora que no hay caja, este rótulo y su filete son lo que abre el bloque. */
.p-cform form > h3 {
    font-size: 1.6rem; color: var(--p-navy);
    padding-bottom: .9rem; margin-bottom: 1.4rem; border-bottom: 2px solid var(--p-oro);
}
.p-cform .field { margin-bottom: 1rem; min-width: 0; }
.p-cform .field label {
    display: block; margin-bottom: .38rem;
    font-size: .78rem; font-weight: 700; color: var(--p-navy);
}
.p-cform .field label .req { color: var(--p-rojo); }
.p-cform .field label .muted { color: var(--p-ink-3); }

.p-cform .input, .p-cform .select, .p-cform .textarea {
    width: 100%; padding: .72rem .9rem;
    border: 1px solid var(--p-line-2); border-radius: var(--p-r-sm);
    background: var(--p-paper); color: var(--p-ink);
    font: inherit; font-size: .9rem;
    transition: border-color var(--p-t), background var(--p-t), box-shadow var(--p-t);
}
.p-cform .input::placeholder, .p-cform .textarea::placeholder { color: var(--p-ink-3); }
.p-cform .input:focus, .p-cform .select:focus, .p-cform .textarea:focus {
    outline: none; background: #fff; border-color: var(--p-azul);
    box-shadow: 0 0 0 3px rgba(32,76,151,.14);
}
.p-cform .textarea { min-height: 118px; resize: vertical; }
/* El <select> nativo pierde su flecha al cambiarle el fondo: se le dibuja una
   con la misma inclinación que el chevron del combobox de al lado. */
.p-cform .select {
    appearance: none; padding-right: 2.4rem;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238C99AD' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat; background-position: right .8rem center; background-size: 17px;
}

/* El combobox de región y comuna se define más abajo, para todo el marco: lo
   usan igual este formulario y el «Súmate» de la portada. */

/* El botón de envío es .btn.btn--block.btn--lg, del marco antiguo: aquí se le
   da el cuerpo de .p-btn--primary sin cambiarle una clase en el HTML. */
.p-cform .btn {
    display: inline-flex; align-items: center; justify-content: center; gap: .55rem;
    width: 100%; margin-top: .6rem; padding: 1rem 1.85rem;
    border: 0; border-radius: var(--p-r-sm); cursor: pointer;
    background: var(--p-azul); color: #fff;
    font-family: var(--p-sans); font-weight: 700; font-size: .95rem;
    box-shadow: 0 10px 24px rgba(32,76,151,.28);
    transition: background var(--p-t), transform var(--p-t), box-shadow var(--p-t);
}
.p-cform .btn:hover { background: var(--p-azul-hot); transform: translateY(-2px); box-shadow: 0 14px 30px rgba(32,76,151,.36); }
.p-cform .btn svg { width: 17px; height: 17px; flex: none; }

/* Avisos de envío correcto o con error. */
.p-cform .alert { margin-bottom: 1.1rem; padding: .85rem 1.05rem; border-radius: var(--p-r-sm); font-size: .9rem; font-weight: 700; }
.p-cform .alert--ok    { background: #E8F5EC; border: 1px solid #BFE0C9; color: #1D6A34; }
.p-cform .alert--error { background: #FDECEC; border: 1px solid #F3C5C3; color: #A3251F; }

/* --- Contacto directo, al costado ----------------------------------------- */
/* Acompaña al formulario mientras se rellena, en vez de esperar al final. */
.p-cinfo__box {
    position: sticky; top: calc(var(--p-head) + 1.4rem);
    padding: clamp(1.5rem, 1rem + 2vw, 2.2rem);
    background: var(--p-paper); border: 1px solid var(--p-line); border-radius: var(--p-r-lg);
}
@media (max-width: 940px) { .p-cinfo__box { position: static; } }
.p-cinfo__box h2 { margin-top: .8rem; font-size: clamp(1.35rem, 1.1rem + .8vw, 1.75rem); color: var(--p-navy); text-wrap: balance; }
.p-cinfo__list { margin-top: 1.6rem; display: grid; gap: 1.15rem; }
.p-cinfo__list small {
    display: block; margin-bottom: .3rem;
    font-size: .66rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: var(--p-ink-3);
}
.p-cinfo__list a {
    display: flex; align-items: center; gap: .55rem;
    font-size: .93rem; font-weight: 700; color: var(--p-navy); transition: color var(--p-t);
}
.p-cinfo__list a:hover { color: var(--p-azul); }
.p-cinfo__list svg { width: 16px; height: 16px; flex: none; color: var(--p-oro); }
.p-cinfo__soc { display: flex; gap: .5rem; margin-top: 1.8rem; padding-top: 1.5rem; border-top: 1px solid var(--p-line-2); }
.p-cinfo__soc a {
    display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%;
    border: 1px solid var(--p-line-2); color: var(--p-navy); background: #fff; transition: var(--p-t);
}
.p-cinfo__soc a:hover { background: var(--p-azul); border-color: var(--p-azul); color: #fff; transform: translateY(-3px); }
.p-cinfo__soc svg { width: 17px; height: 17px; }


/* ==========================================================================
   13. Combobox de región y comuna (escribir o desplegar)
   ==========================================================================
   Lo mueve assets/js/geo-combobox.js, que trabaja por id y por las clases
   .combobox / .combobox__toggle / .combobox__list / .combobox__opt y los
   estados .is-open y .is-active. Las reglas cuelgan de .p-body —la clase que
   pone layouts/portada— y no de una página: el buscador es el mismo en
   /contacto y en el «Súmate» de la portada, así que su aspecto se define una
   sola vez. Las páginas que siguen con app.css traen el suyo y no se tocan. */
.p-body .combobox { position: relative; }
.p-body .combobox input { padding-right: 2.5rem; }
.p-body .combobox__toggle {
    position: absolute; top: 50%; right: .5rem; transform: translateY(-50%);
    width: 28px; height: 28px; display: grid; place-items: center; padding: 0;
    background: none; border: 0; cursor: pointer; color: var(--p-ink-3); transition: color var(--p-t);
}
.p-body .combobox__toggle:hover { color: var(--p-azul); }
.p-body .combobox__toggle svg { width: 17px; height: 17px; transition: transform var(--p-t); }
.p-body .combobox.is-open .combobox__toggle svg { transform: rotate(180deg); }
.p-body .combobox__list {
    position: absolute; z-index: 40; top: calc(100% + 5px); left: 0; right: 0;
    max-height: 264px; overflow-y: auto; margin: 0; padding: .3rem; list-style: none;
    background: #fff; border: 1px solid var(--p-line); border-radius: var(--p-r-sm); box-shadow: var(--p-sh);
}
.p-body .combobox__list[hidden] { display: none; }
.p-body .combobox__opt {
    display: flex; align-items: center; justify-content: space-between; gap: .7rem;
    padding: .5rem .65rem; border-radius: 7px; cursor: pointer;
    font-family: var(--p-sans); font-size: .9rem; font-weight: 400; color: var(--p-ink);
}
/* En el «Súmate» de la portada el campo mide media fila, y ahí el nombre de la
   comuna se partía en dos líneas para dejarle sitio entero al de la región.
   Manda el nombre: ocupa lo que necesita y es la región la que se recorta. */
.p-body .combobox__opt > span {
    flex: 1 1 auto; min-width: 0;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
/* El factor de encogimiento alto hace que sea la región la que ceda todo el
   ancho que falte, en vez de repartirse el recorte con el nombre. */
.p-body .combobox__opt small {
    flex: 0 999 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    font-size: .72rem; color: var(--p-ink-3);
}
.p-body .combobox__opt:hover, .p-body .combobox__opt.is-active { background: var(--p-azul-soft); }
.p-body .combobox__opt mark { background: none; color: var(--p-azul); font-weight: 700; }
.p-body .combobox__empty { padding: .55rem .65rem; font-size: .88rem; color: var(--p-ink-3); }

/* En el «Súmate» de la portada el combobox va dentro de un <label> en rejilla:
   el <div> tiene que ocupar la fila entera para que el campo no se encoja. */
.q-form label > .combobox { display: block; }


/* ==========================================================================
   14. Aportes (/donaciones)
   ==========================================================================
   El formulario es el mismo de siempre, con sus clases del marco antiguo
   (.field, .input, .amount-grid, .trust, .btn--accent) y sus estilos en línea.
   Se viste con .p-cform, igual que /contacto, y aquí se añade lo que ese
   formulario tiene de propio: la rejilla de montos y la línea de confianza. */

/* Las variables que nombran los estilos en línea del formulario. Sin esto,
   `border-top: 1px solid var(--color-line)` no resuelve y el <hr> desaparece,
   y los `margin: var(--space-3)` se quedan en cero. Van sobre .p-don para no
   filtrarse al resto del marco. */
.p-don {
    --color-line: var(--p-line-2);
    --space-2: 1rem; --space-3: 1.5rem; --space-4: 2rem; --space-5: 3rem;
    --fs-h2: clamp(1.6rem, 1.1rem + 2vw, 2.5rem);
}

/* Dos columnas separadas por un hilo, sin encajonar ninguna: el formulario se
   apoya en la página como el de /contacto. */
.p-don { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: clamp(2rem, 1.2rem + 3vw, 4rem); align-items: start; }
.p-don__form { position: relative; }
.p-don__form::before {
    content: ''; position: absolute; top: 0; bottom: 0; left: calc(clamp(2rem, 1.2rem + 3vw, 4rem) / -2);
    width: 1px; background: var(--p-line-2);
}
@media (max-width: 940px) {
    /* En celular, aportar primero y el porqué después: es a lo que se viene. */
    .p-don { grid-template-columns: 1fr; gap: clamp(2.4rem, 2rem + 2vw, 3.4rem); }
    .p-don__why { order: 2; }
    .p-don__form::before { display: none; }
}

/* --- Columna «Por qué aportar» -------------------------------------------- */
/* Tres destinos, en renglones con filete. El icono va en oro y sin caja. */
.p-dest { list-style: none; margin: 2.2rem 0 0; padding: 0; border-top: 1px solid var(--p-line); }
.p-dest li {
    display: grid; grid-template-columns: 2rem 1fr; gap: .35rem 1rem;
    padding-block: 1.25rem; border-bottom: 1px solid var(--p-line);
}
.p-dest__ic { grid-row: 1 / span 2; align-self: start; margin-top: .1rem; color: var(--p-oro); }
.p-dest__ic svg { width: 22px; height: 22px; }
.p-dest h3 { font-size: 1.24rem; color: var(--p-navy); }
.p-dest p { color: var(--p-ink-2); font-size: .92rem; line-height: 1.72; text-align: justify; hyphens: auto; }
.p-don__unica { margin: 2rem 0 1.1rem; color: var(--p-ink-2); font-size: .92rem; line-height: 1.7; }

/* --- Lo propio del formulario de aporte ----------------------------------- */
.p-cform .donate__panel { display: block; }
.p-cform .donate__panel > h3 {
    font-size: 1.6rem; color: var(--p-navy);
    padding-bottom: .9rem; margin-bottom: 1.4rem; border-bottom: 2px solid var(--p-oro);
}
/* Rótulo suelto («Selecciona un monto mensual»): el formulario lo trae fuera de
   un .field, con su tamaño en línea; aquí solo se le da el color de los demás. */
.p-cform .donate__panel > label { color: var(--p-navy); }

/* Los cuatro montos en una fila; en cuanto no caben, de a dos. */
.p-cform .amount-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(108px, 1fr)); gap: .6rem; margin-bottom: 1.1rem; }
/* En celular auto-fit metía tres arriba y dejaba el cuarto solo abajo; con dos
   columnas fijas quedan dos filas parejas. */
@media (max-width: 560px) { .p-cform .amount-grid { grid-template-columns: 1fr 1fr; } }
.p-cform .amount-opt { position: relative; }
.p-cform .amount-opt input { position: absolute; opacity: 0; pointer-events: none; }
.p-cform .amount-opt label {
    display: block; text-align: center; padding: .85rem .5rem; cursor: pointer;
    border: 1px solid var(--p-line-2); border-radius: var(--p-r-sm); background: var(--p-paper);
    font-family: var(--p-display); font-size: 1.28rem; font-weight: 700; letter-spacing: .01em; color: var(--p-navy);
    transition: border-color var(--p-t), background var(--p-t), color var(--p-t), box-shadow var(--p-t);
}
.p-cform .amount-opt label:hover { border-color: var(--p-line-2); background: var(--p-azul-soft); }
.p-cform .amount-opt input:checked + label {
    border-color: var(--p-azul); background: var(--p-azul-soft); color: var(--p-azul);
    box-shadow: inset 0 0 0 1px var(--p-azul);
}
/* El foco del teclado se ve en la ficha, porque el radio está oculto. */
.p-cform .amount-opt input:focus-visible + label { outline: 3px solid var(--p-oro); outline-offset: 2px; }

/* Pares de campos que el formulario ya trae agrupados. */
.p-cform .field__row { display: grid; grid-template-columns: 1fr 1fr; gap: 0 1.1rem; }
@media (max-width: 560px) { .p-cform .field__row { grid-template-columns: 1fr; } }

/* Líneas de confianza: el aviso del comprobante y el sello de Reveniu. */
.p-cform .trust { display: flex; align-items: center; gap: .55rem; color: var(--p-ink-2); font-size: .84rem; line-height: 1.5; }
.p-cform .trust svg { width: 17px; height: 17px; flex: none; color: #1F7A4D; }
/* El botón de aporte es .btn--accent: rojo, no azul como el de /contacto. */
.p-cform .btn--accent { background: var(--p-rojo); box-shadow: 0 10px 24px rgba(209,75,69,.3); }
.p-cform .btn--accent:hover { background: var(--p-rojo-hot); box-shadow: 0 14px 30px rgba(209,75,69,.38); }

/* La tarjeta de datos bancarios trae sus propios estilos; solo se la separa. */
.p-don .transf { margin-top: .2rem; }


/* ==========================================================================
   15. Ficha de miembro (/miembros/{slug})
   ==========================================================================
   La ficha no abre con banda: empieza en blanco, con el retrato al lado del
   nombre, como estaba antes de migrar a este diseño. Lo que cambia es la
   tipografía del marco nuevo, la fotografía sin recuadro y los dos textos
   corridos con los dos márgenes rectos. */

.p-mprof-sec { padding-top: clamp(1.5rem, 1rem + 1.6vw, 2.4rem); }

/* Migas de pan para una página que no abre sobre negro: las de .p-crumb están
   pensadas en blancos translúcidos y aquí no se leerían. */
.p-crumb--ink { color: var(--p-ink-3); }
.p-crumb--ink a { color: var(--p-ink-2); }
.p-crumb--ink a:hover { color: var(--p-azul); }
.p-crumb--ink span { color: var(--p-line-2); }

.p-mprof {
    display: grid; grid-template-columns: clamp(210px, 26vw, 320px) minmax(0, 1fr);
    gap: clamp(1.8rem, 1.2rem + 3vw, 4rem); align-items: start;
}

/* Retrato en color: en el directorio las fichas van en blanco y negro, y llegar
   aquí es lo que devuelve el color. El marco de oro desplazado le da fondo sin
   encajonarlo; la foto va por encima para que solo asomen los cantos de abajo
   y de la derecha. */
.p-mprof__ph { position: relative; margin: 0; }
.p-mprof__ph img {
    position: relative; z-index: 1;
    display: block; width: 100%; aspect-ratio: 4 / 5; object-fit: cover; object-position: center 12%;
    border-radius: var(--p-r); box-shadow: var(--p-sh);
}
.p-mprof__ph::before {
    content: ''; position: absolute; z-index: 0; inset: 16px -16px -16px 16px;
    border: 1px solid rgba(201,169,97,.6); border-radius: var(--p-r);
}

/* text-wrap:balance reparte las dos líneas: sin él «GARCÍA-HUIDOBRO» se partía
   por su propio guion y el apellido quedaba a caballo entre dos renglones. */
.p-mprof h1 {
    margin-top: .55rem; font-size: clamp(1.9rem, 1.2rem + 2.6vw, 3.1rem);
    color: var(--p-navy); text-wrap: balance;
}

/* El resumen de una línea va más grande y más oscuro que la reseña: es lo que
   se lee de pasada, como en la ficha anterior. */
.p-mprof__lead { margin-top: 1.1rem; max-width: 66ch; color: var(--p-ink); font-size: 1.1rem; line-height: 1.75; }

/* La reseña larga, separada del resumen por el filete de oro y en medida de
   lectura: es lo que hace legible un párrafo de 900 caracteres. */
.p-mbio { margin-top: 1.7rem; padding-top: 1.5rem; border-top: 2px solid var(--p-oro); max-width: 74ch; }
.p-mbio p { color: var(--p-ink-2); font-size: 1rem; line-height: 1.85; }

/* Los dos textos corridos de la ficha, con los dos márgenes rectos. */
.p-mprof__lead, .p-mbio p { text-align: justify; hyphens: auto; }

/* Redes: hoy ninguna ficha las trae, pero el campo existe en la tabla. */
.p-mprof__soc { display: flex; gap: .6rem; margin-top: 1.8rem; }
.p-mprof__soc a {
    display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%;
    border: 1px solid var(--p-line-2); color: var(--p-ink-2); transition: var(--p-t);
}
.p-mprof__soc a:hover { border-color: var(--p-oro); color: var(--p-oro); background: var(--p-oro-soft); }
.p-mprof__soc svg { width: 17px; height: 17px; }

@media (max-width: 760px) {
    /* Apilado, el retrato a media columna: a ancho completo se comía la
       pantalla entera antes de llegar al nombre. */
    .p-mprof { grid-template-columns: 1fr; gap: 1.7rem; }
    .p-mprof__ph { width: min(62%, 240px); }
    .p-mprof__ph::before { inset: 12px -12px -12px 12px; }
}


/* ==========================================================================
   16. Pantallas táctiles
   ==========================================================================
   Lo que se pulsa con el dedo necesita más superficie que lo que se apunta con
   el ratón. Va colgado de (pointer: coarse) y no de un ancho: una tableta de
   1024 px se toca igual que un teléfono, y un portátil de 1024 px no. Solo
   cambia la superficie sensible; el dibujo se queda como está. */
@media (pointer: coarse) {
    /* Enlaces del pie: eran renglones de 32 px de alto. */
    .q-foot__col a { padding-block: .6rem; }
    .q-foot__soc a { width: 44px; height: 44px; }
    .q-foot__bot a { display: inline-block; padding-block: .5rem; }
    /* Cintillo superior: iconos de 26 px y un enlace de 20. */
    .p-top__soc a { width: 34px; height: 34px; }
    .p-top__link { display: inline-flex; align-items: center; height: 34px; }
    /* Migas de pan. */
    .p-crumb a { padding-block: .45rem; }
    /* Desplegable de comuna y región: el chevrón medía 28×28. */
    .p-body .combobox__toggle { width: 42px; height: 42px; right: .15rem; }
    /* Puntos del carrusel de la portada: la barra sigue midiendo 4 px, pero el
       borde transparente le da 28 de alto sensible sin que se note. */
    .p-hero__dots button {
        height: 28px; border-block: 12px solid transparent;
        background-clip: content-box;
    }
    .p-hero__dots button.is-on { background-clip: content-box; }
    /* Datos de contacto de la portada: correo, teléfono y dirección medían 24 px
       de alto, y son justo los que se pulsan para llamar o escribir. */
    .q-info__list a { padding-block: .5rem; }
    /* Redes: las de la portada, las de la ficha de miembro y las de contacto. */
    .q-info__soc a, .p-mprof__soc a, .p-cinfo__soc a { width: 44px; height: 44px; }
}


/* ==========================================================================
   17. Portadas en el teléfono
   ==========================================================================
   Medido a 390×844: la banda de /nosotros ocupaba el 59 % de la pantalla y la
   de la portada el 76 %, así que había que desplazarse para llegar a lo que la
   página venía a contar. En un teléfono la cabecera tiene que presentar y
   apartarse. No se quita ni una palabra: bajan el cuerpo de letra, los aires y
   la altura mínima, que es de donde salía el bulto.

   Va a 560 px y no a los 700 del resto de reglas móviles: entre 561 y 700 —los
   teléfonos grandes de lado y las tabletas chicas— la banda todavía cabe. */
@media (max-width: 560px) {

    /* --- Bandas de página (/eventos, /archivo, /nosotros, /donaciones,
           /contacto, álbum y colección) --------------------------------- */
    .p-phead { min-height: 220px; padding-block: 2.1rem; }

    /* Un titular de tres líneas a 38 px se comía media pantalla él solo. */
    .p-phead h1,
    .p-phead--sub h1,
    .p-phead--about h1 { font-size: clamp(1.7rem, 1.05rem + 3.1vw, 2.2rem); line-height: 1; }

    .p-crumb { margin-bottom: .8rem; font-size: .74rem; }

    /* La bajada pasa a ser lo que es en un teléfono: la letra pequeña de la
       cabecera, no un segundo titular. */
    .p-phead__lead { font-size: .88rem; line-height: 1.6; margin-top: .75rem; }

    /* Fichas de vidrio de la agenda. */
    .p-phead__meta { margin-top: 1.1rem; gap: .4rem; }
    .p-phead__meta li { font-size: .72rem; padding: .34rem .62rem; }
    .p-phead__count { margin-top: 1rem; font-size: .72rem; }

    /* --- Héroe de la portada (/) ------------------------------------------ */
    /* El texto del héroe vive en una capa absoluta (.p-hero__body, inset:0)
       apoyada abajo, porque las diapositivas del carrusel van superpuestas y el
       escenario necesita una altura propia. Si el contenido no cabe en esa
       altura, no empuja: se desborda hacia arriba y se mete debajo del
       encabezado, que es pegajoso y va por delante (z-index 60). Medido a
       320 px, el titular ya asomaba 4 px por debajo de la cabecera.

       Se arregla por los dos lados: el contenido pide menos alto —los dos
       botones se ponen en una fila cuando caben, en vez de uno sobre otro, que
       eran 127 px— y el escenario da algo más. El aire de abajo no se toca:
       son los 80 px que dejan sitio a los puntos del carrusel. */
    /* Las diapositivas dejan de estar superpuestas «al aire» y pasan a una sola
       celda de rejilla: siguen una encima de otra, pero ahora ocupan sitio, así
       que el escenario mide lo que mide la diapositiva más alta y el texto
       nunca tiene que salirse de la caja. Es lo que quita el solape de raíz, sin
       números mágicos: si mañana un evento trae un título más largo, la portada
       crece sola en vez de meterse bajo el encabezado. */
    .p-hero__stage { display: grid; min-height: 420px; }
    /* Cada diapositiva se apoya abajo dentro de la celda: el escenario lo marca
       la más alta y las cortas siguen con el texto pegado al pie de la foto,
       como en el diseño de escritorio. */
    .p-hero__slide {
        position: relative; grid-area: 1 / 1;
        display: flex; flex-direction: column; justify-content: center;
    }
    /* Sin los puntos indicadores, el aire de abajo ya no tiene que reservarles
       sitio: eran los 5rem que separaban el texto de la barra de controles. */
    .p-hero__body { position: relative; inset: auto; padding-block: 1.7rem 2.4rem; }

    /* Los tres rectángulos que marcan la diapositiva actual se quitan en el
       teléfono. Las flechas ya estaban ocultas desde 700 px, así que la barra
       de controles entera se va: los botones siguen en el documento —el guion
       del carrusel los usa para marcar cuál está activa— pero no se pintan. */
    .p-hero__ctrl { display: none; }

    /* Las diapositivas de evento son las que mandan sobre la altura: título
       largo y cuatro fichas de datos que a 320 px caen una por renglón. */
    .p-hero h2.p-hero__t { font-size: clamp(1.6rem, 1rem + 3.4vw, 2.3rem); }
    .p-hero__meta { gap: .3rem; margin-top: .9rem; }
    .p-hero__meta li { font-size: .7rem; padding: .26rem .58rem; }
    .p-hero__meta svg { width: 13px; height: 13px; }
    .p-hero h1, .p-hero h2.p-hero__t { font-size: clamp(1.95rem, 1.15rem + 4.3vw, 2.9rem); margin-top: .85rem; }
    .p-hero__sub { font-size: .86rem; line-height: 1.58; margin-top: .75rem; }
    .p-hero__tag { font-size: .66rem; padding: .3rem .7rem; }
    .p-hero__cta { margin-top: 1.1rem; gap: .5rem; }
    /* flex:1 1 auto en lugar del 1 1 100% de la regla de 700 px: los dos caben
       en una fila desde ~360 px y, donde no caben, cada uno se sigue yendo a su
       renglón a ancho completo. */
    .p-hero__cta .p-btn { flex: 1 1 auto; padding: .78rem 1.05rem; font-size: .84rem; }
}


/* ==========================================================================
   18. Pie de página en el teléfono
   ==========================================================================
   Apilado en una sola columna, el pie eran cuatro bloques seguidos y unos
   700 px de desplazamiento para tres listas de cuatro enlaces cortos. Aquí se
   reordena: la marca arriba a ancho completo, las dos listas cortas en paralelo
   y los datos de contacto abajo, también a ancho completo porque el correo no
   cabe en media columna. No cambia ni un texto ni un enlace. */
@media (max-width: 560px) {
    .q-foot { padding-top: 2.2rem; }

    .q-foot__grid { grid-template-columns: 1fr 1fr; gap: 1.7rem 1.2rem; padding-bottom: 1.9rem; }
    /* El bloque de marca (logotipo, lema y redes) y el de contacto ocupan la
       fila entera; «Movimiento» y «Participa» se reparten la de en medio. */
    .q-foot__grid > div:first-child,
    .q-foot__col:last-child { grid-column: 1 / -1; }

    /* Un filete separa la marca de las listas: sin él los cuatro bloques se
       leían como una sola lista larga. */
    .q-foot__grid > div:first-child { padding-bottom: 1.6rem; border-bottom: 1px solid rgba(255,255,255,.12); }

    .q-foot__logo { width: 158px; }
    .q-foot__grid > div > p { margin-top: .8rem; font-size: .85rem; line-height: 1.65; }
    .q-foot__soc { margin-top: 1rem; }

    .q-foot h4 { margin-bottom: .5rem; font-size: .84rem; }
    .q-foot__col a { font-size: .86rem; }

    /* Los datos de contacto, ya a ancho completo, se separan de las dos listas
       con su propio filete para que no parezcan una tercera columna suelta. */
    .q-foot__col:last-child { padding-top: 1.4rem; border-top: 1px solid rgba(255,255,255,.12); }

    /* Abajo, el aviso y el acceso en dos renglones: en una sola línea el
       «Acceder» quedaba colgado al otro extremo de un texto de dos líneas. */
    .q-foot__bot { flex-direction: column; align-items: flex-start; gap: .2rem; padding-block: 1rem; }
}


/* ==========================================================================
   19. Ficha de actividad (/eventos/{slug})
   ==========================================================================
   La página venía del marco antiguo mientras la agenda que lleva hasta ella ya
   estaba en este diseño. Se viste igual que /donaciones: banda arriba, dos
   columnas debajo —contenido y datos— y el formulario del panel colgado de
   .p-cform sin tocarle un campo. */

/* Las variables de app.css que nombran los estilos en línea del formulario y de
   la tarjeta; van sobre .p-evd para no filtrarse al resto del marco. */
.p-evd {
    --color-line: var(--p-line-2);
    --space-2: 1rem; --space-3: 1.5rem; --space-4: 2rem; --space-5: 3rem; --space-6: 4rem;
}

/* --- Banda ---------------------------------------------------------------- */
/* La imagen de la actividad suele ser un afiche con texto: recortada a una
   franja se destroza. Aquí va desenfocada y solo pone el color; la buena se ve
   entera más abajo, en la columna de contenido. */
/* El desenfoque deja los bordes transparentes, así que la imagen tiene que
   sobresalir de la banda. Se hace estirando la caja (inset negativo) y no con
   un transform: escalada, la capa transformada ensanchaba el documento cuatro
   píxeles en pantallas de 320 px pese al recorte de la banda. */
.p-phead__ph--soft {
    filter: blur(24px) saturate(1.35) brightness(.68);
    inset: -44px; width: auto; height: auto; transform: none; animation: none;
}
.p-phead--ev { min-height: clamp(280px, 34vh, 400px); }

/* Tipo y estado, en las fichas de vidrio de las demás bandas. El estado lleva
   un punto de color, como las tarjetas de la agenda. */
.p-evd__tags { margin-top: 0; margin-bottom: 1.1rem; }
.p-evd__estado::before {
    content: ''; width: 7px; height: 7px; border-radius: 50%; flex: none;
    background: var(--p-ink-3);
}
.p-evd__estado.is-open::before { background: #38B26B; }
.p-evd__estado.is-live::before { background: var(--p-oro); }
.p-evd__estado.is-soon::before { background: var(--p-azul-hot); }
.p-evd__estado.is-closed::before,
.p-evd__estado.is-done::before { background: rgba(255,255,255,.4); }

/* --- Dos columnas --------------------------------------------------------- */
.p-evd { display: grid; grid-template-columns: minmax(0, 1.65fr) minmax(0, 1fr); gap: clamp(1.8rem, 1.2rem + 2.6vw, 3.4rem); align-items: start; }
@media (max-width: 940px) { .p-evd { grid-template-columns: minmax(0, 1fr); } }

/* La fotografía, entera y sin recortar: es lo que anuncia la actividad. */
.p-evd__media { margin: 0 0 clamp(1.8rem, 1.2rem + 2vw, 2.6rem); }
.p-evd__media img { display: block; width: 100%; height: auto; border-radius: var(--p-r); box-shadow: var(--p-sh); }

.p-evd__bloque { margin-top: clamp(2.4rem, 1.8rem + 2.4vw, 3.6rem); }
.p-evd__h2 { margin-top: .7rem; margin-bottom: 1.1rem; font-size: clamp(1.5rem, 1.2rem + 1.2vw, 2rem); color: var(--p-navy); }
.p-evd__prosa p { color: var(--p-ink-2); font-size: 1rem; line-height: 1.85; text-align: justify; hyphens: auto; }
.p-evd__prosa p + p { margin-top: .9rem; }
.p-evd__nota { margin: 0 0 1.2rem; color: var(--p-ink-2); font-size: .92rem; line-height: 1.7; }
.p-evd__nota b { color: var(--p-navy); }

/* --- Sesiones ------------------------------------------------------------- */
/* Veinticuatro renglones seguidos son un muro: el filete y el icono en oro dan
   dónde apoyar la vista, y en pantalla ancha van a dos columnas. */
.p-evd__ses { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 0 2rem; border-top: 1px solid var(--p-line); }
@media (max-width: 720px) { .p-evd__ses { grid-template-columns: 1fr; } }
.p-evd__ses li { display: grid; grid-template-columns: 1.6rem 1fr; gap: .1rem .8rem; padding-block: .85rem; border-bottom: 1px solid var(--p-line); }
.p-evd__ses-ic { grid-row: 1 / span 2; align-self: start; margin-top: .15rem; color: var(--p-oro); }
.p-evd__ses-ic svg { width: 17px; height: 17px; }
/* El rótulo y el detalle van uno debajo del otro: el marcado los trae dentro de
   un mismo <div>, así que en línea se pegaban («9 de julio de 2026 18:30 hrs»). */
.p-evd__ses b { display: block; font-family: var(--p-sans); font-size: .95rem; font-weight: 700; color: var(--p-navy); }
.p-evd__ses span { display: block; margin-top: .15rem; font-size: .86rem; color: var(--p-ink-2); }
.p-evd__ses .is-cancel { opacity: .55; }
.p-evd__ses .is-cancel b { text-decoration: line-through; }

/* --- Avisos --------------------------------------------------------------- */
.p-aviso {
    display: flex; align-items: flex-start; gap: .7rem; margin-bottom: 1.4rem;
    padding: .9rem 1.1rem; border-radius: var(--p-r-sm);
    font-size: .92rem; line-height: 1.6;
}
.p-aviso svg { width: 18px; height: 18px; flex: none; margin-top: .15rem; }
.p-aviso--info  { background: var(--p-azul-soft); border: 1px solid #B9CDF3; color: var(--p-azul); }
.p-aviso--error { background: #FCEDEC; border: 1px solid #EFC3C0; color: #9B2C25; }
.p-aviso--aviso { background: var(--p-oro-soft); border: 1px solid #E4CE9A; color: #7A5200; }
.p-aviso b { font-weight: 800; }

/* --- Columna de datos ----------------------------------------------------- */
.p-evd__aside { position: sticky; top: calc(var(--p-head) + 1.2rem); }
@media (max-width: 940px) { .p-evd__aside { position: static; } }
.p-evd__card { background: var(--p-paper); border: 1px solid var(--p-line); border-radius: var(--p-r-lg); padding: clamp(1.3rem, 1rem + 1vw, 1.8rem); }
.p-evd__precio {
    font-family: var(--p-display); font-size: clamp(1.9rem, 1.5rem + 1.4vw, 2.6rem); line-height: 1;
    color: var(--p-navy); padding-bottom: 1.1rem; border-bottom: 2px solid var(--p-oro);
}
.p-evd__precio small { display: block; margin-top: .5rem; font-family: var(--p-sans); font-size: .8rem; font-weight: 700; letter-spacing: .04em; color: var(--p-ink-2); }

.p-evd__datos { list-style: none; margin: 1.3rem 0 0; padding: 0; display: grid; gap: 1.1rem; }
.p-evd__datos li { display: grid; grid-template-columns: 1.5rem 1fr; gap: .1rem .75rem; }
.p-evd__datos svg { grid-row: 1 / span 2; align-self: start; margin-top: .15rem; width: 17px; height: 17px; color: var(--p-oro); }
.p-evd__datos b { display: block; font-family: var(--p-sans); font-size: .94rem; font-weight: 700; color: var(--p-navy); }
.p-evd__datos span { display: block; margin-top: .2rem; font-size: .86rem; line-height: 1.6; color: var(--p-ink-2); }

.p-evd__cta { width: 100%; margin-top: 1.5rem; }
.p-evd__cta[disabled] { background: var(--p-paper-2); border-color: var(--p-line-2); color: var(--p-ink-3); cursor: not-allowed; }
.p-evd__cta[disabled]:hover { transform: none; }
.p-evd__trust { display: flex; align-items: center; gap: .55rem; margin: 1.1rem 0 0; font-size: .82rem; line-height: 1.5; color: var(--p-ink-2); }
.p-evd__trust svg { width: 17px; height: 17px; flex: none; color: #1F7A4D; }

/* --- Lo propio del formulario de inscripción ------------------------------ */
/* Lo pinta el panel evento por evento: además de los campos fijos puede traer
   preguntas de opción múltiple, casillas y cuadrículas. */
.p-cform .value-card { background: none; border: 0; box-shadow: none; padding: 0 !important; }
.p-cform .field__hint { margin-top: .8rem; font-size: .85rem; color: var(--p-ink-2); }
.p-cform .opts { display: flex; flex-direction: column; gap: .5rem; }
.p-cform .opt-row { display: flex; align-items: center; gap: .6rem; font-size: .92rem; color: var(--p-ink); cursor: pointer; }
.p-cform .opt-row input { width: 17px; height: 17px; accent-color: var(--p-azul); flex: none; }
.p-cform .table-wrap { overflow-x: auto; }
.p-cform .table { width: 100%; border-collapse: collapse; }
.p-cform .table th, .p-cform .table td { padding: .5rem .6rem; border-bottom: 1px solid var(--p-line); text-align: left; }
.p-cform .table th { font-size: .8rem; font-weight: 700; color: var(--p-navy); }
