/* CORPORATE Rise · components.css
   Componentes globales reutilizables. Usa exclusivamente tokens de tokens.css.
   No duplica tokens. Incluye el CSS por página (Home, sesión, El método).
   No depende de page-id. */

/* ===== Tipografia de marca ===== */
.cr-eyebrow {
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-verde);
}
/* v2 (decision Juanan 2026-07-10): eyebrows en VERDE de marca (antes gris), sin
   filete. Mismo Montserrat/tracking; el color de acento los convierte en senaletica
   propia. En oscuro, verde-hover (mas luminoso) por legibilidad. */
.cr-eyebrow--ondark { color: var(--cr-verde-hover); }

.cr-h1 {
  margin: 0;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-black);
  font-size: var(--cr-fs-h1);
  line-height: var(--cr-lh-tight);
  letter-spacing: var(--cr-track-h);
  text-transform: uppercase;
  color: var(--cr-petroleo);
}
.cr-h2 {
  margin: 0;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-x);
  font-size: var(--cr-fs-h2);
  line-height: var(--cr-lh-tight);
  letter-spacing: var(--cr-track-h);
  text-transform: uppercase;
  color: var(--cr-petroleo);
}
.cr-h1--ondark,
.cr-h2--ondark { color: var(--cr-blanco); }

.cr-lead {
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-regular);
  font-size: var(--cr-fs-body);
  line-height: var(--cr-lh-body);
  color: var(--cr-texto-cuerpo);
}
.cr-lead--ondark { color: var(--cr-teal-soft); }

/* ===== Ritmo editorial global (v5 · staging) =====
   En staging el titulo y su parrafo de apoyo quedaban demasiado pegados en varias
   paginas (el margen dependia de reglas por pagina o del UA/tema). Se fija aqui el
   ritmo canonico para TODAS las paginas, escritorio y movil. El !important es
   deliberado: vence a las reglas por pagina (.cr-xxx .cr-lead { margin-top })
   y a los resets de Gutenberg/Blocksy, garantizando coherencia total. */
:is(.cr-h1, .cr-h2) + .cr-lead { margin-top: var(--cr-gap-lead) !important; }
.cr-eyebrow + :is(.cr-h1, .cr-h2) { margin-top: var(--cr-gap-title) !important; }

/* ===== Acento verde + puntuacion heredada =====
   La puntuacion pegada se incluye DENTRO del span para heredar el verde.
   Ej: <span class="cr-accent">CAPACIDAD OPERATIVA.</span> */
.cr-accent { color: var(--cr-verde); }

/* ===== Seccion editorial ===== */
.cr-section { padding: var(--cr-sec-y) var(--cr-space-5); }
/* Sangre completa: vence el max-width que WordPress (is-layout-constrained)
   impone a los hijos directos de .entry-content. El fondo llega a ambos bordes;
   el contenido interno sigue limitado y centrado por .cr-section__inner. */
.cr-section {
  max-width: none;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
}
.cr-section__inner { max-width: var(--cr-maxw); margin-inline: auto; }
.cr-section--light { background: var(--cr-offwhite); color: var(--cr-petroleo); }
.cr-section--dark { background: var(--cr-petroleo); color: var(--cr-offwhite); }
.cr-section--deep { background: var(--cr-petroleo-deep); color: var(--cr-offwhite); }

/* Base de pagina off-white: evita las costuras blancas entre secciones (el fondo de
   pagina de Blocksy asomaba entre bloques). Las secciones --dark/--deep siguen
   contrastando; las --light se funden con la base sin costura. */
#main-container { background: var(--cr-offwhite); }

/* ===== Costura cierre Home: S7 (deep) a hueso con el footer (deep) =====
   El footer va FUERA de #main-container; entre la ultima seccion y el footer
   asomaba el espaciado inferior del area de contenido sobre la base off-white,
   leido como una franja clara entre dos zonas oscuras IDENTICAS (S7 y footer son
   ambos petroleo-deep). Anulamos ese espaciado inferior SOLO en la Home (paginas
   que contienen .cr-home-s7, via :has) para fundir el cierre en una sola zona
   oscura continua. Acotado: no afecta a otras paginas ni toca el footer.
   Preferente: hacerlo en el Customizer de Blocksy; esta regla es la red de
   seguridad por si queda residuo. */
/* v4 (2026-07-09): reforzada a la versión ROBUSTA (como la de la sesión). En staging
   asomaba una franja blanca antes del footer en TODAS las páginas con cierre profundo
   (Home, Cómo funciona, Para dirección, Quiénes somos, Sesión). Causa: el espaciado
   inferior lo aplica Blocksy en envoltorios que varían según versión (#main / article /
   .ct-container), no solo #main-container/.site-main, y ganaba por especificidad. Se
   anula en TODOS ellos, solo en páginas con .cr-home-s7, con !important. El footer queda
   fuera de estos contenedores: no se toca. */
/* v5 (staging 2026-07-10): CAUSA RAÍZ real de la franja, verificada en el DOM: el
   hueco eran 24px exactos = el margin-bottom que WordPress (block gap 1.5em) inyecta
   en el <main class="cr-..."> que pega la página. Ese <main> es hijo del article, así
   que las reglas de arriba (que anulaban article/entry-content/etc.) no lo alcanzaban.
   Fix: añadido main[class*="cr-"] a la lista -> su margen inferior queda a 0. */
body:has(.cr-home-s7) :is(
  #main-container, #main, .site-main,
  article:not([class*="cr-"]), main[class*="cr-"],
  .ct-container, .ct-container-full, .entry-content
) { padding-bottom: 0 !important; margin-bottom: 0 !important; }
body:has(.cr-home-s7) .entry-content > :last-child { margin-bottom: 0 !important; }
body:has(.cr-home-s7) .cr-home-s7 { margin-bottom: 0 !important; }

/* SESIÓN v3 · costura final ROBUSTA. El ultimo bloque profundo de la pagina es
   .cr-ses-form (el 07 se integro en el 06). La franja clara la causaba el
   espaciado INFERIOR del area de contenido que Blocksy aplica a algun envoltorio
   (segun version: #main / article / .ct-container, no solo .site-main) y que
   ademas gana por especificidad. Lo anulamos en TODOS esos envoltorios, SOLO en
   esta pagina (body:has) y con !important para vencer al tema. El footer queda
   FUERA de estos contenedores: no se toca. Resultado: Solicitud + footer = zona
   oscura continua, sin franja. */
body:has(.cr-ses-form) :is(
  #main-container, #main, .site-main,
  article:not([class*="cr-"]), main[class*="cr-"],
  .ct-container, .ct-container-full, .entry-content
) { padding-bottom: 0 !important; margin-bottom: 0 !important; }
body:has(.cr-ses-form) .cr-ses-form { margin-bottom: 0 !important; }

/* EL MÉTODO · misma costura. El último bloque profundo de /el-metodo/ es
   .cr-met-cierre. Mismo criterio que la sesión: funde cierre + footer en una
   zona oscura continua, sin franja clara. El footer queda fuera: no se toca. */
body:has(.cr-met-cierre) :is(
  #main-container, #main, .site-main,
  article:not([class*="cr-"]), main[class*="cr-"],
  .ct-container, .ct-container-full, .entry-content
) { padding-bottom: 0 !important; margin-bottom: 0 !important; }
body:has(.cr-met-cierre) .cr-met-cierre { margin-bottom: 0 !important; }

/* ===== Enlaces con hover verde ===== */
.cr-link {
  color: var(--cr-verde);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: color var(--cr-dur-fast) var(--cr-ease),
              border-color var(--cr-dur-fast) var(--cr-ease);
}
.cr-link:hover,
.cr-link:focus-visible { color: var(--cr-verde-hover); border-bottom-color: currentColor; }
.cr-link--ondark { color: var(--cr-teal-soft); }
.cr-link--ondark:hover,
.cr-link--ondark:focus-visible { color: var(--cr-verde-hover); }
/* Enlace de accion ligera (estilo Apple): "Ver el metodo >". La flecha avanza
   sutilmente en hover. Para acompanar al CTA primario sin ser un segundo boton. */
.cr-link--arrow::after {
  content: "\203A";                 /* > tipografico (single right angle quote) */
  margin-left: .35em;
  display: inline-block;
  transition: transform var(--cr-dur-fast) var(--cr-ease);
}
.cr-link--arrow:hover::after,
.cr-link--arrow:focus-visible::after { transform: translateX(2px); }

/* ===== CTA · sistema global (regla por fondo) =====
   Premium sobrio (estilo Apple), no comercial: forma pill, peso medium, padding
   contenido. Solo DOS variantes globales (--light / --dark); --compact para el header.
   --light: sobre fondo claro, boton petroleo solido; HOVER pasa a VERDE corporativo
     con texto off-white (refuerzo de marca, no comercial) + microelevacion.
   --dark: sobre fondo oscuro (petroleo profundo), boton GLASS (relleno translucido +
     hairline + blur), texto off-white; HOVER gana luminosidad + hairline verde sutil
     + microelevacion. No es boton verde solido ni blanco solido. */
.cr-cta {
  display: inline-block;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-medium);
  font-size: .9rem;
  letter-spacing: .01em;
  padding: 14px 30px;
  border: 1px solid transparent;        /* caja homogenea; --dark colorea el borde */
  border-radius: var(--cr-r-pill);
  text-decoration: none;
  cursor: pointer;
  transition: transform var(--cr-dur-fast) var(--cr-ease),
              background-color var(--cr-dur-fast) var(--cr-ease),
              border-color var(--cr-dur-fast) var(--cr-ease),
              color var(--cr-dur-fast) var(--cr-ease);
}
.cr-cta:hover,
.cr-cta:focus-visible { transform: translateY(-1px); }   /* microelevacion sutil */
.cr-cta:active { transform: scale(.985); }
/* Variante compacta (header): misma forma, menos volumen. */
.cr-cta--compact { padding: 10px 22px; font-size: .85rem; }

/* --light: petroleo solido -> hover VERDE corporativo. El color del texto se fija
   explicito en hover para vencer cualquier color de enlace global de Blocksy. */
.cr-cta--light { background: var(--cr-petroleo); color: var(--cr-blanco); }
.cr-cta--light:hover,
.cr-cta--light:focus-visible { background: var(--cr-verde); color: var(--cr-blanco); }

/* --dark: GLASS sobre petroleo profundo (relleno translucido + hairline + blur),
   texto off-white. Hover: mas luminosidad + hairline verde sutil. */
.cr-cta--dark {
  background: rgba(255, 255, 255, .10);
  color: var(--cr-offwhite);
  border-color: var(--cr-hair-dark);
  -webkit-backdrop-filter: blur(var(--cr-blur)) saturate(180%);
  backdrop-filter: blur(var(--cr-blur)) saturate(180%);
}
.cr-cta--dark:hover,
.cr-cta--dark:focus-visible {
  /* v2 (decision Juanan 2026-07-10): hover en VERDE CORPORATE solido + texto
     blanco, como los CTA claros. Coherencia total del sistema. */
  background: var(--cr-verde);
  border-color: var(--cr-verde);
  color: var(--cr-blanco);
}
/* Fallback sin backdrop-filter: relleno algo mas opaco para mantener legibilidad. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .cr-cta--dark { background: rgba(255, 255, 255, .16); }
}

/* ===== Nav (transparente arriba, glass al scroll, fallback opaco) =====
   Decision A: header construido con Blocksy Header Builder (menu movil nativo).
   Estos estilos son REFERENCIA: se portan al header real de Blocksy anadiendo la
   clase cr-nav a su elemento. No se usa markup propio. Ver README. */
/* Layout base SOLO para markup propio. Bajo Decision A (Blocksy-built) el header lo
   construye Blocksy y lleva .ct-header; el layout lo gobierna Blocksy. El :not(.ct-header)
   excluye estas reglas del header nativo para no romper su flex/sticky/padding. */
.cr-nav:not(.ct-header) {
  position: sticky;
  top: 0;
  z-index: var(--cr-z-nav);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--cr-space-4);
  padding: var(--cr-space-3) var(--cr-space-5);
  background: transparent;
}

/* ===== Glass del header · v3 "UN solo cristal" (staging 2026-07-10) =====
   CAUSA del corte al hacer scroll (Mac y moviles): habia DOS vidrios superpuestos
   activandose en momentos y geometrias distintas: este (.cr-nav.is-scrolled, sobre
   el header entero, via app.js) y otro sobre el envoltorio fijo de Blocksy
   ([data-sticky]::before). Al no medir lo mismo se veia una franja/corte.
   Ahora el vidrio vive SOLO aqui: un ::before del header (geometria = header
   entero) que entra y sale por OPACIDAD (el blur no es animable). Los fondos que
   Blocksy pinta en sus envoltorios sticky se anulan en el bloque data-sticky. */
.ct-header.cr-nav { position: relative; }
.cr-nav { isolation: isolate; }   /* stacking context: el z-index -1 queda DENTRO del header */
.cr-nav::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: var(--cr-glass-light);
  /* saturate(180%) = matiz "vidrio esmerilado" de Apple. */
  -webkit-backdrop-filter: blur(var(--cr-blur)) saturate(180%);
  backdrop-filter: blur(var(--cr-blur)) saturate(180%);
  box-shadow: 0 1px 0 var(--cr-hair-light);
  opacity: 0;
  transition: opacity var(--cr-dur) var(--cr-ease);
}
.cr-nav.is-scrolled::before { opacity: 1; }
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .cr-nav::before { background: var(--cr-offwhite); }
}

/* ===== Banda global (Decision A) =====
   El fondo de header y footer ocupa todo el ancho, pero su CONTENIDO (logo, menu,
   CTA, widgets) se centra en una banda premium alineada con el contenido de pagina.
   Esto desacopla la maqueta del "Ancho maximo del sitio" de Blocksy: el menu deja
   de estirarse en pantallas anchas aunque el sitio este configurado a 1900px.
   .ct-container es el contenedor interno real de Blocksy (verificado en el DOM). */
.ct-footer .ct-container {
  max-width: calc(var(--cr-maxw) + 2 * var(--cr-space-5));
  margin-inline: auto;
  /* Gutter propio: alinea logo/menu/CTA con el contenido (.cr-section padding)
     y evita que en tablet/movil el logo y la hamburguesa toquen el borde,
     ya que "Espaciado de bordes" esta a 0vw. */
  padding-inline: var(--cr-space-5);
}
/* Header v2 (staging 2026-07-10): a diferencia del footer, el contenido del header
   ocupa TODO el ancho (logo a la izquierda, menu+CTA a la derecha), con un gutter
   comodo. Pedido por direccion: menos "apelotonado" en pantallas anchas. */
.ct-header .ct-container {
  max-width: none;
  padding-inline: clamp(20px, 3vw, 48px);
}

