/* ============================================================================
   Ponécamaras — hoja de estilos base
   ============================================================================

   Reemplaza la hoja heredada del proyecto anterior (132 KB de estilos de otro
   sitio, que además dependía de variables que el <head> ya no inyecta).

   Criterios:

   · REGLA 60/30/10. Blanco domina la superficie, azul estructura (header, pie,
     secciones alternas) y el amarillo aparece SOLO en elementos clickeables de
     conversión. Si el amarillo se usa de adorno pierde su función: el ojo tiene
     que aprender que amarillo = se toca.

   · CONTRASTE. Los botones amarillos llevan texto oscuro (#0E1B2A sobre #FFC300
     da 11:1). Con texto blanco no llegarían a AA. Todas las combinaciones de la
     hoja pasan WCAG 2.1 AA.

   · VERDE SOLO EN WHATSAPP. Es el único verde del sitio, para que ese botón no
     se camufle con el resto.

   · MÓVIL PRIMERO, y sin dependencias externas: las dos fuentes (Host Grotesk para
     el cuerpo, Barlow Condensed para títulos y botones) se sirven desde el propio
     dominio. No hay Google Fonts ni librería de iconos.

   · La única pieza fija de contacto es el botón flotante de WhatsApp, abajo a la
     derecha. No hay barra inferior en móvil.

   Orden del archivo:
     1. Tokens
     2. Reset y base
     3. Tipografía
     4. Utilidades de layout
     5. Botones
     6. Header y menú móvil
     7. Migas
     8. Hero y cabeceras de página
     9. Bloques de contenido
    10. Listas
    11. Tarjetas
    12. Tablas
    13. Pasos
    14. FAQ
    15. CTA
    16. Formularios
    17. Páginas específicas
    18. Pie
    19. Conversión fija (WhatsApp flotante)
    20. Accesibilidad e impresión
   ========================================================================== */


/* ── 1. Tokens ────────────────────────────────────────────────────────────── */
/* Fuente única de los tokens de diseño. config/variables.php tiene copias de
   algunos colores solo para lo que PHP necesita (la meta theme-color). */
:root {
  --blanco:        #FFFFFF;
  --gris-hielo:    #F4F6F8;
  --borde:         #E3E8EE;
  --texto:         #0E1B2A;
  --texto-suave:   #5A6B7D;
  --azul:          #123A5F;
  --azul-oscuro:   #0C2843;
  /* Acento (CTA). Rojo: marca lo que se toca. Lleva texto blanco encima
     (4,83:1, AA; el hover 6,47:1) y no se confunde con el verde de WhatsApp. */
  --rojo:          #DC2626;
  --rojo-dark:     #B91C1C;
  /* El mismo acento, aclarado, para TEXTO sobre azul (hero, pie). El rojo de
     arriba sobre el azul da 2,42:1 y no se lee; este da 6,16:1. */
  --rojo-claro:    #FCA5A5;
  --error:         #B3261E;
  --exito:         #1B7F4B;
  --whatsapp:      #25D366;
  --whatsapp-dark: #1EB456;

  --ancho: 1140px;
  --gutter: 16px;
  --radio: 10px;
  --radio-chico: 6px;

  --sombra: 0 1px 2px rgba(14, 27, 42, .06), 0 4px 12px rgba(14, 27, 42, .06);
  --sombra-alta: 0 4px 10px rgba(14, 27, 42, .10), 0 12px 28px rgba(14, 27, 42, .12);

  /* Cuerpo en Host Grotesk, titulos y botones en Barlow Condensed. Las dos autoalojadas. */
  --fuente: "Host Grotesk", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  /* Titulos en Barlow Condensed, autoalojada. El fallback es una condensada del sistema,
     para que el salto al cargar la fuente sea chico. */
  --fuente-titulos: "Barlow Condensed", "Arial Narrow", "Segoe UI Semibold", system-ui, sans-serif;
}


/* ── 1b. Fuentes autoalojadas ────────────────────────────────────────────────
   Host Grotesk para el cuerpo y Barlow Condensed para títulos y botones, las dos en
   woff2 servidas desde el propio dominio en lugar de Google Fonts: evita una
   conexión externa en el camino crítico.

   Solo el subconjunto latin (U+0000-00FF), que cubre todo el español incluidos
   á é í ó ú ñ ü ¿ ¡. Con eso Host Grotesk pesa 19,8 KB en lugar de ~200 KB.
   font-display: swap para que el texto se vea desde el primer paint.

   Pesos cargados: Host Grotesk 400-700 (un archivo variable) y Barlow Condensed
   600 / 700, que son exactamente los que usa la hoja. Ni uno más. */

/* Host Grotesk es VARIABLE: un solo archivo cubre el eje de peso 400-700. Por eso
   hay una @font-face y no tres, y por eso el font-weight es un rango. Pesa 19,8 KB
   contra los 23,1 KB que sumaban los tres pesos estaticos de Poppins, y baja de
   tres peticiones a una. */
