/* componentes.css — biblioteca transversal, BEM. Sin @layer (ver base.css).
   Breakpoints documentados (únicos literales de longitud permitidos fuera de
   tokens: las condiciones @container/@media no aceptan var()):
     28rem  tarjeta de servicio pasa a horizontal · sellos del hero a 2 columnas
     36rem  formulario a 2 columnas · acciones del hero pasan a fila
     56rem  header pasa a navegación de escritorio
     70rem  hero pasa a 2 columnas (6/4) con sangrado derecho */


  /* Skip link: oculto hasta recibir foco de teclado */
  .salto-enlace {
    position: absolute; inset-block-start: 0; inset-inline-start: 0; z-index: 30;
    background: var(--color-primary); color: var(--color-background);
    font-weight: 700; text-decoration: none;
    padding: var(--space-2xs) var(--space-s);
    transform: translateY(-200%);
  }
  .salto-enlace:focus-visible { transform: none; color: var(--color-background); }

  /* Botones — 5 estados: reposo, hover, :focus-visible (global), activo, deshabilitado */
  .boton {
    display: inline-flex; align-items: center; justify-content: center;
    gap: var(--space-2xs); min-block-size: var(--target-min);
    padding: var(--space-xs) var(--space-m);
    border: 0; border-radius: var(--radius-m); cursor: pointer;
    font-size: var(--text-l); font-weight: 800; text-decoration: none;
    white-space: nowrap;
    transition: background-color 0.15s, border-color 0.15s, color 0.15s;
  }
  .boton--primario, .boton--llamada { background: linear-gradient(135deg, var(--color-accent), var(--color-accent-deep)); color: var(--color-background); }
  .boton--primario:hover, .boton--llamada:hover { background: linear-gradient(135deg, var(--color-accent-dark), var(--color-accent-deep)); color: var(--color-background); }
  .boton--primario:active, .boton--llamada:active { background: var(--color-accent-deep); }
  .boton--llamada { font-variant-numeric: tabular-nums; }
  .boton--secundario { background: transparent; color: var(--color-primary); border: var(--border-control) solid var(--color-primary); font-weight: 700; }
  .boton--secundario:hover { background: var(--color-muted); color: var(--color-primary); }
  .boton--secundario:active { background: var(--color-border); }
  .boton--pequeno { font-size: var(--text-s); padding-inline: var(--space-s); border-radius: var(--radius-s); }
  .boton:disabled, .boton[aria-disabled="true"] {
    background: var(--color-muted); color: var(--color-foreground-light);
    border-color: var(--color-border); cursor: not-allowed;
  }
  .boton[data-cargando="true"] { opacity: 0.7; cursor: progress; } /* estado carga del envío */

  /* Barra de urgencia 24 h */
  .urgencia {
    background: linear-gradient(90deg, var(--color-accent), var(--color-accent-deep)); color: var(--color-background);
    font-size: var(--text-s); padding: var(--space-3xs) var(--space-s);
    display: flex; justify-content: center; align-items: center;
    gap: var(--space-xs); flex-wrap: wrap;
  }
  .urgencia__texto { font-weight: 700; letter-spacing: var(--tracking-meta); }
  .urgencia__tel { color: var(--color-background); font-weight: 700; text-decoration: none; min-block-size: var(--target-min); display: inline-flex; align-items: center; font-variant-numeric: tabular-nums; }
  .urgencia__tel:hover { color: var(--color-background); text-decoration: underline; }

  /* Header sticky */
  .cabecera { position: sticky; inset-block-start: 0; z-index: 20; background: var(--color-background); border-block-end: var(--border-hairline) solid var(--color-border); }
  .cabecera__interior { max-inline-size: var(--wide-size); margin-inline: auto; padding: var(--space-2xs) var(--space-s); display: flex; align-items: center; justify-content: space-between; gap: var(--space-s); }
  /* El logo es un SVG con viewBox pero sin width/height: dentro de un <img> no
     tiene tamaño intrínseco y colapsa. Se le da la medida aquí. */
  .cabecera .wp-block-site-logo { line-height: 0; flex: 0 0 auto; }
  .cabecera .wp-block-site-logo img,
  .cabecera .custom-logo { block-size: var(--logo-alto); inline-size: auto; max-inline-size: none; display: block; }
  /* WordPress fuerza `body .is-layout-flex{display:flex}` (0,1,1). Se sube la
     especificidad para que el nav pueda ocultarse de verdad en móvil. */
  .cabecera .cabecera__nav { display: none; align-items: center; gap: var(--space-s); margin-inline-start: auto; }
  /* core/navigation separa sus ítems con --wp--style--block-gap, que este tema
     fija a 0 para que Gutenberg no inyecte márgenes. Se le devuelve el gap. */
  .cabecera__nav .wp-block-navigation__container { gap: var(--space-s); }
  /* core/navigation pone las clases propias en el <li>, no en el <a>: se estiliza
     el enlace real para que hover, foco y aria-current caigan donde deben. */
  .cabecera__nav .wp-block-navigation-item__content,
  .cabecera__enlace { color: var(--color-foreground); font-size: var(--text-s); font-weight: 600; text-decoration: none; min-block-size: var(--target-min); display: inline-flex; align-items: center; border-block-end: var(--border-accent-bar) solid transparent; }
  /* Core emite `.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{color:inherit}`
     duplicando la clase para llegar a (0,3,0). Se replica la jugada, si no el
     hover y la página activa no cambian nunca de color. */
  .cabecera__nav .wp-block-navigation-item__content.wp-block-navigation-item__content:hover { color: var(--color-primary); }
  .cabecera__nav .wp-block-navigation-item__content.wp-block-navigation-item__content:active { color: var(--color-primary-dark); }
  .cabecera__nav .wp-block-navigation-item__content.wp-block-navigation-item__content[aria-current="page"] { color: var(--color-primary); border-block-end-color: var(--color-accent); }
  .pie .wp-block-navigation-item__content { display: inline-flex; align-items: center; min-block-size: var(--target-min); }
  .cabecera__menu-boton { display: inline-flex; align-items: center; gap: var(--space-3xs); min-block-size: var(--target-min); padding-inline: var(--space-xs); background: transparent; border: var(--border-hairline) solid var(--color-border); border-radius: var(--radius-s); font-weight: 700; font-size: var(--text-s); cursor: pointer; }
  .cabecera__menu-boton:hover { border-color: var(--color-primary); color: var(--color-primary); }
  @media (min-width: 56rem) {
    .cabecera .cabecera__nav { display: flex; }
    .cabecera__menu-boton { display: none; }
  }

  /* Menú móvil: <dialog> nativo = foco atrapado + Esc sin JS a medida */
  .menu-movil { border: 0; padding: 0; inline-size: 100%; max-inline-size: 100%; margin: 0; background: var(--color-background); }
  .menu-movil::backdrop { background: color-mix(in oklch, var(--color-primary-dark), transparent 40%); }
  .menu-movil__interior { display: flex; flex-direction: column; gap: var(--space-2xs); padding: var(--space-s); }
  .menu-movil__enlace { display: flex; align-items: center; min-block-size: var(--target-min); padding-inline: var(--space-s); font-size: var(--text-l); font-weight: 700; text-decoration: none; color: var(--color-foreground); border-radius: var(--radius-s); }
  .menu-movil__enlace:hover { background: var(--color-muted); color: var(--color-primary); }
  .menu-movil__enlace[aria-current="page"] { background: var(--color-muted); color: var(--color-primary); }
  @starting-style { .menu-movil[open] { opacity: 0; } } /* mejora progresiva */
  .menu-movil[open] { opacity: 1; transition: opacity 0.2s; }

  /* Formulario de presupuesto — el único canal de conversión junto al teléfono */
  .formulario { display: grid; gap: var(--space-s); container-type: inline-size; }
  .formulario__campos { display: grid; gap: var(--space-s); }
  @container (inline-size > 36rem) {
    .formulario__campos { grid-template-columns: 1fr 1fr; }
    .campo--ancho { grid-column: 1 / -1; }
  }
  .campo { display: grid; gap: var(--space-3xs); }
  .campo__etiqueta { font-size: var(--text-s); font-weight: 600; }
  .campo__control {
    min-block-size: var(--target-min); padding: var(--space-2xs) var(--space-xs);
    border: var(--border-hairline) solid var(--color-border); border-radius: var(--radius-s);
    background: var(--color-background); color: var(--color-foreground);
  }
  .campo__control:hover { border-color: var(--color-foreground-light); }
  .campo__control:disabled { background: var(--color-muted); color: var(--color-foreground-light); cursor: not-allowed; }
  textarea.campo__control { field-sizing: content; resize: vertical; } /* base: alto por atributo rows */
  .campo--error .campo__control { border-color: var(--color-error); border-width: var(--border-control); }
  .campo__error { color: var(--color-error); font-size: var(--text-s); font-weight: 600; display: flex; gap: var(--space-3xs); align-items: baseline; }
  .campo--consentimiento { display: flex; gap: var(--space-2xs); align-items: flex-start; font-size: var(--text-s); }
  .campo--consentimiento input { inline-size: var(--space-s); block-size: var(--space-s); margin-block-start: var(--space-3xs); accent-color: var(--color-primary); }
  .formulario__exito {
    border: var(--border-hairline) solid var(--color-success);
    border-radius: var(--radius-m); padding: var(--space-s);
    color: var(--color-success); font-weight: 600;
    display: flex; gap: var(--space-2xs); align-items: baseline;
  }

  /* Tarjeta de servicio — responde a su contenedor, no al viewport */
  .celda-tarjeta { container-type: inline-size; display: grid; }
  .tarjeta-servicio {
    background: var(--color-background); border: var(--border-hairline) solid var(--color-border);
    border-radius: var(--radius-m); padding: var(--space-m);
    display: flex; flex-direction: column; gap: var(--space-2xs);
  }
  .tarjeta-servicio:has(a:hover) { border-color: var(--color-primary-light); }
  .tarjeta-servicio__titulo { margin-block-end: var(--space-3xs); }
  .tarjeta-servicio__texto { color: var(--color-foreground-light); font-size: var(--text-s); }
  .tarjeta-servicio__enlace { margin-block-start: auto; font-weight: 700; font-size: var(--text-s); min-block-size: var(--target-min); display: inline-flex; align-items: center; gap: var(--space-3xs); align-self: start; }
  @container (inline-size > 28rem) {
    .tarjeta-servicio { display: grid; grid-template-columns: 1fr auto; align-items: center; column-gap: var(--space-m); }
    .tarjeta-servicio__enlace { margin-block-start: 0; grid-row: 1 / span 2; grid-column: 2; }
  }

  /* Chip de localidad */
  .chip {
    display: inline-flex; align-items: center; min-block-size: var(--target-min);
    padding-inline: var(--space-s); border: var(--border-hairline) solid var(--color-border);
    border-radius: var(--radius-pill); background: var(--color-background);
    color: var(--color-foreground); font-size: var(--text-s); font-weight: 600; text-decoration: none;
  }
  h3.chip { font-size: var(--text-s); padding-inline: 0; border: 0; min-block-size: 0; }
  h3.chip a {
    display: inline-flex; align-items: center; min-block-size: var(--target-min);
    padding-inline: var(--space-s); border: var(--border-hairline) solid var(--color-border);
    border-radius: var(--radius-pill); background: var(--color-background);
    color: var(--color-foreground); font-weight: 600; text-decoration: none;
  }
  .chip:hover, h3.chip a:hover { border-color: var(--color-primary); color: var(--color-primary); }
  .chip:active, h3.chip a:active { background: var(--color-muted); }
  .chip[aria-current="page"] { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-background); }
  .chips { display: flex; flex-wrap: wrap; gap: var(--space-2xs); }

  /* Bloque de reseñas */
  /* ── Reseñas sobre banda oscura ──────────────────────────────────── */
  .resenas__cabecera { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-s); }
  .resenas__nota { font-weight: 800; color: var(--color-background); display: inline-flex; align-items: baseline; gap: var(--space-3xs); }
  .resenas__estrella { color: var(--color-background); }
  .resena {
    background: transparent;
    border: var(--border-hairline) solid color-mix(in oklch, var(--color-background), transparent 85%);
    border-radius: var(--radius-m); padding: var(--space-m);
    display: grid; gap: var(--space-xs); align-content: start;
  }
  .resena__estrellas { letter-spacing: 2px; color: var(--color-background); }
  .resena__cita { font-size: var(--text-m); color: var(--color-background); }
  .resena__autor { font-size: var(--text-s); color: var(--color-on-dark-muted); font-style: normal; }
  .resena__detalle { color: color-mix(in oklch, var(--color-on-dark-muted), transparent 25%); }

  /* CTA de cierre */
  /* Foto de fondo con velo degradado. Las opacidades no son estéticas: sobre el
     peor píxel posible de la foto (blanco puro) el velo al 94 % deja el texto
     blanco en 11,4:1 y al 70 %, donde ya no hay texto, en 5,3:1. Así el
     contraste está garantizado sea cual sea la foto que se ponga después. */
  .cta-cierre {
    background-color: var(--color-primary);
    background-image:
      linear-gradient(100deg,
        color-mix(in oklch, var(--color-primary-dark), transparent 4%) 0%,
        color-mix(in oklch, var(--color-primary-dark), transparent 8%) 42%,
        color-mix(in oklch, var(--color-primary-dark), transparent 22%) 78%,
        color-mix(in oklch, var(--color-primary-dark), transparent 26%) 100%),
      url("../img/cta-camion.webp");
    background-size: cover;
    background-position: center 35%;
    background-repeat: no-repeat;
    color: var(--color-background);
  }
  .cta-cierre__interior { max-inline-size: var(--wide-size); margin-inline: auto; padding: var(--section-space-l) var(--space-s); display: grid; gap: var(--space-m); justify-items: start; }
  .cta-cierre h2 { color: var(--color-background); }
  .cta-cierre p { color: var(--color-on-dark-muted); max-inline-size: var(--measure-lede); }
  .cta-cierre__acciones { display: flex; gap: var(--space-xs); flex-wrap: wrap; }
  .cta-cierre .boton--secundario { color: var(--color-background); border-color: var(--color-background); }
  .cta-cierre .boton--secundario:hover { background: var(--color-primary-dark); color: var(--color-background); }

  /* Breadcrumbs */
  /* El <ol> de las migas no lleva clase, así que el reset `ol[class]` no lo
     alcanza y conserva los 40px de sangría por defecto del navegador: el texto
     salía desalineado respecto al H1 y al resto de la página. */
  .migas { font-size: var(--text-s); color: var(--color-foreground-light); padding-block-start: var(--space-s); }
  .migas ol { display: flex; flex-wrap: wrap; gap: var(--space-3xs); padding-inline-start: 0; margin: 0; list-style: none; }
  .migas li { display: flex; gap: var(--space-3xs); align-items: center; }
  .migas li + li::before { content: "/"; color: var(--color-border); }
  .migas a { color: var(--color-foreground-light); }
  .migas a:hover { color: var(--color-primary); }
  .migas [aria-current="page"] { color: var(--color-foreground); font-weight: 600; }

  /* Footer */
  /* ── Pie ──────────────────────────────────────────────────────────── */
  .pie { background: var(--color-primary-dark); color: var(--color-background); border-block-start: var(--border-accent-bar) solid var(--color-accent); }
  .pie__interior {
    max-inline-size: var(--wide-size); margin-inline: auto;
    padding: var(--section-space-m) var(--space-s);
    display: grid; gap: var(--space-l); align-items: start;
  }
  /* La columna de marca pesa más que las dos de enlaces, como en el diseño. */
  @media (min-width: 56rem) {
    .pie__interior { grid-template-columns: 1.7fr 1fr 1fr; }
  }
  .pie__marca { display: grid; gap: var(--space-s); justify-items: start; }
  .pie__logo { align-self: start; min-block-size: auto; }
  .pie__logo img { block-size: var(--logo-alto-pie); inline-size: auto; max-inline-size: none; }
  .pie__descripcion,
  .pie__direccion { color: var(--color-on-dark-muted); max-inline-size: 34ch; }
  .pie__email { text-decoration: underline; text-underline-offset: var(--space-3xs); }
  .pie__urgencias {
    font-size: var(--text-s); font-weight: 700; text-transform: uppercase;
    letter-spacing: var(--tracking-label); color: var(--color-on-dark-muted);
  }
  .pie__telefono { font-size: var(--text-xl); }
  .pie__telefono-icono { font-size: var(--text-l); }
  .pie__columna { display: grid; gap: var(--space-2xs); align-content: start; }
  .pie__titulo {
    font-size: var(--text-s); font-weight: 700; letter-spacing: var(--tracking-label);
    text-transform: uppercase; color: var(--color-on-dark-muted);
  }
  .pie .wp-block-navigation__container { gap: var(--space-3xs); }
  .pie a { color: var(--color-background); text-decoration: none; min-block-size: var(--target-min); display: inline-flex; align-items: center; }
  .pie a:hover { text-decoration: underline; color: var(--color-background); }
  /* Franja legal inferior */
  .pie__barra { border-block-start: var(--border-hairline) solid color-mix(in oklch, var(--color-background), transparent 85%); }
  .pie__barra-interior {
    display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
    gap: var(--space-2xs) var(--space-m); padding-block: var(--space-s);
    font-size: var(--text-s); color: var(--color-on-dark-muted);
  }
  .pie__creditos a { color: inherit; text-decoration: underline; text-underline-offset: var(--space-3xs); min-block-size: auto; }
  .pie__legales { display: flex; flex-wrap: wrap; gap: var(--space-m); }
  .pie__legales a { color: var(--color-on-dark-muted); min-block-size: auto; }
  .pie__legales a:hover { color: var(--color-background); }

