/* ==========================================================================
   Petroleum — capa compartida de los bloques de sección
   Antes esto vivía dentro de cada bloque HTML. Se movió aquí porque Rank Math
   analiza el contenido de la página: con el CSS y el JS incrustados, el 90% de
   la portada era código y sólo quedaban 74 palabras reales que analizar.
   Ahora los bloques que se pegan en Gutenberg son marcado y nada más.

   Vocabulario:
     .pg-sec      una sección de página (hero, servicios, pie…)
     .pg-bleed    la saca del contenedor de Gutenberg, a ancho completo
     .pg-geo      geometría dorada del fondo
     .pg-up       entra escalonado al asomar la sección
     .pg-card     tarjeta con "pop" al pasar el puntero
     .pg-letras   texto que se parte en letras y se aparta del cursor
     .pg-imanta   contenedor cuyos hijos .pg-huye se apartan del cursor
   ========================================================================== */

/* Todos los iconos son Material Symbols (Apache 2.0): son SÓLIDOS, así que se
   pintan con fill y no con stroke. */

/* --------------------------------------------------------------------------
   1. BASE DE SECCIÓN
   -------------------------------------------------------------------------- */
.pg-sec{
  position:relative;
  /* `overflow:hidden` convierte al elemento en contenedor de scroll y anula
     cualquier position:sticky que tenga dentro. `clip` recorta igual pero no
     crea contenedor. La primera línea es el respaldo para navegadores sin
     `clip`. La geometría además se recorta sola, así que aquí sobra casi. */
  overflow:hidden;
  overflow:clip;
  background:var(--pg-bg);color:var(--pg-fg);
  font-family:var(--pg-font);
  padding:clamp(56px,7vw,104px) clamp(20px,4vw,40px);
}
/* Blocksy mete relleno vertical en el contenedor del contenido
   (`data-vertical-spacing`). Cuando la página arranca con una sección nuestra
   sobra: la sección ya trae el suyo, y se acumulaban dos separaciones entre la
   cabecera y el hero. Se usa :has() para no tocar las páginas que no empiezan
   con un bloque nuestro, como las entradas del blog. */
.ct-container-full:has(> article > .entry-content > .pg-sec:first-child),
.ct-container:has(> article > .entry-content > .pg-sec:first-child){
  padding-top:0;
}
/* Y la primera sección respira menos por arriba: pega con la cabecera */
.entry-content > .pg-sec:first-child{padding-top:clamp(28px,3.2vw,50px);}

.pg-sec,.pg-sec *{box-sizing:border-box;}
.pg-sec *{min-width:0;}
.pg-sec__in{max-width:var(--pg-max);margin:0 auto;position:relative;z-index:1;}

/* Banda alterna. Dos secciones seguidas con el mismo fondo se leen como una
   sola cosa larga; con la banda, la página tiene ritmo sin cambiar de lenguaje.
   Alternar: hero (bg) → servicios (alt) → siguiente (bg) → … */
.pg-sec--alt{
  background:var(--pg-surface);
  border-top:1px solid var(--pg-line);
  border-bottom:1px solid var(--pg-line);
}
/* Sobre la banda, la tarjeta invierte el degradado para seguir despegando.
   Se excluye la que gira: su cuerpo vive en las caras, y si el contenedor
   pintara fondo asomarían sus esquinas rectas por detrás de las redondeadas
   — que es justo lo que se veía como "una tarjeta dentro de otra". */
.pg-sec--alt .pg-card:not(.pg-card--flip){
  background:var(--pg-bg);
  background:
    linear-gradient(158deg,
      color-mix(in srgb,var(--pg-gold) 5%, var(--pg-bg)) 0%,
      var(--pg-bg) 82%);
}
.pg-sec--alt .pg-chips li,
.pg-sec--alt .pg-card__cod{background:var(--pg-surface);}

/* Cabecera de sección: mismo bloque en todas, mismo aire debajo */
.pg-sec__cab{max-width:64ch;margin:0 0 clamp(34px,4vw,50px);}
.pg-sec__cab .pg-lead{margin-bottom:0;}

/* Variante pareada: titular a la izquierda, entradilla a la derecha.
   La cabecera normal se acota a 64ch para que el texto se lea; con un titular
   largo y una entradilla larga apilados, eso deja media pantalla vacía a la
   derecha. Aquí el par llena las dos columnas.

   No es el modo por omisión a propósito: sólo funciona cuando los dos textos
   dan para llenar su columna. Con una entradilla corta, la derecha se queda
   coja y se ve peor que apilada. Por eso va sección por sección.

   Las dos columnas se alinean por la BASE (`align-items:end`): así cierran a
   la misma altura sin importar en cuántas líneas parta cada una, que es lo que
   hace que se lean como una pieza y no como dos textos sueltos.

   La especificidad de `.pg-sec .pg-sec__cab--par h2.pg-t` (0-3-1) no es
   capricho: el margen inferior del titular lo pone `.pg-sec h2.pg-t` (0-2-1),
   que además vive MÁS ABAJO en este archivo. A igual peso ganaría aquélla por
   orden. Es el cuarto incidente del mismo tipo en el proyecto. */
.pg-sec__cab--par{
  max-width:none;
  display:grid;grid-template-columns:minmax(0,1.06fr) minmax(0,1fr);
  gap:clamp(22px,3.2vw,58px);align-items:end;
}
.pg-sec__cab--par>*{min-width:0;}
.pg-sec .pg-sec__cab--par h2.pg-t{margin-bottom:0;}
.pg-sec__cab--par .pg-lead{max-width:54ch;}

/* Por debajo de 900px la entradilla no cabe al lado del titular: se apila y
   recupera el margen y el ancho de lectura de la cabecera normal. */
@media (max-width:900px){
  .pg-sec__cab--par{grid-template-columns:1fr;gap:0;align-items:start;}
  .pg-sec .pg-sec__cab--par h2.pg-t{margin-bottom:20px;}
  .pg-sec__cab--par .pg-lead{max-width:64ch;}
}

/* Cierre de sección: la fila que remata y empuja al siguiente paso */
.pg-cierre{
  display:flex;flex-wrap:wrap;align-items:center;gap:18px 24px;
  margin-top:clamp(34px,4vw,48px);padding-top:28px;
  border-top:1px solid var(--pg-line);
}
.pg-cierre p{margin:0;max-width:52ch;font-size:15.5px;line-height:1.65;color:var(--pg-muted);}
.pg-cierre .pg-btn{margin-left:auto;}
@media (max-width:700px){
  .pg-cierre .pg-btn{margin-left:0;width:100%;}
}

/* Ancho completo aunque el bloque viva dentro del contenedor de Gutenberg o en
   un área de widgets, donde `alignfull` ni siquiera existe. --pg-sbw descuenta
   la barra de desplazamiento: sin eso, 100vw es más ancho que la página y
   aparece scroll horizontal. */
.pg-bleed{
  width:calc(100vw - var(--pg-sbw,0px));
  max-width:calc(100vw - var(--pg-sbw,0px));
  margin-left:calc(50% - (100vw - var(--pg-sbw,0px)) / 2);
  margin-right:calc(50% - (100vw - var(--pg-sbw,0px)) / 2);
}

/* --------------------------------------------------------------------------
   2. GEOMETRÍA DE FONDO
   Difuminado dorado + cuarto de círculo del icono + dos arcos de trazo fino.
   En reposo está en su estado final: sin JS se ve, sólo que quieta.
   -------------------------------------------------------------------------- */
.pg-geo{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0;}
.pg-geo > *{position:absolute;display:block;}

.pg-geo__glow{
  right:-8%;top:-30%;width:62%;padding-top:62%;
  background:radial-gradient(circle at 50% 50%,var(--pg-gold) 0%,transparent 68%);
  opacity:var(--pg-geo-glow);
}
.pg-geo__quad{
  right:-140px;top:-140px;width:420px;height:420px;
  border-radius:0 0 0 100%;background:var(--pg-gold);
  opacity:var(--pg-geo-fill);
}
.pg-geo__arc{
  left:-300px;bottom:-340px;width:660px;height:660px;
  border:1px solid var(--pg-gold);border-radius:50%;
  opacity:var(--pg-geo-arc);
}
.pg-geo__arc--2{left:auto;right:-220px;bottom:-260px;width:480px;height:480px;}

/* El hero es el único que lleva la geometría a plena intensidad. En las
   secciones de contenido baja, o dos difuminados seguidos compiten y el fondo
   se enturbia. */
.pg-geo--suave{opacity:.5;}

/* Variante izquierda: el cuarto de círculo pasa a la esquina superior IZQUIERDA
   para quedar detrás del titular. El difuminado se queda a la derecha, detrás
   de las tarjetas: así el peso visual no se acumula en un solo lado. */
.pg-geo--izq .pg-geo__quad{
  right:auto;left:-140px;top:-140px;
  border-radius:0 0 100% 0;
}
.pg-sec.is-armed .pg-geo--izq .pg-geo__quad{transform:scale(.7) translate(-26px,-26px);}

/* Variante espejo, para el pie: el difuminado entra por abajo a la izquierda */
.pg-geo--abajo .pg-geo__glow{right:auto;top:auto;left:-10%;bottom:-40%;width:70%;padding-top:70%;}
.pg-geo--abajo .pg-geo__quad{right:auto;top:auto;left:-160px;bottom:-160px;border-radius:0 100% 0 0;}
.pg-geo--abajo .pg-geo__arc{left:auto;bottom:auto;right:-280px;top:-220px;width:620px;height:620px;}
.pg-geo--abajo .pg-geo__arc--2{right:-190px;top:-130px;width:440px;height:440px;}

/* Escondida mientras el JS la va a animar */
.pg-sec.is-armed .pg-geo__glow{opacity:0;transform:scale(.84);}
.pg-sec.is-armed .pg-geo__quad{opacity:0;transform:scale(.7) translate(26px,-26px);}
.pg-sec.is-armed .pg-geo__arc{opacity:0;transform:translateX(-80px);}
.pg-sec.is-armed .pg-geo__arc--2{transform:translateX(80px);}

/* Y entra por los lados cuando la sección asoma */
.pg-sec.is-armed.is-live .pg-geo__glow{
  opacity:var(--pg-geo-glow);transform:scale(1);
  transition:opacity 900ms var(--pg-ease-out) 60ms,transform 1100ms var(--pg-ease) 60ms;
}
.pg-sec.is-armed.is-live .pg-geo__quad{
  opacity:var(--pg-geo-fill);transform:none;
  /* rebote corto al asentar: el "pop" */
  transition:opacity 520ms var(--pg-ease-out) 180ms,
             transform 700ms cubic-bezier(.34,1.4,.64,1) 180ms;
}
.pg-sec.is-armed.is-live .pg-geo__arc{
  opacity:var(--pg-geo-arc);transform:none;
  transition:opacity 760ms var(--pg-ease-out) 260ms,transform 900ms var(--pg-ease) 260ms;
}
.pg-sec.is-armed.is-live .pg-geo__arc--2{transition-delay:360ms;}

/* --------------------------------------------------------------------------
   3. ENTRADA ESCALONADA
   Arranca visible. Sólo se esconde si el JS está vivo para volver a mostrarla:
   sin JS no se pierde una sola palabra.
   -------------------------------------------------------------------------- */
.pg-sec .pg-up{transition:opacity 700ms var(--pg-ease-out),transform 700ms var(--pg-ease);}
.pg-sec.is-armed .pg-up{opacity:0;transform:translateY(16px);}
.pg-sec.is-armed .pg-up.is-in{opacity:1;transform:none;}

/* --------------------------------------------------------------------------
   4. TIPOGRAFÍA DE SECCIÓN
   -------------------------------------------------------------------------- */
/* Antetítulo.

   Llevaba delante el cuarto de círculo del icono, repetido en las siete
   secciones y en el mismo sitio: a fuerza de repetirse dejó de leerse como
   marca y empezó a leerse como adorno de plantilla. Se retiró (2026-08-18).

   En su lugar, el propio texto es de metal: una franja de luz lo cruza cada
   pocos segundos, como cuando se gira una moneda bajo una lámpara. El color
   base sigue siendo --pg-accent; lo que se mueve es el destello.

   Cuidados:
     · `background-clip:text` necesita `color:transparent`, así que el color
       real se declara ANTES y sólo se anula donde la propiedad existe. Sin
       soporte, el antetítulo se ve dorado y quieto, que es el estado correcto.
     · `inline-flex` pasa a `inline-block`: un contenedor flex sin hijos de
       texto directo no recorta el fondo contra las letras.
     · El bucle se detiene con `prefers-reduced-motion` (más abajo). */
.pg-eyebrow{
  display:inline-block;margin:0 0 18px;
  font-size:13px;font-weight:800;
  letter-spacing:.14em;text-transform:uppercase;color:var(--pg-accent);
}
/* El destello NO se mueve con `background-position` (2026-08-18).

   Se intentó primero así, con un fondo del 280% del ancho, y el brillo se veía
   cortado a media palabra. La razón: cuando la imagen de fondo es MÁS ANCHA
   que la caja, los porcentajes de `background-position` se calculan sobre
   (ancho de caja − ancho de imagen), que es negativo. El resultado deja de
   ser intuitivo y depende del largo de cada antetítulo, así que cada uno
   brillaba en un punto distinto.

   Lo que se mueve ahora es la POSICIÓN DE LA PARADA dentro del degradado, con
   una custom property animada vía @property. El fondo mide exactamente lo que
   la caja, así que --pg-x va de 130% (fuera por la derecha) a -30% (fuera por
   la izquierda) y el barrido es idéntico mida lo que mida el texto.

   Sin @property —Firefox anterior al 128— la propiedad no se puede animar: el
   antetítulo se queda con el valor inicial, 130%, que es todo color de acento.
   Es decir, se ve exactamente como antes de este efecto. */
@property --pg-x{
  syntax:'<percentage>';
  inherits:false;
  initial-value:130%;
}
@supports (background-clip:text) or (-webkit-background-clip:text){
  .pg-eyebrow{
    background-image:linear-gradient(
      100deg,
      var(--pg-accent) calc(var(--pg-x) - 26%),
      var(--pg-brillo) var(--pg-x),
      var(--pg-accent) calc(var(--pg-x) + 26%)
    );
    background-size:100% 100%;
    background-repeat:no-repeat;
    -webkit-background-clip:text;
    background-clip:text;
    color:transparent;
    animation:pg-moneda 5.2s var(--pg-ease-out) infinite;
  }
}
/* El destello cruza en el primer tercio del ciclo y el resto es reposo: un
   brillo cada 5 s se percibe como material, uno continuo como banner. */
@keyframes pg-moneda{
  0%   { --pg-x:130%; }
  34%  { --pg-x:-30%; }
  100% { --pg-x:-30%; }
}
.pg-sec h1,.pg-sec h2.pg-t{
  margin:0 0 20px;color:var(--pg-head);font-weight:800;
  line-height:1.14;letter-spacing:-.02em;text-wrap:balance;
}
.pg-sec h1{font-size:clamp(34px,5.2vw,60px);line-height:1.12;}
/* Un escalón por debajo del H1: la portada tiene un solo titular principal */
.pg-sec h2.pg-t{font-size:clamp(26px,3.3vw,40px);}
.pg-lead{
  margin:0 0 32px;font-size:clamp(16px,1.5vw,18px);line-height:1.7;
  color:var(--pg-fg);max-width:62ch;
}
.pg-lead strong{color:var(--pg-head);font-weight:700;}
.pg-cta{display:flex;flex-wrap:wrap;gap:14px;}

/* --------------------------------------------------------------------------
   5. TARJETAS
   -------------------------------------------------------------------------- */
.pg-card{
  position:relative;z-index:1;overflow:hidden;isolation:isolate;
  background:var(--pg-surface);   /* respaldo si no hay color-mix */
  background:
    linear-gradient(158deg,
      color-mix(in srgb,var(--pg-gold) 7%, var(--pg-surface)) 0%,
      var(--pg-bg) 78%);
  border:1px solid var(--pg-line);border-radius:16px;
  padding:28px 26px;
  transition:
    transform 420ms var(--pg-ease),
    box-shadow 420ms var(--pg-ease),
    border-color 300ms var(--pg-ease);
}
.pg-card--wide{grid-column:1 / -1;}

/* Filete dorado superior, se dibuja de izquierda a derecha */
.pg-card::before{
  content:"";position:absolute;left:0;top:0;height:2px;width:100%;
  background:linear-gradient(90deg,transparent,var(--pg-gold),transparent);
  transform:scaleX(0);transform-origin:left;
  transition:transform var(--pg-slow) var(--pg-ease);
}
/* Foco de luz: el JS le pasa la posición del cursor en --pg-sx / --pg-sy */
.pg-card::after{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(260px circle at var(--pg-sx,50%) var(--pg-sy,50%),
             var(--pg-gold) 0%,transparent 60%);
  opacity:0;transition:opacity 300ms linear;
}
/* La esquina: el cuarto de círculo del icono, otra vez */
.pg-card__esq{
  position:absolute;right:-1px;top:-1px;width:56px;height:56px;
  border-radius:0 16px 0 100%;
  background:var(--pg-gold);opacity:calc(var(--pg-ico) * .72);
  transform-origin:top right;
  transition:transform 560ms var(--pg-ease),opacity 300ms linear;
}
/* --------------------------------------------------------------------------
   5c. TARJETA DE SERVICIO
   La tarjeta NO es un <a>. Antes lo era, y como dentro llevaba los enlaces a
   ASEA/CRE/SAT quedaban anclas anidadas: el parser de HTML no las admite y
   partía la tarjeta en trozos —el título en una caja y el párrafo en otra—.
   Ahora el enlace vive en el título y se estira sobre toda la tarjeta con un
   pseudo-elemento, así que se puede pulsar entera con un solo <a> dentro.
   -------------------------------------------------------------------------- */
.pg-card--srv{display:flex;flex-direction:column;}

/* Fila superior: icono + código de norma. Es lo que hace que la tarjeta se lea
   como UNA pieza y no como elementos sueltos apilados. */
.pg-card__top{
  display:flex;align-items:center;justify-content:space-between;
  gap:12px;margin:0 0 20px;
}
.pg-card__ib{
  flex:none;display:grid;place-items:center;
  width:46px;height:46px;border-radius:13px;
  background:var(--pg-bg);border:1px solid var(--pg-line);
  color:var(--pg-accent);
  transition:background-color 320ms var(--pg-ease),
             border-color 320ms var(--pg-ease),
             color 320ms var(--pg-ease);
}
.pg-sec--alt .pg-card__ib{background:var(--pg-surface);}
.pg-card__ib svg{width:23px;height:23px;fill:currentColor;stroke:none;}

.pg-card--srv .pg-card__ttl{margin:0 0 10px;font-size:20px;line-height:1.28;}
.pg-card--srv .pg-card__ttl a{color:inherit;text-decoration:none;}
/* El enlace se estira sobre la tarjeta entera */
.pg-card__enl::after{content:"";position:absolute;inset:0;z-index:3;border-radius:inherit;}
.pg-card__enl:focus-visible::after{outline:2px solid var(--pg-accent);outline-offset:-3px;}

/* Remate: separado por un filete y pegado abajo, para que quede a la misma
   altura en todas las tarjetas por larga o corta que sea la descripción. */
.pg-card--srv .pg-card__mas{
  margin:auto 0 0;padding-top:18px;width:100%;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  border-top:1px solid var(--pg-line);
  font-size:14px;font-weight:800;color:var(--pg-accent);
}
.pg-card__flecha{
  flex:none;display:grid;place-items:center;
  width:34px;height:34px;border-radius:50%;
  border:1px solid var(--pg-line);color:var(--pg-accent);
  transition:background-color 300ms var(--pg-ease),
             border-color 300ms var(--pg-ease),
             color 300ms var(--pg-ease),
             transform 300ms var(--pg-ease);
}
.pg-card__flecha svg{width:16px;height:16px;fill:currentColor;stroke:none;}

@media (hover:hover) and (pointer:fine){
  .pg-card--srv:not(.pg-card--ico):hover .pg-card__ib{
    background:var(--pg-gold);border-color:var(--pg-gold);color:var(--pg-on-gold);
  }
  .pg-card--srv:hover .pg-card__flecha{
    background:var(--pg-gold);border-color:var(--pg-gold);color:var(--pg-on-gold);
    transform:translateX(4px);
  }
}

@media (hover:hover) and (pointer:fine){
  .pg-card:hover{
    z-index:2;
    transform:scale(1.035) translateY(-6px);
    border-color:var(--pg-gold);
    box-shadow:0 32px 64px -32px var(--pg-shadow),
               0 4px 12px -8px var(--pg-glow);
  }
  .pg-card:hover::before{transform:scaleX(1);}
  .pg-card:hover::after{opacity:.13;}
  .pg-card:hover .pg-card__esq{transform:scale(1.45);opacity:calc(var(--pg-ico) * 1.45);}
}

/* --------------------------------------------------------------------------
   5d. TARJETA CON EL ICONO DE FONDO  (.pg-card--ico)
   Variante de `.pg-card--srv` para el portal de clientes. El icono deja de ser
   una insignia de 46px en su propia fila y pasa a MARCA DE AGUA: grande, en
   dorado tenue, anclado arriba a la izquierda y recortado por el borde de la
   tarjeta. El texto se queda solo y se centra en el hueco.

   Tres cosas que conviene saber antes de tocarlo:

   · **El recorte no lleva codigo nuevo.** `.pg-card` ya trae `overflow:hidden`
     —estaba por el halo del cursor— y los margenes negativos hacen el resto.
     Si algun dia se le quitara el `overflow`, el icono se saldria de la caja y
     pisaria la tarjeta de al lado.

   · **`.pg-card__top` sale del flujo con `position:absolute`.** En flujo
     seguiria reservando su alto, y entonces el texto no quedaria centrado en
     la TARJETA sino en el hueco que sobra por debajo del icono, que es medio
     centimetro mas abajo y se nota.

   · **El icono ya no se rellena de dorado al pasar el cursor**, como si hace
     la insignia: a 150px seria un bloque dorado macizo comiendose la tarjeta.
     Lo que hace es SUBIR DE OPACIDAD, igual que la marca de agua de las
     tarjetas de servicio. Por eso las reglas de la insignia llevan
     `:not(.pg-card--ico)` — es mas claro excluir la variante donde se define
     el efecto que perseguirla despues con mas especificidad.

   El tamano y el desplazamiento van en variables propias para poder ajustarlos
   en un solo sitio; el desplazamiento negativo ES lo que se sale de la caja.
   -------------------------------------------------------------------------- */
