@charset "UTF-8";

/* =========================================================================
   Sitio Rigo Chamorro — Intendente de Ciudad del Este
   Valores tomados literalmente del handoff de diseño. El rojo es #DD0000
   exacto: el cliente rechazó tonos más oscuros o apagados.
   ========================================================================= */

/* ---------- Fuentes autohospedadas ------------------------------------- */
/* Montserrat servida desde el propio dominio: sin conexión a Google, sin
   bloqueo de render por un tercero.

   Cada archivo está subseteado al repertorio que el sitio usa —español
   completo, guaraní, puntuación tipográfica y símbolos—, no sólo a los
   caracteres que hay hoy: editar un texto en data.php nunca deja un glifo
   sin fuente. Eso baja los 5 pesos de 184 KB a 73 KB.

   El subset incluye U+0303 (tilde combinante) y conserva las features
   'mark'/'mkmk': son las que apilan la tilde sobre la g del "g̃" guaraní.
   Sin ellas la tilde queda descolocada. */

@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/montserrat-400.woff2') format('woff2');
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../fonts/montserrat-500.woff2') format('woff2');
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../fonts/montserrat-600.woff2') format('woff2');
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('../fonts/montserrat-700.woff2') format('woff2');
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('../fonts/montserrat-800.woff2') format('woff2');
}

/* ---------- Tokens ------------------------------------------------------ */

:root {
  --rojo: #DD0000;
  --rojo-hover: #B30000;
  --rojo-link-hover: #A80000;
  /* Secundario: bordó. Reemplaza al negro en el footer. Con blanco encima da
     9,4:1 de contraste, bastante por encima del mínimo AA. */
  --bordo: #6E0A0A;
  --negro: #0F0F0F;
  --texto-cuerpo: #3D3936;
  --texto-secundario: #4B4744;
  --gris-apagado: #5F5B58;
  --gris-meta: #6B6764;
  --fondo-alt: #F7F5F4;
  --borde: #ECEAE8;
  --borde-input: #E4E1DE;
  --borde-boton: #D9D5D2;
  --verde-exito: #0F7A2E;

  --ancho-max: 1280px;
  --pad-seccion: 100px;
  --pad-lateral: 40px;

  --ease: cubic-bezier(.2, .7, .3, 1);
  --sombra-card: 0 12px 34px rgba(0, 0, 0, .09);
  --sombra-boton: 0 8px 20px rgba(0, 0, 0, .12);
}

/* ---------- Reset ------------------------------------------------------- */

*,
*::before,
*::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  /* Compensa el header sticky de ~115px al saltar a un ancla. */
  scroll-padding-top: 150px;
}

body {
  margin: 0;
  background: #fff;
  color: var(--negro);
  font-family: 'Montserrat', 'Helvetica Neue', Helvetica, Arial, system-ui, sans-serif;
  font-size: 17px;
  line-height: 1.65;
  text-wrap: pretty;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* clip, NO hidden: `overflow-x:hidden` en un ancestro del header rompe
     position:sticky y convierte a body en el contenedor de scroll, tirando
     abajo el smooth scroll y el scroll-padding-top. */
  overflow-x: clip;
}

img,
svg,
video { display: block; max-width: 100%; }

h1, h2, h3, p { margin: 0; }

a { color: var(--rojo); text-decoration: none; }
a:hover { color: var(--rojo-link-hover); }

button { font: inherit; }

/* Foco visible en todo lo interactivo: requisito de accesibilidad. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
label:focus-within {
  outline: 3px solid var(--rojo);
  outline-offset: 3px;
  border-radius: 2px;
}

/* Salto directo al contenido para quien navega con teclado o lector. */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 200;
  background: var(--rojo);
  color: #fff;
  padding: 12px 20px;
  font-weight: 700;
}
.skip-link:focus { left: 0; color: #fff; }

.visually-hidden {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* ---------- Layout ------------------------------------------------------ */

.pad { padding-left: var(--pad-lateral); padding-right: var(--pad-lateral); }

.contenedor { max-width: var(--ancho-max); margin: 0 auto; }

.seccion { padding-top: var(--pad-seccion); padding-bottom: var(--pad-seccion); }

.split { display: grid; gap: 64px; }

.eyebrow {
  color: var(--rojo);
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  margin-bottom: 18px;
}

.h1 {
  font-weight: 800;
  font-size: 54px;
  line-height: 1.05;
  letter-spacing: -1.6px;
}

.h2 {
  font-weight: 800;
  font-size: 42px;
  line-height: 1.1;
  letter-spacing: -1px;
}

.grid4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; }

/* ---------- Animaciones ------------------------------------------------- */

@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50%      { transform: scale(1.5); opacity: .45; }
}
@keyframes menuIn {
  from { opacity: 0; transform: translateY(-10px); }
  to   { opacity: 1; transform: none; }
}
@keyframes itemIn {
  from { opacity: 0; transform: translateX(-14px); }
  to   { opacity: 1; transform: none; }
}
@keyframes slideIn {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}