/* ── Componentes que faltaban por completo ─────────────────────────────
   Sus clases se emiten en los patterns desde el principio, pero nunca se
   escribió su CSS. Valores tomados de los prototipos aprobados. */


/* Comparativa de packers: la columna destacada es el argumento de la página */
.comparativa__col {
  background: var(--color-background);
  border: var(--border-hairline) solid var(--color-border);
  border-radius: var(--radius-m);
  padding: var(--space-m);
  display: grid; gap: var(--space-xs); align-content: start;
}
.comparativa__col h3 { color: var(--color-foreground-light); }
.comparativa__col ul { display: grid; gap: var(--space-2xs); font-size: var(--text-s); color: var(--color-foreground-light); }
.comparativa__col li + li { border-block-start: var(--border-hairline) solid var(--color-border); padding-block-start: var(--space-2xs); }
.comparativa__col--destacada { background: var(--color-primary); color: var(--color-background); border: 0; }
.comparativa__col--destacada h3,
.comparativa__col--destacada ul { color: var(--color-background); }
.comparativa__col--destacada li + li { border-color: color-mix(in oklch, var(--color-background), transparent 80%); }

/* ── Iconos ─────────────────────────────────────────────────────────────
   Se miden en `em` para que crezcan con el texto del botón. Los glifos de
   texto que había antes (✆) salían diminutos y descolgados de la línea base. */
