/**
 * CAP Abogados — hoja de estilos.
 *
 * Transcrita del mockup capabogados-mockup-unificado (1).html, líneas 34-124 y
 * 150-527. Se descartaron la sección 2 (sistema de vistas del prototipo) y la
 * sección 3 (marcadores de contenido pendiente y notas internas), que eran
 * andamiaje y no forman parte del diseño.
 *
 * No modificar valores visuales: este archivo es la referencia contra la que se
 * compara el sitio publicado.
 */

/* ==========================================================================
   0. TIPOGRAFÍAS AUTOALOJADAS (Cinzel y Montserrat, subconjunto latin)
   ========================================================================== */
@font-face{
  font-family: 'Cinzel';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/cinzel-400.woff2') format('woff2');
}

@font-face{
  font-family: 'Cinzel';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../fonts/cinzel-500.woff2') format('woff2');
}

@font-face{
  font-family: 'Cinzel';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../fonts/cinzel-600.woff2') format('woff2');
}

@font-face{
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('../fonts/montserrat-300.woff2') format('woff2');
}

@font-face{
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/montserrat-400.woff2') format('woff2');
}

@font-face{
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../fonts/montserrat-500.woff2') format('woff2');
}

@font-face{
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../fonts/montserrat-600.woff2') format('woff2');
}

