/* ============================================
   BONJOUR PARIS - ESTILOS PRINCIPALES
   Academia de Idiomas
   ============================================ */

/* La tipografía YA NO se pide desde aquí con @import: eso obligaba al
   navegador a bajar primero styles.css, descubrir el @import y salir a por la
   fuente después —dos viajes en fila, con la página en blanco mientras tanto—.
   Ahora cada página la pide en su <head>, en paralelo con este archivo, y con
   preconnect a fonts.gstatic.com, que es de donde salen los .woff2. */

:root {
  /* Alto real de la cabecera: 0.75rem·2 de padding + 52px de logo.
     Estaba copiado a mano en dos sitios y con el valor equivocado. */
  --header-h: 76px;

  /* Marca en triplete RGB: hace falta para componer rgba() desde variables.
     Son los MISMOS colores de siempre (#0a1f44 y #c9a84c), solo descompuestos. */
  --navy-rgb: 10, 31, 68;
  --gold-rgb: 201, 168, 76;

  /* Cristal de la cabecera */
  --glass-bg:       rgba(255, 255, 255, 0.72);
  --glass-bg-solid: rgba(255, 255, 255, 0.97);
  --glass-line:     rgba(var(--gold-rgb), 0.22);
  --glass-shadow:   0 4px 24px rgba(var(--navy-rgb), 0.10);
  --ease-out:       cubic-bezier(0.22, 1, 0.36, 1);
  --t-fast:         0.18s var(--ease-out);
  --navy:       #0a1f44;
  --navy-light: #1a3a6e;
  --gold:       #c9a84c;
  --gold-light: #edc76e;   /* tono 87° (ámbar). Antes 91°, ya en el oliva */
  /* El dorado de --gold (L* 70) se queda para las secciones claras, donde
     apenas llega a 2.3:1 sobre blanco y no puede subir más. Sobre el azul del
     héroe pasa lo contrario: ahí se puede —y se debe— usar uno con luz.
     #E9C36C da 7.5:1 sobre el azul, tono 87°. */
  --gold-claro-oscuro: #e9c36c;
  --cream:      #f9f5ef;
  --red:        #c0392b;
  --white:      #ffffff;
  --gray-light: #f0f0f0;
  --gray-mid:   #888;
  --text-dark:  #1a1a2e;
  --shadow:     0 8px 32px rgba(10, 31, 68, 0.12);
  --shadow-lg:  0 16px 56px rgba(10, 31, 68, 0.18);
  --radius:     12px;
  --radius-lg:  20px;
  --transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Añade esto a tu styles.css para optimizar imágenes */
img {
  max-width: 100%;
  height: auto;
}

/* Aquí había un `content-visibility: auto` sobre los logotipos.
   En una imagen sin `contain-intrinsic-size` eso es contraproducente: mientras
   está fuera de la pantalla el navegador la maqueta como si midiera cero, y al
   entrar salta a su tamaño real desplazando lo que tiene al lado. Era lo que
   dejaba el escudo de «Acerca de nosotros» descolocado a la izquierda.
   Además no ahorraba nada: son cuatro imágenes pequeñas, y dos de ellas
   (.header-logo, .header-logo-jva) están visibles desde el primer píxel. */

/* Añade a styles.css */
:focus {
  outline: 3px solid var(--gold);
  outline-offset: 2px;
}

.skip-link {
  position: absolute;
  top: -40px;
  left: 0;
  background: var(--navy);
  color: white;
  padding: 8px;
  z-index: 10000;
}

.skip-link:focus {
  top: 0;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  /* Sin esto, cada clic en #cursos o #contacto deja el título de la sección
     escondido debajo de la cabecera pegajosa. */
  scroll-padding-top: calc(var(--header-h) + 8px);
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;   /* evita el reescalado automático de texto en móvil */
  text-size-adjust: 100%;
}

body {
  font-family: 'Nunito', sans-serif;
  background-color: var(--white);
  color: var(--text-dark);
  line-height: 1.7;
  /* SIN `overflow-x: hidden`. Estuvo aquí y no arreglaba nada: escondía la
     barra y dejaba el contenido cortado por la derecha, que es exactamente el
     fallo que no se ve en el portátil y sí en un móvil estrecho. Si algo se
     sale, ahora se nota y se arregla donde se sale. Se comprobó que nada lo
     necesitaba: ni un `100vw` ni un margen negativo de página en todo el CSS. */
  width: 100%;
  max-width: 100%;
}

/* Ningún medio o tabla debe desbordar el ancho del dispositivo (rompía el layout al hacer zoom) */
img, video, iframe, canvas, svg, table { max-width: 100%; }
*, *::before, *::after { min-width: 0; }

/* ============================================
   WELCOME SCREEN
   ============================================ */

#welcome-screen {
  position: fixed;
  inset: 0;
  background: linear-gradient(135deg, var(--navy) 0%, var(--navy-light) 50%, #0d2d5e 100%);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  z-index: 9999;
  /* 0,55 s de desvanecido. Sumados a los 1,45 s que la deja js/main.js, la
     bienvenida dura DOS segundos de punta a punta. Los dos números van
     juntos: cambiar uno sin el otro alarga o acorta la presentación. */
  transition: opacity .55s cubic-bezier(.4,0,.2,1), visibility .55s;
  overflow: hidden;
}

#welcome-screen::before {
  content: '';
  position: absolute;
  inset: 0;
  background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23c9a84c' fill-opacity='0.04'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
  pointer-events: none;
}

.welcome-flag-stripe {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 6px;
  display: flex;
}
.welcome-flag-stripe span {
  flex: 1;
}
.welcome-flag-stripe span:nth-child(1) { background: #002395; }
.welcome-flag-stripe span:nth-child(2) { background: var(--white); }
.welcome-flag-stripe span:nth-child(3) { background: #ED2939; }

.welcome-escudo {
  width: clamp(96px, 18vw, 150px);
  height: auto;
  margin-bottom: 1.1rem;
  animation: fadeInDown .55s cubic-bezier(.2,.7,.3,1) both;
  filter: drop-shadow(0 6px 28px rgba(201,168,76,.35));
}

/* El nombre es el protagonista: la pantalla dura poco y tiene que decir
   quién eres antes de desaparecer. */
.welcome-nombre {
  font-family: 'Playfair Display', Georgia, serif;
  color: var(--white);
  font-size: clamp(2.1rem, 7vw, 4.2rem);
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: .01em;
  margin: 0;
  text-align: center;
  animation: fadeInUp .55s .1s cubic-bezier(.2,.7,.3,1) both;
}

.welcome-sub {
  margin-top: .7rem;
  font-size: clamp(.72rem, 1.8vw, .9rem);
  font-weight: 600;
  letter-spacing: .26em;
  text-transform: uppercase;
  color: var(--gold);
  animation: fadeInUp .55s .2s cubic-bezier(.2,.7,.3,1) both;
}

/* Dura poco: quien llega con el movimiento reducido activado no debería ver
   nada moverse, y tampoco esperar. */
@media (prefers-reduced-motion: reduce) {
  .welcome-escudo, .welcome-nombre, .welcome-sub { animation: none; }
  #welcome-screen { transition: none; }
}

.welcome-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

/* ============================================
   HEADER / NAV
   ============================================ */

header {
  /* Respaldo opaco primero: sin @supports, un navegador sin backdrop-filter
     mostraria la cabecera translucida SIN desenfoque y el menu quedaria
     ilegible sobre el hero. */
  background: var(--glass-bg-solid);
  position: sticky;
  top: 0;
  z-index: 1000;
  border-bottom: 1px solid var(--glass-line);
  box-shadow: var(--glass-shadow);
  padding: 0.5rem 0;
  transition: box-shadow var(--t-fast), background var(--t-fast);
}

@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  header {
    background: var(--glass-bg);
    -webkit-backdrop-filter: blur(14px) saturate(150%);
    backdrop-filter: blur(14px) saturate(150%);
  }
}

/* Al separarse del borde superior, la cabecera se eleva. */
header.is-scrolled {
  box-shadow: 0 6px 32px rgba(var(--navy-rgb), 0.16);
  --glass-bg: rgba(255, 255, 255, 0.84);
}

.header-inner {
  max-width: none;
  margin: 0 auto;
  padding: 0 clamp(1rem, 4vw, 2.5rem);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}

.header-logo {
  height: 46px;
  width: auto;
}

nav {
  display: flex;
  align-items: center;
  gap: 0.25rem;
}

nav a {
  font-family: 'Nunito', sans-serif;
  font-weight: 600;
  font-size: 0.9rem;
  color: var(--navy);
  text-decoration: none;
  padding: 0.5rem 1rem;
  border-radius: 8px;
  letter-spacing: 0.03em;
  transition: var(--transition);
  position: relative;
}

nav a::after {
  content: '';
  position: absolute;
  bottom: 4px;
  /* Se anima con transform, no con width: width fuerza un recalculo de
     maquetacion en cada fotograma; transform va solo en el compositor. */
  left: 1rem;
  right: 1rem;
  height: 2px;
  background: var(--gold);
  border-radius: 2px;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.28s var(--ease-out);
}

nav a:hover,
nav a:focus-visible {
  color: var(--gold);
  background: rgba(var(--gold-rgb), 0.08);
}

/* :focus-visible incluido a proposito: antes solo :hover pintaba el subrayado,
   asi que quien navega con teclado no veia nada. */
nav a:hover::after,
nav a:focus-visible::after { transform: scaleX(1); }

nav a[aria-current="page"]::after { transform: scaleX(1); opacity: 0.55; }

/* Una sola acción principal. Tres botones de tres colores dicen que hay tres
   cosas igual de importantes, y entonces la vista no sabe dónde ir. */
.nav-cta {
  background: var(--navy);
  color: var(--white);
  border-radius: 999px;
  padding: 0.5rem 1.25rem;
  box-shadow: 0 2px 10px rgba(var(--navy-rgb), 0.22);
}
.nav-cta:hover,
.nav-cta:focus-visible {
  background: var(--gold);
  color: var(--navy);
  box-shadow: 0 4px 16px rgba(var(--gold-rgb), 0.34);
  transform: translateY(-1px);
}
.nav-cta::after { display: none; }

/* Verificar un certificado es una utilidad, no una venta: se marca con un
   contorno para que se encuentre, sin competir con la acción principal. */
.nav-util {
  border: 1.5px solid rgba(var(--navy-rgb), 0.28);
  border-radius: 999px;
  padding: 0.45rem 1.1rem;
}
.nav-util:hover,
.nav-util:focus-visible {
  border-color: var(--gold);
  background: rgba(var(--gold-rgb), 0.08);
}
.nav-util::after { display: none; }
.nav-util[aria-current="page"] {
  border-color: var(--gold);
  background: rgba(var(--gold-rgb), 0.12);
}

/* Hamburger */
.hamburger {
  display: none;
  flex-direction: column;
  /* El gap de 5px NO se toca: las transformadas de .active asumen 5+2. */
  gap: 5px;
  cursor: pointer;
  background: none;
  border: none;
  /* 44px es el minimo tactil comodo; antes medía unos 36. */
  min-width: 44px;
  min-height: 44px;
  align-items: center;
  justify-content: center;
  padding: 0;
  border-radius: 10px;
  transition: background var(--t-fast);
}
.hamburger:hover,
.hamburger:focus-visible { background: rgba(var(--navy-rgb), 0.06); }

.hamburger span {
  display: block;
  width: 24px;
  height: 2px;
  background: var(--navy);
  border-radius: 2px;
  transition: var(--transition);
}

.hamburger.active span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.hamburger.active span:nth-child(2) { opacity: 0; }
.hamburger.active span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* ============================================
   HERO SECTION
   ============================================ */

#inicio {
  position: relative;
  min-height: 80vh;
  display: flex;
  align-items: center;
  overflow: hidden;
  background: linear-gradient(120deg, var(--navy) 0%, var(--navy-light) 100%);
}