/* ===== Header chrome v1 refinado (solo .ct-header; no footer, no secciones) =====
   Alineacion vertical de logo/menu/CTA en una misma banda, altura comoda y sticky
   limpio cuando estas logueado. */
.ct-header [data-row="middle"] > .ct-container {
  align-items: center;
  /* v2: header mas FINO (antes 12px). La altura de fila se baja ademas en el
     Customizer (Header Builder > fila principal ~60px); esto compacta el resto. */
  padding-block: 6px;
}
.ct-header .site-logo-container {
  display: inline-flex;
  align-items: center;
}

/* ===== Logo de cabecera animado · "Rise se eleva" =====
   Mismo lockup y misma animacion que tenia el hero de la Home (retirado de alli
   para no duplicar). Se pega como elemento "HTML" en el Header Builder de Blocksy
   sustituyendo al elemento Logo (archivo: FASE B WORDPRESS/header-logo_wp.html).
   El bloque es un <a> con aspect-ratio: nunca se parte en dos lineas. */
/* v3 (2026-07-11) · geometria DETERMINISTA (fix Safari/iOS): con height:auto en los
   SVG, Safari calculaba la altura distinto que Chrome y el Rise quedaba corto y
   "flotando" separado de CORPORATE (visto en footer iPhone/iPad; misma estructura
   aqui). Ahora las cajas de los dos SVG llevan ancho Y alto explicitos en %,
   calculados de sus viewBox reales (corp 1900.83x241.08 en x1868.77 y1101.46;
   rise 371.12x203.04 en x3768.24 y1023.49; union 2270.59x319.05). La caja tiene
   exactamente la proporcion de su SVG -> preserveAspectRatio no recorta ni deja
   aire. Identico en todos los navegadores. */
.cr-header-logo {
  position: relative;
  display: block;
  flex: 0 0 auto;
  width: clamp(150px, 13vw, 190px);   /* v2: mas pequeno (pedido staging 2026-07-10) */
  aspect-ratio: 2271 / 319;
}
.cr-header-logo span { position: absolute; display: block; }
.cr-header-logo .hl-corp { left: 0; top: 24.44%; width: 83.72%; height: 75.56%; }
.cr-header-logo .hl-rise { left: 83.65%; top: 0; width: 16.34%; height: 63.64%; }
.cr-header-logo svg { width: 100%; height: 100%; display: block; }
@media (prefers-reduced-motion: no-preference) {
  .cr-header-logo .hl-corp { opacity: 0; animation: cr-hl-corp 1s var(--cr-ease) .15s forwards; }
  .cr-header-logo .hl-rise { opacity: 0; animation: cr-hl-rise 1.5s var(--cr-ease) 1.2s forwards; }
}
@keyframes cr-hl-corp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes cr-hl-rise { 0% { opacity: 0; transform: translateY(13px); } 55% { opacity: 1; } 100% { opacity: 1; transform: translateY(0); } }
/* ===== Header glass al fijar (estilo Apple) — sobre el sticky nativo de Blocksy =====
   Config Blocksy (Customizer > Cabecera > Cabecera global):
     - "Funcionalidad de efecto fijo" = ON  (sticky por position:fixed, inmune al
       overflow:clip de #main-container; por eso solo asi se queda fijo).
     - "Funcionalidad de transparencia" = ON (header transparente sobre el Hero arriba).
     - "Efecto" = Por defecto (sin shrink, sin salto).
   Blocksy, al fijar el header, cambia el atributo data-sticky del contenedor fijo:
   su valor pasa a contener "yes" (estado pegado). Le INYECTAMOS ahi el glass que
   Blocksy no aplica por si solo (con transparencia ON quedaba 100% transparente).
   Arriba (sin "yes") no aplica -> transparente. Al fijar -> glass translucido + blur. */
/* v4 (staging 2026-07-10): CAUSA RAÍZ del "header transparente al bajar / dos
   menús". Con el efecto "shrink" activo, Blocksy NO fija #header.cr-nav: monta un
   CLON fijo aparte (<div data-sticky>) sin clase, y #header.cr-nav (que lleva el
   cristal en su ::before) se va con el scroll (medido a -7105px, fuera de pantalla).
   El clon quedaba 100% transparente -> el título del hero se veía a través.
   Verificado en el DOM real de staging. Solución: el MISMO cristal en el elemento
   que de verdad se queda pegado. Blocksy pone data-sticky="yes:..." SOLO cuando
   está fijado -> arriba (sin "yes") transparente sobre el hero; al bajar, glass. */
[data-sticky] { background: transparent !important; }
[data-sticky] [data-row] { background: transparent !important; }
[data-sticky] [data-row] > .ct-container { background: transparent !important; }
[data-sticky*="yes"] { isolation: isolate; }
[data-sticky*="yes"]::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: var(--cr-glass-light);
  -webkit-backdrop-filter: blur(var(--cr-blur)) saturate(180%);
  backdrop-filter: blur(var(--cr-blur)) saturate(180%);
  box-shadow: 0 1px 0 var(--cr-hair-light);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  [data-sticky*="yes"]::before { background: var(--cr-offwhite); }
}

/* ===== Menú móvil (panel "Fuera del lienzo" de Blocksy) · cristal oscuro =====
   v5 DEFINITIVO (staging 2026-07-10). CAUSA RAÍZ de los "bloques/franjas": el panel
   off-canvas de Blocksy NO es una sola caja, son varias anidadas y cada una pintaba
   distinto:
     · #offcanvas .ct-panel            -> contenedor a pantalla completa
       · .ct-panel-inner               -> la CAJA visible que se desliza (derecha)
         · .ct-panel-actions           -> barra superior con el botón cerrar (X)  <-- la "subfranja" clara
         · .ct-panel-content(-inner)   -> el cuerpo con el menú
     · .ct-panel-overlay / .ct-overlay -> el VELO (izquierda)
   Antes el frost caía solo en algunas -> cada trozo un tono -> franjas.
   SOLUCIÓN: UN único cristal (tinte + blur) en la CAJA (.ct-panel-inner) y en el
   VELO, con el MISMO valor; y TODO lo de dentro (barra del cierre y cuerpo)
   TRANSPARENTE y sin blur para que no apile un segundo tono. Resultado: una sola
   lámina de cristal uniforme, sin franjas ni cuadrados.
   Tinte controlado aquí (no en el Customizer) para no depender de qué sub-elemento
   colorea Blocksy. En el Customizer, "Fondo del panel" (las 2 capas, los 3
   dispositivos) debe quedar TRANSPARENTE para no sumar un segundo tinte. */

/* La CAJA visible + el VELO = el ÚNICO cristal, mismo valor -> sin costura. */
#offcanvas .ct-panel-inner,
.ct-panel-inner,
.ct-header-panel .ct-panel-inner,
.ct-panel-overlay,
.ct-overlay {
  background: var(--cr-glass-dark) !important;
  -webkit-backdrop-filter: blur(var(--cr-blur)) saturate(180%);
  backdrop-filter: blur(var(--cr-blur)) saturate(180%);
}
/* TODO lo de dentro de la caja: transparente y sin blur propio (hereda el cristal
   de .ct-panel-inner). Esto MATA la franja superior del botón cerrar y cualquier
   segundo tono. NO afecta al botón CTA (.cr-mobile-cta), que se estiliza aparte. */
#offcanvas .ct-panel-actions,
.ct-panel-actions,
#offcanvas .ct-panel-content,
.ct-panel-content,
#offcanvas .ct-panel-content-inner,
.ct-panel-content-inner,
.ct-header-panel .ct-panel-content {
  background: transparent !important;
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}
/* Sin backdrop-filter (navegadores viejos): caja y velo sólidos para legibilidad. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .ct-panel-inner, .ct-panel-overlay, .ct-overlay { background: var(--cr-petroleo-deep) !important; }
}

/* CTA "Solicitar sesión estratégica" DENTRO del panel móvil: en escritorio es un
   botón (no un ítem de menú); en el menú móvil viaja como enlace más dentro del
   mismo WP Menu y perdía esa jerarquía. Se destaca como el resto de CTAs sobre
   petróleo (mismo glass que .cr-cta--dark, reutilizado, no duplicado a mano).
   REQUIERE 1 paso en WordPress: Apariencia > Menús > editar el ítem "Solicitar
   sesión estratégica" del menú móvil > "Clases CSS (opcional)" (activar en
   Opciones de pantalla si no se ve) > escribir: cr-mobile-cta
   WordPress añade esa clase al <li>; el selector de abajo apunta al <a> interno. */
.ct-panel li.cr-mobile-cta,
.ct-panel-content li.cr-mobile-cta {
  margin-top: var(--cr-space-3);
  padding-top: var(--cr-space-3);
  border-top: 1px solid var(--cr-hair-dark);
}
.ct-panel li.cr-mobile-cta > a,
.ct-panel-content li.cr-mobile-cta > a {
  display: inline-block;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-medium) !important;
  font-size: .9rem;
  letter-spacing: .01em;
  padding: 14px 30px;
  border: 1px solid var(--cr-hair-dark);
  border-radius: var(--cr-r-pill);
  background: rgba(255, 255, 255, .10);
  color: var(--cr-offwhite) !important;
  -webkit-backdrop-filter: blur(var(--cr-blur)) saturate(180%);
  backdrop-filter: blur(var(--cr-blur)) saturate(180%);
  transition: background-color var(--cr-dur-fast) var(--cr-ease),
              border-color var(--cr-dur-fast) var(--cr-ease);
}
.ct-panel li.cr-mobile-cta > a:hover,
.ct-panel li.cr-mobile-cta > a:focus-visible,
.ct-panel-content li.cr-mobile-cta > a:hover,
.ct-panel-content li.cr-mobile-cta > a:focus-visible {
  background: rgba(255, 255, 255, .18);
  border-color: var(--cr-verde);
}

/* CTA REAL del panel móvil (v6, 2026-07-11): en staging el botón del panel no es un
   ítem de menú (cr-mobile-cta, arriba) sino el elemento CTA del Header Builder
   (.ct-header-cta .ct-button), que Blocksy pinta en petróleo #003B46: invisible
   sobre el cristal petróleo del panel. GHOST blanco (decisión Juanan 2026-07-11):
   borde fino blanco + texto blanco, relleno verde al pulsar (coherente con el CTA
   del footer sobre fondo oscuro). */
#offcanvas .ct-header-cta .ct-button {
  background: transparent !important;
  border: 1px solid rgba(255, 255, 255, .55) !important;
  color: var(--cr-blanco) !important;
}
#offcanvas .ct-header-cta .ct-button:hover,
#offcanvas .ct-header-cta .ct-button:focus-visible {
  background: var(--cr-verde) !important;
  border-color: var(--cr-verde) !important;
  color: var(--cr-blanco) !important;
}

/* Iconos sociales del panel móvil (v6, 2026-07-11): Blocksy los coloreaba en
   petróleo sobre el cristal oscuro (casi invisibles, detectado en revisión).
   Blanco suave + verde al tocar. Los SVG de Blocksy usan fill: currentColor. */
#offcanvas .ct-social-box a {
  color: var(--cr-offwhite) !important;
  fill: currentColor;
}
#offcanvas .ct-social-box a:hover,
#offcanvas .ct-social-box a:focus-visible { color: var(--cr-verde-hover) !important; }

.cr-nav__menu { display: flex; align-items: center; gap: var(--cr-space-4); }
.cr-nav__menu a {
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-medium);
  font-size: .9rem;
  color: var(--cr-petroleo);
  text-decoration: none;
  transition: color var(--cr-dur-fast) var(--cr-ease);
}
.cr-nav__menu a:hover { color: var(--cr-verde); }

/* ===== Fix menú sticky (2026-07-15) =====
   Blocksy, al hacer scroll (sticky activo, [data-sticky*="yes"]), pinta TODOS los
   enlaces del menú con var(--theme-palette-color-2) (verde), y deja de distinguirse
   en qué página estás. En reposo (arriba) Blocksy ya lo hace bien (actual verde,
   resto petróleo); esto solo corrige el estado STICKY: por defecto petróleo y SOLO
   la página actual en verde. !important para ganar a la regla generada por Blocksy. */
[data-sticky*="yes"] [data-id="menu"] > ul > li > a { color: var(--cr-petroleo) !important; }
[data-sticky*="yes"] [data-id="menu"] > ul > li.current-menu-item > a,
[data-sticky*="yes"] [data-id="menu"] > ul > li.current_page_item > a,
[data-sticky*="yes"] [data-id="menu"] > ul > li.current-menu-ancestor > a { color: var(--cr-verde) !important; }
[data-sticky*="yes"] [data-id="menu"] > ul > li > a:hover,
[data-sticky*="yes"] [data-id="menu"] > ul > li > a:focus-visible { color: var(--cr-verde) !important; }

/* ===== Tarjetas (familia homogenea) ===== */
.cr-card {
  background: var(--cr-blanco);
  border: 1px solid var(--cr-hair-light);
  border-radius: var(--cr-r-lg);
  padding: var(--cr-space-4);
  transition: scale var(--cr-dur) var(--cr-ease);
}
/* Hover unificado estilo Apple (2026-07-11): SOLO escala sutil. Va en la propiedad
   individual 'scale' (no en 'transform') para componerse con el transform de entrada
   de reveal/stagger sin pisarse. Sin elevacion, sin sombra, sin borde. Gated a
   punteros con hover: en tactil no queda hover "pegado". --cr-card-hover-scale=1.015
   (=1 en reduced-motion, ya en tokens.css). */
@media (hover: hover) and (pointer: fine) {
  .cr-card:hover { scale: var(--cr-card-hover-scale); }
}
.cr-card--ondark { background: var(--cr-petroleo-600); border-color: var(--cr-hair-dark); }

/* ===== Badge (Hallmarks: capa avanzada opcional) ===== */
.cr-badge {
  display: inline-block;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: .625rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--cr-verde);
  border: 1px solid var(--cr-verde);
  border-radius: var(--cr-r-pill);
  padding: 4px 12px;
}

/* ===== Banda de posicionamiento ===== */
.cr-band {
  background: var(--cr-petroleo);
  color: var(--cr-offwhite);
  padding: var(--cr-space-6) var(--cr-space-5);
  text-align: center;
}

/* ===== Mapa vertical + cursor unico de lectura ===== */
.cr-map { position: relative; max-width: 720px; margin: 0 auto; padding-left: var(--cr-space-6); }
.cr-map__spine { position: absolute; left: 14px; top: 0; bottom: 0; width: 1px; background: var(--cr-hair-dark); }
.cr-map__cursor {
  position: absolute;
  left: 9px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--cr-verde);
  transform: translateY(-50%);
  /* El movimiento del cursor lo suaviza el lerp de app.js (rAF). Sin transition en
     top para no duplicar la animacion ni introducir lag. */
  z-index: var(--cr-z-cursor);
}
.cr-map__card { margin: var(--cr-space-4) 0; transition: opacity var(--cr-dur) var(--cr-ease); }
/* v2 (staging 2026-07-10): al pasar las tarjetas derivadas de fondo transparente a
   solido (ronda 1), quedo a la vista que el padding base de .cr-card (24px) era
   escaso para una caja visible: el contenido tocaba los bordes. Aire generoso,
   escritorio y movil. */