.pg-card--ico{
  /* Los seis numeros van SIN UNIDAD, en px, y se multiplican por 1px donde se
     usan. No es manía: la escala del recogido es `--pg-ib-fin / --pg-ib`, y
     calc() sólo divide por un NÚMERO — `calc(48px / 150px)` es sintaxis
     inválida y tumba la declaración entera, en silencio. */
  --pg-ib:150;     /* lado del icono en reposo */
  --pg-ib-x:-40;   /* lo que se sale por la izquierda */
  --pg-ib-y:-46;   /* … y por arriba */
  /* Destino al activarse: donde queda la esquina superior izquierda del icono
     ya recogido, medida desde la misma esquina de la tarjeta. */
  --pg-ib-fin:48;
  --pg-ib-fx:22;
  --pg-ib-fy:22;
  /* Aire entre el borde de abajo del icono RECOGIDO y el titular. */
  --pg-ib-aire:20px;
  justify-content:center;text-align:center;
  min-height:250px;
  /* El relleno de arriba se mide contra el icono RECOGIDO, no contra la marca
     de agua. Es la correccion de la v2.48.2, que despejaba los 104px del icono
     grande y abria un boquete: **la marca de agua es fondo**, esta al 15% de
     opacidad y su oficio es justamente que el texto pase por encima. El que
     tiene que respirar es el icono al que se transforma, que es opaco y se lee
     como una pieza mas de la tarjeta.

     Asi que la cuenta va con las variables del destino: el icono recogido
     acaba en `--pg-ib-fy + --pg-ib-fin` —su posicion mas su lado, hoy
     22 + 48 = 70px— y a eso se le suma el aire. Moviendo el destino, el texto
     lo sigue.

     Va en px fijos y NO en `vw`: el icono recogido mide 48px en todas las
     pantallas, y un relleno que encogiera con el ancho dejaria de despejarlo
     justo en el movil, que es donde la tarjeta ocupa el ancho entero. */
  padding:calc((var(--pg-ib-fy) + var(--pg-ib-fin)) * 1px + var(--pg-ib-aire))
          clamp(24px,2.4vw,30px)
          clamp(30px,3.2vw,40px);
}
.pg-card--ico .pg-card__top{
  position:absolute;left:0;top:0;z-index:0;
  display:block;margin:0;pointer-events:none;
}
.pg-card--ico .pg-card__ib{
  width:calc(var(--pg-ib) * 1px);height:calc(var(--pg-ib) * 1px);
  margin:calc(var(--pg-ib-y) * 1px) 0 0 calc(var(--pg-ib-x) * 1px);
  border:0;border-radius:0;background:none;
  transform-origin:top left;
  /* Las tres cosas que cambian al activarse la tarjeta. El valor de reposo es
     el de reserva de cada `var()`; encender la tarjeta es reapuntarlas. */
  color:var(--pg-ib-col,var(--pg-gold));
  opacity:var(--pg-ib-op,var(--pg-ico));
  transform:var(--pg-ib-tr,none);
  transition:opacity 520ms var(--pg-ease),
             transform 620ms var(--pg-ease-out),
             color 520ms var(--pg-ease);
}
/* La banda alterna pinta la insignia de otro color; la marca de agua no lleva
   caja, asi que no tiene fondo que pintar. */
.pg-sec--alt .pg-card--ico .pg-card__ib{background:none;}
.pg-card--ico .pg-card__ib svg{width:100%;height:100%;}

/* El texto, por delante de la marca de agua y acotado para que centrado no
   quede un renglon suelto de borde a borde. */

/* El titular NO reserva renglones de mas.

   Se intento en la v2.48.1: como «Los documentos, no solo el dictamen» ocupa
   dos renglones y los otros dos titulares uno, se le puso `min-height` de dos
   renglones a los tres para que arrancaran a la misma altura. Salio peor por
   partida doble. En las tarjetas 1 y 3 quedaba un renglon FANTASMA entre el
   titular y su parrafo —un hueco que no estaba en la del medio—, y como el
   bloque va centrado en vertical, los 25px de mas empujaban el texto hacia
   ARRIBA, con lo que se montaba mas sobre la marca de agua en vez de menos.

   El desnivel de un renglon entre tarjetas no era el problema: el problema era
   que el texto invadia el icono. Eso se arregla despejando el icono con el
   relleno de arriba, que es donde se resolvio, y no falseando la altura del
   titular. `text-wrap:balance` se queda: parte el titular largo en dos lineas
   parejas en vez de una llena y una coja. */
.pg-card--ico .pg-card__ttl{
  position:relative;z-index:1;margin:0 0 7px;font-size:20px;
  text-wrap:balance;
}
.pg-card--ico p{position:relative;z-index:1;max-width:36ch;margin-left:auto;margin-right:auto;}

/* --- La transformacion ---------------------------------------------------
   Al activarse la tarjeta la marca de agua se RECOGE: se encoge hasta 48px, se
   mete dentro de la tarjeta y se enciende en dorado opaco. Al salir el cursor
   deshace el camino y vuelve a ser fondo. Es UN movimiento, no dos iconos que
   se cruzan en un fundido.

   **Por que `transform` y no `width`/`height`/`margin`.** Animar la caja obliga
   al navegador a rehacer el diseno en cada fotograma, y este icono va dentro de
   una tarjeta que a la vez se esta escalando en su propio `:hover`. Con
   `transform` y `opacity` los dos movimientos se resuelven en la capa de
   composicion y no se pisan.

   **La cuenta del desplazamiento**, para poder ajustarla sin adivinar: con
   `transform-origin:top left`, `translate()` mueve la esquina superior
   izquierda del icono y `scale()` encoge desde esa esquina ya movida. La
   esquina parte de (--pg-ib-x, --pg-ib-y) —negativos, por eso se sale— y tiene
   que acabar en (--pg-ib-fx, --pg-ib-fy): el desplazamiento es la resta de las
   dos. Cambiando cualquiera de los cuatro numeros de arriba, esto se recoloca
   solo.

   **Vive en una variable, `--pg-ib-tr-on`, y no repetida en cada disparador.**
   Son dos —el cursor en escritorio y `.is-activa` en movil— y estan en medias
   distintas, asi que no pueden compartir regla. Lo que no se puede duplicar es
   la cuenta: si se escribiera dos veces, el dia que se toque un numero una de
   las dos se queda vieja y el icono aterriza en distinto sitio segun el
   dispositivo. Los disparadores solo reapuntan variables.

   **El color de destino es `--pg-accent`, no `--pg-gold`.** Es el mismo dorado
   que ya llevaba la insignia, y el unico que se lee en los dos temas: el
   dorado de marca a plena opacidad da 2.32:1 sobre blanco.
   ------------------------------------------------------------------------- */
.pg-card--ico{
  --pg-ib-tr-on:
    translate(calc((var(--pg-ib-fx) - var(--pg-ib-x)) * 1px),
              calc((var(--pg-ib-fy) - var(--pg-ib-y)) * 1px))
    scale(calc(var(--pg-ib-fin) / var(--pg-ib)));
}

@media (hover:hover) and (pointer:fine){
  .pg-card--ico:hover{
    --pg-ib-tr:var(--pg-ib-tr-on);
    --pg-ib-op:1;
    --pg-ib-col:var(--pg-accent);
  }
}

.pg-card__num{
  display:block;position:relative;font-size:clamp(34px,3.6vw,46px);font-weight:800;line-height:1;
  color:var(--pg-accent);letter-spacing:-.02em;font-variant-numeric:tabular-nums;
}
/* La caja NO es cuadrada: toma la proporción de la silueta (1.52) para que no
   sobre aire arriba y abajo. El viewBox del SVG va recortado al contorno, así
   que la figura llena la caja entera. */
.pg-card__icobox{
  display:block;width:clamp(62px,6.2vw,82px);aspect-ratio:1.52;height:auto;
  margin-bottom:16px;
}
.pg-card__ico{
  display:block;width:100%;height:100%;
  fill:var(--pg-accent);stroke:none;
}
.pg-card__ttl{
  display:block;position:relative;margin:0 0 8px;
  font-size:19px;font-weight:800;color:var(--pg-head);letter-spacing:-.01em;line-height:1.25;
}
.pg-card__lbl{display:block;margin-top:10px;font-size:14px;line-height:1.6;color:var(--pg-muted);}
.pg-card p{margin:0 0 10px;font-size:14.5px;line-height:1.65;color:var(--pg-fg);}
.pg-card p:last-child{margin-bottom:0;}
.pg-card h2,.pg-card__rot{
  position:relative;
  margin:0 0 14px;font-size:15px;font-weight:800;color:var(--pg-head);
  letter-spacing:.06em;text-transform:uppercase;
}
/* Código de norma. Va con el MISMO aspecto que las burbujas de "Alcances
   acreditados" del hero: es lo que ata visualmente las dos secciones — el
   lector reconoce la etiqueta que ya vio arriba. */
.pg-card__cod{
  display:inline-block;align-self:flex-start;margin:0 0 14px;
  font-size:12.5px;font-weight:800;letter-spacing:.06em;
  padding:6px 12px;border-radius:99px;
  background:var(--pg-bg);border:1px solid var(--pg-line);
  color:var(--pg-accent);
  font-variant-numeric:tabular-nums;
  transition:border-color var(--pg-base) var(--pg-ease);
}
@media (hover:hover) and (pointer:fine){
  .pg-card:hover .pg-card__cod{border-color:var(--pg-gold);}
}
/* Pie de tarjeta: el "ver más" con su flecha */
.pg-card__mas{
  display:inline-flex;align-items:center;gap:8px;margin-top:16px;
  font-size:14px;font-weight:800;color:var(--pg-accent);
}
.pg-card__mas svg{
  width:16px;height:16px;flex:none;
  fill:currentColor;stroke:none;
  transition:transform var(--pg-base) var(--pg-ease);
}
@media (hover:hover) and (pointer:fine){
  .pg-card:hover .pg-card__mas svg{transform:translateX(4px);}
}

/* Burbujas */
.pg-chips{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;}
.pg-chips li{
  font-size:13px;font-weight:700;padding:7px 12px;border-radius:99px;
  background:var(--pg-bg);border:1px solid var(--pg-line);color:var(--pg-fg);
  transition:border-color var(--pg-base) var(--pg-ease),
             color var(--pg-base) var(--pg-ease);
}
@media (hover:hover) and (pointer:fine){
  .pg-chips li:hover{border-color:var(--pg-gold);color:var(--pg-accent);}
}

/* Retículas */
.pg-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;}
/* grid-auto-rows:1fr iguala TODAS las filas, no sólo las tarjetas de una misma
   fila. Sin esto, la fila con el texto más largo marca su altura y la otra
   queda más baja. */
.pg-grid-3{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;
  grid-auto-rows:1fr;
}

/* --------------------------------------------------------------------------
   5b. HERO — la única sección con dos columnas asimétricas
   -------------------------------------------------------------------------- */
.pg-hero__in{
  display:grid;grid-template-columns:1.15fr .85fr;
  gap:clamp(32px,5vw,64px);align-items:center;
}
@media (max-width:900px){
  .pg-hero__in{grid-template-columns:1fr;}
}

/* --------------------------------------------------------------------------
   6. ANTI-IMÁN
   .pg-ch son letras sueltas; .pg-huye es cualquier elemento que deba apartarse
   (un icono, una burbuja). El contenedor va marcado con .pg-imanta o .pg-letras
   y debe ser position:relative: los centros se cachean respecto a él para no
   medir en cada fotograma.
   -------------------------------------------------------------------------- */
/* `normal` y no `pre-wrap`. Lo era porque los espacios eran `.pg-ch` sueltos;
   ahora van como texto normalizado entre palabras, y `pre-wrap` sólo traería
   problemas: conservaría el sangrado de un titular escrito en dos líneas del
   bloque, y dejaría el espacio que precede a un corte forzado colgando al
   principio de la línea siguiente. */
.pg-letras{position:relative;white-space:normal;}

/* EL TITULAR SE PARTÍA POR LA MITAD DE UNA PALABRA
   ----------------------------------------------------------------------------
   `.pg-ch` es `inline-block`: una caja atómica. El navegador puede cortar la
   línea entre dos cajas cualesquiera, así que un titular partido en letras no
   tiene palabras que respetar y envuelve por donde le cabe. En `/contacto/`
   salía «Cotización en m» arriba y «enos de 24 horas» abajo.

   `partir()` envuelve cada palabra en `.pg-pal` y este `nowrap` suprime el
   corte dentro, dejando la oportunidad sólo donde debe estar: en el espacio
   entre palabras, que va como texto suelto.

   Va en el envoltorio y no en `.pg-letras`: un `nowrap` en el contenedor
   impediría TODO corte y el titular se saldría por la derecha. */
.pg-pal{white-space:nowrap;}

/* EL CORTE QUE DECIDE EL DISEÑO
   ----------------------------------------------------------------------------
   `<br class="pg-quiebre">` marca dónde QUERRÍAMOS que parta el titular. Nace
   apagado y lo enciende `quebrar()` en `bloques.js` —y sólo si lo de arriba
   entra en una línea—.

   Apagado por omisión y no al revés, que es lo que lo hace seguro: sin guión,
   en un teléfono o en una ventana estrecha, el titular envuelve solo y nunca
   se sale. El corte es una preferencia, no un requisito. */
.pg-quiebre{display:none;}
.is-quiebre > .pg-quiebre{display:inline;}

/* Texto dorado dentro de un titular. `--pg-accent` y NO `--pg-gold`: el dorado
   de marca da 2.32:1 sobre blanco y no se puede usar como texto en tema claro.
   El token vale para los dos temas —#806900 sobre claro, 5.33:1; #cba705 sobre
   negro, 8.39:1— y por eso no hace falta escribir el color dos veces. */
.pg-oro{color:var(--pg-accent);}
.pg-ch{display:inline-block;}
.pg-ch,.pg-huye{transition:transform 460ms var(--pg-ease);}
.pg-imanta{position:relative;}

/* --------------------------------------------------------------------------
   7. RESPONSIVO
   -------------------------------------------------------------------------- */