.hero-bg {
  position: absolute;
  inset: 0;
  background: url('https://images.unsplash.com/photo-1499856871958-5b9627545d1a?w=1600&q=80') center/cover;
  opacity: 0.15;
}

.hero-content {
  position: relative;
  max-width: none;
  margin: 0 auto;
  padding: clamp(2.5rem, 5vw, 4rem) clamp(1rem, 4vw, 2rem);
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 4rem;
  align-items: center;
}

.hero-text h2 {
  font-family: 'Playfair Display', serif;
  font-size: clamp(2.2rem, 5vw, 3.8rem);
  color: var(--white);
  line-height: 1.2;
  margin-bottom: 1.25rem;
}

.hero-text h2 em {
  color: var(--gold);
  font-style: italic;
}

.hero-text p {
  font-size: 1.1rem;
  color: rgba(255,255,255,0.78);
  margin-bottom: 2rem;
  font-weight: 300;
}

.hero-badges {
  display: flex;
  gap: 0.75rem;
  flex-wrap: wrap;
  margin-bottom: 2.5rem;
}

.badge {
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.15);
  color: var(--white);
  padding: 0.4rem 1rem;
  border-radius: 50px;
  font-size: 0.85rem;
  font-weight: 500;
  backdrop-filter: blur(4px);
}

.hero-cta {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  background: var(--gold);
  color: var(--navy);
  font-weight: 700;
  font-size: 1rem;
  padding: 0.9rem 2rem;
  border-radius: 50px;
  text-decoration: none;
  transition: var(--transition);
  box-shadow: 0 4px 20px rgba(201,168,76,0.4);
}

/* Los dos botones del hero: inscribirse y ver la tarifa. En el móvil se
   apilan a ancho completo en vez de partirse por la mitad. */
.hero-acciones { display: flex; gap: 0.7rem; flex-wrap: wrap; align-items: center; }
.hero-cta-2 {
  background: transparent; color: #fff; border: 1.5px solid rgba(255,255,255,0.55);
  cursor: pointer; font-family: inherit;
}
.hero-cta-2:hover { background: rgba(255,255,255,0.12); border-color: var(--gold); color: var(--gold-light); box-shadow: none; }
.hero-cta-2 .ico { width: 18px; height: 18px; }
@media (max-width: 520px) {
  /* El nowrap no sobra: una columna que envuelve mide la línea por su
     contenido, y los dos botones salían más estrechos que su caja. */
  .hero-acciones { flex-direction: column; flex-wrap: nowrap; align-items: stretch; }
  .hero-acciones .hero-cta { justify-content: center; width: 100%; }
}

.hero-cta:hover {
  background: var(--gold-light);
  transform: translateY(-2px);
  box-shadow: 0 8px 32px rgba(201,168,76,0.5);
}

.hero-image-wrap {
  display: flex;
  justify-content: center;
}

.hero-card {
  position: relative;
  /* La luz cae desde arriba: un cristal liso de un solo tono se lee como un
     rectángulo pegado a la foto, no como una superficie. */
  background: linear-gradient(157deg, rgba(255,255,255,0.115) 0%, rgba(255,255,255,0.042) 58%);
  border: 1px solid rgba(255,255,255,0.14);
  border-radius: var(--radius-lg);
  padding: 2.15rem 2rem 1.8rem;
  backdrop-filter: blur(14px) saturate(118%);
  box-shadow: 0 20px 54px -22px rgba(0,0,0,0.62), inset 0 1px 0 rgba(255,255,255,0.2);
  color: white;
  max-width: 360px;
  width: 100%;
  overflow: hidden;
}
/* Un filo dorado en el canto de arriba, desvanecido a los lados: pone la
   marca sin cargar la tarjeta de color. */
.hero-card::before {
  content: '';
  position: absolute; top: 0; left: 14%; right: 14%; height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold-claro-oscuro), transparent);
}

.hero-card-icon {
  /* El sprite ignora font-size: el tamaño se fija aquí, o el icono queda
     a 17px en un hueco de 3rem.
     Y va dentro de un medallón: un icono suelto en la esquina parece pegado;
     enmarcado se lee como parte del diseño. */
  width: 64px; height: 64px;
  display: grid; place-items: center;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 34%, rgba(233,195,108,0.2), rgba(233,195,108,0.05));
  border: 1px solid rgba(233,195,108,0.32);
  color: var(--gold-claro-oscuro);
  margin-bottom: 1.15rem;
  line-height: 1;
}
.hero-card-icon .ico { width: 38px; height: 38px; stroke-width: 1.4; }

.hero-card h3 {
  font-family: 'Playfair Display', serif;
  font-size: 1.45rem;
  line-height: 1.25;
  margin-bottom: 0.6rem;
  color: var(--gold-claro-oscuro);
}

.hero-card p {
  font-size: 0.92rem;
  color: rgba(255,255,255,0.74);
  line-height: 1.62;
}

/* REJILLA, no flex.
   En flex cada cifra ocupaba lo que le pedía su texto y no cabían las tres:
   «NIVELES DISPONIBLES» e «IDIOMAS ENSEÑADOS» se montaban una encima de otra
   y se leía «DISPONIBLESENSEÑADOS». Con tres columnas iguales y min-width:0
   cada una se queda en su sitio y el texto parte donde tiene que partir. */
.hero-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.7rem;
  margin-top: 1.45rem;
  padding-top: 1.25rem;
  border-top: 1px solid rgba(255,255,255,0.13);
}
.hero-stats .stat { min-width: 0; }

.stat span {
  display: block;
  font-size: 1.7rem;
  line-height: 1;
  font-weight: 700;
  color: var(--gold-claro-oscuro);
  font-family: 'Playfair Display', serif;
  font-variant-numeric: lining-nums tabular-nums;
}

.stat small {
  display: block;
  margin-top: 0.34rem;
  font-size: 0.67rem;
  line-height: 1.35;
  color: rgba(255,255,255,0.6);
  text-transform: uppercase;
  letter-spacing: 0.055em;
  overflow-wrap: anywhere;
}

/* ============================================
   SECTIONS COMMON
   ============================================ */

.section-container {
  max-width: none;
  margin: 0 auto;
  padding: 0 clamp(1rem, 4vw, 2.5rem);
}

.section-tag {
  display: inline-block;
  background: rgba(201,168,76,0.1);
  color: var(--gold);
  border: 1px solid rgba(201,168,76,0.3);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 0.3rem 0.9rem;
  border-radius: 50px;
  margin-bottom: 0.75rem;
}

.section-title {
  font-family: 'Playfair Display', serif;
  font-size: clamp(1.8rem, 4vw, 2.8rem);
  color: var(--navy);
  line-height: 1.25;
  margin-bottom: 1rem;
}

.section-subtitle {
  color: var(--gray-mid);
  font-size: 1.05rem;
  font-weight: 400;
  max-width: 560px;
  line-height: 1.7;
}

/* ============================================
   NOSOTROS
   ============================================ */

#nosotros {
  padding: clamp(2.25rem, 4.5vw, 3.5rem) 0;
  background: var(--cream);
}

.nosotros-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 5rem;
  align-items: center;
}

.nosotros-text .section-subtitle {
  margin-bottom: 1.5rem;
}

.nosotros-features {
  list-style: none;
  margin-bottom: 2rem;
}

.nosotros-features li {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  margin-bottom: 0.85rem;
  font-size: 0.95rem;
  color: #444;
}

.nosotros-features li .check {
  color: var(--gold);
  font-size: 1.1rem;
  flex-shrink: 0;
  margin-top: 2px;
}

.btn-secondary {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  background: transparent;
  border: 2px solid var(--navy);
  color: var(--navy);
  font-family: 'Nunito', sans-serif;
  font-weight: 700;
  font-size: 0.95rem;
  padding: 0.75rem 1.75rem;
  border-radius: 8px;
  cursor: pointer;
  text-decoration: none;
  transition: var(--transition);
}

.btn-secondary:hover {
  background: var(--navy);
  color: var(--white);
}

.nosotros-visual {
  position: relative;
}

.nosotros-img-main {
  width: 100%;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  object-fit: cover;
  aspect-ratio: 4/3;
}

.nosotros-badge-card {
  position: absolute;
  bottom: -20px;
  left: -20px;
  background: var(--navy);
  color: var(--white);
  padding: 1.25rem 1.5rem;
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  text-align: center;
}

.nosotros-badge-card .num {
  font-family: 'Playfair Display', serif;
  font-size: 2.2rem;
  color: var(--gold);
  display: block;
  font-weight: 700;
}

.nosotros-badge-card small {
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: rgba(255,255,255,0.6);
}

/* ============================================
   CURSOS
   ============================================ */

#cursos {
  padding: clamp(2.25rem, 4.5vw, 3.5rem) 0;
  background: var(--white);
}

.cursos-header {
  text-align: center;
  margin-bottom: 3.5rem;
}

.cursos-header .section-subtitle {
  margin: 0 auto;
}

.cursos-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 2rem;
}

.curso-card {
  background: var(--white);
  border: 1px solid #e8e8e8;
  border-radius: var(--radius-lg);
  padding: 2rem;
  box-shadow: var(--shadow);
  transition: var(--transition);
  position: relative;
  overflow: hidden;
}