.cr-map__card { padding: clamp(28px, 3.4vw, 42px); }
.cr-map__card.is-dim { opacity: .45; }
.cr-map__card.is-active { opacity: 1; }

/* ===== Slots visuales (placeholder; no bloquea publicar; sin stock) ===== */
.cr-slot {
  border: 1.5px dashed var(--cr-verde);
  border-radius: var(--cr-r-md);
  background: var(--cr-tint-verde);
  padding: var(--cr-space-4);
  text-align: center;
  color: var(--cr-petroleo-600);
}
.cr-slot--portrait { border-color: var(--cr-petroleo); background: var(--cr-tint-petroleo); }
.cr-slot__label {
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: .625rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--cr-petroleo-600);
}

/* ===== Footer =====
   Decision A: footer construido con Blocksy Footer Builder. Estos estilos son
   REFERENCIA: se portan al footer real anadiendo la clase cr-footer a su contenedor.
   Ver README. */
.cr-footer {
  background: var(--cr-petroleo-deep);
  color: var(--cr-teal-soft);
  padding: var(--cr-space-7) var(--cr-space-5) var(--cr-space-4);
}
.cr-footer__inner { max-width: var(--cr-maxw); margin: 0 auto; }
.cr-footer__bar {
  margin-top: var(--cr-space-6);
  border-top: 1px solid var(--cr-hair-dark);
  padding-top: var(--cr-space-3);
  display: flex;
  flex-wrap: wrap;
  gap: var(--cr-space-2) var(--cr-space-4);
  justify-content: space-between;
  align-items: center;
}
.cr-footer a { color: var(--cr-teal-soft); text-decoration: none; transition: color var(--cr-dur-fast) var(--cr-ease); }
.cr-footer a:hover,
.cr-footer a:focus-visible { color: var(--cr-verde-hover); }
/* EXCEPCION (2026-07-10): los BOTONES del footer no son enlaces de lista; en hover
   el fondo se pone verde y el texto debe ser BLANCO (la regla de arriba ganaba por
   especificidad y lo dejaba verde sobre verde: invisible). */
.cr-footer a.cr-cta:hover,
.cr-footer a.cr-cta:focus-visible { color: var(--cr-blanco); }

/* ===== Reveal (entrada) ===== */
.cr-reveal {
  opacity: 0;
  transform: translateY(20px);          /* recorrido editorial (era 16px) */
  transition: opacity var(--cr-dur-slow) var(--cr-ease),
              transform var(--cr-dur-slow) var(--cr-ease);
}
.cr-reveal.is-visible { opacity: 1; transform: none; }

/* Imagenes con fundido al cargar: evita el "pop" del retrato que llega despues de
   que la tarjeta ya se ha revelado (fotos remotas). app.js (initImgFade) anade
   .is-loaded al cargar; si el JS no corre, el <noscript> de cada pagina las deja
   visibles. Fundido suave estilo Apple. */
img.cr-fx-img { opacity: 0; transition: opacity var(--cr-dur-slow) var(--cr-ease); }
img.cr-fx-img.is-loaded { opacity: 1; }
@media (prefers-reduced-motion: reduce) { img.cr-fx-img { opacity: 1; transition: none; } }

/* ===== Motion · microcapa reutilizable (stagger + hover) =====
   .cr-stagger: contenedor que al entrar en viewport (app.js le anade .is-visible via
   initReveals) revela sus hijos directos en secuencia (fade + subida) con delay
   incremental por nth-child. El contenedor solo orquesta, no se mueve. Maximo 3-5
   hijos. El paso lo da --cr-stagger-step (0ms en reduced-motion -> sin retardo). */
.cr-stagger > * {
  opacity: 0;
  transform: translateY(20px);          /* recorrido editorial unificado con cr-reveal (era 14px) */
  transition: opacity var(--cr-dur-slow) var(--cr-ease),
              transform var(--cr-dur-slow) var(--cr-ease);
}
.cr-stagger.is-visible > * { opacity: 1; transform: none; transition-delay: var(--cr-stagger-delay, 0ms); }
.cr-stagger.is-visible > *:nth-child(2) { transition-delay: calc(var(--cr-stagger-delay, 0ms) + var(--cr-stagger-step) * 1); }
.cr-stagger.is-visible > *:nth-child(3) { transition-delay: calc(var(--cr-stagger-delay, 0ms) + var(--cr-stagger-step) * 2); }
.cr-stagger.is-visible > *:nth-child(4) { transition-delay: calc(var(--cr-stagger-delay, 0ms) + var(--cr-stagger-step) * 3); }
.cr-stagger.is-visible > *:nth-child(5) { transition-delay: calc(var(--cr-stagger-delay, 0ms) + var(--cr-stagger-step) * 4); }
/* Tarjetas: el hover debe reaccionar inmediato al cursor. La entrada del grupo
   (opacity + transform con desfase por indice) hacia que el hover heredara ese
   transition-delay y una duracion lenta (320ms); aqui se acota sin tocar .cr-map__card. */
.cr-card:not(.cr-map__card) {
  /* Entrada: opacity+transform LENTOS y a la par (antes transform iba rapido y la
     subida se adelantaba al fundido). Hover: 'scale' (dur) + sombra (fast). El
     transition-delay:0 de :hover mas abajo garantiza la respuesta inmediata. */
  transition: opacity var(--cr-dur-slow) var(--cr-ease),
              transform var(--cr-dur-slow) var(--cr-ease),
              scale var(--cr-dur) var(--cr-ease),
              box-shadow var(--cr-dur-fast) var(--cr-ease);
}
.cr-stagger.is-visible > .cr-card:not(.cr-map__card) { transition-delay: 0s; }
/* Hover inmediato universal: ninguna caja hereda el transition-delay del stagger al pasar el
   cursor (elimina el desfase percibido). Solo afecta al :hover; no toca posicion ni apilamiento. */
.cr-stagger.is-visible > *:hover { transition-delay: 0s; }
/* --cr-stagger-delay (default 0): desfase base del grupo, util para que un grupo
   entre despues de otro (p. ej. S5: resultados tras el argumento). */

/* Hover sutil reutilizable: microdesplazamiento via 'translate' (propiedad
   independiente de 'transform', para componerse con las entradas reveal/stagger sin
   conflicto). Solo puntero fino (sin hover tactil raro en movil). */
@media (hover: hover) and (pointer: fine) {
  .cr-hover-rise { transition: translate var(--cr-dur-fast) var(--cr-ease); }
  .cr-hover-rise:hover { translate: 2px 0; }
}

/* ===== Reduced motion: estados finales ===== */
@media (prefers-reduced-motion: reduce) {
  .cr-reveal { opacity: 1; transform: none; transition: none; }
  .cr-stagger > * { opacity: 1; transform: none; transition: none; }
  .cr-map__cursor { transition: none; }
  .cr-card:hover { scale: none; }   /* hover ahora en 'scale' (--cr-card-hover-scale ya vale 1 aqui) */
}

/* ===== CTA del header (Blocksy Header Builder) =====
   Estructura real de Blocksy: <div class="ct-header-cta"><a class="ct-button">.
   Selector acotado al CTA del header; NO afecta a botones cr-* de paginas internas
   ni a otros .ct-button fuera del header. */
.ct-header-cta .ct-button {
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  letter-spacing: .01em;
  background: var(--cr-petroleo) !important;
  color: var(--cr-blanco) !important;
  border: 0 !important;
  border-radius: var(--cr-r-pill) !important;
  padding: 11px 24px !important;
  box-shadow: none !important;
  transition: background-color var(--cr-dur-fast) var(--cr-ease),
              transform var(--cr-dur-fast) var(--cr-ease);
}
.ct-header-cta .ct-button:hover,
.ct-header-cta .ct-button:focus-visible {
  /* v2 (decision Juanan 2026-07-10): hover verde CORPORATE + texto blanco. */
  background: var(--cr-verde) !important;
  border-color: var(--cr-verde) !important;
  color: var(--cr-blanco) !important;
}
.ct-header-cta .ct-button:active { transform: scale(.985); }

/* ===== Hover inmediato en CTAs (entrada Y salida) =====
   Los CTA dentro de bloques .cr-stagger heredaban transition-delay/duración lenta
   de la entrada orquestada: el hover (y sobre todo el des-hover) respondia tarde.
   Se redefine la transicion con las propiedades de interaccion SIEMPRE rapidas y
   la opacidad (entrada) lenta, sin delay. Mismo patron que el fix B6 de CF. */
.cr-stagger .cr-cta,
.cr-reveal .cr-cta,
.cr-home-s7__inner .cr-cta {
  transition: transform var(--cr-dur-fast) var(--cr-ease),
              translate var(--cr-dur-fast) var(--cr-ease),
              background-color var(--cr-dur-fast) var(--cr-ease),
              border-color var(--cr-dur-fast) var(--cr-ease),
              color var(--cr-dur-fast) var(--cr-ease),
              opacity var(--cr-dur-slow) var(--cr-ease);
  transition-delay: 0s;
}

/* ===== Footer · ajuste movil (acotado a .cr-footer; desktop intacto) =====
   Solo afecta al footer (clase cr-footer del footer de Blocksy). No toca header
   ni botones cr-* de paginas internas. */
@media (max-width: 640px) {
  .cr-footer .cr-cta { padding: 9px 18px; font-size: .8rem; }
  .cr-footer p { margin: 0 0 10px; }
  .cr-footer .cr-lead { font-size: .9rem; }
  /* Compacta el footer en movil: menos padding arriba (64->48) y lateral (32->24). */
  .cr-footer { padding-block: var(--cr-space-6) var(--cr-space-4); padding-inline: var(--cr-space-4); }
}

/* ===== Home · Hero (cr-home-hero) · acotado al Hero de la Home ===== */
.cr-home-hero { padding-block: clamp(72px, 12vw, 140px); }
.cr-home-hero__rule {
  width: 40px; height: 2px; background: var(--cr-verde);
  margin-bottom: var(--cr-space-4);
}
.cr-home-hero .cr-h1 { max-width: 760px; }
.cr-home-hero .cr-lead {
  max-width: 600px; margin-top: var(--cr-space-4);
  font-size: var(--cr-fs-h3); line-height: 1.6;
}
.cr-home-hero__actions {
  margin-top: var(--cr-space-5);
  display: flex; align-items: center; gap: var(--cr-space-4);
  flex-wrap: wrap;
}

/* ===== Home · S2 · El problema invisible (cr-home-s2) · acotado a la S2 =====
   Reutiliza cr-section--dark + tipografia --ondark + cr-accent. Solo aporta ritmo
   propio y el claim de cierre centrado. No afecta a Hero, S3, header ni footer. */
.cr-home-s2 { padding-block: clamp(64px, 10vw, 120px); }
.cr-home-s2 .cr-h2 { max-width: 720px; margin-top: var(--cr-space-3); }
.cr-home-s2 .cr-lead {
  max-width: 640px; margin-top: var(--cr-space-4);
  font-size: var(--cr-fs-h3); line-height: 1.7;
}
.cr-home-s2__claim {
  margin-top: clamp(40px, 6vw, 72px);
  max-width: 760px; margin-inline: auto;
  text-align: center;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-x);
  font-size: clamp(1.4rem, 2.8vw, 1.9rem);
  line-height: var(--cr-lh-tight);
  letter-spacing: var(--cr-track-h);
  color: var(--cr-blanco);
}

/* ===== Home · S3 · Que es CORPORATE Rise (cr-home-s3) · acotado a la S3 =====
   Vuelta a seccion clara. Reutiliza cr-section--light + tipografia + cr-link. Aporta
   ritmo, parrafo de diferenciacion secundario y triada de micro-pilares subordinada
   (sin cajas; filete verde superior). No afecta a Hero, S2, S4, header ni footer. */
.cr-home-s3 { padding-block: clamp(64px, 10vw, 120px); }
.cr-home-s3 .cr-h2 { max-width: 760px; margin-top: var(--cr-space-3); }
.cr-home-s3 .cr-lead {
  max-width: 660px; margin-top: var(--cr-space-4);
  font-size: var(--cr-fs-h3); line-height: 1.7;
}
/* Diferenciacion: parrafo secundario, un punto mas tenue que la definicion. */
.cr-home-s3__diff {
  max-width: 660px; margin-top: var(--cr-space-3);
  font-size: var(--cr-fs-body); line-height: var(--cr-lh-body);
  color: var(--cr-texto-2);
}
/* Micro-pilares: triada subordinada, sin cajas. 3 columnas desktop / 1 movil. */
.cr-home-s3__pillars {
  margin-top: clamp(36px, 5vw, 64px);
  display: grid; gap: var(--cr-space-5);
  grid-template-columns: repeat(3, 1fr);
}
.cr-home-s3__pillar {
  padding-top: var(--cr-space-3);
  border-top: 2px solid var(--cr-verde);
}
.cr-home-s3__pillar-label {
  display: block;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-petroleo);
  margin-bottom: var(--cr-space-2);
}
.cr-home-s3__pillar p {
  margin: 0;
  font-size: var(--cr-fs-body); line-height: var(--cr-lh-body);
  color: var(--cr-texto-cuerpo);
}
.cr-home-s3__link { margin-top: clamp(32px, 4vw, 48px); }
@media (max-width: 720px) {
  .cr-home-s3__pillars { grid-template-columns: 1fr; gap: var(--cr-space-4); }
}

/* ===== Home · S4 · El metodo / mapa del sistema (cr-home-s4) · acotado a S4 =====
   Reutiliza el mapa ya existente: .cr-map + .cr-map__spine + .cr-map__cursor +
   .cr-map__card (cursor unico gobernado por app.js initMapCursor) y .cr-card--ondark
   como superficie. Aporta: ritmo de seccion, etiqueta de fase, nombre y el modificador
   --soft de las salidas derivadas. Columna estrecha centrada (.cr-map ya es max 720).
   No afecta a otras secciones. */
.cr-home-s4 { padding-block: clamp(64px, 10vw, 120px); }
.cr-home-s4 .cr-lead { max-width: 660px; margin-top: var(--cr-space-4); }
.cr-home-s4 .cr-map { margin-top: clamp(36px, 5vw, 64px); }