@media (max-width:980px){
  .pg-grid-3{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:900px){
  .pg-geo__quad{width:260px;height:260px;right:-90px;top:-90px;}
  .pg-geo--izq .pg-geo__quad{right:auto;left:-90px;top:-90px;}
  .pg-geo--abajo .pg-geo__quad{right:auto;left:-100px;bottom:-100px;}
}
/* A una sola columna antes que el resto: con dos, la tarjeta de servicio se
   queda demasiado estrecha y el nombre de la norma parte mal. */
@media (max-width:760px){
  .pg-grid-3{grid-template-columns:1fr;}
}
@media (max-width:560px){
  .pg-grid-2{grid-template-columns:1fr;}
  .pg-cta .pg-btn{width:100%;}
}
/* --------------------------------------------------------------------------
   Tarjeta de servicio en móvil
   A una sola columna se ensancha y se queda baja: pierde la proporción vertical
   del escritorio. Se le devuelve con una altura mínima, el nombre de la norma
   crece y el icono deja la esquina para ponerse al centro, como marca de agua
   detrás del nombre.
   -------------------------------------------------------------------------- */
@media (max-width:760px){
  .pg-flip__frente{min-height:min(78vw,340px);}

  .pg-flip__cod{font-size:clamp(24px,6.4vw,32px);}

  .pg-flip__icono{
    left:50%;right:auto;top:50%;bottom:auto;
    width:min(58vw,240px);height:min(58vw,240px);
    transform:translate(-50%,-42%);
    transform-origin:center;
    opacity:var(--pg-ico);
  }

  /* Iluminación por scroll: el motor de bloques.js marca la tarjeta que cruza
     el centro de la pantalla. Mismo mecanismo que la baraja del proceso, pero
     aquí NO se desenfocan las demás: cada tarjeta lleva un enlace y un botón, y
     desenfocarlas las haría parecer deshabilitadas. Sólo se atenúan. */
  .pg-grid-3.is-tocada .pg-card--flip{
    opacity:.72;
    transition:opacity 380ms var(--pg-ease);
  }
  .pg-grid-3 .pg-card--flip.is-activa{opacity:1;}
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip__cara{
    border-color:var(--pg-gold);
    box-shadow:0 26px 46px -26px var(--pg-shadow),
               0 6px 18px -10px var(--pg-glow);
  }
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip__icono{opacity:var(--pg-ico-on);}
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip__ojo{
    border-color:var(--pg-gold);color:var(--pg-accent);
  }
  .pg-grid-3 .pg-card--flip.is-activa .pg-card__flecha{border-color:var(--pg-gold);}

  /* Y ADEMÁS SE GIRA SOLA.
     ------------------------------------------------------------------------
     En escritorio la tarjeta enseña el reverso al pasar el cursor. En móvil no
     hay cursor, así que ese contenido —el alcance de cada norma, que es la
     razón de ser de la tarjeta— dependía de que alguien descubriera el botón
     del ojo y lo pulsara. En la práctica no lo pulsa nadie: la mitad de la
     sección era invisible en teléfono.

     Ahora el scroll hace de cursor y la que cruza el centro se voltea. Se lee
     como una baraja que se va mostrando, y no hay nada que descubrir.

     El giro dura 720 ms y la banda activa es el 10% central de la pantalla, así
     que a velocidad de lectura da tiempo a completarse. Bajando muy rápido las
     tarjetas se quedan a medio girar y vuelven — que es el comportamiento
     correcto: nadie está leyendo.

     Se reutilizan las mismas declaraciones que `.is-flip`, no otras nuevas: si
     algún día cambia el giro, cambia en un solo sitio. Y el botón del ojo sigue
     funcionando, porque `.is-flip` y `.is-activa` son alternativas, no rivales:
     quien quiera fijar una tarjeta fuera de la banda, puede. */
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip{transform:rotateY(180deg);}
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip__frente{opacity:0;}
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip__tras{opacity:1;}

  /* Tarjetas SIN giro —las del portal—: el mismo motor, pero aquí sólo se
     encienden. No tienen reverso que enseñar. */
  .pg-grid-3.is-tocada .pg-card--srv{
    opacity:.72;
    transition:opacity 380ms var(--pg-ease),
               border-color 300ms var(--pg-ease),
               box-shadow 420ms var(--pg-ease),
               transform 420ms var(--pg-ease);
  }
  .pg-grid-3 .pg-card--srv.is-activa{
    opacity:1;
    transform:translateY(-4px);
    border-color:var(--pg-gold);
    box-shadow:0 26px 46px -26px var(--pg-shadow),
               0 6px 18px -10px var(--pg-glow);
  }
  .pg-grid-3 .pg-card--srv:not(.pg-card--ico).is-activa .pg-card__ib{
    background:var(--pg-gold);border-color:var(--pg-gold);color:var(--pg-on-gold);
  }
  /* La marca de agua no se rellena de dorado como la insignia: hace la MISMA
     transformacion que en escritorio, reapuntando las mismas variables. La
     cuenta esta en `--pg-ib-tr-on`, en la seccion 5d. */
  .pg-grid-3 .pg-card--ico.is-activa{
    --pg-ib-tr:var(--pg-ib-tr-on);
    --pg-ib-op:1;
    --pg-ib-col:var(--pg-accent);
  }
}

/* --------------------------------------------------------------------------
   8. MOVIMIENTO REDUCIDO
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  .pg-card__ib,.pg-card__flecha,.pg-card__cod,
  .pg-card,.pg-card::before,.pg-card::after,.pg-card__esq,
  .pg-chips li,.pg-ch,.pg-huye,.pg-sec .pg-up,.pg-card__mas svg{
    transition:none !important;
  }
  .pg-card:hover{transform:none;}
  .pg-card--srv:hover .pg-card__flecha{transform:none;}
  .pg-sec.is-armed .pg-up{opacity:1;transform:none;}
  .pg-sec.is-armed .pg-geo__glow,
  .pg-sec.is-armed .pg-geo__quad,
  .pg-sec.is-armed .pg-geo__arc{opacity:revert-layer;transform:none;}
}

/* --------------------------------------------------------------------------
   9. PIE DE PÁGINA
   Es una .pg-sec más, con su propia retícula. El pie de Blocksy queda oculto
   desde petroleum.css: éste lo sustituye.
   -------------------------------------------------------------------------- */
.pg-foot{
  font-size:15px;line-height:1.65;
  padding:clamp(52px,6vw,84px) clamp(20px,4vw,40px) clamp(24px,3vw,32px);
  border-top:1px solid var(--pg-line);
}

/* Franja superior: marca + llamado a la acción */
.pg-foot__top{
  display:grid;grid-template-columns:1.1fr .9fr;
  gap:clamp(28px,4vw,56px);align-items:center;
}
.pg-brand{display:inline-flex;align-items:center;gap:14px;margin:0 0 18px;text-decoration:none;}
/* Marca gráfica: el cuarto de círculo del icono.
   Para usar el logo real, sustituye .pg-brand__mark por una <img>. */
.pg-brand__mark{
  flex:none;width:40px;height:40px;
  background:linear-gradient(145deg,var(--pg-gold-hi),var(--pg-gold-lo));
  border-radius:3px 3px 3px 100%;
  transition:transform 480ms var(--pg-ease),box-shadow 480ms var(--pg-ease);
}
.pg-brand__name{display:block;font-size:17px;font-weight:800;color:var(--pg-head);letter-spacing:-.01em;}
.pg-brand__legal{display:block;font-size:12px;font-weight:500;color:var(--pg-muted);letter-spacing:.02em;}
.pg-foot__claim{margin:0;max-width:48ch;color:var(--pg-fg);}
.pg-foot__claim strong{color:var(--pg-head);font-weight:700;}

.pg-foot__cta{
  position:relative;overflow:hidden;
  background:var(--pg-surface);border:1px solid var(--pg-line);border-radius:14px;
  padding:clamp(22px,2.4vw,28px);
  transition:border-color var(--pg-base) var(--pg-ease),box-shadow var(--pg-base) var(--pg-ease);
}
.pg-foot__cta::before{
  content:"";position:absolute;left:0;top:0;height:2px;width:100%;
  background:linear-gradient(90deg,transparent,var(--pg-gold),transparent);
  transform:scaleX(0);transform-origin:left;
  transition:transform var(--pg-slow) var(--pg-ease);
}
.pg-foot__cta h2{
  margin:0 0 8px;font-size:19px;font-weight:800;color:var(--pg-head);
  line-height:1.25;letter-spacing:-.01em;text-transform:none;
}
.pg-foot__cta p{margin:0 0 18px;font-size:14px;color:var(--pg-muted);}
.pg-foot__btns{display:flex;flex-wrap:wrap;gap:12px;}
.pg-foot__btns .pg-btn{padding:13px 24px;min-height:48px;font-size:14px;}

.pg-foot__rule{border:0;border-top:1px solid var(--pg-line);margin:clamp(36px,4vw,52px) 0;}

/* Columnas */
.pg-foot__cols{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:clamp(24px,3vw,40px);
}
.pg-col h2{
  position:relative;margin:0 0 18px;padding-bottom:12px;
  font-size:13px;font-weight:800;color:var(--pg-head);
  letter-spacing:.12em;text-transform:uppercase;
}
.pg-col h2::after{
  content:"";position:absolute;left:0;bottom:0;width:22px;height:2px;
  background:var(--pg-gold);border-radius:2px;
}
.pg-col ul{margin:0;padding:0;list-style:none;}
.pg-col li{margin:0 0 11px;}
.pg-col a{
  position:relative;display:inline-block;
  color:var(--pg-fg);text-decoration:none;font-size:14.5px;
  transition:color var(--pg-base) var(--pg-ease),transform var(--pg-base) var(--pg-ease);
}
/* Subrayado direccional: entra por la izquierda, sale por la derecha */
.pg-col a::after,.pg-bar a::after,.pg-credit a::after{
  content:"";position:absolute;left:0;right:0;bottom:-2px;height:1.5px;
  background:currentColor;border-radius:2px;
  transform:scaleX(0);transform-origin:right center;
  transition:transform 340ms var(--pg-ease);
}

/* Contacto */
.pg-contact{margin:0;font-style:normal;}
.pg-contact div{display:flex;gap:10px;margin:0 0 12px;font-size:14.5px;}
.pg-contact div > span{min-width:0;overflow-wrap:anywhere;}
.pg-contact svg{
  flex:none;width:17px;height:17px;margin-top:3px;
  fill:var(--pg-accent);stroke:none;
  transition:transform var(--pg-base) var(--pg-ease);
}
.pg-contact a{
  color:var(--pg-fg);text-decoration:none;overflow-wrap:anywhere;
  transition:color var(--pg-base) var(--pg-ease);
}
.pg-contact span{color:var(--pg-muted);}

/* Barra inferior */
.pg-bar{
  display:flex;flex-wrap:wrap;align-items:center;gap:12px 26px;
  margin-top:clamp(32px,4vw,48px);padding-top:24px;
  border-top:1px solid var(--pg-line);
  font-size:13.5px;color:var(--pg-muted);
}
.pg-bar p{margin:0;}
.pg-bar nav{display:flex;flex-wrap:wrap;gap:12px 22px;margin-left:auto;}
.pg-bar a{position:relative;color:var(--pg-muted);text-decoration:none;transition:color var(--pg-base) var(--pg-ease);}

/* En escritorio la barra pasa a retícula de tres: copyright a la izquierda,
   crédito al CENTRO y legales a la derecha. Con flex no bastaba: el crédito
   quedaba pegado al copyright, y centrarlo con `margin:auto` no funciona
   cuando el <nav> también lleva `margin-left:auto` —los dos autos se reparten
   el hueco y ninguno queda centrado de verdad—. Con `1fr auto 1fr` el crédito
   se centra respecto a la barra, midan lo que midan los otros dos. */
@media (min-width:901px){
  .pg-bar{display:grid;grid-template-columns:1fr auto 1fr;}
  .pg-bar > p:first-child{justify-self:start;}
  .pg-bar .pg-credit{justify-self:center;text-align:center;}
  .pg-bar nav{justify-self:end;margin-left:0;}
}

/* Atribución a BIMM Studio. El subrayado usa su degradado de marca
   (#fd4a42 → #fed18d → #5bf3dc), no el dorado nuestro: es su crédito. */
.pg-credit{position:relative;margin:0;}
.pg-credit a{
  position:relative;color:var(--pg-fg);text-decoration:none;font-weight:700;
  transition:color var(--pg-base) var(--pg-ease);
}
.pg-credit a::after{
  background:linear-gradient(90deg,#fd4a42 0%,#fed18d 50%,#5bf3dc 100%);
}

.pg-col a:focus-visible,.pg-bar a:focus-visible,
.pg-contact a:focus-visible,.pg-credit a:focus-visible{
  outline:2px solid var(--pg-accent);outline-offset:3px;border-radius:3px;
}

@media (hover:hover) and (pointer:fine){
  .pg-brand:hover .pg-brand__mark{transform:rotate(-90deg);box-shadow:0 8px 22px -10px var(--pg-glow);}
  .pg-foot__cta:hover{border-color:var(--pg-gold);box-shadow:0 18px 40px -28px var(--pg-shadow);}
  .pg-foot__cta:hover::before{transform:scaleX(1);}
  .pg-col a:hover{color:var(--pg-accent);transform:translateX(3px);}
  .pg-bar a:hover{color:var(--pg-accent);}
  .pg-col a:hover::after,.pg-bar a:hover::after,.pg-credit a:hover::after{
    transform:scaleX(1);transform-origin:left center;
  }
  .pg-contact div:hover svg{transform:scale(1.15);}
  .pg-contact a:hover{color:var(--pg-accent);}
}

/* Los enlaces largos del pie no pueden empujar la columna */
.pg-col a{max-width:100%;overflow-wrap:anywhere;}

@media (max-width:980px){
  .pg-foot__top{grid-template-columns:1fr;}
  .pg-foot__cols{grid-template-columns:repeat(2,minmax(0,1fr));gap:34px 24px;}
}
@media (max-width:560px){
  /* En una sola columna, todo alineado a la izquierda deja el pie descolgado
     hacia un lado. Centrado se lee como un cierre. */
  .pg-foot{text-align:center;}
  .pg-brand{justify-content:center;}
  .pg-foot__claim{margin-inline:auto;}
  .pg-foot__btns{justify-content:center;}
  .pg-col h2{padding-bottom:14px;}
  .pg-col h2::after{left:50%;transform:translateX(-50%);}
  .pg-contact div{justify-content:center;text-align:center;}
  .pg-contact svg{margin-top:5px;}
  .pg-bar{align-items:center;text-align:center;}
  .pg-bar nav{justify-content:center;margin-left:0;}
  .pg-credit{width:100%;}

  .pg-foot__cols{grid-template-columns:1fr;gap:0;}
  /* Apiladas y sin separación, las cuatro columnas se leen como una sola lista
     rota. Cada una pasa a ser un bloque con su filete. */
  .pg-col{padding:24px 0;border-top:1px solid var(--pg-line);}
  .pg-col:first-child{padding-top:0;border-top:0;}
  .pg-col:last-child{padding-bottom:0;}
  .pg-col h2{margin-bottom:14px;}
  .pg-col li{margin-bottom:9px;}
  .pg-foot__btns .pg-btn{width:100%;}
  /* La barra inferior se apila: en una sola línea no cabía y se salía.
     Centrada, como todo el pie en móvil — antes esta regla iba después de la
     que centra y volvía a alinear a la izquierda los enlaces legales. */
  .pg-bar{flex-direction:column;align-items:center;gap:14px;}
  .pg-bar nav{margin-left:0;justify-content:center;}
}
@media (prefers-reduced-motion:reduce){
  .pg-brand__mark,.pg-foot__cta,.pg-foot__cta::before,
  .pg-col a,.pg-col a::after,.pg-bar a::after,.pg-credit a::after,
  .pg-contact svg,.pg-contact a{transition:none !important;}
  .pg-col a:hover{transform:none;}
}

/* --------------------------------------------------------------------------
   5d. TARJETA QUE GIRA SOBRE SU EJE
   Cara frontal: icono + código de norma. Al pasar el cursor gira y enseña el
   título, la descripción y el enlace.

   Las dos caras van en la MISMA celda de una retícula (grid-area:1/1), no en
   posición absoluta: así la tarjeta mide lo que mida la cara más alta y no hay
   que fijarle una altura, que se rompería en cuanto cambie un texto.

   Se accede de tres formas, no sólo con el cursor:
     · hover      — sólo en dispositivos con puntero fino
     · focus      — al tabular hacia el enlace de la cara trasera
     · botón ojo  — en táctil, donde no hay cursor que pasar
   -------------------------------------------------------------------------- */
/* La tarjeta exterior se vacía por completo: sin fondo, sin borde, sin sombra.
   Sólo aporta la perspectiva y el "pop" del hover.

   El cuerpo de la tarjeta —fondo, borde, esquinas redondeadas— vive en las
   CARAS. Si se queda fuera, lo que gira es el contenido dentro de un marco
   quieto y se ve como una tarjeta dentro de otra tarjeta. */
.pg-card.pg-card--flip,
.pg-sec--alt .pg-card.pg-card--flip{
  padding:0;
  background:none;
  border:0;
  border-radius:0;
  overflow:visible;
  box-shadow:none;
  isolation:auto;
  perspective:1400px;
  /* En columna para que .pg-flip crezca hasta la altura de la tarjeta. La
     retícula estira el <article>, pero el cuerpo visual vive en las CARAS: sin
     encadenar la altura, cada cara mide sólo su contenido y las tarjetas de
     texto corto quedan más bajas. */
  display:flex;
  flex-direction:column;
}
.pg-card--flip > .pg-flip{flex:1;}
.pg-card--flip::before,
.pg-card--flip::after{display:none;}
.pg-card--flip:hover{box-shadow:none;}

.pg-flip{
  display:grid;
  transform-style:preserve-3d;
  transition:transform 720ms cubic-bezier(.4,.15,.2,1);
}
.pg-flip__cara{
  position:relative;
  grid-area:1/1;
  display:flex;flex-direction:column;
  padding:30px 26px;
  border:1px solid var(--pg-line);
  border-radius:16px;
  overflow:hidden;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  /* Relevo de caras a la mitad exacta del giro (720ms / 2 = 360ms), con la
     tarjeta de canto: el cambio no se ve.

     Esto NO sobra pese al backface-visibility de arriba. Varios navegadores
     móviles lo ignoran cuando la cara además recorta con overflow:hidden — que
     es el caso desde que el cuerpo visual vive en las caras— y entonces se
     pintan las dos a la vez y el texto se encima. Con el relevo, sólo hay una
     cara visible aunque el ocultado de cara falle. */
  opacity:1;
  transition:border-color 300ms var(--pg-ease),
             box-shadow 420ms var(--pg-ease),
             opacity 0s linear 360ms;
}
.pg-flip__tras{opacity:0;}
.pg-card--flip.is-flip .pg-flip__frente,
.pg-card--flip:focus-within .pg-flip__frente{opacity:0;}
.pg-card--flip.is-flip .pg-flip__tras,
.pg-card--flip:focus-within .pg-flip__tras{opacity:1;}
/* Cara frontal: el mismo degradado que las demás tarjetas */
.pg-flip__frente{
  background:var(--pg-surface);   /* respaldo si no hay color-mix */
  background:
    linear-gradient(158deg,
      color-mix(in srgb,var(--pg-gold) 7%, var(--pg-surface)) 0%,
      var(--pg-bg) 78%);
}
.pg-sec--alt .pg-flip__frente{
  background:var(--pg-bg);
  background:
    linear-gradient(158deg,
      color-mix(in srgb,var(--pg-gold) 5%, var(--pg-bg)) 0%,
      var(--pg-bg) 82%);
}
.pg-flip__tras{transform:rotateY(180deg);}

.pg-card--flip.is-flip .pg-flip,
.pg-card--flip:focus-within .pg-flip{transform:rotateY(180deg);}
.pg-card--flip.is-flip .pg-flip__cara,
.pg-card--flip:focus-within .pg-flip__cara{border-color:var(--pg-gold);}
@media (hover:hover) and (pointer:fine){
  .pg-card--flip:hover .pg-flip{transform:rotateY(180deg);}
  .pg-card--flip:hover .pg-flip__frente{opacity:0;}
  .pg-card--flip:hover .pg-flip__tras{opacity:1;}
}

/* --- Foco de cursor en la cara TRASERA ------------------------------------
   La tarjeta girada recibe el mismo halo dorado que las demás tarjetas, pero
   sólo cuando está girada: en la cara frontal el icono grande ya hace de
   marca de agua y dos brillos a la vez se estorban.

   Dos cosas que no son obvias:

   · El JS ya escribe --pg-sx / --pg-sy en TODA .pg-card, incluidas éstas.
     Las custom properties heredan, así que la cara trasera las tiene sin
     tocar una línea de script. Aquí sólo se decide cuándo se ven.

   · **El eje X NO se refleja.** Parece que sí haría falta, porque la cara
     trasera lleva `rotateY(180deg)`. Pero cuando la tarjeta está girada, el
     contenedor .pg-flip lleva OTRO rotateY(180deg): los dos se suman a 360° y
     la cara vuelve a estar de frente. Reflejarla ponía el halo en el lado
     contrario al del cursor — se probó en vivo el 2026-08-18 y así salía.
   -------------------------------------------------------------------------- */
.pg-flip__tras::after{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  border-radius:inherit;
  background:radial-gradient(
    240px circle at var(--pg-sx,50%) var(--pg-sy,50%),
    var(--pg-gold) 0%,transparent 62%);
  opacity:0;transition:opacity 320ms linear;
}
/* El contenido de la cara trasera va por encima del halo */
.pg-flip__tras > *{position:relative;z-index:1;}

@media (hover:hover) and (pointer:fine){
  .pg-card--flip:hover .pg-flip__tras::after{opacity:.17;}
}
.pg-card--flip.is-flip .pg-flip__tras::after,
.pg-card--flip:focus-within .pg-flip__tras::after{opacity:.17;}

/* Sin cursor no hay foco que seguir: en táctil el halo se centra y se queda
   quieto, para que la tarjeta activa no se vea plana respecto de escritorio. */
@media (hover:none),(pointer:coarse){
  .pg-flip__tras::after{
    background:radial-gradient(280px circle at 50% 40%,var(--pg-gold) 0%,transparent 66%);
  }
}

/* --- Cara frontal: el nombre arriba y centrado, el icono grande abajo --- */
.pg-flip__frente{
  align-items:center;justify-content:flex-start;text-align:center;
  min-height:230px;padding:34px 24px;
}
.pg-flip__cod{
  display:block;position:relative;z-index:1;
  font-size:clamp(21px,2vw,26px);font-weight:800;letter-spacing:-.015em;
  line-height:1.22;color:var(--pg-head);
  font-variant-numeric:tabular-nums;text-wrap:balance;
}
/* Icono grande y sólido, como marca de agua. Es fondo, no información: el dato
   lo lleva el nombre de la norma.

   Va entero dentro de la tarjeta: su esquina inferior derecha coincide con la
   de la tarjeta. Nada se recorta. El aire que se ve alrededor es el propio
   margen del viewBox del SVG, no un padding. */
.pg-flip__icono{
  position:absolute;right:0;bottom:0;
  width:200px;height:200px;pointer-events:none;
  color:var(--pg-gold);opacity:var(--pg-ico);
  /* Ancla el crecimiento del hover a esa misma esquina, para que no se despegue */
  transform-origin:bottom right;
  transition:opacity 420ms var(--pg-ease),transform 620ms var(--pg-ease);
}
.pg-flip__icono svg{
  width:100%;height:100%;
  fill:currentColor;stroke:none;
}
@media (max-width:560px){
  .pg-flip__icono{width:165px;height:165px;}
}
.pg-flip__ojo{
  position:absolute;right:22px;bottom:22px;
  flex:none;display:none;place-items:center;
  width:42px;height:42px;border-radius:50%;cursor:pointer;
  background:var(--pg-bg);border:1px solid var(--pg-line);color:var(--pg-accent);
  -webkit-tap-highlight-color:transparent;
  transition:transform var(--pg-fast) var(--pg-ease),border-color var(--pg-base) var(--pg-ease);
}
.pg-flip__ojo:active{transform:scale(.9);}
.pg-flip__ojo svg{width:21px;height:21px;fill:currentColor;stroke:none;}
/* Sin cursor que pasar, el botón es la única vía: ahí sí se muestra */
@media (hover:none){
  .pg-flip__ojo{display:grid;}
}

/* --- Cara trasera --- */
/* Al girar, la cara activa se tiñe con el mismo difuminado dorado que usan los
   fondos de sección. Es lo que hace que la tarjeta "encendida" pertenezca al
   mismo lenguaje que el resto de la página. */
.pg-flip__tras{
  justify-content:flex-start;
  background:var(--pg-surface);   /* respaldo si no hay color-mix */
  background:
    radial-gradient(135% 115% at 108% -12%,
      color-mix(in srgb,var(--pg-gold) 22%, var(--pg-bg)) 0%,
      var(--pg-bg) 62%);
}
.pg-flip__tras .pg-card__ttl{margin:0 0 10px;font-size:19px;line-height:1.3;}
.pg-flip__tras p{margin:0 0 16px;}
/* Fila de acción de la cara trasera. El filete y el reparto viven aquí y no en
   el enlace, porque hace falta meter al lado el botón de volver — y un <button>
   no puede ir dentro de un <a>. */
.pg-flip__accion{
  margin:auto 0 0;padding-top:16px;width:100%;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  border-top:1px solid var(--pg-line);
}
.pg-flip__tras .pg-card__mas{
  margin:0;padding:0;width:auto;border:0;
  display:inline-flex;align-items:center;justify-content:flex-start;gap:10px;
  font-size:14px;font-weight:800;color:var(--pg-accent);text-decoration:none;
}
/* El ojo de volver va en el flujo de la fila, no absoluto */
.pg-flip__accion .pg-flip__ojo{position:static;right:auto;bottom:auto;}

@media (hover:hover) and (pointer:fine){
  .pg-card--flip:hover .pg-flip__cara{
    border-color:var(--pg-gold);
    box-shadow:0 32px 64px -32px var(--pg-shadow),0 4px 12px -8px var(--pg-glow);
  }
  .pg-card--flip:hover .pg-flip__icono{opacity:var(--pg-ico-on);transform:scale(1.07);}
  .pg-flip__ojo:hover{border-color:var(--pg-gold);}
  .pg-flip__tras .pg-card__mas:hover .pg-card__flecha{
    background:var(--pg-gold);border-color:var(--pg-gold);color:var(--pg-on-gold);
    transform:translateX(4px);
  }
}

/* Movimiento reducido: nada de girar en 3D. Se cruzan con un fundido. */
@media (prefers-reduced-motion:reduce){
  .pg-flip{transform:none !important;transform-style:flat;}
  .pg-flip__cara{backface-visibility:visible;transition:opacity 200ms linear 0s;}
  .pg-flip__tras{transform:none;opacity:0;pointer-events:none;}
  .pg-card--flip.is-flip .pg-flip__tras,
  .pg-card--flip:focus-within .pg-flip__tras{opacity:1;pointer-events:auto;}
  .pg-card--flip.is-flip .pg-flip__frente,
  .pg-card--flip:focus-within .pg-flip__frente{opacity:0;pointer-events:none;}
  .pg-flip__ojo{display:grid;}
}

/* --------------------------------------------------------------------------
   10. PASOS NUMERADOS
   Cuatro columnas unidas por un filete. El número es grande y tenue: es
   orientación, no información — lo que se lee es el título del paso.
   -------------------------------------------------------------------------- */
.pg-pasos{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:clamp(20px,2.4vw,32px);
  margin-top:clamp(30px,3.4vw,44px);
}
.pg-paso{position:relative;padding-top:26px;}
/* El filete que los une. En el último se corta para que no salga al vacío. */
.pg-paso::before{
  content:"";position:absolute;left:0;right:calc(-1 * clamp(20px,2.4vw,32px));top:0;
  height:1px;background:var(--pg-line);
}
.pg-paso:last-child::before{right:0;}
/* Marca sobre el filete, en el arranque de cada paso */
.pg-paso::after{
  content:"";position:absolute;left:0;top:-3px;width:26px;height:5px;
  border-radius:3px;background:var(--pg-gold);
}
.pg-paso__n{
  display:block;margin:0 0 10px;
  font-size:clamp(30px,3.2vw,40px);font-weight:800;line-height:1;
  color:var(--pg-accent);opacity:.45;
  letter-spacing:-.03em;font-variant-numeric:tabular-nums;
}
/* El título del paso subió de 17px a ~21px: es lo que se lee de un vistazo al
   recorrer el proceso, y a 17px competía de tú a tú con el párrafo. */
.pg-paso h3{
  margin:0 0 10px;font-size:clamp(18px,1.9vw,21px);font-weight:800;line-height:1.25;
  color:var(--pg-head);letter-spacing:-.015em;text-wrap:balance;
}
.pg-paso p{margin:0;font-size:14.5px;line-height:1.65;color:var(--pg-muted);}

@media (max-width:900px){
  .pg-pasos{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:560px){
  .pg-pasos{grid-template-columns:1fr;gap:26px;}
}


/* --------------------------------------------------------------------------
   10b. BARAJA
   Los pasos como una mano de cartas: proporción vertical de naipe, solapadas y
   en arco. Al pasar el cursor, la carta se saca de la mano —se endereza, sube y
   crece— y las demás se desenfocan para que sólo se lea la elegida.

   OJO: la entrada (.pg-up) va en el CONTENEDOR, no en cada carta. Si va en la
   carta, su `transform:none` de `.pg-sec.is-armed .pg-up.is-in` (0-4-0) pisa el
   giro del arco (0-3-0) y la baraja sale recta.

   El solape está calculado, no elegido a ojo: 26px de solape más los ~17px que
   invade la esquina de una carta de 440px girada 4.5° suman 43px, así que las
   cartas 2ª a 4ª llevan 52px de relleno izquierdo. Con menos, la carta de
   encima taparía las primeras letras de la de abajo.
   -------------------------------------------------------------------------- */
.pg-baraja{
  display:flex;align-items:flex-start;justify-content:center;
  margin-top:clamp(34px,4vw,52px);
  padding:34px 0 22px;   /* aire para que la carta elevada no se recorte */
}
/* Contenido centrado dentro de la carta (2026-08-18).

   El relleno izquierdo de 52px existe por el solape: sin él, la carta de
   encima taparía las primeras letras. Al centrar el texto ese relleno
   descentraría el bloque 13px a la derecha, así que se iguala el derecho.
   Queda menos ancho útil, pero en una carta de naipe el texto centrado y
   corto se lee mejor que el alineado a la izquierda y ancho.

   Se centra también en vertical: la carta tiene alto fijo por `aspect-ratio` y
   el texto colgando de arriba dejaba un hueco muerto abajo. */
.pg-baraja .pg-paso{
  flex:1 1 0;min-width:0;
  aspect-ratio:.72;      /* proporción de naipe */
  margin-left:-26px;
  display:flex;flex-direction:column;justify-content:flex-start;
  text-align:center;
  padding:34px 52px 30px;
  background:var(--pg-surface);   /* respaldo si no hay color-mix */
  background:
    linear-gradient(158deg,
      color-mix(in srgb,var(--pg-gold) 7%, var(--pg-surface)) 0%,
      var(--pg-bg) 78%);
  border:1px solid var(--pg-line);
  border-radius:16px;
  transform-origin:bottom center;
  /* Transición media: 420ms. Más rápido se siente nervioso; más lento, pesado
     cuando el cursor recorre las cuatro seguidas. */
  transition:transform 420ms var(--pg-ease),
             box-shadow 420ms var(--pg-ease),
             filter 380ms var(--pg-ease),
             opacity 380ms var(--pg-ease),
             border-color 300ms var(--pg-ease);
}
.pg-baraja .pg-paso:first-child{margin-left:0;padding-left:26px;}

/* Los dos "palos" en esquinas opuestas, como en un naipe */
.pg-baraja .pg-paso::before{
  display:block;content:"";
  position:absolute;left:auto;right:22px;top:26px;bottom:auto;
  width:12px;height:12px;border-radius:2px 2px 2px 100%;
  background:var(--pg-gold);opacity:.85;
}
.pg-baraja .pg-paso::after{
  left:26px;right:auto;top:auto;bottom:26px;
  width:12px;height:12px;border-radius:100% 2px 2px 2px;
  opacity:.5;
}
.pg-baraja .pg-paso:first-child::before{right:22px;}

/* El número, en grande y abajo a la derecha, como el icono de las tarjetas de
   servicio. Va con z-index:-1 para quedar DETRÁS del texto: un elemento
   posicionado se pinta encima del contenido estático si no se le dice lo
   contrario, y el número taparía el párrafo. La tarjeta tiene `transform`, así
   que crea su propio contexto de apilamiento y el -1 no la saca del fondo. */
.pg-baraja .pg-paso__n{
  position:absolute;right:20px;bottom:4px;z-index:-1;
  margin:0;
  font-size:clamp(84px,8.5vw,124px);line-height:.8;
  opacity:var(--pg-ico);
  transition:opacity 420ms var(--pg-ease);
}
/* El título manda en la carta: va ARRIBA del todo y en grande.
   20-25px → 22-29px → 24-33px en dos pasadas del 2026-08-18. El texto ya no se
   centra en vertical (justify-content:flex-start): el título arranca pegado al
   borde superior y el párrafo cuelga de él, que es como se lee una carta. */
.pg-baraja .pg-paso h3{
  margin:0 0 16px;
  font-size:clamp(24px,2.4vw,33px);line-height:1.14;
  letter-spacing:-.02em;
  color:var(--pg-accent);
}
.pg-baraja .pg-paso p{font-size:15px;line-height:1.7;}

/* El arco: las de los extremos giran más y caen un poco */
.pg-baraja .pg-paso:nth-child(1){transform:rotate(-5deg)   translateY(18px);z-index:1;}
.pg-baraja .pg-paso:nth-child(2){transform:rotate(-1.7deg) translateY(2px); z-index:2;}
.pg-baraja .pg-paso:nth-child(3){transform:rotate(1.7deg)  translateY(2px); z-index:3;}
.pg-baraja .pg-paso:nth-child(4){transform:rotate(5deg)    translateY(18px);z-index:4;}

@media (hover:hover) and (pointer:fine){
  /* Al entrar en la mano, todas se apagan y se desenfocan... */
  .pg-baraja:hover .pg-paso{filter:blur(2.5px);opacity:.45;}
  /* ...menos la que se está sacando */
  .pg-baraja .pg-paso:hover{
    filter:none;opacity:1;
    transform:rotate(0deg) translateY(-30px) scale(1.07);
    z-index:10;
    border-color:var(--pg-gold);
    box-shadow:0 44px 70px -32px var(--pg-shadow),
               0 10px 26px -14px var(--pg-glow);
  }
  /* El número se enciende con la carta. Sube a .38 y no más: sigue siendo
     marca de agua, no puede competir con el texto que está encima. */
  .pg-baraja .pg-paso:hover .pg-paso__n{opacity:var(--pg-ico-on);}
}

/* --------------------------------------------------------------------------
   En móvil la mano se apila en vertical y el SCROLL hace de cursor.
   Cada carta se solapa con la anterior; al cruzar la banda de foco —el centro
   de la pantalla— se adelanta y las demás se desenfocan. La clase la pone el
   IntersectionObserver de bloques.js.

   El solape tapa el PIE de la carta anterior, que es donde vive el número: el
   título y el texto quedan siempre a la vista.
   -------------------------------------------------------------------------- */
@media (max-width:980px){
  .pg-baraja{
    display:block;padding:10px 0 24px;
  }
  .pg-baraja .pg-paso{
    aspect-ratio:auto;
    width:100%;max-width:460px;
    margin:0 auto;
    padding:28px 26px 72px;
    z-index:auto;
    filter:none;opacity:1;
  }
  /* Cada carta monta sobre el pie de la anterior */
  .pg-baraja .pg-paso + .pg-paso{margin-top:-58px;}
  /* Giro mínimo, sólo para que se lea como pila y no como lista */
  .pg-baraja .pg-paso:nth-child(1){transform:rotate(-1.2deg);}
  .pg-baraja .pg-paso:nth-child(2){transform:rotate(.9deg);}
  .pg-baraja .pg-paso:nth-child(3){transform:rotate(-.9deg);}
  .pg-baraja .pg-paso:nth-child(4){transform:rotate(1.2deg);}

  /* En cuanto una carta entra en la banda de foco, el resto se apaga */
  .pg-baraja.is-tocada .pg-paso{filter:blur(2.5px);opacity:.42;}
  .pg-baraja .pg-paso.is-activa{
    filter:none;opacity:1;
    transform:rotate(0deg) translateY(-8px) scale(1.04);
    z-index:10;
    border-color:var(--pg-gold);
    box-shadow:0 30px 52px -26px var(--pg-shadow),
               0 8px 22px -12px var(--pg-glow);
  }
  .pg-baraja .pg-paso.is-activa .pg-paso__n{opacity:var(--pg-ico-on);}

  /* Sin la proporción de naipe la carta se queda corta y el número se saldría */
  .pg-baraja .pg-paso__n{font-size:70px;right:18px;bottom:6px;}
}
@media (prefers-reduced-motion:reduce){
  .pg-baraja .pg-paso,.pg-baraja .pg-paso__n{transition:none;}
  .pg-baraja:hover .pg-paso{filter:none;opacity:1;}
  /* Sin desenfoque: con movimiento reducido, apilar y difuminar marea */
  .pg-baraja.is-tocada .pg-paso{filter:none;opacity:1;}
}

/* --------------------------------------------------------------------------
   11. LISTA DE COMPROBACIÓN
   Para enumerar documentos o requisitos. Dos columnas en escritorio.
   -------------------------------------------------------------------------- */
.pg-check{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:12px 28px;margin:0;padding:0;list-style:none;
}
.pg-check li{
  display:flex;gap:11px;align-items:flex-start;
  font-size:14.5px;line-height:1.55;color:var(--pg-fg);
}
.pg-check svg{
  flex:none;width:19px;height:19px;margin-top:1px;
  fill:var(--pg-accent);stroke:none;
}
@media (max-width:700px){
  .pg-check{grid-template-columns:1fr;}
}

/* Caja destacada para el bloque de requisitos */
.pg-nota{
  margin-top:clamp(34px,4vw,48px);
  padding:clamp(24px,2.6vw,32px);
  background:var(--pg-surface);
  border:1px solid var(--pg-line);border-radius:16px;
}
.pg-sec--alt .pg-nota{background:var(--pg-bg);}
.pg-nota h3{
  margin:0 0 6px;font-size:19px;font-weight:800;color:var(--pg-head);
  letter-spacing:-.01em;line-height:1.3;
}
.pg-nota > p{margin:0 0 20px;font-size:15px;line-height:1.65;color:var(--pg-muted);max-width:66ch;}
.pg-nota__pie{
  margin:20px 0 0;padding-top:18px;border-top:1px solid var(--pg-line);
  font-size:14px;line-height:1.6;color:var(--pg-muted);
}

/* --------------------------------------------------------------------------
   12. SECCIÓN PARTIDA
   Cabecera a la izquierda, contenido a la derecha. La izquierda queda fija
   mientras se recorre la derecha: da variedad frente a las secciones
   anteriores, que son todas cabecera arriba y retícula abajo.
   -------------------------------------------------------------------------- */
.pg-split{
  display:grid;grid-template-columns:.82fr 1.18fr;
  gap:clamp(30px,4.6vw,72px);align-items:start;
}
.pg-split__lado{
  position:sticky;
  /* 74px de cabecera fija + aire */
  top:calc(74px + 28px);
}
.pg-split__lado .pg-lead{margin-bottom:26px;}
@media (max-width:900px){
  .pg-split{grid-template-columns:1fr;}
  .pg-split__lado{position:static;}
}

/* --------------------------------------------------------------------------
   13. PREGUNTAS FRECUENTES
   <details> nativo: accesible con teclado, funciona sin JS y el texto vive
   siempre en el DOM, que es lo que importa para el buscador.

   La apertura se anima con ::details-content, que es lo único que permite
   animar un <details> sin JS. Donde no exista, abre de golpe: se pierde la
   transición, nunca el contenido.
   -------------------------------------------------------------------------- */
:root{interpolate-size:allow-keywords;}

.pg-faq{border-top:1px solid var(--pg-line);}
.pg-faq__item{border-bottom:1px solid var(--pg-line);}
.pg-faq__item summary{
  display:flex;align-items:flex-start;justify-content:space-between;gap:18px;
  padding:20px 2px;cursor:pointer;list-style:none;
  font-size:clamp(16px,1.4vw,17.5px);font-weight:800;line-height:1.4;
  color:var(--pg-head);letter-spacing:-.01em;
  transition:color var(--pg-base) var(--pg-ease);
}
.pg-faq__item summary::-webkit-details-marker{display:none;}
.pg-faq__item summary::marker{content:"";}
.pg-faq__item summary:focus-visible{outline:2px solid var(--pg-accent);outline-offset:3px;border-radius:4px;}
@media (hover:hover) and (pointer:fine){
  .pg-faq__item summary:hover{color:var(--pg-accent);}
}

/* El signo: una cruz dibujada con dos filetes que gira hasta ser una equis */
.pg-faq__sig{
  position:relative;flex:none;
  width:26px;height:26px;margin-top:1px;border-radius:50%;
  border:1px solid var(--pg-line);
  transition:transform 380ms var(--pg-ease),border-color var(--pg-base) var(--pg-ease);
}
.pg-faq__sig::before,
.pg-faq__sig::after{
  content:"";position:absolute;left:50%;top:50%;
  background:var(--pg-accent);border-radius:2px;
  transition:opacity 260ms linear;
}
.pg-faq__sig::before{width:11px;height:1.5px;transform:translate(-50%,-50%);}
.pg-faq__sig::after{width:1.5px;height:11px;transform:translate(-50%,-50%);}
.pg-faq__item[open] .pg-faq__sig{transform:rotate(135deg);border-color:var(--pg-gold);}
.pg-faq__item[open] summary{color:var(--pg-accent);}

.pg-faq__item ::details-content{
  block-size:0;overflow:hidden;
  transition:block-size 380ms var(--pg-ease),content-visibility 380ms allow-discrete;
}
.pg-faq__item[open] ::details-content{block-size:auto;}

.pg-faq__resp{margin:0;padding:0 42px 22px 2px;font-size:15px;line-height:1.75;color:var(--pg-fg);}
.pg-faq__resp + .pg-faq__resp{padding-top:0;margin-top:-10px;}

@media (prefers-reduced-motion:reduce){
  .pg-faq__sig,.pg-faq__item ::details-content{transition:none;}
}

/* --------------------------------------------------------------------------
   14. CIFRAS
   Fila de datos duros. El número manda y la etiqueta explica; sin la etiqueta,
   un número suelto no significa nada y se lee como adorno.
   -------------------------------------------------------------------------- */
.pg-cifras{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(20px,2.6vw,36px);
  margin-top:clamp(30px,3.4vw,44px);
}
.pg-cifra{
  position:relative;padding:26px 24px 26px 0;
  border-top:1px solid var(--pg-line);
}
.pg-cifra::before{
  content:"";position:absolute;left:0;top:-3px;width:30px;height:5px;
  border-radius:3px;background:var(--pg-gold);
}
.pg-cifra__n{
  display:block;margin:0 0 8px;
  font-size:clamp(38px,4.4vw,56px);font-weight:800;line-height:1;
  color:var(--pg-accent);letter-spacing:-.03em;font-variant-numeric:tabular-nums;
}

/* Contador. El valor final vive en el MARCADO —no en un data-*—: es lo que se
   ve si el JS no corre, y así el dato no puede desincronizarse entre dos
   sitios. El script lo lee, lo baja a cero y lo devuelve subiendo.

   `tabular-nums` es lo que impide que el número tiemble mientras rueda: sin
   cifras de ancho fijo, cada cambio de dígito reajusta el ancho y el número
   vibra. En .pg-cifra__n ya está; se repite aquí porque el contador tiene que
   funcionar solo donde se use.

   Al aterrizar, el JS lo parte en letras (.pg-ch) y entra al anti-imán del
   hero — no lleva .pg-letras en el marcado porque partir() corre al cargar la
   página y el contador acabaría escribiendo dentro de spans ya partidos. */
.pg-num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;}
.pg-cifra__t{
  display:block;margin:0 0 6px;
  font-size:16px;font-weight:800;color:var(--pg-head);line-height:1.35;
}
.pg-cifra__d{display:block;font-size:14px;line-height:1.6;color:var(--pg-muted);}

@media (max-width:820px){
  .pg-cifras{grid-template-columns:1fr;gap:0;}
  .pg-cifra{padding:22px 0;}
}

/* --------------------------------------------------------------------------
   15. CITA
   Para texto institucional que se transcribe literal. Va marcado como
   <blockquote> de verdad, no como un párrafo con comillas.
   -------------------------------------------------------------------------- */
.pg-cita{
  position:relative;margin:clamp(34px,4vw,48px) 0 0;
  padding:clamp(26px,2.8vw,36px) clamp(26px,3vw,40px);
  background:var(--pg-surface);
  border:1px solid var(--pg-line);border-radius:16px;
  border-left:3px solid var(--pg-gold);
}
.pg-sec--alt .pg-cita{background:var(--pg-bg);}
.pg-cita p{
  margin:0;font-size:clamp(16px,1.5vw,18px);line-height:1.75;color:var(--pg-fg);
  max-width:74ch;
}
.pg-cita footer{
  margin-top:16px;font-size:13px;font-weight:800;letter-spacing:.1em;
  text-transform:uppercase;color:var(--pg-accent);
}

/* Valores.

   Eran tres burbujas con el cuarto de círculo delante —el mismo icono que ya
   salía en cada antetítulo y en cada tarjeta—. Tres palabras que son el
   carácter de la empresa no merecen el envase de una etiqueta de filtro.

   Ahora son tres columnas con su filete dorado arriba, el mismo recurso que
   encabeza una cifra: la palabra manda y la línea la sostiene. Sin icono. */
.pg-valores{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(16px,2.2vw,30px);
  margin:clamp(30px,3.4vw,42px) 0 0;padding:0;list-style:none;
}
.pg-valores li{
  position:relative;padding:20px 0 0;
  border-top:1px solid var(--pg-line);
  font-size:clamp(17px,1.8vw,21px);font-weight:800;line-height:1.2;
  color:var(--pg-head);letter-spacing:-.015em;
}
.pg-valores li::before{
  content:"";position:absolute;left:0;top:-2px;width:26px;height:4px;
  border-radius:3px;background:var(--pg-gold);
  transform-origin:left;transform:scaleX(0);
  transition:transform var(--pg-slow) var(--pg-ease);
}
.pg-sec.is-armed .pg-valores.is-in li::before,
.pg-sec:not(.is-armed) .pg-valores li::before{transform:scaleX(1);}
/* Escalonado: el filete se dibuja de izquierda a derecha, uno tras otro */
.pg-valores li:nth-child(2)::before{transition-delay:110ms;}
.pg-valores li:nth-child(3)::before{transition-delay:220ms;}
/* Glosa opcional debajo de la palabra */
.pg-valores span{
  display:block;margin-top:7px;
  font-size:14px;font-weight:500;line-height:1.55;color:var(--pg-muted);
  letter-spacing:0;
}
@media (max-width:700px){
  .pg-valores{grid-template-columns:1fr;gap:0;}
  .pg-valores li{padding:16px 0;}
}

/* --------------------------------------------------------------------------
   17. LISTAS QUE ENTRAN ESCALONADAS
   Las palomitas de "qué necesita tener listo" y de "lo que el portal le quita
   de encima" aparecían de golpe con el resto del bloque. Ahora entran una tras
   otra, que es como se lee una lista: de arriba abajo.

   El retraso lo pone el JS en --pg-i (el índice), no un :nth-child por cada
   elemento: así la lista puede crecer sin tocar el CSS.

   El estado en REPOSO es el final. Sólo se esconde si el JS armó la sección
   (.is-armed), igual que .pg-up: sin JS la lista se ve completa y quieta.
   -------------------------------------------------------------------------- */
.pg-check li{
  transition:opacity 620ms var(--pg-ease-out),transform 620ms var(--pg-ease);
  transition-delay:calc(var(--pg-i,0) * 70ms);
}
.pg-sec.is-armed .pg-check li{opacity:0;transform:translateY(12px);}
.pg-sec.is-armed .pg-check.is-in li{opacity:1;transform:none;}
/* La palomita se dibuja al llegar su renglón */
.pg-check svg{
  transform:scale(.4);opacity:0;
  transition:transform 520ms var(--pg-ease),opacity 380ms linear;
  transition-delay:calc(var(--pg-i,0) * 70ms + 120ms);
}
.pg-sec:not(.is-armed) .pg-check svg,
.pg-sec.is-armed .pg-check.is-in svg{transform:none;opacity:1;}

/* Hover.

   Va condicionado a `.is-listo`, que el JS pone cuando TERMINA la entrada
   escalonada. Sin eso el hover heredaria el `transition-delay` del escalonado
   —hasta medio segundo en el ultimo renglon— y el efecto llegaria tarde,
   cuando el cursor ya se fue. Con `.is-listo` los retrasos se ponen a cero. */
.pg-check.is-listo li,
.pg-check.is-listo svg{transition-delay:0s;}

/* El renglón se ELEVA al pasar el cursor, y para eso necesita hueco alrededor:
   sin relleno el halo saldría pegado a la letra. El relleno se compensa con un
   margen negativo del mismo tamaño, así que el texto NO se mueve de donde
   estaba y la retícula sigue midiendo igual — sólo crece la caja que recibe la
   sombra. 9px de lado contra 28px de hueco entre columnas y 5px arriba contra
   12px entre filas: los renglones se agrandan sin llegar a tocarse. */
.pg-check li{
  border-radius:10px;
  padding:5px 9px;
  margin:-5px -9px;
}
@media (hover:hover) and (pointer:fine){
  .pg-check.is-listo li{
    transition:transform 320ms var(--pg-ease),
               color 240ms var(--pg-ease),
               box-shadow 320ms var(--pg-ease);
  }
  /* Se levanta 3px y le sale el contorno gris.
     Son tres sombras y cada una hace una cosa: el filete de 1px dibuja el
     borde, la difusa de abajo es la que se lee como sombra proyectada, y la
     centrada sin desplazamiento la envuelve entera para que el gris rodee el
     renglón en vez de caerle sólo por debajo.
     En tema oscuro los tokens son luz gris y no sombra: sobre negro una sombra
     oscura no se ve. */
  .pg-check.is-listo li:hover{
    transform:translateY(-3px);
    color:var(--pg-head);
    box-shadow:0 0 0 1px var(--pg-halo-linea),
               0 8px 18px -8px var(--pg-halo),
               0 0 14px -2px var(--pg-halo);
  }
  .pg-check.is-listo svg{
    transition:transform 320ms var(--pg-ease),filter 240ms var(--pg-ease);
  }
  .pg-check.is-listo li:hover svg{
    transform:scale(1.22) rotate(-6deg);
    filter:drop-shadow(0 0 7px var(--pg-glow));
  }
}

/* Los renglones se encienden con el scroll — SÓLO en móvil.
   ----------------------------------------------------------------------------
   Es el equivalente táctil del hover de arriba. `escalonar()` los hace entrar
   una vez y ahí se acaba el movimiento: en escritorio da igual, porque el
   cursor los recorre, pero en el teléfono la lista se queda inerte justo en las
   dos secciones con más renglones —«Cómo trabajamos» y «Portal de clientes»—.

   El motor es el mismo que el de las tarjetas: manda el que cruza el centro de
   la pantalla. Los demás se atenúan, no se desenfocan: son texto que se está
   leyendo, y desenfocar lo que alguien podría estar mirando de reojo molesta.

   Va condicionado a `.is-listo` por lo mismo que el hover: sin él, el renglón
   heredaría el retraso del escalonado —hasta medio segundo en el último— y se
   encendería tarde, cuando ya pasó. */
@media (hover:none),(pointer:coarse){
  .pg-check.is-listo.is-tocada li{
    opacity:.62;
    transition:opacity 300ms var(--pg-ease),
               transform 320ms var(--pg-ease),
               color 240ms var(--pg-ease);
  }
  .pg-check.is-listo.is-tocada li.is-activa{
    opacity:1;
    transform:translateX(5px);
    color:var(--pg-head);
  }
  .pg-check.is-listo.is-tocada li svg{
    transition:transform 320ms var(--pg-ease),filter 260ms var(--pg-ease);
  }
  .pg-check.is-listo.is-tocada li.is-activa svg{
    transform:scale(1.22) rotate(-6deg);
    filter:drop-shadow(0 0 8px var(--pg-glow));
  }
}

/* --------------------------------------------------------------------------
   18. ANILLO DE PROGRESO DE LAS CIFRAS
   El número ya contaba desde cero. Ahora además se dibuja el arco que le
   corresponde: el 95% deja un hueco visible y el 100% cierra el círculo. La
   cifra y el arco corren a la vez y con la misma duración, porque son el mismo
   dato contado de dos maneras.

   El arco es un <circle> con la circunferencia como dasharray. Para r=54:
   2·pi·54 = 339.29. El hueco es (1 - porcentaje) de esa longitud.
   -------------------------------------------------------------------------- */
.pg-cifras--anillo{
  /* El hueco vive en una variable porque la divisoria se coloca en su MITAD:
     un `border-left` en la columna quedaria pegado al texto de la derecha, no
     centrado entre las dos. */
  --pg-hueco:clamp(26px,3.4vw,52px);
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:var(--pg-hueco);
  margin-top:clamp(32px,3.6vw,48px);
}
.pg-cifras--anillo .pg-cifra{
  position:relative;
  padding:0;border-top:0;text-align:center;
  display:flex;flex-direction:column;align-items:center;
}
.pg-cifras--anillo .pg-cifra::before{display:none;}
/* Divisoria vertical, justo en medio del hueco y sin llegar a los extremos:
   una linea de borde a borde encajona las columnas; recortada, solo separa. */
.pg-cifras--anillo .pg-cifra + .pg-cifra::after{
  content:"";position:absolute;
  left:calc(-1 * var(--pg-hueco) / 2);
  top:8%;bottom:8%;width:1px;
  background:linear-gradient(180deg,
    transparent 0%,var(--pg-line) 18%,var(--pg-line) 82%,transparent 100%);
}

.pg-anillo{
  position:relative;
  width:clamp(146px,15vw,186px);aspect-ratio:1;
  margin:0 0 20px;
  display:grid;place-items:center;
}
.pg-anillo svg{
  position:absolute;inset:0;width:100%;height:100%;
  /* El arco arranca arriba, no a las tres en punto */
  transform:rotate(-90deg);
  overflow:visible;
}
.pg-anillo circle{
  fill:none;stroke-width:6;stroke-linecap:round;
}
.pg-anillo__pista{stroke:var(--pg-line);}
.pg-anillo__val{
  stroke:var(--pg-gold);
  stroke-dasharray:339.29;
  /* En reposo el arco está COMPLETO hasta su valor: es el estado final, el que
     se ve si el JS no corre. El script lo vacía y lo vuelve a llenar. */
  stroke-dashoffset:calc(339.29 * (1 - var(--pg-p,1)));
  transition:stroke-dashoffset 1400ms var(--pg-ease-out);
}
.pg-cifra.is-vacia .pg-anillo__val{stroke-dashoffset:339.29;transition:none;}
.pg-cifras--anillo .pg-cifra__n{
  margin:0;position:relative;z-index:1;
  font-size:clamp(30px,3.4vw,42px);
}
.pg-cifras--anillo .pg-cifra__t{margin-bottom:8px;font-size:16.5px;}
.pg-cifras--anillo .pg-cifra__d{max-width:34ch;margin:0 auto;}

@media (max-width:820px){
  .pg-cifras--anillo{grid-template-columns:1fr;--pg-hueco:38px;}
  /* Apiladas, la divisoria pasa a ser horizontal */
  .pg-cifras--anillo .pg-cifra + .pg-cifra::after{
    left:12%;right:12%;width:auto;height:1px;
    top:calc(-1 * var(--pg-hueco) / 2);bottom:auto;
    background:linear-gradient(90deg,
      transparent 0%,var(--pg-line) 18%,var(--pg-line) 82%,transparent 100%);
  }
}

/* --------------------------------------------------------------------------
   19. CARRUSEL INSTITUCIONAL
   Presentación, misión, visión y política de calidad. Son cuatro textos largos
   que nadie lee seguidos: apilados ocupaban una pantalla entera de párrafo
   corrido y el visitante los saltaba.

   Se mueve con `scroll-snap`, no con `transform`: así funciona con el dedo, con
   la rueda del ratón y con el teclado sin una línea de JS, y si el script falla
   el carrusel sigue siendo navegable. El JS sólo añade los botones y los puntos.
   -------------------------------------------------------------------------- */
.pg-carrusel{
  position:relative;
  margin-top:clamp(34px,4vw,48px);
}
.pg-carrusel__pista{
  display:grid;grid-auto-flow:column;grid-auto-columns:100%;
  align-items:stretch;
  overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;
  scroll-behavior:smooth;
  /* La barra de desplazamiento se oculta: la navegación son los puntos */
  scrollbar-width:none;-ms-overflow-style:none;
}
.pg-carrusel__pista::-webkit-scrollbar{display:none;}
.pg-carrusel__dia{
  position:relative;
  scroll-snap-align:start;
  min-width:0;
  display:flex;flex-direction:column;justify-content:center;
  padding:clamp(28px,3vw,40px) clamp(26px,3.2vw,44px) clamp(34px,3.4vw,46px);
  background:var(--pg-surface);
  border:1px solid var(--pg-line);border-radius:16px;
  border-left:3px solid var(--pg-gold);
}
.pg-sec--alt .pg-carrusel__dia{background:var(--pg-bg);}
/* El titular de la diapositiva es un TITULAR, no un antetitulo.

   Estaba a 13px en versalitas doradas, el mismo tamano que el `.pg-eyebrow` de
   la cabecera de seccion: cuatro textos institucionales largos encabezados por
   una linea diminuta se leian como un solo bloque corrido y no se veia que la
   diapositiva hubiera cambiado. Ahora entra un escalon por debajo del H2 de la
   seccion, para que la jerarquia siga siendo la correcta.

   Se queda DORADO a peticion del usuario, y por eso el color es `--pg-accent`
   y no `--pg-gold`: el dorado de marca da 2.32:1 sobre blanco y a este tamano
   seria un titular ilegible en tema claro. `--pg-accent` ya es dorado en los
   dos temas —#cba705 sobre negro, 8.39:1, y #806900 sobre blanco, 5.33:1—, asi
   que se voltea solo y no hay que escribir el color dos veces. */
.pg-carrusel__dia h3{
  margin:0 0 18px;
  font-size:clamp(26px,3.1vw,38px);font-weight:800;
  letter-spacing:-.02em;line-height:1.14;text-wrap:balance;
  color:var(--pg-accent);
}
.pg-carrusel__dia p{
  margin:0;font-size:clamp(15.5px,1.45vw,17.5px);line-height:1.75;
  color:var(--pg-fg);max-width:78ch;
}
.pg-carrusel__dia cite{
  display:block;margin-top:16px;font-style:normal;
  font-size:13px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--pg-muted);
}

/* --- Foco de cursor en la diapositiva -------------------------------------
   El mismo halo dorado que las tarjetas de servicio, y por el mismo camino: el
   JS escribe la posicion del cursor en --pg-sx / --pg-sy y aqui solo se decide
   cuando se ve. La diapositiva se registra junto a las `.pg-card` en el
   registro del script; no hay un segundo motor de seguimiento.

   Dos detalles que no son obvios:

   · La pista es `overflow-x:auto`, asi que las tres diapositivas que no estan
     a la vista quedan fuera del viewport y el cursor nunca cae dentro de su
     rectangulo. No hace falta filtrar por cual es la activa.

   · Va a `z-index:0` y NO a -1 como en `.pg-card`: la diapositiva tiene fondo
     propio (`--pg-surface`), y un pseudo-elemento por detras del fondo no se
     veria. Por eso el texto sube a `z-index:1`.
   -------------------------------------------------------------------------- */
.pg-carrusel__dia::after{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  border-radius:inherit;
  background:radial-gradient(
    260px circle at var(--pg-sx,50%) var(--pg-sy,50%),
    var(--pg-gold) 0%,transparent 60%);
  opacity:0;transition:opacity 300ms linear;
}
/* Solo el texto. `> *` habria alcanzado tambien a `.pg-carrusel__tiempo`, que
   es `position:absolute`, y ponerle `position:relative` lo habria descolgado
   del borde inferior de la tarjeta. */
.pg-carrusel__dia > h3,
.pg-carrusel__dia > p,
.pg-carrusel__dia > cite{position:relative;z-index:1;}
.pg-carrusel__tiempo{z-index:1;}

@media (hover:hover) and (pointer:fine){
  .pg-carrusel__dia:hover::after{opacity:.17;}
}

/* Sin cursor no hay foco que seguir: en tactil el halo se centra y se queda
   quieto en la diapositiva activa, igual que se resolvio en las tarjetas. */
@media (hover:none),(pointer:coarse){
  .pg-carrusel__dia::after{
    background:radial-gradient(300px circle at 50% 40%,var(--pg-gold) 0%,transparent 66%);
  }
  .pg-carrusel__dia.is-corriendo::after{opacity:.14;}
}

/* Barra de tiempo del paso automático.

   Va PEGADA al borde inferior de la tarjeta, dentro de su caja de relleno, de
   modo que se lee como parte de la diapositiva y no como un control suelto: lo
   que se está agotando es el turno de ESA tarjeta.

   La cuenta la lleva esta animación y no un temporizador aparte en JS. Dos
   relojes para el mismo intervalo acaban desincronizados siempre, y aquí se
   notaría muchísimo: la barra llegaría al final antes o después de que la
   diapositiva cambie. El JS sólo pone y quita `is-corriendo`, y quitarla y
   volverla a poner es lo que reinicia la animación.

   La crea el JS: una barra de progreso de un temporizador que no existe —sin
   JS no hay paso automático— sería una promesa falsa dibujada en la tarjeta. */
.pg-carrusel__tiempo{
  position:absolute;left:clamp(26px,3.2vw,44px);right:clamp(26px,3.2vw,44px);
  bottom:clamp(16px,1.6vw,20px);
  height:3px;border-radius:99px;overflow:hidden;
  background:var(--pg-line);
  opacity:0;transition:opacity 320ms var(--pg-ease);
}
.pg-carrusel__tiempo i{
  display:block;height:100%;border-radius:inherit;
  background:linear-gradient(90deg,var(--pg-gold-lo),var(--pg-gold-hi));
  transform:scaleX(0);transform-origin:left;
}
.pg-carrusel__dia.is-corriendo .pg-carrusel__tiempo{opacity:1;}
/* La duracion la MANDA el script en --pg-paso. Estaba escrita aqui y en el JS,
   y dos numeros que hay que cambiar a la vez acaban distintos: la barra llegaba
   al final antes o despues de que cambiara la diapositiva. El 15s de reserva es
   solo por si el script no llegara a escribir la variable. */
.pg-carrusel__dia.is-corriendo .pg-carrusel__tiempo i{
  animation:pg-tiempo var(--pg-paso,15s) linear forwards;
}
@keyframes pg-tiempo{
  from{ transform:scaleX(0); }
  to  { transform:scaleX(1); }
}
/* Boton de pausa. Reutiliza el circulo de las flechas; lo unico suyo es cual
   de los dos iconos se ve. Los dos estan siempre en el marcado: rehacerlos con
   innerHTML en cada pulsacion tiraria el nodo y con el el foco del teclado. */
.pg-carrusel__pausa .pg-i-play{display:none;}
.pg-carrusel.is-pausado .pg-carrusel__pausa .pg-i-pausa{display:none;}
.pg-carrusel.is-pausado .pg-carrusel__pausa .pg-i-play{display:block;}
/* En pausa el boton se queda encendido: es un interruptor, y tiene que verse
   que esta puesto sin necesidad de pasar el cursor. */
.pg-carrusel.is-pausado .pg-carrusel__pausa{
  background:var(--pg-gold);border-color:var(--pg-gold);color:var(--pg-on-gold);
}

/* Foco dentro, pestaña de fondo, seccion fuera de pantalla o pausa a mano:
   la barra se congela donde va, no se reinicia. */
.pg-carrusel.is-pausa .pg-carrusel__tiempo i{animation-play-state:paused;}
/* Y si el visitante toma el control, desaparece: una barra parada a media
   carrera parece que algo se colgó. */
.pg-carrusel.is-manual .pg-carrusel__tiempo{opacity:0 !important;}

.pg-carrusel__mando{
  display:flex;align-items:center;gap:16px;
  margin-top:20px;
}
.pg-carrusel__puntos{
  display:flex;align-items:center;gap:9px;margin:0;padding:0;list-style:none;
}
.pg-carrusel__punto{
  width:9px;height:9px;padding:0;border:0;border-radius:99px;
  background:var(--pg-line);cursor:pointer;
  transition:width 380ms var(--pg-ease),background-color 300ms var(--pg-ease);
}
.pg-carrusel__punto[aria-selected="true"]{width:26px;background:var(--pg-gold);}
.pg-carrusel__punto:focus-visible{outline:2px solid var(--pg-accent);outline-offset:3px;}
.pg-carrusel__flechas{display:flex;gap:8px;margin-left:auto;}
.pg-carrusel__flecha{
  display:grid;place-items:center;
  width:38px;height:38px;padding:0;border-radius:50%;
  background:transparent;border:1px solid var(--pg-line);
  color:var(--pg-accent);cursor:pointer;
  transition:background-color 300ms var(--pg-ease),
             border-color 300ms var(--pg-ease),
             color 300ms var(--pg-ease);
}
.pg-carrusel__flecha svg{width:17px;height:17px;fill:currentColor;stroke:none;}
.pg-carrusel__flecha--izq svg{transform:rotate(180deg);}
.pg-carrusel__flecha:disabled{opacity:.35;cursor:default;}
@media (hover:hover) and (pointer:fine){
  .pg-carrusel__flecha:not(:disabled):hover{
    background:var(--pg-gold);border-color:var(--pg-gold);color:var(--pg-on-gold);
  }
}
.pg-carrusel__flecha:focus-visible{outline:2px solid var(--pg-accent);outline-offset:3px;}

/* --------------------------------------------------------------------------
   20. NOTICIAS
   El listado de entradas de la portada. NO son tarjetas escritas a mano: es un
   bucle de consulta de WordPress, así que muestra siempre las más recientes y
   no hay que editar la portada al publicar.

   Todo lo que se estiliza aquí son las clases que imprime el propio núcleo
   (.wp-block-post-*), acotadas dentro de .pg-noticias para no tocar el resto
   del sitio.
   -------------------------------------------------------------------------- */
.pg-noticias .wp-block-post-template{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:22px;margin:0;padding:0;list-style:none;
}
.pg-noticias .wp-block-post{
  display:flex;flex-direction:column;
  overflow:hidden;
  background:var(--pg-surface);
  border:1px solid var(--pg-line);border-radius:16px;
  transition:transform 420ms var(--pg-ease),
             box-shadow 420ms var(--pg-ease),
             border-color 300ms var(--pg-ease);
}
.pg-sec--alt .pg-noticias .wp-block-post{background:var(--pg-bg);}

/* Miniatura. La proporción la fija el contenedor y no la imagen: con alturas
   distintas las tres tarjetas no cerrarían a la misma línea. */
.pg-noticias .wp-block-post-featured-image{
  margin:0;overflow:hidden;background:var(--pg-bg);
}
.pg-noticias .wp-block-post-featured-image img{
  display:block;width:100%;aspect-ratio:16/10;object-fit:cover;
  transition:transform 620ms var(--pg-ease);
}

/* La fecha va ARRIBA aunque en el marcado vaya donde le toque: `order` sólo
   cambia lo visual y el orden de lectura sigue siendo el del documento. */
.pg-noticias .wp-block-post-date{
  order:-1;margin:0 24px;padding-top:20px;
  font-size:12.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  color:var(--pg-accent);
}
.pg-noticias .wp-block-post-featured-image{order:-2;}
.pg-noticias .wp-block-post-title{
  margin:12px 24px 10px;
  font-size:19px;font-weight:800;line-height:1.3;
  letter-spacing:-.015em;color:var(--pg-head);
}
.pg-noticias .wp-block-post-title a{color:inherit;text-decoration:none;}
.pg-noticias .wp-block-post-excerpt{margin:0 24px;}
.pg-noticias .wp-block-post-excerpt__excerpt{
  margin:0;font-size:14.5px;line-height:1.65;color:var(--pg-muted);
}
.pg-noticias .wp-block-post-excerpt__more-text{margin:0;}
/* "Leer más" como botón de verdad, no como enlace de texto: es lo que pidió
   el usuario y además da al pie de la tarjeta un ancla visual a la misma
   altura en las tres. `margin-top:auto` es lo que las hace cerrar parejas por
   larga o corta que sea la entradilla. */
.pg-noticias .wp-block-post-excerpt__more-link,
.pg-noticias .wp-block-read-more{
  display:inline-flex;align-items:center;gap:8px;align-self:flex-start;
  margin:auto 24px 24px;padding:10px 18px;
  border:1px solid var(--pg-line);border-radius:99px;
  background:transparent;
  font-size:13.5px;font-weight:800;color:var(--pg-accent);text-decoration:none;
  transition:background-color 300ms var(--pg-ease),
             border-color 300ms var(--pg-ease),
             color 300ms var(--pg-ease);
}
.pg-noticias .wp-block-post-excerpt__more-link::after,
.pg-noticias .wp-block-read-more::after{
  content:"\2192";font-size:15px;
  transition:transform var(--pg-base) var(--pg-ease);
}
@media (hover:hover) and (pointer:fine){
  .pg-noticias .wp-block-post:hover{
    transform:translateY(-4px);
    border-color:var(--pg-gold);
    box-shadow:0 32px 60px -30px var(--pg-shadow),0 6px 16px -10px var(--pg-glow);
  }
  .pg-noticias .wp-block-post:hover .wp-block-post-featured-image img{transform:scale(1.05);}
  .pg-noticias .wp-block-post:hover .wp-block-post-excerpt__more-link::after,
  .pg-noticias .wp-block-post:hover .wp-block-read-more::after{transform:translateX(3px);}
  .pg-noticias .wp-block-post-excerpt__more-link:hover,
  .pg-noticias .wp-block-read-more:hover{
    background:var(--pg-gold);border-color:var(--pg-gold);color:var(--pg-on-gold);
  }
}
/* Mientras no haya entradas publicadas */
.pg-noticias .wp-block-query-no-results p{
  margin:0;padding:clamp(26px,3vw,38px);
  background:var(--pg-surface);border:1px dashed var(--pg-line);border-radius:16px;
  font-size:15.5px;line-height:1.7;color:var(--pg-muted);
}
.pg-sec--alt .pg-noticias .wp-block-query-no-results p{background:var(--pg-bg);}

@media (max-width:1000px){
  .pg-noticias .wp-block-post-template{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:680px){
  .pg-noticias .wp-block-post-template{grid-template-columns:1fr;}
}

/* --------------------------------------------------------------------------
   21. LOGOTIPO DEL PIE
   Sustituye al cuarto de círculo dibujado en CSS. El logotipo real ya trae el
   nombre y el descriptor "OIL and GAS INSPECTION UNIT", así que el texto que lo
   acompañaba sobraba: repetirlo al lado era decirlo dos veces.
   -------------------------------------------------------------------------- */
.pg-brand--img{
  display:inline-flex;flex-direction:column;align-items:flex-start;gap:9px;
  margin:0 0 18px;text-decoration:none;
}
.pg-brand__logo{
  /* El archivo es dorado solido sobre transparente: sirve igual en los dos
     temas, y no se le aplica ningun filtro porque deformaria la marca.
     Subio de 40-56px a 52-74px el 2026-08-18: al quitar la linea legal de
     debajo, la marca se quedaba pequena para el peso que tiene en el pie. */
  display:block;width:auto;height:clamp(52px,5.4vw,74px);
}

/* --------------------------------------------------------------------------
   22. MOVIMIENTO REDUCIDO — añadidos de 2026-08-18
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  /* El brillo del antetítulo es un bucle: es lo primero que sobra */
  .pg-eyebrow{animation:none;--pg-x:130%;}
  .pg-check li,.pg-check svg,.pg-valores li::before{transition:none;}
  .pg-sec.is-armed .pg-check li{opacity:1;transform:none;}
  .pg-sec.is-armed .pg-check svg{opacity:1;transform:none;}
  .pg-sec.is-armed .pg-valores li::before{transform:scaleX(1);}
  .pg-anillo__val{transition:none;}
  .pg-carrusel__pista{scroll-behavior:auto;}
  /* Sin paso automático la barra no contaría nada */
  .pg-carrusel__tiempo{display:none;}
  .pg-noticias .wp-block-post,
  .pg-noticias .wp-block-post-featured-image img{transition:none;}
  .pg-noticias .wp-block-post:hover{transform:none;}
  .pg-buzon__giro{animation:none;}

  /* Lo que el scroll enciende en móvil (2026-08-19).
     `activarPorScroll()` sigue marcando la tarjeta o el renglón que cruza el
     centro: eso NO se apaga, porque es lo que sustituye al cursor y sin ello la
     sección se queda plana en el teléfono. Lo que se apaga es el MOVIMIENTO.

     El giro automático de las tarjetas de servicio se retira entero, no se
     acorta: una tarjeta volteándose sola al desplazarse es justo el tipo de
     movimiento que esta preferencia pide evitar. Se queda la cara frontal y el
     botón del ojo, que sigue ahí para quien quiera ver el reverso. */
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip{transform:none;}
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip__frente{opacity:1;}
  .pg-grid-3 .pg-card--flip.is-activa .pg-flip__tras{opacity:0;}
  .pg-grid-3 .pg-card--srv.is-activa{transform:none;}
  .pg-check.is-listo.is-tocada li,
  .pg-check.is-listo.is-tocada li.is-activa{transform:none;}
  .pg-check.is-listo.is-tocada li.is-activa svg{transform:none;}
}

/* --------------------------------------------------------------------------
   23. BARRA LATERAL DEL BLOG
   Vive en el area de widgets "Barra lateral principal" (sidebar-1), asi que sale
   en /blog/ y en cada entrada. El marcado esta en bloques/blog/barra-lateral.html.

   Se apoya en el mismo vocabulario que las secciones de la portada —tarjeta con
   filete de 1px, radio 16px, fondo tintado de dorado, antetitulo en versalitas—
   para que el blog no parezca otro sitio. Lo unico propio es la escala: aqui la
   columna mide un tercio, asi que los tamanos bajan un punto.

   `position:sticky` en el contenedor y no en cada caja: una entrada del blog es
   larga y la columna se queda muy por encima del pliegue si no acompana. Con
   `top` por debajo de la cabecera pegajosa de Blocksy.
   -------------------------------------------------------------------------- */
.pg-bl{
  display:flex;flex-direction:column;gap:20px;
}

/* EL HUECO BLANCO AL FINAL DE UNA ENTRADA LARGA
   ----------------------------------------------------------------------------
   Un articulo de 2.300 palabras mide varias pantallas; la barra mide una. A
   partir de cierto punto la columna derecha se queda vacia y el lector baja
   media pagina mirando un margen en blanco.

   La primera version pegaba la barra ENTERA con `position:sticky`. Eso funciona
   mientras la barra sea mas corta que la pantalla y deja de funcionar en cuanto
   crece: se pega el bloque completo y se corta por abajo lo que no cabe.

   Lo que se pega es SOLO EL ULTIMO MODULO. El resto se lee y se va, y el
   boletin —que es la conversion— acompania el resto del articulo. Para que
   tenga recorrido, la cadena de alturas tiene que llegar hasta la columna:
   `.ct-sidebar` estira con la fila, y de ahi baja el 100% hasta `.pg-bl`.

   Si esa cadena fallara en alguna version de Blocksy, el sticky simplemente no
   tiene recorrido y el modulo se queda quieto. Se pierde el efecto, no el
   contenido. */
@media (min-width:1000px){
  .ct-sidebar{height:100%;}
  .ct-sidebar > .ct-widget{height:100%;}
  .pg-bl{min-height:100%;}
  .pg-bl__caja--fijo{
    position:sticky;
    top:calc(var(--header-height,80px) + 24px);
  }
}

.pg-bl__caja{
  padding:clamp(20px,2vw,26px);
  background:var(--pg-surface);
  border:1px solid var(--pg-line);
  border-radius:16px;
}
.pg-bl__eyebrow{
  display:block;margin:0 0 9px;
  font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--pg-accent);
}
.pg-bl__ttl{
  margin:0 0 12px;
  font-size:clamp(17px,1.6vw,19px);font-weight:800;line-height:1.25;
  letter-spacing:-.015em;color:var(--pg-head);
}
.pg-bl__txt{
  margin:0;font-size:14.5px;line-height:1.65;color:var(--pg-muted);
}
.pg-bl__pie{
  margin:14px 0 0;font-size:12.5px;line-height:1.6;color:var(--pg-muted);
}
.pg-bl__lista{
  margin:14px 0 0;padding:0;list-style:none;
  display:flex;flex-direction:column;gap:9px;
}
.pg-bl__lista li{
  position:relative;padding-left:16px;
  font-size:13.5px;line-height:1.6;color:var(--pg-fg);
}
/* Vineta dibujada, no un `list-style`: un punto de lista hereda el tamano de la
   letra y a 13.5px se pierde. */