.curso-card::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 4px;
  background: var(--navy);
  transition: height var(--transition);
}

.curso-card.frances::before { background: var(--red); }

.curso-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-lg);
}

.curso-card:hover::before {
  height: 6px;
}

/* La bandera, como franja a lo ancho de la cabecera y no como icono suelto.
   Con 2,5rem quedaba un sello diminuto sobre mucho blanco; así identifica la
   tarjeta desde lejos y da el color del idioma sin recurrir a un logotipo. */
.curso-flag {
  margin: -2rem -2rem 1.25rem;
  height: 76px;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  overflow: hidden;
  position: relative;
  display: block;
}
.curso-flag .bandera {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
}
/* Un velo oscuro por abajo: sin él, el borde de la bandera choca con el blanco
   de la tarjeta y se ve como un recorte. */
.curso-flag::after {
  content: '';
  position: absolute;
  inset: auto 0 0 0;
  height: 40%;
  background: linear-gradient(to top, rgba(10, 31, 68, 0.28), transparent);
  pointer-events: none;
}
/* La línea de color superior de la tarjeta sobra cuando hay franja: la
   bandera ya dice de qué idioma es. */
.curso-card:has(.curso-flag)::before { display: none; }

.curso-card h3 {
  font-family: 'Playfair Display', serif;
  font-size: 1.6rem;
  color: var(--navy);
  margin-bottom: 0.75rem;
}

.curso-card.frances h3 { color: var(--red); }

.curso-card p {
  color: #555;
  font-size: 0.95rem;
  margin-bottom: 1.5rem;
  line-height: 1.7;
}

.niveles-label {
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--gray-mid);
  font-weight: 700;
  margin-bottom: 0.6rem;
}

.niveles {
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}

.nivel {
  padding: 0.3rem 0.8rem;
  border-radius: 6px;
  font-weight: 700;
  font-size: 0.82rem;
  color: white;
}

.A1 { background: #2980b9; }
.A2 { background: #27ae60; }
.B1 { background: #8e44ad; }
.B2 { background: var(--red); }

/* ============================================
   PAGOS
   ============================================ */

/* La seccion suelta de pagos ya no existe: vive dentro del pie. Su regla de
   fondo crema seguia aqui y, por ser un id, ganaba a .pie — el pie salia en
   crema con el texto blanco encima, ilegible. */
.bancos-grid {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 1.5rem;
}

.banco-item {
  background: var(--white);
  border: 1px solid #e0e0e0;
  border-radius: var(--radius);
  padding: 1.25rem 1.75rem;
  min-width: 200px;
  cursor: pointer;
  transition: var(--transition);
  box-shadow: 0 2px 8px rgba(0,0,0,0.06);
}

.banco-item:hover {
  box-shadow: var(--shadow);
  transform: translateY(-2px);
  border-color: var(--gold);
}

.banco-header {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.banco-header img {
  height: 32px;
  object-fit: contain;
}

.banco-name {
  font-weight: 700;
  font-size: 0.88rem;
}

.banco-details {
  display: none;
  margin-top: 1rem;
  padding-top: 1rem;
  border-top: 1px dashed #e0e0e0;
  font-size: 0.88rem;
  color: #444;
  line-height: 1.8;
}

.banco-details.open {
  display: block;
}

.banco-details strong {
  color: var(--navy);
}

/* ============================================
   CONTACTO
   ============================================ */

#contacto {
  padding: clamp(2.25rem, 4.5vw, 3.5rem) 0;
  background: var(--white);
}

.contacto-grid {
  display: grid;
  /* El formulario pesa más que la columna de texto. Repartir a mitades dejaba
     media pantalla vacía debajo del texto. */
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
  gap: clamp(2rem, 4vw, 3.25rem);
  align-items: start;
}

.contacto-info {
  padding-top: 0;
}

/* Botones de contacto. Antes eran tres líneas de texto: un número escrito
   hay que seleccionarlo, copiarlo y pegarlo en otra aplicación, y en móvil
   eso es suficiente fricción para no escribir. Esto abre la conversación de
   una pulsación. */
.contacto-acciones {
  display: flex;
  flex-direction: column;
  gap: 0.7rem;
  margin-top: 1.5rem;
}

.cbtn {
  display: flex;
  align-items: center;
  gap: 0.9rem;
  padding: 0.9rem 1.1rem;
  border-radius: 14px;
  border: 1.5px solid rgba(var(--navy-rgb), 0.12);
  background: var(--white);
  text-decoration: none;
  color: var(--navy);
  transition: transform 0.18s var(--ease-out), box-shadow 0.18s var(--ease-out), border-color 0.18s;
}
.cbtn:hover,
.cbtn:focus-visible {
  transform: translateY(-2px);
  box-shadow: 0 12px 28px rgba(10, 31, 68, 0.12);
}

.cbtn-ico {
  width: 46px;
  height: 46px;
  border-radius: 12px;
  display: grid;
  place-items: center;
  flex: none;
  color: var(--white);
}
.cbtn-ico .ico { width: 22px; height: 22px; }

/* El icono de WhatsApp trae ya su verde de marca —es como se reconoce—, así
   que la casilla va en claro. Cuando la casilla era verde, el globo verde
   del icono desaparecía dentro y solo quedaba el auricular blanco. */
.cbtn-wa .cbtn-ico { background: #E6F9EE; border: 1px solid #B9E8CE; }
.cbtn-wa:hover { border-color: #25D366; }
.cbtn-mail .cbtn-ico { background: var(--navy); }
.cbtn-mail:hover { border-color: var(--gold); }

.cbtn-txt { display: flex; flex-direction: column; min-width: 0; }
/* El número de WhatsApp NO se escribe en pantalla, en ningún tamaño: el botón
   abre el chat con ese mismo número, y escrito solo alarga la tarjeta y deja el
   teléfono a la vista de los rastreadores de spam. Vale para la portada y para
   Capacítate, que comparten esta hoja. */
.cbtn-wa .cbtn-txt small { display: none; }
.cbtn-txt b {
  font-size: 0.98rem;
  font-weight: 800;
  letter-spacing: 0.01em;
}
.cbtn-txt small {
  font-size: 0.82rem;
  color: #6a7587;
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.contacto-nota {
  margin-top: 1rem;
  font-size: 0.82rem;
  color: #6a7587;
}

.contacto-form {
  background: var(--cream);
  border-radius: var(--radius-lg);
  padding: 2.5rem;
  box-shadow: var(--shadow);
}

.contacto-form h3 {
  font-family: 'Playfair Display', serif;
  color: var(--navy);
  font-size: 1.5rem;
  margin-bottom: 1.5rem;
}

.form-group {
  margin-bottom: 1.25rem;
}

.form-group label {
  display: block;
  font-size: 0.88rem;
  font-weight: 700;
  color: var(--navy);
  margin-bottom: 0.4rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.form-group input,
.form-group textarea {
  width: 100%;
  padding: 0.85rem 1rem;
  border: 1.5px solid #ddd;
  border-radius: 8px;
  font-family: 'Nunito', sans-serif;
  /* max(16px, …) evita el zoom automático de Safari iOS al enfocar. */
  font-size: max(16px, 0.95rem);
  color: var(--text-dark);
  background: var(--white);
  transition: border-color var(--transition);
  outline: none;
}

.form-group input:focus,
.form-group textarea:focus {
  border-color: var(--navy);
}

.form-group textarea {
  resize: vertical;
  min-height: 120px;
}

/* ============================================
   MENSAJE DE ÉXITO DEL FORMULARIO
   ============================================ */

#success-message {
  animation: fadeInUp 0.6s ease forwards;
}

#success-message h3 {
  font-family: 'Playfair Display', serif;
  color: var(--navy);
  font-size: 1.8rem;
  margin-bottom: 1rem;
  line-height: 1.3;
}

#success-message p {
  color: #555;
  font-size: 1rem;
  line-height: 1.8;
  margin-bottom: 2rem;
  max-width: 400px;
  margin-left: auto;
  margin-right: auto;
}

#success-message .btn-secondary {
  display: inline-block;
  padding: 0.9rem 2rem;
  background: var(--navy);
  color: white;
  border: none;
  border-radius: 8px;
  font-weight: 700;
  text-decoration: none;
  transition: var(--transition);
  box-shadow: 0 4px 12px rgba(10, 31, 68, 0.2);
}

#success-message .btn-secondary:hover {
  background: var(--gold);
  color: var(--navy);
  transform: translateY(-2px);
  box-shadow: 0 8px 20px rgba(201, 168, 76, 0.3);
}

/* Animación adicional */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.05); }
  100% { transform: scale(1); }
}

#success-message div:first-child {
  animation: pulse 2s infinite ease-in-out;
}

.btn-primary {
  width: 100%;
  padding: 0.9rem;
  background: var(--navy);
  color: var(--white);
  border: none;
  border-radius: 8px;
  font-family: 'Nunito', sans-serif;
  font-weight: 700;
  font-size: 1rem;
  cursor: pointer;
  transition: var(--transition);
  letter-spacing: 0.05em;
}

.btn-primary:hover {
  background: var(--gold);
  color: var(--navy);
}

/* ============================================
   FOOTER
   ============================================ */

/* ============================================
   PIE — pagos y cierre en una sola banda

   Antes eran dos franjas seguidas: la de pagos, con tres tarjetas blancas
   sueltas sobre crema, y debajo un pie de una línea. Las dos se veían
   incompletas por separado y juntas ocupaban más que esto.
   ============================================ */
/* El pie base. Lo comparten las páginas que no llevan la banda completa de la
   portada —cursos, nosotros, capacítate— y que se quedaron sin estilo al
   convertir el selector footer en .pie: el <footer> suelto perdió su fondo azul. */
footer:not(.pie) {
  background: var(--navy);
  color: rgba(255, 255, 255, 0.72);
  text-align: center;
  padding: 1.75rem clamp(1rem, 4vw, 2.5rem);
  font-size: 0.85rem;
}
footer:not(.pie) strong { color: var(--gold); }
footer:not(.pie) p { margin: 0; }
/* Los legales, pegados al copyright: el relleno de 10px que traian en linea
   dejaba una franja vacia al final de la pagina. */
footer:not(.pie) #bp-pie-legal { font-size: .8rem; opacity: .85; margin-top: .35rem; }
footer:not(.pie) a { color: rgba(255, 255, 255, 0.72); text-decoration: none; }
footer:not(.pie) a:hover { color: var(--gold); text-decoration: underline; }