@font-face{
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('../fonts/montserrat-700.woff2') format('woff2');
}

  /* ==========================================================================
     1. TOKENS DE MARCA (conservados del mockup original)
     ========================================================================== */
  :root{
    --negro:#111111;
    --gris-osc:#5C5C5C;
    --gris-med:#8C8C8C;
    --gris-cla:#D9D9D9;
    --gris-hue:#F1F0EE;
    --blanco:#FFFFFF;
    /* El único color ajeno a la paleta de la firma, y con motivo: es el verde de WhatsApp.
       Un botón flotante no tiene texto, así que lo que lo hace reconocible es exactamente
       esta pareja de color y glifo. Pintarlo en negro para que armonizara con el resto del
       sitio lo convertía en un botón cualquiera. */
    --whatsapp:#25D366;
    --whatsapp-osc:#1DA851;
    --display: 'Cinzel', serif;
    --body: 'Montserrat', sans-serif;
    --maxw: 1280px;
  }
  *{box-sizing:border-box; margin:0; padding:0;}
  html{scroll-behavior:smooth;}
  body{
    font-family: var(--body);
    color: var(--negro);
    background: var(--blanco);
    line-height:1.6;
    font-weight:400;
    -webkit-font-smoothing:antialiased;
    overflow-x:hidden;
  }
  img,svg{display:block; max-width:100%;}
  a{color:inherit; text-decoration:none;}
  ul{list-style:none;}
  .wrap{max-width:var(--maxw); margin:0 auto; padding:0 24px;}
  @media(min-width:768px){ .wrap{padding:0 40px;} }
  @media(min-width:1024px){ .wrap{padding:0 80px;} }

  .eyebrow{
    font-family:var(--body); font-size:11px; font-weight:600; letter-spacing:.25em;
    text-transform:uppercase; color:var(--gris-osc); margin-bottom:14px; display:flex; align-items:center; gap:10px;
  }
  .eyebrow::before{content:"◆"; font-size:8px; color:var(--gris-med);}
  h1,h2,h3{font-family:var(--display); font-weight:500; letter-spacing:.01em; color:var(--negro);}

  /* Botones (conservados; se añade .btn-light para tarjetas de fondo negro) */
  .btn{
    display:inline-flex; align-items:center; justify-content:center; gap:8px;
    font-family:var(--body); font-size:13px; font-weight:600; letter-spacing:.12em; text-transform:uppercase;
    padding:17px 34px; border-radius:3px; cursor:pointer; transition: all .2s ease; white-space:normal; text-align:center;
    border:1px solid transparent;
  }
  .btn-primary{ background:var(--negro); color:var(--blanco); border-color:var(--negro); }
  .btn-primary:hover{ background:var(--gris-osc); border-color:var(--gris-osc); }
  .btn-secondary{ background:transparent; color:var(--negro); border-color:var(--negro); }
  .btn-secondary:hover{ background:var(--negro); color:var(--blanco); }
  .btn-light{ background:var(--blanco); color:var(--negro); border-color:var(--blanco); }
  .btn-light:hover{ background:var(--gris-cla); border-color:var(--gris-cla); }
  .btn-outline-light{ background:transparent; color:var(--blanco); border-color:rgba(255,255,255,.5); }
  .btn-outline-light:hover{ background:var(--blanco); color:var(--negro); border-color:var(--blanco); }
  .btn:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible{
    outline:2px solid var(--negro); outline-offset:2px;
  }
  .link-underline{
    position:relative; font-size:13px; font-weight:600; letter-spacing:.08em; text-transform:uppercase;
    padding-bottom:4px;
  }
  .link-underline::after{
    content:""; position:absolute; left:0; bottom:0; height:1px; width:0%; background:var(--negro); transition:width .25s ease;
  }
  .link-underline:hover::after{width:100%;}

  /* Placeholder de fotografía (conservado). El data-label indica la regla
     de imagen de la vertical según PDF §4. */
  .ph{
    position:relative; overflow:hidden; background:
      repeating-linear-gradient(135deg, #d7d5d0 0 2px, #e7e5e0 2px 4px);
    filter:grayscale(1);
  }
  .ph::after{
    content: attr(data-label);
    position:absolute; left:14px; bottom:14px; right:14px;
    font-family:var(--body); font-size:10px; font-weight:600; letter-spacing:.1em; text-transform:uppercase;
    color:var(--blanco); background:rgba(17,17,17,.72); padding:8px 12px; border-radius:2px;
  }

  /* Animación de aparición (conservada) */
  .reveal{ opacity:0; transform:translateY(22px); transition:opacity .6s ease, transform .6s ease; }
  .reveal.in{ opacity:1; transform:translateY(0); }
  @media (prefers-reduced-motion: reduce){
    html{scroll-behavior:auto;}
    .reveal{opacity:1; transform:none; transition:none;}
    .btn, .link-underline::after, .servicio-card, .caso-card{transition:none;}
  }

  /* ==========================================================================
     4. HEADER + NAVEGACIÓN
     ========================================================================== */
  header{
    position:sticky; top:0; z-index:50; background:var(--blanco);
    border-bottom:1px solid transparent; transition:border-color .25s ease;
  }
  header.scrolled{ border-bottom-color:var(--gris-cla); }
  .headbar{ display:flex; align-items:center; justify-content:space-between; height:84px; }
  /* La marca es el logotipo de la firma. Fue tipográfica —«CAP» en Cinzel sobre el
     dominio en versalitas— mientras no hubo archivo; el mockup la componía así por
     eso. `display:flex` alinea la imagen sin la línea base que un `<img>` en línea
     arrastra consigo, y que dejaba unos píxeles de aire bajo el logotipo.

     La altura la manda el alto y el ancho se deduce, porque el logotipo se puede
     cambiar desde el Personalizador y el nuevo no tiene por qué guardar la misma
     proporción que el actual. Fijar el ancho lo deformaría. */
  .logo{ display:flex; align-items:center; }
  .logo-img{ height:52px; width:auto; display:block; }
  @media(min-width:1024px){ .logo-img{ height:56px; } }
  /* En el pie hay más aire y la marca cierra la página: se le da algo más de peso. */
  .foot-brand .logo-img{ height:64px; }
  nav.desktop-nav{ display:none; gap:36px; align-items:center; }
  nav.desktop-nav a{ font-size:12px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; color:var(--negro); position:relative; padding:4px 0;}
  nav.desktop-nav a::after{content:"";position:absolute;left:0;bottom:0;height:1px;width:0;background:var(--negro);transition:width .2s ease;}
  nav.desktop-nav a:hover::after{width:100%;}
  nav.desktop-nav a.active::after{width:100%;}
  .head-actions{ display:flex; align-items:center; gap:20px; }
  .menu-btn{ display:flex; flex-direction:column; gap:5px; cursor:pointer; background:none; border:none; padding:6px; }
  .menu-btn span{ width:22px; height:1px; background:var(--negro); display:block; }
  @media(min-width:1024px){
    nav.desktop-nav{display:flex;}
    .menu-btn{display:none;}
  }
  .head-cta{ display:none; }
  @media(min-width:1024px){ .head-cta{display:inline-flex; padding:14px 24px; font-size:12px;} }

  /* Menú móvil desplegable */
  .mobile-nav{
    display:none; position:fixed; left:0; right:0; top:84px; bottom:0; z-index:49;
    background:var(--blanco); padding:32px 24px; flex-direction:column; gap:4px; overflow-y:auto;
  }
  .mobile-nav.open{ display:flex; }
  .mobile-nav a{
    font-size:16px; font-weight:600; letter-spacing:.08em; text-transform:uppercase;
    padding:16px 0; border-bottom:1px solid var(--gris-cla);
  }
  .mobile-nav a.active{ color:var(--gris-osc); }
  .mobile-nav .btn{ margin-top:24px; }
  body.nav-open{ overflow:hidden; }

  /* ==========================================================================
     5. HERO (Home y verticales)
     ========================================================================== */
  .hero{ padding:56px 0 64px; }
  @media(min-width:1024px){ .hero{padding:88px 0 96px;} }
  .hero-grid{ display:grid; grid-template-columns:1fr; gap:40px; align-items:center; }
  @media(min-width:1024px){ .hero-grid{ grid-template-columns:1.05fr .95fr; gap:64px; } }
  .hero h1{ font-size:34px; line-height:1.18; margin-bottom:22px; }
  @media(min-width:768px){ .hero h1{font-size:44px;} }
  @media(min-width:1024px){ .hero h1{font-size:52px; line-height:1.15;} }
  .hero p.lead{ font-size:16px; color:var(--gris-osc); max-width:520px; margin-bottom:34px; font-weight:400; }
  .hero-ctas{ display:flex; flex-direction:column; gap:14px; align-items:stretch; }
  @media(min-width:560px){ .hero-ctas{flex-direction:row; align-items:center;} }
  .hero-photo{ aspect-ratio:4/5; border-radius:4px; }
  @media(min-width:1024px){ .hero-photo{ aspect-ratio:5/6; } }
  .cta-note{ margin-top:14px; font-size:12px; color:var(--gris-med); }

  /* ==========================================================================
     6. SECCIONES GENÉRICAS
     ========================================================================== */
  section{ padding:64px 0; }
  @media(min-width:1024px){ section{ padding:104px 0; } }
  .section-head{ max-width:680px; margin-bottom:48px; }
  .section-head.center{ margin-left:auto; margin-right:auto; text-align:center; }
  .section-head.center .eyebrow{ justify-content:center; }
  .section-head h2{ font-size:28px; line-height:1.25; }
  @media(min-width:1024px){ .section-head h2{ font-size:36px; } }
  .section-head p.sub{ margin-top:16px; font-size:15px; color:var(--gris-osc); }
  .bg-hue{ background:var(--gris-hue); }

  /* ==========================================================================
     7. HOME · BIFURCACIÓN (PDF §6.2) — Empresas dominante
     ========================================================================== */
  .bifurca{ display:grid; grid-template-columns:1fr; gap:22px; align-items:stretch; }
  @media(min-width:960px){ .bifurca{ grid-template-columns:1.35fr 1fr; gap:28px; } }
  .bi-card{
    border:1px solid var(--gris-cla); border-radius:6px; overflow:hidden;
    display:flex; flex-direction:column; background:var(--blanco);
    transition:transform .25s ease, border-color .25s ease;
  }
  .bi-card:hover{ transform:translateY(-4px); border-color:var(--gris-osc); }
  .bi-card .bi-photo{ aspect-ratio:16/7; }
  .bi-card .bi-body{ padding:32px 28px 36px; display:flex; flex-direction:column; flex:1; }
  @media(min-width:1024px){ .bi-card .bi-body{ padding:40px 40px 44px; } }
  .bi-card h3{ font-size:24px; margin-bottom:14px; }
  @media(min-width:1024px){ .bi-card h3{ font-size:28px; } }
  .bi-card p{ font-size:14.5px; color:var(--gris-osc); margin-bottom:26px; }
  .bi-card .btn{ margin-top:auto; align-self:flex-start; }
  /* Variante dominante (Empresas): fondo negro, mayor peso visual */
  .bi-card.dominant{ background:var(--negro); border-color:var(--negro); }
  .bi-card.dominant h3{ color:var(--blanco); }
  .bi-card.dominant p{ color:var(--gris-cla); }
  .bi-card.dominant .eyebrow{ color:var(--gris-cla); }
  .bi-card.dominant .eyebrow::before{ color:var(--gris-med); }
  @media(min-width:960px){ .bi-card.dominant .bi-photo{ aspect-ratio:16/8; } }

  /* ==========================================================================
     8. AUTORIDAD DE FIRMA (PDF §6.3) + contadores pendientes
     ========================================================================== */
  .auth-grid{ display:grid; grid-template-columns:1fr; gap:40px; align-items:center; }
  @media(min-width:960px){ .auth-grid{ grid-template-columns:1.05fr .95fr; gap:64px; } }
  .auth-photo{ aspect-ratio:4/3; border-radius:4px; }
  .auth-text p{ font-size:15px; color:var(--gris-osc); margin-bottom:18px; }
  .stats-row{
    display:grid; grid-template-columns:1fr; gap:18px; margin-top:36px;
    border-top:1px solid var(--gris-cla); padding-top:32px;
  }
  @media(min-width:640px){ .stats-row{ grid-template-columns:repeat(3,1fr); } }
  .stat .stat-num{ font-family:var(--display); font-size:26px; margin-bottom:6px; line-height:1.2; }
  .stat .stat-label{ font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--gris-osc); font-weight:600; }

  /* ==========================================================================
     9. MARCO LEGAL (PDF §6.4) — tres tarjetas
     ========================================================================== */
  .leyes-grid{ display:grid; grid-template-columns:1fr; gap:20px; }
  @media(min-width:900px){ .leyes-grid{ grid-template-columns:repeat(3,1fr); } }
  .ley-card{
    border:1px solid var(--gris-cla); border-radius:6px; padding:36px 28px; background:var(--blanco);
    transition:border-color .25s ease, transform .25s ease;
  }
  .ley-card:hover{ border-color:var(--gris-osc); transform:translateY(-4px); }
  .ley-num{ font-family:var(--display); font-size:34px; margin-bottom:6px; }
  .ley-sub{ font-size:11px; letter-spacing:.14em; text-transform:uppercase; font-weight:600; color:var(--gris-osc); margin-bottom:16px; }
  .ley-card p{ font-size:14px; color:var(--gris-osc); }

  /* ==========================================================================
     10. TARJETAS DE SERVICIO / RUTAS / CAMINOS (conservadas)
     ========================================================================== */
  .servicio-card{
    display:grid; grid-template-columns:1fr; border:1px solid var(--gris-cla); border-radius:6px; overflow:hidden;
    margin-bottom:28px; background:var(--blanco); transition:border-color .25s ease, transform .25s ease;
  }
  .servicio-card:hover{ border-color:var(--gris-osc); transform:translateY(-4px); }
  @media(min-width:768px){ .servicio-card{ grid-template-columns:.85fr 1.15fr; } }
  @media(min-width:768px){
    .servicio-card.flip{ grid-template-columns:1.15fr .85fr; }
    .servicio-card.flip .servicio-photo{ order:2; }
  }
  .servicio-photo{ aspect-ratio:4/3; }
  @media(min-width:768px){ .servicio-photo{ aspect-ratio:auto; height:100%; } }
  .servicio-body{ padding:32px 28px; display:flex; flex-direction:column; justify-content:center; }
  @media(min-width:1024px){ .servicio-body{ padding:48px; } }
  .servicio-body h3{ font-size:24px; margin-bottom:14px; }
  .servicio-body .quien{
    font-size:13.5px; color:var(--negro); background:var(--gris-hue);
    border-left:2px solid var(--negro); padding:12px 16px; border-radius:0 3px 3px 0; margin-bottom:18px;
  }
  .servicio-body .quien b{ font-size:10px; letter-spacing:.16em; text-transform:uppercase; display:block; color:var(--gris-osc); margin-bottom:4px; }
  .servicio-body .logra-label{ font-size:10px; letter-spacing:.16em; text-transform:uppercase; font-weight:600; color:var(--gris-osc); margin-bottom:8px; }
  .servicio-body ul{ margin:0 0 24px; display:flex; flex-direction:column; gap:9px; }
  .servicio-body li{ font-size:14px; color:var(--gris-osc); padding-left:18px; position:relative; }
  .servicio-body li::before{ content:"◆"; position:absolute; left:0; top:2px; font-size:7px; color:var(--gris-med); }

  /* ==========================================================================
     11. SÍNTOMAS DE CRISIS (PDF §7.2)
     ========================================================================== */
  .sintomas-list{ display:grid; grid-template-columns:1fr; gap:14px; max-width:820px; }
  @media(min-width:768px){ .sintomas-list{ grid-template-columns:1fr 1fr; } }
  .sintoma{
    display:flex; gap:14px; align-items:flex-start; border:1px solid var(--gris-cla);
    border-radius:6px; padding:20px 22px; font-size:14.5px; background:var(--blanco);
  }
  .sintoma::before{ content:"◆"; font-size:8px; color:var(--gris-med); margin-top:8px; flex-shrink:0; }

  /* ==========================================================================
     12. BENEFICIOS / DIFERENCIALES (conservado)
     ========================================================================== */
  /* --- Retratos del equipo (Personas · «Por qué CAP») ----------------------
     Cinco retratos circulares entre el titular y los beneficios: el titular dice
     que hay un equipo, las caras lo demuestran y los beneficios lo explican.

     Fueron rectángulos escalonados en la primera versión. Pasan a círculos
     iguales a petición de la firma, y el cambio arrastra dos cosas: se va el
     desplazamiento alterno —con círculos del mismo tamaño, descolocarlos rompe
     justo la uniformidad que se buscaba— y la proporción pasa a 1:1, porque un
     círculo recortado de un rectángulo no es un círculo.

     `auto-fit` en vez de un número fijo de columnas: el equipo crece, y la fila
     tiene que repartirse sola entre los retratos que haya sin dejar un hueco al
     final el día que alguien entre o salga.

     `object-position` sube el encuadre al 30 %: al recortar un retrato vertical
     a un cuadrado, centrarlo deja la cara pegada al borde superior del círculo o
     directamente cortada. */
  .equipo-collage{
    display:grid; grid-template-columns:repeat(auto-fit, minmax(116px, 1fr));
    gap:20px; margin-bottom:48px; max-width:880px; margin-left:auto; margin-right:auto;
  }
  @media(min-width:900px){ .equipo-collage{ gap:28px; } }
  /* Sin retratos no hay collage: el contenedor no deja su margen ni su hueco.
     Es la misma regla que rige el resto del sitio —no se publica marcado en
     blanco— resuelta aquí en CSS, porque un condicional que envolviera al
     contenedor obligaría a anidar condicionales y ni el ensamblador estático ni
     el arnés saben resolverlos. */
  .equipo-collage:empty{ display:none; }
  .equipo-photo{
    aspect-ratio:1/1; overflow:hidden; border-radius:50%; background:var(--gris-cla);
  }
  .equipo-photo img{
    width:100%; height:100%; object-fit:cover; object-position:center 30%; display:block;
  }

  .beneficios-grid{ display:grid; grid-template-columns:1fr; gap:36px; }
  @media(min-width:600px){ .beneficios-grid{ grid-template-columns:1fr 1fr; } }
  @media(min-width:1024px){ .beneficios-grid{ grid-template-columns:repeat(4,1fr); gap:32px; } }
  .beneficio-icon{
    width:44px; height:44px; border:1px solid var(--negro); border-radius:50%;
    display:flex; align-items:center; justify-content:center; margin-bottom:20px;
    font-family:var(--display); font-size:15px;
  }
  .beneficio h3{ font-family:var(--body); font-weight:600; font-size:16px; text-transform:none; margin-bottom:8px; letter-spacing:0; }
  .beneficio p{ font-size:14px; color:var(--gris-osc); }

  /* ==========================================================================
     13. PROCESO — TIMELINE (conservado; ampliado a 6 pasos)
     ========================================================================== */
  .timeline{ display:grid; grid-template-columns:1fr; gap:0; }
  @media(min-width:700px){ .timeline{ grid-template-columns:1fr 1fr; column-gap:32px; } }
  @media(min-width:1100px){ .timeline{ grid-template-columns:repeat(6,1fr); column-gap:0; } }
  .tl-step{ position:relative; padding:0 0 40px 44px; }
  .tl-step::before{
    content:""; position:absolute; left:15px; top:32px; bottom:0; width:1px; background:var(--gris-cla);
  }
  .tl-step:last-child::before{ display:none; }
  @media(min-width:700px) and (max-width:1099px){
    .tl-step::before{ display:none; }
  }
  @media(min-width:1100px){
    .tl-step{ padding:44px 20px 0 0; }
    .tl-step::before{ display:block; left:0; right:0; top:15px; bottom:auto; height:1px; width:auto; }
    .tl-step:last-child::before{ display:none; }
  }
  .tl-num{
    position:absolute; left:0; top:0; width:32px; height:32px; border:1px solid var(--negro); border-radius:50%;
    display:flex; align-items:center; justify-content:center; font-family:var(--display); font-size:13px; background:var(--blanco); z-index:2;
  }
  @media(min-width:1100px){ .tl-num{ position:static; margin-bottom:22px; } }
  .tl-step h3{ font-family:var(--body); font-weight:600; font-size:15px; margin-bottom:8px; letter-spacing:0; }
  .tl-step p{ font-size:13px; color:var(--gris-osc); }

  /* ==========================================================================
     14. CASOS (PDF §7.6) — plantillas con marcadores
     ========================================================================== */
  .casos-track{ display:grid; grid-template-columns:1fr; gap:20px; }
  @media(min-width:768px){ .casos-track{ grid-template-columns:repeat(3,1fr); } }
  .caso-card{ border:1px solid var(--gris-cla); border-radius:6px; padding:32px 26px; background:var(--blanco); transition:border-color .25s ease, transform .25s ease;}
  .caso-card:hover{ border-color:var(--gris-osc); transform:translateY(-4px); }
  .caso-num{ font-family:var(--display); font-size:22px; margin-bottom:14px; line-height:1.3; }
  .caso-tag{ font-size:11px; text-transform:uppercase; letter-spacing:.1em; font-weight:600; color:var(--gris-osc); margin-bottom:10px; }
  .caso-card p{ font-size:14px; color:var(--gris-osc); }

  /* ==========================================================================
     15. TESTIMONIOS (PDF §8.5) — sección negra conservada
     ========================================================================== */
  .testi{ background:var(--negro); color:var(--blanco); }
  .testi .eyebrow{ color:var(--gris-cla); justify-content:center; }
  .testi .eyebrow::before{ color:var(--gris-med); }
  .testi-quote{ max-width:760px; margin:0 auto; text-align:center; }
  .testi-quote blockquote{ font-family:var(--display); font-weight:400; font-size:20px; line-height:1.5; margin-bottom:28px; }
  @media(min-width:1024px){ .testi-quote blockquote{ font-size:26px; } }
  .testi-meta{ font-size:12px; letter-spacing:.08em; text-transform:uppercase; color:var(--gris-cla); }
  .testi-dots{ display:flex; gap:8px; justify-content:center; margin-top:36px; }
  .testi-dots span{ width:6px; height:6px; border-radius:50%; background:rgba(255,255,255,.3); }
  .testi-dots span.active{ background:var(--blanco); }

  /* --- Carrusel de reseñas --------------------------------------------------
     El mockup lo dibujaba así: una cita grande y sus puntos debajo. Se publica
     igual, pero el carrusel es lo que se **añade** cuando hay JavaScript, no lo
     que hay que desactivar si falta.

     Sin script, `.testi-slider` es una columna: las cuatro reseñas se leen una
     debajo de otra y los puntos no se imprimen, porque no llevarían a ninguna
     parte. Con script, la columna pasa a ser una fila desplazable y aparecen los
     puntos. Es la misma regla que gobierna `.reveal` y la cortina del Inicio: lo
     que se pide es mostrar el adorno, nunca esconder el contenido.

     El desplazamiento es nativo —`scroll-snap`—, así que el arrastre táctil, la
     rueda del ratón y el teclado funcionan sin que ningún script los atienda.
     Los puntos solo saltan de una a otra. */
  .testi-slider{ display:grid; gap:24px; max-width:980px; margin:0 auto; }

  .js .testi-slider{
    display:flex; gap:0; overflow-x:auto; scroll-snap-type:x mandatory;
    scroll-behavior:smooth; scrollbar-width:none; -ms-overflow-style:none;
  }
  .js .testi-slider::-webkit-scrollbar{ display:none; }
  .js .testi-slide{ flex:0 0 100%; scroll-snap-align:center; }

  .testi-slide{ text-align:center; padding:0 4px; }
  .testi-slide blockquote{
    font-family:var(--display); font-weight:400; font-size:20px; line-height:1.5;
    margin-bottom:26px;
  }
  @media(min-width:1024px){ .testi-slide blockquote{ font-size:26px; } }
  .testi-autor{
    font-family:var(--body); font-size:13px; font-weight:600; letter-spacing:.04em; color:var(--blanco);
  }
  .testi-origen{
    font-family:var(--body); font-size:11px; letter-spacing:.12em; text-transform:uppercase;
    color:var(--gris-med); margin-top:6px;
  }

  /* Los puntos son botones reales, no los `<span>` del mockup: llevan a otra
     reseña, así que tienen que ser pulsables con el teclado y anunciarse como lo
     que son. Es la misma corrección que se le hizo al acordeón del FAQ. */
  .testi-dots{ display:none; }
  .js .testi-dots{ display:flex; gap:10px; justify-content:center; margin-top:36px; }
  .testi-dots button{
    width:8px; height:8px; padding:0; border:0; border-radius:50%; cursor:pointer;
    background:rgba(255,255,255,.3); transition:background .25s ease, transform .25s ease;
  }
  .testi-dots button:hover{ background:rgba(255,255,255,.6); }
  .testi-dots button[aria-current="true"]{ background:var(--blanco); transform:scale(1.25); }
  .testi-dots button:focus-visible{ outline:2px solid var(--blanco); outline-offset:3px; }

  /* ==========================================================================
     16. FINANCIACIÓN DE HONORARIOS (PDF §8.6)
     ========================================================================== */
  .financia{
    border:1px solid var(--gris-cla); border-radius:6px; background:var(--blanco);
    display:grid; grid-template-columns:1fr; overflow:hidden;
  }
  @media(min-width:900px){ .financia{ grid-template-columns:1.1fr .9fr; } }
  .financia-body{ padding:40px 30px; }
  @media(min-width:1024px){ .financia-body{ padding:56px; } }
  .financia-body h3{ font-size:26px; margin-bottom:14px; }
  .financia-body p{ font-size:15px; color:var(--gris-osc); margin-bottom:26px; }
  .financia-photo{ aspect-ratio:16/9; }
  @media(min-width:900px){ .financia-photo{ aspect-ratio:auto; height:100%; } }

  /* ==========================================================================
     17. FAQ (conservado; respuestas más largas)
     ========================================================================== */
  .faq-item{ border-bottom:1px solid var(--gris-cla); }
  .faq-q{ display:flex; align-items:center; justify-content:space-between; gap:20px; padding:22px 0; cursor:pointer; }
  .faq-q h3{ font-family:var(--body); font-weight:500; font-size:15px; letter-spacing:0; }
  @media(min-width:1024px){ .faq-q h3{font-size:16px;} }
  .faq-plus{ width:20px; height:20px; position:relative; flex-shrink:0; }
  .faq-plus::before,.faq-plus::after{ content:""; position:absolute; background:var(--negro); transition:transform .25s ease; }
  .faq-plus::before{ left:0; top:50%; width:100%; height:1px; }
  .faq-plus::after{ top:0; left:50%; width:1px; height:100%; }
  .faq-item.open .faq-plus::after{ transform:scaleY(0); }
  .faq-a{ max-height:0; overflow:hidden; transition:max-height .3s ease; }
  .faq-a p{ padding:0 0 24px; font-size:14px; color:var(--gris-osc); max-width:640px; }
  .faq-item.open .faq-a{ max-height:420px; }

  /* ==========================================================================
     18. RECURSOS / BLOG (PDF §5 y §6.5)
     ========================================================================== */
  .chips{ display:flex; flex-wrap:wrap; gap:10px; margin-bottom:32px; }
  .chip{
    font-size:11px; font-weight:600; letter-spacing:.08em; text-transform:uppercase;
    border:1px solid var(--gris-cla); color:var(--gris-osc); padding:9px 16px; border-radius:20px;
    background:var(--blanco); cursor:pointer; transition:all .2s ease;
  }
  .chip.active, .chip:hover{ background:var(--negro); color:var(--blanco); border-color:var(--negro); }
  .blog-grid{ display:grid; grid-template-columns:1fr; gap:20px; }
  @media(min-width:768px){ .blog-grid{ grid-template-columns:repeat(3,1fr); } }
  .blog-card{ border:1px solid var(--gris-cla); border-radius:6px; overflow:hidden; background:var(--blanco); transition:border-color .25s ease, transform .25s ease; }
  .blog-card:hover{ border-color:var(--gris-osc); transform:translateY(-4px); }
  .blog-photo{ aspect-ratio:16/9; }
  .blog-body{ padding:24px 22px 28px; }
  .blog-tag{ font-size:10px; letter-spacing:.14em; text-transform:uppercase; font-weight:600; color:var(--gris-osc); margin-bottom:10px; }
  .blog-body h3{ font-family:var(--body); font-weight:600; font-size:15.5px; letter-spacing:0; line-height:1.45; }
  .blog-card.hidden{ display:none; }

  /* ==========================================================================
     19. CTA FINAL + FORMULARIOS
     ========================================================================== */
  .cta-final{ background:var(--gris-hue); text-align:center; }
  .cta-final h2{ font-size:28px; margin-bottom:16px; }
  @media(min-width:1024px){ .cta-final h2{ font-size:38px; } }
  .cta-final p.cta-sub{ color:var(--gris-osc); margin-bottom:36px; font-size:14.5px; max-width:560px; margin-left:auto; margin-right:auto; }
  .cta-final.dark{ background:var(--negro); }
  .cta-final.dark h2{ color:var(--blanco); }
  .cta-final.dark p.cta-sub{ color:var(--gris-cla); }

  .form-card{
    background:var(--blanco); border:1px solid var(--gris-cla); border-radius:6px;
    padding:30px 24px; max-width:720px; margin:0 auto; text-align:left;
  }
  @media(min-width:768px){ .form-card{ padding:44px 48px; } }
  .form-card label.f-label{
    display:block; font-size:11px; font-weight:600; letter-spacing:.1em; text-transform:uppercase;
    color:var(--gris-osc); margin-bottom:8px;
  }
  .f-row{ display:grid; grid-template-columns:1fr; gap:18px; margin-bottom:18px; }
  @media(min-width:640px){ .f-row.cols-2{ grid-template-columns:1fr 1fr; } }
  .form-card input[type=text], .form-card input[type=tel], .form-card input[type=email], .form-card textarea{
    width:100%; font-family:var(--body); font-size:14px; color:var(--negro);
    border:1px solid var(--gris-cla); border-radius:3px; padding:14px 16px; background:var(--blanco);
    transition:border-color .2s ease;
  }
  .form-card input:focus, .form-card textarea:focus{ border-color:var(--negro); outline:none; }
  .form-card textarea{ min-height:110px; resize:vertical; }

  /* Selector de perfil empresa / persona (PDF §9: enrutamiento de leads) */
  .seg{
    display:grid; grid-template-columns:1fr 1fr; border:1px solid var(--negro);
    border-radius:3px; overflow:hidden; margin-bottom:4px;
  }
  .seg-opt{ position:relative; }
  .seg-opt input{ position:absolute; opacity:0; inset:0; cursor:pointer; }
  .seg-opt span{
    display:block; text-align:center; padding:14px 10px; font-size:12px; font-weight:600;
    letter-spacing:.1em; text-transform:uppercase; color:var(--negro); background:var(--blanco);
    transition:all .2s ease; cursor:pointer;
  }
  .seg-opt input:checked + span{ background:var(--negro); color:var(--blanco); }
  .seg-opt input:focus-visible + span{ outline:2px solid var(--negro); outline-offset:-3px; }
  .seg-hint{ font-size:12px; color:var(--gris-med); margin-bottom:18px; }

  .f-consent{ display:flex; gap:10px; align-items:flex-start; font-size:12.5px; color:var(--gris-osc); margin:6px 0 24px; }
  .f-consent input{ margin-top:3px; }
  .form-card .btn{ width:100%; }
  .form-ok{
    text-align:center; padding:28px 10px;
  }
  .form-ok h3{ font-family:var(--body); font-weight:600; font-size:17px; letter-spacing:0; margin-bottom:10px; }
  .form-ok p{ font-size:14px; color:var(--gris-osc); }

  /* Datos de contacto por vertical (vista Contacto) */
  .contact-cards{ display:grid; grid-template-columns:1fr; gap:20px; margin-top:48px; }
  @media(min-width:768px){ .contact-cards{ grid-template-columns:1fr 1fr; } }
  .contact-card{ border:1px solid var(--gris-cla); border-radius:6px; padding:30px 26px; background:var(--blanco); text-align:left; }
  .contact-card h3{ font-family:var(--body); font-weight:600; font-size:15px; letter-spacing:.04em; text-transform:uppercase; margin-bottom:16px; }
  .contact-card li{ font-size:14px; color:var(--gris-osc); margin-bottom:10px; }

  /* ==========================================================================
     20. FOOTER
     ========================================================================== */
  footer{ background:var(--blanco); border-top:1px solid var(--gris-cla); padding:64px 0 28px; }
  .foot-grid{ display:grid; grid-template-columns:1fr; gap:36px; margin-bottom:48px; }
  @media(min-width:768px){ .foot-grid{ grid-template-columns:1.4fr 1fr 1fr 1fr; gap:24px; } }
  .foot-brand .logo{ margin-bottom:14px; display:inline-block; }
  .foot-brand p{ font-size:13px; color:var(--gris-osc); max-width:250px; }
  .foot-col h5{ font-size:11px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; margin-bottom:18px; color:var(--gris-osc); }
  .foot-col li{ margin-bottom:11px; font-size:14px; }
  .foot-col a:hover{ color:var(--gris-osc); }
  .foot-bottom{ border-top:1px solid var(--gris-cla); padding-top:26px; display:flex; flex-direction:column; gap:16px; font-size:12px; color:var(--gris-med); }
  @media(min-width:768px){ .foot-bottom{ flex-direction:row; justify-content:space-between; align-items:center; } }
  .foot-social{ display:flex; gap:16px; }
  .foot-legal{ font-size:11.5px; color:var(--gris-med); max-width:820px; margin-top:18px; }

  /* ==========================================================================
     21. ELEMENTOS FLOTANTES (conservados)
     ========================================================================== */
  /* `bottom:22px` en todas las pantallas. Antes eran 96 en móvil y 22 a partir de
     1024px, porque el flotante tenía que quedar por encima de la barra CTA fija
     que ocupaba el borde inferior. Esa barra se retiró —el cliente quiere ver
     solo el flotante—, así que 96px dejarían el botón levitando sobre un hueco
     vacío, más lejos del pulgar y sin nada que lo justifique. */
  .wa-float{
    position:fixed; right:22px; bottom:22px; width:56px; height:56px; border-radius:50%; background:var(--whatsapp);
    color:var(--blanco);
    display:flex; align-items:center; justify-content:center; z-index:60; box-shadow:0 6px 20px rgba(0,0,0,.25); cursor:pointer;
    transition:background .25s ease, transform .25s ease;
  }
  .wa-float:hover{ background:var(--whatsapp-osc); transform:translateY(-2px); }

  /* El icono no trae medidas: las pone quien lo usa (ver `cap_icono_whatsapp()`). Estas dos
     dejan el glifo en la proporción del botón oficial, con aire suficiente alrededor para que
     el círculo se lea como círculo y no como un icono recortado.

     La sombra del flotante no es adorno: separa el verde del fondo blanco de la página. El botón
     es un elemento gráfico sin texto, y el verde de marca sobre blanco no llega por sí solo al
     contraste que hace falta para distinguir su silueta. */
  .wa-float .icono-wa{ width:30px; height:30px; display:block; }

  /*
   * Aquí vivía `.mobile-cta-bar`: la barra fija del borde inferior en móvil, con el CTA
   * «Diagnóstico confidencial» y un segundo botón de WhatsApp al lado. Venía del mockup y se
   * retira a petición del cliente, que quiere ver solo el botón flotante.
   *
   * Con ella se van tres cosas que solo existían para sostenerla, y que conviene no resucitar
   * por separado: el `.wa-btn` cuadrado —el segundo WhatsApp de la fila—, el
   * `body{ padding-bottom:78px }` que reservaba el hueco para que la barra no tapara el final
   * del pie, y el `bottom:96px` con el que el flotante la esquivaba.
   */

  /* ==========================================================================
     22. AÑADIDOS DEL TEMA
     ========================================================================== */
  .cap-skip-link{
    position:absolute; left:8px; top:-48px; z-index:100; background:var(--negro); color:var(--blanco);
    padding:12px 18px; border-radius:3px; font-family:var(--body); font-size:13px; font-weight:600;
    text-decoration:none; transition:top .15s ease;
  }
  .cap-skip-link:focus{ top:8px; }

  /* --------------------------------------------------------------------------
     .reveal — la animación se activa solo si hay JavaScript

     La sección 1 trae del mockup `.reveal{opacity:0; transform:translateY(22px)}`
     y `.reveal.in{opacity:1; transform:none}`: la clase `.in` la añade un
     IntersectionObserver al entrar el bloque en pantalla.

     El problema de servir eso tal cual es que `.reveal` marca casi todo el
     contenido de las páginas, así que cualquier cosa que impida al script
     ejecutarse —un 404 tras un despliegue a medias, un bloqueador, una red que
     se corta a mitad de la descarga— no dejaría «una página sin animación»:
     dejaría una página en blanco, con el texto ahí pero invisible. Es un modo
     de fallo demasiado caro para un adorno.

     Por eso el estado por defecto es «visible», y ocultar es lo que hay que
     pedir explícitamente: el script añade `js` al elemento raíz como primera
     instrucción, y solo entonces se esconde lo que aún no ha entrado en
     pantalla. Sin script, todo se lee.

     La última regla replica la excepción de `prefers-reduced-motion` de la
     sección 1: sin ella, este bloque —más específico y posterior— se la comería
     y quien pidió que nada se moviera vería el contenido aparecer de golpe al
     desplazarse, que es justo lo que quería evitar.
     -------------------------------------------------------------------------- */
  .reveal{ opacity:1; transform:none; }
  .js .reveal:not(.in){ opacity:0; transform:translateY(22px); }
  @media (prefers-reduced-motion: reduce){
    .js .reveal:not(.in){ opacity:1; transform:none; }
  }

  /* --------------------------------------------------------------------------
     FAQ — el `.faq-q` es un <button> real y el <h3> lo envuelve

     Dos desviaciones de accesibilidad respecto del mockup (ver los docblocks de
     page-empresas.php y page-personas.php) obligan a completar aquí lo que el
     CSS del mockup daba por hecho:

     1) El mockup abría la pregunta con `<div class="faq-q">` y un listener de
        click. La plantilla usa `<button>`, y un `<button>` sin estilar hereda
        del navegador fondo gris, borde, tipografía del sistema y texto
        centrado. Las declaraciones de abajo le devuelven el aspecto del
        mockup: una fila transparente separada solo por el borde inferior de
        `.faq-item`. El resto (display:flex, gap, padding, cursor) ya se lo da
        `.faq-q` en la sección 17.

     2) El `<h3>` pasó de estar DENTRO del botón a ENVOLVERLO, porque el modelo
        de contenido de `<button>` es phrasing content y porque el nombre
        accesible de un botón aplana a sus descendientes (el h3 perdía su rol y
        la pregunta desaparecía del esquema de encabezados). Por eso la regla
        `.faq-q h3` de la sección 17 ya no encaja con nada: sus declaraciones se
        replican aquí sobre el h3 que envuelve, y el botón las hereda gracias a
        `font:inherit`.

     3) `.faq-plus` pasó de `<div>` a `<span>` por el mismo motivo (un `<div>`
        tampoco es válido dentro de un botón); recupera aquí su modo de caja de
        bloque, del que dependen su `width`/`height` y sus pseudoelementos.
     -------------------------------------------------------------------------- */
  .faq-q{
    width:100%; background:none; border:0; color:inherit; font:inherit; text-align:left;
    -webkit-appearance:none; appearance:none;
  }
  /* El foco visible del mockup (sección 1) enumera `.btn, a, input, select,
     textarea`, pero no `button` suelto: sin esto, quitar el estilo del
     navegador se llevaría por delante también su anillo de foco. */
  .faq-q:focus-visible{ outline:2px solid var(--negro); outline-offset:2px; }
  .faq-item h3{ font-family:var(--body); font-weight:500; font-size:15px; letter-spacing:0; }
  @media(min-width:1024px){ .faq-item h3{ font-size:16px; } }
  .faq-plus{ display:block; }

  /* ==========================================================================
     23. FOTOGRAFÍAS
     Las fotografías se cargan desde Ajustes → CAP Abogados. El contenedor ya
     reserva su espacio con `aspect-ratio`, así que la imagen solo tiene que
     llenarlo. Cuando una casilla está vacía, la sección colapsa: las rejillas
     de dos columnas vuelven a una sola para que el texto no quede huérfano en
     la mitad de una composición pensada para dos.

     Los cinco huecos de `.hero-grid` y `.auth-grid` no son hijos directos de
     su rejilla: van dentro de un `<div class="reveal">` que queda fuera del
     condicional de PHP. Con la casilla vacía ese envoltorio sigue siendo el
     segundo hijo —vacío, de altura cero—, así que la rejilla mantiene dos
     filas y el `gap` dejaría una banda muerta entre el texto y el borde
     inferior. Por eso estas dos anulan también el `gap`; `.servicio-card` y
     `.financia` no lo necesitan, porque ahí el hueco sí es hijo directo y
     desaparece con él.

     No hacen falta anulaciones dentro de media queries: `.X.sin-foto` tiene
     dos clases y gana por especificidad a `.X`, que tiene una. Las consultas
     de medios no aportan especificidad, así que la regla base manda en
     cualquier ancho de ventana.
     ========================================================================== */
  .hero-photo img,
  .bi-photo img,
  .auth-photo img,
  .servicio-photo img,
  .financia-photo img{
    display:block; width:100%; height:100%; object-fit:cover; border-radius:inherit;
  }
  .hero-grid.sin-foto{ grid-template-columns:1fr; gap:0; }
  .auth-grid.sin-foto{ grid-template-columns:1fr; gap:0; }
  .servicio-card.sin-foto{ grid-template-columns:1fr; }
  .financia.sin-foto{ grid-template-columns:1fr; }

  /* ==========================================================================
     24. RECURSOS / BLOG — listado, artículo y prosa del editor

     La sección 18 ya trae del mockup la rejilla y la tarjeta. Lo que falta aquí
     es todo lo que el mockup no podía tener, porque sus tarjetas eran
     marcadores sin artículo detrás y sin fotografía: el enlace que envuelve la
     tarjeta, la miniatura real, la paginación del listado y —lo más importante—
     la prosa.

     La prosa hace falta porque esta es la única parte del sitio cuyo marcado no
     está escrito a mano. Las cinco páginas fijas traen sus etiquetas del
     mockup, ya estiladas una por una; un artículo lo escribe el equipo de la
     firma desde el escritorio, y `the_content()` puede devolver encabezados,
     listas, citas o enlaces que hasta ahora ninguna regla tocaba. Sin esta
     sección, una guía se publicaría con los estilos por defecto del navegador
     —Times New Roman, azules subrayados— dentro de un sitio compuesto en Cinzel
     y Montserrat.
     ========================================================================== */

  /* --- Tarjeta enlazable ---------------------------------------------------
     El `<a>` envuelve el contenido de la tarjeta, no al `<article>`: el borde,
     el radio y el `overflow:hidden` de `.blog-card` (sección 18) tienen que
     seguir aplicándose por fuera. Como el enlace es ahora quien contiene la
     foto y el cuerpo, necesita ser bloque y llenar la tarjeta; sin eso, la
     zona pulsable se reduciría a la línea de texto del título. */
  .blog-enlace{ display:block; height:100%; color:inherit; }
  .blog-photo img{ width:100%; height:100%; object-fit:cover; }

  /* La sección 18 fija `.blog-photo{aspect-ratio:16/9}`. Cuando la entrada no
     trae miniatura, el hueco desaparece del marcado y la tarjeta se compone
     solo con su cuerpo, igual que las rejillas que colapsan sin fotografía. */

  .recursos-mas{ margin-top:40px; }
  .recursos-vacio{ font-size:15px; color:var(--gris-osc); }

  /* --- Paginación del listado ---------------------------------------------
     `the_posts_pagination()` envuelve los enlaces en `.navigation.pagination >
     .nav-links`. El número de la página actual llega como `<span
     class="page-numbers current">`, sin enlace, y por eso el estilo se declara
     sobre `.page-numbers` y no sobre `a`. */
  .navigation.pagination{ margin-top:48px; }
  .navigation.pagination .nav-links{
    display:flex; flex-wrap:wrap; gap:8px; align-items:center;
  }
  .navigation.pagination .page-numbers{
    display:inline-flex; align-items:center; justify-content:center;
    min-width:40px; padding:0 12px; height:40px;
    border:1px solid var(--gris-cla); border-radius:2px;
    font-size:12px; font-weight:600; letter-spacing:.08em; text-transform:uppercase;
    color:var(--gris-osc); transition:border-color .25s ease, background .25s ease, color .25s ease;
  }
  .navigation.pagination a.page-numbers:hover{ border-color:var(--negro); color:var(--negro); }
  .navigation.pagination .page-numbers.current{
    background:var(--negro); border-color:var(--negro); color:var(--blanco);
  }
  .navigation.pagination .page-numbers.dots{ border-color:transparent; }

  /* --- Artículo ------------------------------------------------------------
     El ancho de lectura es más estrecho que el `.wrap` general: una línea de
     texto corrido que cruza los 1280 px del sitio obliga al ojo a saltar de
     vuelta a ciegas al final de cada renglón. */
  .entrada-cabeza, .entrada-foto, .entrada-cuerpo{ max-width:760px; margin:0 auto; }
  .entrada-cabeza h1{ font-size:30px; line-height:1.22; margin-bottom:16px; }
  @media(min-width:1024px){ .entrada-cabeza h1{ font-size:42px; } }
  .entrada-fecha{ font-size:12px; letter-spacing:.1em; text-transform:uppercase; color:var(--gris-med); }
  .entrada-foto{ aspect-ratio:16/9; overflow:hidden; border-radius:6px; }
  .entrada-foto img{ width:100%; height:100%; object-fit:cover; }

  /* --- Prosa ---------------------------------------------------------------
     La comparten los dos sitios del tema donde el marcado no está escrito a
     mano: el cuerpo de un artículo del blog, que sale de `the_content()`, y las
     tres páginas legales, que transcriben documentos largos con encabezados,
     listas y enlaces. Antes vivía pegada a `.entrada-cuerpo`; se separó al
     llegar las páginas legales, porque la alternativa era duplicar veinte
     reglas para conseguir exactamente lo mismo.

     `> *` no se usa a propósito: el editor de bloques envuelve en `<div>` y en
     `<figure>`, y una regla de hijo directo se saltaría todo lo anidado. */
  .prosa{ font-size:15.5px; color:var(--negro); }
  @media(min-width:1024px){ .prosa{ font-size:16px; } }
  .prosa p{ margin-bottom:22px; color:var(--gris-osc); }
  .prosa h2{ font-size:24px; line-height:1.3; margin:44px 0 16px; }
  @media(min-width:1024px){ .prosa h2{ font-size:28px; } }
  .prosa h3{
    font-family:var(--body); font-weight:600; font-size:17px; letter-spacing:0;
    line-height:1.4; margin:32px 0 12px;
  }
  /* El primer encabezado del artículo no separa nada de nada: su margen
     superior solo abriría un hueco entre el titular y el cuerpo. */
  .prosa > :first-child{ margin-top:0; }
  .prosa ul, .prosa ol{ margin:0 0 22px 22px; color:var(--gris-osc); }
  .prosa ul{ list-style:disc; }
  .prosa ol{ list-style:decimal; }
  .prosa li{ margin-bottom:8px; }
  .prosa li::marker{ color:var(--gris-med); }
  .prosa blockquote{
    margin:32px 0; padding:4px 0 4px 24px; border-left:2px solid var(--negro);
    font-size:17px; line-height:1.55;
  }
  .prosa blockquote p:last-child{ margin-bottom:0; }
  /* La regla global `a{color:inherit; text-decoration:none}` de la sección 1 deja
     los enlaces del editor indistinguibles del texto. Dentro de una guía, donde
     quien escribe enlaza a una ley o a otra entrada, eso los hace invisibles. */
  .prosa a{
    color:var(--negro); text-decoration:underline; text-underline-offset:3px;
    text-decoration-color:var(--gris-cla); transition:text-decoration-color .25s ease;
  }
  .prosa a:hover{ text-decoration-color:var(--negro); }

  /* Un botón puesto desde el editor es un enlace, así que la regla de arriba
     también lo alcanza: le impone el color del texto y el subrayado. Sobre
     `.btn-primary`, que pinta el fondo negro, eso daba negro sobre negro. Se
     restituye lo que cada variante ya declaraba en la sección 3, ahora con la
     especificidad suficiente para ganar dentro de la prosa. */
  .prosa a.btn{ text-decoration:none; }
  .prosa a.btn-primary{ color:var(--blanco); }
  .prosa a.btn-secondary{ color:var(--negro); }
  .prosa a.btn-secondary:hover{ color:var(--blanco); }
  .prosa strong{ font-weight:600; color:var(--negro); }
  .prosa img{ border-radius:6px; margin:12px 0; }
  .prosa figure{ margin:32px 0; }
  .prosa figcaption{ margin-top:10px; font-size:12.5px; color:var(--gris-med); }
  .prosa hr{ margin:44px 0; border:0; border-top:1px solid var(--gris-cla); }
  .prosa table{ width:100%; border-collapse:collapse; margin-bottom:22px; font-size:14px; }
  .prosa th, .prosa td{
    padding:12px 14px; border:1px solid var(--gris-cla); text-align:left; vertical-align:top;
  }
  .prosa th{ font-weight:600; background:var(--gris-hue); }

  .entrada-ctas{ justify-content:center; }

  /* El listado y el archivo titulan con `<h1>`, no con el `<h2>` del mockup:
     allí Recursos era una sección dentro del Inicio y el `<h1>` era el titular
     de la portada; aquí la sección es la página entera, y publicarla sin
     encabezado de primer nivel dejaría el documento sin raíz. */
  .section-head h1{ font-size:30px; line-height:1.22; }
  @media(min-width:1024px){ .section-head h1{ font-size:40px; } }

  /* ==========================================================================
     25. CORTINA DE ENTRADA DEL INICIO

     El clip de marca a pantalla completa, solo en la portada y solo en la
     primera visita de la sesión. Se reproduce entero —algo más de seis
     segundos— y al terminar se funde para descubrir la web.

     La regla que gobierna esta sección es la primera: **por defecto no hay
     cortina**. Mostrarla es lo que hay que pedir, y solo se pide bajo `.js`.
     Al revés —ocultarla con JavaScript— cualquier cosa que impidiera al script
     ejecutarse dejaría el sitio tapado a pantalla completa, sin manera de
     entrar ni de saber que hay algo debajo. Es la misma decisión que se tomó en
     la sección 22 para `.reveal`, aquí con el error mucho más caro.

     La clase `.js` la pone una línea en el `<head>`, no el script diferido: si
     se pusiera al final, la cortina caería *encima* de una página ya pintada.
     ========================================================================== */
  .intro{ display:none; }

  .js .intro{
    display:block; position:fixed; inset:0;
    /* Por encima de todo lo que flota: cabecera (50), botón de WhatsApp (60),
       barra de CTA móvil (55) y enlace de salto al contenido (100). */
    z-index:200;
    /* Negro puro, y no el `--negro` de la paleta (#111): el clip es logotipo
       blanco sobre negro absoluto, y cualquier diferencia de tono se vería como
       un cambio de fondo en el instante en que el vídeo empieza a pintar. */
    background:#000;
    transition:opacity .9s ease, visibility .9s ease;
  }
  .js .intro.fuera{ opacity:0; visibility:hidden; pointer-events:none; }

  /* `cover` llena la pantalla sin deformar el encuadre; lo que se pierde son
     los bordes, y el plano está compuesto con el logotipo centrado por eso.
     Cuánto se pierde depende de acertar el encuadre: el clip viene montado
     apaisado y vertical, y `sitio.js` elige según la orientación de la pantalla
     antes de cargarlo. Con uno solo, un teléfono ampliaría el fotograma
     apaisado casi tres veces para quedarse con la franja central. */
  .intro-video{ width:100%; height:100%; object-fit:cover; display:block; }

  /* Mientras la cortina está puesta, el documento no se desplaza: la rueda del
     ratón sobre una pantalla opaca da la impresión de que la página está
     colgada. */
  body.intro-puesta{ overflow:hidden; }

  /* Quien pidió que nada se mueva no ve la cortina en absoluto. No se trata de
     quitarle la transición y dejar el vídeo: un clip a pantalla completa es
     precisamente lo que esa preferencia pide evitar. */
  @media (prefers-reduced-motion: reduce){
    .js .intro{ display:none; }
  }

  /* --- Los tres documentos legales en el pie -------------------------------
     La línea inferior del pie tenía dos elementos —el aviso de derechos y las
     redes— y ahora tiene tres. En escritorio, `space-between` los separaría
     demasiado, así que los enlaces legales se agrupan aparte y se les da su
     propio subrayado al pasar por encima, que es lo que distingue un enlace de
     un texto gris cuando ambos comparten tamaño y color. */
  .foot-legales{ display:flex; flex-wrap:wrap; gap:6px 20px; }
  .foot-legales a{ color:var(--gris-med); transition:color .2s ease; }
  .foot-legales a:hover{ color:var(--negro); text-decoration:underline; text-underline-offset:3px; }
  @media(min-width:768px){ .foot-bottom{ gap:24px; } }

  /* ==========================================================================
     26. PÁGINAS LEGALES: EL DOCUMENTO OFICIAL

     Las tres políticas —términos, tratamiento de datos y cookies— publican el
     PDF firmado por el representante legal, y nada más: su titular y el
     documento.

     Se incrusta con `<object>` y no con `<iframe>` porque Safari en iOS y
     Chrome en Android no dibujan un PDF incrustado. Con `<object>`, el
     navegador que no sabe mostrarlo pinta en su lugar el contenido de reserva
     que va dentro de la etiqueta, sin detectar nada por JavaScript.

     **Esa reserva no es un caso límite: en un teléfono es la página entera.**
     Como estas páginas no llevan transcripción, quien entra desde el móvil no
     ve el PDF por ningún lado, y lo único que le queda es ese bloque. Por eso
     se estila como contenido de pleno derecho —encuadrado, centrado, con su
     propio titular— y no como un mensaje de error.
     ========================================================================== */
  .doc-oficial{ max-width:900px; margin:0 auto; }
  .doc-visor{
    width:100%; height:82vh; min-height:480px;
    border:1px solid var(--gris-cla); border-radius:6px; background:var(--gris-hue);
    display:block;
  }

  /* Reserva: solo la pinta el navegador que no sabe mostrar el PDF. */
  .doc-reserva{
    display:flex; flex-direction:column; justify-content:center; align-items:center;
    min-height:220px; padding:44px 28px; text-align:center;
    border:1px solid var(--gris-cla); border-radius:6px; background:var(--gris-hue);
  }
  .doc-reserva-titulo{
    font-family:var(--display); font-size:19px; color:var(--negro); margin-bottom:14px;
  }
  .doc-reserva p{ font-size:14.5px; color:var(--gris-osc); max-width:460px; }

  .doc-descarga{ margin-top:28px; text-align:center; }

  /* En pantallas estrechas el visor casi nunca aparece —lo sustituye la
     reserva—, pero cuando el navegador sí sabe dibujarlo conviene que no ocupe
     una altura que obligue a desplazarse a ciegas. */
  @media(max-width:767px){
    .doc-visor{ height:64vh; min-height:340px; }
  }