@font-face {
  font-family: "Host Grotesk";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../fonts/host-grotesk-var.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


@font-face {
  font-family: "Barlow Condensed";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/barlow-condensed-600.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+20AC, U+2122, U+2212, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Barlow Condensed";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/barlow-condensed-700.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+20AC, U+2122, U+2212, U+FEFF, U+FFFD;
}


/* ── 2. Reset y base ─────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

/* Las listas sin viñeta pierden tambien la sangria.
   Los navegadores le dan a <ul> un padding-inline-start de 40px para dejar lugar
   a la viñeta. Cuando la viñeta se saca, esa sangria queda huerfana y corre el
   bloque entero hacia la derecha sin que se vea el porque: era lo que desalineaba
   las tarjetas, los chips del hero y las listas del pie respecto del texto.

   Se engancha a [role="list"] y no a cada clase a proposito. En este sitio, cada
   vez que una lista pierde la viñeta se le pone role="list", porque Safari deja de
   anunciarla como lista cuando tiene list-style: none. O sea que el atributo ya
   marca exactamente el conjunto afectado, y cualquier lista nueva queda arreglada
   sola. Las listas de texto corrido de los articulos no lo llevan y conservan su
   sangria, que ahi si hace falta.

   Va en :where() para que su especificidad sea cero y cualquier regla que quiera
   otra sangria le gane sin pelear. */
:where([role="list"]) { padding-inline-start: 0; }

html {
  font-size: 100%;
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

body {
  font-family: var(--fuente);
  /* Host Grotesk es mas angosta que Poppins y tiene menos x-height, asi que a
     16px el cuerpo se leia chico. 1.0625rem (17px) lo devuelve al ancho de
     linea y al tamano aparente que tenia antes. */
  font-size: 1.0625rem;
  line-height: 1.7;
  color: var(--texto);
  background: var(--blanco);
  -webkit-font-smoothing: antialiased;
}

img, svg, video { display: block; max-width: 100%; height: auto; }
button, input, select, textarea { font: inherit; color: inherit; }

a { color: var(--azul); text-decoration: underline; text-underline-offset: .15em; }
a:hover { color: var(--azul-oscuro); }

/* Foco visible en todo lo interactivo. Nunca se quita sin reemplazo. */
:focus-visible {
  outline: 3px solid var(--rojo);
  outline-offset: 2px;
  border-radius: 3px;
}

hr { border: 0; border-top: 1px solid var(--borde); margin: 2rem 0; }


/* ── 3. Tipografía ───────────────────────────────────────────────────────── */
h1, h2, h3, h4, h5, h6 {
  font-family: var(--fuente-titulos);
  line-height: 1.14;
  font-weight: 700;
  /* Barlow Condensed ya es angosta: con letter-spacing negativo se apretaría de más */
  letter-spacing: 0;
  text-wrap: balance;
}
/* Tamaños algo mayores que con la fuente del sistema: al ser condensada, el mismo
   font-size se ve más chico y ocupa menos ancho. */
/* En celular el H1 manda: es lo primero que se lee y ahora no compite con el
   eyebrow ni con los chips, que se ocultan por debajo de 768 px. */
h1 { font-size: clamp(2.6rem, 8.4vw, 3.35rem); }
h2 { font-size: clamp(1.65rem, 4.2vw, 2.3rem); }
h3 { font-size: clamp(1.3rem, 2.8vw, 1.5rem); }
h4 { font-size: 1.2rem; }

p, li { text-wrap: pretty; }
strong, b { font-weight: 700; }

/* Medida de lectura: un párrafo muy ancho se lee mal */
.bloque > p,
.bloque > ul,
.bloque > ol,
.pagina--legal p,
.pagina--legal ul { max-width: 68ch; }


/* ── 4. Utilidades de layout ─────────────────────────────────────────────── */
.container {
  width: 100%;
  max-width: var(--ancho);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.dos-columnas { display: grid; gap: 1.75rem; }
@media (min-width: 720px) {
  .dos-columnas { grid-template-columns: 1fr 1fr; gap: 2.5rem; }
  .dos-columnas--tres { grid-template-columns: repeat(3, 1fr); }
}

.nota {
  font-size: .95rem;
  color: var(--texto-suave);
  background: var(--gris-hielo);
  border-left: 3px solid var(--borde);
  padding: .8rem 1rem;
  border-radius: var(--radio-chico);
  margin-top: 1.25rem;
  max-width: 68ch;
}

.dato-destacado {
  background: var(--gris-hielo);
  border-left: 4px solid var(--azul);
  padding: 1rem 1.15rem;
  border-radius: var(--radio-chico);
  margin-top: 1.25rem;
  max-width: 68ch;
}

.etiqueta {
  display: inline-block;
  font-size: .72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--azul);
  background: var(--gris-hielo);
  border: 1px solid var(--borde);
  border-radius: 999px;
  padding: .1rem .5rem;
  margin-left: .35rem;
  vertical-align: 1px;
}

.plegable {
  margin-top: 1.5rem;
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  padding: .25rem 1rem;
  background: var(--gris-hielo);
}
.plegable > summary {
  cursor: pointer;
  font-weight: 600;
  color: var(--azul);
  padding: .8rem 0;
  min-height: 44px;
  display: flex;
  align-items: center;
}
.plegable[open] > summary { border-bottom: 1px solid var(--borde); margin-bottom: .75rem; }


/* ── 5. Botones ──────────────────────────────────────────────────────────── */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  min-height: 48px;                /* objetivo táctil */
  padding: .7rem 1.35rem;
  border: 2px solid transparent;
  border-radius: 999px;            /* pastilla: redondo del todo */
  font-family: var(--fuente-titulos);
  font-weight: 700;
  font-size: 1.05rem;
  text-transform: uppercase;
  letter-spacing: .045em;   /* la mayúscula necesita más aire para leerse */
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: background-color .15s ease, border-color .15s ease, transform .05s ease;
}
.btn:active { transform: translateY(1px); }

/* El rojo es el CTA de conversión. Texto BLANCO: 4,83:1 (AA). */
.btn--acento {
  background: var(--rojo);
  color: var(--blanco);
  border-color: var(--rojo);
}
.btn--acento:hover { background: var(--rojo-dark); border-color: var(--rojo-dark); color: var(--blanco); }

/* Verde: el único del sitio, para que WhatsApp no se camufle */
.btn--wsp { background: var(--whatsapp); color: #06301A; border-color: var(--whatsapp); }
.btn--wsp:hover { background: var(--whatsapp-dark); border-color: var(--whatsapp-dark); color: #06301A; }

.btn--azul { background: var(--azul); color: var(--blanco); border-color: var(--azul); }
.btn--azul:hover { background: var(--azul-oscuro); border-color: var(--azul-oscuro); color: var(--blanco); }

.btn--linea { background: transparent; color: var(--azul); border-color: var(--borde); }
.btn--linea:hover { background: var(--gris-hielo); border-color: var(--azul); color: var(--azul); }

.btn--grande { min-height: 54px; padding: .85rem 1.7rem; font-size: 1.15rem; }


/* ── 6. Header y menú móvil ──────────────────────────────────────────────── */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 200;
  background: var(--rojo);
  color: var(--blanco);
  padding: .75rem 1.25rem;
  font-weight: 700;
  border-radius: 0 0 var(--radio) 0;
}
.skip-link:focus { left: 0; }

.header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--blanco);
  border-bottom: 1px solid var(--borde);
}
.header__inner {
  display: flex;
  align-items: center;
  gap: 1rem;
  min-height: 68px;
}
.header__logo { display: flex; align-items: center; text-decoration: none; flex-shrink: 0; }
.header__logo-img { height: 40px; width: auto; }

.header__nav { display: none; }
@media (min-width: 992px) {
  .header__nav { display: block; margin-left: auto; }
  .header__nav-list { display: flex; gap: 1.5rem; list-style: none; }
  .header__nav-list a {
    text-decoration: none;
    color: var(--texto);
    font-weight: 600;
    font-size: .98rem;
    padding: .5rem 0;
    display: inline-block;
    border-bottom: 2px solid transparent;
  }
  .header__nav-list a:hover { color: var(--azul); border-bottom-color: var(--rojo); }
}

/* El teléfono del header es el CTA principal en escritorio */
.header__cta {
  display: none;
  align-items: center;
  gap: .4rem;
  background: var(--rojo);
  color: var(--blanco);
  font-family: var(--fuente-titulos);
  font-weight: 700;
  font-size: 1.02rem;
  text-transform: uppercase;
  letter-spacing: .045em;
  text-decoration: none;
  padding: .6rem 1.2rem;
  border-radius: 999px;
  min-height: 44px;
  white-space: nowrap;
}
.header__cta:hover { background: var(--rojo-dark); color: var(--blanco); }
@media (min-width: 992px) {
  .header__cta { display: inline-flex; margin-left: 1.25rem; }
}

.header__hamburger {
  margin-left: auto;
  width: 48px;
  height: 48px;
  display: grid;
  place-content: center;
  gap: 5px;
  background: none;
  border: 1px solid var(--borde);
  border-radius: var(--radio-chico);
  cursor: pointer;
}
.header__hamburger span {
  display: block;
  width: 22px;
  height: 2px;
  background: var(--texto);
  transition: transform .2s ease, opacity .2s ease;
}
.header__hamburger[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.header__hamburger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.header__hamburger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
@media (min-width: 992px) { .header__hamburger { display: none; } }

.header__mobile-menu {
  border-top: 1px solid var(--borde);
  background: var(--blanco);
  max-height: calc(100vh - 68px);
  overflow-y: auto;
}
.header__mobile-menu[hidden] { display: none; }
.mobile-menu__inner { padding: 1rem var(--gutter) 1.5rem; }
.mobile-menu__nav { list-style: none; }
.mobile-menu__nav a {
  display: block;
  padding: .85rem 0;
  min-height: 48px;
  font-weight: 600;
  font-size: 1.05rem;
  color: var(--texto);
  text-decoration: none;
  border-bottom: 1px solid var(--borde);
}
.mobile-menu__nav a:hover { color: var(--azul); }
.mobile-menu__bottom { display: grid; gap: .75rem; margin-top: 1.25rem; }


/* ── 7. Migas ────────────────────────────────────────────────────────────── */
.migas {
  background: var(--gris-hielo);
  border-bottom: 1px solid var(--borde);
  font-size: .9rem;
}
.migas__lista {
  display: flex;
  flex-wrap: wrap;
  gap: .3rem .5rem;
  list-style: none;
  padding-block: .7rem;
}
.migas__item + .migas__item::before {
  content: "›";
  color: var(--texto-suave);
  margin-right: .5rem;
}
.migas__item a { color: var(--texto-suave); text-decoration: none; }
.migas__item a:hover { color: var(--azul); text-decoration: underline; }
.migas__item [aria-current] { color: var(--texto); font-weight: 600; }


/* ── 8. Hero y cabeceras de página ─────────────────────────────────────────
   EL HERO DE LA HOME ES UN MONITOR DE CÁMARA DE SEGURIDAD. La foto de fondo se
   presenta como una transmisión en vivo: "● REC", "CAM 01", marcas de visor en
   las esquinas, un cuadro de foco sobre las cámaras, la hora corriendo y una
   trama de líneas de monitor muy tenue. Abajo, una barra de estado como la de un
   grabador. Todo eso es decoración (aria-hidden): el contenido real es el H1, la
   respuesta directa y los CTA, igual que antes.

   Las cabeceras de las páginas internas (.pagina__hero) comparten la foto, el
   velo y la tipografía, sin el HUD.

   La foto es de Scott Webb (Pexels, licencia libre para uso comercial).
   PENDIENTE: reemplazar por una foto propia de un trabajo real. */
.pagina__hero,
.hero {
  --mono: ui-monospace, "SF Mono", "Cascadia Mono", Consolas, "Roboto Mono", monospace;
  position: relative;
  isolation: isolate;
  background-color: var(--azul-oscuro);
  background-image: url("../images/hero/hero-camaras-1024.webp");
  background-size: cover;
  background-position: 72% center;   /* deja las cámaras a la vista */
  background-repeat: no-repeat;
  padding-block: 2.5rem 3rem;
  color: var(--blanco);
}
@media (min-width: 1025px) {
  .pagina__hero, .hero {
    background-image: url("../images/hero/hero-camaras-1920.webp");
    padding-block: 4.5rem 5rem;
  }
}

/* El velo: denso a la izquierda, donde va el texto blanco (más de 9:1), y
   liviano a la derecha para que las cámaras se vean. Arriba, una franja algo
   más oscura para que el menú blanco se lea sobre las cámaras. */
.pagina__hero::before,
.hero::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    linear-gradient(180deg, rgba(8, 26, 44, .50) 0, rgba(8, 26, 44, 0) 150px),
    linear-gradient(90deg,
      rgba(10, 30, 50, .80) 0%,
      rgba(10, 30, 50, .68) 42%,
      rgba(10, 30, 50, .30) 72%,
      rgba(10, 30, 50, .18) 100%);
}
@media (max-width: 899px) {
  .pagina__hero::before,
  .hero::before { background: rgba(10, 30, 50, .66); }
}