.icono { inline-size: 1.15em; block-size: 1.15em; flex: 0 0 auto; }

/* ── Sección de presupuesto ────────────────────────────────────────────── */
.presupuesto { display: grid; gap: var(--space-l); align-items: start; }
@media (min-width: 56rem) {
  .presupuesto { grid-template-columns: 1fr 1.25fr; }
}

.presupuesto__aside {
  background: var(--color-primary); color: var(--color-background);
  border-radius: var(--radius-l); padding: var(--space-l);
  display: grid; gap: var(--space-s); align-content: start;
}
.presupuesto__titulo { color: var(--color-background); max-inline-size: 18ch; }
.presupuesto__entradilla { color: var(--color-on-dark-muted); max-inline-size: 40ch; }

.pasos-numerados { display: grid; gap: var(--space-s); }
.pasos-numerados li { display: flex; gap: var(--space-xs); align-items: start; }
.pasos-numerados__n {
  flex: 0 0 auto; inline-size: 2rem; block-size: 2rem; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: color-mix(in oklch, var(--color-background), transparent 88%);
  color: var(--color-background); font-size: var(--text-s); font-weight: 700;
}

.presupuesto__urgencia {
  border-block-start: var(--border-hairline) solid color-mix(in oklch, var(--color-background), transparent 80%);
  padding-block-start: var(--space-s); margin-block-start: var(--space-2xs);
  font-size: var(--text-s); font-weight: 700; text-transform: uppercase;
  letter-spacing: var(--tracking-label); color: var(--color-on-dark-muted);
}
.presupuesto__tel {
  display: inline-flex; align-items: center; gap: var(--space-2xs);
  color: var(--color-background); text-decoration: none;
  font-size: var(--text-3xl); font-weight: 800; font-variant-numeric: tabular-nums;
  min-block-size: var(--target-min);
}
.presupuesto__tel:hover { color: var(--color-background); text-decoration: underline; }

