/* =====================================================================
   Landing de captación de clubes — futbase.es/clubes (spec 023)
   ---------------------------------------------------------------------
   HTML/CSS puro, FUERA del bundle Flutter: esta página no carga
   main.dart.js (AC-30). El objetivo es que indexe en Google y cargue en
   menos de un segundo, cosa imposible desde la SPA.

   Los colores son los de AppColors traducidos a variables CSS: aquí no
   hay Dart, así que este bloque :root hace de AppColors (AC-UI-1).
   ===================================================================== */

:root {
  /* Verde de marca. Los mismos valores que AppColors.primary /
     AppColors.primaryDark. Prohibido inventar variantes. */
  --verde: #6B7C4C;
  --verde-oscuro: #5A6840;
  --verde-suave: rgba(107, 124, 76, .10);
  --verde-borde: rgba(107, 124, 76, .30);

  /* Neutros, equivalentes a la escala gray de AppColors. */
  --gris-900: #111827;
  --gris-700: #374151;
  --gris-500: #6B7280;
  --gris-200: #E5E7EB;
  --gris-50: #F8FAFB;
  --blanco: #FFFFFF;

  /* Escala tipográfica, equivalente a AppTypography (AC-UI-2).
     Nada de tamaños sueltos repartidos por el HTML. */
  --txt-h1: clamp(2rem, 5vw, 3.25rem);
  --txt-h2: clamp(1.5rem, 3.5vw, 2.25rem);
  --txt-h3: 1.25rem;
  --txt-body: 1.0625rem;
  --txt-small: .9375rem;
  --txt-label: .8125rem;

  --radio: 12px;
  --radio-btn: 10px;
  --ancho: 1120px;
  --sombra: 0 4px 20px rgba(17, 24, 39, .07);
}

/* ── Base ─────────────────────────────────────────────────────────── */

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
}

body {
  font-family: 'Lexend', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  font-size: var(--txt-body);
  line-height: 1.6;
  color: var(--gris-700);
  background: var(--blanco);
  -webkit-font-smoothing: antialiased;

  /* Equivalente al SafeArea de Flutter (AC-UI-3): en un iPhone con notch,
     el contenido no puede quedar debajo de la muesca ni de la barra de
     gestos. Se combina con viewport-fit=cover en el <meta viewport>. */
  padding-left: env(safe-area-inset-left);
  padding-right: env(safe-area-inset-right);
}

h1, h2, h3 {
  color: var(--gris-900);
  line-height: 1.2;
  margin: 0 0 .5em;
  font-weight: 700;
}

h1 { font-size: var(--txt-h1); font-weight: 800; letter-spacing: -.02em; }
h2 { font-size: var(--txt-h2); }
h3 { font-size: var(--txt-h3); }

p { margin: 0 0 1em; }

a { color: var(--verde); }

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

.wrap {
  width: 100%;
  max-width: var(--ancho);
  margin: 0 auto;
  padding: 0 20px;
}

/* ── Botones ──────────────────────────────────────────────────────── */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;

  /* 48px de alto mínimo: pulsable con el pulgar sin apuntar (AC-33). */
  min-height: 48px;
  padding: 12px 26px;

  border: 0;
  border-radius: var(--radio-btn);
  font-family: inherit;
  font-size: var(--txt-body);
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  transition: background .15s ease, transform .15s ease;
}

.btn-principal {
  background: var(--verde);
  color: var(--blanco);
}

.btn-principal:hover {
  background: var(--verde-oscuro);
  transform: translateY(-1px);
}

.btn-secundario {
  background: var(--verde-suave);
  color: var(--verde);
  border: 1px solid var(--verde-borde);
}

.btn-secundario:hover { background: rgba(107, 124, 76, .16); }

/* El enlace de "déjanos tu teléfono" tiene que verse claramente menos
   importante que el CTA de WhatsApp (AC-17): es la vía alternativa. */
.cta-secundario {
  display: inline-block;
  margin-top: 14px;
  background: none;
  border: 0;
  padding: 6px 0;
  font-family: inherit;
  font-size: var(--txt-small);
  color: var(--gris-500);
  text-decoration: underline;
  cursor: pointer;
}