/* Trama de monitor: líneas horizontales finísimas más una viñeta. Solo en la
   home. Va por encima de la foto y debajo del texto. */
.hero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    repeating-linear-gradient(180deg, rgba(255, 255, 255, .035) 0 1px, transparent 1px 3px),
    radial-gradient(ellipse at 60% 45%, transparent 55%, rgba(4, 14, 24, .45) 100%);
}

/* ── Video de fondo de la home ──
   El fondo CSS de la home es el póster (primer cuadro del video), así el cambio
   de imagen a video no se nota. El <video> arranca invisible y aparece con un
   fundido cuando main.js confirma que está reproduciendo. Va debajo del velo
   (::before) y de la trama (::after). */
.hero {
  background-image: url("../images/hero/hero-video-poster-1024.webp");
  background-position: center 40%;
}
@media (min-width: 1025px) {
  .hero { background-image: url("../images/hero/hero-video-poster-1920.webp"); }
}
.hero__video {
  position: absolute;
  inset: 0;
  z-index: -2;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 40%;
  opacity: 0;
  transition: opacity .8s ease;
  pointer-events: none;
}
.hero__video.is-playing { opacity: 1; }
@media print { .hero__video { display: none; } }

/* ── Layout de la home: alto de pantalla, contenido centrado y la barra de
   estado pegada abajo. */
.hero {
  display: flex;
  flex-direction: column;
  padding-bottom: 0;
}
@media (min-width: 1025px) {
  .hero { min-height: min(820px, 100vh); padding-bottom: 0; }
}
.hero__inner {
  flex: 1;
  display: flex;
  align-items: center;
  padding-bottom: 2.5rem;
}
@media (min-width: 1025px) { .hero__inner { padding-bottom: 3.5rem; } }
.hero__texto { max-width: 640px; }

/* ── El HUD de la cámara ── */
.hud {
  position: absolute;
  /* el recuadro del visor: debajo del header y sobre la barra de estado */
  inset: calc(68px + 1.25rem) 1.25rem 4.75rem;
  z-index: 0;
  pointer-events: none;
  font-family: var(--mono);
  font-size: .78rem;
  letter-spacing: .08em;
  color: rgba(255, 255, 255, .85);
}
@media (min-width: 1025px) { .hud { inset: calc(68px + 1.75rem) 2rem 5.25rem; } }

.hud__esquina {
  position: absolute;
  width: 26px;
  height: 26px;
  border: 0 solid rgba(255, 255, 255, .55);
}
.hud__esquina--ai { top: 0;    left: 0;  border-top-width: 2px;    border-left-width: 2px; }
.hud__esquina--ad { top: 0;    right: 0; border-top-width: 2px;    border-right-width: 2px; }
.hud__esquina--bi { bottom: 0; left: 0;  border-bottom-width: 2px; border-left-width: 2px; }
.hud__esquina--bd { bottom: 0; right: 0; border-bottom-width: 2px; border-right-width: 2px; }

.hud__arriba {
  position: absolute;
  top: .35rem;
  right: 2.25rem;
  display: flex;
  align-items: center;
  gap: 1.1rem;
}
.hud__rec { display: inline-flex; align-items: center; gap: .45rem; color: var(--blanco); font-weight: 700; }
.hud__rec::before {
  content: "";
  width: .6rem;
  height: .6rem;
  border-radius: 50%;
  background: #FF3B30;
  box-shadow: 0 0 0 3px rgba(255, 59, 48, .25);
  animation: hud-rec 1.4s steps(1, end) infinite;
}
@keyframes hud-rec { 50% { opacity: .15; } }

.hud__hora {
  position: absolute;
  bottom: .35rem;
  right: 2.25rem;
  font-variant-numeric: tabular-nums;
}

/* Cuadro de foco sobre el estacionamiento del video: cuatro esquinitas */
.hud__foco {
  position: absolute;
  top: 46%;
  left: 66%;
  width: 150px;
  height: 110px;
  background:
    linear-gradient(var(--rojo-claro), var(--rojo-claro)) top left    / 14px 1.5px,
    linear-gradient(var(--rojo-claro), var(--rojo-claro)) top left    / 1.5px 14px,
    linear-gradient(var(--rojo-claro), var(--rojo-claro)) top right   / 14px 1.5px,
    linear-gradient(var(--rojo-claro), var(--rojo-claro)) top right   / 1.5px 14px,
    linear-gradient(var(--rojo-claro), var(--rojo-claro)) bottom left / 14px 1.5px,
    linear-gradient(var(--rojo-claro), var(--rojo-claro)) bottom left / 1.5px 14px,
    linear-gradient(var(--rojo-claro), var(--rojo-claro)) bottom right/ 14px 1.5px,
    linear-gradient(var(--rojo-claro), var(--rojo-claro)) bottom right/ 1.5px 14px;
  background-repeat: no-repeat;
}
.hud__foco::after {
  content: "MOV";
  position: absolute;
  top: -1.35rem;
  left: 0;
  font-size: .68rem;
  color: var(--rojo-claro);
}

/* En celular solo queda "● REC · CAM 01" arriba: las esquinas, el foco y la
   hora se amontonarían con el texto. */
@media (max-width: 899px) {
  .hud { inset: calc(68px + .75rem) var(--gutter) auto; height: 1.5rem; }
  .hud__esquina, .hud__foco, .hud__hora { display: none; }
  .hud__arriba { right: 0; top: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .hud__rec::before { animation: none; }
}

/* ── Tipografía del hero ── */
.pagina__h1, .hero__titulo { margin-bottom: 1.1rem; }
.pagina__hero .pagina__h1,
.hero .hero__titulo { color: var(--blanco); }
.hero .hero__titulo {
  font-size: clamp(2.7rem, 6.2vw, 4.75rem);
  line-height: 1;
  text-transform: uppercase;
  letter-spacing: .005em;
}
/* "de seguridad" en rojo claro: la segunda línea remata */
.hero__titulo em { font-style: normal; color: var(--rojo-claro); }

/* Eyebrow como rótulo de monitor: monoespaciada, mayúsculas y una rayita roja */
.pagina__eyebrow,
.hero__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: .6rem;
  font-size: .8rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .14em;
  color: var(--azul);
  margin-bottom: 1rem;
}
.pagina__eyebrow::before,
.hero__eyebrow::before {
  content: "";
  width: 1.75rem;
  height: 2px;
  background: var(--rojo);
}
.pagina__hero .pagina__eyebrow,
.hero .hero__eyebrow { font-family: var(--mono); color: rgba(255, 255, 255, .85); }
.pagina__hero .pagina__eyebrow::before,
.hero .hero__eyebrow::before { background: var(--rojo-claro); }

.pagina__bajada {
  font-size: 1.12rem;
  line-height: 1.65;
  color: var(--texto-suave);
  max-width: 60ch;
  margin-bottom: 1.25rem;
}
.pagina__meta { font-size: .9rem; color: var(--texto-suave); margin-bottom: 1rem; }