.pie {
  background: var(--navy);
  color: rgba(255, 255, 255, 0.72);
  font-size: 0.9rem;
}

.pie-top {
  display: grid;
  grid-template-columns: 1.15fr 1.25fr 0.7fr;
  gap: clamp(1.5rem, 3.5vw, 3rem);
  padding-top: clamp(1.75rem, 3vw, 2.5rem);
  padding-bottom: clamp(1.5rem, 2.5vw, 2rem);
  align-items: start;
  font-size: 0.85rem;
}

.pie-escudo { width: 42px; height: auto; margin-bottom: 0.5rem; }
.pie-nombre {
  font-family: 'Playfair Display', Georgia, serif;
  color: var(--white);
  font-size: 1.08rem;
  font-weight: 800;
  line-height: 1.1;
}
.pie-lema { margin-top: 0.4rem; line-height: 1.55; max-width: 32ch; font-size: 0.82rem; }

.pie-h {
  color: var(--white);
  font-weight: 800;
  font-size: 0.7rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin-bottom: 0.7rem;
}
.pie-p { margin-bottom: 0.8rem; line-height: 1.5; font-size: 0.82rem; }

.pie-social { display: flex; gap: 0.5rem; margin-top: 1rem; flex-wrap: wrap; }
.pie-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.45rem 0.85rem;
  border-radius: 999px;
  border: 1.5px solid rgba(255, 255, 255, 0.2);
  color: rgba(255, 255, 255, 0.9);
  text-decoration: none;
  font-weight: 700;
  font-size: 0.78rem;
  transition: var(--transition);
}
.pie-chip:hover { background: var(--gold); border-color: var(--gold); color: var(--navy); }
.pie-chip .ico { width: 16px; height: 16px; }

.pie-enlaces { display: flex; flex-direction: column; gap: 0.38rem; }
.pie-enlaces a {
  color: rgba(255, 255, 255, 0.72);
  text-decoration: none;
  transition: var(--transition);
  width: fit-content;
}
.pie-enlaces a:hover { color: var(--gold); }
.pie-enlaces .pie-destaca {
  margin-top: 0.4rem;
  color: var(--navy);
  background: var(--gold);
  font-weight: 800;
  padding: 0.5rem 1.1rem;
  border-radius: 999px;
}
.pie-enlaces .pie-destaca:hover { color: var(--navy); filter: brightness(1.08); }

/* Los bancos, sobre el fondo oscuro: tarjetas translúcidas en vez de
   rectángulos blancos que rompían la banda. */
.pie .bancos-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));
  gap: 0.5rem;
  justify-content: start;
}
.pie .banco-item {
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 10px;
  padding: 0.55rem 0.6rem;
  min-width: 0;
  box-shadow: none;
  transition: var(--transition);
}
.pie .banco-item:hover { background: rgba(255, 255, 255, 0.11); border-color: var(--gold); }
.pie .banco-header { display: flex; align-items: center; gap: 0.55rem; }
.pie .banco-header img { width: 22px; height: 22px; border-radius: 6px; background: #fff; object-fit: contain; }
/* El nombre va en blanco: los colores de marca de cada banco, escritos a mano
   en el HTML, son ilegibles sobre azul oscuro. */
.pie .banco-name { color: #fff !important; font-weight: 700; font-size: 0.78rem; line-height: 1.2; }

/* La misma rejilla que .pie-top, para que los enlaces legales caigan bajo la
   columna de navegación en vez de pegados al borde de la pantalla. */
.pie-bajo {
  border-top: 1px solid rgba(255, 255, 255, 0.12);
  padding: 1.1rem clamp(1rem, 4vw, 2.5rem);
  display: grid;
  grid-template-columns: 1.15fr 1.25fr 0.7fr;
  gap: clamp(1.5rem, 3.5vw, 3rem);
  align-items: center;
  font-size: 0.82rem;
}
.pie-bajo > p { grid-column: 1 / 3; margin: 0; }
.pie-bajo > #bp-pie-legal { grid-column: 3; }
@media (max-width: 900px) {
  .pie-bajo { grid-template-columns: 1fr; gap: 0.5rem; text-align: center; }
  .pie-bajo > p, .pie-bajo > #bp-pie-legal { grid-column: 1; }
}
.pie-bajo strong { color: var(--gold); }
.pie-bajo a { color: rgba(255, 255, 255, 0.72); text-decoration: none; }
.pie-bajo a:hover { color: var(--gold); text-decoration: underline; }

@media (max-width: 900px) {
  .pie-top { grid-template-columns: 1fr 1fr; }
  .pie-marca { grid-column: 1 / -1; }
}
/* En el móvil el pie NO baja a una columna: ver «MÓVIL» al final del archivo. */

/* ============================================
   MODAL
   ============================================ */

.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(10,31,68,0.6);
  backdrop-filter: blur(4px);
  z-index: 8000;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s ease, visibility 0.3s ease;
  padding: 1rem;
}

.modal-overlay.open {
  opacity: 1;
  visibility: visible;
}

.modal {
  background: var(--white);
  border-radius: var(--radius-lg);
  width: min(75vw, 700px);
  max-height: 80vh;
  overflow-y: auto;
  box-shadow: 0 24px 80px rgba(10,31,68,0.3);
  transform: scale(0.92) translateY(20px);
  transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
  position: relative;
}

.modal-overlay.open .modal {
  transform: scale(1) translateY(0);
}

.modal-header {
  padding: 0;
  position: relative;
}

.modal-header-img {
  width: 100%;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  display: block;
  max-height: 160px;
  object-fit: cover;
  object-position: center;
}

.modal-close {
  position: absolute;
  top: 12px;
  right: 12px;
  background: rgba(255,255,255,0.9);
  border: none;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  font-size: 1.1rem;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--navy);
  transition: var(--transition);
  z-index: 10;
}

.modal-close:hover {
  background: var(--white);
  transform: rotate(90deg);
}

.modal-body {
  padding: 2rem 2.25rem 2.5rem;
}

.modal-body h2 {
  font-family: 'Playfair Display', serif;
  color: var(--navy);
  font-size: 1.5rem;
  margin-bottom: 0.5rem;
}

.modal-body .modal-sub {
  color: var(--gray-mid);
  font-size: 0.9rem;
  margin-bottom: 1.5rem;
  padding-bottom: 1.25rem;
  border-bottom: 1px solid #eee;
}

.modal-body p {
  color: #444;
  font-size: 0.95rem;
  line-height: 1.75;
  margin-bottom: 1rem;
}

/* ============================================
   ANIMATIONS
   ============================================ */