.cta-secundario:hover { color: var(--verde); }

/* ── Hero ─────────────────────────────────────────────────────────── */

.hero {
  background: linear-gradient(160deg, var(--verde) 0%, var(--verde-oscuro) 100%);
  color: var(--blanco);

  /* El padding-top respeta el notch además del espaciado propio. */
  padding: calc(64px + env(safe-area-inset-top)) 0 64px;
}

.hero h1 { color: var(--blanco); }

.hero p {
  font-size: 1.1875rem;
  max-width: 40ch;
  color: rgba(255, 255, 255, .92);
}

.hero .btn-principal {
  background: var(--blanco);
  color: var(--verde-oscuro);
}

.hero .btn-principal:hover { background: rgba(255, 255, 255, .9); }

/* El secundario por defecto es verde sobre blanco; aquí el fondo YA es
   verde, así que se invierte a blanco translúcido. Con los colores de
   fuera se leía casi tan mal como si no estuviera. */
.hero .btn-secundario,
.cta-final .btn-secundario {
  background: rgba(255, 255, 255, .12);
  border-color: rgba(255, 255, 255, .55);
  color: var(--blanco);
}

.hero .btn-secundario:hover,
.cta-final .btn-secundario:hover {
  background: rgba(255, 255, 255, .22);
}

.hero-grid {
  display: grid;
  grid-template-columns: 1.1fr .9fr;
  gap: 48px;
  align-items: center;
}

.marca {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  font-size: var(--txt-label);
  margin-bottom: 20px;
}

.marca .punto {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--blanco);
}

.hero-captura img {
  border-radius: var(--radio);
  box-shadow: 0 20px 50px rgba(0, 0, 0, .25);
}

/* ── Prueba social ────────────────────────────────────────────────── */

.prueba-social {
  background: var(--gris-50);
  padding: 40px 0;
  border-bottom: 1px solid var(--gris-200);
}

.prueba-social .titulo {
  text-align: center;
  font-size: var(--txt-label);
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--gris-500);
  font-weight: 700;
  margin-bottom: 24px;
}

.escudos {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 32px;
}

/* El hueco se reserva con min-height: si un escudo no carga, la fila no
   se descoloca (flujo de error E1 del UC-01.1). */
.escudos li {
  list-style: none;
  min-height: 56px;
  display: flex;
  align-items: center;
}

/* A color y no en escala de grises: en un escudo de fútbol el color ES la
   identidad del club, y aquí lo que buscamos justo es que el visitante
   reconozca al de su comarca. El gris quedaba más "de agencia", pero
   convertía ocho escudos distintos en ocho manchas iguales. */
.escudos img {
  height: 56px;
  width: auto;
  object-fit: contain;
  opacity: .9;
  transition: opacity .2s ease, transform .2s ease;
}

.escudos img:hover {
  opacity: 1;
  transform: scale(1.06);
}

.escudos ul { display: contents; }

/* ── Selector de perfil ───────────────────────────────────────────── */

.selector-seccion { padding: 64px 0 24px; text-align: center; }

.selector-seccion h2 { margin-bottom: 8px; }

.selector-seccion .sub {
  color: var(--gris-500);
  margin-bottom: 32px;
}

.selector {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  padding: 0;
  margin: 0;
  list-style: none;
}

.opcion-perfil {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;

  width: 100%;
  min-height: 120px;
  padding: 20px 14px;

  background: var(--blanco);
  border: 2px solid var(--gris-200);
  border-radius: var(--radio);

  font-family: inherit;
  font-size: var(--txt-body);
  font-weight: 600;
  color: var(--gris-900);
  cursor: pointer;
  transition: border-color .15s ease, background .15s ease, transform .15s ease;
}

.opcion-perfil .icono { font-size: 1.75rem; line-height: 1; }

.opcion-perfil .detalle {
  font-size: var(--txt-label);
  font-weight: 400;
  color: var(--gris-500);
}

.opcion-perfil:hover {
  border-color: var(--verde-borde);
  transform: translateY(-2px);
}