/* Bloque de respuesta directa: lo primero que se lee, y el fragmento citable */
.respuesta-directa {
  background: var(--blanco);
  border: 1px solid var(--borde);
  border-left: 4px solid var(--rojo);
  border-radius: var(--radio);
  padding: 1.1rem 1.25rem;
  margin-bottom: 1.5rem;
  max-width: 70ch;
  box-shadow: var(--sombra);
}
.respuesta-directa p { font-size: 1.05rem; }
.respuesta-directa--hero { font-size: 1.08rem; }

/* En el hero la respuesta directa es texto suelto, sin caja */
.pagina__hero .respuesta-directa,
.hero .respuesta-directa {
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  padding: 0;
  max-width: 54ch;
  margin-bottom: 2rem;
  color: rgba(255, 255, 255, .82);
}
.hero .respuesta-directa p,
.pagina__hero .respuesta-directa p { line-height: 1.6; }
.pagina__hero .respuesta-directa strong,
.hero .respuesta-directa strong { color: var(--blanco); }
.pagina__hero .pagina__bajada { color: rgba(255, 255, 255, .82); }
.pagina__hero .pagina__meta { color: rgba(255, 255, 255, .72); }
.pagina__hero .pagina__meta a,
.pagina__hero .pagina__bajada a,
.pagina__hero .respuesta-directa a { color: var(--blanco); }
.pagina__hero .buscador > label { color: var(--blanco); }

.pagina__acciones,
.hero__acciones {
  display: flex;
  flex-wrap: wrap;
  gap: .75rem;
}
.pagina__acciones .btn,
.hero__acciones .btn { flex: 1 1 100%; }
@media (min-width: 560px) {
  .pagina__acciones .btn,
  .hero__acciones .btn { flex: 0 1 auto; }
}

/* En el hero el botón de WhatsApp va en el rojo de la marca, no en el verde:
   sobre la foto de cámaras el rojo es el que manda. El ícono de WhatsApp ya dice
   a dónde lleva. Fuera del hero (y el botón flotante) sigue verde. */
.hero__acciones .btn--wsp,
.pagina__hero .pagina__acciones .btn--wsp {
  background: var(--rojo);
  border-color: var(--rojo);
  color: var(--blanco);
}
.hero__acciones .btn--wsp:hover,
.pagina__hero .pagina__acciones .btn--wsp:hover {
  background: var(--rojo-dark);
  border-color: var(--rojo-dark);
  color: var(--blanco);
}

/* "Ver servicios" sobre la foto: contorno blanco, sin relleno. El rojo es la
   única acción con color. */
.hero__acciones .btn--acento,
.pagina__hero .pagina__acciones .btn--acento {
  background: transparent;
  border: 2px solid rgba(255, 255, 255, .7);
  color: var(--blanco);
}
.hero__acciones .btn--acento:hover,
.pagina__hero .pagina__acciones .btn--acento:hover {
  background: rgba(255, 255, 255, .1);
  border-color: var(--blanco);
  color: var(--blanco);
}

/* ── Barra de estado, como la de un grabador ──
   Las cuatro señales de confianza en fila, separadas por divisores, sobre una
   franja oscura al pie del hero. */
.hero__estado {
  position: relative;
  z-index: 1;
  border-top: 1px solid rgba(255, 255, 255, .14);
  background: rgba(4, 16, 28, .55);
  -webkit-backdrop-filter: blur(4px);
          backdrop-filter: blur(4px);
}
.hero__chips {
  display: flex;
  flex-wrap: wrap;
  list-style: none;
  font-family: var(--mono);
  font-size: .78rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: rgba(255, 255, 255, .8);
}
.hero__chips li {
  display: flex;
  align-items: center;
  gap: .55rem;
  padding: 1rem 1.5rem 1rem 0;
  margin-right: 1.5rem;
  border-right: 1px solid rgba(255, 255, 255, .14);
}
.hero__chips li:last-child { border-right: 0; margin-right: 0; }
.hero__chips li::before {
  content: "";
  width: .5rem;
  height: .5rem;
  border-radius: 50%;
  flex-shrink: 0;
  background: #34C759;                        /* verde de "en línea" */
  box-shadow: 0 0 0 3px rgba(52, 199, 89, .2);
}

/* Migas dentro del hero */
.pagina__hero .migas__item a { color: rgba(255, 255, 255, .72); }
.pagina__hero .migas__item a:hover,
.pagina__hero .migas__item [aria-current] { color: var(--blanco); }
.pagina__hero .migas__item + .migas__item::before { color: rgba(255, 255, 255, .5); }


/* ── 9. Bloques de contenido ─────────────────────────────────────────────── */
.pagina__cuerpo { padding-block: 2rem; }
@media (min-width: 768px) { .pagina__cuerpo { padding-block: 2.75rem; } }

.bloque { margin-bottom: 2.5rem; }
.bloque > h2 { margin-bottom: .9rem; }
.bloque > h3 { margin: 1.5rem 0 .6rem; }
.bloque > p + p { margin-top: .85rem; }
.bloque > p + ul, .bloque > p + ol { margin-top: 1rem; }
.bloque > ul + p, .bloque > ol + p { margin-top: 1rem; }

/* El bloque de zona lleva un realce sutil: es el contenido propio de la página */
.bloque--zona {
  background: var(--gris-hielo);
  border-radius: var(--radio);
  padding: 1.5rem 1.35rem;
}
.bloque--zona > h2 { color: var(--azul); }

.bloque__contador {
  font-size: .82rem;
  font-weight: 600;
  color: var(--texto-suave);
  background: var(--gris-hielo);
  border: 1px solid var(--borde);
  border-radius: 999px;
  padding: .15rem .6rem;
  margin-left: .5rem;
  vertical-align: 3px;
  letter-spacing: 0;
}

/* Secciones de la home */
.seccion { padding-block: 2.5rem; }
@media (min-width: 768px) { .seccion { padding-block: 3.5rem; } }
.seccion--alterna { background: var(--gris-hielo); }
.seccion__titulo { margin-bottom: .75rem; }
.seccion__intro { color: var(--texto-suave); max-width: 68ch; margin-bottom: 1.75rem; }
.seccion__pie { margin-top: 1.5rem; font-size: .96rem; color: var(--texto-suave); max-width: 68ch; }


/* ── 10. Listas ──────────────────────────────────────────────────────────── */
.lista-check,
.lista-cruz,
.lista-simple { list-style: none; display: grid; gap: .6rem; }

.lista-check > li,
.lista-cruz > li {
  position: relative;
  padding-left: 1.85rem;
}
.lista-check > li::before {
  content: "";
  position: absolute;
  left: 0; top: .5em;
  width: 11px; height: 6px;
  border-left: 2.5px solid var(--azul);
  border-bottom: 2.5px solid var(--azul);
  transform: rotate(-45deg);
}
.lista-cruz > li::before {
  content: "×";
  position: absolute;
  left: .15rem; top: -.05em;
  color: var(--texto-suave);
  font-size: 1.3rem;
  line-height: 1.3;
  font-weight: 700;
}
@media (min-width: 720px) {
  .lista-check--dos { grid-template-columns: 1fr 1fr; gap: .7rem 2rem; }
}

.lista-simple > li { padding-left: 1.1rem; position: relative; }
.lista-simple > li::before {
  content: "";
  position: absolute;
  left: 0; top: .62em;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--azul);
}

.lista-numerada {
  counter-reset: n;
  list-style: none;
  display: grid;
  gap: 1rem;
}
.lista-numerada > li {
  counter-increment: n;
  position: relative;
  padding-left: 2.6rem;
}
.lista-numerada > li::before {
  content: counter(n);
  position: absolute;
  left: 0; top: .1em;
  width: 1.85rem; height: 1.85rem;
  display: grid; place-content: center;
  background: var(--azul);
  color: var(--blanco);
  font-size: .9rem;
  font-weight: 700;
  border-radius: 50%;
}