@keyframes fadeInDown {
  from { opacity: 0; transform: translateY(-30px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ============================================
   RESPONSIVE
   ============================================ */

@media (max-width: 1024px) {
  .hero-content {
    grid-template-columns: 1fr;
    gap: 3rem;
    text-align: center;
  }
  .hero-image-wrap {
    justify-content: center;
  }
  .hero-badges { justify-content: center; }
  .nosotros-grid { grid-template-columns: 1fr; gap: 3rem; }
  .contacto-grid { grid-template-columns: 1fr; gap: 3rem; }
  .modal { width: min(90vw, 700px); }
}

@media (max-width: 1100px) {
  #nosotros .nosotros-grid {
    grid-template-columns: 1fr 1fr;
  }
  .promo-afiche {
    grid-column: 1 / -1;
  }
}

@media (max-width: 768px) {
  /* El menú móvil se define una sola vez, más abajo (mismo breakpoint).
     Aquí solo van los ajustes de secciones. */
  #inicio { min-height: 70vh; }
  .nosotros-badge-card { left: 0; bottom: -15px; }
  #nosotros .nosotros-grid { grid-template-columns: 1fr; }
  .promo-afiche { grid-column: auto; }
  .promo-step-precio { font-size: 1.6rem; }

  .modal { width: min(95vw, 700px); }
  .modal-body { padding: 1.5rem; }
}

@media (max-width: 480px) {
  .hero-stats { gap: 1rem; }
  .cursos-grid { grid-template-columns: 1fr; }
}

/* ============================================
   HEADER DUAL LOGO (JVA)
   ============================================ */
.header-logos {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.header-logo-jva {
  height: 46px;
  width: auto;
  border-radius: 8px;
  transition: opacity 0.25s, transform 0.25s;
}

.jva-link {
  display: flex;
  align-items: center;
}

.jva-link:hover .header-logo-jva {
  opacity: 0.85;
  transform: scale(1.06);
}

/* Banco items: no toggle, no details shown */
.banco-item { cursor: default; }
.banco-item .banco-details { display: none !important; }

/* ============================================
   NOSOTROS — GRID 3 COLUMNAS (texto | imagen | afiche)
   ============================================ */

#nosotros .nosotros-grid {
  grid-template-columns: 1fr 1fr 1fr;
  gap: 2.5rem;
  align-items: start;
}

.nosotros-visual {
  position: relative;
}

/* ============================================
   AFICHE PROMOCIONAL (tercera columna)
   ============================================ */

/* El afiche es editable desde el panel admin (Publicidad → Editar promoción).
   Las variables --pa-* las inyecta js/promo-afiche.js; los valores tras la coma
   son el respaldo estático y reproducen el diseño original. */
.promo-afiche {
  background: linear-gradient(145deg, var(--pa-bg, var(--navy)) 0%, var(--pa-bg2, #1a3a6e) 100%);
  border-radius: var(--radius-lg);
  padding: 1.75rem 1.5rem;
  box-shadow: var(--shadow-lg);
  color: var(--pa-text, #fff);
  position: relative;
  overflow: hidden;
  border: 1px solid rgba(var(--pa-accent-rgb, 201,168,76), 0.25);
}

.promo-afiche::before {
  content: '';
  position: absolute;
  top: -40px; right: -40px;
  width: 140px; height: 140px;
  background: rgba(var(--pa-accent-rgb, 201,168,76), 0.07);
  border-radius: 50%;
  pointer-events: none;
}

.promo-badge-top {
  display: inline-block;
  background: var(--pa-accent, var(--gold));
  color: var(--pa-bg, var(--navy));
  font-weight: 800;
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 0.3rem 0.9rem;
  border-radius: 50px;
  margin-bottom: 0.75rem;
}

.promo-flags {
  font-size: 0.9rem;
  color: rgba(var(--pa-ov, 255,255,255), 0.7);
  margin-bottom: 1.25rem;
  font-weight: 500;
}

.promo-steps {
  display: flex;
  flex-direction: column;
  gap: 0;
}

/* Variante "tarjetas": rejilla que se adapta al ancho, sin flechas. */
.promo-steps--tarjetas {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 0.6rem;
}

/* Variante "compacto": escalones más bajos, para promociones de muchos pasos. */
.promo-steps--compacto { gap: 0.4rem; }
.promo-steps--compacto .promo-step { padding: 0.6rem 0.9rem; }
.promo-steps--compacto .promo-step-precio { font-size: 1.4rem; margin-bottom: 0.15rem; }

.promo-step {
  background: rgba(var(--pa-ov, 255,255,255), 0.06);
  border: 1px solid rgba(var(--pa-ov, 255,255,255), 0.1);
  border-radius: var(--radius);
  padding: 1rem 1.25rem;
  transition: background 0.2s;
}

.promo-step.highlight {
  background: rgba(var(--pa-accent-rgb, 201,168,76), 0.15);
  border-color: rgba(var(--pa-accent-rgb, 201,168,76), 0.4);
}

.promo-step-mes {
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: rgba(var(--pa-ov, 255,255,255), 0.55);
  font-weight: 700;
  margin-bottom: 0.25rem;
}

.promo-step-precio {
  font-family: 'Playfair Display', serif;
  font-size: 2rem;
  font-weight: 700;
  color: var(--pa-accent, var(--gold));
  line-height: 1;
  margin-bottom: 0.4rem;
}

.promo-step-detalle {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 0.1rem 0.75rem;
  font-size: 0.82rem;
  color: rgba(var(--pa-ov, 255,255,255), 0.75);
  margin-bottom: 0.35rem;
}

.promo-step-detalle strong {
  color: var(--pa-text, var(--white));
  font-weight: 700;
  text-align: right;
}

.promo-step-nota {
  font-size: 0.78rem;
  color: rgba(var(--pa-ov, 255,255,255), 0.45);
  font-style: italic;
}

.promo-step-bonus {
  font-size: 0.78rem;
  color: rgba(var(--pa-accent-rgb, 201,168,76), 0.95);
  font-weight: 700;
  margin-top: 0.35rem;
  line-height: 1.35;
}

.promo-arrow {
  text-align: center;
  color: var(--pa-accent, var(--gold));
  font-size: 1.1rem;
  padding: 0.3rem 0;
  opacity: 0.7;
}

/* ── Afiche «niveles»: la tarifa completa, nivel por nivel ───
   Escrito desde el móvil: una columna, tarjetas que caben enteras en 360 px y
   ninguna tipografía que obligue a desplazarse en horizontal. En pantalla
   ancha, los tres tramos se ponen en fila.
   Las pestañas son radios ocultos: sin JavaScript, para que la vista previa
   del panel —un iframe sin guiones— enseñe exactamente lo que se publica. */
.pa-niveles { text-align: center; }

.pa-pct {
  font-family: 'Playfair Display', serif;
  font-size: clamp(1.45rem, 7vw, 2.3rem); line-height: 1.05; font-weight: 700;
  color: var(--pa-accent, var(--gold)); margin: 0.1rem 0 0.5rem;
}
.pa-urgente { font-size: 0.8rem; color: rgba(var(--pa-ov, 255,255,255), 0.75); margin: 0 0 0.6rem; line-height: 1.4; }

/* El desplegable de promociones: el precio de todos es el regular, y cada
   quien elige el descuento que le toca. Al lado, el «?» que abre la misma
   ficha del pop-up —un solo sitio que la escribe, para que no se separen—. */
.pa-promo { margin: 0 0 0.9rem; text-align: left; }
.pa-promo-lbl {
  display: block; font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.08em;
  color: rgba(var(--pa-ov, 255,255,255), 0.6); margin-bottom: 0.35rem;
}
.pa-promo-fila { display: flex; gap: 0.5rem; align-items: center; }
.pa-sel {
  flex: 1; min-width: 0; font: inherit; font-size: 0.85rem;
  padding: 0.5rem 0.7rem; border-radius: 10px; cursor: pointer;
  background: rgba(var(--pa-ov, 255,255,255), 0.1);
  border: 1px solid rgba(var(--pa-ov, 255,255,255), 0.25);
  color: var(--pa-text, #fff);
}
/* Las opciones las pinta el sistema: sobre fondo oscuro hay que forzar el
   color o en Windows salen blancas sobre blanco. */
.pa-sel option { color: #10203c; background: #fff; }
.pa-ayuda {
  flex: none; width: 30px; height: 30px; border-radius: 50%; cursor: pointer;
  font: 700 0.9rem/1 var(--ff-b, inherit);
  background: rgba(var(--pa-ov, 255,255,255), 0.12);
  border: 1px solid rgba(var(--pa-ov, 255,255,255), 0.28);
  color: rgba(var(--pa-ov, 255,255,255), 0.75);
  transition: background 0.15s, color 0.15s;
}
.pa-ayuda:hover { background: var(--pa-accent, var(--gold)); color: var(--pa-bg, var(--navy)); border-color: transparent; }

.pa-radio { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.pa-tabs { display: flex; flex-wrap: wrap; gap: 0.35rem; justify-content: center; margin: 0 0 0.8rem; }
.pa-tabs label {
  padding: 0.35rem 0.95rem; border-radius: 99px; cursor: pointer;
  border: 1px solid rgba(var(--pa-ov, 255,255,255), 0.22);
  font-size: 0.8rem; font-weight: 800; color: var(--pa-text, #fff);
  transition: background 0.15s, color 0.15s;
}
.pa-tabs label:hover { background: rgba(var(--pa-ov, 255,255,255), 0.12); }
/* El radio está oculto, así que el foco del teclado se enseña en su fila. */
.pa-radio:focus-visible ~ .pa-tabs { outline: 2px solid var(--pa-accent, var(--gold)); outline-offset: 4px; border-radius: 99px; }

.pa-panel { display: none; text-align: left; }
.pa-cards { display: grid; gap: 0.6rem; }
.pa-card {
  background: rgba(var(--pa-ov, 255,255,255), 0.06);
  border: 1px solid rgba(var(--pa-ov, 255,255,255), 0.1);
  border-radius: 12px; padding: 0.8rem 0.9rem;
}
.pa-card.destacada {
  background: rgba(var(--pa-accent-rgb, 201,168,76), 0.14);
  border-color: rgba(var(--pa-accent-rgb, 201,168,76), 0.42);
}
.pa-card h4 {
  margin: 0 0 0.3rem; font-size: 0.7rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.08em;
  color: rgba(var(--pa-ov, 255,255,255), 0.6);
}
.pa-precio { display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap; margin: 0 0 0.15rem; }
.pa-precio s { font-size: 0.95rem; color: rgba(var(--pa-ov, 255,255,255), 0.5); }
.pa-precio strong {
  font-family: 'Playfair Display', serif; font-size: 1.75rem; line-height: 1;
  color: var(--pa-accent, var(--gold));
}
.pa-ahorro {
  display: inline-block; margin: 0 0 0.35rem; font-size: 0.72rem; font-weight: 800;
  padding: 0.15rem 0.55rem; border-radius: 99px;
  background: rgba(var(--pa-accent-rgb, 201,168,76), 0.2); color: var(--pa-text, #fff);
}
.pa-nota { font-size: 0.76rem; font-style: italic; color: rgba(var(--pa-ov, 255,255,255), 0.5); margin: 0.25rem 0 0; line-height: 1.4; }
.pa-bonus { font-size: 0.76rem; font-weight: 700; color: rgba(var(--pa-accent-rgb, 201,168,76), 0.95); margin: 0.3rem 0 0; line-height: 1.35; }
.pa-inicial { margin: 0.75rem 0 0; font-size: 0.85rem; text-align: center; color: rgba(var(--pa-ov, 255,255,255), 0.8); }
.pa-inicial strong { color: var(--pa-accent, var(--gold)); font-size: 1.05rem; }
.pa-nota-legal { margin: 0.6rem 0 0; font-size: 0.7rem; color: rgba(var(--pa-ov, 255,255,255), 0.45); }

@media (min-width: 620px) {
  .pa-cards { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
}

/* El diálogo del afiche en el móvil: el cuadro entero a la vista, no un cartel
   gigante al que hay que asomarse. */
@media (max-width: 560px) {
  .promo-modal { padding: 8px; }
  .promo-modal-caja { max-height: 94vh; }
  .promo-afiche { padding: 1.1rem 0.9rem; border-radius: 14px; }
  .promo-modal-x { top: 8px; right: 10px; width: 30px; height: 30px; font-size: 18px; }

  /* En el móvil cada tramo es una FILA, no una tarjeta: etiqueta a la
     izquierda, precio a la derecha. Apiladas como tarjetas, el cuadro medía
     dos pantallas y había que desplazarse para ver el precio del cuarto mes,
     que es justo lo que se viene a mirar. */
  .pa-card {
    padding: 0.55rem 0.7rem;
    display: grid; grid-template-columns: minmax(0, 1fr) auto;
    align-items: center; gap: 0.15rem 0.6rem;
  }
  .pa-card h4 { grid-column: 1; margin: 0; font-size: 0.66rem; }
  .pa-precio { grid-column: 2; grid-row: 1 / span 2; justify-content: flex-end; margin: 0; }
  .pa-precio strong { font-size: 1.35rem; }
  .pa-precio s { font-size: 0.8rem; }
  .pa-ahorro { grid-column: 1; margin: 0; font-size: 0.62rem; padding: 0.1rem 0.45rem; }
  .pa-card .promo-step-detalle { grid-column: 1 / -1; font-size: 0.72rem; margin: 0.2rem 0 0; }
  .pa-nota, .pa-bonus { grid-column: 1 / -1; margin: 0.1rem 0 0; font-size: 0.7rem; }
  .pa-tabs label { padding: 0.3rem 0.8rem; font-size: 0.76rem; }
  .pa-inicial { margin-top: 0.55rem; font-size: 0.8rem; }
}

/* Pantallas BAJAS (un móvil normal en vertical ya lo es, y un plegable cerrado
   más): se quita lo que adorna, nunca lo que informa del precio. */
@media (max-height: 760px) {
  .pa-nota, .pa-bonus { display: none; }
  .promo-espera { display: none; }
  .promo-cta-wrap { margin-top: 0.9rem; padding-top: 0.9rem; }
}

.promo-cta-wrap {
  margin-top: 1.25rem;
  padding-top: 1.25rem;
  border-top: 1px solid rgba(var(--pa-ov, 255,255,255), 0.1);
  text-align: center;
}

.promo-espera {
  font-size: 0.9rem;
  color: rgba(var(--pa-ov, 255,255,255), 0.6);
  margin-bottom: 0.6rem;
  font-style: italic;
}

.promo-urgencia {
  font-size: 0.75rem;
  color: rgba(var(--pa-ov, 255,255,255), 0.5);
  margin-top: 0.6rem;
  line-height: 1.4;
}

.promo-cta-btn {
  display: inline-block;
  background: var(--pa-accent, var(--gold));
  color: var(--pa-bg, var(--navy));
  font-weight: 800;
  font-size: 0.88rem;
  padding: 0.65rem 1.4rem;
  border-radius: 8px;
  text-decoration: none;
  transition: background 0.25s, transform 0.2s;
  margin-bottom: 0.65rem;
}

.promo-cta-btn:hover {
  background: var(--gold-light);
  transform: translateY(-2px);
}

.promo-email {
  display: block;
  font-size: 0.78rem;
  color: rgba(255,255,255,0.5);
  text-decoration: none;
  transition: color 0.2s;
}

.promo-email:hover {
  color: var(--gold);
}

@media (max-width: 480px) {
/* ============================================
   LANGUAGE SWITCHER — encima del afiche
   ============================================ */
}

/* «Sobre nosotros»: lo que se lee y la foto. El afiche de precios estaba
   en una tercera columna y ahora vive en su propia seccion (#promocion). */
#nosotros .nosotros-grid {
  grid-template-columns: 1fr 1fr;
}

/* Selector de idioma del sitio */
.lang-main-switcher {
  display: flex;
  gap: 0.5rem;
  justify-content: flex-start;
  flex-wrap: wrap;
  padding: 0;
  margin: 0;
  width: 100%;
}

.lang-main-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.45rem 0.9rem;
  border: 2px solid #ddd;
  border-radius: 50px;
  background: var(--white);
  font-family: 'Nunito', sans-serif;
  font-size: 0.82rem;
  font-weight: 700;
  cursor: pointer;
  color: var(--navy);
  transition: all 0.2s;
  letter-spacing: 0.04em;
  white-space: nowrap;
  -webkit-appearance: none;
  appearance: none;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
}

.lang-main-btn:hover {
  border-color: var(--gold);
  background: rgba(201,168,76,0.08);
}

.lang-main-btn.active {
  background: var(--navy);
  border-color: var(--navy);
  color: var(--white);
}

/* ============================================
   BADGE 100% — reposicionado al centro vertical
   ============================================ */

/* La imagen tiene aspect-ratio 4/3, el badge se coloca
   en el centro vertical con top:50% en lugar de bottom:-20px */
.nosotros-badge-card {
  position: absolute;
  top: 50%;
  left: -20px;
  bottom: auto;
  transform: translateY(-50%);
}

/* El contador «20 cupos disponibles» estaba justo encima del aviso que dice
   exactamente lo mismo, en la misma seccion. Se queda el aviso, que es el que
   se edita desde el panel. Lo responsive de «Sobre nosotros» esta mas abajo,
   donde ya estaba escrito por segunda vez. */

/* ============================================
   CURSOS PAGE - NIVELES COMO BOTONES
   ============================================ */

/* Asegurar que los enlaces dentro de .niveles se vean como botones */
.niveles a.nivel {
  text-decoration: none;
  color: white;
  display: inline-block;
  transition: all 0.2s ease;
  cursor: pointer;
  border: none;
}

.niveles a.nivel:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 10px rgba(0,0,0,0.2);
  filter: brightness(1.1);
}

.niveles a.nivel:active {
  transform: translateY(0);
}

.niveles a.nivel:focus {
  outline: 3px solid var(--gold);
  outline-offset: 2px;
}

/* Mantener los colores originales de los niveles */
.niveles a.nivel.A1 { background: #2980b9; }
.niveles a.nivel.A2 { background: #27ae60; }
.niveles a.nivel.B1 { background: #8e44ad; }
.niveles a.nivel.B2 { background: var(--red); }
/* Los dos niveles de arriba y los dos programas que no son un nivel. Estos
   últimos llevan nombre, así que no caben en la misma píldora cuadrada. */
.niveles a.nivel.C1 { background: #d35400; }
.niveles a.nivel.C2 { background: #16a085; }
.niveles a.nivel.CONV, .niveles a.nivel.GRAM { background: var(--navy); width: auto; padding: 0 0.7rem; border-radius: 999px; font-size: 0.78rem; }

/* Responsive para móviles */
@media (max-width: 480px) {
  .niveles a.nivel {
    padding: 0.3rem 0.6rem;
    font-size: 0.75rem;
  }
}

/* ============================================
   RESPONSIVE COMPLETO — BONJOUR PARIS
   Breakpoints: 1200 | 1024 | 900 | 768 | 600 | 480 | 360
   ============================================ */

/* ---- UTILITIES ---- */
.visually-hidden {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* ---- HEADER RESPONSIVE ---- */
@media (max-width: 900px) {
  .header-inner { padding: 0 1.25rem; }
  nav a { font-size: 0.85rem; padding: 0.45rem 0.75rem; }
}

@media (max-width: 768px) {
  .header-logo { height: 40px; }
  .header-logo-jva { height: 36px; }
  nav {
    display: none;
    position: absolute;
    top: 100%;
    /* Desplegable estrecho anclado al ☰: ocupa solo el ancho del texto,
       no de borde a borde de la pantalla. */
    left: auto; right: 0;
    width: max-content;
    min-width: 160px;
    max-width: min(78vw, 300px);
    background: var(--white);
    flex-direction: column;
    align-items: stretch;
    padding: 0.5rem;
    box-shadow: 0 8px 24px rgba(10,31,68,0.12);
    gap: 0.15rem;
    border-top: 2px solid var(--gold);
    border-radius: 0 0 12px 12px;
    max-height: calc(100vh - 70px);
    overflow-y: auto;
  }
  nav.open { display: flex; }
  nav a {
    padding: 0.7rem 0.9rem;
    border-radius: 8px;
    font-size: 0.95rem;
    width: auto;
    text-align: left;
    white-space: nowrap;
  }
  nav a::after { display: none; }
  .nav-cta, .nav-cta-gold {
    margin: 0.25rem 0 0;
    text-align: center !important;
  }
  .hamburger { display: flex; }
  .header-inner { position: relative; }
}

/* ---- HERO RESPONSIVE ---- */
@media (max-width: 1024px) {
  .hero-content {
    grid-template-columns: 1fr;
    gap: 2.5rem;
    text-align: center;
    padding: 4rem 1.5rem;
  }
  .hero-badges { justify-content: center; }
  .hero-image-wrap { justify-content: center; }
  .hero-card { max-width: 400px; }
}

@media (max-width: 600px) {
  #inicio { min-height: auto; }
  .hero-content { padding: 3rem 1rem; gap: 2rem; }
  .hero-card { max-width: 100%; }
  .hero-stats { flex-wrap: wrap; gap: 1rem; justify-content: center; }
  .stat span { font-size: 1.5rem; }
  .hero-cta { width: 100%; justify-content: center; }
}

/* ---- SECTIONS PADDING ---- */
@media (max-width: 768px) {
  #nosotros, #cursos, #contacto { padding: 4rem 0; }
  .section-container { padding: 0 1.25rem; }
}
@media (max-width: 480px) {
  #nosotros, #cursos, #contacto { padding: 3rem 0; }
  .section-container { padding: 0 1rem; }
}

/* ---- NOSOTROS RESPONSIVE ---- */
@media (max-width: 768px) {
  #nosotros .nosotros-grid { grid-template-columns: 1fr; gap: 2rem; }
  .nosotros-visual { padding-bottom: 3.5rem; }
  .nosotros-badge-card { top: auto; bottom: -15px; left: 0; transform: none; }
  .nosotros-img-main { aspect-ratio: 16/9; }
}

@media (max-width: 480px) {
  .nosotros-features li { font-size: 0.9rem; }
  .btn-secondary { width: 100%; justify-content: center; }
  .promo-step-precio { font-size: 1.6rem; }
}

/* ---- CURSOS RESPONSIVE ---- */
@media (max-width: 900px) {
  .cursos-grid { grid-template-columns: 1fr; max-width: 520px; margin: 0 auto; }
}
@media (max-width: 480px) {
  .cursos-grid { max-width: 100%; }
  .curso-card { padding: 1.5rem; }
  .curso-card h3 { font-size: 1.35rem; }
}

/* ---- CONTACTO RESPONSIVE ---- */
@media (max-width: 1024px) {
  .contacto-grid { grid-template-columns: 1fr; gap: 2.5rem; }
}
@media (max-width: 480px) {
  .contacto-form { padding: 1.5rem; }
  .contacto-items li { font-size: 0.9rem; }
  .contacto-items .icon-wrap { width: 38px; height: 38px; font-size: 1rem; }
}

/* ---- PAGOS RESPONSIVE ---- */
@media (max-width: 768px) {
  .bancos-grid { gap: 1rem; }
  .banco-item { min-width: 160px; padding: 1rem 1.25rem; }
}
@media (max-width: 480px) {
}

/* ---- MODAL RESPONSIVE ---- */
@media (max-width: 768px) {
  .modal { width: min(96vw, 700px); }
  .modal-body { padding: 1.5rem; }
  .modal-body h2 { font-size: 1.3rem; }
  .modal-header-img { max-height: 120px; }
}
@media (max-width: 480px) {
  .modal { width: 100%; margin: 0 0.5rem; border-radius: 12px 12px 0 0; }
  .modal-overlay { align-items: flex-end; padding: 0; }
  .modal { max-height: 88vh; }
}

/* ---- FOOTER RESPONSIVE ---- */
@media (max-width: 480px) {
  footer { font-size: 0.82rem; padding: 1.5rem 1rem; }
}

/* ---- WELCOME SCREEN RESPONSIVE ---- */
@media (max-width: 480px) {
}

/* ---- BACK-BAR (capacitate / nosotros / cursos / certificado pages) ---- */
.back-bar {
  background: var(--cream);
  padding: 0.75rem 2rem;
  border-bottom: 1px solid #e8e0d0;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 1rem;
  position: sticky;
  top: var(--header-h);
  z-index: 999;
}
.back-link {
  display: inline-flex; align-items: center; gap: 0.5rem;
  color: var(--navy); font-weight: 600; font-size: 0.9rem;
  text-decoration: none; transition: gap 0.2s;
}
.back-link:hover { gap: 0.8rem; }
.lang-switcher-inline { display: flex; gap: 0.5rem; }
.lang-btn {
  display: flex; align-items: center; gap: 0.4rem;
  padding: 0.45rem 1rem; border: 2px solid #ddd; border-radius: 50px;
  background: var(--white); font-family: 'Nunito', sans-serif;
  font-size: 0.82rem; font-weight: 700; cursor: pointer;
  color: var(--navy); transition: all 0.2s; letter-spacing: 0.04em;
  touch-action: manipulation; /* prevent 300ms tap delay on mobile */
  -webkit-tap-highlight-color: transparent; user-select: none;
}
.lang-btn:hover { border-color: var(--gold); background: rgba(201,168,76,0.08); }
.lang-btn.active { background: var(--navy); border-color: var(--navy); color: var(--white); }

@media (max-width: 600px) {
  .back-bar {
    padding: 0.6rem 1rem;
    top: var(--header-h);
    flex-wrap: wrap;
    gap: 0.5rem;
  }
  .lang-switcher-inline, .lang-switcher { 
    gap: 0.35rem;
    justify-content: flex-start;
  }
  .lang-btn { padding: 0.35rem 0.7rem; font-size: 0.78rem; }
}

/* ---- CAPACITATE PAGE RESPONSIVE ---- */
@media (max-width: 768px) {
  .cap-hero { padding: 4rem 1.25rem 5rem; }
  .cap-hero h1 { font-size: clamp(1.8rem, 7vw, 2.5rem); }
}
@media (max-width: 480px) {
  .cap-hero { padding: 3rem 1rem 4rem; }
}

/* ---- NOSOTROS PAGE (np-) RESPONSIVE ---- */
@media (max-width: 768px) {
  .np-hero { padding: 4rem 1.25rem 5rem; }
  .np-hero h1 { font-size: clamp(1.8rem, 7vw, 2.5rem); }
}

/* Las páginas de cursos tienen su hoja propia: css/cursos.css.
   Aquí quedaban cuatro selectores (.cursos-page-hero, .niveles-filter,
   .cursos-list-grid, .nivel-filter-btn) de una versión anterior de esas
   páginas que ya no existe en ningún HTML. */

/* ---- PROMO AFICHE ---- */
@media (max-width: 480px) {
  .promo-afiche { padding: 1.25rem 1rem; }
  .promo-step-precio { font-size: 1.5rem; }
  .lang-main-btn { padding: 0.4rem 0.75rem; font-size: 0.78rem; }
  .lang-main-switcher { gap: 0.35rem; }
}

/* ---- SMALL PHONES (360px) ---- */
@media (max-width: 360px) {
  .section-title { font-size: 1.6rem; }
  .hero-card { padding: 1.25rem; }
  .hero-stats { gap: 0.75rem; }
  .stat span { font-size: 1.4rem; }
  nav a { font-size: 0.88rem; }
  .contacto-form { padding: 1.25rem; }
  /* No se baja de 16px: por debajo, iOS hace zoom al enfocar. */
  .form-group input, .form-group textarea { font-size: max(16px, 0.9rem); }
}

/* ============================================
   SECURITY STYLES — prevent layout injection
   ============================================ */

/* Prevent user content from breaking layout */
.contacto-form input, .contacto-form textarea {
  word-break: break-word;
  overflow-wrap: break-word;
}

/* Safe images */
img {
  max-width: 100%;
  height: auto;
  display: block;
}
/* ── Accesibilidad: foco de teclado + movimiento reducido ── */
:focus-visible { outline: 3px solid #1A3A6B; outline-offset: 2px; border-radius: 4px; }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  [data-reveal] { opacity: 1 !important; transform: none !important; }
}

/* El banner de promoción. Si no hay promoción activa el div queda vacío y
   la sección no debe dejar un hueco. */
.promo-banner-sec { padding: clamp(1.25rem, 3vw, 2.25rem) 0 0; }
.promo-banner-sec:has(#bp-promo-banner:empty) { padding: 0; }

/* ── Tarjetas de curso: los datos que se preguntan antes de decidir ──
   Faltaba lo obvio —si es online, cuánto dura, cuántas clases— y una salida:
   había que volver arriba a buscar el botón. */
.curso-metas {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem;
  margin: 0.9rem 0 1.1rem;
}
.curso-meta {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  background: var(--cream);
  border: 1px solid #ece4d4;
  border-radius: 999px;
  padding: 0.35rem 0.8rem;
  font-size: 0.78rem;
  font-weight: 700;
  color: #5b6577;
}
.curso-meta .ico { width: 15px; height: 15px; color: var(--gold); flex: none; }

.curso-cta {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  margin-top: 1.25rem;
  padding: 0.75rem 1.4rem;
  border-radius: 999px;
  font-weight: 800;
  font-size: 0.88rem;
  text-decoration: none;
  background: var(--navy);
  color: var(--white);
  transition: transform 0.18s var(--ease-out), box-shadow 0.18s var(--ease-out), background 0.18s;
}
.curso-cta .ico { width: 16px; height: 16px; transition: transform 0.18s var(--ease-out); }
.curso-cta:hover { transform: translateY(-2px); }
.curso-cta:hover .ico { transform: translateX(3px); }
/* Cada curso tira de su propio color al pasar por encima: el francés al rojo
   de su bandera, el inglés al azul. Es la misma señal que ya da la línea
   superior de la tarjeta. */
.cta-fr:hover { background: var(--red); box-shadow: 0 10px 24px rgba(237, 41, 57, 0.3); }
.cta-en:hover { background: #012169; box-shadow: 0 10px 24px rgba(1, 33, 105, 0.3); }

/* Aviso de «copiado» en los enlaces de correo. Sin esto, pulsar el botón en un
   equipo sin cliente de correo no produce ninguna señal. */
a[href^="mailto:"] { position: relative; }
a[href^="mailto:"].copiado::after {
  content: 'Correo copiado';
  position: absolute;
  left: 50%;
  bottom: calc(100% + 8px);
  transform: translateX(-50%);
  background: var(--navy);
  color: var(--white);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  padding: 0.35rem 0.7rem;
  border-radius: 8px;
  white-space: nowrap;
  pointer-events: none;
  animation: bpCopiado 2.2s ease forwards;
  z-index: 5;
}
@keyframes bpCopiado {
  0% { opacity: 0; transform: translate(-50%, 6px); }
  12%, 82% { opacity: 1; transform: translate(-50%, 0); }
  100% { opacity: 0; transform: translate(-50%, -4px); }
}


/* ============================================================
   MÓVIL: reducir, no apilar

   El sitio pasaba a una sola columna en cuanto la pantalla bajaba de 560px, y
   el resultado era una tira vertical larguísima: el pie ocupaba tres
   pantallas para decir cuatro cosas.

   La regla aquí es otra. Lo que se puede seguir leyendo en dos columnas
   —el pie, los datos del héroe, las fichas de banco, las píldoras— se queda
   en dos y se le baja el tamaño. Lo que NO se puede —la prosa, las tarjetas
   de curso con su lista de niveles— sigue en una, pero se le quita relleno y
   se le ajusta el tipo para que ocupe bastante menos alto.

   El suelo son 320px. Por debajo de eso no hay teléfonos en uso.
   ============================================================ */

/* ── El pie, en dos columnas hasta el final ───────────────── */
@media (max-width: 560px) {
  .pie-top {
    grid-template-columns: 1fr 1fr;
    gap: 1.1rem 1rem;
    font-size: 0.8rem;
    padding-top: 1.5rem;
    padding-bottom: 1.1rem;
  }
  /* La marca cruza las dos: lleva el lema, que sí necesita ancho. */
  .pie-marca { grid-column: 1 / -1; }
  .pie-lema { max-width: none; font-size: 0.78rem; }
  .pie-h { font-size: 0.74rem; margin-bottom: 0.3rem; }
  .pie-p { font-size: 0.76rem; margin-bottom: 0.55rem; }
  .pie-escudo { width: 34px; margin-bottom: 0.35rem; }
  .pie-nombre { font-size: 1.05rem; }
  .pie-enlaces { gap: 0.3rem; }
  .pie-enlaces a { font-size: 0.8rem; }
  .pie-social { margin-top: 0.7rem; gap: 0.4rem; }
  .pie-chip { padding: 0.4rem 0.7rem; font-size: 0.76rem; }
  /* Las fichas de banco caben de dos en dos dentro de su columna. */
  .pie .bancos-grid { grid-template-columns: 1fr; gap: 0.4rem; }
  .pie .banco-item { padding: 0.45rem 0.5rem; }
  .pie .banco-name { font-size: 0.72rem; }
  .pie .banco-header img { width: 18px; height: 18px; }
}

/* La línea de abajo: una fila que envuelve, no dos bloques apilados. */
@media (max-width: 900px) {
  .pie-bajo {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 0.3rem 0.9rem;
    text-align: center;
    font-size: 0.76rem;
    padding: 0.9rem clamp(0.75rem, 4vw, 2.5rem);
  }
}

/* El pie sencillo de las páginas interiores. */
@media (max-width: 560px) {
  footer:not(.pie) { padding: 1.4rem 1rem; font-size: 0.82rem; }
  footer:not(.pie) #bp-pie-legal { font-size: 0.74rem; }
}

/* ── Portada: menos alto, mismo contenido ────────────────── */
@media (max-width: 560px) {
  section { padding-top: 2.25rem; padding-bottom: 2.25rem; }
  .section-title { font-size: clamp(1.5rem, 7vw, 1.9rem); margin-bottom: 0.5rem; }
  .section-subtitle { font-size: 0.88rem; line-height: 1.55; }
  .section-tag { font-size: 0.68rem; }

  /* Las tres cifras del héroe se quedan EN FILA: apiladas ocupan media
     pantalla y dicen lo mismo. */
  .hero-stats { gap: 0.5rem; }
  .hero-stats .stat span { font-size: 1.5rem; }
  .hero-stats .stat small { font-size: 0.64rem; line-height: 1.25; }
  .hero-card { padding: 1.25rem; }
  .hero-card h3 { font-size: 1.2rem; }
  .hero-badges { gap: 0.4rem; }
  .hero-badges .badge { font-size: 0.72rem; padding: 0.3rem 0.65rem; }

  /* Las ventajas de «Sobre nosotros»: dos líneas como mucho cada una. */
  .nosotros-features li { font-size: 0.85rem; gap: 0.5rem; margin-bottom: 0.6rem; }
  .nos-acciones { gap: 0.5rem; }
  .nos-acciones > * { flex: 1 1 100%; justify-content: center; }

  /* Tarjeta de curso: una por fila, pero mucho más corta. */
  .curso-card { padding: 1.25rem; }
  .curso-card h3 { font-size: 1.25rem; }
  .curso-card > p { font-size: 0.85rem; line-height: 1.5; }
  .curso-metas { gap: 0.35rem; }
  .curso-meta { font-size: 0.72rem; padding: 0.25rem 0.55rem; }
  .niveles { gap: 0.35rem; }

  /* Los tres botones de contacto, compactos. */
  .cbtn { padding: 0.7rem 0.85rem; gap: 0.7rem; }
  .cbtn-ico { width: 38px; height: 38px; border-radius: 10px; }
  .cbtn-ico .ico { width: 19px; height: 19px; }
  .cbtn-txt b { font-size: 0.88rem; }
  .cbtn-txt small { font-size: 0.74rem; }
}

/* ── 320px: el suelo ─────────────────────────────────────── */
@media (max-width: 380px) {
  .pie-top { gap: 0.9rem 0.7rem; font-size: 0.76rem; }
  .pie-enlaces a { font-size: 0.76rem; }
  .pie .banco-name { font-size: 0.68rem; }
  .section-container { padding-left: 0.85rem; padding-right: 0.85rem; }
  .hero-stats .stat span { font-size: 1.3rem; }
}


/* ── Franja de cifras (Capacítate, Empresas) ───────────────
   Vivía dentro del <style> de Capacítate; al estrenar Empresas salió sin
   estilos, con los números pegados a su etiqueta. Con dos páginas usándola,
   su sitio es este. */
.stats-strip { background: var(--gold); padding: clamp(1rem, 3vw, 1.5rem) clamp(1rem, 4vw, 2rem); }
.stats-strip-inner { max-width: 1100px; margin: 0 auto; display: flex; justify-content: center; gap: clamp(1.2rem, 5vw, 4rem); flex-wrap: wrap; }
.stat-item { text-align: center; min-width: 0; }
.stat-item strong { display: block; font-family: "Playfair Display", serif; font-size: clamp(1.4rem, 4vw, 2rem); color: var(--navy); font-weight: 700; }
.stat-item span { font-size: clamp(0.68rem, 1.8vw, 0.8rem); font-weight: 700; color: rgba(10,31,68,0.65); text-transform: uppercase; letter-spacing: 0.1em; }

/* ── El cuadro de precios de la portada ─────────────────────
   Un solo cuadro, centrado: cabecera (insignia + «hasta X% menos»), y dos
   columnas: «Por qué aquí» a la izquierda y los precios a la derecha, con el
   botón de inscribirse DENTRO de esa columna, en el hueco que quedaba bajo
   los precios. Así se ve todo sin desplazarse.
   Por debajo de 900 px no caben dos columnas legibles: la comparativa se
   convierte en un botón que la abre en una hoja (ver .pa-compara-ov). */
.pa-cabecera { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; margin-bottom: 0.2rem; }
.pa-cabecera .promo-badge-top { margin: 0; }
.pa-pct-chip {
  display: inline-flex; align-items: center; gap: 0.3rem; cursor: pointer;
  background: none; border: 0; padding: 0.2rem 0.3rem; border-radius: 8px;
  font: 800 0.78rem/1 var(--ff-b, inherit); letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--pa-text, #fff);
}
.pa-pct-chip:hover { background: rgba(var(--pa-ov, 255,255,255), 0.1); }
.pa-chip-ico { width: 14px; height: 14px; }

.pa-doble { display: grid; grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr); gap: clamp(14px, 2.4vw, 26px); align-items: start; text-align: left; margin-top: 0.4rem; }
.pa-doble.sin-compara { grid-template-columns: minmax(0, 1fr); }
.pa-doble-precios { min-width: 0; }
.pa-doble-precios .pa-niveles { text-align: center; }

/* La comparativa: cada fila, dos celdas. A la izquierda lo habitual, apagado;
   a la derecha Bonjour Paris, con el visto verde y el acento de la marca. */
.pa-compara { min-width: 0; }
.pa-compara h4 {
  margin: 0 0 0.55rem; font-size: 0.82rem; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--pa-accent, var(--gold)); font-weight: 800;
}
.pa-compara ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.5rem; }
.pa-compara li {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  border-radius: 12px; overflow: hidden;
  border: 1px solid rgba(var(--pa-ov, 255,255,255), 0.12);
}
.pa-compara li > span { display: block; padding: 0.55rem 0.7rem; font-size: 0.8rem; line-height: 1.35; overflow-wrap: anywhere; }
.pa-compara b {
  display: block; font-size: 0.62rem; letter-spacing: 0.07em; text-transform: uppercase;
  font-weight: 800; margin-bottom: 0.2rem;
}
.pa-compara-otros { background: rgba(var(--pa-ov, 255,255,255), 0.04); color: rgba(var(--pa-ov, 255,255,255), 0.62); }
.pa-compara-otros b { color: rgba(var(--pa-ov, 255,255,255), 0.45); }
.pa-compara-bp { background: rgba(var(--pa-accent-rgb, 201,168,76), 0.10); color: var(--pa-text, #fff); border-left: 1px solid rgba(var(--pa-accent-rgb, 201,168,76), 0.35); }
.pa-compara-bp b { color: var(--pa-accent, var(--gold)); }
.pa-compara-txt { display: flex; gap: 0.35rem; align-items: flex-start; }
.pa-visto { flex: none; width: 15px; height: 15px; margin-top: 1px; color: #3cb878; }

/* El código de una institución aliada: aparece al elegir esa opción del
   desplegable. No cambia los precios —un código identifica al aliado, no un
   porcentaje—: comprueba que sirve y viaja con el botón de inscribirse. */
.pa-cod { margin-top: 0.5rem; }
.pa-cod[hidden] { display: none; }
.pa-cod-inp {
  width: 100%; padding: 0.5rem 0.7rem; border-radius: 10px;
  background: rgba(var(--pa-ov, 255,255,255), 0.08);
  border: 1px solid rgba(var(--pa-accent-rgb, 201,168,76), 0.45);
  color: var(--pa-text, #fff); font: 700 0.9rem/1 var(--ff-b, inherit);
  letter-spacing: 0.12em; text-transform: uppercase;
}
.pa-cod-inp::placeholder { letter-spacing: normal; text-transform: none; font-weight: 600; opacity: .6; }
.pa-cod-msg { margin: 0.35rem 0 0; font-size: 0.78rem; font-weight: 700; min-height: 1em; }
.pa-cod-msg.bien { color: #3cb878; }
.pa-cod-msg.mal { color: #f87171; }
.pa-cod-msg.esperando { color: rgba(var(--pa-ov, 255,255,255), 0.6); }

/* El botón que la sustituye en pantallas estrechas. En el escritorio no se ve. */
.pa-compara-abrir {
  display: none; align-items: center; gap: 0.45rem; width: 100%; justify-content: center;
  margin: 0 0 0.8rem; padding: 0.55rem 0.9rem; border-radius: 12px; cursor: pointer;
  font: 700 0.85rem/1.2 var(--ff-b, inherit); color: var(--pa-text, #fff);
  background: rgba(var(--pa-ov, 255,255,255), 0.08);
  border: 1px solid rgba(var(--pa-accent-rgb, 201,168,76), 0.45);
}
.pa-compara-abrir:hover { background: rgba(var(--pa-accent-rgb, 201,168,76), 0.16); }

@media (max-width: 900px) {
  .pa-doble { grid-template-columns: minmax(0, 1fr); }
  .pa-doble > .pa-compara { display: none; }
  .pa-compara-abrir { display: inline-flex; }
}

/* La hoja de la comparativa (móvil). Por encima del cuadro de precios (9100)
   y por debajo de la bienvenida (9999). */
.pa-compara-ov {
  position: fixed; inset: 0; z-index: 9300; display: flex; align-items: flex-end; justify-content: center;
  background: rgba(8,14,30,.72); padding: 12px; animation: paOvIn .2s ease-out;
}
.pa-compara-hoja {
  position: relative; width: 100%; max-width: 560px; max-height: 88vh; overflow: auto;
  background: linear-gradient(145deg, var(--pa-bg, var(--navy)) 0%, var(--pa-bg2, #1a3a6e) 100%);
  color: var(--pa-text, #fff); border-radius: 18px; padding: 1.1rem 1rem 1rem;
  border: 1px solid rgba(var(--pa-accent-rgb, 201,168,76), 0.3);
  animation: paHoja .26s cubic-bezier(.2,.7,.3,1);
}
/* En la hoja, cada fila se lee de arriba abajo: lo habitual y, debajo, lo nuestro. */
.pa-compara-hoja li { grid-template-columns: minmax(0, 1fr); }
.pa-compara-hoja .pa-compara-bp { border-left: 0; border-top: 1px solid rgba(var(--pa-accent-rgb, 201,168,76), 0.35); }
.pa-compara-x {
  position: absolute; top: 8px; right: 10px; width: 30px; height: 30px; border-radius: 50%; cursor: pointer;
  border: 1px solid rgba(255,255,255,.28); background: rgba(255,255,255,.12); color: #fff; font-size: 18px; line-height: 1;
}
@keyframes paOvIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes paHoja { from { transform: translateY(24px); opacity: 0; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .pa-compara-ov, .pa-compara-hoja { animation: none; } }

/* Los precios, un poco más cuidados sin exagerar: el «/mes» al lado, la
   tarjeta destacada con una línea de acento arriba y las tres a la misma
   altura. */
.pa-por-mes { font-size: 0.72rem; font-weight: 600; color: rgba(var(--pa-ov, 255,255,255), 0.55); }
.pa-card { position: relative; display: flex; flex-direction: column; }
.pa-card.destacada { box-shadow: inset 0 3px 0 var(--pa-accent, var(--gold)); }
.pa-card .pa-precio strong { font-size: clamp(1.6rem, 3vw, 1.95rem); }

/* El botón y el correo, en una fila bajo los precios: ocupan una línea en vez
   de tres, que es lo que obligaba a desplazarse. */
.pa-doble-precios .promo-cta-wrap {
  display: flex; align-items: center; justify-content: center; gap: 0.5rem 1rem; flex-wrap: wrap;
  margin-top: 0.9rem; padding-top: 0.9rem; border-top: 1px solid rgba(var(--pa-ov, 255,255,255), 0.12);
}
.pa-doble-precios .promo-cta-wrap .promo-espera { flex-basis: 100%; margin: 0; text-align: center; }
.pa-doble-precios .promo-email { margin: 0; font-size: 0.78rem; }