.opcion-perfil[aria-expanded="true"] {
  border-color: var(--verde);
  background: var(--verde-suave);
}

/* ── Bloques de perfil ────────────────────────────────────────────── */

.bloque-perfil {
  padding: 48px 0 64px;
  border-top: 1px solid var(--gris-200);
}

.bloque-perfil .etiqueta {
  display: inline-block;
  padding: 4px 12px;
  margin-bottom: 12px;
  background: var(--verde-suave);
  border: 1px solid var(--verde-borde);
  border-radius: 999px;
  font-size: var(--txt-label);
  font-weight: 600;
  color: var(--verde);
}

.bloque-perfil ul.ventajas {
  list-style: none;
  padding: 0;
  margin: 0 0 28px;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 14px 28px;
}

.bloque-perfil ul.ventajas li {
  position: relative;
  padding-left: 30px;
}

.bloque-perfil ul.ventajas li::before {
  content: '';
  position: absolute;
  left: 0;
  top: .45em;
  width: 16px;
  height: 9px;
  border-left: 2.5px solid var(--verde);
  border-bottom: 2.5px solid var(--verde);
  transform: rotate(-45deg);
}

.acciones {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
}

/* Bloque de cierre de cada perfil, con el matiz de a quién habla. */
.nota-perfil {
  margin-top: 18px;
  padding: 14px 18px;
  background: var(--gris-50);
  border-left: 3px solid var(--verde);
  border-radius: 0 8px 8px 0;
  font-size: var(--txt-small);
  color: var(--gris-700);
}

/* ── Sin JavaScript: se ven los cuatro bloques ────────────────────────
   AC-12. Por defecto los bloques están VISIBLES, que es como los sirve
   el HTML y como los lee Google (AC-31). Solo cuando app.js arranca se
   añade la clase `js-activo` al <html> y pasan a ocultarse para que el
   selector tenga sentido. Si el JS falla o está desactivado, la página
   sigue siendo perfectamente usable.                                   */

.js-activo .bloque-perfil[hidden] { display: none; }

.js-activo .bloque-perfil {
  animation: aparecer .25s ease;
}

@keyframes aparecer {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}

/* Sin JS el selector no hace nada útil: se oculta para no confundir. */
.selector { display: none; }
.js-activo .selector { display: grid; }

.aviso-sin-js {
  color: var(--gris-500);
  font-size: var(--txt-small);
}

.js-activo .aviso-sin-js { display: none; }

/* ── CTA final ────────────────────────────────────────────────────── */

.cta-final {
  background: linear-gradient(160deg, var(--verde) 0%, var(--verde-oscuro) 100%);
  color: var(--blanco);
  padding: 64px 0;
  text-align: center;
}

.cta-final h2 { color: var(--blanco); }

.cta-final p {
  color: rgba(255, 255, 255, .92);
  max-width: 46ch;
  margin-inline: auto;
}

.cta-final .btn-principal {
  background: var(--blanco);
  color: var(--verde-oscuro);
}

.cta-final .cta-secundario { color: rgba(255, 255, 255, .85); }
.cta-final .cta-secundario:hover { color: var(--blanco); }

/* ── Pie ──────────────────────────────────────────────────────────── */

.pie {
  padding: 28px 0 calc(28px + env(safe-area-inset-bottom));
  text-align: center;
  font-size: var(--txt-small);
  color: var(--gris-500);
}

/* Segunda línea del pie: los legales, un punto por debajo del reclamo
   comercial para que no compitan con él. */
.pie .pie-legal {
  margin: 8px 0 0;
  font-size: var(--txt-label);
}

/* ── Diálogo del formulario ───────────────────────────────────────────
   Diálogo CENTRADO, nunca un panel deslizante desde abajo (AC-UI-4):
   es el equivalente web de showAdaptiveModal.                          */

dialog.modal {
  width: min(460px, calc(100vw - 32px));
  padding: 0;
  border: 0;
  border-radius: 16px;
  box-shadow: 0 24px 60px rgba(0, 0, 0, .25);
  color: var(--gris-700);
}

dialog.modal::backdrop {
  background: rgba(17, 24, 39, .5);
}