.lista-columnas {
  list-style: none;
  display: grid;
  gap: .5rem 1.5rem;
  grid-template-columns: 1fr;
}
@media (min-width: 560px) { .lista-columnas { grid-template-columns: 1fr 1fr; } }
@media (min-width: 900px) { .lista-columnas { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 900px) { .lista-columnas--densa { grid-template-columns: repeat(4, 1fr); } }
.lista-columnas > li { font-size: .98rem; }
.lista-columnas a { text-decoration: none; }
.lista-columnas a:hover { text-decoration: underline; }

/* En celular la lista de zonas pasa a flujo inline.
   Por debajo de 560px la grilla cae a una sola columna, y como "Camaras en Buceo"
   mide 136px en un renglon de 343px, mas de la mitad del ancho quedaba vacio en
   cada linea: 18 enlaces se comian 615px de alto. En flujo inline cada nombre
   ocupa su ancho real y entran dos o tres por renglon.

   El enlace pasa a bloque con alto minimo por una razon que no es de estilo: al
   comprimir, el area tactil quedaba en 21px. Ya estaba en 21px ANTES de comprimir,
   o sea por debajo de los 24px que pide WCAG 2.5.8, asi que esto lo arregla de paso.
   Sin el min-height, comprimir habria empeorado algo que ya estaba mal.

   Se aplica a .lista-columnas en general y no solo a la home: la misma lista aparece
   en /zonas/ con 111 entradas, que es donde mas se nota. En pantalla grande no se
   toca nada, porque ahi la grilla en columnas alineadas se lee mejor que el flujo. */
@media (max-width: 559px) {
  .lista-columnas {
    display: flex;
    flex-wrap: wrap;
    gap: .2rem .85rem;
  }
  .lista-columnas > li { font-size: .9rem; }
  .lista-columnas a { display: block; line-height: 1.6; min-height: 24px; }

  /* Con la lista compacta, el aire de la seccion pasa a ser lo que sobra. */
  .seccion { padding-block: 2rem; }
  .seccion__intro { margin-bottom: 1.15rem; }
  .seccion__pie { margin-top: 1.1rem; }
}


/* ── 11. Tarjetas ────────────────────────────────────────────────────────── */
.tarjetas {
  list-style: none;
  display: grid;
  gap: 1rem;
  grid-template-columns: 1fr;
}
@media (min-width: 620px) { .tarjetas { grid-template-columns: 1fr 1fr; } }
@media (min-width: 960px) { .tarjetas { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 620px) { .tarjetas--compactas { grid-template-columns: 1fr 1fr; } }
@media (min-width: 960px) { .tarjetas--compactas { grid-template-columns: repeat(3, 1fr); } }

.tarjeta {
  background: var(--blanco);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  padding: 1.15rem 1.2rem;
  box-shadow: var(--sombra);
  transition: box-shadow .15s ease, border-color .15s ease;
}
.tarjeta:hover { box-shadow: var(--sombra-alta); border-color: #CBD6E2; }
.seccion--alterna .tarjeta { background: var(--blanco); }

.tarjeta__titulo { font-size: 1.08rem; margin-bottom: .45rem; }
.tarjeta__titulo a { text-decoration: none; color: var(--texto); }
.tarjeta__titulo a:hover { color: var(--azul); text-decoration: underline; }
.tarjeta__desc { font-size: .96rem; color: var(--texto-suave); }
.tarjeta__meta {
  font-size: .84rem;
  color: var(--texto-suave);
  margin-top: .6rem;
  padding-top: .6rem;
  border-top: 1px solid var(--borde);
}


/* ── 11b. Tarjetas con foto de fondo ──────────────────────────────────────
   Variante de .tarjeta para la grilla de servicios de la home: la foto ocupa
   toda la tarjeta y el texto se apoya abajo a la izquierda.

   Tres decisiones:

   1. LA FOTO ES UN <img>, NO UN background-image. Estas tarjetas estan debajo
      del pliegue. Con background-image el navegador no puede diferirlas y
      compiten con la foto del hero por el ancho de banda inicial. Con <img
      loading="lazy"> mas width/height se cargan cuando hacen falta y no mueven
      el layout al llegar.

   2. LA TARJETA FUNCIONA SIN FOTO. Si un servicio todavia no tiene imagen, la
      tarjeta queda azul oscuro y se lee igual. No hay estado roto ni hueco
      blanco: se puede ir agregando fotos de a una.

   3. EL VELO ES UN DEGRADADO, NO UNA CAPA PLANA. Abajo, donde esta el texto,
      tapa casi del todo; arriba deja ver la foto. Asi el texto pasa AA sin
      apagar la imagen entera. */

.tarjeta--foto {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: 272px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;   /* el texto se apoya abajo */
  align-items: flex-start;     /* ... y a la izquierda */
  padding: 1.15rem 1.2rem 1.25rem;
  border: 0;
  background: var(--azul-oscuro);   /* lo que se ve si no hay foto */
  color: var(--blanco);
  box-shadow: var(--sombra);
  transition: transform .18s ease, box-shadow .18s ease;
}

.tarjeta__foto {
  position: absolute;
  inset: 0;
  z-index: -2;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Las camaras suelen estar en el tercio superior del encuadre y el texto va
     abajo: encuadrar hacia arriba deja el motivo a la vista. */
  object-position: center 35%;
}

.tarjeta--foto::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(
    to top,
    rgba(6, 22, 38, .90) 0%,
    rgba(6, 22, 38, .78) 30%,
    rgba(6, 22, 38, .42) 62%,
    rgba(6, 22, 38, .20) 100%
  );
}

.tarjeta--foto:hover { transform: translateY(-3px); box-shadow: var(--sombra-alta); }

/* El enlace del titulo se estira sobre toda la tarjeta: se puede tocar en
   cualquier punto, pero el nombre accesible del enlace sigue siendo el titulo
   y no "toda la tarjeta". */
.tarjeta--foto .tarjeta__titulo { font-size: 1.22rem; margin-bottom: .35rem; }
.tarjeta--foto .tarjeta__titulo a { color: var(--blanco); text-decoration: none; }
.tarjeta--foto .tarjeta__titulo a::after { content: ""; position: absolute; inset: 0; }
.tarjeta--foto .tarjeta__titulo a:hover { color: var(--blanco); text-decoration: underline; }
.tarjeta--foto .tarjeta__desc { color: #D6E0EA; font-size: .94rem; }

/* El foco tiene que verse sobre la tarjeta entera, no solo sobre el texto. */
.tarjeta--foto:focus-within { outline: 3px solid var(--rojo); outline-offset: 2px; }
.tarjeta--foto .tarjeta__titulo a:focus-visible { outline: none; }

/* ── 12. Tablas ──────────────────────────────────────────────────────────── */
.tabla-envoltorio {
  overflow-x: auto;
  margin-top: 1.25rem;
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  -webkit-overflow-scrolling: touch;
}
.tabla { width: 100%; border-collapse: collapse; font-size: .96rem; }
.tabla th, .tabla td {
  padding: .7rem .9rem;
  text-align: left;
  border-bottom: 1px solid var(--borde);
  white-space: nowrap;
}
.tabla thead th {
  background: var(--azul);
  color: var(--blanco);
  font-size: .88rem;
  letter-spacing: .01em;
}
.tabla tbody th { font-weight: 700; background: var(--gris-hielo); }
.tabla tbody tr:last-child th,
.tabla tbody tr:last-child td { border-bottom: 0; }


/* ── 13. Pasos ───────────────────────────────────────────────────────────── */
.pasos {
  counter-reset: p;
  list-style: none;
  display: grid;
  gap: 1.15rem;
}
.pasos > li {
  counter-increment: p;
  position: relative;
  padding-left: 3rem;
}
.pasos > li::before {
  content: counter(p);
  position: absolute;
  left: 0; top: 0;
  width: 2.15rem; height: 2.15rem;
  display: grid; place-content: center;
  background: var(--azul);
  color: var(--blanco);
  font-weight: 700;
  border-radius: 50%;
}
.pasos__titulo, .pasos > li > h3 { font-size: 1.08rem; margin-bottom: .3rem; }
.pasos--grandes > li { padding-left: 3.4rem; }
.pasos--grandes > li::before { width: 2.5rem; height: 2.5rem; font-size: 1.05rem; }

/* Pasos con icono en lugar de numero.
   El numero se apaga: el orden lo sigue dando el <ol>, que es donde tiene que
   estar, no en un dibujo. Un lector de pantalla anuncia "1 de 3" igual.

   Circulo blanco con borde fino y el icono en rojo: el unico color de la seccion
   es el del icono y el rotulo "Paso N". El SVG va en linea y toma el rojo por
   currentColor, sin filtros. */
.pasos--iconos { counter-reset: p; gap: 1.75rem; }
.pasos--iconos > li {
  position: relative;
  /* carril del icono a la izquierda; el texto arranca despues */
  padding: 0 0 0 4.4rem;
  min-height: 3.25rem;
}
.pasos--iconos > li::before { content: none; }   /* fuera el numero en circulo */

.pasos__icono {
  position: absolute;
  left: 0;
  top: 0;
  display: grid;
  place-items: center;
  width: 3.25rem;
  height: 3.25rem;
  border-radius: 50%;
  background: var(--blanco);
  border: 1.5px solid rgba(220, 38, 38, .22);
  color: var(--rojo);
}

/* LA LINEA QUE UNE LOS PASOS.
   Es lo que convierte tres bloques sueltos en un recorrido. Va punteada y en el
   gris de los bordes para que se lea como guia y no compita con el contenido.
   No la lleva el ultimo paso: la linea indica "sigue", y despues del tercero no
   sigue nada. */
.pasos--iconos > li:not(:last-child)::after {
  content: "";
  position: absolute;
  left: calc(1.625rem - 1px);   /* centro del circulo */
  top: 3.85rem;                 /* un respiro debajo del circulo */
  bottom: -1.35rem;             /* cruza el gap hasta el circulo siguiente */
  width: 2px;
  /* Tinte del azul de marca, no el gris de bordes: #E3E8EE sobre blanco da 1,23:1
     y la linea directamente no se veia. Es decoracion: el orden lo dicen el <ol>
     y los rotulos "Paso N", asi que no necesita contraste de componente. */
  background: repeating-linear-gradient(
    to bottom, rgba(18, 58, 95, .22) 0 4px, transparent 4px 9px
  );
}

/* "PASO 1", "PASO 2", "PASO 3".
   Se genera con un contador CSS en vez de escribirlo en el HTML: el orden ya lo
   da el <ol>, asi que en el marcado seria decir dos veces lo mismo, y un lector
   de pantalla ya anuncia "1 de 3". Aca es decoracion, y como tal vive en el CSS. */
.pasos--iconos > li > h3::before {
  content: "Paso " counter(p);
  display: block;
  font-family: var(--fuente);
  font-size: .7rem;
  font-weight: 600;
  letter-spacing: .13em;
  text-transform: uppercase;
  color: var(--rojo);            /* 4,83:1 sobre blanco */
  margin-bottom: .2rem;
}
.pasos__icono svg { width: 1.5rem; height: 1.5rem; }

@media (min-width: 860px) {
  .pasos--home { grid-template-columns: repeat(3, 1fr); gap: 1.5rem; }
  .pasos--home > li { padding-left: 0; padding-top: 0; }
  .pasos--home > li::before { top: 0; left: 0; }

  /* En tres columnas el recorrido va de izquierda a derecha, asi que la linea se
     acuesta y el icono vuelve arriba del texto. */
  .pasos--iconos > li { padding: 0; min-height: 0; }
  .pasos__icono { position: static; margin-bottom: 1rem; }
  .pasos--iconos > li:not(:last-child)::after {
    left: 4.1rem;                  /* un respiro despues del circulo */
    right: -.6rem;                 /* frena antes del circulo siguiente */
    top: calc(1.625rem - 1px);     /* a la altura del centro del circulo */
    bottom: auto;
    width: auto;
    height: 2px;
    background: repeating-linear-gradient(
      to right, rgba(18, 58, 95, .22) 0 4px, transparent 4px 9px
    );
  }
}


/* ── 13b. Reseñas de Google ──────────────────────────────────────────────────
   Imitan el aspecto de una reseña en Google Maps: la tipografía de sistema de
   Google (Roboto en Android, Arial en el resto), estrellas doradas, avatar de
   color y tarjeta gris clara sin borde. Es la única sección que no usa los
   colores ni las fuentes de la marca, a propósito: tiene que leerse como Google. */
.greviews {
  --g-texto: #202124;
  --g-suave: #70757A;
  --g-estrella: #FBBC04;
  --g-azul: #1A73E8;
  font-family: Roboto, Arial, sans-serif;
  color: var(--g-texto);
}

.greviews .g-logo { width: 1.25rem; height: 1.25rem; flex-shrink: 0; }

.greviews__cabecera {
  display: flex;
  align-items: center;
  gap: .9rem;
  margin-bottom: 1.25rem;
}
.greviews__cabecera > .g-logo { width: 2.25rem; height: 2.25rem; }
.greviews__titulo {
  font-family: inherit;
  font-size: 1.15rem;
  font-weight: 500;
  line-height: 1.3;
  margin: 0;
}
.greviews__resumen { display: flex; align-items: center; gap: .4rem; margin: .1rem 0 0; }
.greviews__nota { font-size: 1.05rem; font-weight: 500; }
.greviews__total { color: var(--g-suave); font-size: .9rem; }
.greviews__todas {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  min-height: 40px;
  padding: 0 1.1rem;
  border: 1px solid #DADCE0;
  border-radius: 999px;
  color: var(--g-azul);
  font-size: .9rem;
  font-weight: 500;
  text-decoration: none;
}
.greviews__todas:hover { background: #F4F8FE; color: var(--g-azul); }

.gstars { display: inline-flex; gap: 1px; }
.gstars svg { width: 1rem; height: 1rem; fill: #DADCE0; }
.gstars svg.is-on { fill: var(--g-estrella); }

/* Celular: fila deslizable con scroll-snap, sin JS. 85 % de ancho para que
   asome la siguiente tarjeta. */
.greviews__lista {
  list-style: none;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 85%;
  gap: .75rem;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  margin-inline: calc(var(--gutter) * -1);
  padding: 0 var(--gutter) .25rem;
  scroll-padding-inline: var(--gutter);
}
.greviews__lista::-webkit-scrollbar { display: none; }
@media (min-width: 768px) {
  .greviews__lista {
    grid-auto-flow: row;
    grid-template-columns: repeat(3, 1fr);
    overflow: visible;
    margin-inline: 0;
    padding: 0;
  }
}

.greview {
  scroll-snap-align: start;
  background: #F8F9FA;
  border-radius: 12px;
  padding: 1rem 1.1rem 1.1rem;
}
.greview__autor { display: flex; align-items: center; gap: .65rem; }
.greview__autor .g-logo { margin-left: auto; width: 1.1rem; height: 1.1rem; }
.greview__avatar {
  flex-shrink: 0;
  display: grid;
  place-items: center;
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 50%;
  color: #fff;
  font-size: 1.1rem;
  font-weight: 500;
}
.greview__nombre { font-size: .95rem; font-weight: 500; }
.greview__meta {
  display: flex;
  align-items: center;
  gap: .5rem;
  margin: .65rem 0 .4rem;
  font-size: .82rem;
  color: var(--g-suave);
}
.greview__meta .gstars svg { width: .9rem; height: .9rem; }
.greview__texto {
  margin: 0;
  font-size: .92rem;
  line-height: 1.5;
  /* Cuatro líneas como máximo: la reseña entera está en la ficha */
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
}


/* ── 14. FAQ ─────────────────────────────────────────────────────────────── */
.faq { background: var(--gris-hielo); padding-block: 2.5rem; border-top: 1px solid var(--borde); }
@media (min-width: 768px) { .faq { padding-block: 3.5rem; } }
.faq__titulo { margin-bottom: 1.5rem; }
.faq__lista { display: grid; gap: .75rem; max-width: 80ch; }

.faq__item {
  background: var(--blanco);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  overflow: hidden;
}
/* Sin JS: <details> nativo. El contenido se lee igual con JS desactivado. */
.faq__pregunta {
  cursor: pointer;
  padding: 1rem 1.15rem;
  min-height: 52px;
  display: flex;
  align-items: center;
  gap: .75rem;
  list-style: none;
  font-weight: 600;
}
.faq__pregunta::-webkit-details-marker { display: none; }
.faq__pregunta h3 { font-size: 1.02rem; font-weight: 600; flex: 1; }
.faq__pregunta::after {
  content: "";
  flex-shrink: 0;
  width: 9px; height: 9px;
  border-right: 2.5px solid var(--azul);
  border-bottom: 2.5px solid var(--azul);
  transform: rotate(45deg) translateY(-2px);
  transition: transform .2s ease;
}
.faq__item[open] .faq__pregunta::after { transform: rotate(-135deg) translateY(-2px); }
.faq__item[open] .faq__pregunta { border-bottom: 1px solid var(--borde); }
.faq__respuesta { padding: 1rem 1.15rem; }
.faq__respuesta p { max-width: 72ch; }


/* ── 15. CTA ─────────────────────────────────────────────────────────────── */
.cta { background: var(--azul); color: var(--blanco); padding-block: 2.5rem; }
@media (min-width: 768px) { .cta { padding-block: 3rem; } }
.cta__inner { display: grid; gap: 1.5rem; }
@media (min-width: 880px) {
  .cta__inner { grid-template-columns: 1fr auto; align-items: center; gap: 2.5rem; }
}
.cta__titulo { color: var(--blanco); margin-bottom: .5rem; }
.cta__desc { color: #C9D6E3; max-width: 58ch; }
.cta__acciones { display: flex; flex-wrap: wrap; gap: .75rem; }
.cta__acciones .btn { flex: 1 1 100%; }
@media (min-width: 560px) { .cta__acciones .btn { flex: 0 1 auto; } }


/* ── 16. Formularios ─────────────────────────────────────────────────────── */
.formulario { display: grid; gap: 1.15rem; max-width: 34rem; }

.campo { display: grid; gap: .35rem; }
.campo > label { font-weight: 600; font-size: .96rem; }
.campo__opcional { font-weight: 400; color: var(--texto-suave); font-size: .88rem; }
.campo__ayuda { font-size: .87rem; color: var(--texto-suave); }

.campo input[type="text"],
.campo input[type="tel"],
.campo input[type="email"],
.campo input[type="search"],
.campo select,
.campo textarea {
  width: 100%;
  min-height: 48px;
  padding: .65rem .8rem;
  background: var(--blanco);
  border: 1.5px solid var(--borde);
  border-radius: var(--radio-chico);
  font-size: 1rem;
}
.campo textarea { min-height: 110px; resize: vertical; }
.campo input:focus, .campo select:focus, .campo textarea:focus { border-color: var(--azul); }
.campo input:user-invalid, .campo select:user-invalid { border-color: var(--error); }

.campo--check { grid-template-columns: auto 1fr; align-items: start; gap: .65rem; }
.campo--check input { width: 22px; height: 22px; margin-top: .15rem; accent-color: var(--azul); }
.campo--check label { font-weight: 400; font-size: .94rem; }

/* Honeypot: fuera de la vista pero NO con display:none, que algunos bots detectan */
.honeypot {
  position: absolute !important;
  left: -9999px !important;
  width: 1px; height: 1px;
  overflow: hidden;
}

.alerta {
  padding: .85rem 1rem;
  border-radius: var(--radio-chico);
  border-left: 4px solid;
  margin-bottom: 1.25rem;
  font-size: .96rem;
}
.alerta--error { background: #FDECEA; border-color: var(--error); color: #7A1A15; }
.alerta--exito { background: #E8F5EE; border-color: var(--exito); color: #10552F; }

.buscador { margin-top: 1.5rem; max-width: 34rem; }
.buscador > label { display: block; font-weight: 600; margin-bottom: .35rem; font-size: .96rem; }
.buscador__campo { display: flex; gap: .5rem; }
.buscador__campo input {
  flex: 1;
  min-height: 48px;
  padding: .65rem .8rem;
  border: 1.5px solid var(--borde);
  border-radius: var(--radio-chico);
  background: var(--blanco);
}
.buscador__campo input:focus { border-color: var(--azul); }


/* ── 17. Páginas específicas ─────────────────────────────────────────────── */
/* Contacto: formulario e información al costado */
.contacto__layout { display: grid; gap: 2.5rem; }
@media (min-width: 900px) {
  .contacto__layout { grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr); gap: 3.5rem; }
}
.contacto__form-col > h2 { margin-bottom: 1.25rem; }
.contacto__info-col {
  background: var(--gris-hielo);
  border-radius: var(--radio);
  padding: 1.5rem 1.35rem;
  align-self: start;
}
.contacto__info-col h2 { font-size: 1.15rem; margin-bottom: .7rem; }
.contacto__info-col h2 + p, .contacto__info-col h2 + ul { margin-bottom: 1.25rem; }
.contacto__info-col > ul { margin-bottom: 1.5rem; }
.contacto__info-col > *:last-child { margin-bottom: 0; }

/* Legales: una columna angosta y jerarquía tranquila */
.pagina--legal { padding-block: 2.5rem 3rem; }
.pagina--legal .pagina__h1 { margin-bottom: .5rem; }
.pagina--legal .bloque { margin-bottom: 2rem; }
.pagina--legal h2 { font-size: 1.3rem; margin-bottom: .65rem; }
.pagina--legal p + p { margin-top: .8rem; }

/* Artículos del blog */
.pagina--articulo .pagina__cuerpo > .bloque > p { font-size: 1.08rem; }
.articulo__figura { margin-bottom: 2rem; }
.articulo__figura img { border-radius: var(--radio); width: 100%; }
.articulo__figura figcaption {
  font-size: .87rem;
  color: var(--texto-suave);
  margin-top: .5rem;
}

.puntos-clave {
  background: var(--gris-hielo);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  padding: 1.35rem 1.4rem;
  margin-bottom: 2.25rem;
}
.puntos-clave__titulo { font-size: 1.05rem; color: var(--azul); margin-bottom: .75rem; }
.puntos-clave ul { list-style: none; display: grid; gap: .55rem; }
.puntos-clave li { position: relative; padding-left: 1.6rem; }
.puntos-clave li::before {
  content: "";
  position: absolute;
  left: 0; top: .55em;
  width: 8px; height: 8px;
  background: var(--rojo);
  border-radius: 2px;
}

/* Gracias y 404 */
.pagina--gracias, .pagina--error { padding-block: 2.5rem 1rem; }
.pagina--gracias .pagina__h1, .pagina--error .pagina__h1 { margin-bottom: 1rem; }


/* ── 18. Pie ─────────────────────────────────────────────────────────────── */
.footer { background: var(--azul); color: #D3DEE9; margin-top: 0; }
.footer__inner {
  display: grid;
  gap: 2.25rem;
  padding-block: 2.5rem;
}
@media (min-width: 760px) {
  .footer__inner { grid-template-columns: 1.3fr 1fr 1fr; gap: 2.5rem; }
}
.footer__logo { height: 38px; width: auto; margin-bottom: .9rem; }
.footer__desc { font-size: .96rem; margin-bottom: .9rem; max-width: 34ch; }
.footer__contacto { margin-bottom: .75rem; line-height: 1.9; }
.footer__contacto a { color: var(--blanco); font-weight: 600; text-decoration: none; }
.footer__contacto a:hover { color: var(--rojo-claro); text-decoration: underline; }
.footer__ambito { font-size: .88rem; color: #A9BACB; }

.footer__titulo {
  font-size: .82rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: var(--rojo-claro);
  margin-bottom: .85rem;
}
.footer__titulo--sep { margin-top: 1.75rem; }
.footer__lista { list-style: none; display: grid; gap: .5rem; }
.footer__lista a { color: #D3DEE9; text-decoration: none; font-size: .95rem; }
.footer__lista a:hover { color: var(--blanco); text-decoration: underline; }

.footer__legal { border-top: 1px solid rgba(255, 255, 255, .14); }
.footer__legal-inner {
  display: flex;
  flex-wrap: wrap;
  gap: .75rem 1.5rem;
  justify-content: space-between;
  align-items: center;
  padding-block: 1.1rem;
  font-size: .88rem;
}
.footer__legal-links { display: flex; flex-wrap: wrap; gap: .5rem 1.25rem; list-style: none; }
.footer__creditos { font-size: .8rem; opacity: .72; }
.footer__creditos a { text-decoration: underline; }
.footer__legal-links a { color: #A9BACB; text-decoration: none; }
.footer__legal-links a:hover { color: var(--blanco); text-decoration: underline; }


/* ── 19. Conversión fija ─────────────────────────────────────────────────── */
/* WhatsApp flotante: siempre visible, abajo a la derecha, redondo y con el icono.
   Es la única pieza fija de contacto del sitio. */
.wsp-flotante {
  position: fixed;
  right: 16px;
  bottom: calc(16px + env(safe-area-inset-bottom, 0px));
  z-index: 130;
  width: 56px;
  height: 56px;
  display: grid;
  place-content: center;
  background: var(--whatsapp);
  color: #FFFFFF;
  border: 0;
  border-radius: 50%;
  box-shadow: 0 4px 14px rgba(6, 48, 26, .28);
  transition: background-color .15s ease, transform .1s ease;
}
.wsp-flotante:hover,
.wsp-flotante:focus-visible {
  background: var(--whatsapp-dark);
  color: #FFFFFF;
  transform: scale(1.06);
}
.wsp-flotante svg { width: 30px; height: 30px; }

/* En escritorio no hay barra fija, así que baja a la esquina */
@media (min-width: 768px) {
  .wsp-flotante {
    right: 24px;
    bottom: 24px;
    width: 62px;
    height: 62px;
  }
  .wsp-flotante svg { width: 33px; height: 33px; }
}

@media print { .wsp-flotante { display: none; } }


/* ── 20. Accesibilidad e impresión ───────────────────────────────────────── */
.visualmente-oculto {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

@media (forced-colors: active) {
  .btn { border: 2px solid ButtonText; }
  .tarjeta, .respuesta-directa, .faq__item { border: 1px solid CanvasText; }
}

@media print {
  body { padding-bottom: 0; font-size: 11pt; }
  .header, .footer, .cta, .migas, .skip-link { display: none; }
  .pagina__hero, .seccion--alterna, .faq, .bloque--zona { background: none; }
  a { text-decoration: underline; }
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: .85em; word-break: break-all; }
  .tarjeta, .faq__item { break-inside: avoid; box-shadow: none; }
  .faq__respuesta { display: block !important; }
}


/* ── 21. Logo en línea (header y pie) ────────────────────────────────────── */
/* El logo no es una imagen: es el isotipo SVG en línea más el nombre en texto.
   Ahorra una petición, hereda currentColor y el nombre se puede seleccionar. */
.header__logo { gap: .55rem; color: var(--azul); }
.header__isotipo { width: 42px; height: 42px; flex-shrink: 0; }
.header__nombre {
  font-size: 1.28rem;
  font-weight: 700;
  letter-spacing: -.02em;
  color: var(--texto);
  white-space: nowrap;
}
@media (max-width: 420px) {
  .header__isotipo { width: 36px; height: 36px; }
  .header__nombre { font-size: 1.12rem; }
}

.footer__marca { display: flex; align-items: center; gap: .55rem; margin-bottom: .9rem; color: var(--blanco); }
.footer__isotipo { width: 40px; height: 40px; flex-shrink: 0; }
.footer__nombre { font-size: 1.2rem; font-weight: 700; letter-spacing: -.02em; color: var(--blanco); }

/* El <details> del menú móvil: la flecha nativa se oculta y el summary queda
   con el aspecto de botón hamburguesa. */
.header__menu { margin-left: auto; }
.header__menu > summary { list-style: none; }
.header__menu > summary::-webkit-details-marker { display: none; }
.header__menu[open] > summary span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.header__menu[open] > summary span:nth-child(2) { opacity: 0; }
.header__menu[open] > summary span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.header__menu .header__mobile-menu {
  position: absolute;
  left: 0; right: 0;
  top: 100%;
  background: var(--blanco);
  border-top: 1px solid var(--borde);
  box-shadow: var(--sombra-alta);
  max-height: calc(100vh - 68px);
  overflow-y: auto;
}
.header__inner { position: relative; }
@media (min-width: 992px) { .header__menu { display: none; } }


/* ── 22. Header superpuesto al hero ──────────────────────────────────────────
   En las páginas con hero (body.con-hero) el header arranca transparente encima
   de la foto y se vuelve blanco al scrollear.

   PROGRESIÓN, y el orden importa: el estado por defecto es el header BLANCO de
   siempre. Lo transparente se activa solo cuando hay JavaScript (html.js) y
   estamos arriba de todo. Al revés —transparente por defecto— sin JS el header
   quedaría transparente sobre contenido claro y no se leería nada. Así, sin JS
   el sitio queda con el header sólido de siempre, que funciona.

   El header pasa a position: fixed, o sea sale del flujo: por eso el hero suma
   padding-top propio para que su contenido no quede debajo. */

body.con-hero .header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
}

/* El hero empieza en el borde superior y reserva el alto del header */
body.con-hero .pagina__hero,
body.con-hero .hero {
  padding-top: calc(68px + 1.75rem);
}
@media (min-width: 768px) {
  body.con-hero .pagina__hero,
  body.con-hero .hero { padding-top: calc(68px + 3rem); }
}

/* ── Estado transparente: solo con JS y arriba de todo ──
   Sobre la foto oscura: logo, menú y hamburguesa en blanco. */
.js body.con-hero .header {
  background: transparent;
  border-bottom-color: transparent;
  transition: background-color .25s ease, border-color .25s ease, box-shadow .25s ease;
}
.js body.con-hero .header .header__logo,
.js body.con-hero .header .header__nombre,
.js body.con-hero .header .header__nav-list a { color: var(--blanco); }
.js body.con-hero .header .header__nav-list a:hover { color: var(--rojo-claro); border-bottom-color: var(--rojo); }
.js body.con-hero .header .header__hamburger { border-color: rgba(255, 255, 255, .45); }
.js body.con-hero .header .header__hamburger span { background: var(--blanco); }

/* ── Estado sólido: al scrollear, y también cuando el menú móvil está abierto ──
   Vuelve a los colores oscuros de siempre. */
.js body.con-hero .header.header--solido,
.js body.con-hero .header:has(.header__menu[open]) {
  background: var(--blanco);
  border-bottom-color: var(--borde);
}
.js body.con-hero .header.header--solido { box-shadow: 0 1px 12px rgba(14, 27, 42, .08); }
.js body.con-hero .header.header--solido .header__logo,
.js body.con-hero .header:has(.header__menu[open]) .header__logo { color: var(--azul); }
.js body.con-hero .header.header--solido .header__nombre,
.js body.con-hero .header.header--solido .header__nav-list a,
.js body.con-hero .header:has(.header__menu[open]) .header__nombre { color: var(--texto); }
.js body.con-hero .header.header--solido .header__hamburger,
.js body.con-hero .header:has(.header__menu[open]) .header__hamburger { border-color: var(--borde); }
.js body.con-hero .header.header--solido .header__hamburger span,
.js body.con-hero .header:has(.header__menu[open]) .header__hamburger span { background: var(--texto); }

/* Las migas viven dentro del hero: sin barra gris */
body.con-hero .pagina__hero .migas,
body.con-hero .hero .migas {
  background: none;
  border: 0;
  margin-bottom: .75rem;
}
body.con-hero .pagina__hero .migas .container { padding-inline: 0; }
body.con-hero .pagina__hero .migas__lista { padding-block: 0 .35rem; }

/* Con el header fijo (o sticky en las páginas sin hero), un salto a un ancla deja
   el destino debajo del header. scroll-margin-top lo corrige: aplica al objetivo,
   no al scroll, así que funciona igual con enlaces internos y con el skip-link. */
:target,
[id] { scroll-margin-top: calc(69px + 1rem); }

@media print {
  body.con-hero .header { position: static; }
  [id] { scroll-margin-top: 0; }
}

/* ── 23. Iconos dentro de los botones ────────────────────────────────────────
   El de WhatsApp va a la izquierda y la flecha de "Ver servicios" a la derecha.
   Los dos heredan currentColor, así que no hay que versionarlos por fondo. */
.btn__icono {
  width: 1.15em;
  height: 1.15em;
  flex-shrink: 0;
}
.btn__icono--izq { margin-right: -.1em; }
.btn__icono--der {
  margin-left: -.05em;
  transition: transform .15s ease;
}
.btn:hover .btn__icono--der { transform: translate(2px, -2px); }
@media (prefers-reduced-motion: reduce) {
  .btn:hover .btn__icono--der { transform: none; }
}


/* ── 24. Hero en celular: menos ruido arriba del pliegue ─────────────────────
   En pantalla chica el eyebrow y los chips empujan el H1 y los CTA fuera de la
   vista sin aportar información que no esté ya en el H1 o en la respuesta
   directa. Se ocultan por debajo de 768 px.

   Se usa display:none y no visibility ni opacity: si no se va a mostrar, que
   tampoco lo anuncie el lector de pantalla. El contenido no se pierde, está
   repetido en el H1 (la zona) y en el cuerpo (lo que decían los chips). */
@media (max-width: 767px) {
  .pagina__hero .pagina__eyebrow,
  .hero .hero__eyebrow,
  .hero .hero__estado { display: none; }
}