/* Tarjeta blanca del formulario */
.formulario__tarjeta {
  background: var(--color-background); border-radius: var(--radius-l);
  padding: var(--space-l); display: grid; gap: var(--space-s);
}
.campo__opcional { font-weight: 400; color: var(--color-foreground-light); }
.campo--consentimiento {
  background: var(--color-surface); border-radius: var(--radius-m);
  padding: var(--space-s); display: flex; gap: var(--space-xs); align-items: start;
  font-size: var(--text-s); color: var(--color-foreground-light);
}
.campo--consentimiento input { inline-size: 22px; block-size: 22px; flex: 0 0 auto; margin-block-start: 2px; }
.campo--consentimiento a { color: var(--color-primary); }
.boton--bloque { inline-size: 100%; }
.formulario__nota { font-size: var(--text-s); color: var(--color-foreground-light); text-align: center; }
.formulario__error {
  background: color-mix(in oklch, var(--color-error), transparent 92%);
  border: var(--border-hairline) solid var(--color-error);
  color: var(--color-error); border-radius: var(--radius-m); padding: var(--space-s);
}

/* ── Sección oscura reutilizable ────────────────────────────────────────── */
.seccion--oscura { background: var(--color-primary-dark); color: var(--color-background); }
.seccion--oscura h2 { color: var(--color-background); }