.modal-cabecera {
  background: linear-gradient(135deg, var(--verde), var(--verde-oscuro));
  color: var(--blanco);
  padding: 20px 24px;
  border-radius: 16px 16px 0 0;
}

.modal-cabecera h2 {
  color: var(--blanco);
  font-size: 1.25rem;
  margin: 0;
}

.modal-cabecera p {
  margin: 4px 0 0;
  font-size: var(--txt-small);
  color: rgba(255, 255, 255, .9);
}

.modal-cuerpo {
  padding: 22px 24px;
  /* Si el teclado del móvil reduce la altura, el formulario hace scroll
     en vez de recortarse. */
  max-height: 70vh;
  overflow-y: auto;
}

.campo { margin-bottom: 16px; }

.campo label {
  display: block;
  margin-bottom: 6px;
  font-size: var(--txt-label);
  font-weight: 600;
  color: var(--gris-700);
}

.campo input[type="text"],
.campo input[type="tel"] {
  width: 100%;
  min-height: 46px;
  padding: 10px 14px;
  border: 1px solid var(--gris-200);
  border-radius: 8px;
  font-family: inherit;
  /* 16px evita que Safari haga zoom al enfocar el campo en iPhone. */
  font-size: 16px;
  color: var(--gris-900);
}

.campo input:focus {
  outline: none;
  border-color: var(--verde);
  box-shadow: 0 0 0 3px var(--verde-suave);
}

.campo.error input { border-color: #FA4838; }

.campo .mensaje-error {
  display: none;
  margin-top: 6px;
  font-size: var(--txt-label);
  color: #FA4838;
}

.campo.error .mensaje-error { display: block; }

.consentimiento {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin-bottom: 18px;
  font-size: var(--txt-small);
}

.consentimiento input {
  margin-top: 3px;
  width: 18px;
  height: 18px;
  accent-color: var(--verde);
  flex-shrink: 0;
}

.consentimiento.error { color: #FA4838; }

/* Honeypot: invisible para las personas, rellenable por un bot. No se usa
   display:none porque algunos bots lo detectan y lo saltan. */
.trampa {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

.modal-acciones {
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  padding: 0 24px 22px;
}

.aviso {
  margin-bottom: 16px;
  padding: 12px 14px;
  border-radius: 8px;
  font-size: var(--txt-small);
}

.aviso-error {
  background: rgba(250, 72, 56, .08);
  border: 1px solid rgba(250, 72, 56, .3);
  color: #B3261E;
}

.aviso-ok {
  background: var(--verde-suave);
  border: 1px solid var(--verde-borde);
  color: var(--verde-oscuro);
}

[hidden] { display: none !important; }

/* ── Responsive (AC-33, AC-UI-5) ──────────────────────────────────── */

@media (max-width: 900px) {
  .hero-grid { grid-template-columns: 1fr; gap: 32px; }
  .selector { grid-template-columns: repeat(2, 1fr); }

  /* La captura va DEBAJO del titular, nunca encima: puesta arriba se comía
     la primera pantalla entera y el visitante aterrizaba sin ver de qué va
     esto, que es justo lo que exige el AC-01. */
  .hero-captura { order: 2; }
}

@media (max-width: 560px) {
  .hero { padding: calc(40px + env(safe-area-inset-top)) 0 44px; }
  .selector-seccion { padding: 44px 0 16px; }
  .selector { grid-template-columns: 1fr; }

  .opcion-perfil {
    min-height: 0;
    flex-direction: row;
    justify-content: flex-start;
    text-align: left;
    gap: 14px;
  }

  .bloque-perfil ul.ventajas { grid-template-columns: 1fr; }

  /* En móvil los CTA ocupan el ancho: no hay nada que ganar apretándolos. */
  .acciones { flex-direction: column; align-items: stretch; }
  .acciones .btn { width: 100%; }

  .escudos { gap: 20px; }
  .escudos img { height: 44px; }

  .modal-acciones { flex-direction: column-reverse; }
  .modal-acciones .btn { width: 100%; }
}

/* Respeta a quien ha pedido menos animación en su sistema. */
@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}
