/* ============================================================================
   Estilos compartidos de Mindshift
   (index.html + telemedicina.html + voluntarios.html + medicos.html)

   Identidad Mindshift: Poppins · crema #FCF4EA · naranja #F26A1B · tinta #2B211B.
   Tokens y mapeo «token viejo → token nuevo»: mockups/README.md §§ 2 y 3.

   DOS naranjas, no uno:
   · --orange      #F26A1B  decorativo (iconos, bordes, anillos, chips activos).
                            Con texto blanco da 3.06:1 → NO pasa AA: nunca de relleno
                            de botón ni bajo texto pequeño.
   · --orange-ink  #BB4A0C  tinta: enlaces, texto naranja chico y relleno de botón
                            (5.12:1 con blanco).
   Sobre los cremas oscuros (--card #F7EAD9) el naranja de tinta baja a 4.33:1: ahí
   el texto pequeño va en --body y las cifras grandes en --orange-ink (ver más abajo).
   ========================================================================== */

  :root{
    /* ===== Superficies ===== */
    --bg:#FCF4EA;--card:#F7EAD9;--card-2:#F8ECDD;--banner:#F7EBDC;--white:#fff;

    /* ===== Naranja ===== */
    --orange:#F26A1B;         /* iconos, bordes, decoración, chips activos */
    --orange-deep:#E85D10;    /* palabra naranja de los titulares grandes */
    --accent:#EF5C1D;         /* cifras grandes sobre blanco/crema claro */
    --orange-ink:#BB4A0C;     /* texto naranja pequeño + relleno de botón */
    --orange-ink-hover:#9E3D07;

    /* ===== Tinta ===== */
    --ink:#2B211B;--body:#6A5C51;--muted:#7A6857;--muted-deco:#8C7A6B;

    /* ===== Líneas y sombras ===== */
    --line:rgba(242,106,27,.22);
    --line-solid:#EBD9C4;     /* borde de inputs: la línea traslúcida no se ve sobre blanco */
    /* Franja de lanzamiento: la única banda oscura del sitio, para que no se
       confunda con una sección más. La fecha NO va en --orange: #F26A1B sobre
       #2B211B da 4,17:1 y no llega a AA. */
    --franja-bg:#2B211B;
    --franja-txt:#F3E4D3;     /* 12,61:1 sobre --franja-bg */
    --franja-alta:#FFD9B8;    /* 15,72:1 — para la fecha */
    /* OJO con el naranja de texto: `--orange-ink` pasa AA sobre BLANCO (5,12:1)
       pero NO sobre los cremas (--card, --card-2, --banner), donde da 4,33:1.
       Sobre crema va `--orange-ink-hover` (5,67-5,77:1). */
    --shadow:0 18px 40px -22px rgba(163,84,20,.35);
    --shadow-sm:0 10px 24px -18px rgba(163,84,20,.4);

    /* Degradado del panel de hero. Lo usan .hero-panel (páginas internas) y
       .hero-caja (la landing, solo en móvil/tablet): en un único sitio para que
       los dos paneles no se puedan separar. Baja hasta #F7E4CD, el fondo más
       oscuro del sitio: es el que manda en las medidas de contraste del hero. */
    --degradado-panel:linear-gradient(140deg,#F8ECDD 0%,#F7E4CD 100%);

    /* ===== Semánticos ===== */
    --ok:#1E7A4D;--ok-bg:#EAF6EF;
    --err:#B3261E;--err-bg:#FCEDEB;--err-line:#F3C7BB;
    /* Rojo propio de «Ayuda urgente»: es la única señal de peligro del sitio y no
       se tiñe de naranja. */
    --err-deep:#96261A;--err-soft:#FFF3EF;
    --info-bg:#F1EDFB;

    /* ===== Forma ===== */
    --r:16px;--r-card:22px;--r-lg:28px;--r-xl:34px;
    --maxw:1290px;--header-h:76px;

    /* Los alias de compatibilidad con los nombres viejos (--primary, --navy,
       --surface…) se retiraron al migrar telemedicina, voluntarios y médicos:
       ya no queda ni un `var(--nombre-viejo)` en el repo. El mapeo «token viejo →
       token nuevo» sigue documentado en mockups/README.md § 3. */
  }

  *{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;}
  /* El atributo `hidden` debe ganar SIEMPRE: clases como .btn ponen display:inline-flex,
     que sobrescribe el display:none del user-agent y deja ver elementos [hidden]
     (p. ej. los botones del formulario por pasos de telemedicina). */
  [hidden]{display:none!important;}
  html{scroll-behavior:smooth;}
  html,body{min-height:100%;}
  /* OJO con el `overflow-x:hidden` de abajo: como `html` está en `visible`, se propaga
     al viewport, así que lo que se salga por la derecha NO da barra de scroll — se
     recorta y ya. Un desborde real se ve como un elemento cortado en el borde, no como
     una barra, y por eso pasan desapercibidos (así estuvo el CTA de la cabecera).
     Para cazarlos hay que comparar `scrollWidth` con `clientWidth`, no fiarse de la
     vista: `scrollWidth` sí cuenta lo recortado aunque no se pueda hacer scroll. */
  body{font-family:'Poppins',system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
    background:var(--bg);color:var(--ink);line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:hidden;}
  :focus-visible{outline:3px solid var(--orange-ink);outline-offset:3px;border-radius:8px;}
  img{display:block;max-width:100%;}

  .skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--orange-ink);color:#fff;padding:12px 20px;border-radius:0 0 14px 0;font-weight:700;text-decoration:none;}
  .skip:focus{left:0;}

  .wrap{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 20px;}
  @media(min-width:760px){.wrap{padding:0 32px;}}
  @media(min-width:1100px){.wrap{padding:0 40px;}}

  /* ===== Red de seguridad de los iconos =====
     Los iconos del sprite se escriben `<svg aria-hidden><use href="#i-x"/></svg>`,
     sin width/height: los dimensiona la regla del componente que los contiene
     (.btn svg, .tabbar a svg, .eyebrow svg…). Si un componente nuevo se olvida de
     esa regla, el SVG cae al tamaño por defecto de un elemento reemplazado
     —300×150— y desborda la página entera. Pasó de verdad en `.foot-cta`: el icono
     salía a 248 px y empujaba el ancho del documento a 444 px en un móvil de 375,
     lo que además estiraba el tabbar fijo fuera de la pantalla.

     Esta regla va DELIBERADAMENTE aquí arriba, antes que las de componente: su
     especificidad (0,1,1) empata con `.btn svg`, y en un empate gana la última
     declarada. Si se mueve abajo, silencia los tamaños reales de los componentes. */
  svg:not([width]){width:1.15em;height:1.15em;flex:none;}

  /* ===== Header ===== */
  .topbar{position:sticky;top:0;z-index:40;background:rgba(252,244,234,.9);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);}
  .topbar-inner{min-height:var(--header-h);display:flex;align-items:center;gap:18px;}
  .brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:inherit;flex-shrink:0;}
  .brand img{height:34px;width:auto;}
  @media(min-width:760px){.brand img{height:42px;}}
  .topnav{display:none;margin-left:auto;align-items:center;gap:26px;}
  .topnav a{text-decoration:none;color:#3A2F28;font-weight:600;font-size:15.5px;padding:6px 2px;position:relative;white-space:nowrap;transition:color .18s;}
  .topnav a:hover{color:var(--orange-ink);}
  .topnav a.active,.topnav a[aria-current="page"]{color:var(--orange-ink);}
  .topnav a.active::after,.topnav a[aria-current="page"]::after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:3px;background:var(--orange);border-radius:3px;}
  .topbar .btn{flex-shrink:0;}
  /* `.topbar` delante para ganarle a `.btn{display:inline-flex}`: sin eso el CTA
     reaparece en móvil y desborda la barra a 375 px. */
  .topbar .nav-cta{margin-left:auto;display:none;}
  @media(min-width:900px){.topnav{display:flex;}}
  /* ANCHOS DE LA CABECERA — la fila «marca + enlaces + CTA» no cabe en cualquier
     ventana, así que cada pieza entra cuando de verdad hay sitio. Medido sobre
     `telemedicina.html`, que es la cabecera más ancha (5 enlaces, y el CTA más largo,
     «Solicitar consulta»). Ancho que pide = 40 de padding del `.wrap` + 145 de marca
     + 18 de hueco + enlaces + 44 de separación (hueco 18 + margen 26) + botón:

       enlaces compactos (14.5px / hueco 16)   sin CTA 832   con CTA 1094
       enlaces normales  (15.5px / hueco 26)   sin CTA 910   con CTA 1171

     De ahí salen los dos cortes de abajo. Si añades un enlace o alargas una etiqueta,
     vuelve a medir: estos números son el ancho real del texto, no un margen holgado. */

  /* Los enlaces van compactos hasta 1279 —y no hasta 1140, como estaban— porque a
     tamaño natural piden 1171 y la cabecera se desbordaba entre 1141 y 1186. */
  @media(min-width:900px) and (max-width:1279px){.topnav{gap:16px;}.topnav a{font-size:14.5px;}}
  /* Entre 900 y 1139 px la barra va justa: los huecos se cierran. */
  @media(min-width:900px) and (max-width:1139px){
    .topbar-inner{gap:12px;}
    .topnav{gap:10px;}
  }
  /* El CTA entra a 900, igual que en el resto del sitio. Antes se callaba hasta
     1365 en membresia.html porque con 7 enlaces y «Entrar» hecho píldora la fila
     no daba: el resultado era que entre 900 y 1365 px la barra no tenía NINGUNA
     acción. Con 4 enlaces y «Entrar» como enlace de texto la fila pide 876 de
     900, así que el botón vuelve a los portátiles. */
  @media(min-width:900px){.topbar .nav-cta{display:inline-flex;margin-left:26px;}}
  /* FRANJA DE LANZAMIENTO — una sola voz alta, pegada a la cabecera, dentro del
     primer pliegue tanto a 375 como a 1280. Sin contador: la fecha es real y se
     dice como fecha, nunca como duración. */
  .franja-lanzamiento{background:var(--franja-bg);color:var(--franja-txt);}
  .franja-inner{display:flex;flex-direction:column;gap:12px;padding-top:14px;padding-bottom:14px;}
  @media(min-width:900px){.franja-inner{flex-direction:row;align-items:center;justify-content:center;text-align:center;gap:24px;padding-top:12px;padding-bottom:12px;}}
  .franja-txt{font-size:14.5px;line-height:1.5;max-width:76ch;}
  .franja-txt b{color:#fff;font-weight:700;}
  .franja-fecha{color:var(--franja-alta);font-weight:700;white-space:nowrap;}
  .franja-ic{display:inline-block;vertical-align:-3px;width:17px;height:17px;margin-right:7px;color:var(--franja-alta);}
  /* En móvil la franja es solo mensaje: el CTA ya está en el hero y en la barra
     inferior, y una banda de tres líneas con botón se comía el titular. */

  .menu-sep{margin:10px 20px 4px;padding-top:10px;border-top:1px solid var(--line);font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);}

  .menu-toggle{display:inline-flex;align-items:center;justify-content:center;margin-left:auto;background:var(--white);border:1.6px solid var(--line);color:var(--orange-ink);border-radius:14px;flex:0 0 46px;width:46px;height:46px;cursor:pointer;}
  @media(min-width:900px){.menu-toggle{display:none;}}
  .menu-panel{border-top:1px solid var(--line);background:var(--bg);padding:10px 0 16px;display:flex;flex-direction:column;}
  .menu-panel a{padding:13px 20px;font-weight:600;font-size:16px;color:#3A2F28;text-decoration:none;border-radius:12px;}
  .menu-panel a:hover{background:var(--card-2);}
  /* `.menu-panel a` (0,1,1) le gana a `.btn-primary` (0,1,0) y le devolvía el texto
     oscuro al botón naranja: 2.53:1. Hay que igualar la especificidad. */
  .menu-panel .btn{display:flex;margin:10px 20px 0;}
  .menu-panel a.btn-primary{color:#fff;}
  .menu-panel a.btn-ghost,.menu-panel a.btn-soft{color:var(--ink);}
  @media(min-width:900px){.menu-panel{display:none!important;}}
  /* La píldora «Ayuda urgente» ya no va en ninguna cabecera (PR #51): el enlace a
     la sección de crisis vive en el pie de las cuatro páginas. */

  main{padding-bottom:96px;}
  @media(min-width:900px){main{padding-bottom:0;}}
  section{scroll-margin-top:calc(var(--header-h) + 14px);}

  h1,h2,h3{letter-spacing:-.02em;line-height:1.1;font-weight:700;}
  /* CONTRASTE — la regla que hay que respetar al añadir texto naranja:
     --orange-ink #BB4A0C solo pasa AA sobre BLANCO (5.12:1) y sobre --bg (4.70:1).
     Sobre los cremas oscuros (--card #F7EAD9 4.33:1, --card-2 #F8ECDD 4.40:1 y el
     degradado del hero, que baja hasta #F7E4CD y da 4.13:1) NO llega a 4.5, así que
     ahí el texto naranja pequeño va en --orange-ink-hover #9E3D07 (5.42–5.77:1).
     Medido sobre el color computado y el fondo real compuesto, no a ojo. */
  .eyebrow{display:inline-flex;align-items:flex-start;gap:9px;line-height:1.45;text-transform:uppercase;letter-spacing:.14em;font-size:11.5px;font-weight:700;color:var(--orange-ink);}
  .eyebrow svg{flex:0 0 14px;width:14px;height:14px;margin-top:2px;}
  .sec{padding:56px 0 0;}
  .sec-head{margin-bottom:28px;}
  .sec-head h2{font-size:clamp(26px,4.4vw,40px);font-weight:700;}
  .sec-head p{color:var(--body);font-size:17px;margin-top:12px;max-width:640px;}
  /* `.sec-head p` (0,1,1) le gana a `.eyebrow` (0,1,0) y viene después, así que
     el eyebrow de una cabecera salía en --body a 17px en vez de naranja a 11,5.
     Mismo choque que ya resuelven `.hero-panel p:not(.eyebrow)` y las dos de
     `.cta-card`; aquí se sube la especificidad en vez de excluir, que es más
     corto cuando solo hay una clase que rescatar. */
  .sec-head p.eyebrow{color:var(--orange-ink);font-size:11.5px;margin-top:0;}
  .center,.sec-head.center{text-align:center;}
  .center p,.sec-head.center p{margin-left:auto;margin-right:auto;}
  .hint-inline{color:var(--muted);font-size:15px;}
  .inline-link{color:var(--orange-ink);font-weight:600;text-decoration:underline;text-underline-offset:2px;}
  .inline-link:hover{color:var(--orange-ink-hover);}

  /* ===== Botones ===== */
  .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;border:none;cursor:pointer;font-family:inherit;font-weight:600;font-size:16px;line-height:1.15;padding:15px 24px;border-radius:var(--r);text-decoration:none;text-align:center;min-height:52px;transition:transform .16s,box-shadow .16s,background .16s,color .16s,border-color .16s;}
  .btn svg{width:18px;height:18px;flex-shrink:0;}
  .btn:active{transform:scale(.98);}
  .btn-primary{background:var(--orange-ink);color:#fff;box-shadow:0 12px 24px -14px rgba(187,74,12,.75);}
  .btn-primary:hover{background:var(--orange-ink-hover);transform:translateY(-2px);}
  .btn-ghost{background:var(--white);color:var(--ink);border:1.6px solid var(--line);box-shadow:var(--shadow-sm);}
  .btn-ghost:hover{border-color:var(--orange);color:var(--orange-ink);transform:translateY(-2px);}
  .btn-soft{background:var(--card);color:var(--ink);}
  .btn-soft:hover{background:var(--card-2);transform:translateY(-2px);}
  .btn-dark{background:var(--ink);color:#fff;}
  .btn-dark:hover{background:#3E3128;transform:translateY(-2px);}
  /* Alias de las páginas sin migrar (antes iban sobre el hero oscuro). */
  .btn-block{width:100%;}
  .btn[disabled]{opacity:.55;cursor:not-allowed;transform:none;}

  /* ===== Hero de la landing (claro, con mascota) ===== */
  /* `padding-top`/`padding-bottom` en largo, NO el atajo `padding:26px 0 44px`:
     el <section> es `class="hero wrap"` y el atajo pisaba entero el `padding:0 20px`
     de .wrap, así que el titular, el párrafo y las tarjetas de cifras salían pegados
     al borde de la ventana mientras el resto de secciones respetaba el margen. En
     largo, .hero solo toca el eje vertical y .wrap conserva el lateral en sus tres
     escalones (20 / 32 desde 760 / 40 desde 1100). Es como está en el mockup
     aprobado (mockups/mockup.css § Hero). */
  .hero{padding-top:26px;padding-bottom:44px;}
  .hero-grid{display:grid;grid-template-columns:1fr;gap:14px;align-items:center;}
  /* En escritorio el panel NO existe: `display:contents` disuelve la caja de
     .hero-caja y sus dos hijos (.hero-left y .hero-right) vuelven a ser ítems de
     .hero-grid, o sea la misma rejilla de dos columnas ya aprobada. Como ahora hay
     TRES ítems (texto, cifras+franja+voluntarios y mascota), las posiciones se dan
     a mano: el texto y el bloque de cifras se apilan en la columna 1 y la mascota
     ocupa la columna 2 abarcando las dos filas, centrada —que es exactamente lo
     que hacía cuando se centraba contra la columna de texto entera—. `row-gap:0`
     porque el ritmo vertical entre texto y cifras ya lo ponen sus márgenes; el
     gap de 28 px es solo entre columnas. */
  @media(min-width:1024px){
    .hero{padding-top:34px;padding-bottom:64px;}
    .hero-grid{grid-template-columns:1.05fr 1fr;column-gap:28px;row-gap:0;}
    .hero-caja{display:contents;}
    .hero-left{grid-column:1;grid-row:1;}
    .hero-extra{grid-column:1;grid-row:2;}
    .hero-right{grid-column:2;grid-row:1/span 2;align-self:center;}
  }
  .hero-left{position:relative;z-index:3;max-width:660px;}
  .badge{display:inline-flex;align-items:center;gap:14px;background:var(--card-2);border-radius:18px;padding:13px 20px;margin-bottom:24px;max-width:100%;}
  .badge .ic{width:26px;height:26px;flex:0 0 26px;color:var(--orange);}
  .badge b{display:block;font-weight:700;font-size:15.5px;color:var(--ink);line-height:1.25;}
  /* --orange-ink sobre --card-2 da 4.40:1 y no llega al 4.5 de AA. Es el caso que
     ya describe la nota de contraste de arriba: sobre los cremas oscuros el naranja
     pequeño va en --orange-ink-hover. */
  .badge span{display:block;font-weight:600;font-size:15px;color:var(--orange-ink-hover);}
  .title{font-weight:600;font-size:clamp(34px,7.4vw,60px);line-height:1.07;letter-spacing:-.025em;margin-bottom:20px;}
  .title .dark{display:block;color:var(--ink);}
  .title .orange{display:block;color:var(--orange-deep);}
  .lead{font-size:17.5px;font-weight:500;color:var(--body);max-width:470px;margin-bottom:28px;}
  @media(min-width:760px){.lead{font-size:19px;}}
  .cta-row{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:28px;}
  .cta-row .btn{flex:1 1 240px;}
  @media(min-width:620px){.cta-row .btn{flex:0 0 auto;}}
  .hero-vol{font-size:15px;color:var(--body);margin-top:4px;}
  .hero-vol a{color:var(--orange-ink);font-weight:700;text-decoration:underline;text-underline-offset:3px;}
  .hero-vol a:hover{color:var(--ink);}
  .hero-vol a:hover{color:var(--orange-ink-hover);}

  /* Tarjetas de cifras del hero. Sobre --card el texto chico va en --body
     (--muted se queda en 4.21:1 sobre ese crema). */
  .stats{display:grid;grid-template-columns:1fr;gap:14px;margin-bottom:14px;}
  @media(min-width:520px){.stats{grid-template-columns:.82fr 1.18fr;}}
  .tarjeta{background:var(--card);border-radius:var(--r-card);}
  .stat{padding:20px 18px;display:flex;}
  .stat-a{flex-direction:column;align-items:center;text-align:center;justify-content:center;gap:4px;}
  .stat-a .ic{width:32px;height:32px;color:var(--orange);margin-bottom:4px;}
  .stat-num{font-weight:800;font-size:30px;color:var(--ink);line-height:1;}
  .stat-label{font-weight:700;font-size:12px;letter-spacing:.06em;color:var(--body);line-height:1.35;}
  .stat-b{align-items:center;gap:16px;}
  .stat-b .ic{width:38px;height:38px;flex:0 0 38px;color:var(--orange);}
  .stat-free{display:block;font-weight:700;font-size:20px;color:var(--orange-ink);letter-spacing:.01em;}
  .stat-sub{display:block;font-weight:600;font-size:15px;color:var(--body);margin-top:2px;}
  .franja{display:flex;align-items:center;gap:16px;background:var(--banner);padding:18px 20px;}
  .franja .ic{width:36px;height:36px;flex:0 0 36px;color:var(--orange);}
  .franja b{display:block;font-weight:700;font-size:17.5px;color:var(--ink);}
  .franja span{display:block;font-weight:500;font-size:15px;color:var(--body);margin-top:2px;}

  /* Mascota + anillos. El máster oficial es 3:2 con aire a la izquierda: el
     encuadre cuadrado del hero se hace por CSS, no con un recorte aparte. */
  .hero-right{position:relative;display:flex;justify-content:center;align-items:center;}
  @media(min-width:1024px){.hero-right{min-height:500px;}}
  .rings{position:absolute;inset:0;z-index:0;display:flex;align-items:center;justify-content:center;pointer-events:none;}
  .rings::before,.rings::after{content:"";position:absolute;border-radius:50%;border:1.5px solid rgba(242,106,27,.09);}
  .rings::before{width:min(560px,86vw);height:min(560px,86vw);}
  .rings::after{width:min(410px,62vw);height:min(410px,62vw);border-color:rgba(242,106,27,.06);}
  /* Encuadre cuadrado por CSS, como manda mockups/README.md § 7.2: el mockup_7
     traía un recorte casi cuadrado (1080×1031) y aquí se reproduce sobre el máster
     oficial 3:2, para no tener dos ficheros de la misma pose.

     `height:auto` es imprescindible y es lo que faltaba: los atributos width="1200"
     height="800" del <img> —que están para reservar el hueco y no causar CLS— le
     dan al elemento una altura definida, y `aspect-ratio` se ignora cuando el alto
     y el ancho ya lo son. Sin `height:auto` el hueco salía de 310×800 (relación
     0.39, ni 3:2 ni cuadrada) y `cover` recortaba contra él el 73 % del ancho.

     `object-position:75%` centra al personaje, que en el máster está descentrado a
     la derecha: lo que se recorta es el aire de la izquierda. */
  .mascot{position:relative;z-index:1;width:100%;max-width:520px;height:auto;aspect-ratio:1/1;object-fit:cover;object-position:75% 50%;filter:drop-shadow(0 30px 46px rgba(196,104,32,.18));}

  /* ===== El hero de la landing en móvil / tablet (≤1023 px) =====
     Antes la mascota iba primera (`.hero-right{order:1}`) y a 375 px medía 323 px
     de alto: el titular empezaba en y=537 y el botón en y=816, o sea fuera de una
     pantalla de 812. Ahora la landing sigue la MISMA jerarquía que el hero compacto
     de las páginas internas (banner → titular → párrafo → botones → ilustración),
     que es además lo que pide el patrón «hero-centric»: en móvil se conserva la
     jerarquía de escritorio, no se invierte. En ≥1024 px no cambia nada: ahí sigue
     la rejilla de dos columnas con la mascota grande a la derecha, ya aprobada.

     Ese orden lo da ya el DOM —badge, título, párrafo, botones y mascota son, por
     ese orden, el contenido de .hero-caja—, así que aquí no hace falta ningún
     `order`: solo pintar el panel.

     El panel (.hero-caja) es el mismo que el de las páginas internas: comparte
     degradado (--degradado-panel), radio y sombra con .hero-panel, pero NO su clase,
     porque `.hero-panel h1` y `.hero-panel p` (0,1,1 y 0,3,1) le ganarían a .title y
     .lead y la landing perdería su escala tipográfica propia.

     Las cifras, la franja y el enlace de voluntarios se quedan fuera, en .hero-extra:
     son --card (#F7EAD9) y --banner (#F7EBDC) y dentro del panel —degradado #F8ECDD →
     #F7E4CD— quedarían a menos de un 1 % de diferencia de luminancia, o sea invisibles
     como tarjetas. Fuera, sobre --bg (#FCF4EA), sí se leen como bloques aparte.

     El margen lateral lo pone .wrap y ya no hace falta restituirlo aquí: ver la nota
     de `.hero{padding-top/bottom}` más arriba. */
  @media(max-width:1023px){
    /* `margin-inline:auto` es nuevo: el tope de 660 px ya estaba, pero sin caja
       visible no se notaba que la columna quedaba pegada a la izquierda. Con el
       panel pintado, a 768 px se veían 44 px de aire solo a la derecha. */
    .hero-grid{max-width:660px;margin-inline:auto;}
    .hero-caja{position:relative;overflow:hidden;background:var(--degradado-panel);border-radius:var(--r-xl);box-shadow:var(--shadow);padding:24px 18px 14px;}
    /* El resplandor de la esquina, igual que en .hero-panel::after. El aro de
       .hero-panel::before no se copia: la mascota ya trae sus propios anillos y los
       dos juntos se cruzarían. */
    .hero-caja::after{content:"";position:absolute;right:-90px;top:-90px;width:320px;height:320px;border-radius:50%;background:radial-gradient(circle,rgba(242,106,27,.16),transparent 68%);pointer-events:none;}
    .hero-caja>*{position:relative;z-index:1;}
    /* El chip es --card-2 #F8ECDD, que es EXACTAMENTE el color con el que arranca el
       degradado del panel justo en la esquina donde el chip cae: dentro del panel
       desaparecía. En blanco se lee como tarjeta y además sube el contraste de su
       texto (--orange-ink-hover pasa de 5.42:1 a 7.13:1). */
    .hero-caja .badge{background:var(--white);}
    /* CONTRASTE — «Estamos contigo.» iba en --orange-deep #E85D10, que sobre --bg da
       3.21:1 y pasa raspando el umbral de texto grande. Sobre el degradado del panel
       (que baja a #F7E4CD) cae a 2.82:1 y ya NO pasa. Va a --orange-ink #BB4A0C
       (4.13:1), que es exactamente lo que hace `.hero-panel h1 .orange` en las
       páginas internas: dentro del panel, el mismo naranja que ellas. En escritorio,
       sin panel y sobre --bg, el titular conserva --orange-deep. */
    .hero-caja .title .orange{color:var(--orange-ink);}
    /* Entre el enlace de voluntarios y la sección siguiente quedaban 100 px muertos:
       44 de .hero y 56 de .pasos, sin nada que los ocupara. */
    .hero{padding-bottom:8px;}
    /* La ilustración pasa a acompañar en vez de tapar. La caja se ciñe al ancho de
       la mascota (no al de la columna) porque los anillos van a `inset:0` de esa
       caja: si la caja fuera la columna entera, el anillo saldría del tamaño de la
       pantalla y se montaría sobre los botones de arriba. Los porcentajes replican
       la proporción de escritorio (560/520 ≈ 1.08 el grande, 410/520 ≈ 0.79 el
       pequeño), así que el halo se desborda solo ~10 px por lado.

       El aire de abajo lo pone ahora el `padding-bottom` del panel, no un margen:
       dentro de una caja con `overflow:hidden` un margen inferior no protege la
       sombra de la mascota, el relleno sí. */
    .hero-right{width:min(256px,68vw);margin:0 auto;}
    .mascot{width:100%;max-width:none;}
    .rings::before{width:108%;height:108%;}
    .rings::after{width:79%;height:79%;}
  }
  /* El panel le quita 36 px de ancho útil al chip y «Acompañamiento emocional»
     (235 px medidos con la tipografía real) se partía en dos líneas: el chip subía
     de 66 a 87 px y empujaba el botón principal hacia el borde de la pantalla. Se
     recupera la línea única apretando el chip —relleno 12, hueco 10, icono 24—:
     quedan 241 px útiles, 6 de margen. Por debajo de ~350 px de ventana no cabe de
     ninguna forma y vuelve a partirse, que es lo que ya hacía antes del panel. */
  @media(max-width:619px){
    .hero-caja .badge{padding:12px;gap:10px;}
    .hero-caja .badge .ic{width:24px;height:24px;flex:0 0 24px;}
  }
  /* De tableta para arriba (y hasta que entra la rejilla de dos columnas) la
     mascota puede crecer: la columna es ancha y a 256 px se quedaba perdida. */
  @media(min-width:620px) and (max-width:1023px){.hero-right{width:min(360px,50vw);margin:0 auto;}.hero-caja{padding:34px 30px 20px;}}

  /* ===== Hero compacto (páginas internas) =====
     El panel es claro: el degradado oscuro terracota→azul marino se eliminó. */
  .hero-slim{padding:30px 0 10px;}
  .hero-panel{background:var(--degradado-panel);border-radius:var(--r-xl);padding:34px 22px;position:relative;overflow:hidden;box-shadow:var(--shadow);color:var(--ink);}
  @media(min-width:760px){.hero-panel{padding:56px 44px;}}
  .hero-panel::after{content:"";position:absolute;right:-90px;top:-90px;width:320px;height:320px;border-radius:50%;background:radial-gradient(circle,rgba(242,106,27,.16),transparent 68%);pointer-events:none;}
  .hero-panel::before{content:"";position:absolute;right:-70px;bottom:-150px;width:340px;height:340px;border-radius:50%;border:1.5px solid rgba(242,106,27,.18);box-shadow:0 0 0 60px rgba(242,106,27,.035) inset,0 0 0 46px rgba(242,106,27,.05);pointer-events:none;}
  .hero-panel .inner{position:relative;max-width:660px;}
  .hero-panel.con-media{display:grid;grid-template-columns:1fr;gap:18px;align-items:center;}
  .hero-panel.con-media::before{display:none;}
  .hero-panel.con-media .inner{max-width:620px;}
  @media(min-width:900px){.hero-panel.con-media{grid-template-columns:1.12fr .88fr;gap:28px;}.hero-panel.con-media .inner{order:1;}.hero-panel.con-media .hero-media{order:2;}}
  .hero-media{position:relative;z-index:1;display:flex;justify-content:center;align-items:center;min-height:190px;}
  .hero-media img{position:relative;z-index:1;width:100%;max-width:420px;height:auto;filter:drop-shadow(0 26px 40px rgba(196,104,32,.18));}
  @media(max-width:899px){.hero-media img{max-width:300px;}}
  .hero-panel.con-media.media-chica .inner{max-width:640px;}
  @media(min-width:900px){.hero-panel.con-media.media-chica{grid-template-columns:1.4fr .6fr;gap:24px;}}
  .hero-media.chica img{max-width:290px;aspect-ratio:1/1;object-fit:cover;object-position:75% 50%;}
  @media(max-width:899px){.hero-media.chica{min-height:0;}.hero-media.chica img{max-width:200px;}}
  .hero-media.con-anillos::before,.hero-media.con-anillos::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);border-radius:50%;pointer-events:none;z-index:0;aspect-ratio:1;border:1.5px solid rgba(242,106,27,.16);}
  .hero-media.con-anillos::before{width:min(330px,92%);}
  .hero-media.con-anillos::after{width:min(235px,66%);border-color:rgba(242,106,27,.10);}
  /* El halo se montaba sobre los botones en móvil. El diámetro salía del ANCHO de
     .hero-media (92 % de la columna, que en móvil es el panel entero: 268 px a 375),
     mientras que el alto de la caja lo pone la mascota (200 px con `min-height:0`).
     El anillo, centrado, se desbordaba 34 px por arriba y pisaba 16 px el botón
     «Ver material». Por debajo de 900 px el diámetro pasa a medirse contra el ALTO
     de la caja —que sí sigue a la ilustración—, y el margen vertical deja aire para
     lo poco que se desborda. `width:auto` es necesario para que mande el
     `aspect-ratio:1` que ya traen los dos pseudoelementos. */
  @media(max-width:899px){
    .hero-media.con-anillos{margin-block:12px;}
    .hero-media.con-anillos::before{width:auto;height:114%;}
    .hero-media.con-anillos::after{width:auto;height:80%;}
  }
  .hero-panel h1{font-size:clamp(30px,5.6vw,48px);font-weight:600;margin:16px 0;letter-spacing:-.025em;}
  /* --orange-deep #E85D10 solo llega a 3:1 sobre --bg (3.21). El degradado de este
     panel baja hasta #F7E4CD, donde da 2.82 y NO pasa el umbral de texto grande, así
     que aquí el acento del titular va en --orange-ink (4.13:1). Ver mockups/README.md
     § 2: la tabla original solo validó --orange-deep contra el crema claro. */
  .hero-panel h1 .orange{color:var(--orange-ink);}
  /* `:not()` porque `.hero-panel p` (0,2,0) le gana a `.eyebrow` y a `.hero-vol`
     (0,1,0): sin esto el eyebrow del hero sale a 17 px y en color de cuerpo en vez
     de naranja pequeño en versalitas. */
  .hero-panel p:not(.eyebrow):not(.hero-vol){font-size:17px;color:var(--body);max-width:620px;margin-bottom:26px;}
  .hero-panel .eyebrow,.hero-panel .hero-vol a{color:var(--orange-ink-hover);}

  /* ===== Pasos ===== */
  .pasos{padding:56px 0 0;}
  .pasos-grid{display:grid;grid-template-columns:1fr;gap:16px;}
  @media(min-width:760px){.pasos-grid{grid-template-columns:repeat(3,1fr);}}
  .paso{background:var(--white);border:1.4px solid var(--line);border-radius:var(--r-lg);padding:28px 24px;box-shadow:var(--shadow-sm);transition:transform .2s,box-shadow .2s;display:flex;flex-direction:column;}
  .paso:hover{transform:translateY(-5px);box-shadow:var(--shadow);}
  .paso .num{width:46px;height:46px;border-radius:15px;background:var(--card);color:var(--orange-ink);font-weight:800;font-size:19px;display:flex;align-items:center;justify-content:center;margin-bottom:16px;}
  .paso h3{font-size:19px;font-weight:700;margin-bottom:8px;}
  .paso p{color:var(--body);font-size:15.5px;}
  .paso .btn{margin-top:18px;align-self:flex-start;}

  /* ===== «¿Qué recibes?» (medicos.html) =====
     Reutiliza .pasos / .pasos-grid / .paso: mismo fondo, mismo borde, mismo radio,
     mismo hover. Cambian dos cosas: la rejilla es 2×2 (son cuatro bloques y cada uno
     trae lista; con tres columnas quedarían tiras altísimas) y el chip cuadrado lleva
     icono en vez de número.
     Va DESPUÉS de la regla de tres columnas de arriba: aunque `.pasos-grid.beneficios`
     (0,2,0) ya le gana por especificidad, mantenerla debajo evita sorpresas si alguien
     sube la especificidad de aquella. */
  @media(min-width:760px){.pasos-grid.beneficios{grid-template-columns:repeat(2,1fr);}}
  .beneficio .num svg{width:24px;height:24px;}
  .lista-beneficio{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:9px;}
  .lista-beneficio li{position:relative;padding-left:22px;color:var(--body);font-size:15px;line-height:1.5;}
  /* La viñeta es decoración pura y no lleva texto encima: le aplica el 3:1 de objeto
     gráfico, no el 4.5:1. --orange sobre --white da 3.06:1, o sea que pasa por los
     pelos; por eso la viñeta NO puede ser lo único que distinga un ítem — la lista se
     lee igual sin ella. El texto del <li> va en --body, que sobre blanco da 6.44:1. */
  .lista-beneficio li::before{content:"";position:absolute;left:4px;top:.55em;width:7px;height:7px;border-radius:50%;background:var(--orange);}
  .nota-beneficios{margin-top:20px;max-width:720px;}
  /* La remuneración va en una tarjeta a lo ancho ENCIMA de la rejilla, no como un
     quinto bloque: la rejilla es 2×2 y un quinto quedaría solo en su fila. Además
     es lo primero que quiere leer quien viene por una plaza pagada. */
  .beneficio-destacado{margin-bottom:16px;}

  /* ===== Las dos versiones de medicos.html en un solo archivo =====
     El <body> nace con data-vinculo="voluntario" escrito en el HTML, y un script que
     es lo PRIMERO dentro del <body> lo cambia a "contratado" cuando toca. Como corre
     antes de que el navegador parsee el contenido, no hay parpadeo: nunca se llega a
     ver el texto de la otra versión.

     Las dos reglas solo OCULTAN, nunca ponen un `display`. Es deliberado: así cada
     elemento conserva el suyo (un .btn sigue inline-flex, un <li> sigue list-item) y
     no hace falta inventar un `display:revert`, que es justo donde este patrón se
     rompe. Y la forma es `body:not([data-vinculo="contratado"])` en vez de
     `body[data-vinculo="voluntario"]` para cubrir que el atributo falte o traiga
     basura: si algo va mal, la página cae del lado del voluntariado, que es el que no
     le promete dinero a nadie. */
  body:not([data-vinculo="contratado"]) .solo-contratado{display:none;}
  body[data-vinculo="contratado"] .solo-voluntario{display:none;}

  /* ===== Equipo / terapeutas ===== */
  .terapeutas{padding:56px 0 0;}
  .terapeutas .sec-head{max-width:640px;}
  .team-cifras,.cifras{display:flex;flex-wrap:wrap;gap:14px;margin:20px 0 26px;}
  /* Cifra grande sobre --card: --accent se queda en 2.85:1 (no llega ni al 3:1 de
     texto grande), así que va en --orange-ink (4.33:1). */
  .cifra{flex:1 1 160px;background:var(--card);border-radius:var(--r-card);padding:18px 22px;}
  .cifra b{display:block;font-size:clamp(28px,5vw,36px);font-weight:800;color:var(--orange-ink);line-height:1.1;}
  .cifra span{color:var(--body);font-size:12.5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;}
  .team-filtros,.chips-filtro{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:24px;}
  .team-filtros button,.chips-filtro button{border:1.5px solid var(--line);background:var(--white);color:var(--ink);padding:10px 18px;border-radius:999px;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit;transition:.15s;}
  .team-filtros button:hover,.chips-filtro button:hover{background:var(--card-2);border-color:var(--orange);}
  .team-filtros button.sel,.chips-filtro button[aria-pressed="true"]{background:var(--ink);color:#fff;border-color:var(--ink);}
  .team-grid{display:grid;grid-template-columns:1fr;gap:16px;}
  @media(min-width:640px){.team-grid{grid-template-columns:repeat(2,1fr);}}
  @media(min-width:1000px){.team-grid{grid-template-columns:repeat(3,1fr);}}
  .terap{background:var(--white);border:1.4px solid var(--line);border-radius:var(--r-lg);padding:22px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:13px;transition:transform .2s;}
  .terap:hover{transform:translateY(-4px);}
  .terap-top{display:flex;align-items:flex-start;gap:14px;}
  .terap-avatar{width:52px;height:52px;border-radius:50%;flex-shrink:0;background:var(--card);color:var(--orange-ink-hover);font-weight:800;font-size:17px;display:flex;align-items:center;justify-content:center;background-size:cover;background-position:center;}
  .terap-id b{display:block;font-size:16px;font-weight:700;line-height:1.25;}
  .terap-id small{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:13.5px;margin-top:3px;}
  /* Disciplina en la ficha. Mismo chip para las dos: cambia la palabra, no el
     color. Un segundo color de familia dejaría la distinción en manos del color
     y rompería la identidad. */
  .terap-tipo{display:inline-block;margin-top:5px;font-style:normal;font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--orange-ink-hover);background:var(--banner);border:1px solid var(--line);border-radius:999px;padding:2px 8px;}
  .terap-esp{background:var(--card-2);border-radius:14px;padding:11px 14px;font-size:14px;color:var(--body);font-weight:500;}
  .terap-exp{font-size:13px;color:var(--muted);font-weight:700;}
  .team-estado{color:var(--body);font-size:15px;padding:28px 4px;}

  /* ===== Materiales (sigue oculta en la landing) ===== */
  .materiales{padding:56px 0 0;}
  .searchbar{position:relative;max-width:560px;margin:0 0 18px;}
  .searchbar input{width:100%;border:1.6px solid var(--line-solid);background:var(--white);box-shadow:var(--shadow-sm);border-radius:var(--r);padding:16px 16px 16px 48px;font-size:16px;color:var(--ink);font-family:inherit;}
  .searchbar input:focus{outline:none;border-color:var(--orange);box-shadow:0 0 0 4px rgba(242,106,27,.16);}
  .searchbar .si{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none;display:flex;}
  .filters{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:22px;}
  .filters button{border:1.5px solid var(--line);background:var(--white);color:var(--ink);padding:10px 20px;border-radius:999px;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit;transition:.15s;min-height:40px;}
  .filters button:hover{background:var(--card-2);border-color:var(--orange);}
  .filters button.sel{background:var(--ink);color:#fff;border-color:var(--ink);}
  .grid-content,.grid-mat{display:grid;grid-template-columns:1fr;gap:16px;}
  /* `min-width:0` obligatorio: por defecto un item de grid vale `min-width:auto`, o
     sea que la pista nunca baja del contenido mínimo de la tarjeta. Ese mínimo lo
     fija la palabra más larga del título (`.card-body b`; hoy «psicológicos», 113 px
     a 16.5px/700), y con eso la pista pedía 287 px dentro de un contenedor de 265: a
     320 px de ventana la tarjeta se comía su margen derecho y llegaba cortada al borde
     de la pantalla, con el izquierdo intacto. El `min-width:0` que ya tiene
     `.card-body` no basta: arregla el reparto flex DENTRO de la tarjeta, no el
     tamaño de la pista que la contiene. */
  .grid-content>*,.grid-mat>*{min-width:0;}
  @media(min-width:780px){.grid-content,.grid-mat{grid-template-columns:1fr 1fr;}}
  .card,.card-mat{background:var(--white);border:1.4px solid var(--line);border-radius:var(--r-lg);padding:20px;display:flex;gap:16px;align-items:center;cursor:pointer;text-align:left;width:100%;font-family:inherit;box-shadow:var(--shadow-sm);transition:transform .18s,border-color .18s;}
  .card:hover,.card-mat:hover{transform:translateY(-4px);border-color:var(--orange);}
  .card .thumb,.card-mat .thumb{width:58px;height:58px;border-radius:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:26px;background:var(--card);color:var(--orange-ink-hover);background-size:cover;background-position:center;}
  .card .thumb svg,.card-mat .thumb svg{width:26px;height:26px;}
  .card-body,.card-mat .cuerpo{flex:1;min-width:0;}
  .card-body .tag,.card-mat .tag{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--orange-ink);}
  .card-body b,.card-mat .cuerpo b{font-size:16.5px;display:block;font-weight:700;margin:3px 0 4px;letter-spacing:-.01em;line-height:1.3;}
  .card-body small,.card-mat .cuerpo small{color:var(--body);font-size:13.5px;display:block;line-height:1.45;}
  .card-body .by{color:var(--orange-ink);font-weight:600;}
  .card .act,.card-mat .act{width:44px;height:44px;flex:0 0 44px;border-radius:50%;background:var(--ink);color:#fff;display:flex;align-items:center;justify-content:center;transition:transform .18s;}
  .card:hover .act,.card-mat:hover .act{transform:scale(1.08);background:var(--orange-ink);}
  .empty{grid-column:1/-1;text-align:center;padding:48px 20px;color:var(--body);}
  .empty .ic{width:34px;height:34px;margin:0 auto 8px;color:var(--orange);}
  .empty b{display:block;color:var(--ink);font-size:16px;margin-bottom:4px;}

  /* ===== Formulario ===== */
  .inscripcion,.bloque-form{padding:56px 0 8px;background:var(--card-2);margin-top:52px;}
  /* Estas dos secciones son --card-2, donde --orange-ink se queda en 4.40:1. El
     naranja pequeño que va directamente sobre ese crema sube a --orange-ink-hover
     (5.77:1), igual que hace `.stepper-label b` más abajo.
     El asterisco de dentro de un `.field` NO entra aquí a propósito: ahí el fondo es
     blanco y --orange-ink ya da 5.12:1. Lo resuelve la especificidad —`.field .req`
     se declara después y empata—, así que el orden de estas dos reglas importa. */
  .inscripcion .inline-link,.bloque-form .inline-link,
  .inscripcion .req,.bloque-form .req{color:var(--orange-ink-hover);}
  .form-wrap{max-width:800px;margin:0 auto;}
  .form{background:var(--white);border:1.4px solid var(--line);border-radius:var(--r-xl);padding:26px 20px;box-shadow:var(--shadow);}
  @media(min-width:760px){.form{padding:44px;}}
  .form-sec{margin:26px 0 4px;font-size:13px;font-weight:800;color:var(--orange-ink);text-transform:uppercase;letter-spacing:.1em;}
  .form-sec:first-child{margin-top:0;}
  .field{margin-bottom:20px;}
  .field>label,.field-label{display:block;font-weight:700;font-size:15px;margin-bottom:9px;color:var(--ink);}
  .field .req,.req{color:var(--orange-ink);}
  .opt{display:inline-block;margin-left:8px;background:var(--card);color:var(--body);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;padding:3px 9px;border-radius:999px;vertical-align:1px;}
  .field input[type=text],.field input[type=tel],.field input[type=email],.field input[type=number],
  .field input[type=search],.field input[type=file],.field textarea,.field select{
    width:100%;border:1.6px solid var(--line-solid);background:var(--bg);border-radius:var(--r);padding:14px 16px;font-size:16px;color:var(--ink);font-family:inherit;transition:.15s;}
  .field textarea{resize:vertical;min-height:112px;line-height:1.5;}
  /* El texto del botón nativo («Choose files») lo pone el navegador; el aspecto sí es nuestro. */
  .field input[type=file]{padding:10px 12px;cursor:pointer;font-size:15px;}
  .field input[type=file]::file-selector-button{font-family:inherit;font-weight:600;font-size:14px;border:1.5px solid var(--line-solid);background:var(--card);color:var(--orange-ink-hover);border-radius:12px;padding:9px 14px;margin-right:12px;cursor:pointer;transition:.15s;}
  .field input[type=file]::file-selector-button:hover{background:var(--card-2);border-color:var(--orange);}
  .field input:hover,.field textarea:hover,.field select:hover{border-color:var(--muted-deco);}
  .field input:focus,.field textarea:focus,.field select:focus{outline:none;border-color:var(--orange);background:var(--white);box-shadow:0 0 0 4px rgba(242,106,27,.16);}
  .field .hint{font-size:13.5px;color:var(--muted);margin-top:8px;line-height:1.5;}
  .grid2{display:grid;gap:14px;grid-template-columns:1fr;}
  @media(min-width:560px){.grid2{grid-template-columns:1fr 1fr;}}

  /* ---- Teléfono ---- */
  .tel-row{display:flex;gap:10px;}
  .tel-row select{flex:0 0 auto;width:auto;max-width:44%;min-width:0;}
  .tel-row input,.tel-row .tel-num{flex:1 1 auto;min-width:0;}
  .tel-pista{display:flex;align-items:flex-start;gap:8px;font-size:13.5px;color:var(--muted);margin-top:8px;line-height:1.5;}
  .tel-pista svg{width:16px;height:16px;flex:0 0 16px;margin-top:2px;color:var(--orange);}
  .tel-pista b{color:var(--body);font-weight:700;}

  /* ---- Rango horario («Desde [hh:mm] hasta [hh:mm]») ---- */
  /* OJO: no llamar a esto `.franja` — esa clase ya es la banda naranja de la
     home (arriba, «Juntos vamos a sanar») y se la pisaríamos. */
  /* Las dos horas van en una línea y se parten en dos filas cuando no caben,
     sin media query: el `flex-wrap` con base de 148 px lo resuelve solo. */
  .rango-horas{display:flex;flex-wrap:wrap;gap:10px 14px;}
  .rango-horas label{display:flex;align-items:center;gap:9px;flex:1 1 148px;min-width:0;margin:0;font-weight:600;font-size:14.5px;color:var(--body);}
  .rango-horas label>span{flex:0 0 auto;}
  .rango-horas select{flex:1 1 auto;width:auto;min-width:0;padding:12px 12px;}

  /* Estados de validación (la clase va en el .field). */
  .msg-campo{display:none;align-items:flex-start;gap:8px;font-size:13.5px;font-weight:600;margin-top:9px;line-height:1.45;border-radius:12px;padding:10px 12px;}
  .msg-campo svg{width:17px;height:17px;flex:0 0 17px;margin-top:1px;}
  .field.es-invalido input,.field.es-invalido select{border-color:var(--err);background:var(--err-bg);}
  .field.es-invalido input:focus{box-shadow:0 0 0 4px rgba(179,38,30,.16);border-color:var(--err);}
  .field.es-invalido .msg-error{display:flex;background:var(--err-bg);color:var(--err);}
  .field.es-valido input{border-color:var(--ok);background:var(--ok-bg);}
  .field.es-valido input:focus{box-shadow:0 0 0 4px rgba(30,122,77,.16);border-color:var(--ok);}
  .field.es-valido .msg-ok{display:flex;background:var(--ok-bg);color:var(--ok);}
  .field.es-valido .tel-pista,.field.es-invalido .tel-pista{display:none;}
  /* Marca simple de error por input: la usa telemedicina hasta la segunda pasada. */
  .field input.input-error{border-color:var(--err);background:var(--err-bg);}

  /* ---- Contacto alternativo ---- */
  /* `min-width:0` anula el `min-width:min-content` que los navegadores le ponen de
     serie al <fieldset>: sin él este bloque no se encoge por debajo del ancho
     mínimo de la fila de teléfono y desbordaba 32 px en pantallas de 320. */
  .alt-contacto{min-width:0;border:1.6px dashed var(--line);background:var(--bg);border-radius:var(--r-lg);padding:20px 18px;margin-bottom:20px;}
  @media(min-width:560px){.alt-contacto{padding:24px 22px;}}
  /* `float` deja al <legend> comportarse como un bloque dentro del fieldset: sin él,
     un título de dos líneas se monta sobre el borde. */
  .alt-contacto legend{float:left;width:100%;padding:0;margin:0;font-weight:700;font-size:15.5px;color:var(--ink);line-height:1.45;}
  .alt-contacto .por-que{clear:both;display:flex;gap:11px;align-items:flex-start;background:var(--card-2);border-radius:14px;padding:13px 15px;margin:14px 0 18px;font-size:14px;color:var(--body);line-height:1.5;}
  .alt-contacto .por-que svg{width:20px;height:20px;flex:0 0 20px;color:var(--orange);margin-top:1px;}
  .alt-contacto .field:last-child{margin-bottom:0;}
  .nota-privacidad{display:flex;gap:9px;align-items:flex-start;font-size:13px;color:var(--muted);margin-top:14px;line-height:1.5;}
  .nota-privacidad svg{width:16px;height:16px;flex:0 0 16px;margin-top:2px;color:var(--muted);}

  /* ---- Chips ---- */
  .chips{display:flex;flex-wrap:wrap;gap:9px;}
  .chips label{display:inline-flex;align-items:center;gap:8px;position:relative;border:1.5px solid var(--line-solid);background:var(--white);color:var(--ink);padding:10px 16px;border-radius:999px;font-size:14.5px;font-weight:500;cursor:pointer;transition:.15s;margin:0;}
  .chips label:hover{background:var(--card-2);border-color:var(--orange);}
  .chips label:has(input:checked){background:var(--card);border-color:var(--orange);color:var(--ink);font-weight:600;}
  .chips label:has(input:checked)::before{content:"✓";color:var(--orange-ink-hover);font-weight:800;font-size:13px;}
  .chips label:has(input:focus-visible){outline:3px solid var(--orange-ink);outline-offset:3px;}
  .chips input{position:absolute;opacity:0;width:1px;height:1px;}

  /* ---- Modalidad (tarjetas con icono) ---- */
  .modos{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;}
  @media(min-width:620px){.modos{grid-template-columns:repeat(5,1fr);}}
  .modos label{display:flex;flex-direction:column;align-items:center;gap:8px;position:relative;border:1.5px solid var(--line-solid);background:var(--white);border-radius:18px;padding:16px 8px;cursor:pointer;transition:.15s;margin:0;font-weight:600;font-size:13.5px;color:var(--ink);text-align:center;}
  .modos label .mic{width:26px;height:26px;font-size:24px;line-height:1;color:var(--orange);}
  .modos label:hover{background:var(--card-2);}
  .modos label:has(input:checked){border-color:var(--orange);background:var(--card);}
  .modos label:has(input:focus-visible){outline:3px solid var(--orange-ink);outline-offset:3px;}
  .modos input{position:absolute;opacity:0;width:1px;height:1px;}

  /* ---- Consentimiento y mensajes ---- */
  .consent{display:flex;gap:13px;align-items:flex-start;background:var(--card);border-radius:18px;padding:16px 18px;}
  .consent input{width:22px;height:22px;flex-shrink:0;margin-top:2px;accent-color:var(--orange-ink);}
  .consent label{font-weight:500;font-size:14.5px;margin:0;color:var(--ink);line-height:1.5;}
  .form .btn{margin-top:8px;}
  .form .btn[disabled]{opacity:.55;cursor:progress;}
  .form-msg{border-radius:16px;padding:15px 17px;font-size:14.5px;font-weight:600;margin-bottom:18px;}
  .form-msg.err{background:var(--err-bg);color:var(--err);}
  .form-msg.ok{background:var(--ok-bg);color:var(--ok);}
  .form-ok{text-align:center;padding:34px 18px;}
  .form-ok .ic{width:56px;height:56px;margin:0 auto 14px;color:var(--orange);}
  .form-ok b{display:block;font-size:22px;margin-bottom:8px;font-weight:700;}
  .form-ok p{color:var(--body);font-size:15.5px;max-width:460px;margin:0 auto 8px;}
  .disclaimer{font-size:13.5px;color:var(--body);background:var(--card);border-radius:18px;padding:18px;margin-top:22px;line-height:1.65;}
  .disclaimer a{color:var(--orange-ink-hover);font-weight:700;text-decoration:underline;}  /* fondo --card */

  /* ---- Captcha (Cloudflare Turnstile) ----
     El widget lo pinta Cloudflare en un iframe y NO se puede reestilizar (solo
     admite theme light|dark|auto). Nuestro es el encuadre, la etiqueta, la ayuda
     y el error. */
  .campo-captcha{text-align:center;}
  .campo-captcha>.field-label{text-align:left;}
  .campo-captcha .caja-captcha{display:flex;justify-content:center;}
  .campo-captcha .hint{text-align:center;}
  .campo-captcha .msg-campo{text-align:left;}
  .field.es-invalido .caja-captcha{border-radius:6px;box-shadow:0 0 0 4px rgba(179,38,30,.18);}

  /* ---- Stepper y pasos del formulario (telemedicina) ---- */
  .stepper{margin:6px 0 20px;}
  .stepper-bar{height:9px;border-radius:999px;background:var(--card);overflow:hidden;}
  .stepper-fill{height:100%;border-radius:999px;background:var(--orange);transition:width .3s ease;}
  .stepper-label{margin:10px 2px 0;font-size:13px;font-weight:700;color:var(--muted);}
  .stepper-label b{color:var(--orange-ink-hover);}  /* fondo --card-2 de .inscripcion */
  /* `.paso-form` es el nombre del mockup; `.form .step` es el que trae hoy el HTML
     de telemedicina. Va con dos clases porque `.step` a secas ya está tomado por
     las tarjetas de la sección de crisis (fondo blanco, borde y sombra): dentro de
     un formulario el fieldset no debe heredar nada de eso. */
  .paso-form,.form .step{border:0;padding:0;margin:0;min-inline-size:0;background:none;box-shadow:none;}
  .step-nav{display:flex;gap:12px;justify-content:space-between;margin-top:24px;flex-wrap:wrap;}
  .step-nav .btn{flex:1 1 140px;}
  @media(min-width:560px){.step-nav .btn{flex:0 0 auto;}}

  /* ---- Revisión por sistemas y tamizaje (telemedicina) ----
     Los pinta el JS de la página a partir de SISTEMAS / TAMIZAJE. */
  .sys,.tam{border:1.5px solid var(--line-solid);border-radius:var(--r);padding:14px 16px;margin-top:10px;background:var(--white);}
  .sys>b{display:block;font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--orange-ink);margin-bottom:10px;}
  .tam p{margin:0 0 10px;font-weight:600;font-size:15px;color:var(--ink);}
  .tam label{display:inline-flex;align-items:center;gap:7px;margin-right:18px;font-size:14.5px;color:var(--ink);cursor:pointer;}
  .tam input{accent-color:var(--orange-ink);width:19px;height:19px;}
  /* Dentro de `.sys` los chips llevan el checkbox visible (lo pinta el JS sin el
     input oculto de `.chips` del intake), así que se dejan como casillas normales. */
  .sys .chips label{padding:8px 13px;font-size:14px;}
  .sys .chips input{position:static;opacity:1;width:17px;height:17px;accent-color:var(--orange-ink);}

  /* ---- Archivos (médicos) ---- */
  .archivos{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:8px;}
  .archivos li{display:flex;align-items:center;gap:10px;border:1.5px solid var(--line-solid);border-radius:14px;padding:10px 14px;background:var(--white);}
  .archivos .nom{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600;color:var(--ink);}
  /* `.tam` (peso del archivo) lo escribe el JS de medicos.html; `.tam-arch` es el
     nombre del mockup. Va dentro de `.archivos` para no chocar con las tarjetas de
     tamizaje de telemedicina, que también se llaman `.tam`. */
  .archivos .tam,.archivos .tam-arch{font-size:12px;color:var(--muted);white-space:nowrap;border:0;padding:0;margin:0;background:none;}
  .archivos .quitar{border:0;background:transparent;color:var(--orange-ink-hover);font-weight:800;cursor:pointer;font-size:15px;line-height:1;padding:6px 8px;border-radius:8px;}
  .archivos .quitar:hover{background:var(--card);}

  /* ===== CTA ===== */
  /* Dos públicos profesionales a la vez (terapeutas y médicos): dos tarjetas, una
     oscura y otra clara, para que ninguna se coma a la otra (§ 6). */
  .cta{padding:56px 0 0;}
  .cta-grid{display:grid;grid-template-columns:1fr;gap:18px;max-width:1000px;margin:0 auto;}
  @media(min-width:880px){.cta-grid{grid-template-columns:1fr 1fr;}}
  .cta-grid .cta-card{max-width:none;margin:0;display:flex;flex-direction:column;justify-content:flex-end;}
  .cta-card,.cta-dark{background:linear-gradient(140deg,#2B211B 0%,#4A342A 100%);color:#fff;border-radius:var(--r-xl);padding:36px 26px;position:relative;overflow:hidden;max-width:720px;margin:0 auto;box-shadow:var(--shadow);}
  @media(min-width:760px){.cta-card,.cta-dark{padding:52px 44px;}}
  .cta-card::after,.cta-dark::after{content:"";position:absolute;right:-70px;bottom:-90px;width:260px;height:260px;border-radius:50%;background:radial-gradient(circle,rgba(242,106,27,.35),transparent 70%);}
  .cta-card .inner{position:relative;max-width:520px;}
  .cta-card .eyebrow,.cta-dark .eyebrow{color:#FFC49B;}
  .cta-card h2,.cta-dark h2{font-size:clamp(25px,4.2vw,36px);font-weight:700;margin:14px 0 12px;}
  .cta-card p:not(.eyebrow),.cta-dark p:not(.eyebrow){color:rgba(255,255,255,.86);font-size:16px;margin-bottom:24px;}
  .cta-card .btn-soft{background:#fff;color:var(--ink);border:none;}
  .cta-card .btn{align-self:flex-start;}
  /* Variante clara (la segunda tarjeta del par: médicos). */
  .cta-card.claro{background:var(--card);color:var(--ink);border:1.4px solid var(--line);}
  .cta-card.claro::after{background:radial-gradient(circle,rgba(242,106,27,.22),transparent 70%);}
  .cta-card.claro .eyebrow{color:var(--orange-ink-hover);}  /* fondo --card: 5.67:1 */
  .cta-card.claro p:not(.eyebrow){color:var(--body);}
  .cta-card.claro .btn-soft{background:var(--white);color:var(--ink);box-shadow:var(--shadow-sm);}

  /* ===== FAQ ===== */
  .faq{padding:56px 0 0;}
  .faq-list{max-width:800px;margin:0 auto;display:flex;flex-direction:column;gap:12px;}
  .faq-item{background:var(--white);border:1.4px solid var(--line);border-radius:var(--r-card);box-shadow:var(--shadow-sm);overflow:hidden;}
  .faq-item summary{list-style:none;cursor:pointer;padding:19px 20px;display:flex;justify-content:space-between;align-items:center;gap:14px;font-weight:600;font-size:16px;color:var(--ink);}
  .faq-item summary::-webkit-details-marker{display:none;}
  .faq-item .chev{flex-shrink:0;width:22px;height:22px;transition:transform .25s;color:var(--orange-ink);}
  .faq-item[open] .chev{transform:rotate(180deg);}
  .faq-item[open] summary{color:var(--orange-ink);}
  .faq-item .ans{padding:0 20px 20px;color:var(--body);font-size:15.5px;line-height:1.65;}

  /* ===== Crisis ===== */
  .crisis{padding:56px 0 0;}
  .crisis-card{background:var(--err-soft);border:2px solid var(--err-line);border-radius:var(--r-xl);padding:32px 24px;margin-bottom:32px;}
  @media(min-width:760px){.crisis-card{padding:48px 42px;}}
  .crisis-card h2{font-size:clamp(26px,4.8vw,42px);font-weight:700;color:var(--err-deep);margin-bottom:14px;}
  .crisis-card p{color:var(--body);font-size:17px;max-width:620px;margin-bottom:24px;}
  .call{display:inline-flex;align-items:center;gap:12px;background:var(--err-deep);color:#fff;padding:18px 26px;border-radius:18px;font-size:clamp(18px,3vw,23px);font-weight:700;text-decoration:none;box-shadow:0 16px 32px -20px rgba(150,38,26,.9);transition:.15s;}
  .call:hover{background:#7C1D13;transform:translateY(-2px);}
  .call small{font-size:13.5px;font-weight:500;opacity:.9;}
  .call svg{width:24px;height:24px;flex-shrink:0;}
  /* En móvil «Llamar al 171» necesita la línea entera: el paréntesis baja debajo. */
  @media(max-width:520px){.call{flex-wrap:wrap;row-gap:2px;}.call small{flex:1 0 100%;padding-left:36px;}}

  /* Ejercicio de respiración guiada */
  .breath,.respira{background:var(--white);border:1.4px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);padding:30px 22px 26px;margin-bottom:16px;text-align:center;}
  .breath h3,.respira h3{font-size:20px;font-weight:700;margin-bottom:8px;}
  .breath .sub,.respira .sub{color:var(--body);font-size:15px;max-width:520px;margin:0 auto 8px;}
  .breath-stage,.respira-stage{position:relative;width:min(250px,68vw);height:min(250px,68vw);margin:14px auto 16px;display:grid;place-items:center;}
  .breath-orb,.respira-orb{grid-area:1/1;width:100%;height:100%;border-radius:50%;background:radial-gradient(circle at 50% 38%,#FFE0CB,#F9C39A);box-shadow:0 0 0 8px rgba(242,106,27,.07),0 0 0 22px rgba(242,106,27,.04);transform:scale(.55);transition:transform 4s ease-in-out;}
  .breath-label,.respira-label{grid-area:1/1;position:relative;z-index:2;font-weight:700;font-size:clamp(19px,4vw,25px);color:var(--orange-ink);pointer-events:none;}
  .breath-count,.respira-count{color:var(--muted);font-size:15px;font-weight:600;margin-bottom:18px;min-height:22px;}
  .steps,.pasos-crisis{display:grid;grid-template-columns:1fr;gap:14px;}
  @media(min-width:760px){.steps,.pasos-crisis{grid-template-columns:1fr 1fr;}}
  .step,.paso-crisis{background:var(--white);border:1.4px solid var(--line);border-radius:var(--r-card);padding:20px 22px;box-shadow:var(--shadow-sm);}
  .step b,.paso-crisis b{font-size:16.5px;font-weight:700;display:block;margin-bottom:5px;}
  .step small,.paso-crisis small{color:var(--body);font-size:14.5px;line-height:1.6;display:block;}
  .ph{color:var(--orange-ink);font-style:italic;}

  /* ===== Footer ===== */
  .foot{margin-top:60px;background:var(--card);border-top:1px solid var(--line);padding:44px 0 calc(96px + env(safe-area-inset-bottom));}
  @media(min-width:900px){.foot{padding-bottom:34px;}}
  .foot .marca-foot{height:32px;width:auto;margin-bottom:16px;}
  .foot p{color:var(--body);font-size:14px;line-height:1.7;max-width:640px;}
  .foot-links{display:flex;flex-wrap:wrap;gap:10px 22px;margin-top:20px;}
  /* El pie va sobre --card: el naranja de tinta ahí solo da 4.33:1. */
  .foot-links a{font-size:14.5px;font-weight:600;color:var(--orange-ink-hover);text-decoration:underline;text-underline-offset:3px;}
  .foot-links a:hover{color:var(--ink);}
  .foot-cta{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin-top:24px;padding-top:22px;border-top:1px solid var(--line);font-size:14.5px;color:var(--body);}
  .foot-cta b{color:var(--ink);font-weight:700;}
  .foot-cta a{display:inline-flex;align-items:center;gap:8px;color:var(--orange-ink-hover);font-weight:700;text-decoration:none;border:1.6px solid var(--orange-ink-hover);padding:10px 18px;border-radius:var(--r);transition:.15s;}
  .foot-cta a svg{width:18px;height:18px;flex:none;}
  .foot-cta a:hover{background:var(--orange-ink-hover);color:#fff;}

  /* Emergency notice at the top of every footer (Trello: "Añadir aviso de emergencia",
     asked to be subtle and warm). PENDING LEGAL REVIEW: the copy and the 988/911
     numbers come verbatim from the card and have not been reviewed by legal or by
     clinical staff.
     No tel: links on purpose. This site also serves Venezuela and Colombia, and a
     one-tap call to a number that is wrong for the reader is exactly the risk issue
     #76 is about; the numbers are bold text people can read and dial themselves. */
  .foot-aviso{display:flex;align-items:flex-start;gap:14px;max-width:640px;margin-top:20px;padding:16px 18px;background:var(--bg);border:1px solid var(--line);border-radius:var(--r-card);}
  .foot-aviso svg{flex:none;width:22px;height:22px;margin-top:2px;color:var(--orange-ink-hover);}
  .foot .foot-aviso p{max-width:none;font-size:14.5px;}
  .foot-aviso b{color:var(--ink);font-weight:700;}
  .foot-aviso .foot-aviso-pregunta{display:block;font-size:15px;margin-bottom:2px;}

  /* Legal links at the very end of every footer, plus the "Preferencias de cookies"
     button that reopens the CookieYes panel (see the markup comment). The button is
     styled to look like its neighbours. */
  .foot-legal{display:flex;flex-wrap:wrap;gap:4px 22px;margin-top:22px;padding-top:14px;border-top:1px solid var(--line);}
  .foot-legal a,.foot-legal button{font:inherit;font-size:13.5px;font-weight:600;line-height:1.5;color:var(--orange-ink-hover);text-decoration:underline;text-underline-offset:3px;background:none;border:0;padding:6px 0;cursor:pointer;}
  .foot-legal a:hover,.foot-legal button:hover{color:var(--ink);}

  /* ===== Legal pages (privacidad, terminos, datos-de-salud) =====
     Long text copied verbatim from legal's documents, so this layout only has to be
     readable. PENDING LEGAL REVIEW: never edit the wording in the HTML; change it in
     the document legal approves and copy it over. Link colour: --orange-ink-hover,
     because --orange-ink does not reach AA on the cream background. */
  .legal{padding:34px 0 0;}
  .legal-wrap{max-width:780px;}
  .legal h1{font-size:clamp(30px,5.2vw,46px);margin-bottom:14px;}
  .legal .legal-fechas{color:var(--muted);font-size:14px;line-height:1.7;}
  .legal h2{font-size:clamp(20px,2.8vw,25px);line-height:1.25;margin:44px 0 6px;}
  .legal [id]{scroll-margin-top:calc(var(--header-h) + 16px);}
  .legal p,.legal li{color:var(--body);font-size:16px;line-height:1.75;overflow-wrap:anywhere;}
  .legal p{margin-top:14px;}
  .legal ul,.legal ol{margin-top:14px;padding-left:24px;}
  .legal li{margin-top:8px;}
  .legal li ul{margin-top:8px;}
  .legal strong{color:var(--ink);font-weight:700;}
  .legal a,.link-legal{color:var(--orange-ink-hover);font-weight:600;text-decoration:underline;text-underline-offset:3px;}
  .legal a:hover,.link-legal:hover{color:var(--ink);}

  /* ===== Tabbar móvil ===== */
  .tabbar{position:fixed;bottom:0;left:0;right:0;background:rgba(252,244,234,.96);backdrop-filter:blur(12px);border-top:1px solid var(--line);display:flex;padding:8px 6px calc(8px + env(safe-area-inset-bottom));z-index:35;}
  .tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:6px 2px;color:var(--muted);font-size:11px;font-weight:700;text-decoration:none;text-align:center;line-height:1.2;}
  .tabbar a svg{width:22px;height:22px;}
  .tabbar a.active,.tabbar a[aria-current="page"]{color:var(--orange-ink);}
  @media(min-width:900px){.tabbar{display:none;}}

  /* ===== Modal ===== */
  .modal{position:fixed;inset:0;background:rgba(43,33,27,.5);z-index:60;display:none;align-items:flex-end;justify-content:center;}
  .modal.open{display:flex;}
  .sheet{background:var(--white);width:100%;max-width:480px;border-radius:28px 28px 0 0;padding:26px 24px 32px;animation:up .3s ease;}
  @keyframes up{from{transform:translateY(100%);}to{transform:none;}}
  .sheet .grab{width:44px;height:4px;background:var(--line-solid);border-radius:2px;margin:0 auto 18px;}
  .sheet h3{font-size:22px;margin-bottom:5px;font-weight:700;}
  .sheet .byline{font-size:13px;color:var(--orange-ink);font-weight:700;margin-bottom:12px;}
  .sheet p{color:var(--body);font-size:15px;margin-bottom:18px;line-height:1.6;}
  .soon{display:flex;align-items:center;gap:10px;background:var(--card);border-radius:16px;padding:16px;font-size:14px;color:var(--body);}
  .soon svg{width:20px;height:20px;flex:0 0 20px;color:var(--orange);}
  .sheet audio{width:100%;margin-top:4px;}
  .sheet .closex{margin-top:18px;width:100%;background:var(--card);border:none;padding:15px;border-radius:var(--r);font-weight:700;cursor:pointer;color:var(--ink);font-family:inherit;min-height:50px;}
  @media(min-width:900px){.modal{align-items:center;}.sheet{border-radius:28px;}.sheet .grab{display:none;}}

  /* ============================================================================
     Cómo empezar · dónde estamos · quién está detrás
     Bloques que sustituyen al formulario de intake (PR «landing con membresía»).
     Todo con los tokens de arriba: ni un color suelto.

     Contraste, que es donde se rompen estas tarjetas:
     · El precio y las cifras grandes van en --ink, no en naranja: sobre --card
       (#F7EAD9) el --orange-ink baja a 4.33:1 y aquí hay texto pequeño al lado.
     · La insignia «Con continuidad» es la ÚNICA superficie de relleno naranja, y
       usa --orange-ink (5.12:1 con blanco), nunca --orange (3.06:1).
     ========================================================================== */

  .empezar{padding:56px 0 0;}
  .planes{display:grid;gap:18px;margin-top:26px;}
  @media(min-width:900px){.planes{grid-template-columns:1fr 1fr;}}

  .plan{position:relative;background:var(--card);border-radius:var(--r-lg);padding:26px 22px;display:flex;flex-direction:column;}
  /* El destacado es marco + insignia, no otro fondo: dos cremas distintos uno al
     lado del otro se leen como un error de render, no como jerarquía. */
  .plan.destacado{background:var(--card-2);border:2px solid var(--orange);padding-top:32px;}
  .plan-insignia{position:absolute;top:-13px;left:22px;background:var(--orange-ink);color:#fff;font-size:11.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:7px 14px;border-radius:999px;}
  /* --muted sobre --card da 4,49:1 y se queda a una centésima de AA. --body pasa. */
  .plan-tipo{font-size:11.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--body);}
  .plan h3{font-size:23px;font-weight:700;color:var(--ink);margin:6px 0 2px;}
  .plan-precio b{font-size:clamp(34px,5vw,42px);font-weight:800;color:var(--ink);line-height:1.1;}
  .plan-precio span{font-size:17px;font-weight:700;color:var(--body);}
  .plan-donde{display:flex;align-items:center;gap:7px;margin-top:10px;font-size:14px;color:var(--body);}
  .plan-donde svg{width:17px;height:17px;flex:0 0 17px;color:var(--orange);}
  .plan-donde b{color:var(--ink);font-weight:700;}

  .plan-lista{list-style:none;margin:18px 0 0;display:grid;gap:11px;}
  /* NO flex: con `display:flex` cada <b> del texto se convierte en ítem y hereda
     el `gap`, así que salía un hueco antes de la coma («…desde casa , sin sala»).
     Icono absoluto + sangría: el texto vuelve a fluir como texto. */
  .plan-lista li{position:relative;padding-left:26px;font-size:15px;line-height:1.5;color:var(--body);}
  /* --orange sobre --card da 2,59:1: no llega ni al 3:1 de elemento gráfico. */
  .plan-lista svg{position:absolute;left:0;top:3px;width:16px;height:16px;color:var(--orange-ink);}
  .plan-lista b{color:var(--ink);font-weight:700;}

  /* `margin-top:auto` empuja la nota y el botón al fondo: con dos tarjetas de
     distinta altura los CTA quedan a la misma línea sin fijar alturas. */
  .plan-nota{margin-top:auto;padding-top:18px;font-size:13.5px;line-height:1.6;color:var(--body);}
  .plan-nota b{color:var(--ink);font-weight:700;}
  .plan .btn{margin-top:18px;}
  /* `.btn-soft` rellena con --card, que es justo el fondo de la tarjeta: el botón
     se volvía invisible. Mismo arreglo que ya usa `.cta-card .btn-soft`. */
  .plan .btn-soft{background:var(--white);box-shadow:var(--shadow-sm);}
  .plan-pie{margin-top:10px;text-align:center;font-size:13px;color:var(--body);}
  .plan-pie b{color:var(--ink);font-weight:700;}

  /* Dos botones seguidos dentro de un `.inner` en bloque quedaban separados
     por los 4px del espacio en blanco entre inline-blocks, que no es una
     separación: es una casualidad del HTML, y se leen como pegados. Flex con
     gap de verdad, y que bajen de línea en pantalla estrecha en vez de
     encogerse. */
  .cta-botones{display:flex;flex-wrap:wrap;gap:12px;margin-top:18px;}
  /* Los dos botones no miden lo mismo («Soy médico» contra «Soy terapeuta
     voluntario»), y dentro de esta columna no caben en una línea. Repartidos a
     partes iguales quedan parejos tanto en fila como apilados, en vez de
     escalonados por el largo del texto. */
  /* `align-self` explícito: `.cta-card .btn` pone `flex-start` más arriba, y con
     eso el botón de texto largo —que parte en dos líneas— crecía a 67px al lado
     de uno de 52. Dos botones hermanos a distinta altura se ven como un fallo. */
  .cta-botones .btn{flex:1 1 180px;justify-content:center;align-self:stretch;}

  .franja-sostiene{margin-top:22px;align-items:flex-start;padding:20px;border-radius:var(--r-card);}
  .franja-sostiene span{line-height:1.6;}

  .paises{padding:56px 0 0;}
  .pais-lista{list-style:none;margin:24px 0 0;display:grid;gap:12px;}
  .pais{display:flex;align-items:center;gap:14px;background:var(--white);border:1px solid var(--line-solid);border-radius:var(--r-card);padding:16px 18px;}
  .pais-bandera{font-size:26px;line-height:1;flex:0 0 auto;}
  .pais-txt{flex:1;min-width:0;}
  .pais-txt b{display:block;font-size:17px;font-weight:700;color:var(--ink);}
  .pais-txt span{display:block;font-size:14px;color:var(--body);margin-top:2px;}
  .pais-estado{flex:0 0 auto;font-size:11.5px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;padding:7px 14px;border-radius:999px;}
  .pais-estado.abierto{background:var(--orange-ink);color:#fff;}
  .pais-estado.pendiente{background:var(--card);color:var(--muted);}
  .pais-pie{margin-top:16px;font-size:14px;color:var(--body);line-height:1.6;}

  .grexi{padding:56px 0 0;}
  .grexi-grid{display:grid;gap:24px;align-items:center;}
  @media(min-width:900px){.grexi-grid{grid-template-columns:minmax(0,.85fr) minmax(0,1fr);gap:40px;}}
  /* aspect-ratio en vez de alto fijo: el hueco mide lo mismo que medirá la foto,
     así el bloque no salta de tamaño el día que se sustituya. */
  .grexi-foto{aspect-ratio:4/5;border-radius:var(--r-lg);overflow:hidden;}
  .grexi-foto.ph{background:var(--card);border:2px dashed var(--line-solid);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;padding:24px;}
  .grexi-foto.ph .ic{width:44px;height:44px;color:var(--orange);}
  .grexi-foto.ph .ic svg{width:100%;height:100%;}
  .grexi-foto.ph b{font-size:16px;font-weight:700;color:var(--ink);}
  .grexi-foto.ph span{font-size:13.5px;color:var(--muted);}
  .grexi-txt h2{margin-bottom:14px;}
  .grexi-txt p{color:var(--body);font-size:16px;line-height:1.7;margin-bottom:14px;}
  .grexi-txt p b{color:var(--ink);font-weight:700;}
  /* Nombre a un lado y las dos cuentas al otro, cada grupo con su propio flujo.
     Antes los tres eran hermanos sueltos y al envolver caían escalonados. */
  .grexi-firma{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;margin-top:20px;padding-top:20px;border-top:1px solid var(--line-solid);}
  .grexi-redes{display:flex;flex-wrap:wrap;gap:10px;}
  .grexi-firma b{display:block;font-size:16px;font-weight:700;color:var(--ink);}
  .grexi-firma span{display:block;font-size:13.5px;color:var(--muted);margin-top:2px;}

  /* ===== Portada de empresa y página del programa ===== */

  /* Una sola tarjeta de plan: se centra y se acota, si no queda una columna
     estirada a todo el ancho que parece un error de maquetación. */
  .planes-uno,.plan-solo{max-width:520px;margin-left:auto;margin-right:auto;}
  .planes-uno{grid-template-columns:minmax(0,1fr);}
  @media(min-width:900px){.planes-uno{grid-template-columns:minmax(0,1fr);}}
  .plan-solo{margin-top:26px;}

  /* Tres tarjetas en fila (privacidad). Con `.planes` a dos columnas la tercera
     se queda huérfana. */
  @media(min-width:900px){.planes-tres{grid-template-columns:repeat(3,minmax(0,1fr));}}

  .empezar-otra{margin-top:18px;text-align:center;font-size:15px;color:var(--body);}

  /* Línea de verificación pegada a los CTA del hero. Es la señal que compra la
     confianza de quien va a pagar, así que va antes del pliegue. */
  .hero-verif{display:flex;align-items:flex-start;gap:8px;margin-top:16px;font-size:14px;color:var(--body);line-height:1.5;}
  .hero-verif svg{width:17px;height:17px;flex:0 0 17px;margin-top:2px;color:var(--orange);}

  /* `.plan` reusado como tarjeta de contenido (Qué esperar, Privacidad): sin
     precio ni botón, el h3 no necesita el aire de arriba. */
  .planes .plan > h3:first-child{margin-top:0;}

  /* ===== Hero de la portada de empresa =====
     Sustituye a las dos tarjetas de cifras heredadas del sitio del terremoto.
     Un hero de suscripción tiene que responder dos cosas sobre el pliegue: qué
     cuesta y qué me llevo. La confianza ya la dice la línea de verificación. */
  .hero-oferta{display:grid;gap:12px;}
  @media(min-width:560px){.hero-oferta{grid-template-columns:auto minmax(0,1fr);align-items:center;}}
  .hero-precio{padding:16px 20px;display:flex;flex-direction:column;gap:2px;}
  .hero-precio-desde{font-size:12.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--body);margin-bottom:2px;}
  .hero-precio-num{font-size:30px;font-weight:800;color:var(--ink);line-height:1.1;}
  .hero-precio-num span{font-size:16px;font-weight:700;color:var(--body);}
  /* Sustituye a `.hero-precio-sub`, que iba a 12,5px en --muted sobre --card:
     4,49:1, falla AA por una centésima. */
  .hero-precio-sello{display:inline-flex;align-items:center;gap:7px;background:var(--banner);border:1px solid var(--line);border-radius:999px;padding:6px 13px 6px 10px;font-size:13.5px;font-weight:700;color:var(--orange-ink-hover);}
  .hero-precio-sello svg{width:15px;height:15px;flex:none;stroke-width:2.8;}
  .hero-precio-pie{font-size:13px;color:var(--body);margin-top:6px;}
  /* Enlace, no botón: ver la nota del HTML. Un botón aquí engorda la fila y
     abre un hueco en las tres tarjetas de al lado. --orange-ink-hover porque
     esto va sobre --card, donde --orange-ink se queda en 4,33:1. */
  .hero-precio-cta{align-self:flex-start;display:inline-flex;align-items:center;gap:7px;margin-top:10px;font-size:14px;font-weight:700;color:var(--orange-ink-hover);text-decoration:none;}
  .hero-precio-cta svg{width:15px;height:15px;flex:none;}
  .hero-precio-cta:hover{text-decoration:underline;}
  /* Cada punto es una tarjetita, no una línea de texto: la franja tiene que
     sostener el peso del precio que va a su izquierda. */
  .hero-incluye{list-style:none;display:grid;gap:10px;}
  /* En columna y no icono-al-lado: con títulos de una o dos líneas, el formato
     horizontal dejaba cada tarjeta empezando a una altura distinta. Así el
     icono arranca arriba en las tres, el texto cae al mismo sitio y la etiqueta
     de plan se ancla abajo con `margin-top:auto`. */
  .hero-incluye li{display:flex;flex-direction:column;align-items:flex-start;gap:11px;background:var(--white);border:1px solid var(--line-solid);border-radius:16px;padding:16px 18px;}
  .hero-incluye .ic{display:flex;align-items:center;justify-content:center;width:38px;height:38px;flex:0 0 38px;border-radius:12px;background:var(--card);color:var(--orange);}
  .hero-incluye .ic svg{width:20px;height:20px;}
  .hero-incluye li > span:last-child{display:flex;flex-direction:column;flex:1;width:100%;}
  .hero-incluye b{display:block;font-size:14.5px;font-weight:700;color:var(--ink);line-height:1.3;}
  .hero-incluye small{display:block;font-size:12.5px;color:var(--body);margin-top:3px;}
  /* La etiqueta al fondo: es lo que alinea las tres tarjetas entre sí. */
  .hero-incluye .hi-plan{margin-top:auto;align-self:flex-start;}

  /* Plan aún no disponible: se ve, se lee y no se puede pulsar. */
  .plan-pronto{opacity:.92;}
  .insignia-pronto{background:var(--muted);}
  .plan-pronto .btn[aria-disabled="true"]{background:var(--card-2);color:var(--muted);box-shadow:none;cursor:not-allowed;text-align:center;}

  /* Tarjetas de solo texto (Qué esperar, Privacidad): en blanco y con el título
     más contenido. Cuatro bloques crema sobre crema se leían como un muro. */
  .planes-liviano .plan{background:var(--white);border:1px solid var(--line-solid);padding:22px 20px;}
  .planes-liviano .plan h3{font-size:18px;line-height:1.35;}
  .planes-liviano .plan .plan-nota{padding-top:10px;font-size:14px;color:var(--body);}

  /* ===== Ficha de plan, acabado del prototipo =====
     El check circulado pesaba y competía con el texto; va el simple. El estado
     ("disponible en…") sube a píldora con punto, y la nota se mete en caja
     blanca dentro de la tarjeta para que se lea como una advertencia y no como
     un párrafo más de la lista. */
  .plan-estado{align-self:flex-start;display:inline-flex;align-items:center;gap:8px;margin-top:12px;background:var(--white);border-radius:999px;padding:7px 14px;font-size:12.5px;font-weight:700;color:var(--orange-ink);}
  .plan-estado .punto{width:7px;height:7px;border-radius:50%;background:var(--orange);flex:0 0 7px;}
  .plan-lista svg{stroke-width:2.6;}
  .plan-nota{background:var(--white);border-radius:16px;padding:16px 18px;}
  .plan-nota p{font-size:13.5px;line-height:1.6;color:var(--body);}
  .plan-nota p b{color:var(--ink);font-weight:700;}
  /* En la tarjeta destacada el fondo ya es --card-2: la caja blanca sigue
     contrastando, pero el borde la asienta. */
  .plan.destacado .plan-nota{border:1px solid var(--line-solid);}

  /* ===== Precios por región =====================================
     La sección de membresías muestra tres planes y dos regiones. Los precios
     viven en el HTML (y en una constante del JS de membresia.html); la
     AUTORIDAD para cobrar es `pagos.planes`, en el repo de pacientes.
     OJO con la especificidad: `.plan-precio span` (0,1,1) está definida más
     arriba y le gana a cualquier clase suelta (0,1,0) sobre un <span> de
     dentro. Por eso las tres de abajo van calificadas con `span.`: sin eso la
     moneda y el periodo salen con el tamaño del precio viejo. Es el mismo
     choque que ya mordió en `.sec-head p` y en `.hero-panel p`. */

  /* Lo que ya se recibe gratis, antes de las tarjetas: es el argumento del
     early bird, así que va arriba y no en la letra pequeña. */
  /* EL TRATO — es la cabecera de la sección de precios. La fecha pasa de un h3
     de 17px a titular: una vez en voz alta, donde se decide, en vez de trece
     veces en voz baja repartidas por la página. */
  /* EL TRATO — cabecera de la sección de precios. La fecha a tamaño de titular,
     una vez, donde se decide. Debajo, DOS MITADES DEL MISMO PESO: lo que ya se
     tiene gratis y lo que se abre el 16. La segunda es lo que de verdad se está
     comprando, así que no puede quedar como nota al pie de la primera. */
  .trato{background:var(--white);border:1px solid var(--line);border-left:5px solid var(--orange);border-radius:var(--r-lg);padding:26px 22px;box-shadow:var(--shadow-sm);}
  @media(min-width:900px){.trato{padding:34px 38px;}}
  .trato-fecha{display:inline-flex;align-items:center;gap:8px;background:var(--banner);border-radius:999px;padding:7px 15px 7px 12px;font-size:12.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--orange-ink-hover);}
  .trato-fecha svg{width:16px;height:16px;flex:none;}
  .trato h2{margin-top:16px;font-size:clamp(23px,3.5vw,33px);font-weight:700;line-height:1.2;color:var(--ink);}
  .trato h2 em{font-style:normal;color:var(--orange-deep);}
  .trato-bajada{margin-top:12px;font-size:16px;color:var(--body);max-width:62ch;}

  .trato-cols{margin-top:24px;display:grid;gap:22px;}
  @media(min-width:900px){.trato-cols{grid-template-columns:1fr 1fr;gap:30px;}}
  .trato-bloque-titulo{display:flex;align-items:center;gap:10px;font-size:14.5px;font-weight:700;color:var(--ink);margin-bottom:12px;}
  .trato-chip{display:inline-flex;align-items:center;background:var(--banner);color:var(--orange-ink-hover);border-radius:999px;padding:4px 11px;font-size:11.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;}
  .trato-chip.chip-16{background:var(--orange-ink);color:#fff;}

  .trato-lista{list-style:none;display:grid;gap:11px;}
  .trato-lista li{display:flex;align-items:flex-start;gap:11px;background:var(--banner);border-radius:var(--r);padding:13px 15px;}
  /* La mitad del 16 va sobre blanco con borde: pesa lo mismo pero se distingue,
     y así las dos columnas no se leen como una sola lista de seis. */
  .trato-lista.destacada li{background:var(--white);border:1.5px solid var(--line-solid);}
  .trato-lista svg{width:18px;height:18px;flex:none;margin-top:2px;color:var(--orange-ink-hover);stroke-width:2.8;}
  .trato-lista b{display:block;font-size:15px;color:var(--ink);line-height:1.35;}
  .trato-lista small{display:block;font-size:13px;color:var(--body);margin-top:2px;line-height:1.45;}

  .trato-pie{margin-top:22px;padding-top:16px;border-top:1px solid var(--line);font-size:13.5px;line-height:1.6;color:var(--body);}
  .trato-pie b{color:var(--ink);font-weight:700;}

  /* Barra de región: selector + aviso. */
  .precios-barra{margin-top:26px;display:grid;gap:12px;min-width:0;}
  .precios-barra > *{min-width:0;}
  @media(min-width:860px){.precios-barra{grid-template-columns:auto 1fr;align-items:center;column-gap:20px;}}
  /* Sin conmutador: la región se detecta y se dice. Dejar elegir crearía una
     expectativa que el cobro rompería, porque allí la acredita la tarjeta. */
  .region-actual{display:inline-flex;align-items:center;gap:8px;background:var(--white);border:1.6px solid var(--line-solid);border-radius:999px;padding:9px 16px;font-size:14px;font-weight:600;color:var(--body);box-shadow:var(--shadow-sm);}
  .region-actual svg{width:16px;height:16px;flex:none;color:var(--orange-ink-hover);}
  .region-actual b{color:var(--ink);font-weight:700;}

  .precios-aviso{display:flex;align-items:flex-start;gap:9px;font-size:13.5px;line-height:1.5;color:var(--body);min-height:22px;}
  .precios-aviso svg{width:16px;height:16px;flex:0 0 16px;margin-top:2px;color:var(--orange-ink);}
  .precios-aviso b{color:var(--ink);font-weight:700;}

  /* Precio con hueco reservado: al cambiar de región solo cambia el texto de la
     cifra, y `min-width` + `tabular-nums` evitan que el layout salte. */
  .plan-precio{margin-top:14px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;min-height:50px;}
  .plan-precio span.plan-precio-cifra{display:inline-flex;align-items:baseline;color:var(--ink);font-size:inherit;font-weight:inherit;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;}
  .plan-precio span.plan-precio-moneda{font-size:24px;font-weight:700;line-height:1;align-self:flex-start;margin-top:6px;color:var(--ink);}
  .plan-precio-cifra b{display:inline-block;min-width:4.7ch;}
  .plan-precio span.plan-precio-periodo{font-size:16px;font-weight:700;color:var(--body);}

  /* Cuándo se cobra, pegado a la cifra. OJO: el texto va envuelto en un <span>.
     Suelto dentro de este contenedor flex, cada trozo entre etiquetas se vuelve
     un ítem independiente y la frase se parte en bloques con huecos. */

  .plan-resumen{font-size:14.5px;color:var(--body);margin-top:4px;}
  .plan-lista li.heredado{color:var(--ink);font-weight:600;}

  /* Retícula de tres. Por debajo de 1020px una sola columna centrada: a dos
     columnas la tercera queda huérfana y a tres no respiran. Es modificador
     propio y NO `.planes-tres`, que la comparte la sección de privacidad. */
  /* El hueco entre secciones lo fija `padding-top:56px` en cada una, con el
     fondo a 0. El hero cerraba con 52 y hacía el PRIMER corte de 108: el doble
     que todos los que vienen después, y era lo que se veía como irregular. */
  .pagina-membresia .hero{padding-bottom:0;}

  .planes-precios{grid-template-columns:minmax(0,1fr);max-width:560px;margin-left:auto;margin-right:auto;}
  @media(min-width:1020px){
    .planes-precios{grid-template-columns:repeat(3,minmax(0,1fr));max-width:none;gap:20px;align-items:start;}
    .planes-precios .plan{height:100%;}
    /* La destacada NO se sube. Un `margin-top:-14px` la desplazaba entera:
       su borde de abajo y, peor, su botón quedaban 14px por encima de los
       otros dos, y tres CTA a tres alturas distintas se leen como un fallo de
       maquetación. Destaca por fondo, borde, insignia y sombra; no hace falta
       moverla de la fila. */
    .planes-precios .plan.destacado{box-shadow:var(--shadow);}
  }

  /* ===== Acabado de las tres tarjetas de precio ====================
     Eran crema sobre el crema de la página: sin borde ni sombra, la sección
     entera se leía como una sola mancha y ninguna tarjeta tenía filo. Van en
     BLANCO con borde, y así la destacada se queda con el crema y el naranja
     para ella sola: destaca por contraste de fondo, no solo por el marco.

     OJO con la especificidad: `.plan.destacado` (0,2,0) está definida más
     arriba y empata con `.planes-precios .plan` (0,2,0), así que al ir esta
     después le ganaría y le borraría el borde naranja. Por eso la destacada se
     vuelve a declarar aquí calificada (0,3,0). Es el mismo choque que ya mordió
     en `.sec-head p`, `.hero-panel p` y `.ya-incluido > p`. */
  .planes-precios .plan{
    background:var(--white);
    border:1.5px solid var(--line-solid);
    box-shadow:var(--shadow-sm);
  }
  .planes-precios .plan.destacado{background:var(--card-2);border:2px solid var(--orange);}
  /* SIN elevación al pasar el ratón, y no por gusto: `.plan` está en la lista
     del SELECTOR que anima la entrada, y esa animación usa `transform` con un
     `transition` propio y un `transition-delay` escalonado que pone el JS.
     Declarar aquí un `transition` lo sustituye entero —se pierde el fundido— y
     además el retardo del escalonado se le pega al hover. La tarjeta ya tiene
     filo con el borde y la sombra; el hover no vale romper eso. */

  /* Icono de la mitad que se contrata: identifica el plan de un vistazo, antes
     de leer el nombre, y es lo que rompe el bloque de texto de arriba. */
  .planes-precios .plan-ic{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:14px;background:var(--banner);margin-bottom:14px;}
  .planes-precios .plan-ic svg{width:22px;height:22px;color:var(--orange-ink);}
  .planes-precios .plan.destacado .plan-ic{background:var(--white);}

  /* La promesa del lanzamiento, dentro de la tarjeta y pegada a la cifra: es lo
     que hace que el precio no asuste, así que no puede estar solo en el pie. */
  .planes-precios .plan-gratis{display:inline-flex;align-items:center;gap:7px;margin-top:4px;align-self:flex-start;background:var(--banner);border-radius:999px;padding:7px 14px;font-size:13px;font-weight:700;color:var(--orange-ink-hover);}
  .planes-precios .plan-gratis svg{width:14px;height:14px;flex:0 0 14px;stroke-width:3;}
  .planes-precios .plan-gratis b{color:var(--ink);font-weight:800;}
  .planes-precios .plan.destacado .plan-gratis{background:var(--white);}
  /* En pantallas estrechas la frase no cabe en una línea, y una píldora de dos
     líneas se lee como un error: por debajo de 400px deja de ser píldora. */
  @media(max-width:400px){.planes-precios .plan-gratis{border-radius:14px;}}

  /* Filo entre la cabecera (icono, nombre, precio) y las prestaciones: la
     tarjeta pasa de ser una lista larga a tener dos partes. */
  .planes-precios .plan-lista{margin-top:20px;padding-top:20px;border-top:1px solid var(--line-solid);}
  /* --orange-ink pasa AA sobre blanco (5,12:1) pero no sobre el crema de la
     destacada (4,33:1), donde va --orange-ink-hover. */
  .planes-precios .plan.destacado .plan-lista svg{color:var(--orange-ink-hover);}

  /* La nota era una caja BLANCA dentro de la tarjeta: con la tarjeta ya en
     blanco desaparecía. En las dos normales se invierte a crema; en la
     destacada, que sigue siendo crema, se queda blanca. */
  .planes-precios .plan-nota{background:var(--banner);}
  .planes-precios .plan.destacado .plan-nota{background:var(--white);}

  /* Sesión adicional: informativa, sin botón. Dice el precio, no promete que ya
     se pueda comprar. */
  .planes-extra{margin-top:20px;background:var(--banner);border-radius:var(--r-card);padding:20px 22px;display:grid;gap:12px;}
  .planes-extra .pe-ic{width:34px;height:34px;color:var(--orange);}
  .planes-extra h3{font-size:17px;font-weight:700;color:var(--ink);}
  .planes-extra p{font-size:14.5px;color:var(--body);line-height:1.6;max-width:60ch;}
  .planes-extra .pe-precio{font-size:15px;font-weight:700;color:var(--ink);white-space:nowrap;font-variant-numeric:tabular-nums;background:var(--white);border-radius:14px;padding:12px 18px;align-self:start;justify-self:start;}
  .planes-extra .pe-precio b{display:inline-block;min-width:3.4ch;}
  @media(min-width:760px){
    .planes-extra{grid-template-columns:auto 1fr auto;align-items:center;column-gap:20px;}
    .planes-extra .pe-precio{justify-self:end;}
  }

  /* Era un <ul> de UN solo elemento: la viñeta y su sangría de 18px dejaban
     esta línea descolgada a la derecha del borde de las tarjetas, que es con lo
     que tiene que alinearse. Un párrafo, al ras. */
  /* Sin `max-width`: esta línea va al ancho de la sección, como la caja de la
     sesión extra que tiene justo encima. Con 78ch cortaba antes de llegar al
     borde y se veía como un bloque descuadrado dentro de una retícula que sí
     llega. Es texto legal de dos frases, no un párrafo de lectura. */
  .planes-legal{margin-top:16px;font-size:13px;line-height:1.65;color:var(--body);}

  /* Chips de especialidad del hero: enseñan de qué tamaño es el catálogo sin
     tener que bajar. Se rellenan con datos REALES del equipo. */
  .hero-chips{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:26px 0 24px;}
  .hero-chips li{background:var(--white);border:1px solid var(--line-solid);border-radius:999px;padding:7px 13px;font-size:13px;font-weight:600;color:var(--body);}
  .hero-chips li.mas{background:transparent;border-style:dashed;color:var(--muted);}

  /* ===== Qué incluye ===== */
  .beneficios{display:grid;gap:16px;margin-top:26px;}
  @media(min-width:760px){.beneficios{grid-template-columns:1fr 1fr;}}
  .beneficio{background:var(--white);border:1px solid var(--line-solid);border-radius:var(--r-lg);padding:24px 22px;}
  .beneficio .ic{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:14px;background:var(--card);color:var(--orange);margin-bottom:14px;}
  .beneficio .ic svg{width:24px;height:24px;}
  .beneficio h3{font-size:18.5px;font-weight:700;color:var(--ink);line-height:1.35;margin-bottom:8px;}
  .beneficio p{font-size:14.5px;line-height:1.65;color:var(--body);}

  /* ===== Terapia y medicina a la par ============================
     La página vendía dos servicios y estaba escrita como si vendiera
     uno: «terapeuta» salía 40 veces y «médico» 16. Estas clases son
     las que reparten el peso en el hero y en «Qué incluye». */
  .hero-precio-planes{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:7px;font-size:13px;color:var(--body);}
  .hero-precio-planes b{color:var(--ink);font-weight:700;}
  .hero-precio-planes span{white-space:nowrap;}
  /* Etiqueta de a qué plan pertenece cada tarjetita del hero: sin esto se
     leen como «lo que te dan por $39,99», que es el plan más barato. */
  .hi-plan{display:inline-block;margin-top:7px;font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--orange-ink-hover);background:var(--banner);border:1px solid var(--line);border-radius:999px;padding:3px 9px;font-style:normal;}
  /* Lo común NO lleva naranja: no es un plan y no debe competir con los dos
     que sí lo son. */
  .hi-plan.ambos{color:var(--body);background:var(--card-2);border-color:var(--line-solid);}

  /* Dos raíles en paralelo en vez de duplicar la sección: ocupa menos alto
     que las cuatro tarjetas de antes y la simetría se ve antes de leer. */
  .incluye-dos{display:grid;gap:16px;}
  @media(min-width:860px){.incluye-dos{grid-template-columns:1fr 1fr;}}
  .rail{background:var(--white);border:1px solid var(--line-solid);border-radius:var(--r-lg);padding:24px 22px;box-shadow:var(--shadow-sm);}
  .rail-cab{display:flex;align-items:center;gap:13px;padding-bottom:16px;border-bottom:1px solid var(--line-solid);margin-bottom:16px;}
  .rail-ic{display:flex;align-items:center;justify-content:center;width:46px;height:46px;flex:none;border-radius:14px;background:var(--card);color:var(--orange);}
  .rail-ic svg{width:25px;height:25px;}
  .rail-cab h3{font-size:19px;font-weight:700;line-height:1.3;color:var(--ink);}
  .rail-cab small{display:block;font-size:13px;font-weight:600;color:var(--body);margin-top:2px;}
  .rail ul{list-style:none;display:grid;gap:13px;}
  .rail li{display:flex;align-items:flex-start;gap:10px;font-size:14.5px;line-height:1.55;color:var(--body);}
  .rail li svg{width:18px;height:18px;flex:none;color:var(--orange-ink-hover);margin-top:3px;}
  .rail li b{color:var(--ink);font-weight:700;}
  .incluye-comun{margin-top:16px;background:var(--banner);border:1px solid var(--line);border-radius:var(--r-lg);padding:20px 22px;}
  .incluye-comun p.t{font-size:12px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--orange-ink-hover);margin-bottom:13px;}
  .incluye-comun ul{list-style:none;display:grid;gap:12px;}
  @media(min-width:760px){.incluye-comun ul{grid-template-columns:repeat(3,1fr);gap:16px;}}
  .incluye-comun li{display:flex;align-items:flex-start;gap:10px;font-size:14px;line-height:1.5;color:var(--body);}
  .incluye-comun li svg{width:18px;height:18px;flex:none;color:var(--orange-ink-hover);margin-top:2px;}
  .incluye-comun li b{color:var(--ink);font-weight:700;}

  /* ===== Hero de la portada de empresa, en grande =====
     Solo aquí (`.hero-empresa`): las otras cuatro páginas conservan su hero.
     El texto pesaba poco y la mascota se llevaba media pantalla con mucho aire
     vacío alrededor, así que el reparto se invierte y la franja de precio pasa a
     ocupar TODO el ancho por debajo, que era donde quedaba el hueco muerto. */
  /* El `.hero` compartido trae 64px de padding inferior, pensados para cuando
     terminaba en texto suelto. Aquí cierra con la franja de precio, que ya es un
     bloque con su propio peso: sumados a los 56px de la sección siguiente daban
     120px de blanco, el doble que cualquier otro salto de la página. */
  .hero-empresa{padding-top:48px;padding-bottom:52px;}
  .hero-empresa .title{font-size:clamp(38px,8.4vw,76px);letter-spacing:-.03em;line-height:1.02;}
  .hero-empresa .lead{font-size:clamp(17px,1.5vw,20px);line-height:1.6;max-width:34ch;}
  .hero-empresa .hero-verif{font-size:15px;}
  #profesionales .hero-chips li{font-size:13.5px;padding:8px 15px;}

  @media(min-width:1024px){
    /* Más columna para el texto y menos para la ilustración. */
    .hero-empresa .hero-grid{grid-template-columns:1.32fr 1fr;column-gap:36px;}
    /* La mascota deja de ocupar dos filas: la franja de oferta se le pone debajo
       a todo lo ancho, en vez de apretada en media columna. */
    .hero-empresa .hero-right{grid-column:2;grid-row:1;min-height:0;}
    .hero-empresa .hero-extra{grid-column:1/-1;grid-row:2;margin-top:28px;}
    .hero-empresa .hero-oferta{grid-template-columns:auto minmax(0,1fr);gap:34px;align-items:stretch;}
    .hero-empresa .hero-incluye{align-items:stretch;}
    /* Los tres puntos en fila: en media columna cada uno partía en dos líneas. */
    .hero-empresa .hero-incluye{grid-template-columns:repeat(3,minmax(0,1fr));gap:22px;}
    .hero-empresa .lead{max-width:38ch;}
    .hero-empresa .hero-precio{padding:18px 24px;}
    .hero-empresa .hero-precio-num{font-size:34px;}
  }

  /* La mascota cede tamaño (lo pidió Alejandra: mejor texto grande que mascota
     grande) y los anillos se ajustan para no quedar enormes a su alrededor. */
  .hero-empresa .mascot{max-width:400px;}
  .hero-empresa .rings::before{width:min(420px,80vw);height:min(420px,80vw);}
  .hero-empresa .rings::after{width:min(310px,58vw);height:min(310px,58vw);}

  /* ===== Remates del hero de empresa ===== */

  /* Trazo bajo la segunda línea del titular. Va con gradiente y detrás del texto
     (z-index negativo sobre un ::after), no como border-bottom: así abraza la
     palabra en vez de subrayarla a la altura de las descendentes. */
  .hero-empresa .subrayado{position:relative;display:inline-block;}
  .hero-empresa .subrayado::after{content:"";position:absolute;left:-.04em;right:-.04em;bottom:.1em;height:.22em;border-radius:999px;background:linear-gradient(90deg,rgba(242,106,27,.28),rgba(242,106,27,.10));z-index:-1;}

  /* Caras + línea de verificación en una sola fila: la prueba social y la
     promesa se leen juntas, que es como convencen. */
  .hero-prueba{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:24px;}
  .hero-prueba .hero-verif{margin-top:0;}
  .avatares{display:flex;}
  .avatares .avatar{width:40px;height:40px;border-radius:50%;background-size:cover;background-position:center;border:2.5px solid var(--bg);box-shadow:var(--shadow-sm);}
  .avatares .avatar+.avatar{margin-left:-13px;}

  /* Fondo del hero: un lavado cálido detrás de la ilustración para que la
     sección no sea un rectángulo crema plano. Decorativo y sin coste de layout. */
  .hero-empresa{position:relative;overflow:clip;}
  .hero-empresa::before{content:"";position:absolute;top:-40px;right:-10%;width:min(760px,80%);height:min(760px,90%);background:radial-gradient(circle at 50% 45%,rgba(242,106,27,.10),rgba(242,106,27,0) 62%);pointer-events:none;z-index:0;}
  .hero-empresa .hero-grid{position:relative;z-index:1;}

  /* ===== Aparición al hacer scroll =====
     El estado inicial cuelga de `.anim-on`, que solo pone el JS: sin JS (o con
     `prefers-reduced-motion`) la clase no existe y todo se ve desde el principio.
     Nunca poner `opacity:0` fuera de este ámbito. */
  .anim-on [data-anim]{opacity:0;transform:translateY(18px);transition:opacity .55s cubic-bezier(.22,.61,.36,1),transform .55s cubic-bezier(.22,.61,.36,1);}
  .anim-on [data-anim].visto{opacity:1;transform:none;}

  .foot p.foot-correo{margin-top:16px;font-size:14.5px;color:var(--body);}
  .foot-correo a{color:var(--orange-ink-hover);font-weight:700;}
  .foot-correo a:hover{color:var(--orange-ink-hover);}
  .foot-social{margin-top:8px;}

  /* La foto de Grexi: 600×900 (2:3) dentro de un hueco 4:5, así que se recorta
     con `cover` y se sube el encuadre para que la cara quede en el tercio alto
     en vez de al centro geométrico. */
  .grexi-foto{width:100%;height:auto;object-fit:cover;object-position:50% 0;display:block;}

  /* Instagram de la organización, al pie de las cinco páginas. */
  .foot-social a{display:inline-flex;align-items:center;gap:9px;font-size:14.5px;font-weight:700;color:var(--orange-ink-hover);text-decoration:none;}
  .foot-social a:hover{color:var(--orange-ink-hover);text-decoration:underline;}
  .foot-social svg{width:20px;height:20px;}

  /* ===== Entrar al portal =====
     Enlace de texto, no botón: compite a propósito por debajo del CTA. En móvil
     la barra no aguanta dos píldoras a 375px (por eso el CTA ya se esconde),
     así que este también se va al panel del menú. */
  /* «Entrar» es acción secundaria: al lado del CTA sólido, como texto suelto se
     perdía entre los ítems del menú. Botón fantasma —mismo alto que el CTA, borde
     en vez de relleno— para que se lea como acción sin competir con «Pedir apoyo». */
  /* Solo para lectores de pantalla: los enlaces al portal abren pestaña nueva y
     eso hay que anunciarlo, pero en pantalla el botón ya va bastante cargado. */
  .aviso-lector{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}
  .nav-login-wrap{position:relative;}
  /* Enlace de texto, no píldora: con dos píldoras del mismo tamaño en la barra
     («Entrar» y «Empezar») la jerarquía se pierde y el CTA se lee despegado.
     Quitarle el marco libera ~36 px, que es lo que permite devolver el CTA a
     los 900 px. */
  .nav-login{display:inline-flex;align-items:center;gap:5px;font-family:inherit;font-size:15px;font-weight:600;color:var(--ink);background:transparent;border:0;padding:6px 2px;cursor:pointer;white-space:nowrap;transition:color .18s;}
  .nav-login:hover{color:var(--orange-ink);}
  .nav-login:focus-visible{outline:2px solid var(--orange-ink);outline-offset:2px;}
  .nav-login-chev{transition:transform .18s ease;}
  .nav-login[aria-expanded="true"] .nav-login-chev{transform:rotate(180deg);}
  .nav-login[aria-expanded="true"]{color:var(--orange-ink);}
  /* El desplegable: las dos puertas del portal. Cada opción dice para quién es,
     porque «usuario» y «profesional» a secas se prestan a duda. */
  .nav-login-menu{position:absolute;top:calc(100% + 12px);right:0;z-index:60;min-width:246px;background:var(--white);border:1px solid var(--line);border-radius:16px;box-shadow:0 14px 34px rgba(31,19,10,.14);padding:6px;}
  .nav-login-menu a{display:block;padding:11px 13px;border-radius:11px;text-decoration:none;color:var(--ink);font-weight:700;font-size:15px;}
  .nav-login-menu a span{display:block;font-weight:500;font-size:13px;color:var(--muted);margin-top:2px;}
  .nav-login-menu a:hover{background:var(--card-2);color:var(--orange-ink);}
  .nav-login-menu a:focus-visible{outline:2px solid var(--orange-ink);outline-offset:-2px;}
  @media(max-width:899px){.nav-login-wrap{display:none;}}
  .menu-login{font-weight:700;color:var(--orange-ink)!important;}

  /* Aviso que inyecta la guarda de vista previa (config.js). Amarillo de
     advertencia, no la paleta de marca: tiene que leerse como "esto no es el
     sitio de verdad", no como un mensaje más de la página. */
  .aviso-previa{background:#FFF4D6;border:1px solid #E8CE86;color:#6B5313;border-radius:14px;padding:14px 16px;margin-bottom:16px;font-size:14.5px;font-weight:600;line-height:1.55;}

  @media (prefers-reduced-motion: reduce){html{scroll-behavior:auto;}*{animation:none!important;transition:none!important;}}