/* ── Cobertura por comarca ─────────────────────────────────────────────── */
.cobertura__cabecera { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: var(--space-s) var(--space-m); }
.cobertura__intro { display: grid; gap: var(--space-2xs); }
.cobertura__entradilla { color: var(--color-foreground-light); max-inline-size: var(--measure-lede); }
.cobertura__enlace { font-weight: 700; display: inline-flex; align-items: center; gap: var(--space-3xs); min-block-size: var(--target-min); text-underline-offset: var(--space-3xs); }
.comarca-tarjeta {
  border: var(--border-hairline) solid var(--color-border);
  border-radius: var(--radius-m); padding: var(--space-m);
  display: grid; gap: var(--space-s); align-content: start;
}
.comarca-tarjeta__titulo {
  font-size: var(--text-s); font-weight: 700; text-transform: uppercase;
  letter-spacing: var(--tracking-label); color: var(--color-foreground-light); line-height: 1.4;
}

/* ── «Por qué llamar a Lidema» ──────────────────────────────────────────── */
.por-que { display: grid; gap: var(--space-l-xl); align-items: center; }
@media (min-width: 56rem) {
  .por-que { grid-template-columns: 1fr 1fr; }
}

/* Bloque de acento desplazado tras las fotos, como en el diseño */
.por-que__media { position: relative; padding-inline-start: var(--space-s); padding-block-end: var(--space-l); }
.por-que__media::before {
  content: ""; position: absolute; inset-block: var(--space-l) var(--space-xl);
  inset-inline-start: 0; inline-size: var(--space-l);
  background: var(--color-accent); border-radius: var(--radius-m); z-index: 0;
}
.por-que__fotos { position: relative; z-index: 1; display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-3xs); border-radius: var(--radius-l); overflow: hidden; }
.por-que__foto { inline-size: 100%; block-size: 100%; aspect-ratio: 3 / 4; object-fit: cover; }