/* Contenido de cada tarjeta: fase -> nombre -> descriptor. */
.cr-map__stage {
  display: block;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-teal-muted);
  margin-bottom: var(--cr-space-2);
}
.cr-map__name {
  display: block;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-x);
  font-size: var(--cr-fs-h3);
  letter-spacing: var(--cr-track-h);
  color: var(--cr-blanco);
  margin-bottom: var(--cr-space-2);
}
.cr-map__card p {
  margin: 0;
  font-size: var(--cr-fs-body);
  line-height: var(--cr-lh-body);
  color: var(--cr-teal-soft);
}
.cr-map__card .cr-badge { margin-bottom: var(--cr-space-3); }

/* Salidas derivadas mas ligeras (Isfe, FunctionalMap, Isfe final): superficie sin
   relleno (mantiene el hairline de cr-card--ondark) y nombre de menor peso. Quedan
   subordinadas a Scan/Program/Hallmarks sin romper la familia. */
.cr-map__card--soft { background: transparent; }
.cr-map__card--soft .cr-map__name {
  font-size: var(--cr-fs-body);
  font-weight: var(--cr-fw-bold);
  color: var(--cr-teal-soft);
}

.cr-home-s4__link { margin-top: clamp(32px, 4vw, 48px); }

/* ===== Pilares · componente reutilizable (cr-pillars / cr-pillar) =====
   Triada subordinada: filete verde superior + label + frase. Mismo patron visual
   validado en S3 (que conserva sus clases propias cr-home-s3__*; NO se toca),
   generalizado para reutilizar en S5 y siguientes. 3 columnas desktop / 1 movil. */
.cr-pillars {
  margin-top: clamp(36px, 5vw, 64px);
  display: grid; gap: var(--cr-space-5);
  grid-template-columns: repeat(3, 1fr);
}
.cr-pillar { padding-top: var(--cr-space-3); border-top: 2px solid var(--cr-verde); }
.cr-pillar__label {
  display: block;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-petroleo);
  margin-bottom: var(--cr-space-2);
}
.cr-pillar p {
  margin: 0;
  font-size: var(--cr-fs-body); line-height: var(--cr-lh-body);
  color: var(--cr-texto-cuerpo);
}
@media (max-width: 720px) {
  .cr-pillars { grid-template-columns: 1fr; gap: var(--cr-space-4); }
}

/* ===== Pilares · variante vertical (cr-pillars--stack) =====
   Lista apilada con filete a la IZQUIERDA (en vez de 3 columnas con filete superior).
   Diferencia visualmente S5 de S3 y sirve como panel de resultados. Reutilizable. */
.cr-pillars--stack { display: block; margin-top: 0; }
.cr-pillars--stack .cr-pillar {
  border-top: 0;
  border-left: 2px solid var(--cr-verde);
  padding: 0 0 0 var(--cr-space-4);
  /* Longhands (no shorthand) para NO pisar el transition-delay del stagger:
     entrada (opacity/transform) lenta; hover (translate/filete) rapida. */
  transition-property: opacity, transform, translate, border-left-color;
  transition-duration: var(--cr-dur-slow), var(--cr-dur-slow), var(--cr-dur-fast), var(--cr-dur-fast);
  transition-timing-function: var(--cr-ease);
}
.cr-pillars--stack .cr-pillar + .cr-pillar { margin-top: var(--cr-space-5); }
@media (hover: hover) and (pointer: fine) {
  /* Hover: filete que se intensifica (el desplazamiento de 2px lo da cr-hover-rise via
     translate). transition-delay 0 para que el hover no herede el desfase del stagger. */
  .cr-pillars--stack .cr-pillar:hover {
    border-left-color: var(--cr-verde-hover);
    transition-delay: 0s;
  }
}

/* ===== Home · S5 · Para empresas y liderazgo (cr-home-s5) · acotado a S5 =====
   Variante diferenciada de S3: SPLIT asimetrico 55/45. Izquierda = argumento
   (eyebrow + H2 + lead); derecha = resultados verticales (cr-pillars--stack). Fondo
   off-white. Editorial: sin imagen; el grid deja preparada la columna derecha para
   incorporar una foto real arriba de los resultados sin rehacer el contenido.
   Movimiento: izquierda entra primero (cr-reveal), resultados despues en stagger. */
.cr-home-s5 { padding-block: clamp(64px, 10vw, 120px); }
.cr-home-s5__grid {
  display: grid;
  grid-template-columns: 55fr 45fr;
  gap: clamp(32px, 6vw, 80px);
  /* center: equilibra verticalmente el panel de resultados (mas corto) respecto al
     bloque argumental izquierdo. En movil (1 columna) no afecta al apilado. */
  align-items: center;
}
.cr-home-s5 .cr-h2 { margin-top: var(--cr-space-3); }
.cr-home-s5 .cr-lead {
  margin-top: var(--cr-space-4);
  font-size: var(--cr-fs-h3); line-height: 1.7;
}
/* Desfase de capa: los resultados (derecha) entran ~170ms despues que el argumento.
   Se inyecta como variable del grupo; el formulado del stagger ya la suma al paso. */
.cr-home-s5__results { --cr-stagger-delay: 170ms; }

/* Movil: el split se apila (argumento y debajo resultados). */
@media (max-width: 860px) {
  .cr-home-s5__grid { grid-template-columns: 1fr; gap: var(--cr-space-6); }
}

/* ===== Personas · componente reutilizable (cr-people / cr-person) =====
   Fila de perfiles editoriales (retrato + nombre + rol + texto). Reutilizable
   fuera de la Home (p. ej. una futura pagina "Equipo"). El retrato vive en un
   marco 4:5 (cr-person__media) que HOY contiene un monograma de iniciales y
   MANANA puede contener <img class="cr-person__img"> sin tocar la estructura:
   el monograma se elimina y se inserta la imagen, mismo marco y proporcion.
   El marco no es un placeholder vacio: lleva tinte de marca, hairline interior
   y una marca verde deliberada, para leerse como recurso intencional. */
.cr-people {
  margin-top: clamp(40px, 6vw, 72px);
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: clamp(32px, 5vw, 64px);
}
.cr-person__media {
  position: relative;
  aspect-ratio: 4 / 5;
  max-width: 360px;            /* mantiene el retrato editorial, no gigante */
  border-radius: var(--cr-r-md);
  overflow: hidden;
  background: var(--cr-tint-petroleo);
  box-shadow: inset 0 0 0 1px var(--cr-hair-light);
  display: flex;
  align-items: center;
  justify-content: center;
}
/* Foto real (futuro): sustituye al monograma sin rehacer la seccion. */
.cr-person__img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cr-person__monogram {
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-x);
  font-size: clamp(2.4rem, 6vw, 3.4rem);
  letter-spacing: .08em;
  line-height: 1;
  color: var(--cr-petroleo);
  text-align: center;
}
/* Marca verde deliberada bajo las iniciales: senal de marca, no hueco vacio. */
.cr-person__monogram::after {
  content: "";
  display: block;
  width: 28px; height: 2px;
  margin: var(--cr-space-2) auto 0;
  background: var(--cr-verde);
}
.cr-person__name {
  margin-top: var(--cr-space-4);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-x);
  font-size: var(--cr-fs-h3);
  line-height: var(--cr-lh-tight);
  letter-spacing: var(--cr-track-h);
  text-transform: uppercase;
  color: var(--cr-petroleo);
}
/* Rol: SIN uppercase para preservar "CORPORATE Rise" (CEO/COO ya van en mayuscula
   en el texto). Tono institucional sobrio (texto-2), no comercial. */
.cr-person__role {
  margin-top: 4px;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-small);
  letter-spacing: .04em;
  color: var(--cr-texto-2);
}
.cr-person__text {
  margin-top: var(--cr-space-3);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-regular);
  font-size: var(--cr-fs-body);
  line-height: var(--cr-lh-body);
  color: var(--cr-texto-cuerpo);
}

/* Hover (v2 · 2026-07-14): comportamiento Apple del sistema (escala sutil), igual que
   Scan/Program. Antes era "sin desplazamiento" (requisito antiguo de S6); Juanan pide
   unificar con el resto de tarjetas. Se mantiene el realce del hairline del retrato.
   scale como propiedad individual: no pisa el transform de entrada (cr-reveal/stagger). */
/* Entrada (reveal/stagger): la tarjeta transiciona opacity+transform (antes solo
   'scale' pisaba esa transicion y la entrada saltaba de golpe). El hover NO escala
   toda la tarjeta: escala solo el marco de la FOTO, para que el texto de debajo
   quede quieto (peticion Juanan). El marco escala como bloque (sin recorte/zoom
   de la imagen dentro). */
.cr-person { transition: opacity var(--cr-dur-slow) var(--cr-ease),
                         transform var(--cr-dur-slow) var(--cr-ease); }
.cr-person__media { transition: box-shadow var(--cr-dur) var(--cr-ease),
                                scale var(--cr-dur) var(--cr-ease); }
@media (hover: hover) and (pointer: fine) {
  .cr-person:hover .cr-person__media {
    scale: var(--cr-card-hover-scale);
    box-shadow: inset 0 0 0 1px rgba(0, 59, 70, .28);
  }
}

/* Movil: los perfiles se apilan. */
@media (max-width: 860px) {
  .cr-people { grid-template-columns: 1fr; gap: var(--cr-space-6); }
}

/* ===== Home · S6 · El equipo (cr-home-s6) · acotado a S6 =====
   Vuelta a seccion clara, diferenciada de S3 (3 pilares full-width) y S5 (split
   55/45): intro CENTRADA + fila de dos perfiles (cr-people). Hairline superior
   full-bleed que marca el corte respecto a S5 (tambien clara). Acento verde en
   "SISTEMA." del H2, manteniendo el hilo verde de la Home.
   Movimiento: la intro entra primero (cr-reveal); los perfiles despues en
   stagger suave (cr-people es .cr-stagger con desfase de grupo). */
.cr-home-s6 {
  padding-block: clamp(64px, 10vw, 120px);
  border-top: 1px solid var(--cr-hair-light);   /* hairline superior (full-bleed) */
}
.cr-home-s6__intro {
  max-width: 720px;
  margin-inline: auto;
  text-align: center;
}
.cr-home-s6 .cr-h2 { margin-top: var(--cr-space-3); }
.cr-home-s6 .cr-lead { margin-top: var(--cr-space-4); }
/* Desfase de capa: los perfiles entran ~120ms despues que la intro. */
.cr-home-s6 .cr-people { --cr-stagger-delay: 120ms; }

/* ===== Home · S7 · Cierre / CTA (cr-home-s7) · acotado a S7 =====
   Cierre tipografico CENTRADO sobre fondo petroleo profundo (cr-section--deep):
   nota grave y definitiva tras S5/S6 (claras), separa el cuerpo del footer.
   Una sola accion (sin CTA secundaria). Acento verde en "DECIDIENDO." del H2.
   Movimiento: el bloque entra en stagger suave (eyebrow > H2 > parrafo > CTA >
   microcopy). La CTA usa su propio hover (cr-cta--dark); NO lleva hover-rise para
   no desplazarse en horizontal estando centrada. Reusa la microcapa existente. */
.cr-home-s7 { padding-block: clamp(80px, 12vw, 140px); }
.cr-home-s7__inner {
  max-width: 640px;
  margin-inline: auto;
  text-align: center;
}
.cr-home-s7 .cr-h2 { margin-top: var(--cr-space-3); }
.cr-home-s7 .cr-lead { margin-top: var(--cr-space-4); }
.cr-home-s7 .cr-cta { margin-top: var(--cr-space-6); }
.cr-home-s7__micro {
  margin-top: var(--cr-space-4);
  font-family: var(--cr-font);
  font-size: var(--cr-fs-small);
  letter-spacing: .04em;
  color: var(--cr-teal-muted);
}

/* ===== Footer · layout editorial asimetrico (APPEND · no modifica el footer base) =====
   Reutiliza el footer base ya validado (.cr-footer fondo deep + padding, .cr-footer__inner
   ancho, .cr-footer__bar barra inferior con hairline). Esto solo añade la rejilla
   asimetrica: bloque de marca ancho + dos columnas estrechas (navegacion / contacto).
   Cierre firme y silencioso: SIN movimiento. Funde con S7 via la costura :has ya existente. */
.cr-footer__grid {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;     /* marca ancha + 2 columnas estrechas */
  gap: var(--cr-space-6);
  align-items: start;
}
/* min-width:0 evita que un hijo (CTA, texto largo) ensanche su columna y desborde. */
.cr-footer__brand,
.cr-footer__col { min-width: 0; }
/* Bloque de marca como UNIDAD: logo -> tagline -> CTA con ritmo uniforme y alineado
   arriba (comparte línea superior con NAVEGAR/CONTACTO). Evita el logo "suelto". */
.cr-footer__brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;     /* desktop: izquierda; en móvil pasa a center */
  gap: var(--cr-space-4);
}
/* Bloque de marca */
.cr-footer__lockup {
  margin: 0;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-x);
  font-size: var(--cr-fs-h3);
  letter-spacing: var(--cr-track-h);
  text-transform: uppercase;
  color: var(--cr-blanco);
}
.cr-footer__tagline {
  margin: 0;                  /* el ritmo lo da el gap del bloque de marca (flex) */
  max-width: 42ch;
  font-family: var(--cr-font);
  font-size: var(--cr-fs-body);
  line-height: var(--cr-lh-body);
  color: var(--cr-teal-soft);
}
/* Columnas (navegacion / contacto) */
.cr-footer__col-title {
  margin: 0 0 var(--cr-space-3);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-teal-muted);
}
.cr-footer__list { list-style: none; margin: 0; padding: 0; }
.cr-footer__list li + li { margin-top: var(--cr-space-2); }
.cr-footer__list a { font-size: .9rem; }   /* color/hover lo da .cr-footer a */
/* Contacto pendiente: texto, NO enlace (evita destinos muertos hasta tener datos). */
.cr-footer__pending { font-size: .9rem; color: var(--cr-teal-muted); }
/* Barra inferior: copyright + legales (la barra y el hairline ya existen en .cr-footer__bar) */
.cr-footer__copy { margin: 0; font-size: var(--cr-fs-small); color: var(--cr-teal-muted); overflow-wrap: anywhere; }
/* iPhone: "Todos los derechos reservados." baja entero a su propia linea. */
@media (max-width: 560px) { .cr-footer__rights { display: block; } }
.cr-footer__legal { margin: 0; font-size: var(--cr-fs-small); overflow-wrap: anywhere; }
.cr-footer__legal a { color: var(--cr-teal-muted); }   /* hover verde heredado de .cr-footer a:hover */

/* Logo oficial (SVG blanco) en el bloque de marca. Ancho acotado para que no domine;
   height auto mantiene la proporcion del lockup (~6.7:1). clamp lo adapta a movil. */