.pg-bl__lista li::before{
  content:"";position:absolute;left:0;top:.62em;
  width:5px;height:5px;border-radius:50%;background:var(--pg-accent);
}

/* La caja del boletin es la unica con fondo tintado: es la accion de la columna
   y tiene que ganarle en peso a las demas sin gritar. El tinte sale de
   color-mix sobre el dorado, con el fondo liso de respaldo para navegadores que
   no lo soporten — el mismo patron que .pg-card. */
.pg-bl__caja--boletin{
  background:var(--pg-surface);
  background:linear-gradient(
    165deg,
    color-mix(in srgb,var(--pg-gold) 9%, var(--pg-surface)) 0%,
    var(--pg-surface) 62%
  );
  border-color:color-mix(in srgb,var(--pg-gold) 26%, var(--pg-line));
}
/* En las secciones de banda alterna el fondo del sitio ya es --pg-bg, y una caja
   en --pg-surface flotaria; se invierte. */
.pg-sec--alt .pg-bl__caja{background:var(--pg-bg);}

/* --------------------------------------------------------------------------
   Guias relacionadas  (modulo dinamico, ver tema-hijo/inc/barra-blog.php)
   -------------------------------------------------------------------------- */
.pg-bl__rel{
  margin:14px 0 0;padding:0;list-style:none;
  display:flex;flex-direction:column;gap:4px;
}
.pg-bl__rel a{
  display:flex;align-items:flex-start;gap:12px;
  padding:10px;margin:-10px;border-radius:10px;
  text-decoration:none;
  transition:background-color 200ms var(--pg-ease),transform 260ms var(--pg-ease);
}
/* La miniatura es cuadrada y pequena: en una columna de un tercio, una imagen
   apaisada empuja el titulo a cuatro renglones y la lista deja de escanearse. */