.aval-destacado {
  position: absolute; z-index: 2; inset-block-end: 0; inset-inline-end: var(--space-s);
  background: var(--color-primary); color: var(--color-background);
  border-radius: var(--radius-l); padding: var(--space-s) var(--space-m);
  display: flex; align-items: center; gap: var(--space-s);
}
.aval-destacado__cifra { font-size: var(--text-4xl); font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
.aval-destacado__unidad { font-size: var(--text-xl); margin-inline-start: 0.1em; }
.aval-destacado__titulo { font-weight: 700; }
.aval-destacado__detalle { font-size: var(--text-s); color: var(--color-on-dark-muted); }

.por-que__contenido { display: grid; gap: var(--space-s); align-content: start; }

.avales { display: grid; }
.aval {
  display: flex; gap: var(--space-s); align-items: start;
  border-block-start: var(--border-hairline) solid var(--color-border);
  padding-block: var(--space-s);
}
.avales .aval:last-child { border-block-end: var(--border-hairline) solid var(--color-border); }
.aval__n {
  flex: 0 0 auto; font-size: var(--text-4xl); font-weight: 800; line-height: 1;
  font-variant-numeric: tabular-nums;
  color: color-mix(in oklch, var(--color-primary), transparent 85%);
}
.aval__titulo { margin-block-end: var(--space-3xs); }
.aval__texto { color: var(--color-foreground-light); }

.por-que__acciones { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-s) var(--space-m); }
.enlace-accion { font-weight: 700; text-decoration: underline; text-underline-offset: var(--space-3xs); display: inline-flex; align-items: center; gap: var(--space-3xs); min-block-size: var(--target-min); }

/* ── FAQ ────────────────────────────────────────────────────────────────── */
.faq { display: grid; }
.faq__item { border-block-start: var(--border-hairline) solid var(--color-border); padding-block: var(--space-s); }
.faq__item:last-child { border-block-end: var(--border-hairline) solid var(--color-border); }
.faq__pregunta { font-weight: 700; margin-block-end: var(--space-3xs); }
.faq__respuesta { margin: 0; color: var(--color-foreground-light); }

/* Lista con marca de verificación, para enumeraciones de servicio */
.lista-marcada { display: grid; gap: var(--space-2xs); }
.lista-marcada li { display: flex; gap: var(--space-2xs); align-items: start; }
.lista-marcada li::before {
  content: "✓"; flex: 0 0 auto; font-weight: 800; color: var(--color-accent); line-height: 1.5;
}

/* ── Barra de contacto fija, solo móvil ─────────────────────────────────
   Presupuesto de CTAs: entra WhatsApp, sale el teléfono de la cabecera en este
   mismo ancho (ver .cabecera .boton--llamada más abajo). Balance neto: 0.
   El verde de marca de WhatsApp (#25D366) da 1,98:1 con texto blanco, así que
   no se usa: el botón va en el azul del logo, 10,45:1. El icono ya identifica
   el canal sin necesidad del color. */
.barra-contacto { display: none; }

@media (max-width: 55.999rem) {
  .barra-contacto {
    display: grid; grid-template-columns: 1fr 1fr;
    position: fixed; inset-inline: 0; inset-block-end: 0; z-index: 30;
    border-block-start: var(--border-hairline) solid color-mix(in oklch, var(--color-background), transparent 80%);
    padding-block-end: env(safe-area-inset-bottom);
  }
  .barra-contacto__accion {
    display: inline-flex; align-items: center; justify-content: center;
    gap: var(--space-2xs); min-block-size: var(--target-min);
    padding-block: var(--space-2xs);
    color: var(--color-background); text-decoration: none;
    font-size: var(--text-s); font-weight: 800;
  }
  .barra-contacto__accion--llamar { background: var(--color-accent); }
  .barra-contacto__accion--llamar:active { background: var(--color-accent-deep); }
  .barra-contacto__accion--whatsapp { background: var(--color-primary); }
  .barra-contacto__accion--whatsapp:active { background: var(--color-primary-dark); }
  .barra-contacto__accion:hover { color: var(--color-background); }

  /* La barra no puede tapar el final del contenido ni el pie. */
  body { padding-block-end: calc(var(--target-min) + var(--space-s) + env(safe-area-inset-bottom)); }

  /* Sale de la cabecera: en móvil ya está abajo, al alcance del pulgar. */
  .cabecera .boton--llamada { display: none; }
}