/* Alineacion a la IZQUIERDA en todo el footer y en todos los anchos. Vence dos
   comportamientos de Blocksy: imagenes de widget centradas (margin:0 auto) y columnas
   del footer centradas en movil (text-align:center). Por eso se usa .cr-footer como
   ancestro (mas especificidad). */
.cr-footer .cr-footer__inner,
.cr-footer .cr-footer__inner * { text-align: left; }
/* Logo del footer v2 (staging 2026-07-10): mas pequeno y sutil (antes 220-300px),
   y con la MISMA animacion "Rise se eleva" del header, disparada al ENTRAR el
   footer en viewport (el wrapper lleva cr-reveal; app.js le pone is-visible).
   El wrapper fija ancho y proporcion (aspect-ratio del lockup); dentro van DOS
   SVG blancos posicionados (hl-corp / hl-rise), igual que en el header. Se anula
   el fade generico del reveal porque aqui animan los dos SVG por separado. */
/* v3 (2026-07-11) · geometria DETERMINISTA (fix Safari/iOS): height:auto hacia que
   Safari calculara el alto de los SVG distinto que Chrome y el Rise quedara corto y
   "flotando" separado de CORPORATE (visto por Juanan en iPhone/iPad). Cajas con
   ancho Y alto explicitos en %, derivados de los viewBox reales (ver nota completa
   en .cr-header-logo, misma geometria). */
.cr-footer .cr-footer__logo {
  position: relative;
  width: clamp(150px, 14vw, 176px);
  aspect-ratio: 2271 / 319;
  max-width: 100%;                     /* nunca desborda en pantallas estrechas */
  margin: 0 0 var(--cr-space-4);       /* pegado a la izquierda + separacion controlada */
}
.cr-footer .cr-footer__logo.cr-reveal { opacity: 1 !important; transform: none !important; transition: none; }
.cr-footer .cr-footer__logo span { position: absolute; display: block; }
.cr-footer .cr-footer__logo .hl-corp { left: 0; top: 24.44%; width: 83.72%; height: 75.56%; }
.cr-footer .cr-footer__logo .hl-rise { left: 83.65%; top: 0; width: 16.34%; height: 63.64%; }
.cr-footer .cr-footer__logo svg {
  display: block;
  width: 100%;
  height: 100%;
  margin: 0;                           /* sin margenes heredados */
}
@media (prefers-reduced-motion: no-preference) {
  .cr-footer .cr-footer__logo.cr-reveal .hl-corp,
  .cr-footer .cr-footer__logo.cr-reveal .hl-rise { opacity: 0; }
  .cr-footer .cr-footer__logo.cr-reveal.is-visible .hl-corp { animation: cr-hl-corp 1s var(--cr-ease) .1s forwards; }
  .cr-footer .cr-footer__logo.cr-reveal.is-visible .hl-rise { animation: cr-hl-rise 1.5s var(--cr-ease) 1.05s forwards; }
}

/* ===== Anti-overflow (movil/iPad): nada se sale del viewport ===== */
.cr-footer,
.cr-footer * { box-sizing: border-box; }
.cr-footer .cr-footer__inner { width: 100%; max-width: var(--cr-maxw); }
/* min-width:0 en hijos de grid/flex evita que su contenido ensanche y desborde. */
.cr-footer__copy,
.cr-footer__legal { min-width: 0; }

/* Responsive: marca a ancho completo + 2 columnas; luego apilado. */
@media (max-width: 880px) {
  .cr-footer__grid { grid-template-columns: 1fr 1fr; gap: var(--cr-space-5); }
  .cr-footer__brand { grid-column: 1 / -1; }
}
@media (max-width: 560px) {
  /* Cierre apilado y alineado a la IZQUIERDA en movil. */
  .cr-footer__inner { text-align: left; }
  .cr-footer__grid { grid-template-columns: 1fr; gap: var(--cr-space-5); }
  .cr-footer__brand { align-items: flex-start; }            /* logo, tagline y CTA a la izquierda */
  .cr-footer__tagline { margin-inline: 0; max-width: 100%; }
  /* .cr-footer + .cr-footer__logo = especificidad (0,2,0) para ganar a la regla de
     desktop y dejar el logo contenido en movil, no protagonista. */
  .cr-footer .cr-footer__logo { width: clamp(140px, 44vw, 168px); }
  .cr-footer__bar  {
    margin-top: var(--cr-space-5);          /* compacta (48 -> 32) */
    flex-direction: column;                 /* copyright arriba, legales debajo */
    align-items: flex-start;                /* alineado a la izquierda */
    gap: var(--cr-space-2);
  }
}

/* ==========================================================================
   SESIÓN ESTRATÉGICA · /sesion-estrategica/
   APPEND-ONLY · Reutiliza tokens, cr-section, cr-eyebrow, cr-h1/h2, cr-lead,
   cr-pillars, cr-cta y la microcapa de movimiento. No modifica Home, footer
   ni header. Costura 06/07 -> footer: ver la regla :has(.cr-ses-cierre) en el
   bloque "Costura S7/footer" de la cabecera de este archivo.
   ========================================================================== */

/* ----- 01 · Cabecera ----- */
.cr-ses-hero .cr-h1 { max-width: 760px; }
.cr-ses-hero .cr-lead { margin-top: var(--cr-space-4); max-width: 640px; }
.cr-ses-micro {
  margin: var(--cr-space-3) 0 0;
  font-family: var(--cr-font);
  font-size: var(--cr-fs-small);
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--cr-texto-2);
}

/* ----- Split reutilizable (02 qué es / 05 para quién) ----- */
.cr-ses-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--cr-space-6);
  margin-top: var(--cr-space-5);
}
.cr-ses-split__col { min-width: 0; }
.cr-ses-split__title {
  margin: 0 0 var(--cr-space-2);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-texto-2);
}
.cr-ses-split p { margin: 0; font-size: var(--cr-fs-body); line-height: var(--cr-lh-body); color: var(--cr-texto-cuerpo); }
.cr-ses-list { margin: 0; padding: 0; list-style: none; font-size: var(--cr-fs-body); line-height: var(--cr-lh-body); color: var(--cr-texto-cuerpo); }
.cr-ses-list li { position: relative; padding-left: 1.2em; }
.cr-ses-list li + li { margin-top: var(--cr-space-2); }
.cr-ses-list li::before {
  content: ""; position: absolute; left: 0; top: .62em;
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--cr-verde);
}
.cr-ses-split__col--no .cr-ses-list li::before { background: var(--cr-hair-light); }

/* ----- 04 · Pasos (cómo funciona) ----- */
.cr-ses-steps {
  margin: var(--cr-space-5) 0 0;
  padding: 0; list-style: none;
  display: grid; gap: var(--cr-space-4);
}
.cr-ses-step { display: flex; gap: var(--cr-space-4); align-items: baseline; }
.cr-ses-step__num {
  flex: 0 0 auto; min-width: 2.5ch;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-small);
  letter-spacing: .1em;
  color: var(--cr-verde);
}
.cr-ses-step__body { min-width: 0; }
.cr-ses-step__title {
  margin: 0 0 4px;
  font-size: var(--cr-fs-body); font-weight: 600;
  color: var(--cr-petroleo);
}
.cr-ses-step__text { margin: 0; font-size: var(--cr-fs-body); line-height: var(--cr-lh-body); color: var(--cr-texto-cuerpo); }

/* ----- 06 · Formulario (sobre fondo profundo) ----- */
.cr-ses-form .cr-h2 { margin-top: var(--cr-space-3); }
.cr-ses-form .cr-lead { margin-top: var(--cr-space-4); max-width: 560px; }
.cr-form { width: 100%; max-width: 640px; margin-top: var(--cr-space-6); }
.cr-form__grid {
  display: grid; grid-template-columns: 1fr 1fr;
  gap: var(--cr-space-4);
}
.cr-form__field { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.cr-form__field--full { grid-column: 1 / -1; }
.cr-form__label {
  font-family: var(--cr-font);
  font-size: var(--cr-fs-small);
  letter-spacing: .02em;
  color: var(--cr-teal-soft);
}
.cr-form__req { color: var(--cr-verde); }
.cr-form__opt { color: var(--cr-teal-muted); }
.cr-form__input {
  width: 100%; padding: 12px 14px;
  font: inherit; font-size: .95rem;
  color: var(--cr-offwhite);
  background: rgba(255, 255, 255, .06);
  border: 1px solid var(--cr-hair-dark);
  border-radius: var(--cr-r-md);
  transition: border-color var(--cr-dur-fast) var(--cr-ease),
              background-color var(--cr-dur-fast) var(--cr-ease);
}
.cr-form__input::placeholder { color: var(--cr-teal-muted); }
.cr-form__input:focus-visible {
  outline: none;
  border-color: var(--cr-verde);
  background: rgba(255, 255, 255, .10);
}
.cr-form__textarea { resize: vertical; min-height: 120px; }
.cr-form__select {
  appearance: none; -webkit-appearance: none;
  padding-right: 40px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%239FC4C9' stroke-width='1.5'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 14px center;
}
.cr-form__select option { color: #10262B; } /* legibilidad del desplegable nativo */
.cr-form__actions {
  margin-top: var(--cr-space-5);
  display: flex; flex-direction: column; align-items: flex-start;
  gap: var(--cr-space-3);
}
.cr-form__note {
  margin: 0;
  font-family: var(--cr-font);
  font-size: var(--cr-fs-small);
  letter-spacing: .04em;
  color: var(--cr-teal-muted);
}

/* ----- 07 · Cierre profundo (funde con el footer vía costura :has) ----- */
.cr-ses-cierre { padding-block: var(--cr-space-6); }
.cr-ses-cierre__text {
  margin: 0; max-width: 60ch;
  font-size: var(--cr-fs-small);
  color: var(--cr-teal-muted);
}

/* ----- Responsive ----- */
@media (max-width: 640px) {
  .cr-ses-split { grid-template-columns: 1fr; gap: var(--cr-space-4); }
  .cr-form__grid { grid-template-columns: 1fr; }
}

/* ==========================================================================
   SESIÓN ESTRATÉGICA · v2 (dirección de arte) · APPEND-ONLY
   Eleva la página sin tocar el sistema global: Hero a 2 columnas + módulo de
   sistema, doble tarjeta editorial (qué es/no es), timeline conectada (cómo
   funciona, coherente con el Hero) y formulario en caja glass confidencial.
   Reutiliza tokens y la microcapa de movimiento. No toca Home/footer/header.
   ========================================================================== */

/* ----- 01 · Hero a dos columnas + módulo de sistema ----- */
.cr-ses-hero__grid {
  display: grid;
  grid-template-columns: 1.5fr 1fr;
  gap: clamp(32px, 5vw, 64px);
  align-items: center;
}
.cr-ses-hero__main { min-width: 0; }

.cr-ses-system {
  min-width: 0;
  background: var(--cr-tint-petroleo);
  border: 1px solid var(--cr-hair-light);
  border-radius: var(--cr-r-md);
  padding: clamp(20px, 2.4vw, 28px);
}
.cr-ses-system__title {
  margin: 0 0 var(--cr-space-4);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-teal-muted);
}
.cr-ses-system__flow { list-style: none; margin: 0; padding: 0; }
.cr-ses-system__node {
  position: relative;
  display: grid;
  grid-template-columns: 28px 1fr;
  gap: var(--cr-space-3);
  align-items: start;
  padding-bottom: var(--cr-space-4);
}
.cr-ses-system__node::before {
  content: "";
  position: absolute;
  left: 13px; top: 28px; bottom: 0;
  width: 1px; background: var(--cr-hair-light);
}
.cr-ses-system__node--end { padding-bottom: 0; }
.cr-ses-system__node--end::before { display: none; }
.cr-ses-system__num {
  position: relative; z-index: 1;
  width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
  border: 1.5px solid var(--cr-petroleo);
  border-radius: 50%;
  background: var(--cr-offwhite);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: .72rem;
  color: var(--cr-petroleo);
}
.cr-ses-system__node--end .cr-ses-system__num {
  background: var(--cr-verde);
  border-color: var(--cr-verde);
  color: var(--cr-blanco);
}
.cr-ses-system__label {
  padding-top: 5px;
  font-size: var(--cr-fs-body);
  font-weight: var(--cr-fw-medium);
  color: var(--cr-petroleo);
}

/* ----- 02 · Doble tarjeta editorial (qué es / qué no es) ----- */
.cr-ses-cards {
  margin-top: var(--cr-space-5);
  display: grid; grid-template-columns: 1fr 1fr; gap: var(--cr-space-4);
}
.cr-ses-card {
  min-width: 0;
  border-radius: var(--cr-r-md);
  padding: clamp(20px, 2.4vw, 28px);
}
.cr-ses-card--yes {
  background: var(--cr-tint-petroleo);
  border: 1px solid var(--cr-hair-light);
  border-left: 3px solid var(--cr-verde);
}
.cr-ses-card--no {
  background: transparent;
  border: 1px solid var(--cr-hair-light);
}
.cr-ses-card__title {
  margin: 0 0 var(--cr-space-2);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-petroleo);
}
.cr-ses-card--no .cr-ses-card__title { color: var(--cr-texto-2); }
.cr-ses-card p { margin: 0; font-size: var(--cr-fs-body); line-height: var(--cr-lh-body); color: var(--cr-texto-cuerpo); }
.cr-ses-card--no p { color: var(--cr-texto-2); }

/* ----- 04 · Timeline conectada (cómo funciona) · coherente con el Hero -----
   Reescala el cr-ses-steps base: nodos circulares + línea conectora; último nodo
   en verde (igual que el módulo del Hero). Cascada: estas reglas van DESPUÉS de
   las de v1, así que prevalecen sin reescribir el bloque anterior. */
.cr-ses-steps { position: relative; gap: 0; }
.cr-ses-step {
  position: relative;
  gap: var(--cr-space-4);
  align-items: flex-start;
  padding-bottom: var(--cr-space-5);
}
.cr-ses-step:last-child { padding-bottom: 0; }
.cr-ses-step::before {
  content: "";
  position: absolute;
  left: 13px; top: 28px; bottom: 0;
  width: 1px; background: var(--cr-hair-light);
}
.cr-ses-step:last-child::before { display: none; }
.cr-ses-step__num {
  flex: 0 0 auto;
  width: 28px; min-width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
  border: 1.5px solid var(--cr-petroleo);
  border-radius: 50%;
  background: var(--cr-offwhite);
  color: var(--cr-petroleo);
  font-size: .72rem;
  letter-spacing: 0;
}
.cr-ses-step:last-child .cr-ses-step__num {
  background: var(--cr-verde);
  border-color: var(--cr-verde);
  color: var(--cr-blanco);
}