.pg-bl__rel-img{
  flex:none;width:58px;height:58px;border-radius:8px;overflow:hidden;
  background:var(--pg-surface);border:1px solid var(--pg-line);
}
.pg-bl__rel-img img{
  display:block;width:100%;height:100%;object-fit:cover;
}
.pg-bl__rel-txt{display:block;min-width:0;}
.pg-bl__rel-ttl{
  display:block;
  font-size:14px;font-weight:700;line-height:1.4;color:var(--pg-head);
  transition:color 200ms var(--pg-ease);
}
.pg-bl__rel time{
  display:block;margin-top:4px;
  font-size:12px;color:var(--pg-muted);
}
@media (hover:hover) and (pointer:fine){
  .pg-bl__rel a:hover{background:var(--pg-surface);transform:translateX(3px);}
  .pg-bl__rel a:hover .pg-bl__rel-ttl{color:var(--pg-accent);}
}

/* --------------------------------------------------------------------------
   Temas
   -------------------------------------------------------------------------- */
.pg-bl__temas{
  margin:14px 0 0;padding:0;list-style:none;
  display:flex;flex-direction:column;gap:2px;
}
.pg-bl__temas a{
  display:flex;align-items:center;gap:10px;
  padding:9px 12px;margin:0 -12px;border-radius:9px;
  font-size:14px;font-weight:600;color:var(--pg-fg);text-decoration:none;
  transition:background-color 200ms var(--pg-ease),color 200ms var(--pg-ease);
}
/* La cuenta va a la derecha y en tono apagado: es un dato de apoyo, no un
   segundo enlace que compita con el nombre del tema. */
.pg-bl__temas a span{
  margin-left:auto;
  font-size:12px;font-weight:700;color:var(--pg-muted);
  background:var(--pg-surface);border:1px solid var(--pg-line);
  border-radius:99px;padding:2px 9px;
}
@media (hover:hover) and (pointer:fine){
  .pg-bl__temas a:hover{background:var(--pg-surface);color:var(--pg-accent);}
}

/* --------------------------------------------------------------------------
   El buzon
   -------------------------------------------------------------------------- */
.pg-buzon{
  display:flex;flex-direction:column;gap:10px;
  margin-top:18px;
}
.pg-buzon__lbl{
  font-size:12px;font-weight:700;letter-spacing:.02em;color:var(--pg-fg);
}
.pg-buzon__in{
  width:100%;padding:13px 15px;min-height:48px;
  font-family:var(--pg-font);font-size:15px;line-height:1.2;
  color:var(--pg-head);
  background:var(--pg-bg);
  border:1px solid var(--pg-line);border-radius:10px;
  transition:border-color var(--pg-base) var(--pg-ease),
             box-shadow var(--pg-base) var(--pg-ease);
}
.pg-buzon__in::placeholder{color:var(--pg-muted);opacity:.75;}
.pg-buzon__in:focus{
  outline:none;
  border-color:var(--pg-accent);
  box-shadow:0 0 0 3px var(--pg-glow);
}
/* Estado invalido: SOLO despues de intentar enviar. `:invalid` a secas pinta de
   rojo el campo vacio nada mas cargar la pagina, que es regañar a alguien que
   todavia no ha hecho nada. La clase la pone el JS al fallar la validacion. */