/* ── Tarifa ─────────────────────────────────────────────────────────────── */
.tarifa { display: grid; gap: var(--space-s); }
@media (min-width: 36rem) { .tarifa { grid-template-columns: 1fr 1fr; } }
.tarifa__bloque {
  background: var(--color-primary); color: var(--color-background);
  border-radius: var(--radius-l); padding: var(--space-m);
  display: grid; gap: var(--space-3xs); align-content: start;
}
.tarifa__cifra { font-size: var(--text-5xl); font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
.tarifa__concepto { font-weight: 700; }
.tarifa__detalle { font-size: var(--text-s); color: var(--color-on-dark-muted); }
.tarifa__iva { font-size: var(--text-s); color: var(--color-foreground-light); max-inline-size: var(--measure-body); }
/* Variante de la lista para lo que NO entra: el check induciría a error */
.lista-marcada--aparte li::before { content: "·"; color: var(--color-foreground-light); }

/* ── Hero de portada ─────────────────────────────────────────────────────
   Rejilla propia: NO usa .rejilla--ancha (su auto-fit pasa a 2 columnas a
   ~710 px de viewport y ahí la columna de texto se queda en 345 px) ni
   .cta-cierre__acciones (el par de botones mide 560 px y esa columna 559,5:
   se pasaban por medio píxel y envolvían, porque .boton lleva
   white-space:nowrap y flex-shrink no puede recortar nada). */

.hero {
  /* Del borde del contenedor al del viewport, más el padding. Derivado de
     tokens, no es un valor suelto. */
  --sangrado: calc(max(0px, (100vw - var(--wide-size)) / 2) + var(--space-s));
  overflow-x: clip; /* `clip` y no `hidden`: hidden crearía contenedor de scroll */
}
.hero__rejilla { display: grid; gap: var(--space-m-l); }
.hero__texto { container: hero-texto / inline-size; display: grid; gap: var(--space-m); align-content: center; }
.hero__intro { display: grid; gap: var(--space-2xs); }
.hero__marca { inline-size: var(--space-l); block-size: var(--border-accent-bar); background: var(--color-accent); border-radius: var(--radius-pill); }
.hero__entradilla { max-inline-size: var(--measure-lede); font-size: var(--text-l); line-height: 1.5; color: var(--color-foreground-light); }

/* Acciones: comportamiento declarado, no reparto por sobra de espacio. */
.hero__acciones { display: grid; gap: var(--space-xs); grid-template-columns: 1fr; }
@container hero-texto (inline-size > 36rem) {
  .hero__acciones { grid-auto-flow: column; grid-auto-columns: max-content; justify-content: start; }
}

/* Sellos: de texto suelto a bloque reglado, y suben a `foreground` (14,6:1). */
.hero__sellos {
  display: grid; gap: var(--space-xs) var(--space-m); grid-template-columns: 1fr;
  border-block: var(--border-hairline) solid var(--color-border);
  padding-block: var(--space-s);
  font-size: var(--text-s); font-weight: 600; color: var(--color-foreground);
}
@container hero-texto (inline-size > 28rem) { .hero__sellos { grid-template-columns: 1fr 1fr; } }
.hero__sellos li { display: flex; gap: var(--space-2xs); align-items: start; }
.hero__sellos li::before {
  content: "\2713";
  content: "\2713" / "";   /* alt vacío donde se soporta: el lector no lo lee */
  flex: 0 0 auto; color: var(--color-accent); font-weight: 800; line-height: 1.5;
}
.hero__sellos a { color: inherit; }

.hero__media { position: relative; margin: 0; }
.hero__media img { inline-size: 100%; aspect-ratio: 3 / 2; object-fit: cover; border-radius: var(--radius-l); }

/* Placa de dato: mismo lenguaje que .aval-destacado. */
.hero__dato {
  position: absolute; z-index: 2;
  inset-block-end: var(--space-s); inset-inline-start: var(--space-s);
  display: flex; align-items: center; gap: var(--space-s);
  background: var(--color-primary); color: var(--color-background);
  border-radius: var(--radius-l); padding: var(--space-xs) var(--space-m);
}
.hero__dato-cifra { font-size: var(--text-4xl); font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
.hero__dato-titulo { font-weight: 700; }
.hero__dato-texto { font-size: var(--text-s); color: var(--color-on-dark-muted); }

/* Una sola animación, opt-in, y solo sobre la placa: nunca sobre el H1 ni
   sobre la imagen, porque empezar en opacity:0 retrasaría el pintado del LCP. */
@media (prefers-reduced-motion: no-preference) {
  /* Dos animaciones encadenadas sobre el mismo elemento: la de entrada y, en
     cuanto termina (delay = 60 + 400 ms), la flotación continua. Ambas tocan
     `transform`, así que el orden importa: la segunda gana mientras corre, y
     como arranca justo al acabar la primera no se pisan.
     Va en `position:absolute`, así que no empuja nada: CLS 0. */
  .hero__dato {
    animation:
      hero-dato-entrada 400ms 60ms ease-out both,
      hero-dato-flota 4s 460ms ease-in-out infinite alternate;
  }
  @keyframes hero-dato-entrada {
    from { opacity: 0; transform: translateY(var(--space-2xs)); }
    to   { opacity: 1; transform: none; }
  }
  @keyframes hero-dato-flota {
    from { transform: translateY(0); }
    to   { transform: translateY(calc(-1 * var(--space-2xs))); }
  }
}

@media (min-width: 70rem) {
  .hero__rejilla { grid-template-columns: 6fr 4fr; align-items: stretch; }
  .hero__texto { grid-column: 1; grid-row: 1; }
  .hero__media { grid-column: 2; grid-row: 1; margin-inline-end: calc(-1 * var(--sangrado)); }
  /* Se estira a la columna de texto, pero con tope: sin él la foto seguía a la
     entradilla y al bloque de sellos y llegaba a 890 px de alto. */
  /* stretch + tope: el estirado da altura definida (para que el 100% de la
     imagen resuelva) y el max la limita. Con align-self:center la figura
     pasa a altura automática y el tope no llega a aplicarse. */
  .hero__media { align-self: stretch; max-block-size: var(--hero-media-max); }
  .hero__media img {
    aspect-ratio: auto; block-size: 100%; object-position: center 30%;
    border-start-end-radius: 0; border-end-end-radius: 0;
  }
  .hero__dato { inset-inline-start: calc(-1 * var(--space-m)); }
}

/* Foto de cabecera del servicio: si el servicio no tiene imagen asignada, core
   no imprime nada, así que la plantilla no deja hueco. */
.servicio__foto img { inline-size: 100%; block-size: auto; object-fit: cover; border-radius: var(--radius-l); }

/* Foto de la tarjeta de servicio. Si el servicio no tiene imagen, core no
   imprime el bloque y la tarjeta no deja hueco.
   3/2 es la proporción de los esquemas SVG, así que a ellos no les recorta nada
   y a las fotos les recorta lo mínimo. `block-size: auto` rompía el
   `aspect-ratio` que pone el propio bloque de core: por eso una tarjeta salía
   con el doble de alto que el resto. */
.tarjeta-servicio__foto { margin-block-end: var(--space-s); }
.tarjeta-servicio__foto img {
  inline-size: 100%; block-size: 100%; aspect-ratio: 3 / 2; object-fit: cover;
  border-radius: var(--radius-m); background: var(--color-muted);
}
/* Las tarjetas de una misma fila igualan altura: la foto arriba y el enlace
   siempre abajo, aunque el título ocupe una línea más. */
.tarjeta-servicio { display: flex; flex-direction: column; }
.tarjeta-servicio__enlace { margin-block-start: auto; }

/* ── Cabecera de la página de servicio ─────────────────────────────────
   Misma anatomía que el hero de portada: lo que decide la llamada por encima
   del pliegue. Reutiliza .hero__* para no duplicar el sistema. */
.servicio-hero__rejilla { display: grid; gap: var(--space-m-l); align-items: center; }
@media (min-width: 56rem) {
  .servicio-hero__rejilla { grid-template-columns: 6fr 5fr; }
}
.servicio-hero__texto { container: hero-texto / inline-size; display: grid; gap: var(--space-m); align-content: center; }
.servicio-hero__media { margin: 0; }
.servicio-hero__foto { inline-size: 100%; block-size: auto; aspect-ratio: 3 / 2; object-fit: cover; border-radius: var(--radius-l); }

/* La tarifa, en línea y visible sin scroll: es la primera pregunta de todos. */
.servicio-hero__precio {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-2xs);
  padding: var(--space-xs) var(--space-s);
  background: var(--color-surface); border-radius: var(--radius-m);
  font-size: var(--text-s); color: var(--color-foreground-light);
}
.servicio-hero__precio strong { font-size: var(--text-l); color: var(--color-foreground); }

/* Tarjeta de servicio relacionado: el título es enlace, no la tarjeta entera. */
.tarjeta-servicio__titulo a { color: inherit; text-decoration: none; }
.tarjeta-servicio__titulo a:hover { color: var(--color-accent); }
.tarjeta-servicio__foto img { inline-size: 100%; block-size: auto; }

/* Nota destacada dentro de una tarjeta: el argumento que cierra el bloque. */
.destacado-nota {
  border-inline-start: var(--border-accent-bar) solid var(--color-accent);
  padding-inline-start: var(--space-s);
  font-weight: 600; color: var(--color-foreground);
}

/* Consentimiento de cookies -------------------------------------------------
   Franja inferior, no modal a pantalla completa: la AEPD no permite muros de
   cookies, así que el contenido tiene que seguir siendo accesible sin decidir.
   Los dos botones comparten estilo a propósito — rechazar debe pesar lo mismo
   que aceptar. */
.consentimiento {
  position: fixed; inset-inline: 0; inset-block-end: 0; z-index: 60;
  padding: var(--space-xs);
  padding-block-end: calc(var(--space-xs) + env(safe-area-inset-bottom));
}
.consentimiento[hidden] { display: none; }

.consentimiento__caja {
  max-inline-size: var(--wide-width); margin-inline: auto;
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-s);
  padding: var(--space-s);
  background: var(--color-background);
  border: var(--border-hairline) solid var(--color-border);
  border-radius: var(--radius-m);
  box-shadow: 0 4px 24px rgb(0 0 0 / 0.16);
}

.consentimiento__texto { flex: 1 1 22rem; }
.consentimiento__titulo { font-size: var(--text-s); margin: 0 0 var(--space-3xs); }
.consentimiento__texto p { margin: 0; font-size: var(--text-s); color: var(--color-foreground-light); text-wrap: pretty; }
.consentimiento__texto a { color: inherit; text-underline-offset: 0.2em; }

.consentimiento__acciones { display: flex; gap: var(--space-2xs); flex: 0 0 auto; }
.consentimiento__acciones .boton { flex: 1 1 auto; justify-content: center; min-inline-size: 8.5rem; }

@media (max-width: 36rem) {
  .consentimiento__acciones { inline-size: 100%; }
}

/* Sobre la barra de contacto fija del móvil, que ocupa el mismo borde. */
@media (max-width: 56rem) {
  .consentimiento { inset-block-end: var(--barra-contacto-alto, 4.5rem); }
}