.reveal {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity .7s var(--ease), transform .7s var(--ease);
}
.reveal.in { opacity: 1; transform: none; }

/* Sin JS el contenido tiene que verse igual: se anula el estado inicial. */
.no-js .reveal { opacity: 1; transform: none; }

/* ---------- Header ------------------------------------------------------ */

.header { position: sticky; top: 0; z-index: 80; }

.franja {
  background: var(--rojo);
  color: #fff;
  padding: 11px 24px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  font-size: 14px;
  font-weight: 500;
  flex-wrap: wrap;
  text-align: center;
}
.franja a {
  color: #fff;
  font-weight: 700;
  border-bottom: 1px solid rgba(255, 255, 255, .5);
}
.franja a:hover { color: #fff; }

.badge {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  background: rgba(0, 0, 0, .22);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  padding: 3px 10px;
  border-radius: 3px;
}
.badge::before {
  content: '';
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #fff;
  animation: pulse 1.8s ease-in-out infinite;
}

.navbar {
  background: rgba(255, 255, 255, .97);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--borde);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-top: 16px;
  padding-bottom: 16px;
}

.navbar__logo img { height: 38px; width: auto; }

.nav-desktop { display: flex; gap: 24px; align-items: center; padding: 0 28px; }

.navlink {
  position: relative;
  display: block;
  padding: 6px 0;
  color: var(--negro);
  font-weight: 500;
  font-size: 15px;
  white-space: nowrap;
}
.navlink::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  height: 2px;
  width: 0;
  background: var(--rojo);
  transition: width .28s var(--ease);
}
.navlink:hover { color: var(--rojo); }
.navlink:hover::after,
.navlink.on::after { width: 100%; }
.navlink.on { color: var(--rojo); }

.navbar__acciones { display: flex; align-items: center; gap: 20px; }
.navbar__divisor { width: 1px; height: 28px; background: var(--borde-input); }
.navbar__anr { height: 28px; width: auto; }

.hamburguesa {
  display: none;
  flex-direction: column;
  gap: 5px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 4px;
}
.hamburguesa .bar {
  display: block;
  width: 22px;
  height: 2px;
  background: var(--negro);
  border-radius: 2px;
  transition: transform .3s var(--ease), opacity .2s;
}
.hamburguesa[aria-expanded='true'] .bar:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.hamburguesa[aria-expanded='true'] .bar:nth-child(2) { opacity: 0; transform: scaleX(.2); }
.hamburguesa[aria-expanded='true'] .bar:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

.nav-mobile {
  background: #fff;
  border-bottom: 1px solid var(--borde);
  display: flex;
  flex-direction: column;
  padding: 8px 24px 20px;
  box-shadow: 0 14px 30px rgba(0, 0, 0, .08);
  animation: menuIn .3s var(--ease) both;
}
.nav-mobile[hidden] { display: none; }
.nav-mobile a {
  padding: 15px 0;
  border-bottom: 1px solid #F1EFED;
  font-size: 17px;
  font-weight: 600;
  color: var(--negro);
  animation: itemIn .35s var(--ease) both;
}
.nav-mobile a.on { color: var(--rojo); }
/* Cascada de 45ms por ítem. */
.nav-mobile a:nth-child(1) { animation-delay: 0ms; }
.nav-mobile a:nth-child(2) { animation-delay: 45ms; }
.nav-mobile a:nth-child(3) { animation-delay: 90ms; }
.nav-mobile a:nth-child(4) { animation-delay: 135ms; }
.nav-mobile a:nth-child(5) { animation-delay: 180ms; }
.nav-mobile a:nth-child(6) { animation-delay: 225ms; }

/* ---------- Botones ----------------------------------------------------- */

.btn {
  display: inline-block;
  border-radius: 4px;
  font-weight: 600;
  font-size: 15px;
  padding: 15px 26px;
  cursor: pointer;
  text-align: center;
  transition: background .18s, border-color .18s, color .18s, transform .18s, box-shadow .18s;
}
.btn:hover { transform: translateY(-2px); box-shadow: var(--sombra-boton); }
.btn:active { transform: translateY(0) scale(.97); }