.pg-buzon.is-mal .pg-buzon__in{
  border-color:#c0392b;
  box-shadow:0 0 0 3px rgba(192,57,43,.18);
}

/* El senuelo. `display:none` NO sirve: hay robots que saltan justamente los
   campos ocultos con display o visibility, porque saben que son trampas. Se
   saca de la pantalla y se le quita cualquier area de golpeo. */
.pg-buzon__senuelo{
  position:absolute!important;left:-9999px!important;
  width:1px;height:1px;overflow:hidden;
}

.pg-buzon__btn{width:100%;}
/* El JS cambia esta etiqueta a "Enviando…". En una columna de un tercio, dos
   palabras partidas en dos renglones crecerían el botón a media pulsación, que
   es justo cuando peor se lee. */
.pg-buzon__btn-txt{white-space:nowrap;}
/* El boton no cambia de tamano al pasar a "Enviando…": se reserva el ancho del
   texto mas largo con el giro dentro. Un boton que encoge a media pulsacion se
   siente roto. */
.pg-buzon__giro{
  display:none;flex:none;width:16px;height:16px;
  border:2px solid rgba(25,20,0,.28);
  border-top-color:var(--pg-on-gold);
  border-radius:50%;
  animation:pg-giro 640ms linear infinite;
}
@keyframes pg-giro{ to{ transform:rotate(360deg); } }
.pg-buzon.is-enviando .pg-buzon__giro{display:block;}

/* "Enviando…" — un estado ESTABLE, que no depende del cursor ni del foco.
   Y no es un capricho: aquí se vio el fallo del que sale la nota grande de
   petroleum.css. `pointer-events:none` impide la doble pulsación, pero al
   ponerlo el botón deja de casar `:hover` en el acto, así que la tinta negra se
   replegaba… mientras el `:focus` del clic seguía poniendo la letra dorada.
   Dorado sobre dorado: el usuario veía el círculo girando y ninguna palabra.

   Se despliega la tinta a mano y se pinta el giro en dorado para que se lea
   sobre ella. La transición baja a 160 ms: el acuse de una pulsación llegando
   medio segundo tarde se siente como que no respondió. */
.pg-buzon.is-enviando .pg-buzon__btn{pointer-events:none;}
/* El fondo se cambia directamente, no con la tinta del `::before`: en un
   `<button>` ese pseudo-elemento se pinta detrás del fondo y no se ve. Está
   explicado en petroleum.css, en el bloque de botones que son <button>. */
.pg-buzon.is-enviando .pg-buzon__btn,
.pg-buzon.is-enviando .pg-buzon__btn-txt{
  background-image:none;background-color:var(--pg-ink);color:var(--pg-gold);
}
.pg-buzon.is-enviando .pg-buzon__giro{
  border-color:rgba(203,167,5,.30);
  border-top-color:var(--pg-gold);
}

.pg-buzon__aviso{
  margin:2px 0 0;font-size:13px;line-height:1.55;
  /* Sin texto NO ocupa sitio: un hueco reservado bajo el boton se lee como que
     falta algo. Con texto, el margen lo pone el propio contenido. */
  color:var(--pg-muted);
}
.pg-buzon__aviso:empty{display:none;}
.pg-buzon.is-mal .pg-buzon__aviso{color:#c0392b;}

/* Alta correcta: el formulario desaparece y deja el acuse. Dejar el campo
   relleno invita a pulsar otra vez, y la segunda pulsacion no manda nada nuevo
   —el endpoint responde "ya suscrito"—, asi que lo unico que produce es duda. */
.pg-buzon.is-hecho .pg-buzon__lbl,
.pg-buzon.is-hecho .pg-buzon__in,
.pg-buzon.is-hecho .pg-buzon__btn{display:none;}
.pg-buzon.is-hecho .pg-buzon__aviso{
  display:flex;align-items:flex-start;gap:9px;
  margin:0;padding:14px 16px;
  font-size:14px;font-weight:600;color:var(--pg-head);
  background:var(--pg-bg);
  border:1px solid color-mix(in srgb,var(--pg-gold) 34%, var(--pg-line));
  border-left:3px solid var(--pg-gold);
  border-radius:10px;
}
/* La palomita la dibuja el CSS y no el JS: el JS ya escribe el texto, y meterle
   ademas marcado seria construir HTML por concatenacion en un sitio donde entra
   texto del servidor. */
.pg-buzon.is-hecho .pg-buzon__aviso::before{
  content:"";flex:none;width:18px;height:18px;margin-top:1px;
  background:var(--pg-accent);
  -webkit-mask:var(--pg-palomita) center/contain no-repeat;
          mask:var(--pg-palomita) center/contain no-repeat;
}

/* --------------------------------------------------------------------------
   24. NIVEL 2 — CABECERA DE PÁGINA Y MIGAS
   Primer vocabulario para las páginas de segundo nivel (`/contacto/`,
   `/nosotros/`, `/servicios/`). Se estrena con `/contacto/`.

   El nivel 2 NO repite el hero de la portada, y es a propósito. La portada
   tiene que convencer a quien no sabe quiénes somos; una página interior la
   abre alguien que ya pulsó un enlace concreto y quiere llegar a lo suyo.
   Media pantalla de titular ahí es un peaje. La cabecera es una banda
   compacta: migas, H1, entradilla, y a trabajar.
   -------------------------------------------------------------------------- */

/* Migas. En el nivel 2 son una sola: Inicio › esta página.

   No son decoración: a una página interior se llega desde Google sin ningún
   otro indicio de dónde está dentro del sitio. Y el mismo marcado alimentará
   el `BreadcrumbList` de Rank Math cuando se configure. */
.pg-migas{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  margin:0 0 18px;padding:0;list-style:none;
  font-size:13.5px;font-weight:700;color:var(--pg-muted);
}
.pg-migas li{display:flex;align-items:center;gap:8px;}
.pg-migas a{color:var(--pg-muted);text-decoration:none;}
.pg-migas li + li::before{
  content:"";width:5px;height:5px;flex:none;
  border-top:1.5px solid currentColor;border-right:1.5px solid currentColor;
  transform:rotate(45deg);opacity:.7;
}
.pg-migas [aria-current="page"]{color:var(--pg-head);}
@media (hover:hover) and (pointer:fine){
  .pg-migas a:hover{color:var(--pg-accent);}
}

/* La cabecera de nivel 2 reutiliza `.pg-sec` entera —fondo, sangrado, textura
   geométrica, entrada escalonada de `.pg-up`— y sólo aprieta el aire vertical. */
/* El aire vertical y el resto del diseño de esta banda están en la sección 31,
   que es donde la cabecera dejó de ser una pila de textos. */

/* --------------------------------------------------------------------------
   25. REJILLA PARTIDA — lo principal y su apoyo
   Dos columnas de peso distinto: la ancha lleva lo que la página viene a hacer
   —en `/contacto/`, el formulario— y la estrecha, lo que sirve de apoyo.

   `minmax(0,…)` en las dos, y no `1.18fr .82fr` a secas: sin el mínimo en cero,
   una columna de rejilla nunca baja del ancho de su contenido más largo, y
   basta un correo sin espacios para que se ensanche y descuadre la otra.
   -------------------------------------------------------------------------- */
.pg-dos{
  display:grid;grid-template-columns:minmax(0,1.18fr) minmax(0,.82fr);
  gap:clamp(24px,3vw,40px);align-items:start;
  margin-top:clamp(26px,3.2vw,40px);
}
@media (max-width:900px){
  .pg-dos{grid-template-columns:minmax(0,1fr);}
}

/* EL FORMULARIO ACOMPAÑA EL SCROLL
   ----------------------------------------------------------------------------
   La columna derecha —vías directas más «qué pasa cuando envía»— es más alta
   que el formulario, así que bajo él quedaba un hueco en blanco de varios
   cientos de píxeles. Y peor que el hueco: quien termina de leer las vías ya
   no tiene el botón de enviar a la vista, y ése es el objetivo de conversión
   de todo el sitio.

   **`align-self:start` es lo que le da recorrido al sticky**, y ya estaba
   puesto por `align-items:start`: si el elemento se estirara con la fila
   ocuparía todo el alto de su área y no le quedaría por dónde deslizarse.

   **El `top` lo calcula el JS y por eso hay dos valores.** Un `top` fijo
   —cabecera + 24— sólo sirve si el elemento cabe en la pantalla; el
   formulario de cotización no cabe, y pegándolo por arriba el botón de enviar
   se queda permanentemente fuera del pliegue. Imposible enviar el formulario.

   Con `--pg-pegado` el guión escribe `min(cabecera + 24, alto de pantalla -
   alto del formulario - 24)`. Cuando el formulario cabe, sale el primer valor
   y se pega por arriba, como cualquier barra lateral. Cuando NO cabe, sale un
   número NEGATIVO: el formulario se pega por su BORDE INFERIOR y lo que queda
   fijo a la vista es el final —el botón—, que es justo lo que hace falta.

   El valor de reserva es el `top` de siempre: sin JS el sticky sigue
   funcionando para pantallas altas y no se rompe nada.

   Por debajo de 900px la rejilla es de una columna y el sticky sobra: el
   formulario y las vías van uno detrás de otro y no hay hueco que rellenar. */
@media (min-width:901px){
  .pg-dos > .pg-form{
    position:sticky;
    top:var(--pg-pegado,calc(var(--header-height,80px) + 24px));
  }
}
/* Quien pide menos movimiento no quiere un panel persiguiéndole la vista. */
@media (prefers-reduced-motion:reduce){
  .pg-dos > .pg-form{position:static;}
}

/* --------------------------------------------------------------------------
   26. FORMULARIO DE COTIZACIÓN
   El de `/contacto/`. Comparte los tres estados del buzón del boletín
   —`is-enviando`, `is-mal`, `is-hecho`— porque son los mismos tres y ya estaban
   resueltos ahí. Lo que cambia es que aquí hay varios campos y una rejilla.
   -------------------------------------------------------------------------- */
.pg-form{
  position:relative;
  background:var(--pg-surface);
  border:1px solid var(--pg-line);border-radius:16px;
  border-top:3px solid var(--pg-gold);
  padding:clamp(24px,2.8vw,34px);
}
.pg-sec--alt .pg-form{background:var(--pg-bg);}
.pg-form__t{
  margin:0 0 6px;font-size:clamp(20px,2vw,24px);font-weight:800;
  color:var(--pg-head);letter-spacing:-.015em;line-height:1.25;
}
.pg-form__d{margin:0 0 22px;font-size:14.5px;line-height:1.65;color:var(--pg-fg);}

/* La rejilla de campos: dos columnas, y los que necesitan la línea entera la
   piden con `--ancho`. */
.pg-form__campos{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:16px 18px;
}
.pg-campo--ancho{grid-column:1 / -1;}
@media (max-width:560px){
  .pg-form__campos{grid-template-columns:minmax(0,1fr);}
}

.pg-campo{display:flex;flex-direction:column;gap:7px;min-width:0;}
.pg-campo__lbl{font-size:13px;font-weight:800;letter-spacing:.04em;color:var(--pg-head);}
/* Obligatorio y opcional se marcan CON PALABRA, no sólo con color. Un asterisco
   dorado que además es el único indicio deja fuera a quien no lo distingue del
   gris de al lado. */
.pg-campo__req{color:var(--pg-accent);font-weight:800;}
.pg-campo__op{color:var(--pg-muted);font-weight:600;letter-spacing:0;}

.pg-campo__in{
  width:100%;min-width:0;
  padding:12px 14px;
  font:inherit;font-size:15px;line-height:1.45;
  color:var(--pg-head);
  background:var(--pg-bg);
  border:1px solid var(--pg-line);border-radius:10px;
  transition:border-color 260ms var(--pg-ease),
             box-shadow 260ms var(--pg-ease);
}
.pg-sec--alt .pg-campo__in{background:var(--pg-surface);}
.pg-campo__in::placeholder{color:var(--pg-muted);opacity:.72;}
.pg-campo__in:focus{
  outline:none;
  border-color:var(--pg-gold);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--pg-gold) 22%, transparent);
}
textarea.pg-campo__in{min-height:118px;resize:vertical;}

/* Aquí vivía el estilo de un `<select>`. Se retiró en la v2.51.0: cortaba las
   etiquetas de norma y no dejaba elegir varias, así que pasó a casillas
   —sección 28—. En la v2.52.0 esas casillas se metieron dentro de un
   `<details>` para que el campo no ocupase media pantalla, y el token
   `--pg-flechita` volvió a hacer falta: es la flecha de la cabecera. */

/* El señuelo, fuera de la vista pero NO con `display:none` ni `hidden`: los
   robots que rellenan formularios saltan lo que está oculto de esa forma, y el
   campo dejaría de cazar a ninguno. El `tabindex="-1"` va en el marcado, para
   que quien navegue con teclado tampoco aterrice dentro. */
.pg-form__senuelo{
  position:absolute;left:-9999px;width:1px;height:1px;
  opacity:0;pointer-events:none;
}

.pg-form__pie{
  display:flex;flex-wrap:wrap;align-items:center;gap:14px;
  margin-top:22px;
}
/* La etiqueta del botón es su propio nodo porque el JS la sustituye por
   «Enviando…» y la devuelve al terminar. Reescribir el botón entero tiraría el
   nodo y con él el foco del teclado. `nowrap` para que el cambio de texto no
   parta el botón en dos renglones a media pulsación. */
.pg-form__btn-txt{white-space:nowrap;}
.pg-form__legal{
  flex:1 1 220px;margin:0;
  font-size:12.5px;line-height:1.6;color:var(--pg-muted);
}
.pg-form__legal a{color:var(--pg-accent);}

/* Estados. Mismos nombres que el buzón del boletín. */
.pg-campo.is-mal .pg-campo__in{
  border-color:#c0392b;
  box-shadow:0 0 0 3px color-mix(in srgb,#c0392b 18%, transparent);
}
.pg-form__aviso{margin:16px 0 0;font-size:14px;line-height:1.6;color:var(--pg-fg);}
.pg-form__aviso:empty{display:none;}
.pg-form.is-mal .pg-form__aviso{color:#c0392b;font-weight:700;}
.pg-form.is-enviando .pg-form__btn{pointer-events:none;opacity:.72;}

/* Enviado: el formulario se retira y deja el acuse. Dejarlo puesto invita a
   mandar la misma solicitud otra vez, y quien la recibe no sabe si son dos
   clientes o uno nervioso. */
.pg-form.is-hecho .pg-form__campos,
.pg-form.is-hecho .pg-form__pie,
.pg-form.is-hecho .pg-form__d{display:none;}
.pg-form.is-hecho .pg-form__aviso{
  display:flex;align-items:flex-start;gap:10px;
  margin:0;padding:16px 18px;
  font-size:15px;font-weight:600;color:var(--pg-head);
  background:var(--pg-bg);
  border:1px solid color-mix(in srgb,var(--pg-gold) 34%, var(--pg-line));
  border-left:3px solid var(--pg-gold);
  border-radius:12px;
}
.pg-sec--alt .pg-form.is-hecho .pg-form__aviso{background:var(--pg-surface);}
/* La palomita la dibuja el CSS y no el JS. Mismo motivo que en el buzón: el JS
   escribe texto que viene del servidor y no debe construir marcado. */
.pg-form.is-hecho .pg-form__aviso::before{
  content:"";flex:none;width:20px;height:20px;margin-top:1px;
  background:var(--pg-accent);
  -webkit-mask:var(--pg-palomita) center/contain no-repeat;
          mask:var(--pg-palomita) center/contain no-repeat;
}

/* La nota que va debajo de las vías. El aire lo pone el tema y no un `style`
   en línea en el bloque: los bloques son sólo marcado. */
.pg-vias + .pg-nota{margin-top:22px;}

/* --------------------------------------------------------------------------
   27. VÍAS DIRECTAS
   La columna de apoyo de `/contacto/`: WhatsApp, teléfono, correo, domicilio y
   horario. Cada una es una fila con su insignia, y las que se pueden pulsar son
   un enlace ENTERO, no un enlace escondido dentro de un texto.
   -------------------------------------------------------------------------- */
.pg-vias{
  display:flex;flex-direction:column;gap:10px;
  margin:0;padding:0;list-style:none;
}
.pg-via{
  display:flex;align-items:flex-start;gap:14px;
  padding:15px 16px;
  background:var(--pg-surface);
  border:1px solid var(--pg-line);border-radius:13px;
  text-decoration:none;
  transition:border-color 300ms var(--pg-ease),
             transform 300ms var(--pg-ease);
}
.pg-sec--alt .pg-via{background:var(--pg-bg);}
.pg-via__ib{
  flex:none;display:grid;place-items:center;
  width:40px;height:40px;border-radius:11px;
  background:var(--pg-bg);border:1px solid var(--pg-line);
  color:var(--pg-accent);
  transition:background-color 300ms var(--pg-ease),
             border-color 300ms var(--pg-ease),
             color 300ms var(--pg-ease);
}
.pg-sec--alt .pg-via__ib{background:var(--pg-surface);}
.pg-via__ib svg{width:20px;height:20px;fill:currentColor;stroke:none;}
.pg-via__txt{min-width:0;}
.pg-via__t{
  display:block;margin-bottom:2px;
  font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--pg-muted);
}
.pg-via__v{
  display:block;font-size:15.5px;font-weight:700;line-height:1.45;
  color:var(--pg-head);overflow-wrap:anywhere;
}
.pg-via__n{
  display:block;margin-top:3px;
  font-size:13px;line-height:1.55;color:var(--pg-muted);font-weight:500;
}
@media (hover:hover) and (pointer:fine){
  a.pg-via:hover{border-color:var(--pg-gold);transform:translateY(-2px);}
  a.pg-via:hover .pg-via__ib{
    background:var(--pg-gold);border-color:var(--pg-gold);color:var(--pg-on-gold);
  }
}
a.pg-via:focus-visible{outline:2px solid var(--pg-accent);outline-offset:3px;}

@media (prefers-reduced-motion:reduce){
  a.pg-via:hover{transform:none;}
  .pg-via,.pg-via__ib,.pg-campo__in{transition:none !important;}
}

/* --------------------------------------------------------------------------
   28. CASILLAS DEL FORMULARIO
   El campo «qué servicio necesita». Era un `<select>` de valor único hasta la
   v2.50.3; se cambió porque cortaba las etiquetas de norma —no caben en una
   línea— y porque hacía falta poder pedir varios servicios.

   Casillas y NO `<select multiple>`: el múltiple nativo obliga a ctrl+clic en
   escritorio, que casi nadie sabe, y en el teléfono es una lista diminuta con
   su propio desplazamiento. Aquí cada opción es un renglón que se lee entero y
   se toca con el dedo.
   -------------------------------------------------------------------------- */

/* `fieldset` es la semántica correcta para un grupo de casillas, pero trae dos
   estilos de agente de usuario que hay que desmontar: el marco, y un
   `min-inline-size:min-content` que impide encogerse dentro de una rejilla y
   desborda la columna. */
.pg-grupo{
  border:0;padding:0;margin:0;min-width:0;
}
.pg-grupo > legend{padding:0;}

.pg-opciones{
  display:flex;flex-direction:column;gap:6px;
  margin-top:2px;
}
.pg-opcion{
  border:1px solid var(--pg-line);border-radius:11px;
  background:var(--pg-bg);
  overflow:hidden;
  transition:border-color 260ms var(--pg-ease);
}
.pg-sec--alt .pg-opcion{background:var(--pg-surface);}
.pg-opcion:has(> .pg-marca input:checked){border-color:var(--pg-gold);}

/* La casilla. El `input` nativo se esconde con `appearance:none` pero SIGUE
   EN EL FLUJO y sigue recibiendo el foco: se le da tamaño cero y se dibuja
   `.pg-marca__caja` en su lugar. Un `display:none` lo sacaría del orden de
   tabulación y el campo dejaría de existir para el teclado. */
.pg-marca{
  display:flex;align-items:flex-start;gap:11px;
  padding:12px 14px;cursor:pointer;
  font-size:14.5px;line-height:1.5;color:var(--pg-fg);
}
.pg-marca input{
  appearance:none;-webkit-appearance:none;
  position:absolute;width:1px;height:1px;margin:0;padding:0;
  opacity:0;pointer-events:none;
}
.pg-marca__caja{
  flex:none;position:relative;
  width:19px;height:19px;margin-top:1px;
  border:1.5px solid var(--pg-line);border-radius:5px;
  background:var(--pg-surface);
  transition:background-color 200ms var(--pg-ease),
             border-color 200ms var(--pg-ease);
}
.pg-sec--alt .pg-marca__caja{background:var(--pg-bg);}
.pg-marca__caja::after{
  content:"";position:absolute;inset:2px;
  background:var(--pg-on-gold);
  -webkit-mask:var(--pg-palomita) center/contain no-repeat;
          mask:var(--pg-palomita) center/contain no-repeat;
  opacity:0;transform:scale(.6);
  transition:opacity 160ms linear,transform 200ms var(--pg-ease);
}
.pg-marca input:checked + .pg-marca__caja{
  background:var(--pg-gold);border-color:var(--pg-gold);
}
.pg-marca input:checked + .pg-marca__caja::after{opacity:1;transform:scale(1);}

/* El foco se dibuja sobre la caja, que es lo que se ve. Sin esto, tabular por
   el formulario no enseñaría dónde está uno. */
.pg-marca input:focus-visible + .pg-marca__caja{
  outline:2px solid var(--pg-accent);outline-offset:2px;
}
.pg-marca__txt{min-width:0;}
.pg-marca__txt b{color:var(--pg-head);font-weight:800;}
.pg-marca input:checked ~ .pg-marca__txt{color:var(--pg-head);}

@media (hover:hover) and (pointer:fine){
  .pg-marca:hover .pg-marca__caja{border-color:var(--pg-gold);}
}

/* --- Alcances -------------------------------------------------------------
   Sólo salen al marcar su norma. Las seis abiertas de golpe son veintitrés
   casillas, y eso ya no es un formulario de contacto: es un trámite.

   El `hidden` lo pone y lo quita el JS. Va así y no con `:has()` en CSS porque
   al desmarcar la norma hay que **desmarcar también sus alcances**, y eso el
   CSS no lo puede hacer: quedarían enviados alcances de un servicio que ya no
   está pedido. El PHP los descartaría igual —valida cada alcance contra su
   servicio— pero el visitante vería casillas marcadas que no cuentan.
   ------------------------------------------------------------------------- */
.pg-hijas{
  display:flex;flex-direction:column;gap:2px;
  padding:2px 14px 12px 44px;
  border-top:1px dashed var(--pg-line);
  margin-top:-2px;
}
.pg-hijas[hidden]{display:none;}
.pg-hijas__t{
  margin:10px 0 4px;
  font-size:11.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--pg-muted);
}
.pg-marca--mini{
  padding:5px 0;font-size:14px;gap:9px;
}
.pg-marca--mini .pg-marca__caja{width:17px;height:17px;border-radius:4px;}

@media (max-width:560px){
  .pg-hijas{padding-left:30px;}
}

@media (prefers-reduced-motion:reduce){
  .pg-opcion,.pg-marca__caja,.pg-marca__caja::after{transition:none !important;}
}

/* --------------------------------------------------------------------------
   29. BOLETÍN DEL PIE
   El mismo buzón de la barra lateral del blog, en el pie.

   POR QUÉ ESTÁ EN LOS DOS SITIOS. La barra lateral **no se ve en el teléfono**:
   Blocksy la apila al final o la esconde según la plantilla, así que no había
   ninguna forma de suscribirse desde un móvil — que es por donde entra casi
   todo el tráfico de un blog. Y el pie sale en todas las páginas, no sólo en
   las entradas, así que además se puede uno suscribir desde la portada.

   No hay JS nuevo: el marcado reutiliza las clases `pg-buzon*` y lo recoge el
   mismo `buzon()`. Lo único propio es la disposición.
   -------------------------------------------------------------------------- */