/* ----- 06 · Formulario en caja glass confidencial ----- */
.cr-ses-formwrap {
  margin-top: var(--cr-space-6);
  max-width: 560px;
  background: rgba(255, 255, 255, .04);
  border: 1px solid var(--cr-hair-dark);
  border-radius: var(--cr-r-lg);
  padding: clamp(24px, 3vw, 36px);
  -webkit-backdrop-filter: blur(var(--cr-blur)) saturate(160%);
  backdrop-filter: blur(var(--cr-blur)) saturate(160%);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .cr-ses-formwrap { background: rgba(255, 255, 255, .07); }
}
.cr-ses-formwrap__head {
  display: flex; align-items: center; gap: 8px;
  margin: 0 0 var(--cr-space-5);
  padding-bottom: var(--cr-space-3);
  border-bottom: 1px solid var(--cr-hair-dark);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-teal-soft);
}
.cr-ses-formwrap__icon { display: inline-flex; color: var(--cr-teal-soft); }
.cr-ses-formwrap__icon svg { display: block; }
.cr-ses-formwrap .cr-form { max-width: 100%; margin-top: 0; }

/* ----- Responsive v2 ----- */
@media (max-width: 820px) {
  .cr-ses-hero__grid { grid-template-columns: 1fr; gap: var(--cr-space-6); }
}
@media (max-width: 640px) {
  .cr-ses-cards { grid-template-columns: 1fr; }
}

/* ==========================================================================
   SESIÓN ESTRATÉGICA · v3 · Bloque Solicitud a dos columnas · APPEND-ONLY
   El bloque 06 pasa a layout 45/55: izquierda texto estratégico + microcopy +
   mini notas; derecha la caja glass del formulario. El antiguo bloque 07 se
   integra aquí (microcopy de confidencialidad) y deja de existir como sección.
   En móvil vuelve a una columna (texto arriba, formulario debajo).
   ========================================================================== */
.cr-ses-form__layout {
  margin-top: var(--cr-space-6);
  display: grid;
  grid-template-columns: 45fr 55fr;
  gap: clamp(32px, 5vw, 64px);
  align-items: start;
}
.cr-ses-form__intro { min-width: 0; }
.cr-ses-form__layout .cr-ses-formwrap { margin-top: 0; max-width: 100%; }

.cr-ses-form__micro {
  margin: var(--cr-space-4) 0 0;
  font-family: var(--cr-font);
  font-size: var(--cr-fs-small);
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--cr-teal-soft);
}
.cr-ses-form__notes {
  margin: var(--cr-space-4) 0 0;
  padding: 0; list-style: none;
  display: flex; flex-direction: column; gap: var(--cr-space-2);
}
.cr-ses-form__notes li {
  position: relative;
  padding-left: 1.2em;
  font-size: var(--cr-fs-small);
  color: var(--cr-teal-muted);
}
.cr-ses-form__notes li::before {
  content: "";
  position: absolute; left: 0; top: .5em;
  width: 5px; height: 5px; border-radius: 50%;
  background: var(--cr-verde);
}

@media (max-width: 820px) {
  .cr-ses-form__layout { grid-template-columns: 1fr; gap: var(--cr-space-5); }
}

/* ==========================================================================
   EL MÉTODO · /el-metodo/ · APPEND-ONLY
   Página que explica el método como ARQUITECTURA del sistema (no dashboard, no
   SaaS, no infografía). Hereda: documento System™ "La arquitectura de un sistema"
   (bloque 02) + documento oscuro "Cómo funciona el sistema, paso a paso" (bloque
   03) + "una métrica que orienta, no etiqueta" (bloque 04, reutiliza cr-ses-cards).
   Reutiliza tokens, cr-section/--light/--deep, tipografía, cr-cta, cr-reveal/
   cr-stagger. Sin gauges, sin %, sin KPIs. Cero JS nuevo. Costura de cierre:
   ver regla :has(.cr-met-cierre) en el bloque "Costura cierre Home" de cabecera.
   ========================================================================== */

/* ----- 01 · Hero editorial ----- */
.cr-met-hero__inner { max-width: 880px; }
.cr-met-hero .cr-h1 { margin-top: var(--cr-space-3); }
.cr-met-hero .cr-lead { margin-top: var(--cr-space-4); max-width: 62ch; }
.cr-met-hero__rotulo {
  margin: var(--cr-space-5) 0 0;
  font-family: var(--cr-font);
  font-size: var(--cr-fs-small);
  font-weight: var(--cr-fw-medium);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--cr-texto-2);
}

/* ----- 02 · Arquitectura del sistema (pieza central) ----- */
.cr-met-arq .cr-h2,
.cr-met-arq .cr-lead { margin-top: var(--cr-space-3); }
.cr-met-arq .cr-lead { max-width: 64ch; }

.cr-met-arch {
  margin-top: var(--cr-space-6);
  max-width: 760px;
  display: flex;
  flex-direction: column;
}

/* Capa base */
.cr-met-node {
  border: 1px solid var(--cr-hair-light);
  border-radius: var(--cr-r-lg);
  background: var(--cr-blanco);
  padding: clamp(22px, 2.8vw, 34px);
  text-align: center;
}
.cr-met-node__eyebrow {
  margin: 0 0 var(--cr-space-2);
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-verde);
}
.cr-met-node__title {
  margin: 0;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-x);
  font-size: var(--cr-fs-h3);
  line-height: var(--cr-lh-tight);
  color: var(--cr-petroleo);
}
.cr-met-node__desc {
  margin: var(--cr-space-2) 0 0;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-medium);
  font-size: var(--cr-fs-body);
  color: var(--cr-petroleo);
}
.cr-met-node__text {
  margin: var(--cr-space-2) 0 0;
  font-size: var(--cr-fs-body);
  line-height: var(--cr-lh-body);
  color: var(--cr-texto-cuerpo);
}

/* Origen: Scan™ (capa madre, algo más de presencia) */
.cr-met-node--origin { border-color: rgba(0, 59, 70, .2); }

/* Hallmarks™: capa OPCIONAL subordinada DENTRO del Scan™ (nunca caja hermana) */
.cr-met-sub {
  margin-top: var(--cr-space-4);
  padding-top: var(--cr-space-4);
  border-top: 1px solid var(--cr-hair-light);
}
.cr-met-sub__title {
  margin: 0;
  display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap;
  justify-content: center;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-small);
  color: var(--cr-texto-cuerpo);
}
.cr-met-sub__tag {
  font-size: var(--cr-fs-eyebrow);
  font-weight: var(--cr-fw-bold);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-texto-2);
  border: 1px solid var(--cr-hair-light);
  border-radius: var(--cr-r-pill);
  padding: 2px 10px;
}
.cr-met-sub__text {
  margin: 8px 0 0;
  font-size: var(--cr-fs-small);
  line-height: var(--cr-lh-body);
  color: var(--cr-texto-2);
}

/* Conector sobrio entre capas (línea fina + rótulo opcional) */
.cr-met-link {
  position: relative;
  display: flex; justify-content: center; align-items: center;
  min-height: 56px;
}
.cr-met-link::before {
  content: "";
  position: absolute; left: 50%; top: 0; bottom: 0;
  width: 1px; background: var(--cr-hair-light);
}
.cr-met-link span {
  position: relative;
  background: var(--cr-offwhite);
  padding: 4px 14px;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-texto-2);
}
.cr-met-link--plain { min-height: 40px; }

/* Salidas derivadas: Isfe™ inicial + FunctionalMap™ (módulos hermanos) */
.cr-met-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--cr-space-4);
}

/* Intervención: Program™ (peso visual fuerte, no consecuencia menor) */
.cr-met-node--program {
  background: var(--cr-tint-petroleo);
  border-color: rgba(0, 59, 70, .2);
  border-top: 3px solid var(--cr-verde);
}
.cr-met-node--program .cr-met-node__title { font-size: calc(var(--cr-fs-h3) + .15rem); }

/* Remedición: nuevo Isfe™ */
.cr-met-node--remed .cr-met-node__eyebrow {
  display: inline-flex; align-items: center; gap: 8px; justify-content: center;
}

.cr-met-foot {
  margin: var(--cr-space-5) auto 0;
  max-width: 760px;
  text-align: center;
  font-family: var(--cr-font);
  font-size: var(--cr-fs-small);
  color: var(--cr-texto-2);
}

/* Rombo abstracto (guiño Isfe™, sin datos). Compartido 02 / 05. */
.cr-met-rombo {
  display: inline-block;
  width: 12px; height: 12px;
  transform: rotate(45deg);
}
.cr-met-rombo--line { border: 1.5px solid var(--cr-verde); background: transparent; }
.cr-met-rombo--fill { background: var(--cr-verde); }

/* ----- 03 · Cómo avanza (proceso en el tiempo, fondo profundo) ----- */
.cr-met-avanza .cr-h2,
.cr-met-avanza .cr-lead { margin-top: var(--cr-space-3); }
.cr-met-avanza .cr-lead { max-width: 64ch; }

.cr-met-flow {
  margin-top: var(--cr-space-6);
  max-width: 720px;
}
.cr-met-phase {
  position: relative;
  display: flex;
  gap: var(--cr-space-4);
  align-items: flex-start;
  padding-bottom: var(--cr-space-6);
}
.cr-met-phase:last-child { padding-bottom: 0; }
.cr-met-phase::before {
  content: "";
  position: absolute;
  left: 13px; top: 28px; bottom: 0;
  width: 1px; background: var(--cr-hair-dark);
}
.cr-met-phase:last-child::before { display: none; }
.cr-met-phase__num {
  flex: 0 0 auto;
  width: 28px; min-width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
  border: 1.5px solid var(--cr-teal-muted);
  border-radius: 50%;
  background: var(--cr-petroleo-deep);
  color: var(--cr-teal-soft);
  font-size: .72rem;
}
.cr-met-phase:last-child .cr-met-phase__num {
  background: var(--cr-verde);
  border-color: var(--cr-verde);
  color: var(--cr-blanco);
}
.cr-met-phase__body { min-width: 0; padding-top: 2px; }
.cr-met-phase__title {
  margin: 0;
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-x);
  font-size: var(--cr-fs-h3);
  line-height: var(--cr-lh-tight);
  text-transform: uppercase;
  color: var(--cr-blanco);
}
.cr-met-phase__text {
  margin: 8px 0 0;
  font-size: var(--cr-fs-body);
  line-height: var(--cr-lh-body);
  color: var(--cr-teal-soft);
}

/* ----- 04 · Qué protege ----- */
.cr-met-protege .cr-h2,
.cr-met-protege .cr-lead { margin-top: var(--cr-space-3); }
.cr-met-protege .cr-lead { max-width: 60ch; }

/* ----- 05 · Cierre + CTA (último bloque profundo, funde con footer) ----- */
.cr-met-cierre { text-align: center; }
.cr-met-cierre__inner { max-width: 760px; margin-inline: auto; }
.cr-met-cierre .cr-h2 { margin-top: var(--cr-space-3); }
.cr-met-cierre .cr-lead { margin: var(--cr-space-5) auto 0; }
.cr-met-cierre .cr-cta { margin-top: var(--cr-space-5); }

.cr-met-evol {
  margin: var(--cr-space-6) auto 0;
  display: flex; align-items: center; justify-content: center;
  gap: clamp(16px, 4vw, 40px);
  flex-wrap: wrap;
}
.cr-met-evol__item { display: inline-flex; align-items: center; gap: 10px; }
.cr-met-evol__label {
  font-family: var(--cr-font);
  font-size: var(--cr-fs-small);
  font-weight: var(--cr-fw-medium);
  color: var(--cr-teal-soft);
}
.cr-met-evol__sep {
  font-family: var(--cr-font);
  font-size: var(--cr-fs-eyebrow);
  letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase;
  color: var(--cr-verde);
}

/* ----- Responsive El método ----- */
@media (max-width: 640px) {
  .cr-met-split { grid-template-columns: 1fr; }
}

/* ==========================================================================
   EL MÉTODO · v2 (dirección de arte) · APPEND-ONLY
   Eleva /el-metodo/ con el vocabulario visual real de los documentos
   (System™ P3/P4, Program™ P3/P8, iconos_familia): iconos oficiales en caja
   verde, pestañas de firma verde/petróleo, micro-verbos, eje en degradado,
   anillos conceptuales y glow de cierre. La "construcción por capas" y el
   "dibujo" de conectores se resuelven con cr-reveal/cr-stagger + transiciones
   CSS sobre la clase .is-visible que app.js ya activa: CERO JS nuevo.
   Respeta reduced-motion (app.js activa is-visible al instante; tokens 0ms).
   ========================================================================== */

/* ----- Kicker con línea verde (cohesión documental) ----- */
.cr-met-kicker { display: inline-flex; align-items: center; gap: 10px; }
.cr-met-kicker::before {
  content: ""; flex: 0 0 auto; width: 30px; height: 2px; background: var(--cr-verde);
}

/* ----- 01 · Banda de continuidad del Hero (rótulo vivo) ----- */
.cr-met-band {
  margin-top: var(--cr-space-5);
  display: flex; align-items: flex-start; flex-wrap: wrap; gap: 12px 14px;
}
.cr-met-band__step { display: flex; flex-direction: column; gap: 5px; }
.cr-met-band__name {
  font-family: var(--cr-font); font-weight: var(--cr-fw-x);
  font-size: var(--cr-fs-small); color: var(--cr-petroleo);
  letter-spacing: -.01em; white-space: nowrap;
}
.cr-met-band__verb {
  font-family: var(--cr-font); font-weight: var(--cr-fw-bold);
  font-size: 9px; letter-spacing: .12em; text-transform: uppercase;
  color: var(--cr-texto-2); white-space: nowrap;
}
.cr-met-band__arr {
  color: var(--cr-verde); font-weight: var(--cr-fw-bold); font-size: 13px;
  line-height: 1.2; padding-top: 1px;
}

/* ----- 02 · Iconos oficiales en caja verde (familia Feather/Lucide) ----- */
.cr-met-ico {
  width: 36px; height: 36px; border-radius: 10px;
  background: rgba(0, 168, 107, .10);
  display: flex; align-items: center; justify-content: center;
  color: var(--cr-verde); margin: 0 auto var(--cr-space-2);
}
.cr-met-ico svg {
  width: 19px; height: 19px; display: block; fill: none; stroke: currentColor;
  stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round;
}

/* ----- 02 · Pestañas de firma (origen verde / intervención petróleo) ----- */
.cr-met-node { overflow: hidden; }
.cr-met-tab {
  position: absolute; left: 50%; top: 0; transform: translateX(-50%);
  width: 56px; height: 3px; border-radius: 0 0 3px 3px;
}
.cr-met-tab--green { background: var(--cr-verde); }
.cr-met-tab--pet { background: var(--cr-petroleo); }