.btn--rojo { background: var(--rojo); color: #fff; border: 1px solid var(--rojo); }
.btn--rojo:hover { background: var(--rojo-hover); border-color: var(--rojo-hover); color: #fff; }

.btn--outline { background: #fff; color: var(--negro); border: 1px solid var(--borde-boton); }
.btn--outline:hover { background: #F5F3F2; color: var(--negro); }

.btn--nav { padding: 11px 24px; font-size: 14px; font-weight: 700; }

/* ---------- Video banner ------------------------------------------------ */

.videoband {
  position: relative;
  width: 100%;
  height: 540px;
  background: var(--negro);
  overflow: hidden;
}
.videoband video,
.videoband img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* El poster se pinta como imagen normal: es el LCP y se descarga con
   prioridad alta. El video lo tapa recién cuando puede reproducir. */
.videoband__poster {
  position: absolute;
  inset: 0;
  transition: opacity .5s ease;
}
.videoband.playing .videoband__poster { opacity: 0; }

/* ---------- Hero -------------------------------------------------------- */

.hero { padding-top: 72px; padding-bottom: 72px; }
.hero .split { grid-template-columns: 1.05fr 0.95fr; align-items: center; }

.pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--borde-input);
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 13px;
  font-weight: 600;
  color: var(--gris-apagado);
  margin-bottom: 26px;
}
.pill::before {
  content: '';
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--rojo);
}

.hero__bajada {
  font-size: 19px;
  line-height: 1.65;
  color: var(--texto-secundario);
  margin: 24px 0 34px;
  max-width: 520px;
}
.hero__botones { display: flex; gap: 12px; flex-wrap: wrap; }
.hero h1 { margin-bottom: 0; }

.countdown {
  background: var(--negro);
  border-radius: 14px;
  padding: 44px 36px;
  text-align: center;
}
.countdown__label {
  color: #fff;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  opacity: .6;
  margin-bottom: 8px;
}
.countdown__fecha {
  color: var(--rojo);
  font-size: 15px;
  font-weight: 700;
  margin-bottom: 26px;
}
.countdown__celdas { display: flex; gap: 12px; justify-content: center; }
.countdown__celda { flex: 1; }
.countdown__num {
  color: #fff;
  font-weight: 800;
  font-size: 40px;
  line-height: 1;
  background: rgba(255, 255, 255, .07);
  border: 1px solid rgba(255, 255, 255, .14);
  border-radius: 10px;
  padding: 18px 10px;
  /* Evita que el ancho salte al pasar de 9 a 10 o de 1 a 2 dígitos. */
  font-variant-numeric: tabular-nums;
}
.countdown__unidad {
  color: rgba(255, 255, 255, .6);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  margin-top: 10px;
}

/* ---------- Banda de datos ---------------------------------------------- */

.datos {
  border-top: 1px solid var(--borde);
  border-bottom: 1px solid var(--borde);
  padding-top: 52px;
  padding-bottom: 52px;
}
.datos .grid4 { gap: 32px; }
.dato__valor {
  font-weight: 800;
  font-size: 34px;
  color: var(--rojo);
  line-height: 1;
  margin-bottom: 10px;
}
.dato__label { font-size: 14px; font-weight: 500; color: var(--gris-apagado); line-height: 1.5; }

/* ---------- Quién es Rigo ----------------------------------------------- */

.bio .split { grid-template-columns: 0.85fr 1.15fr; gap: 68px; align-items: start; }
/* Deliberadamente NO sticky: en el diseño original se superponía con las
   secciones siguientes. */
.bio__foto {
  width: 100%;
  /* height:auto es obligatorio: el atributo height del <img> mapea a un estilo
     de presentación, y con la altura fijada el navegador ignora aspect-ratio.
     Sin esto la foto sale con proporción 0.42 en vez de 4/5. */
  height: auto;
  border-radius: 14px;
  object-fit: cover;
  aspect-ratio: 4 / 5;
  object-position: 50% 20%;
}
/* Columna izquierda de la bio: foto arriba, video (reel) debajo. */
.bio__media { display: flex; flex-direction: column; gap: 20px; }
.bio__destacado {
  font-size: 20px;
  line-height: 1.65;
  color: var(--negro);
  font-weight: 600;
  margin: 0 0 32px;
  padding-left: 20px;
  border-left: 3px solid var(--rojo);
}
.bio__parrafos { display: flex; flex-direction: column; gap: 18px; }
.bio__parrafos p { font-size: 17px; line-height: 1.75; color: var(--texto-cuerpo); }

/* ---------- Propuestas (carrusel) --------------------------------------- */

.propuestas { background: var(--fondo-alt); }

.carrusel__head {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 24px;
  flex-wrap: wrap;
  margin-bottom: 40px;
}
/* Dos juegos de controles: arriba en desktop, debajo del slide en móvil.
   En el teléfono las flechas de arriba quedaban fuera de pantalla justo cuando
   terminabas de leer la propuesta y querías pasar a la siguiente. */
.carrusel__controles { display: flex; align-items: center; gap: 12px; }
.carrusel__controles--abajo { display: none; }
.carrusel__contador {
  font-weight: 700;
  font-size: 14px;
  color: var(--gris-meta);
  font-variant-numeric: tabular-nums;
}

.arrow {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  border: 1px solid var(--borde-boton);
  background: #fff;
  color: var(--negro);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background .15s, border-color .15s, color .15s, transform .18s;
}
.arrow:hover { background: var(--rojo); border-color: var(--rojo); color: #fff; transform: scale(1.08); }
.arrow:active { transform: scale(.97); }

.slide {
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  background: #fff;
  border: 1px solid var(--borde);
  border-radius: 16px;
  overflow: hidden;
}
.slide[hidden] { display: none; }
.slide.entra { animation: slideIn .4s var(--ease) both; }

.slide__texto { padding: 48px 44px; }
.slide__num {
  font-weight: 800;
  font-size: 13px;
  color: var(--rojo);
  letter-spacing: 1.4px;
  margin-bottom: 14px;
}
.slide__titulo { font-weight: 800; font-size: 30px; line-height: 1.15; margin: 0 0 26px; }
.slide__puntos { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 15px; }
.slide__puntos li {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 13px;
  align-items: start;
  font-size: 16px;
  line-height: 1.65;
  color: var(--texto-cuerpo);
}
.slide__puntos li::before {
  content: '';
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--rojo);
  /* Alinea el punto con la primera línea del texto, no con el borde. */
  margin-top: 9px;
}
.slide__img { position: relative; min-height: 420px; background: var(--negro); overflow: hidden; }

.dots { display: flex; gap: 8px; justify-content: center; margin-top: 28px; flex-wrap: wrap; }
.dot {
  width: 8px;
  height: 8px;
  border-radius: 999px;
  border: none;
  background: #D5D0CC;
  cursor: pointer;
  padding: 0;
  transition: width .3s var(--ease), background .25s;
}
.dot[aria-selected='true'] { width: 32px; background: var(--rojo); }

/* ---------- Concejales -------------------------------------------------- */

.concejal {
  border: 1px solid var(--borde);
  border-radius: 12px;
  overflow: hidden;
  background: #fff;
  transition: box-shadow .2s, transform .2s;
}
.concejal:hover { box-shadow: var(--sombra-card); transform: translateY(-3px); }
.concejal__foto { position: relative; width: 100%; height: 230px; background: var(--fondo-alt); }
.concejal__cuerpo { padding: 20px; }
.concejal__opcion {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--rojo);
  margin-bottom: 6px;
}
.concejal__nombre { font-weight: 700; font-size: 17px; line-height: 1.3; }