.pg-foot__boletin{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(20px,3vw,44px);align-items:center;
  margin-top:clamp(30px,3.6vw,44px);
  padding:clamp(24px,2.8vw,32px);
  background:var(--pg-surface);
  border:1px solid var(--pg-line);border-radius:16px;
  border-left:3px solid var(--pg-gold);
}
/* La columna de texto. No lleva estilo propio más que evitar que se estire:
   sin esto, en la rejilla el bloque se centra respecto del formulario y el
   titular queda flotando cuando el aviso de error hace crecer la otra columna. */
.pg-foot__boletin-txt{align-self:center;min-width:0;}
.pg-foot__boletin h2{
  margin:0 0 8px;
  font-size:clamp(19px,2vw,23px);font-weight:800;line-height:1.25;
  color:var(--pg-head);letter-spacing:-.015em;text-transform:none;
}
.pg-foot__boletin p{
  margin:0;font-size:14.5px;line-height:1.65;color:var(--pg-fg);max-width:52ch;
}

/* En el pie el buzón va en HORIZONTAL: campo y botón en la misma línea. En la
   barra lateral van apilados porque la columna es estrecha. El rótulo se oculta
   a la vista pero NO se quita —el `placeholder` no es una etiqueta y un lector
   de pantalla se quedaría sin saber qué se pide—. */
.pg-buzon--pie{
  display:grid;grid-template-columns:minmax(0,1fr) auto;
  gap:10px;align-items:start;
}
.pg-buzon--pie .pg-buzon__lbl{
  position:absolute;width:1px;height:1px;overflow:hidden;
  clip-path:inset(50%);white-space:nowrap;
}
.pg-buzon--pie .pg-buzon__btn{width:auto;white-space:nowrap;}
.pg-buzon--pie .pg-buzon__aviso,
.pg-buzon--pie .pg-buzon__pie{grid-column:1 / -1;}
.pg-buzon__pie{
  margin:2px 0 0;font-size:12.5px;line-height:1.6;color:var(--pg-muted);
}
/* Enviado: el formulario se retira y el acuse ocupa el ancho entero. */
.pg-buzon--pie.is-hecho .pg-buzon__pie{display:none;}

@media (max-width:900px){
  .pg-foot__boletin{grid-template-columns:minmax(0,1fr);}
}
@media (max-width:560px){
  .pg-buzon--pie{grid-template-columns:minmax(0,1fr);}
  .pg-buzon--pie .pg-buzon__btn{width:100%;}
}

/* --------------------------------------------------------------------------
   30. DESPLEGABLE DEL CAMPO DE SERVICIOS
   Las siete normas y sus alcances, dentro de un `<details>`.

   POR QUÉ. Con las siete casillas siempre a la vista, el campo se comía media
   pantalla del formulario — y la mayoría de los visitantes sólo va a marcar
   una. Cerrado ocupa lo mismo que un campo de texto y se lee como el
   desplegable que había antes; abierto son las normas con su alcance.

   `<details>` nativo y no un acordeón a mano: abre y cierra sin JS, el teclado
   ya lo sabe manejar y Ctrl+F encuentra el texto de dentro aunque esté cerrado.
   Lo único que hace el script es escribir el resumen de lo marcado.
   -------------------------------------------------------------------------- */
.pg-desple{
  border:1px solid var(--pg-line);border-radius:10px;
  background:var(--pg-bg);
  overflow:hidden;
  transition:border-color 260ms var(--pg-ease);
}
.pg-sec--alt .pg-desple{background:var(--pg-surface);}
.pg-desple[open]{border-color:var(--pg-gold);}

/* La cabecera imita a `.pg-campo__in`: mismo alto, mismo relleno, mismo cuerpo.
   Cerrado tiene que parecer un campo del formulario, no un botón suelto. */
.pg-desple__cab{
  display:flex;align-items:center;gap:12px;
  padding:12px 14px;
  cursor:pointer;
  font-size:15px;line-height:1.45;color:var(--pg-head);
  /* El triángulo del agente de usuario se quita por las dos vías que hay: la
     estándar y la de WebKit, que hasta Safari 16 no entendía la primera. */
  list-style:none;
}
.pg-desple__cab::-webkit-details-marker{display:none;}
.pg-desple__cab:focus-visible{
  outline:2px solid var(--pg-accent);outline-offset:-2px;
}

/* El resumen. En gris mientras no hay nada marcado —es un marcador de posición,
   igual que el `placeholder` de los demás campos— y en color de titular cuando
   ya se eligió algo, para que se note de un vistazo que el campo está resuelto. */
.pg-desple__r{
  flex:1 1 auto;min-width:0;
  color:var(--pg-muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.pg-desple.is-puesto .pg-desple__r{color:var(--pg-head);font-weight:700;}

.pg-desple__i{
  flex:none;width:12px;height:8px;
  background:var(--pg-accent);
  -webkit-mask:var(--pg-flechita) center/contain no-repeat;
          mask:var(--pg-flechita) center/contain no-repeat;
  transition:transform 260ms var(--pg-ease);
}
.pg-desple[open] .pg-desple__i{transform:rotate(180deg);}

@media (hover:hover) and (pointer:fine){
  .pg-desple:not([open]):hover{border-color:var(--pg-gold);}
}

/* Dentro del desplegable las opciones pierden su propio marco: el marco ya lo
   pone el `<details>`, y dos bordes concéntricos se ven como un error. */
.pg-desple .pg-opciones{
  gap:0;
  padding:0;
  border-top:1px solid var(--pg-line);
}
.pg-desple .pg-opcion{
  border:0;border-radius:0;
  background:transparent;
}
.pg-desple .pg-opcion + .pg-opcion{border-top:1px solid var(--pg-line);}
.pg-desple .pg-opcion:has(> .pg-marca input:checked){
  background:color-mix(in srgb,var(--pg-gold) 7%, transparent);
}

@media (prefers-reduced-motion:reduce){
  .pg-desple,.pg-desple__i{transition:none !important;}
}

/* --------------------------------------------------------------------------
   31. CABECERA DE NIVEL 2 — el diseño
   La sección 24 dejó la cabecera resuelta pero SOSA: migas, antetítulo, H1 y
   entradilla apilados, que es lo que sale por omisión en cualquier plantilla.
   Una página interior no necesita el hero de la portada, pero sí tener cara.

   Cuatro piezas, todas del vocabulario que el sitio ya usa en otro sitio:

   1. **La palabra de agua.** El nombre de la sección en enorme, en hueco y
      dorado, recortada por el borde de la banda. Es el mismo recurso que la
      marca de agua de las tarjetas de servicio y del portal, subido de escala.
   2. **La escuadra dorada** sobre el antetítulo: el mismo trazo de 2px del
      filete de las tarjetas, doblado en ángulo.
   3. **Pareado**: titular a la izquierda, entradilla a la derecha, como la
      cabecera de la sección de servicios de la portada.
   4. **El H1 lleva `.pg-letras`**, el anti-imán del hero. Es la interacción
      firma del sitio y en el nivel 2 no estaba en ninguna parte.
   -------------------------------------------------------------------------- */
.pg-sec--hoja{
  /* El cuerpo de la palabra de agua. Vive aquí y no en `.pg-hoja__marca` porque
     el relleno inferior de la banda se calcula a partir de él, y una variable
     sólo la ve quien está por debajo en el árbol. */
  --pg-marca:clamp(84px,15.5vw,220px);
  padding-top:clamp(34px,4.4vw,60px);
  /* El relleno de abajo NO es aire decorativo: es el hueco donde cabe la
     palabra de agua entera. Se calcula desde su tamaño —`--pg-marca`, la misma
     variable que le da el cuerpo— por su interlínea de .8, más un margen. Si se
     cambia el tamaño de la palabra, la banda crece con ella y no hay que
     acordarse de tocar dos números.

     Antes eran 40px fijos y la palabra se salía por abajo: se veía «Contacto»
     partido por la mitad de las letras. */
  /* Aire normal. La banda sólo recupera el hueco de la palabra de agua cuando
     de verdad la lleva —ver el `:has()` de más abajo—. */
  padding-bottom:clamp(34px,4.2vw,56px);
  /* La banda se cierra con un filete que se desvanece por los lados, en vez de
     una línea de borde a borde: el corte recto parte la página en dos y hace
     que la cabecera parezca de otra plantilla. */
  border-bottom:1px solid transparent;
  border-image:linear-gradient(90deg,transparent,var(--pg-line) 22%,var(--pg-line) 78%,transparent) 1;
}
.pg-sec--hoja .pg-lead{margin-bottom:0;}

/* --- La palabra de agua ---------------------------------------------------
   En HUECO y no maciza: a este tamaño el dorado relleno se come la banda y el
   titular deja de leerse encima. El contorno da presencia sin robar contraste.

   Va pegada al borde derecho y se sale por abajo. La recorta el
   `overflow:clip` de `.pg-sec` —no `.pg-bleed`, que sólo estira el ancho—, y
   por eso funciona: `.pg-sec` es además `position:relative`, así que es la
   caja contra la que se posiciona. Que se salga es lo que la hace verse grande
   de verdad; encajada entera parecería un logotipo mal puesto.

   Si `-webkit-text-stroke` no existiera, el relleno transparente la deja
   invisible — y como es decoración, ése es el fallo correcto. */
.pg-hoja__marca{
  /* `bottom` en positivo y pequeño, no negativo: con `line-height:.8` la caja
     del texto es MÁS BAJA que las letras, así que éstas asoman por arriba y por
     abajo de su propia caja. Un `.06em` de margen es lo que hace falta para que
     el trazo inferior no toque el borde de la banda y se vea cortado. */
  position:absolute;right:2%;bottom:.06em;z-index:0;
  margin:0;pointer-events:none;user-select:none;
  /* El tamaño se subió a 220px tras verlo el usuario. La cuenta para saber
     cuánto ocupa: «Contacto» son 8 caracteres y a peso 800 cada uno mide
     ~0.55em, así que la palabra son unos 4.4em — a 220px, ~970px. Cabe en un
     contenedor de 1290 sin cruzar la banda entera, que es lo que pasaba con los
     240px del primer intento.

     Una sección con un nombre más largo —«Aviso de privacidad»— desbordará por
     la izquierda. Es aceptable: se recorta y sigue leyéndose como textura. Si
     alguna queda mal, se le baja el tamaño a esa página, no a todas. */
  font-size:var(--pg-marca);font-weight:800;
  letter-spacing:-.05em;line-height:.8;white-space:nowrap;

  /* La atenuación de reposo vive en el ALFA DEL TRAZO, no en un `opacity` del
     elemento. Es el cambio que hace posible la luz: `opacity` afecta a todo lo
     que pinta el nodo, así que con `.32` el relleno más brillante posible se
     quedaba en un 32% y el foco no podía encenderse por encima del contorno.
     Separados, el contorno sigue siendo discreto y el relleno puede llegar
     donde haga falta. `--pg-ico` sigue mandando en los dos, así que el reposo
     se ve igual que antes y sigue respondiendo al cambio de tema. */
  --pg-marca-alfa:calc(var(--pg-ico) * 95%);

  /* --- El relleno que sigue al cursor -----------------------------------
     En reposo sólo se ve el CONTORNO: el relleno es transparente y el trazo lo
     dibuja `-webkit-text-stroke`. Al acercar el cursor las letras se encienden
     dentro de un foco circular: brillan en el centro, bajo el cursor, y se
     apagan hacia el borde del círculo. No es un relleno que aparece —es una
     luz que pasa por encima—, y esa diferencia es la del encargo.

     **Cómo se rellena.** El relleno no es un `color`: es un `background` con un
     `radial-gradient` centrado en el cursor, recortado a la silueta de las
     letras con `background-clip:text`. Es la misma técnica que ya usa el
     antetítulo dorado del sitio para su destello, así que no es un recurso
     nuevo — es el de la casa aplicado a otra cosa.

     **El núcleo NO es el dorado de marca: es `--pg-brillo`**, el token del
     reflejo —casi blanco sobre oscuro, dorado oscuro sobre claro—. Con el
     mismo dorado del contorno el efecto se leía como «letra rellena», no como
     luz: una luz no repinta, quema. El paso brillo → dorado → nada es el que
     da la sensación de foco encendido.

     **Ocho paradas, y la curva importa más que el número.** El alfa cae
     88 → 74 → 64 → 42 → 24 → 11 → 4 → 0: rápido al principio y muy lento al
     final, que es como cae la luz de verdad. Con paradas repartidas por igual
     el borde vuelve a leerse como un disco recortado sobre las letras. La
     mitad del recorrido se gasta en el desvanecido —de 42% para fuera— y por
     eso no hay canto visible en ninguna letra.

     **El radio sube de 210 a 240px** porque el núcleo brillante es ahora más
     pequeño que antes: con 210 la parte encendida se quedaba en una letra
     escasa. Sigue elegido contra el tamaño de la letra —algo más de una a
     cada lado del cursor, dos o tres tocadas a la vez—. Con mucho menos
     parpadea letra a letra; con mucho más se enciende la palabra entera y deja
     de ser un foco. Vive en `--pg-foco` para poder bajarlo en una página
     concreta sin tocar el degradado.

     **No hace falta encenderlo ni apagarlo.** El script escribe la posición del
     cursor siempre, esté donde esté; con el cursor lejos, el centro del foco
     cae fuera de la caja y el degradado no ilumina nada. Por eso el valor de
     reserva de `--pg-sx` es `-100%`: sin script, ningún relleno. */
  color:transparent;
  /* DOS declaraciones y la primera no sobra. El relleno es transparente: el
     contorno es lo único que dibuja la palabra en reposo. Si `color-mix` no se
     analizara, la segunda línea se cae entera y sin la primera la palabra
     quedaría INVISIBLE, no sólo distinta. Antes no hacía falta porque el trazo
     era un color plano. */
  -webkit-text-stroke:2px var(--pg-gold);
  -webkit-text-stroke:2px color-mix(in srgb,var(--pg-gold) var(--pg-marca-alfa),transparent);
  background-image:radial-gradient(
    circle var(--pg-foco,240px) at var(--pg-sx,-100%) var(--pg-sy,-100%),
    color-mix(in srgb,var(--pg-brillo) 88%, transparent)   0%,
    color-mix(in srgb,var(--pg-brillo) 74%, transparent)  12%,
    color-mix(in srgb,var(--pg-gold)   64%, transparent)  26%,
    color-mix(in srgb,var(--pg-gold)   42%, transparent)  42%,
    color-mix(in srgb,var(--pg-gold)   24%, transparent)  58%,
    color-mix(in srgb,var(--pg-gold)   11%, transparent)  74%,
    color-mix(in srgb,var(--pg-gold)    4%, transparent)  88%,
    transparent 100%);
  background-repeat:no-repeat;
  -webkit-background-clip:text;
          background-clip:text;
}
/* Sin cursor no hay foco que seguir, y un relleno fijo se vería como un error
   de recorte. En táctil la palabra se queda en contorno, que es su estado. */
@media (hover:none),(pointer:coarse){
  .pg-hoja__marca{background-image:none;}
}
@media (max-width:760px){
  /* En el teléfono la banda es mucho más baja y la palabra taparía el titular.
     Se reduce y se recuesta más abajo, hasta quedar en el papel de textura. */
  /* 21vw y no más: la palabra mide ~4.4 veces su cuerpo, así que a 21vw ocupa
     el 92% del ancho de la pantalla y entra ENTERA. A 25vw se salía por la
     izquierda y en el teléfono —donde la banda es estrecha— eso no se lee como
     textura, se lee como un fallo. Con un nombre de sección más largo que
     «Contacto» habrá que bajarlo en esa página. */
  .pg-sec--hoja{--pg-marca:21vw;}
  .pg-hoja__marca{
    right:2%;
    -webkit-text-stroke-width:1.5px;
    /* Misma atenuación de antes, por la vía nueva: se toca la variable y el
       trazo se recalcula solo. Si siguiera en `opacity` habría dos mandos
       para lo mismo y uno de los dos se olvidaría. */
    --pg-marca-alfa:calc(var(--pg-ico) * 80%);
  }
}

/* --- La cabecera pareada -------------------------------------------------- */
.pg-hoja{
  position:relative;z-index:1;
  display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);
  gap:clamp(18px,3vw,44px);
  /* `start` y no `end`: la ficha es una caja con su propia altura y alinearla
     por la base la dejaba flotando cuando el titular ocupa dos líneas. En las
     cabeceras que llevan entradilla —no ficha— se vuelve a `end`, abajo. */
  align-items:start;
}

/* --- QUIÉN LLEVA PALABRA DE AGUA Y QUIÉN LLEVA FICHA ------------------------
   Los dos niveles se distinguen, y no por casualidad:

     Nivel 2  — `/servicios/`, `/nosotros/`, `/contacto/`, el aviso:
                **palabra de agua** y entradilla pareada con el titular.
     Nivel 3  — las páginas de norma:
                **ficha de datos** a la derecha, y ninguna palabra de fondo.

   Una página de sección se anuncia; una página de norma se consulta. La palabra
   gigante funciona en la primera y estorba en la segunda, donde lo que hace
   falta a la derecha son los datos.

   **La regla se escribe con `:has()` y no con una clase de más.** El marcado ya
   dice cuál es cuál —una lleva `.pg-hoja__marca` y la otra `.pg-ficha`—, así
   que añadir un modificador sería repetir en un atributo algo que ya está en la
   estructura, y dos sitios donde equivocarse en vez de uno. */
.pg-sec--hoja:has(.pg-hoja__marca){
  /* El hueco donde cabe la palabra entera: su cuerpo por la interlínea de .8,
     más margen. Si se cambia el tamaño de la palabra, la banda crece con ella. */
  padding-bottom:calc(var(--pg-marca) * .8 + 16px);
}
.pg-sec--hoja:has(.pg-hoja__marca) .pg-hoja{
  /* Titular y entradilla se emparejan por la BASE, que es lo que hace que se
     lean como una sola unidad. Con la ficha no vale, porque es una caja. */
  align-items:end;
}
@media (max-width:900px){
  .pg-hoja{grid-template-columns:minmax(0,1fr);align-items:start;}
}

/* La escuadra. Dos trazos de 2px en ángulo, con el mismo dorado del filete de
   las tarjetas. Entra dibujándose —primero el brazo horizontal— cuando la
   sección se arma; sin `.is-armed` se queda puesta, que es lo que se ve si el
   script no corre. */
.pg-hoja__izq{position:relative;padding-top:22px;}
.pg-hoja__izq::before,
.pg-hoja__izq::after{
  content:"";position:absolute;left:0;top:0;
  background:var(--pg-gold);
  transform-origin:left top;
  transition:transform 620ms var(--pg-ease);
}
.pg-hoja__izq::before{width:44px;height:2px;}
.pg-hoja__izq::after{width:2px;height:26px;}
.pg-sec.is-armed .pg-hoja__izq::before{transform:scaleX(1);}
.pg-sec.is-armed .pg-hoja__izq::after{transform:scaleY(1);}
.pg-sec:not(.is-armed) .pg-hoja__izq::before{transform:scaleX(0);}
.pg-sec:not(.is-armed) .pg-hoja__izq::after{transform:scaleY(0);transition-delay:180ms;}

/* El H1 del nivel 2. Un punto por debajo del de la portada —aquélla tiene el
   titular principal del sitio— pero muy por encima de un H1 de plantilla. */
.pg-sec--hoja h1{
  margin:0;
  font-size:clamp(32px,4.6vw,54px);
  line-height:1.08;letter-spacing:-.028em;
}
.pg-hoja__der{padding-bottom:6px;}
.pg-hoja__der .pg-lead{max-width:46ch;}

/* Las migas se separan de la escuadra: pegadas se leían como parte de ella. */
.pg-sec--hoja .pg-migas{margin-bottom:clamp(16px,2vw,26px);}

@media (prefers-reduced-motion:reduce){
  .pg-hoja__izq::before,
  .pg-hoja__izq::after{transition:none;transform:none !important;}
}

/* --------------------------------------------------------------------------
   32. EL MAPA DE LA OFICINA
   Cierra `/contacto/`, a lo ancho, debajo de la rejilla partida.

   ── Historia corta, porque se dio la vuelta dos veces ────────────────────

   1. **Iframe de Google con un `filter` dorado por encima.** No convenció, y
      la razón no era el color: era el contenido. Lo que hace que un mapa de
      CarPlay se vea limpio es que no tiene puntos de interés, ni logotipos de
      negocios, ni parques verdes. Un `filter` retiñe lo que hay pero no puede
      quitar nada.
   2. **Teselas propias de CARTO**, ya estilizadas, sin llave. Se veían como
      se pedía… y **dejaron de ser útiles**: no se arrastran, no traen el
      logotipo de Google ni su cuadro de información. No es un fallo de la
      implementación: esas tres cosas las dibuja Google dentro de su iframe y
      no hay forma de tenerlas sin ser Google.
   3. **Vuelta al iframe, y sin filtro.** Se prefiere el mapa que sirve al
      mapa que combina. Sale con los colores de Google, a propósito.

   **Para tener las dos cosas** —el aspecto de CarPlay Y arrastrar, logotipo e
   info— hace falta la API de JavaScript de Google, que pide llave y cuenta de
   facturación. Está anotado en los pendientes de la bitácora.

   ── Por qué el mapa se enciende al pulsarlo ──────────────────────────────

   Un iframe de Maps se queda con la rueda del ratón: quien baja por la página
   con el cursor encima deja de bajar y empieza a alejar el mapa. Por eso el
   lienzo nace con `pointer-events:none` y encima hay un botón que lo enciende.
   Es un clic de más para quien quiera moverlo — y ninguna trampa para quien
   sólo está pasando. Después de ese clic se arrastra y se acerca con
   normalidad.
   -------------------------------------------------------------------------- */
.pg-mapa{margin-top:clamp(44px,5.2vw,72px);}
.pg-mapa__cab{max-width:62ch;margin:0 0 clamp(18px,2.2vw,26px);}
.pg-mapa__cab h2{
  margin:0 0 8px;font-size:clamp(20px,2vw,24px);font-weight:800;
  color:var(--pg-head);letter-spacing:-.015em;line-height:1.25;
}
.pg-mapa__cab p{margin:0;font-size:14.5px;line-height:1.65;color:var(--pg-fg);}

/* El marco repite el filete dorado superior del formulario: son las dos cajas
   grandes de la página y si no se parecieran, la de abajo se leería como algo
   pegado de otra plantilla. Es lo único que pone el sitio: dentro manda
   Google. */
.pg-mapa__marco{
  position:relative;
  border:1px solid var(--pg-line);border-top:3px solid var(--pg-gold);
  border-radius:16px;overflow:hidden;
  background:var(--pg-surface);
  aspect-ratio:16/6.5;
}
.pg-sec--alt .pg-mapa__marco{background:var(--pg-bg);}
.pg-mapa__lienzo{
  display:block;width:100%;height:100%;border:0;
  /* Inerte hasta que se le pulsa: si no, se queda con la rueda del ratón. */
  pointer-events:none;
}
.pg-mapa.is-viva .pg-mapa__lienzo{pointer-events:auto;}

/* El botón que lo enciende. Cubre el mapa entero —pulsar en cualquier parte es
   lo que uno hace— y sólo se ve la etiqueta, abajo a la DERECHA: arriba a la
   izquierda está el cuadro de información de Google y abajo a la izquierda su
   logotipo, y taparlos era justo lo que no se quería. */
.pg-mapa__velo{
  position:absolute;inset:0;z-index:2;
  display:flex;align-items:flex-end;justify-content:flex-end;
  padding:14px;
  background:transparent;border:0;cursor:pointer;
  font:inherit;color:inherit;
  -webkit-appearance:none;appearance:none;
}
.pg-mapa__velo span{
  display:inline-flex;align-items:center;gap:8px;
  padding:8px 13px;border-radius:99px;
  background:var(--pg-bg);border:1px solid var(--pg-line);
  box-shadow:0 8px 20px -12px var(--pg-shadow);
  font-size:13px;font-weight:700;color:var(--pg-head);
  transition:border-color .18s ease,transform .18s ease;
}
.pg-mapa__velo svg{width:15px;height:15px;fill:var(--pg-accent);flex:none;}
.pg-mapa__velo:hover span{border-color:var(--pg-gold);transform:translateY(-1px);}
.pg-mapa__velo:focus-visible span{outline:2px solid var(--pg-gold);outline-offset:3px;}
.pg-mapa.is-viva .pg-mapa__velo{display:none;}

/* El pie: dirección a la izquierda, «cómo llegar» a la derecha. */
.pg-mapa__pie{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:14px;margin-top:16px;
}
.pg-mapa__dir{
  margin:0;font-size:14px;line-height:1.6;color:var(--pg-muted);
}
.pg-mapa__dir b{color:var(--pg-head);font-weight:700;}

@media (max-width:700px){
  /* En vertical un mapa apaisado se queda en una franja: se le da altura. */
  .pg-mapa__marco{aspect-ratio:4/3.4;}
  .pg-mapa__pie{flex-direction:column;align-items:flex-start;}
}
@media (prefers-reduced-motion:reduce){
  .pg-mapa__velo span{transition:none;}
}

/* --------------------------------------------------------------------------
   33. TARJETA EN FRANJA — la misma tarjeta que gira, sobre el otro eje
   Las de «Lo que nos obliga» en `/nosotros/`: misión, visión y política.

   Es una VARIANTE de `.pg-card--flip`, no una tarjeta nueva. Hereda el
   mecanismo entero de la sección 5 —las dos caras, el relevo de opacidad a la
   mitad del giro, el halo de cursor en la trasera, las tres formas de
   accionarla y el respeto al movimiento reducido— y sólo cambia tres cosas.

   ── 1. El eje ────────────────────────────────────────────────────────────

   Las de servicios son casi cuadradas y giran sobre el eje vertical
   (`rotateY`). Éstas ocupan el ancho de la columna y son mucho más anchas que
   altas: girarlas sobre el eje vertical las haría barrer media pantalla y la
   perspectiva las deformaría en los extremos. Giran sobre el **eje
   horizontal** (`rotateX`), que es su línea más larga de mitad a mitad, y el
   movimiento se lee como el de un cartel que se voltea.

   **Ojo con la especificidad al sobrescribir el eje.** Las reglas base son
   `.pg-card--flip.is-flip .pg-flip` y compañía; aquí se encadenan las DOS
   clases —`.pg-card--flip.pg-card--franja`— para ganar por peso y no por
   orden en el archivo. Si se ganara por orden, mover esta sección rompería el
   giro sin que nada lo cantara.

   ── 2. La cara frontal es una fila, no una columna ───────────────────────

   Título a la izquierda, icono tenue a la derecha. En las de servicios el
   icono es una marca de agua recortada por la esquina inferior derecha; aquí
   no puede serlo —la tarjeta es baja y el icono se comería el título—, así que
   entra en el flujo como segundo elemento de la fila. Sigue siendo marca de
   agua por opacidad (`--pg-ico`), no por recorte.

   ── 3. El botón de táctil ────────────────────────────────────────────────

   En la cara frontal entra también en la fila, porque en su sitio de siempre
   —abajo a la derecha, en absoluto— caería justo encima del icono. En la
   trasera se queda donde estaba, y por eso la trasera reserva hueco abajo
   cuando no hay cursor.

   No lleva `.pg-flip__accion`: esa fila existe para poner un enlace al lado
   del botón, y estas tres tarjetas no llevan a ninguna parte —son el texto
   mismo—. Con un solo hijo, el filete de la fila se vería como un pie vacío.
   -------------------------------------------------------------------------- */
.pg-franjas{
  display:flex;flex-direction:column;
  gap:clamp(14px,1.8vw,20px);
}

/* --- Cara frontal: título a la izquierda, icono a la derecha --- */
.pg-card--franja .pg-flip__frente{
  flex-direction:row;align-items:center;justify-content:flex-start;
  text-align:left;gap:clamp(16px,2.4vw,30px);
  min-height:0;
  padding:clamp(26px,3vw,38px) clamp(24px,2.8vw,34px);
}
.pg-card--franja .pg-flip__cod{
  margin:0;                      /* puede ser un <h3>: el margen del navegador sobra */
  margin-right:auto;             /* empuja icono y botón al otro extremo */
  font-size:clamp(26px,3vw,38px);
  line-height:1.1;letter-spacing:-.02em;
}
.pg-card--franja .pg-flip__icono{
  position:static;flex:none;
  width:clamp(92px,11vw,140px);height:clamp(92px,11vw,140px);
  transform-origin:center right;
  /* Suelo de opacidad. `--pg-ico` vale .15 en claro, pensado para un icono
     GRANDE recortado por la esquina; aquí el icono es pequeño y va sobre el
     fondo crema de la tarjeta, y a .15 no se veía —comprobado renderizando la
     sección en los dos temas—. Con el suelo queda .26 en claro y sigue en .32
     en oscuro, que ahí ya estaba bien. */
  opacity:max(var(--pg-ico),.26);
}
.pg-card--franja .pg-flip__frente .pg-flip__ojo{
  position:static;right:auto;bottom:auto;
}

/* --- El eje horizontal. Las dos clases encadenadas: ver la nota de arriba --- */
.pg-card--flip.pg-card--franja .pg-flip__tras{transform:rotateX(180deg);}
.pg-card--flip.pg-card--franja.is-flip .pg-flip,
.pg-card--flip.pg-card--franja:focus-within .pg-flip{transform:rotateX(180deg);}
@media (hover:hover) and (pointer:fine){
  .pg-card--flip.pg-card--franja:hover .pg-flip{transform:rotateX(180deg);}
}

/* --- Cara trasera --- */
/* El texto se centra en vertical. La cara frontal tiene el título centrado y
   la tarjeta es alta porque la fija el texto de atrás: alineado arriba, al
   girar quedaba un hueco al pie que se leía como un error de maquetación. */
.pg-card--franja .pg-flip__tras{
  justify-content:center;
  padding:clamp(26px,3vw,34px) clamp(24px,2.8vw,34px);
}
.pg-card--franja .pg-flip__tras p{margin:0;font-size:15px;line-height:1.68;}
.pg-card--franja .pg-flip__tras p + p{margin-top:12px;}
/* Sin cursor, el botón de volver vive abajo a la derecha en absoluto: se le
   reserva el hueco para que no se le encime la última línea del texto. */
@media (hover:none){
  .pg-card--franja .pg-flip__tras{padding-bottom:78px;}
}

/* Con movimiento reducido no hay giro —lo apaga la sección 5 con `!important`—
   y las caras se cruzan con un fundido. Aquí no hay nada que añadir: el eje
   deja de importar en cuanto no se gira. */

/* --------------------------------------------------------------------------
   34. FIGURA CON FOTOGRAFÍA
   La primera del sitio. Hasta ahora todo eran iconos y geometría: no había
   ninguna foto verificada que publicar.

   ── De dónde sale la foto ────────────────────────────────────────────────

   Del respaldo del sitio anterior, que es material propio del cliente y ya
   estaba publicado. Es la regla del proyecto: del respaldo **sólo** se
   aprovechan fotografías, nunca textos ni datos.

   ── El marco ─────────────────────────────────────────────────────────────

   La foto trae sus propios colores —cascos blancos, amarillo de instalación,
   cielo azul— y el sitio es negro con dorado. Sin marco, una foto a sangre en
   medio de la página se lee como pegada de otro sitio. El marco es el mismo
   de las tarjetas —borde de 1px, radio 16— y por eso pertenece.

   **No se le pone filtro de color.** Se probó con el mapa y se aprendió ahí:
   teñir un contenido que ya tiene su propio color lo ensucia sin llegar a
   integrarlo. Lo que sí lleva es un velo dorado muy leve en la esquina
   superior, del mismo degradado de las tarjetas, que ata la foto a la paleta
   sin tocar lo que se ve dentro.

   ── El alto ──────────────────────────────────────────────────────────────

   `aspect-ratio` fijo y `object-fit:cover`. El archivo se sirve a 1200x900 y
   los atributos `width`/`height` del `<img>` dicen lo mismo: con las tres
   cosas de acuerdo, el navegador reserva el hueco antes de descargar y el
   texto de al lado no da un salto al llegar la imagen.
   -------------------------------------------------------------------------- */
.pg-foto{
  position:relative;margin:0;
  border:1px solid var(--pg-line);border-radius:16px;
  overflow:hidden;
  background:var(--pg-surface);
}
.pg-sec--alt .pg-foto{background:var(--pg-bg);}
.pg-foto img{
  display:block;width:100%;height:100%;
  aspect-ratio:4/3;object-fit:cover;
}
/* El velo dorado de la esquina: el mismo gesto que el degradado de las
   tarjetas, en muy poca cantidad. Va por encima de la foto y no la tiñe
   entera. */
.pg-foto::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(158deg,
    color-mix(in srgb,var(--pg-gold) 16%, transparent) 0%,
    transparent 46%);
}
.pg-foto figcaption{
  position:relative;
  padding:14px 18px;
  border-top:1px solid var(--pg-line);
  background:var(--pg-bg);
  font-size:13px;line-height:1.5;color:var(--pg-muted);
}
.pg-sec--alt .pg-foto figcaption{background:var(--pg-surface);}