/* ----- 02 · Nombres de marca: nunca partir CORPORATE + producto ----- */
.cr-met-node__title { white-space: nowrap; }

/* ----- 02 · Micro-verbo (chip) ----- */
.cr-met-verb {
  display: inline-block;
  font-family: var(--cr-font); font-weight: var(--cr-fw-bold);
  font-size: 8.5px; letter-spacing: .12em; text-transform: uppercase;
  color: var(--cr-verde);
  border: 1px solid rgba(0, 168, 107, .22); border-radius: var(--cr-r-pill);
  padding: 2px 9px; white-space: nowrap;
}
.cr-met-verb--ondark { color: var(--cr-verde-hover); border-color: rgba(0, 196, 124, .3); }

/* ----- 02 · Program™: presencia fuerte sin romper jerarquía (pestaña petróleo) ----- */
.cr-met-node--program {
  background: var(--cr-tint-petroleo);
  border: 1px solid rgba(0, 59, 70, .2);
  border-top: 1px solid rgba(0, 59, 70, .2);
}
.cr-met-node--program .cr-met-node__eyebrow { color: var(--cr-petroleo); }
.cr-met-node--program .cr-met-node__title { font-size: calc(var(--cr-fs-h3) + .15rem); }

/* ----- 02 · Cajas hermanas Isfe™ / FunctionalMap™: simetría total ----- */
.cr-met-split { align-items: stretch; }
.cr-met-node--output {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  padding: clamp(18px, 2.2vw, 26px) clamp(14px, 1.8vw, 20px);
}
.cr-met-node--output .cr-met-node__eyebrow { margin-bottom: var(--cr-space-2); }
.cr-met-node--output .cr-met-node__title { font-size: clamp(.82rem, 1.5vw, .95rem); }
.cr-met-node--output .cr-met-node__text { min-height: 3.4em; margin-bottom: var(--cr-space-3); }
.cr-met-node--output .cr-met-verb { margin-top: auto; }

/* ----- 02 · Conectores que se DIBUJAN al entrar (CSS sobre .is-visible) -----
   No usamos el fade/translate del contenedor: lo neutralizamos y dibujamos la
   línea interior con scaleY. El label aparece tras la línea. Sin JS nuevo. */
.cr-met-link.cr-reveal { opacity: 1; transform: none; }
.cr-met-link::before {
  transform: scaleY(0); transform-origin: top center;
  transition: transform var(--cr-dur-slow) var(--cr-ease);
}
.cr-met-link.is-visible::before { transform: scaleY(1); }
.cr-met-link span {
  opacity: 0; transition: opacity var(--cr-dur) var(--cr-ease) calc(var(--cr-dur-slow) * .6);
}
.cr-met-link.is-visible span { opacity: 1; }