/* ---------- Cómo votar -------------------------------------------------- */

.votar { background: var(--negro); }
.votar .h2 { color: #fff; margin-bottom: 12px; }
.votar__sub { color: rgba(255, 255, 255, .6); font-size: 16px; font-weight: 600; margin-bottom: 48px; }
.votar .grid4 { margin-bottom: 56px; }

.paso { border-top: 2px solid var(--rojo); padding-top: 22px; }
.paso__num { font-weight: 800; font-size: 32px; color: var(--rojo); line-height: 1; margin-bottom: 14px; }
.paso__texto { color: #fff; font-size: 16px; line-height: 1.6; font-weight: 500; }

.apoderados {
  display: grid;
  grid-template-columns: 1.3fr 0.7fr;
  gap: 36px;
  align-items: center;
  background: rgba(255, 255, 255, .05);
  border: 1px solid rgba(255, 255, 255, .12);
  border-radius: 14px;
  padding: 40px;
}
.apoderados__titulo { color: #fff; font-weight: 700; font-size: 20px; margin-bottom: 10px; }
.apoderados p { color: rgba(255, 255, 255, .72); font-size: 17px; line-height: 1.65; }
.apoderados__cta { display: flex; justify-content: flex-end; }
.apoderados__cta .btn { padding: 16px 30px; font-size: 16px; font-weight: 700; }

/* ---- Reel del tutorial de votación (vertical 9:16) ---- */
.votar__reel { display: flex; justify-content: center; margin: 4px 0 52px; }
.reel {
  position: relative;
  width: 300px;
  max-width: 78vw;
  aspect-ratio: 9 / 16;
  border: none;
  padding: 0;
  border-radius: 18px;
  overflow: hidden;
  cursor: pointer;
  background: #000;
  box-shadow: 0 20px 50px rgba(0, 0, 0, .45);
  display: block;
}
.reel__poster { width: 100%; height: 100%; object-fit: cover; display: block; }
.reel__play {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 68px; height: 68px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 50%;
  background: rgba(221, 0, 0, .92);
  color: #fff;
  box-shadow: 0 6px 20px rgba(0, 0, 0, .35);
  transition: transform .2s, background .2s;
}
.reel__play svg { width: 30px; height: 30px; margin-left: 3px; }
.reel:hover .reel__play,
.reel:focus-visible .reel__play { transform: translate(-50%, -50%) scale(1.08); background: var(--rojo); }
.reel::after { content: ''; position: absolute; inset: 0; border-radius: 18px; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .08); pointer-events: none; }
/* Variante apaisada 16:9 (video de la bio). Va DESPUÉS del `.reel` base para
   pisarlo: misma especificidad, gana el último. Radio 14px = el de la foto. */
.reel--ancho {
  width: 100%;
  max-width: none;
  aspect-ratio: 16 / 9;
  border-radius: 14px;
  box-shadow: 0 12px 30px rgba(0, 0, 0, .16);
}
.reel--ancho::after { border-radius: 14px; }

/* ---- Lightbox del video ---- */
.lightbox {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(0, 0, 0, .9);
}
.lightbox[hidden] { display: none; }
.lightbox__fondo { position: absolute; inset: 0; }
.lightbox__dialogo { position: relative; z-index: 1; display: flex; }
.lightbox__video {
  display: block;
  max-height: 88vh;
  max-width: 92vw;
  width: auto;
  height: auto;
  border-radius: 14px;
  background: #000;
}
.lightbox__cerrar {
  position: fixed;
  top: 16px; right: 16px;
  width: 44px; height: 44px;
  border-radius: 50%;
  border: none;
  background: #fff;
  color: #111;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(0, 0, 0, .4);
  z-index: 2;
  transition: background .18s, color .18s;
}
.lightbox__cerrar svg { width: 22px; height: 22px; }
.lightbox__cerrar:hover { background: var(--rojo); color: #fff; }
body.lightbox-abierto { overflow: hidden; }

/* ---------- Sumate / formulario ----------------------------------------- */

.sumate .split { grid-template-columns: 1fr 1fr; gap: 68px; align-items: start; }
.sumate__bajada { font-size: 18px; line-height: 1.7; color: var(--texto-secundario); margin: 0 0 34px; max-width: 460px; }
.sumate__foto { position: relative; width: 100%; height: 280px; border-radius: 12px; overflow: hidden; }

.form {
  display: flex;
  flex-direction: column;
  gap: 14px;
  background: var(--fondo-alt);
  padding: 36px;
  border-radius: 14px;
}
.form__campo { display: flex; flex-direction: column; gap: 6px; }
.form input[type='text'],
.form input[type='tel'],
.form input[type='email'] {
  background: #fff;
  border: 1px solid var(--borde-input);
  border-radius: 6px;
  padding: 15px;
  font-family: inherit;
  font-size: 16px;
  color: var(--negro);
  width: 100%;
  transition: border-color .18s;
}
.form input:hover { border-color: var(--borde-boton); }
.form input:focus { border-color: var(--rojo); }
.form input[aria-invalid='true'] { border-color: var(--rojo); }

/* El <select> de barrio se pinta igual que los inputs, con una flecha propia
   (la nativa varía por navegador). El chevron va como data URI: cae bajo
   img-src del CSP, que ya permite data:. */
.form__select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='none' stroke='%236b6764' stroke-width='1.6' d='M1 1.5 6 6.5 11 1.5'/%3E%3C/svg%3E") no-repeat right 15px center;
  border: 1px solid var(--borde-input);
  border-radius: 6px;
  padding: 15px 40px 15px 15px;
  font-family: inherit;
  font-size: 16px;
  color: var(--negro);
  width: 100%;
  cursor: pointer;
  transition: border-color .18s;
}
.form__select:hover { border-color: var(--borde-boton); }
.form__select:focus { border-color: var(--rojo); }
.form__select[aria-invalid='true'] { border-color: var(--rojo); }
/* Con el placeholder (opción vacía) elegido, el texto va en gris como el
   placeholder de los inputs; al elegir un barrio real pasa a negro. */
.form__select:required:invalid { color: var(--gris-apagado); }
.form__select option { color: var(--negro); }
.form__select option[value=''] { color: var(--gris-apagado); }

/* ---- Combobox con búsqueda (barrio). Mejora progresiva sobre el <select>. ---- */
.combo { position: relative; }
.combo__select { display: none; }              /* el select real: oculto pero sigue enviando el valor */
.combo__input { cursor: text; }
.combo__lista {
  position: absolute;
  top: calc(100% + 4px);
  left: 0; right: 0;
  z-index: 5;
  max-height: 244px;
  overflow-y: auto;
  margin: 0;
  padding: 4px;
  list-style: none;
  background: #fff;
  border: 1px solid var(--borde-input);
  border-radius: 8px;
  box-shadow: 0 12px 30px rgba(0, 0, 0, .14);
}
.combo__lista[hidden] { display: none; }
.combo__opcion {
  padding: 11px 12px;
  border-radius: 6px;
  font-size: 16px;
  color: var(--negro);
  cursor: pointer;
}
.combo__opcion[hidden] { display: none; }
.combo__opcion:hover,
.combo__opcion.is-activo { background: rgba(221, 0, 0, .08); color: var(--rojo); }
.combo__vacio { padding: 11px 12px; font-size: 14px; color: var(--gris-apagado); }

.form__error { color: var(--rojo); font-size: 13px; font-weight: 600; }
.form__error:empty { display: none; }

.form__titulo { font-weight: 700; font-size: 15px; margin-top: 10px; }
.form__areas { display: flex; flex-direction: column; gap: 8px; border: none; padding: 0; margin: 0; }
.form__areas legend { padding: 0; }

.chk {
  display: flex;
  align-items: center;
  gap: 11px;
  background: #fff;
  border: 1px solid var(--borde-input);
  border-radius: 6px;
  padding: 13px 15px;
  font-size: 15px;
  cursor: pointer;
  transition: border-color .18s, background .18s;
}
.chk:hover { border-color: var(--rojo); }
.chk input { width: 17px; height: 17px; accent-color: var(--rojo); cursor: pointer; flex: none; }

.consentimiento {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 11px;
  align-items: start;
  font-size: 13px;
  line-height: 1.6;
  color: var(--gris-apagado);
  margin-top: 8px;
  cursor: pointer;
}
.consentimiento input { width: 17px; height: 17px; accent-color: var(--rojo); margin-top: 2px; cursor: pointer; }

.form__submit {
  width: 100%;
  padding: 17px;
  border-radius: 6px;
  font-weight: 700;
  font-size: 15px;
  letter-spacing: .5px;
  margin-top: 8px;
  border: none;
}
.form__submit[disabled] { opacity: .65; cursor: progress; transform: none; box-shadow: none; }

/* Spinner mientras se envía. El envío tarda unos segundos (SMTP + planilla),
   así que el botón muestra "ENVIANDO…" con un spinner girando para que se vea
   que está trabajando y no parezca colgado. */
.form__submit.is-loading::before {
  content: '';
  display: inline-block;
  width: 1em;
  height: 1em;
  margin-right: .6em;
  vertical-align: -0.15em;
  border: 2px solid rgba(255, 255, 255, .45);
  border-top-color: #fff;
  border-radius: 50%;
  animation: girar .7s linear infinite;
}
@keyframes girar { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .form__submit.is-loading::before { animation-duration: 1.8s; }
}

.form__mensaje { font-size: 14px; font-weight: 600; }
.form__mensaje--ok { color: var(--verde-exito); }
.form__mensaje--error { color: var(--rojo); }
.form__mensaje:empty { display: none; }

/* Honeypot: invisible para personas, irresistible para bots.
   No se usa display:none — algunos bots lo detectan y lo saltean. */
.hp {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

/* ---------- Galería ----------------------------------------------------- */

.galeria { background: var(--fondo-alt); }
/* minmax(0,1fr) + min-width:0: con `1fr` puro el ancho mínimo del contenido
   impide que las pistas se encojan y el grid desborda horizontalmente.
   Altura explícita en vez de aspect-ratio: con aspect-ratio el contenedor se
   mide antes de resolver las alturas y las fotos se desbordan sobre la
   sección siguiente. */
.gal {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  grid-auto-rows: 270px;
  gap: 16px;
}
.galcell {
  position: relative;
  width: 100%;
  min-width: 0;
  height: 270px;
  overflow: hidden;
  border-radius: 8px;
  transition: transform .4s var(--ease);
}
.galcell:hover { transform: scale(1.03); z-index: 2; }

/* ---------- Contacto ---------------------------------------------------- */

.contacto { text-align: center; }
.redes { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; margin-bottom: 52px; }
.redcard {
  display: inline-flex;
  flex-direction: row;
  align-items: center;
  gap: 14px;
  border: 1px solid var(--borde-boton);
  border-radius: 8px;
  padding: 16px 24px;
  color: var(--negro);
  min-width: 200px;
  text-align: left;
  transition: transform .2s, box-shadow .2s, border-color .18s;
}
.redcard:hover { transform: translateY(-3px); box-shadow: 0 14px 34px rgba(0, 0, 0, .1); color: var(--negro); border-color: var(--rojo); }
.redcard__icono { flex: none; width: 30px; height: 30px; color: var(--rojo); }
.redcard__icono svg { width: 100%; height: 100%; display: block; }
.redcard__texto { display: flex; flex-direction: column; gap: 3px; }
/* Nombre de la red: rojo claro, 50% de transparencia (#DD0000 a media opacidad). */
.redcard__red { font-size: 12px; font-weight: 600; color: rgba(221, 0, 0, .5); }
.redcard__handle { font-weight: 700; font-size: 16px; }

.eslogan { border-top: 1px solid var(--borde); padding-top: 52px; }
.eslogan p { font-weight: 800; font-size: 36px; line-height: 1.2; letter-spacing: -1px; max-width: 820px; margin: 0 auto; }

/* ---------- Footer ------------------------------------------------------ */

.footer { background: var(--bordo); padding: 68px 40px 34px; }
.footer__grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1fr;
  gap: 40px;
  padding-bottom: 48px;
  border-bottom: 1px solid rgba(255, 255, 255, .22);
}
/* Los SVG son de un solo color: invertirlos a blanco evita mantener dos
   archivos por logo. */
.footer__logo { height: 34px; width: auto; margin-bottom: 20px; filter: brightness(0) invert(1); }
.footer__desc { color: rgba(255, 255, 255, .72); font-size: 14px; line-height: 1.7; margin-bottom: 14px; max-width: 280px; }
.footer__email { color: #fff; font-size: 14px; font-weight: 600; }
.footer__email:hover { color: #fff; }

.fcol__titulo { color: #fff; font-weight: 700; font-size: 14px; margin-bottom: 12px; }
.fcol a { color: rgba(255, 255, 255, .78); font-size: 14px; display: block; padding: 5px 0; }
.fcol a:hover { color: #fff; }

.footer__bottom {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 26px;
  gap: 20px;
  flex-wrap: wrap;
}
.footer__copy { color: rgba(255, 255, 255, .66); font-size: 13px; }
.footer__anr { height: 22px; width: auto; }

/* ---------- Placeholders de fotos --------------------------------------- */

/* Faltan 28 fotos que entrega el equipo de campaña. Se ven intencionales, no
   rotas: en cuanto exista el archivo real el partial lo pinta en su lugar. */
.slot {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  text-align: center;
  padding: 20px;
  background:
    repeating-linear-gradient(-45deg,
      rgba(221, 0, 0, .05) 0 12px,
      rgba(221, 0, 0, .09) 12px 24px);
  color: var(--gris-meta);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .3px;
  line-height: 1.5;
}
.slot--oscuro {
  background:
    repeating-linear-gradient(-45deg,
      rgba(255, 255, 255, .04) 0 12px,
      rgba(255, 255, 255, .09) 12px 24px);
  color: rgba(255, 255, 255, .6);
}
.slot::before {
  content: '';
  width: 30px;
  height: 30px;
  border: 2px solid currentColor;
  border-radius: 6px;
  opacity: .45;
  flex: none;
}
.slot img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }

/* ---------- Responsive -------------------------------------------------- */

/* Los 6 links del nav no entran por debajo de 1120px y se parten en dos
   líneas: ahí aparece la hamburguesa. */
@media (max-width: 1120px) {
  .nav-desktop { display: none; }
  .hamburguesa { display: flex; }
}

@media (max-width: 900px) {
  :root { --pad-lateral: 20px; --pad-seccion: 72px; }

  .split,
  .hero .split,
  .bio .split,
  .sumate .split { grid-template-columns: 1fr; gap: 36px; }

  .h1 { font-size: 36px; }
  .h2 { font-size: 29px; }
  .eslogan p { font-size: 28px; }

  .grid4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gal { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: 170px; }
  .galcell { height: 170px; }

  .videoband { height: 280px; }
  .countdown { padding: 32px 20px; }
  .countdown__num { font-size: 34px; padding: 14px 8px; }
  .countdown__celdas { gap: 8px; }

  .slide { grid-template-columns: 1fr; }
  .slide__texto { padding: 28px 24px; }
  .slide__titulo { font-size: 24px; }
  .slide__img { min-height: 200px; }

  .apoderados { grid-template-columns: 1fr; padding: 28px; }
  .apoderados__cta { justify-content: flex-start; }

  .form { padding: 24px; }
  .footer__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px; }
  .footer { padding-left: 20px; padding-right: 20px; }
}

/* Por debajo de ~620px no entran a la vez el logo de Rigo, el botón Sumate,
   el logo de HC y la hamburguesa: el botón terminaba montado sobre el logo.
   Se ocultan el botón y el divisor del navbar — el CTA pasa al menú, y los dos
   logos se conservan en el orden que pidió el cliente. */
@media (max-width: 620px) {
  .navbar__acciones .btn--nav,
  .navbar__divisor { display: none; }

  .navbar__acciones { gap: 14px; }
  .navbar__logo img { height: 32px; }
  .navbar__anr { height: 24px; }
  .navbar { padding-top: 12px; padding-bottom: 12px; }

  /* En el celular el título "¿En qué área te gustaría colaborar?" queda grande;
     se achica para que no domine el formulario. */
  .form__titulo { font-size: 13px; }
}

.nav-mobile__cta { margin-top: 16px; border-bottom: none; }
/* La animación en cascada la define :nth-child; el CTA es el séptimo. */
.nav-mobile a.nav-mobile__cta { animation-delay: 270ms; color: #fff; }

@media (min-width: 621px) {
  .nav-mobile__cta { display: none; }
}

@media (max-width: 480px) {
  .hero__botones .btn { width: 100%; }
  .redcard { min-width: 100%; }
  .franja { font-size: 13px; gap: 8px; padding: 9px 16px; }
  .countdown__num { font-size: 30px; padding: 12px 6px; }
}

/* ---------- Accesibilidad: movimiento reducido -------------------------- */

/* Requisito explícito del handoff. Quien pidió menos animación no debería
   recibir parallax, pulsos ni deslizamientos. */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  *,
  *::before,
  *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }

  .reveal { opacity: 1; transform: none; }
  .galcell:hover,
  .concejal:hover,
  .redcard:hover,
  .btn:hover,
  .arrow:hover { transform: none; }
}

/* ---------- Impresión --------------------------------------------------- */

@media print {
  .header, .videoband, .form, .arrow, .dots, .skip-link { display: none !important; }
  .slide[hidden] { display: grid !important; }
  body { font-size: 12pt; }
}

/* Foto real dentro de un slot: llena el hueco que ocupaba el placeholder. */
.slot-foto {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* ---------- Páginas de resultado (gracias / error) ---------------------- */

.resultado {
  min-height: 62vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-top: 88px;
  padding-bottom: 88px;
  background: var(--fondo-alt);
}

.resultado__caja {
  max-width: 620px;
  width: 100%;
  text-align: center;
  background: #fff;
  border: 1px solid var(--borde);
  border-radius: 16px;
  padding: 56px 44px;
}

.resultado__icono {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 68px;
  height: 68px;
  border-radius: 50%;
  margin-bottom: 26px;
}
.resultado__icono--ok    { background: rgba(15, 122, 46, .1); color: var(--verde-exito); }
.resultado__icono--error { background: rgba(221, 0, 0, .09);  color: var(--rojo); }

.resultado__titulo { margin-bottom: 16px; }

.resultado__texto {
  font-size: 18px;
  line-height: 1.7;
  color: var(--texto-secundario);
  margin-bottom: 18px;
}

.resultado__extra { font-size: 15px; line-height: 1.7; color: var(--gris-apagado); }

.resultado__acciones {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
  margin-top: 34px;
}

@media (max-width: 900px) {
  .resultado__caja { padding: 40px 24px; }
  .resultado__texto { font-size: 17px; }
}

@media (max-width: 480px) {
  .resultado__acciones .btn { width: 100%; }
}

/* Fondo mientras la foto viaja: con conexiones lentas la celda se veía blanca
   y parecía rota. El contenedor ya tiene alto fijo, así que no hay salto. */
.galcell,
.concejal__foto,
.sumate__foto { background: #E9E5E2; }
.slide__img   { background: var(--negro); }

/* =========================================================================
   Ajustes de móvil — revisión sobre dispositivo real (iPhone, 375px)
   ========================================================================= */

@media (max-width: 900px) {

  /* ---- Franja roja: una sola línea ------------------------------------ */
  /* Ocupaba tres líneas y se comía un tercio de la pantalla antes de que
     empezara el contenido. Se saca el badge —"Todos somos 1" ya está en la
     píldora del hero— y la palabra "domingo", que es lo único prescindible
     de la fecha. Con eso entra todo en una fila. */
  .franja {
    flex-wrap: nowrap;
    justify-content: center;
    gap: 8px;
    padding: 9px 12px;
    /* 11px es lo que hace entrar la fecha COMPLETA junto al enlace en 375px.
       A 12px se cortaba con puntos suspensivos, y la fecha de la elección es
       justo lo que esta franja tiene que comunicar. */
    font-size: 11px;
    white-space: nowrap;
  }
  .franja .badge,
  .franja__dia { display: none; }
  .franja__texto { overflow: hidden; text-overflow: ellipsis; }
  .franja a { font-size: 11px; flex: none; }

  /* ---- Carrusel: controles debajo del slide --------------------------- */
  /* Arriba quedaban fuera de pantalla justo cuando terminabas de leer. */
  .carrusel__controles--arriba { display: none; }
  .carrusel__controles--abajo {
    display: flex;
    justify-content: center;
    gap: 16px;
    margin-top: 22px;
  }
  .carrusel__controles--abajo .arrow { width: 52px; height: 52px; }
  .carrusel__contador { font-size: 15px; }

  /* El encabezado ya no carga con los controles: se puede apretar. */
  .carrusel__head { margin-bottom: 26px; gap: 0; }

  .dots { margin-top: 22px; }

  /* ---- Cómo votar: los pasos respiran -------------------------------- */
  /* En dos columnas los textos de cuatro líneas quedaban encimados contra el
     borde rojo del paso siguiente. */
  .votar .grid4 { grid-template-columns: 1fr; gap: 30px; margin-bottom: 40px; }
  .paso { padding-top: 18px; }
  .paso__num { font-size: 28px; margin-bottom: 8px; }

  /* ---- Footer -------------------------------------------------------- */
  .footer__grid { gap: 30px 24px; padding-bottom: 34px; }
  .footer__desc { max-width: none; }
}

/* ---- Con el teclado abierto ------------------------------------------ */
/* Un teléfono con el teclado desplegado deja menos de la mitad de pantalla.
   El header pegado se comía buena parte, así que escribir era incómodo.
   Mientras hay un campo enfocado el header deja de flotar y la franja se
   esconde: se recuperan unos 115px, que es la diferencia entre ver el campo
   o no verlo. Lo pone y lo saca el JS (clase `escribiendo` en el body). */
@media (max-width: 900px) {
  .escribiendo .franja { display: none; }
  .escribiendo .header { position: static; }
}

@media (max-width: 620px) {
  /* Con una columna las tres listas de enlaces se leen mejor que apretadas
     de a dos, y el bloque de contacto deja de partirse. */
  .footer__grid { grid-template-columns: 1fr; gap: 28px; }
  .footer__bottom { justify-content: flex-start; gap: 16px; }
}