/* --- La cita, cuando vive en una columna ----------------------------------
   `.pg-cita` nació para ir a lo ancho de la sección y por eso trae su propio
   margen superior. Dentro de una rejilla, ese margen la descuadra respecto de
   la columna de al lado, que empieza arriba del todo. */
.pg-dos > .pg-cita,
.pg-dos > :first-child > .pg-cita{margin-top:0;}

/* --- La cita con presencia -------------------------------------------------
   `.pg-cita` a secas es una caja con un filete dorado y texto dentro: correcta
   y sin carácter. Esta variante la convierte en lo que es —una CITA, la voz de
   la empresa— con tres gestos y ninguna palabra nueva:

   1. **Una comilla de agua**, arriba a la derecha, del mismo dorado y a la
      misma opacidad que las demás marcas de agua del sitio (`--pg-ico`). Es el
      mismo recurso que la palabra gigante de las cabeceras de nivel 2: no es un
      adorno importado, es el lenguaje de la casa.
   2. **La firma**, que ya tenía CSS (`.pg-cita footer`) y nadie usaba. Sin ella
      el texto parece redactado por quien hizo la web; con ella se lee como lo
      que es: cómo se presenta la empresa a sí misma.
   3. **Un punto más de cuerpo.** Una cita destacada que se lee al mismo tamaño
      que el párrafo de al lado no destaca nada.

   La comilla va a la DERECHA y no a la izquierda, que es lo habitual, porque el
   filete dorado de `.pg-cita` ya ocupa el lado izquierdo: las dos cosas juntas
   amontonan el mismo color en la misma esquina.
   -------------------------------------------------------------------------- */
.pg-cita--marca{overflow:hidden;}
.pg-cita--marca::before{
  /* La comilla va como CARÁCTER y no como escape CSS: el archivo es UTF-8,
     así se ve en el propio CSS lo que se va a pintar, y no hay forma de que
     un escape mal copiado deje un carácter de control ahí dentro. */
  content:"“";
  position:absolute;right:clamp(14px,1.8vw,26px);top:-.10em;
  font-size:clamp(104px,11vw,158px);line-height:1;font-weight:800;
  color:var(--pg-gold);opacity:calc(var(--pg-ico) * .85);
  pointer-events:none;user-select:none;
}
.pg-cita--marca p{
  position:relative;z-index:1;
  font-size:clamp(17px,1.65vw,20px);
}
.pg-cita--marca footer{position:relative;z-index:1;}

/* --------------------------------------------------------------------------
   35. EL DISTINTIVO DE PAGINA HIJA — la pestana de expediente
   Va en TODA cabecera de nivel 2 y 3, es decir, en toda pagina que cuelgue de
   otra. La portada no lo lleva: es la unica que no es hija de nadie.

   ── Que dibuja, y por que este gesto y no otro ───────────────────────────

   Una carpeta. Un filete cruza la banda por arriba y de el cuelga una pestana
   con las migas dentro. Se eligio entre tres candidatos —una rama, una cinta
   con etiqueta y esto— y gano por dos razones:

   1. **Es el gesto propio de esta empresa.** Lo que vende es un EXPEDIENTE.
      Que sus paginas interiores se dibujen como fichas de una carpeta no es
      una metafora traida de fuera.
   2. **No repite nada.** La cinta con etiqueta obligaba a poner el nombre de
      la seccion encima de unas migas que ya lo decian. La pestana no se anade
      a las migas: las CONTIENE.

   ── Lo que hay que saber para tocarlo ────────────────────────────────────

   **El filete va en un pseudo y no en `border-top`.** `.pg-sec--hoja` ya usa
   `border-image` para el filete de abajo, que se desvanece por los lados, y
   una sola declaracion de `border-image` gobierna los cuatro lados: metiendo
   el de arriba por ahi habria que rehacer el degradado entero. Con un `::before`
   absoluto los dos filetes son independientes.

   **La pestana se cuelga con `margin-top` negativo** hasta comerse el relleno
   superior de la banda, para que su borde toque el filete. Ese relleno es un
   `clamp()`, asi que el margen es el mismo `clamp()` en negativo: si se cambia
   el aire de la banda, la pestana lo sigue sola.

   **El borde superior de la pestana es dorado y de 2px** — es lo unico dorado
   del conjunto. El filete de la banda es `--pg-line`, gris: si los dos fueran
   dorados, el ojo ve dos rayas y no una carpeta.
   -------------------------------------------------------------------------- */
.pg-sec--hoja::before{
  content:"";position:absolute;left:0;right:0;top:0;height:1px;
  background:linear-gradient(90deg,
    var(--pg-line) 0%,var(--pg-line) 74%,transparent 100%);
  pointer-events:none;
}
.pg-sec--hoja .pg-migas{
  position:relative;z-index:2;
  /* de fila suelta a caja: sin esto la pestana ocuparia todo el ancho */
  display:inline-flex;
  margin:calc(-1 * clamp(34px,4.4vw,60px)) 0 clamp(18px,2.2vw,28px);
  padding:9px 20px 9px 18px;
  border:1px solid var(--pg-line);
  border-top:2px solid var(--pg-gold);
  border-radius:0 0 12px 12px;
  background:var(--pg-surface);
}
.pg-sec--alt.pg-sec--hoja .pg-migas{background:var(--pg-bg);}

/* En el telefono la banda respira menos y la pestana se comeria todo el aire
   de arriba: se queda colgando del filete pero sin subir tanto. */
@media (max-width:760px){
  .pg-sec--hoja .pg-migas{
    margin-top:calc(-1 * clamp(20px,4.4vw,34px));
    padding:8px 15px 8px 14px;
  }
}

/* --------------------------------------------------------------------------
   36. LA FICHA DE LA CABECERA — y el adiós a la palabra de agua
   Cabecera de nivel 2 y 3, desde el 2026-08-25.

   ── Qué se fue, y por qué ────────────────────────────────────────────────

   La palabra de agua —el nombre de la sección en enorme, en hueco, encendida
   por un foco que seguía al cursor— **se retiró**. No porque estuviera mal
   hecha: porque **era la misma en todas las páginas hijas**, y lo que se pedía
   era que estas páginas tuvieran un diseño propio y no una copia con una
   insignia encima. Un gesto repetido en cinco páginas deja de distinguir nada.

   Su CSS sigue aquí —sección 31, `.pg-hoja__marca`— y el guión que la enciende
   también. No se borran: funcionan, están documentados y el día que haga falta
   una banda con una palabra gigante estarán listos. Hoy no los usa nadie.

   ── Qué la sustituye ─────────────────────────────────────────────────────

   Un bloque de datos. La cabecera deja de ser una banda decorada y pasa a ser
   **la portada de un dictamen**: titular y entradilla a la izquierda, y a la
   derecha la ficha —norma, trámite, modalidades, a quién aplica, autoridad—
   con sus filetes, como el encabezado de los formatos que la empresa firma.

   No es decoración con otro nombre: **son los datos que alguien busca en los
   primeros diez segundos** y que antes tenía que ir a rascar párrafo abajo.

   ── Cómo se escribe ──────────────────────────────────────────────────────

   Un `<dl>` de dos columnas: `<dt>` la etiqueta, `<dd>` el dato. Se usa `<dl>`
   y no una tabla porque esto son pares clave-valor, no una tabla de datos con
   ejes —y un lector de pantalla lo anuncia como lista de descripción, que es
   lo que es—.

   El número de filas es libre: el filete de la última se quita sola con
   `:nth-last-child`, contando de dos en dos porque cada fila son DOS hijos.
   -------------------------------------------------------------------------- */
.pg-ficha{
  border:1px solid var(--pg-line);
  border-top:2px solid var(--pg-gold);
  border-radius:14px;overflow:hidden;
  background:var(--pg-surface);
}
.pg-sec--alt .pg-ficha{background:var(--pg-bg);}
.pg-ficha dl{margin:0;display:grid;grid-template-columns:auto minmax(0,1fr);}
.pg-ficha dt{
  padding:11px 16px;border-bottom:1px solid var(--pg-line);
  font-size:10.5px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--pg-accent);white-space:nowrap;
}
.pg-ficha dd{
  margin:0;padding:11px 16px 11px 0;border-bottom:1px solid var(--pg-line);
  font-size:14px;line-height:1.5;color:var(--pg-fg);
}
/* Cada fila son dos hijos, así que los dos últimos son la última fila. */
.pg-ficha dl > :nth-last-child(1),
.pg-ficha dl > :nth-last-child(2){border-bottom:0;}

/* La entradilla baja al lado izquierdo, debajo del titular: la derecha ya la
   ocupa la ficha. Se acota para que no se estire hasta el borde de la columna. */
.pg-hoja__izq .pg-lead{margin:clamp(16px,1.8vw,22px) 0 0;max-width:52ch;}

@media (max-width:900px){
  /* Apilados, la ficha va DEBAJO del texto: primero se lee qué es la página y
     luego se consultan los datos. */
  .pg-hoja__der{padding-bottom:0;}
  .pg-ficha dt{padding:10px 13px;}
  .pg-ficha dd{padding:10px 13px 10px 0;}
}

/* --- Ilustración a dos tintas: una versión por tema ------------------------
   Una ilustración de línea no vale para los dos temas. El dorado de marca da
   8.39:1 sobre negro y **2.32:1 sobre blanco**, donde se lava; sobre claro hay
   que usar `--pg-accent`. Así que hay DOS archivos, el mismo dibujo con su
   pareja de colores —los saca `recolorear.py` de una sola imagen, midiendo la
   tinta píxel a píxel, para que sean idénticos de trazo—.

   **Se cambia con CSS y no con `<picture>`.** `<picture>` sólo sabe de
   `prefers-color-scheme`, y aquí el tema también lo puede fijar el conmutador
   escribiendo `data-theme` en el `<html>`. Con `<picture>` el botón de tema
   dejaría la ilustración en el color contrario.

   Son los TRES estados de siempre: sin `data-theme` manda el sistema; con
   `data-theme` manda el usuario. Por eso hay tres bloques y no uno.

   Sólo la que se ve por omisión lleva `alt`; la otra va `alt=""` y
   `aria-hidden`, para que un lector de pantalla no la describa dos veces. */
.pg-foto--dual img{display:none;}
.pg-foto--dual img[data-pg-tema="claro"]{display:block;}
@media (prefers-color-scheme:dark){
  html:not([data-theme="light"]) .pg-foto--dual img[data-pg-tema="claro"]{display:none;}
  html:not([data-theme="light"]) .pg-foto--dual img[data-pg-tema="oscuro"]{display:block;}
}
html[data-theme="dark"] .pg-foto--dual img[data-pg-tema="claro"]{display:none;}
html[data-theme="dark"] .pg-foto--dual img[data-pg-tema="oscuro"]{display:block;}
html[data-theme="light"] .pg-foto--dual img[data-pg-tema="claro"]{display:block;}
html[data-theme="light"] .pg-foto--dual img[data-pg-tema="oscuro"]{display:none;}

/* La ilustración ya trae su propio fondo, así que el velo dorado de `.pg-foto`
   sobra: se le sumaría a un dibujo que ya es dorado sobre el color de la casa. */
.pg-foto--dual::after{display:none;}

/* --------------------------------------------------------------------------
   37. TEXTO LEGAL
   El aviso de privacidad, y lo que venga de su especie.

   Un documento legal no se maqueta como una página de venta: no hay tarjetas,
   ni geometría, ni nada que compita con el texto. Lo único que importa es que
   se pueda LEER y que se pueda CITAR —por eso los apartados van numerados y
   con ancla propia—.

   **Medida de 72ch y no las 64 del resto del sitio.** Un aviso de privacidad se
   lee en diagonal buscando un apartado, no de corrido; una medida corta obliga
   a más saltos de línea y alarga la página sin que nadie lo agradezca.
   -------------------------------------------------------------------------- */
.pg-legal{max-width:72ch;}
.pg-legal h2{
  margin:clamp(38px,4.4vw,58px) 0 14px;
  font-size:clamp(19px,1.9vw,23px);font-weight:800;color:var(--pg-head);
  letter-spacing:-.015em;line-height:1.3;
  scroll-margin-top:calc(var(--header-height,80px) + 20px);
}
.pg-legal h2:first-child{margin-top:0;}
.pg-legal h3{
  margin:26px 0 10px;font-size:16px;font-weight:800;color:var(--pg-head);
  letter-spacing:-.01em;line-height:1.35;
}
.pg-legal p{margin:0 0 14px;font-size:15.5px;line-height:1.75;color:var(--pg-fg);}
.pg-legal ul,.pg-legal ol{margin:0 0 16px;padding-left:20px;}
.pg-legal li{
  margin-bottom:9px;font-size:15.5px;line-height:1.7;color:var(--pg-fg);
}
.pg-legal li::marker{color:var(--pg-accent);font-weight:800;}
.pg-legal b,.pg-legal strong{color:var(--pg-head);font-weight:800;}
.pg-legal a{color:var(--pg-accent);}

/* El número del apartado, en dorado y delante del titular. Es lo que permite
   decir «véase el punto 7» sin tener que copiar la frase entera. */
.pg-legal h2 .pg-legal__n{
  display:inline-block;margin-right:10px;color:var(--pg-accent);
  font-variant-numeric:tabular-nums;
}

/* El índice. Lo escribe el bloque a mano y no un plugin: Easy Table of Contents
   se retiró de las páginas en la v2.54 justo por meterse donde no le llamaban.
   Aquí sí hace falta —son once apartados— y por eso se pone explícito. */
.pg-legal__ind{
  margin:0 0 clamp(30px,3.4vw,44px);padding:clamp(20px,2.2vw,28px);
  background:var(--pg-surface);
  border:1px solid var(--pg-line);border-left:3px solid var(--pg-gold);
  border-radius:14px;
}
.pg-sec--alt .pg-legal__ind{background:var(--pg-bg);}
.pg-legal__ind ol{
  margin:0;padding-left:22px;
  columns:2;column-gap:clamp(20px,2.4vw,34px);
}
.pg-legal__ind li{margin-bottom:7px;font-size:14px;line-height:1.5;break-inside:avoid;}
.pg-legal__ind a{color:var(--pg-fg);text-decoration:none;}
@media (hover:hover) and (pointer:fine){
  .pg-legal__ind a:hover{color:var(--pg-accent);text-decoration:underline;}
}
@media (max-width:700px){
  .pg-legal__ind ol{columns:1;}
}