/* ----- 03 · Eje en degradado petróleo (no plano) + nodos como el documento ----- */
.cr-met-avanza {
  background: linear-gradient(165deg, #063138 0%, #04232b 60%, #03191f 100%);
}
.cr-met-phase::before { background: var(--cr-verde-hover); opacity: .5; }
.cr-met-phase__num { border-color: var(--cr-verde-hover); color: var(--cr-verde-hover); }
.cr-met-phase:last-child .cr-met-phase__num {
  background: transparent; border-style: dashed;
  border-color: var(--cr-verde-hover); color: var(--cr-verde-hover);
}
.cr-met-phase__title .cr-met-verb { margin-left: 9px; vertical-align: 2px; }

/* ----- 03 · Hallmarks anidado y salidas anidadas (filetes) ----- */
.cr-met-nest { margin-top: var(--cr-space-3); padding-left: 14px; border-left: 2px solid var(--cr-hair-dark); }
.cr-met-nest--out { border-left-color: rgba(0, 196, 124, .3); }
.cr-met-nest__n {
  font-family: var(--cr-font); font-weight: var(--cr-fw-bold);
  font-size: .82rem; color: var(--cr-blanco); white-space: nowrap;
}
.cr-met-nest__o {
  font-size: 8px; font-weight: var(--cr-fw-bold); letter-spacing: .13em;
  text-transform: uppercase; color: var(--cr-verde-hover); margin-left: 7px; white-space: nowrap;
}
.cr-met-nest__r {
  font-size: .72rem; letter-spacing: .08em; text-transform: uppercase;
  font-weight: var(--cr-fw-bold); color: var(--cr-teal-muted); margin-top: 4px;
}
.cr-met-nest__d { font-size: .78rem; color: var(--cr-teal-soft); margin-top: 3px; line-height: 1.5; }
.cr-met-nest__d + .cr-met-nest__n { margin-top: 10px; }

/* ----- 05 · Cierre profundo: glow radial + regla + anillos + lockup ----- */
.cr-met-cierre { position: relative; overflow: hidden; }
.cr-met-cierre::before {
  content: ""; position: absolute; pointer-events: none;
  width: 520px; height: 520px; border-radius: 50%;
  background: radial-gradient(circle, #00505e 0%, transparent 64%);
  opacity: .5; top: -280px; right: -160px;
}
.cr-met-cierre__inner { position: relative; z-index: 1; }
.cr-met-rule { width: 54px; height: 2px; background: var(--cr-verde); margin: var(--cr-space-5) auto 0; }

.cr-met-rings {
  display: flex; align-items: center; justify-content: center;
  gap: clamp(16px, 4vw, 34px); margin: var(--cr-space-6) auto 0;
}
.cr-met-ring { text-align: center; }
.cr-met-ring__lb {
  font-family: var(--cr-font); font-weight: var(--cr-fw-bold);
  font-size: 9.5px; letter-spacing: .13em; text-transform: uppercase;
  color: var(--cr-teal-soft); margin-bottom: 10px;
}
.cr-met-ring svg { width: 118px; height: 118px; display: block; margin: 0 auto; }
.cr-met-rings__arr { color: var(--cr-teal-muted); font-size: 18px; line-height: 1.2; text-align: center; }
.cr-met-rings__arr .mn {
  display: block; font-size: 8px; font-weight: var(--cr-fw-bold);
  letter-spacing: .12em; text-transform: uppercase; color: var(--cr-teal-muted); margin-top: 3px;
}
.cr-met-ccap {
  font-family: var(--cr-font); font-size: .72rem; line-height: 1.55;
  color: var(--cr-teal-soft); border-left: 2px solid var(--cr-verde);
  padding-left: 13px; margin: var(--cr-space-5) auto 0; max-width: 48ch; text-align: left;
}
.cr-met-lock { margin-top: var(--cr-space-6); padding-top: var(--cr-space-5); border-top: 1px solid var(--cr-hair-dark); }
.cr-met-lock img { height: 34px; width: auto; }

/* ----- Responsive El método · v2 ----- */
@media (max-width: 560px) {
  .cr-met-rings { flex-direction: column; gap: var(--cr-space-4); }
  .cr-met-rings__arr { transform: rotate(90deg); }
}

/* ==========================================================================
   EL MÉTODO · v3 (tarjetas horizontales) · APPEND-ONLY
   El bloque 02 pasa a CARRIL de tarjetas premium (scroll-snap horizontal en
   desktop/iPad, apilado en móvil), protagonista de la página. Sin iconos,
   tipográfico, glass sutil, hover +1.5%, «+» -> panel inferior asociado
   (gobernado por initMetodo() en app.js; sin JS la página sigue legible).
   El bloque 03 pasa a frase-puente editorial (sin diagrama). El diagrama
   vertical v1/v2 (cr-met-arch/flow) queda como legado no usado.
   Reutiliza tokens, cr-section, tipografía, cr-reveal/cr-stagger, y el cierre
   (cr-met-cierre/rings/lock) del v2. Respeta prefers-reduced-motion.
   ========================================================================== */

/* ----- 02 · Carril ----- */
.cr-met-rail__head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: var(--cr-space-5);
}
.cr-met-nav { display: flex; gap: 8px; }
.cr-met-nav__btn {
  width: 38px; height: 38px; border-radius: 50%;
  border: 1px solid var(--cr-hair-light); background: rgba(255, 255, 255, .6);
  color: var(--cr-petroleo); font-size: 15px; line-height: 1; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background var(--cr-dur) var(--cr-ease), border-color var(--cr-dur) var(--cr-ease);
}
.cr-met-nav__btn:hover { background: #fff; border-color: var(--cr-petroleo); }
.cr-met-nav__btn:focus-visible { outline: 2px solid var(--cr-verde); outline-offset: 2px; }

.cr-met-track {
  display: flex; gap: var(--cr-space-4);
  overflow-x: auto; scroll-snap-type: x mandatory;
  scroll-padding-left: var(--cr-space-5);
  -webkit-overflow-scrolling: touch;
  padding-bottom: 6px;
  scrollbar-width: none;
}
.cr-met-track::-webkit-scrollbar { display: none; }

/* ----- 02 · Tarjeta (anatomía idéntica, zonas reservadas para simetría) ----- */
.cr-met-mcard {
  position: relative;
  flex: 0 0 clamp(280px, 80vw, 332px);
  min-height: 296px;
  scroll-snap-align: start;
  display: flex; flex-direction: column;
  border-radius: var(--cr-r-lg);
  padding: 24px 24px 64px;
  transition: transform var(--cr-dur) var(--cr-ease), box-shadow var(--cr-dur) var(--cr-ease);
}
.cr-met-mcard--light {
  background: rgba(255, 255, 255, .55);
  border: 1px solid var(--cr-hair-light);
  -webkit-backdrop-filter: blur(12px) saturate(150%);
  backdrop-filter: blur(12px) saturate(150%);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .cr-met-mcard--light { background: rgba(255, 255, 255, .82); }
}
.cr-met-mcard--sub { background: rgba(255, 255, 255, .34); }
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .cr-met-mcard--sub { background: rgba(255, 255, 255, .7); }
}
.cr-met-mcard--anchor { background: var(--cr-petroleo); border: 1px solid var(--cr-petroleo); color: var(--cr-offwhite); }

@media (hover: hover) {
  .cr-met-mcard:hover {
    transform: scale(1.015);
    box-shadow: 0 12px 34px rgba(0, 42, 51, .14), 0 0 0 1px rgba(0, 168, 107, .32);
  }
}

.cr-met-mcard__label {
  margin: 0; height: 14px;
  font-family: var(--cr-font); font-weight: var(--cr-fw-bold);
  font-size: var(--cr-fs-eyebrow); letter-spacing: var(--cr-track-eyebrow);
  text-transform: uppercase; color: var(--cr-verde);
}
.cr-met-mcard--anchor .cr-met-mcard__label { color: var(--cr-verde-hover); }
.cr-met-mcard--sub .cr-met-mcard__label { color: var(--cr-texto-2); }

.cr-met-mcard__wm {
  margin: 16px 0 0; height: 26px;
  display: flex; align-items: baseline; gap: 5px; white-space: nowrap;
}
.cr-met-mcard__c { font-size: 9.5px; font-weight: var(--cr-fw-bold); letter-spacing: .05em; color: var(--cr-texto-2); }
.cr-met-mcard__p { font-size: 18px; font-weight: var(--cr-fw-x); letter-spacing: -.01em; color: var(--cr-petroleo); }
.cr-met-mcard--anchor .cr-met-mcard__c { color: var(--cr-teal-soft); }
.cr-met-mcard--anchor .cr-met-mcard__p { color: var(--cr-blanco); }
.cr-met-mcard--sub .cr-met-mcard__p { color: #2b454c; }

.cr-met-mcard__desc {
  margin: 10px 0 0; min-height: 28px;
  font-family: var(--cr-font); font-weight: var(--cr-fw-bold);
  font-size: 10px; letter-spacing: .04em; text-transform: uppercase;
  line-height: 1.35; color: var(--cr-texto-2);
}
.cr-met-mcard--anchor .cr-met-mcard__desc { color: var(--cr-teal-soft); }

.cr-met-mcard__phrase {
  margin: 12px 0 0; min-height: 40px;
  font-size: var(--cr-fs-body); font-weight: var(--cr-fw-medium);
  line-height: 1.45; color: var(--cr-texto-cuerpo);
}
.cr-met-mcard--anchor .cr-met-mcard__phrase { color: #dbe9e8; }

.cr-met-mcard__plus {
  position: absolute; right: 20px; bottom: 18px;
  width: 32px; height: 32px; border-radius: 50%;
  border: 1px solid var(--cr-hair-light); background: rgba(255, 255, 255, .55);
  color: var(--cr-petroleo); font-size: 19px; font-weight: var(--cr-fw-regular);
  line-height: 1; cursor: pointer; display: inline-flex; align-items: center; justify-content: center;
  transition: background var(--cr-dur) var(--cr-ease), transform var(--cr-dur) var(--cr-ease);
}
.cr-met-mcard--anchor .cr-met-mcard__plus { border-color: rgba(255, 255, 255, .3); color: var(--cr-blanco); background: transparent; }
.cr-met-mcard__plus:hover { background: rgba(0, 168, 107, .12); }
.cr-met-mcard__plus:focus-visible { outline: 2px solid var(--cr-verde); outline-offset: 2px; }
.cr-met-mcard.is-expanded { box-shadow: 0 0 0 1px rgba(0, 168, 107, .4); }

.cr-met-mcard__opt {
  position: absolute; right: 20px; top: 22px;
  font-size: 7.5px; font-weight: var(--cr-fw-bold); letter-spacing: .1em;
  text-transform: uppercase; color: var(--cr-texto-2);
  border: 1px solid var(--cr-hair-light); border-radius: var(--cr-r-pill); padding: 2px 8px;
}

/* ----- 02 · Panel inferior asociado (un solo panel, lo rellena initMetodo) ----- */
.cr-met-panel {
  max-height: 0; opacity: 0; overflow: hidden;
  margin: 0; position: relative;
  transition: max-height var(--cr-dur-slow) var(--cr-ease), opacity var(--cr-dur) var(--cr-ease), margin var(--cr-dur) var(--cr-ease);
}
.cr-met-panel.is-open {
  max-height: 640px; opacity: 1; margin-top: var(--cr-space-4);
  background: rgba(255, 255, 255, .6);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  border: 1px solid var(--cr-hair-light); border-left: 3px solid var(--cr-verde);
  border-radius: var(--cr-r-md); padding: 24px 26px;
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .cr-met-panel.is-open { background: rgba(255, 255, 255, .9); }
}
.cr-met-panel__head {
  margin: 0 0 var(--cr-space-3); font-family: var(--cr-font);
  font-weight: var(--cr-fw-x); font-size: var(--cr-fs-h3); color: var(--cr-petroleo);
}
.cr-met-panel__close {
  position: absolute; right: 16px; top: 16px;
  width: 30px; height: 30px; border-radius: 50%;
  border: 1px solid var(--cr-hair-light); background: transparent;
  color: var(--cr-petroleo); font-size: 17px; line-height: 1; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
}
.cr-met-panel__close:focus-visible { outline: 2px solid var(--cr-verde); outline-offset: 2px; }
.cr-met-panel__cols { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: var(--cr-space-5); }
.cr-met-more__col h4 {
  margin: 0 0 8px; font-family: var(--cr-font); font-weight: var(--cr-fw-bold);
  font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--cr-verde);
}
.cr-met-more__col p { margin: 0; font-size: var(--cr-fs-body); line-height: var(--cr-lh-body); color: var(--cr-texto-cuerpo); }

/* ----- 03 · Frase-puente editorial (sin diagrama) ----- */
.cr-met-bridge { text-align: center; }
.cr-met-bridge__line {
  margin: 0 auto; max-width: 22ch;
  font-family: var(--cr-font); font-weight: var(--cr-fw-x);
  font-size: var(--cr-fs-h2); line-height: var(--cr-lh-tight);
  letter-spacing: var(--cr-track-h); text-transform: uppercase; color: var(--cr-petroleo);
}

/* ----- Responsive El método · v3 ----- */
@media (max-width: 820px) {
  .cr-met-track {
    flex-direction: column; overflow-x: visible;
    scroll-snap-type: none; gap: var(--cr-space-4);
  }
  .cr-met-mcard { flex: 1 1 auto; width: 100%; min-height: 0; }
  .cr-met-nav { display: none; }
  .cr-met-panel__cols { grid-template-columns: 1fr; gap: var(--cr-space-4); }
}

@media (prefers-reduced-motion: reduce) {
  .cr-met-mcard { transition: none; }
  .cr-met-mcard:hover { transform: none; }
}

/* ==========================================================================
   EL MÉTODO · v3.2 (carril premium · reset bloque 02) · APPEND-ONLY
   Reset visual SOLO del carril. Override por cascada de las clases v3 (van
   después en el archivo). Claves:
   · Lockups OFICIALES (SVG compuestos blancos en blocksy-child/assets/logos/)
     recoloreados por CSS mask: blanco en anclas, petróleo en claras. Caja de
     lockup de ALTURA FIJA + mask-size:contain -> equivalencia óptica real
     (FunctionalMap™ no domina por longitud; mismo alto de marca en todas).
   · Tarjetas de TAMAÑO IDÉNTICO (alto fijo, no min-height): nada se comprime.
   · Hover sin recorte: el track lleva padding suficiente (overflow-x:auto
     fuerza el recorte vertical, el padding da aire al scale + glow).
   · Panel inferior conectado: no cambia el tamaño de la tarjeta al abrir; el «+»
     pasa a «×» en la MISMA tarjeta y el panel emerge debajo, con un conector
     (::before) alineado a la tarjeta activa vía --cr-notch-x (lo fija app.js).
   No toca hero, frase-puente, qué protege ni cierre.
   ========================================================================== */

/* Carril: aire para el hover (sin recorte) */
.cr-met-rail__head { margin-bottom: var(--cr-space-3); }
.cr-met-track {
  gap: var(--cr-space-5);
  padding: 24px 12px 34px;
  scroll-padding-left: 12px;
}

/* Tarjeta: TAMAÑO IDÉNTICO (alto fijo) + más vertical/elegante */
.cr-met-mcard {
  flex: 0 0 clamp(240px, 72vw, 264px);
  height: 430px;
  min-height: 0;
  border-radius: 22px;
  padding: 32px 30px 78px;
}
.cr-met-mcard--light {
  background: rgba(255, 255, 255, .52);
  border: 1px solid var(--cr-hair-light);
}
.cr-met-mcard--sub { background: rgba(255, 255, 255, .34); }
.cr-met-mcard--anchor { background: var(--cr-petroleo); border-color: var(--cr-petroleo); }
.cr-met-mcard:hover {
  transform: scale(1.012);
  box-shadow: 0 20px 48px rgba(0, 42, 51, .16), 0 0 0 1px rgba(0, 168, 107, .3);
}

/* Zona etiqueta (altura reservada) */
.cr-met-mcard__label {
  height: 14px; margin: 0;
  font-family: var(--cr-font); font-weight: var(--cr-fw-bold);
  font-size: 9.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--cr-verde);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.cr-met-mcard--anchor .cr-met-mcard__label { color: var(--cr-verde-hover); }
.cr-met-mcard--sub .cr-met-mcard__label { color: var(--cr-texto-2); }

/* Lockup OFICIAL recoloreado por mask · caja de alto fijo, contain (equiv. óptica) */
.cr-met-mcard__logo {
  display: block; margin: 22px 0 0;
  height: 20px; width: 100%;
  background-color: var(--cr-petroleo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: left center; mask-position: left center;
  -webkit-mask-size: contain; mask-size: contain;
}
.cr-met-mcard--anchor .cr-met-mcard__logo { background-color: var(--cr-blanco); }
.cr-met-mcard__logo--scan { -webkit-mask-image: url(../logos/corporate_scan_tm_white.svg); mask-image: url(../logos/corporate_scan_tm_white.svg); }
.cr-met-mcard__logo--hallmarks { -webkit-mask-image: url(../logos/corporate_hallmarks_tm_white.svg); mask-image: url(../logos/corporate_hallmarks_tm_white.svg); }
.cr-met-mcard__logo--isfe { -webkit-mask-image: url(../logos/corporate_isfe_tm_white.svg); mask-image: url(../logos/corporate_isfe_tm_white.svg); }
.cr-met-mcard__logo--functionalmap { -webkit-mask-image: url(../logos/corporate_functionalmap_tm_white.svg); mask-image: url(../logos/corporate_functionalmap_tm_white.svg); }
.cr-met-mcard__logo--program { -webkit-mask-image: url(../logos/corporate_program_tm_white.svg); mask-image: url(../logos/corporate_program_tm_white.svg); }
/* Fallback si el navegador no soporta mask: oculta el bloque de color y muestra
   el aria-label no es visible; por eso conservamos el nombre accesible y, si
   hiciera falta, el lockup como <img> sería el plan B. */
@supports not ((mask-size: contain) or (-webkit-mask-size: contain)) {
  .cr-met-mcard__logo { background-color: transparent; }
  .cr-met-mcard__logo::after {
    content: attr(aria-label); color: var(--cr-petroleo);
    font-weight: var(--cr-fw-x); font-size: 17px; white-space: nowrap;
  }
  .cr-met-mcard--anchor .cr-met-mcard__logo::after { color: var(--cr-blanco); }
}

/* Etiqueta opcional (Hallmarks) */
.cr-met-mcard__opt {
  position: absolute; right: 28px; top: 30px;
  font-size: 7.5px; font-weight: var(--cr-fw-bold); letter-spacing: .1em;
  text-transform: uppercase; color: var(--cr-texto-2);
  border: 1px solid var(--cr-hair-light); border-radius: var(--cr-r-pill); padding: 3px 10px;
}

/* Frase breve (al fondo, encima del +) */
.cr-met-mcard__phrase {
  margin: auto 0 0; min-height: 0;
  font-size: var(--cr-fs-body); font-weight: var(--cr-fw-medium);
  line-height: 1.5; color: var(--cr-texto-cuerpo);
}
.cr-met-mcard--anchor .cr-met-mcard__phrase { color: #dbe9e8; }

/* «+» integrado */
.cr-met-mcard__plus {
  right: 26px; bottom: 24px; width: 36px; height: 36px; font-size: 21px;
}

/* Panel premium conectado · no cambia el tamaño de la tarjeta */
.cr-met-panel.is-open {
  max-height: 720px; margin-top: var(--cr-space-4);
  background: rgba(255, 255, 255, .56);
  border: 1px solid var(--cr-hair-light); border-left: 1px solid var(--cr-hair-light);
  border-radius: 20px; padding: 32px 34px;
  box-shadow: 0 1px 0 rgba(0, 168, 107, .18);
}
.cr-met-panel.is-open::before {
  content: ""; position: absolute; top: -9px; left: var(--cr-notch-x, 80px);
  width: 17px; height: 17px; background: rgba(255, 255, 255, .56);
  border-left: 1px solid var(--cr-hair-light); border-top: 1px solid var(--cr-hair-light);
  transform: rotate(45deg);
}
.cr-met-panel__head { display: flex; align-items: center; gap: 12px; }
.cr-met-panel__head::after { content: ""; flex: 1; height: 1px; background: var(--cr-hair-light); }
.cr-met-panel__cols { gap: var(--cr-space-6); }

/* Responsive v3.2 */
@media (max-width: 820px) {
  .cr-met-mcard { height: auto; min-height: 0; flex: 1 1 auto; width: 100%; }
  .cr-met-mcard__phrase { margin-top: var(--cr-space-4); }
  .cr-met-panel.is-open::before { display: none; }
  .cr-met-panel__cols { grid-template-columns: 1fr; }
}

/* ===== Formulario de solicitud (La reserva · Contact Form 7) =====
   v1 (2026-07-11, decisión Juanan): formulario corto en vez de calendario; la
   propuesta de fecha se devuelve por email. El marcador CR_FORM_RESERVA de la
   página lo sustituye functions.php por el shortcode de CF7 (o por un botón
   mailto de puente si aún no está configurado). Estos estilos visten el markup
   NATIVO de CF7 (.wpcf7) dentro de .cr-rsv-slot: tarjeta de cristal sobre la
   sección profunda, inputs oscuros con hairline, foco verde, envío como CTA
   claro. Sin dependencia del CSS propio de CF7. TODAS las reglas van ancladas a
   .cr-rsv-slot: verificado en staging que a (0,1,1) el font-size del label lo
   pisaba otra regla; a (0,2,1) gana siempre. */
.cr-rsv-slot {
  margin: clamp(34px, 4.5vw, 50px) auto 0;
  max-width: 720px;
  text-align: left;
}
.cr-rsv-slot .wpcf7 form {
  border: 1px solid var(--cr-hair-dark);
  border-radius: var(--cr-r-lg);
  background: rgba(255, 255, 255, .04);
  padding: clamp(24px, 3.5vw, 40px);
}
/* Rejilla: 2 columnas en escritorio, 1 en móvil. CF7 envuelve cada campo en <p>. */
.cr-rsv-slot .cr-rsv__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px 18px;
}
.cr-rsv-slot .cr-rsv__field { margin: 0; }
.cr-rsv-slot .cr-rsv__field--full { grid-column: 1 / -1; }
.cr-rsv-slot .cr-rsv__field label {
  display: block;
  font-family: var(--cr-font);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--cr-teal-soft);
}
.cr-rsv-slot .cr-rsv__field .wpcf7-form-control-wrap { display: block; margin-top: 7px; }
.cr-rsv-slot input[type="text"],
.cr-rsv-slot input[type="email"],
.cr-rsv-slot input[type="tel"],
.cr-rsv-slot textarea {
  width: 100%;
  box-sizing: border-box;
  font-family: var(--cr-font);
  font-size: .95rem;
  color: var(--cr-offwhite);
  background: rgba(0, 0, 0, .18);
  border: 1px solid var(--cr-hair-dark);
  border-radius: var(--cr-r-sm);
  padding: 12px 14px;
  transition: border-color var(--cr-dur-fast) var(--cr-ease),
              background-color var(--cr-dur-fast) var(--cr-ease);
}
.cr-rsv-slot textarea { resize: vertical; min-height: 96px; }
.cr-rsv-slot input::placeholder,
.cr-rsv-slot textarea::placeholder { color: var(--cr-teal-muted); }
.cr-rsv-slot input:focus,
.cr-rsv-slot textarea:focus {
  outline: none;
  border-color: var(--cr-verde);
  background: rgba(0, 0, 0, .26);
}
/* Consentimiento RGPD (obligatorio) */
.cr-rsv-slot .cr-rsv__consent {
  margin: 18px 0 0;
  font-size: .82rem;
  line-height: 1.6;
  color: var(--cr-teal-muted);
}
.cr-rsv-slot .cr-rsv__consent a { color: var(--cr-teal-soft); text-decoration: underline; text-underline-offset: 3px; }
.cr-rsv-slot .cr-rsv__consent a:hover { color: var(--cr-verde-hover); }
.cr-rsv-slot .cr-rsv__consent input[type="checkbox"] {
  width: 15px; height: 15px;
  margin: 0 8px 0 0;
  vertical-align: -2px;
  accent-color: var(--cr-verde);
}
.cr-rsv-slot .cr-rsv__consent .wpcf7-list-item { margin: 0; }
/* Envío: mismo lenguaje que los CTA claros sobre fondo profundo */
.cr-rsv-slot .cr-rsv__actions { margin: 22px 0 0; }
.cr-rsv-slot input[type="submit"] {
  font-family: var(--cr-font);
  font-weight: var(--cr-fw-bold);
  font-size: .92rem;
  letter-spacing: .01em;
  color: var(--cr-petroleo);
  background: var(--cr-blanco);
  border: 1px solid var(--cr-blanco);
  border-radius: var(--cr-r-pill);
  padding: 14px 34px;
  cursor: pointer;
  transition: background-color var(--cr-dur-fast) var(--cr-ease),
              border-color var(--cr-dur-fast) var(--cr-ease),
              color var(--cr-dur-fast) var(--cr-ease);
}
.cr-rsv-slot input[type="submit"]:hover,
.cr-rsv-slot input[type="submit"]:focus-visible {
  background: var(--cr-verde);
  border-color: var(--cr-verde);
  color: var(--cr-blanco);
}
.cr-rsv-slot .wpcf7-spinner { margin-left: 12px; }
/* Validación y respuesta de CF7, en tono del sistema (sin sus bordes rojos) */
.cr-rsv-slot .wpcf7-not-valid-tip {
  margin-top: 6px;
  font-size: .78rem;
  color: #FFB4A2;
}
.cr-rsv-slot .wpcf7-response-output {
  margin: 18px 0 0 !important;
  padding: 12px 16px !important;
  border: 1px solid var(--cr-hair-dark) !important;
  border-radius: var(--cr-r-sm);
  font-size: .85rem;
  color: var(--cr-offwhite);
}
.cr-rsv-slot .wpcf7 form.sent .wpcf7-response-output { border-color: var(--cr-verde) !important; }
.cr-rsv-slot .wpcf7 form.invalid .wpcf7-response-output,
.cr-rsv-slot .wpcf7 form.failed .wpcf7-response-output { border-color: #FFB4A2 !important; }
/* Puente mailto (mientras el shortcode no esté configurado en functions.php) */
.cr-rsv-slot .cr-rsv__bridge { margin: clamp(28px, 4vw, 40px) 0 0; }
@media (max-width: 640px) {
  .cr-rsv-slot .cr-rsv__grid { grid-template-columns: 1fr; gap: 12px; }
}
