/* ════════════════════════════════════════════════════════════════════════════
   Savia · iasavia.com — hoja de estilos única, compartida por todas las páginas.
   Dos capas: "base" (el diseño establecido) y "ajustes" (lo que se agrega o corrige).
   Una regla de "ajustes" gana siempre sobre "base": no importa en qué parte esté.
   ════════════════════════════════════════════════════════════════════════════ */
@layer base, ajustes;

@font-face{font-family:'Inter';src:url('/fonts/inter-latin.woff2') format('woff2');
  font-weight:100 900;font-style:normal;font-display:swap}

/* Transición animada al pasar entre páginas (Docentes ↔ Instituciones) */
@view-transition{navigation:auto}
@media(prefers-reduced-motion:reduce){@view-transition{navigation:none}}

@layer base{
  /* ═══════════ TOKENS ═══════════ */
  :root{
    interpolate-size:allow-keywords;
    --g950:#081c12;
    --g900:#0c2b1d;
    --g800:#123a28;
    --g700:#1a5c38;
    --g500:#2d8a5e;
    --mint:#5fcf96;
    --sage:#a8c9b0;
    --cream:#f5f0e8;
    --cream2:#faf7f2;
    --amber:#e3a93c;
    --ink:#101e16;
    --inst:#1e4a5c;
    --inst-dk:#0e1f28;
    --inst-light:#7ab3c0;
    --r-lg:1.5rem;
    --r-md:1.1rem;
    --shadow-card:0 8px 30px rgba(8,28,18,.08);
    --shadow-deep:0 24px 60px rgba(8,28,18,.18);
    --ease-spring:cubic-bezier(.34,1.4,.42,1);
    --ease-out:cubic-bezier(.22,.61,.36,1);
  }
  *{box-sizing:border-box;margin:0;padding:0}
  /* El atributo hidden tiene que ganarle a cualquier display en línea (p. ej. display:contents) */
  [hidden]{display:none!important}
  html{scroll-behavior:smooth;overflow-x:clip}
  body{
    /* clip (no hidden): recorta lo que se salga sin convertir al body en contenedor de scroll,
       que es lo que rompería el hero fijado */
    overflow-x:clip;
    font-family:'Inter',system-ui,sans-serif;
    -webkit-font-smoothing:antialiased;
    color:var(--ink);
    background:var(--cream2);
  }
  img{max-width:100%;display:block}
  a{color:inherit}
  button{font:inherit;cursor:pointer;border:none;background:none}
  ::selection{background:var(--mint);color:var(--g950)}
  ::-webkit-scrollbar{width:5px}
  ::-webkit-scrollbar-track{background:var(--cream)}
  ::-webkit-scrollbar-thumb{background:var(--g700);border-radius:4px}

  /* ═══════════ FOCO VISIBLE (navegación con teclado) ═══════════ */
  a:focus-visible,button:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--amber);outline-offset:3px;border-radius:6px}

  /* ═══════════ SKIP LINK ═══════════ */
  .skip-link{position:fixed;top:-100px;left:1rem;z-index:200;background:var(--g700);color:#fff;padding:.7rem 1.2rem;
    border-radius:.6rem;font-weight:700;font-size:.9rem;text-decoration:none;transition:top .25s var(--ease-out)}
  .skip-link:focus{top:14px}

  /* ═══════════ PROGRESS BAR ═══════════ */
  #progress{position:fixed;top:0;left:0;height:3px;width:100%;z-index:100;transform-origin:0 50%;transform:scaleX(0);
    background:linear-gradient(90deg,var(--g700),var(--mint),var(--amber));}
  @supports (animation-timeline: scroll()){
    #progress{animation:grow linear both;animation-timeline:scroll(root)}
    @keyframes grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
  }

  /* ═══════════ SELECTOR DE PERFIL (segmentado, dentro de la píldora) ═══════════ */
  .seg{display:flex;gap:2px;padding:3px;border-radius:999px;flex-shrink:0;
    background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.08);transition:background .35s var(--ease-out),border-color .35s}
  nav.scrolled .seg{background:rgba(26,92,56,.09);border-color:rgba(26,92,56,.12)}
  .tab-btn{min-width:0;white-space:nowrap;padding:.42rem .85rem;border-radius:999px;
    font-size:.74rem;font-weight:800;letter-spacing:.03em;color:rgba(255,255,255,.62);
    display:flex;align-items:center;gap:.35rem;
    transition:background .35s var(--ease-out),color .35s var(--ease-out)}
  nav.scrolled .tab-btn{color:#5d6c63}
  .tab-btn:not(.active):hover{color:#fff}
  nav.scrolled .tab-btn:not(.active):hover{color:var(--g700)}
  .tab-doc.active{background:var(--mint);color:var(--g950)}
  .tab-inst.active{background:var(--inst-light);color:#08202a}
  /* La etiqueta completa no entra en pantallas chicas: ahí va la versión corta */
  .tab-largo{display:none}
  .tab-corto{display:inline}
  @media(min-width:700px){.tab-largo{display:inline}.tab-corto{display:none}}

  /* ═══════════ NAV — píldora flotante ═══════════ */
  nav{position:fixed;top:0;left:0;width:100%;z-index:70;padding:.8rem 1rem;transition:padding .35s var(--ease-out)}
  nav.scrolled{padding:.5rem 1rem}
  .nav-inner{max-width:72rem;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:.7rem;
    padding:.45rem .5rem .45rem 1rem;border-radius:999px;
    background:rgba(8,28,18,.5);border:1px solid rgba(95,207,150,.2);
    backdrop-filter:blur(20px) saturate(1.5);-webkit-backdrop-filter:blur(20px) saturate(1.5);
    box-shadow:0 14px 40px rgba(8,28,18,.3);
    transition:background .35s var(--ease-out),border-color .35s var(--ease-out),box-shadow .35s var(--ease-out)}
  nav.scrolled .nav-inner{background:rgba(250,247,242,.88);border-color:rgba(26,92,56,.14);
    box-shadow:0 12px 34px rgba(8,28,18,.13)}
  .brand{display:flex;align-items:center;gap:.15rem;cursor:pointer}
  .brand img{width:52px;height:52px;object-fit:contain;flex-shrink:0;
    transition:width .4s var(--ease-spring),height .4s var(--ease-spring);
    filter:drop-shadow(0 4px 12px rgba(8,28,18,.18))}
  nav.scrolled .brand img{width:46px;height:46px}
  @media(min-width:768px){
    .brand img{width:62px;height:62px}
    nav.scrolled .brand img{width:52px;height:52px}
  }
  /* Bajo 440px la palabra sale: el propio logo ya la contiene */
  @media(max-width:439px){.brand-word{display:none}}
  /* En pantallas muy angostas la píldora se compacta para que entre el segmentado */
  @media(max-width:359px){
    .brand img{width:44px;height:44px}
    nav.scrolled .brand img{width:40px;height:40px}
    .nav-inner{padding:.4rem .45rem .4rem .6rem;gap:.45rem}
    .tab-btn{padding:.42rem .6rem;font-size:.7rem}
    nav{padding:.6rem .7rem}
  }
  .brand:hover img{filter:drop-shadow(0 8px 18px rgba(26,92,56,.3)) brightness(1.05)}
  .brand-word{font-weight:800;font-size:1.2rem;letter-spacing:-.02em;color:var(--g700);transition:color .35s var(--ease-out)}
  .brand-word b{color:var(--g500);transition:color .35s var(--ease-out)}
  /* nav sobre hero oscuro (antes de scrollear): versión clara */
  nav:not(.scrolled) .brand-word{color:#eaf5ee}
  nav:not(.scrolled) .brand-word b{color:var(--mint)}
  nav:not(.scrolled) .nlink{color:rgba(255,255,255,.88)}
  nav:not(.scrolled) .nlink::after{background:var(--mint)}
  nav:not(.scrolled) .menu-btn{color:#eaf5ee}
  .nav-links{display:none;align-items:center;gap:1.05rem;flex-shrink:0}
  .nav-links a.nlink{font-size:.82rem;white-space:nowrap;font-weight:600;color:#3f5248;text-decoration:none;position:relative;padding:.45rem 0;transition:color .35s var(--ease-out)}
  .nlink::after{content:'';position:absolute;left:0;bottom:-2px;width:100%;height:2px;border-radius:2px;background:var(--g700);
    transform:scaleX(0);transform-origin:right;transition:transform .35s var(--ease-out)}
  .nlink:hover::after{transform:scaleX(1);transform-origin:left}
  /* El segmentado ocupa ~300px de la píldora: por debajo de 1060px los enlaces van al menú */
  @media(min-width:1060px){.nav-links{display:flex}.menu-btn{display:none}}
  .menu-btn{padding:.5rem;border-radius:.7rem;color:var(--g900)}
  .nav-inner{anchor-name:--pildora}
  .mobile-menu[popover]{position:fixed;inset:auto;margin:0;border:none;overflow:visible;
    position-anchor:--pildora;top:calc(anchor(bottom) + .4rem);left:anchor(left);right:anchor(right);
    width:auto;max-width:none;border-radius:1.4rem;
    background:rgba(250,247,242,.97);backdrop-filter:blur(20px);
    box-shadow:0 30px 50px rgba(8,28,18,.2);padding:1rem;display:grid;gap:.3rem;
    opacity:0;transform:translateY(-8px);
    transition:opacity .3s var(--ease-out),transform .3s var(--ease-out),display .3s allow-discrete,overlay .3s allow-discrete}
  .mobile-menu[popover]:popover-open{opacity:1;transform:none}
  @starting-style{.mobile-menu[popover]:popover-open{opacity:0;transform:translateY(-8px)}}
  .mobile-menu a{text-decoration:none;font-weight:600;padding:.7rem .8rem;border-radius:.8rem;font-size:.95rem}
  .mobile-menu a:hover{background:rgba(26,92,56,.07)}

  /* ═══════════ BUTTONS ═══════════ */
  .btn{display:inline-flex;align-items:center;justify-content:center;gap:.55rem;font-weight:700;border-radius:999px;
    text-decoration:none;position:relative;overflow:hidden;
    transition:transform .35s var(--ease-spring),translate .3s var(--ease-out),box-shadow .35s,background .3s;will-change:transform}
  /* Onda que sale del punto exacto del toque (solo transform + opacity: compositor) */
  .onda{position:absolute;border-radius:50%;background:currentColor;opacity:.22;pointer-events:none;
    transform:scale(0);animation:onda .65s var(--ease-out) forwards}
  @keyframes onda{to{transform:scale(1);opacity:0}}
  .btn svg{transition:transform .3s var(--ease-spring)}
  .btn:hover svg{transform:translateX(4px)}
  .btn-primary{background:linear-gradient(135deg,var(--g700),var(--g500));color:#fff;padding:1rem 2.1rem;font-size:1rem;
    box-shadow:0 10px 34px rgba(26,92,56,.35),inset 0 1px 0 rgba(255,255,255,.18)}
  .btn-primary:hover{transform:translateY(-3px) scale(1.015);box-shadow:0 18px 44px rgba(26,92,56,.45)}
  .btn-amber{background:linear-gradient(135deg,#d59427,var(--amber));color:var(--g950);padding:1rem 2.1rem;font-size:1rem;
    box-shadow:0 10px 34px rgba(227,169,60,.35)}
  .btn-amber:hover{transform:translateY(-3px) scale(1.015);box-shadow:0 18px 44px rgba(227,169,60,.5)}
  .btn-ghost{background:rgba(255,255,255,.07);color:#fff;border:1px solid rgba(255,255,255,.22);padding:1rem 1.9rem;font-size:.95rem;
    backdrop-filter:blur(6px)}
  .btn-ghost:hover{transform:translateY(-3px);background:rgba(255,255,255,.13)}
  .btn-light{background:#fff;color:var(--ink);border:1px solid #e2e0da;padding:1rem 1.9rem;font-size:.95rem;box-shadow:var(--shadow-card)}
  .btn-light:hover{transform:translateY(-3px);box-shadow:0 16px 40px rgba(8,28,18,.13)}
  .btn-nav{background:var(--g700);color:#fff;padding:.55rem 1.15rem;font-size:.8rem;font-weight:700;white-space:nowrap;box-shadow:0 6px 18px rgba(26,92,56,.3)}
  .btn-nav:hover{transform:translateY(-2px)}

  /* ═══════════ CHIPS / LABELS (estilo diapos) ═══════════ */
  .chip{display:inline-flex;align-items:center;gap:.45rem;font-size:.68rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
    padding:.42rem .95rem;border-radius:.45rem;background:var(--mint);color:var(--g950)}
  .chip-outline{background:rgba(95,207,150,.12);color:var(--mint);border:1px solid rgba(95,207,150,.35)}
  .chip-amber{background:rgba(227,169,60,.14);color:var(--amber);border:1px solid rgba(227,169,60,.4)}
  .chip-cream{background:rgba(26,92,56,.08);color:var(--g700);border:1px solid rgba(26,92,56,.18)}

  /* Chips de progreso de los bloques — cambiar la clase (done/now/next) al avanzar de módulo */
  .chip-prog{display:inline-flex;align-items:center;gap:.35rem;font-size:.66rem;font-weight:800;letter-spacing:.08em;
    text-transform:uppercase;padding:.32rem .7rem;border-radius:999px;margin-top:.6rem}
  .chip-prog.done{background:rgba(45,138,94,.1);color:var(--g700);border:1px solid rgba(45,138,94,.3)}
  .chip-prog.now{background:rgba(227,169,60,.12);color:#96690f;border:1px solid rgba(227,169,60,.45)}
  .chip-prog.next{background:rgba(26,92,56,.06);color:#5d6c63;border:1px solid rgba(26,92,56,.18)}

  /* Título con barra lateral, como las diapositivas */
  .bar-title{position:relative;padding-left:1.1rem}
  .bar-title::before{content:'';position:absolute;left:0;top:.18em;bottom:.18em;width:5px;border-radius:3px;
    background:linear-gradient(180deg,var(--mint),var(--g500))}

  /* ═══════════ TYPO ═══════════ */
  /* Reparto tipográfico: los titulares se equilibran (nunca una palabra sola en la última
     línea) y los párrafos evitan terminar en una sílaba huérfana. No cambia una sola palabra. */
  h1,h2,h3,h4,.h-display,.h-section,.dk-t,.quiz-q,.quiz-nombre,.testi-n,.demo-bar{text-wrap:balance}
  p,li,blockquote,figcaption,.hero-sub,.demo-hint,.dk-s,.testi-nota{text-wrap:pretty}
  h1,h2{letter-spacing:-.025em;line-height:1.1}
  h3{letter-spacing:-.02em;line-height:1.3}
  .h-display{font-size:clamp(2.4rem,6.2vw,4.4rem);font-weight:900}
  .h-section{font-size:clamp(1.9rem,4vw,2.9rem);font-weight:900}
  .grad-text{background:linear-gradient(92deg,var(--mint) 10%,#8fe3b8 45%,var(--amber) 95%);
    -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}

  /* La savia llena el titular al entrar: se ve subir por dentro de las letras */
  .savia-llena{position:relative;display:inline-block;color:rgba(255,255,255,.2)}
  /* width:100% en vez de nowrap: si el titular parte en dos líneas, la capa de savia
     tiene que partir exactamente igual o el relleno queda corrido */
  /* La capa de savia es texto generado por CSS: se ve, pero Google y los lectores de pantalla no la
     leen (el "/ \"\"" le da texto alternativo vacío). La primera línea es el respaldo para navegadores viejos. */
  .savia-llena::after{content:attr(data-texto);content:attr(data-texto) / "";position:absolute;left:0;top:0;width:100%;font-style:inherit;user-select:none;pointer-events:none;
    background:linear-gradient(92deg,var(--mint) 10%,#8fe3b8 45%,var(--amber) 95%);
    -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;
    clip-path:inset(100% 0 0 0);animation:llenarSavia 1.9s cubic-bezier(.32,.72,.3,1) .45s both}
  @keyframes llenarSavia{
    0%{clip-path:inset(100% 0 0 0)}
    70%{clip-path:inset(0 0 0 0)}
    100%{clip-path:inset(0 0 0 0)}
  }
  /* Sin animación, el titular tiene que verse igual de bien */
  @media(prefers-reduced-motion: reduce){
    .savia-llena{color:transparent}
    .savia-llena::after{animation:none;clip-path:none}
  }
  .grad-text-light{background:linear-gradient(92deg,var(--g700),var(--g500) 60%,#3da06f);
    -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
  .kicker{font-size:.78rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--g700)}

  /* ═══════════ LAYOUT ═══════════ */
  .wrap{max-width:72rem;margin:0 auto;padding:0 1.4rem}
  .wrap-md{max-width:60rem;margin:0 auto;padding:0 1.4rem}
  .wrap-sm{max-width:48rem;margin:0 auto;padding:0 1.4rem}
  section{position:relative;scroll-margin-top:6rem}
  .sec{padding:6.5rem 0}
  /* Ahorra trabajo de render en una página larga; el tamaño estimado evita saltos de scroll */
  #bio,#faq,#como-es,#diferencia,#video{content-visibility:auto;contain-intrinsic-size:auto 700px}
  .sec-dark{background:
    radial-gradient(ellipse 70% 60% at 80% 10%,rgba(45,138,94,.22),transparent 60%),
    radial-gradient(ellipse 50% 50% at 10% 90%,rgba(26,92,56,.3),transparent 55%),
    var(--g900)}
  .sec-darker{background:
    radial-gradient(ellipse 60% 55% at 70% 40%,rgba(45,138,94,.16),transparent 60%),
    var(--g950)}
  /* Los tramos claros no llevan fondo propio: se apoyan sobre la superficie continua
     del panel. Así se eliminan 8 costuras horizontales rectas de un saque. */
  .sec-cream,.sec-white{background:transparent;position:relative;z-index:1}
  .superficie{position:relative}
  /* El cuerpo es una hoja que se desliza por encima del hero fijado: lleva el degradado de
     superficie, esquinas redondeadas arriba y una sombra hacia arriba que oscurece al hero
     a medida que lo tapa. Todo son capas del compositor: no hay repintado por scroll. */
  .cuerpo{position:relative;z-index:1;
    background:linear-gradient(180deg,var(--cream) 0%,#fdfbf7 22%,#fff 45%,#fdfbf7 72%,var(--cream) 100%);
    border-radius:34px 34px 0 0;box-shadow:0 -34px 80px rgba(8,28,18,.55);margin-top:-30px}
  .marquee-band{border-radius:34px 34px 0 0}
  @media(max-width:700px){.cuerpo,.marquee-band{border-radius:22px 22px 0 0}.cuerpo{margin-top:-22px}}

  /* Las anclas oscuras sí conservan fondo: son las que marcan el cambio de tema */
  /* Recorta la luz a la forma curva. clip y no hidden: hidden la vuelve contenedor de scroll y congela
     las animaciones ligadas al scroll de adentro (view() tomaría la sección, que nunca se desplaza). */
  .ancla{position:relative;z-index:1;overflow:hidden;overflow:clip}
  /* Escena: una luz grande al fondo que se mueve más lento que el scroll (parece lejana),
     la hoja en el medio, y el contenido apenas por delante. */
  .escena-luz{position:absolute;right:-22vmax;top:-12vmax;width:90vmax;height:62vmax;pointer-events:none;z-index:0;
    background:radial-gradient(ellipse 50% 50% at 50% 50%,rgba(95,207,150,.14),transparent 68%)}
  #demo .escena-luz{right:auto;left:-26vmax;top:auto;bottom:-16vmax}
  @supports (animation-timeline: view()){
    @media not (prefers-reduced-motion: reduce){
      .escena-luz{animation:capaLuz linear both;animation-timeline:view();animation-range:cover}
      @keyframes capaLuz{from{translate:-4% -130px}to{translate:4% 130px}}
      .ancla>.wrap,.ancla>.wrap-md,.ancla>.wrap-sm{animation:capaContenido linear both;animation-timeline:view();animation-range:cover}
      @keyframes capaContenido{from{translate:0 34px}to{translate:0 -34px}}
      .liviano .escena-luz,.liviano .ancla>.wrap,.liviano .ancla>.wrap-md,.liviano .ancla>.wrap-sm{animation:none}
    }
  }
  /* Costuras orgánicas: cada ancla oscura termina (y empieza) en una curva distinta.
     Radios elípticos = responsivo, sin SVG, y asimétrico para que no parezca una onda. */
  #estado.ancla{border-bottom-left-radius:62% 78px;border-bottom-right-radius:30% 44px;padding-bottom:8.5rem;
    border-bottom:2px solid rgba(95,207,150,.4)}
  #demo.ancla{border-top-left-radius:26% 40px;border-top-right-radius:70% 86px;
    border-bottom-left-radius:44% 60px;border-bottom-right-radius:56% 92px;padding:9rem 0 9.5rem;
    border-top:2px solid rgba(95,207,150,.32);border-bottom:2px solid rgba(95,207,150,.4)}
  #cta-final.ancla{border-top-left-radius:64% 82px;border-top-right-radius:28% 46px;padding-top:9rem;
    border-top:2px solid rgba(95,207,150,.32)}
  @media(max-width:700px){
    #estado.ancla{border-bottom-left-radius:58% 44px;border-bottom-right-radius:34% 26px;padding-bottom:7rem}
    #demo.ancla{border-top-left-radius:30% 26px;border-top-right-radius:64% 48px;
      border-bottom-left-radius:44% 34px;border-bottom-right-radius:56% 52px;padding:7.5rem 0 7.5rem}
    #cta-final.ancla{border-top-left-radius:60% 46px;border-top-right-radius:30% 28px;padding-top:7.5rem}
  }
  /* Un tramo claro con algo más de peso, para que "Qué vas a poder hacer" no se diluya */
  .sec-claro-hondo{position:relative;z-index:1;background:rgba(26,92,56,.055)}
  .sec-claro-hondo h2,.sec-claro-hondo h3{color:var(--ink)}
  .sec-claro-hondo .chip-outline{background:rgba(26,92,56,.08);color:var(--g700);border-color:rgba(26,92,56,.22)}
  .sec-claro-hondo .card-dark{background-color:#fff;border-color:rgba(168,201,176,.45);
    box-shadow:var(--shadow-card);
    background-image:radial-gradient(240px circle at var(--mx,-300px) var(--my,-300px),rgba(45,138,94,.16),transparent 70%)}
  .sec-claro-hondo .card-dark h3{color:var(--ink)!important}
  .sec-claro-hondo .card-dark p{color:#5a6b60!important}

  /* ═══════════ REVEAL (scroll) ═══════════ */
  /* Revelado por observador de JavaScript. Probé hacerlo con animaciones ligadas al scroll
     y lo revertí: un bloque más alto que la ventana quedaba a media opacidad de forma
     permanente. El observador entrega siempre el 100%, que es lo que importa. */
  .js .rv{opacity:0;translate:0 26px;
    transition:opacity .7s var(--ease-out),translate .7s var(--ease-out),
      transform .45s var(--ease-spring),scale .2s var(--ease-out),box-shadow .45s,border-color .3s,background-color .3s;
    transition-delay:var(--d,0s),var(--d,0s),0s,0s,0s,0s,0s}
  .js .rv.rv-l{translate:-34px 0}
  .js .rv.rv-r{translate:34px 0}
  .js .rv.in{opacity:1;translate:0 0}

  /* ═══════════ HERO ═══════════ */
  /* La luz es un elemento propio que se DESPLAZA (transform): eso lo mueve el compositor.
     Antes era un degradado cuya posición se animaba, y eso repintaba el hero entero en cada frame. */
  .hero-luz{position:absolute;left:50%;top:40%;width:110vmax;height:90vmax;margin:-45vmax 0 0 -55vmax;
    pointer-events:none;z-index:0;will-change:transform;
    background:radial-gradient(ellipse 50% 50% at 50% 50%,rgba(95,207,150,.17),transparent 68%);
    transition:translate .7s var(--ease-out)}
  @media not (prefers-reduced-motion: reduce){
    .hero-luz{animation:aliento 18s ease-in-out infinite alternate}
    @keyframes aliento{from{transform:translate(-7vw,-9vh)}to{transform:translate(7vw,11vh)}}
    /* Con el puntero (o el giroscopio) encima, la respiración se congela y manda el movimiento externo */
    .hero.sigue-cursor .hero-luz{animation-play-state:paused}
    .hero .leaf-deco{transition:translate .6s var(--ease-out)}
  }
  .hero{position:relative;min-height:100vh;min-height:100svh;display:flex;align-items:center;text-align:center;overflow:hidden;
    background:
      radial-gradient(ellipse 80% 65% at 75% 0%,rgba(45,138,94,.3),transparent 62%),
      radial-gradient(ellipse 55% 50% at 8% 95%,rgba(227,169,60,.1),transparent 55%),
      linear-gradient(180deg,var(--g950),var(--g900) 55%,var(--g800));
    color:#fff;padding:9.5rem 0 7.5rem}
  .hero-grid{position:absolute;inset:0;pointer-events:none;opacity:.5;
    background-image:linear-gradient(rgba(95,207,150,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(95,207,150,.05) 1px,transparent 1px);
    background-size:54px 54px;
    mask-image:radial-gradient(ellipse 75% 70% at 50% 35%,black 30%,transparent 75%);
    -webkit-mask-image:radial-gradient(ellipse 75% 70% at 50% 35%,black 30%,transparent 75%)}
  .hero-sub{font-size:clamp(1.05rem,2vw,1.3rem);color:rgba(255,255,255,.72);font-weight:300;max-width:42rem;margin:0 auto 2.6rem;line-height:1.65}
  .hero-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:.6rem}
  .hero-chip{font-size:.84rem;font-weight:600;padding:.55rem 1.05rem;border-radius:999px;color:rgba(255,255,255,.85);
    background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.13);backdrop-filter:blur(8px);
    transition:transform .3s var(--ease-spring),background .3s}
  .hero-chip:hover{transform:translateY(-3px) scale(1.04);background:rgba(95,207,150,.14);border-color:rgba(95,207,150,.35)}
  .badge-live{display:inline-flex;align-items:center;gap:.6rem;font-size:.78rem;font-weight:800;letter-spacing:.06em;
    padding:.55rem 1.2rem;border-radius:999px;color:var(--g950);background:linear-gradient(110deg,var(--mint),#8fe3b8);
    box-shadow:0 8px 28px rgba(95,207,150,.35);animation:pulseB 2.8s ease-in-out infinite}
  @keyframes pulseB{0%,100%{box-shadow:0 8px 28px rgba(95,207,150,.3)}50%{box-shadow:0 8px 28px rgba(95,207,150,.3),0 0 0 9px rgba(95,207,150,.09)}}
  .dot-live{width:9px;height:9px;border-radius:50%;background:var(--g950);position:relative}
  .dot-live::after{content:'';position:absolute;inset:-3px;border-radius:50%;border:2px solid var(--g950);opacity:.5;animation:ping 1.6s ease-out infinite}
  @keyframes ping{from{transform:scale(.6);opacity:.7}to{transform:scale(1.7);opacity:0}}
  /* El brillo, la saturación y la sombra corta van horneados en savia-logo-hero.webp.
     El halo verde es una capa aparte: cero filtros calculados en vivo. */
  .hero-logo{width:clamp(215px,27vw,285px);height:auto;margin:0 auto 1.4rem;display:block;position:relative;z-index:1;
    animation:drift 7s ease-in-out infinite}
  .hero-halo{position:absolute;left:50%;top:0;width:clamp(330px,42vw,440px);aspect-ratio:1.15;translate:-50% -14%;
    pointer-events:none;z-index:0;
    background:radial-gradient(ellipse 50% 50% at 50% 50%,rgba(95,207,150,.28),transparent 68%)}

  /* Las animaciones infinitas se pausan cuando su bloque sale de pantalla (clase .dormida por JS) */
  .dormida .hero-luz,.dormida .leaf-deco,.dormida .badge-live,.dormida .dot-live::after,.dormida .hero-logo,
  .marquee-band.dormida .marquee{animation-play-state:paused}

  /* leaf decorations */
  .leaf-deco{position:absolute;pointer-events:none;z-index:0}
  @supports (animation-timeline: view()){
    @media not (prefers-reduced-motion: reduce){
      .leaf-deco{animation:derivaHoja linear both;animation-timeline:view();animation-range:cover}
      @keyframes derivaHoja{from{translate:0 -46px}to{translate:0 46px}}
      .leaf-deco.sway{animation-name:derivaHojaInv}
      @keyframes derivaHojaInv{from{translate:0 34px}to{translate:0 -34px}}
    }
  }
  .sway{animation:sway 7s ease-in-out infinite}
  .drift{animation:drift 9s ease-in-out infinite}
  @keyframes sway{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(4deg) scale(1.03)}}
  @keyframes drift{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-12px) rotate(2deg)}}

  /* ═══════════ MARQUEE ═══════════ */
  .marquee-band{background:var(--cream);padding:1.6rem 0;border-block:1px solid rgba(26,92,56,.1);overflow:hidden}
  .marquee{display:flex;gap:.8rem;width:max-content;animation:scrollX 72s linear infinite}
  .marquee-band:hover .marquee{animation-play-state:paused}
  @keyframes scrollX{to{transform:translateX(-50%)}}
  .mq-item{display:flex;align-items:center;gap:.5rem;white-space:nowrap;font-size:.86rem;font-weight:700;color:var(--g700);
    background:#fff;border:1px solid rgba(26,92,56,.16);padding:.55rem 1.1rem;border-radius:999px;box-shadow:0 2px 8px rgba(8,28,18,.05)}
  .mq-item span{color:var(--amber)}

  /* ═══════════ CARDS ═══════════ */
  /* El foco radial sigue al cursor: usa background-image para quedar debajo del texto */
  .card{background-color:#fff;
    background-image:radial-gradient(220px circle at var(--mx,-300px) var(--my,-300px),rgba(45,138,94,.16),transparent 70%);
    border-radius:var(--r-lg);border:1px solid rgba(168,201,176,.35);box-shadow:var(--shadow-card);
    transition:transform .45s var(--ease-spring),box-shadow .45s,border-color .3s}
  .card:hover{transform:translateY(-5px);box-shadow:0 22px 50px rgba(8,28,18,.12);border-color:rgba(45,138,94,.4)}
  .card-dark{background-color:rgba(255,255,255,.055);
    background-image:radial-gradient(240px circle at var(--mx,-300px) var(--my,-300px),rgba(95,207,150,.2),transparent 70%);
    border:1px solid rgba(95,207,150,.22);border-radius:var(--r-lg);
    transition:transform .45s var(--ease-spring),border-color .3s,background-color .3s}
  .card-dark:hover{transform:translateY(-4px);border-color:rgba(95,207,150,.5);background-color:rgba(255,255,255,.08)}

  /* check rows */
  .check-row{display:flex;gap:.8rem;align-items:flex-start;padding:.75rem 0;border-bottom:1px solid rgba(95,207,150,.12)}
  .check-row:last-child{border-bottom:none}
  .check-ico{width:22px;height:22px;border-radius:50%;background:rgba(95,207,150,.16);color:var(--mint);
    display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:.1rem}

  /* grids */
  .grid-2{display:grid;gap:1.1rem}
  .grid-3{display:grid;gap:1.2rem}
  @media(min-width:768px){.grid-2{grid-template-columns:1fr 1fr}.grid-3{grid-template-columns:repeat(3,1fr)}}

  /* bloque cards (contenidos) */
  .bloque .num{font-size:3.2rem;font-weight:900;line-height:1;color:rgba(26,92,56,.1);transition:color .4s}
  .bloque:hover .num{color:rgba(45,138,94,.3)}
  .bloque ul{list-style:none;display:grid;gap:.55rem;margin-top:1rem}
  .bloque li{display:flex;align-items:center;gap:.6rem;font-size:.9rem;color:#42554a}
  .bloque li::before{content:'';width:7px;height:7px;border-radius:50%;background:linear-gradient(135deg,var(--g500),var(--mint));flex-shrink:0}

  /* tool tags */
  .tags{display:flex;flex-wrap:wrap;gap:.55rem}
  .tag{font-size:.78rem;font-weight:700;padding:.5rem .9rem;border-radius:.6rem;background:rgba(26,92,56,.07);color:var(--g700);
    border:1px solid rgba(26,92,56,.15);transition:all .25s var(--ease-spring);cursor:default}
  .tag:hover{border-color:rgba(26,92,56,.4);background:rgba(26,92,56,.11)}

  /* ═══════════ TESTIMONIOS ═══════════ */
  .dato-clave{display:flex;flex-direction:column;gap:1.1rem;align-items:center;text-align:center;
    background:#fff;border:1px solid rgba(45,138,94,.28);border-radius:var(--r-lg);
    padding:1.8rem 1.5rem;margin-bottom:1.6rem;box-shadow:0 14px 40px rgba(8,28,18,.08)}
  @media(min-width:700px){.dato-clave{flex-direction:row;text-align:left;gap:1.9rem;padding:2rem 2.2rem}}
  .dk-num{display:flex;flex-direction:column;align-items:center;flex-shrink:0;line-height:1}
  .dk-num b{font-size:4.4rem;font-weight:900;letter-spacing:-.04em;
    background:linear-gradient(140deg,var(--g700),var(--g500) 55%,var(--mint));
    -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
  .dk-num span{font-size:.74rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--g700);margin-top:.35rem}
  .dk-t{font-size:1.12rem;font-weight:900;color:var(--ink);line-height:1.3;margin-bottom:.45rem}
  .dk-s{font-size:.91rem;color:#5a6b60;line-height:1.6}
  .dk-escala{display:flex;gap:4px;margin-top:.9rem;justify-content:center}
  @media(min-width:700px){.dk-escala{justify-content:flex-start}}
  .dk-escala i{width:22px;height:6px;border-radius:3px;background:rgba(26,92,56,.14)}
  .dk-escala i.on{background:linear-gradient(90deg,var(--g500),var(--mint))}
  .js .dk-escala i{scale:0 1;transform-origin:left center;transition:scale .5s var(--ease-spring)}
  .js .rv.in .dk-escala i{scale:1 1}
  .js .dk-escala i:nth-child(2){transition-delay:0.07s}
  .js .dk-escala i:nth-child(3){transition-delay:0.14s}
  .js .dk-escala i:nth-child(4){transition-delay:0.21s}
  .js .dk-escala i:nth-child(5){transition-delay:0.28s}
  .js .dk-escala i:nth-child(6){transition-delay:0.35s}
  .js .dk-escala i:nth-child(7){transition-delay:0.42s}
  .js .dk-escala i:nth-child(8){transition-delay:0.49s}
  .js .dk-escala i:nth-child(9){transition-delay:0.56s}
  .js .dk-escala i:nth-child(10){transition-delay:0.63s}
  @media(prefers-reduced-motion:reduce){.js .dk-escala i{scale:1 1;transition:none}}
  .dk-escala i.medio{background:linear-gradient(90deg,var(--mint) 70%,rgba(26,92,56,.14) 70%)}

  .testi-grid{display:grid;gap:1.1rem;container-type:inline-size;container-name:testis}
  @media(min-width:768px){.testi-grid{grid-template-columns:1fr 1fr}}
  .testi{background:#fff;border:1px solid rgba(168,201,176,.4);border-radius:var(--r-lg);padding:1.7rem 1.5rem 1.3rem;
    box-shadow:var(--shadow-card);position:relative;display:flex;flex-direction:column;
    transition:transform .45s var(--ease-spring),box-shadow .45s,border-color .3s}
  .testi:hover{transform:translateY(-4px);box-shadow:0 20px 44px rgba(8,28,18,.11);border-color:rgba(45,138,94,.4)}
  .testi::before{content:'';position:absolute;top:0;right:0;width:74px;height:74px;pointer-events:none;
    background:no-repeat right top/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 320'%3E%3Cpath d='M10 310 C10 180 80 60 200 20 C260 0 310 10 310 10 C310 10 300 60 280 120 C240 240 160 300 10 310Z' fill='%232d8a5e'/%3E%3C/svg%3E");
    opacity:.09;transform:rotate(180deg);transform-origin:top right;border-radius:0 var(--r-lg) 0 0}
  .testi blockquote{position:relative;font-size:.97rem;line-height:1.7;color:#42554a;flex:1;margin-bottom:1.1rem}
  .testi figcaption{display:flex;align-items:baseline;gap:.55rem;flex-wrap:wrap;
    border-top:1px solid rgba(26,92,56,.12);padding-top:.85rem}
  .testi-n{font-weight:900;color:var(--g700);font-size:.95rem}
  .testi-r{font-size:.8rem;color:#5a6b60}
  @media(min-width:768px){.testi.destacado{grid-column:1/-1}}
  .testi.destacado blockquote{font-size:1.06rem}
  .testi-nota{text-align:center;font-size:.84rem;color:#5a6b60;margin-top:1.8rem;line-height:1.6}

  /* ═══════════ DEMO: EL TALLER DE PROMPTS ═══════════ */
  /* Móvil: los chips van ENTRE los dos paneles, para que la acción y su consecuencia
     se vean juntas. Escritorio: paneles lado a lado y chips debajo, a lo ancho. */
  .demo-wrap{display:flex;flex-direction:column;gap:1rem;align-items:stretch}
  .demo-wrap .demo-steps{order:2;margin-top:0}
  .demo-in{order:1}
  .demo-out-panel{order:3}
  @media(min-width:960px){
    .demo-wrap{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;align-items:start}
    .demo-in{grid-column:1;grid-row:1}
    .demo-out-panel{grid-column:2;grid-row:1}
    .demo-wrap .demo-steps{grid-column:1/-1;grid-row:2;margin-top:.4rem}
  }
  .demo-panel{border-radius:var(--r-lg);overflow:hidden;display:flex;flex-direction:column;
    border:1px solid rgba(95,207,150,.22);background:rgba(255,255,255,.045)}
  .demo-bar{display:flex;align-items:center;gap:.5rem;padding:.7rem 1rem;border-bottom:1px solid rgba(95,207,150,.16);
    font-size:.66rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:var(--sage)}
  .demo-led{width:8px;height:8px;border-radius:50%;background:var(--mint);flex-shrink:0}
  .demo-led.amber{background:var(--amber)}
  .demo-body{padding:1.2rem 1.15rem;flex:1;min-height:0;max-height:46vh;overflow-y:auto;overscroll-behavior:contain}
  @media(min-width:960px){.demo-body{min-height:300px;max-height:none;overflow-y:visible}}
  .demo-code{font-family:ui-monospace,'SF Mono',Menlo,Consolas,monospace;font-size:.86rem;line-height:1.85;
    color:rgba(255,255,255,.9);word-break:break-word}
  .pf{border-radius:.3rem;padding:.08em .28em;margin-right:.1em;
    box-decoration-break:clone;-webkit-box-decoration-break:clone}
  /* Solo la pieza recién agregada se anima; el resto queda quieto */
  .pf-nueva{animation:pfIn .5s var(--ease-spring) both}
  @keyframes pfIn{from{opacity:0;transform:translateY(6px);filter:blur(3px)}to{opacity:1;transform:none;filter:none}}
  .pf-0{background:rgba(255,255,255,.1);color:#fff}
  .pf-1{background:rgba(95,207,150,.2);color:#bff2d6;box-shadow:inset 0 0 0 1px rgba(95,207,150,.35)}
  .pf-2{background:rgba(122,179,192,.2);color:#c5e8f0;box-shadow:inset 0 0 0 1px rgba(122,179,192,.35)}
  .pf-3{background:rgba(227,169,60,.2);color:#f3d79b;box-shadow:inset 0 0 0 1px rgba(227,169,60,.35)}
  .pf-4{background:rgba(190,150,240,.2);color:#ddc9f7;box-shadow:inset 0 0 0 1px rgba(190,150,240,.35)}
  .pf-5{background:rgba(240,140,160,.2);color:#f9ccd6;box-shadow:inset 0 0 0 1px rgba(240,140,160,.35)}
  .demo-out{font-size:.88rem;line-height:1.65;color:rgba(255,255,255,.82)}
  .demo-out p{margin-bottom:.6rem}
  .demo-out ul{list-style:none;display:grid;gap:.4rem;margin:.5rem 0}
  .demo-out li{display:flex;gap:.5rem;font-size:.85rem;color:rgba(255,255,255,.75)}
  .demo-out li::before{content:'▸';color:var(--mint);flex-shrink:0}
  /* El comentario docente: es la lección de cada paso, no una nota al pie */
  .demo-out .flat{color:rgba(255,255,255,.68);border-left:2px solid rgba(227,169,60,.55);
    padding-left:.65rem;display:block}
  .demo-tbl{width:100%;border-collapse:collapse;font-size:.8rem;margin-top:.5rem}
  .demo-tbl th,.demo-tbl td{border:1px solid rgba(95,207,150,.2);padding:.45rem .5rem;text-align:left;
    color:rgba(255,255,255,.8);vertical-align:top}
  .demo-tbl th{background:rgba(95,207,150,.12);color:#bff2d6;font-weight:800;font-size:.72rem;
    text-transform:uppercase;letter-spacing:.05em}
  /* En pantallas chicas la tabla se apila en fichas: nada de scroll horizontal dentro del scroll vertical */
  @media(max-width:700px){
    .demo-tbl,.demo-tbl tbody,.demo-tbl tr,.demo-tbl td{display:block;width:100%}
    .demo-tbl thead{display:none}
    .demo-tbl tr{border:1px solid rgba(95,207,150,.24);border-radius:.6rem;padding:.5rem .6rem;margin-bottom:.5rem}
    .demo-tbl td{border:none;padding:.2rem 0}
    .demo-tbl td:first-child{font-weight:800;color:#bff2d6;font-size:.78rem}
    .demo-tbl td:nth-child(2)::before{content:'Logrado: ';color:var(--mint);font-weight:700}
    .demo-tbl td:nth-child(3)::before{content:'Inicial: ';color:rgba(227,169,60,.9);font-weight:700}
  }
  .demo-meter{display:flex;align-items:center;gap:.7rem;padding:.65rem 1rem;border-top:1px solid rgba(95,207,150,.16)}
  .demo-meter span{font-size:.64rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
    color:var(--sage);white-space:nowrap}
  .demo-meter i{flex:1;height:4px;border-radius:3px;background:rgba(255,255,255,.16);overflow:hidden;display:block}
  .demo-meter i b{display:block;height:100%;border-radius:3px;
    background:linear-gradient(90deg,#c94f4f,var(--amber) 55%,var(--mint));transition:width .6s var(--ease-out)}
  .demo-steps{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;margin-top:1.6rem}
  .demo-step{font-size:.75rem;font-weight:800;letter-spacing:.04em;padding:.6rem 1rem;border-radius:999px;
    color:rgba(255,255,255,.72);background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.32);
    transition:color .3s var(--ease-out),background .3s var(--ease-out),border-color .3s var(--ease-out)}
  .demo-step:hover{color:#fff;border-color:rgba(95,207,150,.45)}
  .demo-step.on{color:var(--g950);background:var(--mint);border-color:var(--mint)}
  .demo-step.done{color:#bff2d6;border-color:rgba(95,207,150,.4);background:rgba(95,207,150,.12)}
  .demo-nav{display:flex;flex-wrap:wrap;gap:.8rem;justify-content:center;align-items:center;margin-top:1.4rem}
  .demo-hint{text-align:center;font-size:.82rem;color:var(--sage);margin-top:1rem;min-height:1.2em}

  /* ═══════════ AUTODIAGNÓSTICO ═══════════ */
  .quiz{background:#fff;border:1px solid rgba(168,201,176,.5);border-radius:var(--r-lg);box-shadow:var(--shadow-card);
    padding:2rem 1.5rem;min-height:350px;display:flex;flex-direction:column;justify-content:center}
  @media(min-width:768px){.quiz{padding:2.4rem 2.2rem}}
  .quiz-fallback{text-align:center;color:#5a6b60;font-size:.92rem;line-height:1.6}
  .quiz-top{margin-bottom:1.4rem}
  .quiz-count{font-size:.7rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--g700)}
  .quiz-bar{height:5px;border-radius:3px;background:rgba(26,92,56,.1);margin-top:.5rem;overflow:hidden}
  .quiz-bar i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--g700),var(--mint));
    transition:width .45s var(--ease-out)}
  .quiz-q{font-size:1.15rem;font-weight:900;margin-bottom:1.3rem;line-height:1.3}
  .quiz-ops{display:grid;gap:.6rem}
  .quiz-op{text-align:left;padding:.9rem 1.1rem;border-radius:var(--r-md);border:1px solid #e2e0da;background:#fff;
    font-size:.92rem;font-weight:600;color:var(--ink);line-height:1.45;transition:border-color .25s,background .25s,transform .25s var(--ease-out)}
  .quiz-op:hover{border-color:var(--g500);background:rgba(45,138,94,.05);transform:translateX(3px)}
  /* Al volver atrás, la respuesta que ya se había elegido queda marcada */
  .quiz-op.elegida{border-color:var(--g500);background:rgba(45,138,94,.09);box-shadow:inset 3px 0 0 var(--g500)}
  .quiz-back{margin-top:1.2rem;font-size:.82rem;font-weight:700;color:#5a6b60;align-self:flex-start}
  .quiz-back:hover{color:var(--g700)}
  .quiz-res{text-align:center}
  .quiz-emoji{font-size:2.7rem;display:block;margin-bottom:.4rem}
  .quiz-nombre{font-size:1.65rem;font-weight:900;margin:.25rem 0 .8rem;color:var(--g700)}
  .quiz-texto{color:#55665c;line-height:1.7;font-size:.97rem;max-width:34rem;margin:0 auto 1.2rem}
  .quiz-reco{background:rgba(26,92,56,.06);border:1px solid rgba(26,92,56,.15);border-radius:var(--r-md);
    padding:1.1rem 1.3rem;font-size:.92rem;line-height:1.65;color:#42554a;text-align:left;max-width:36rem;margin:0 auto}
  .quiz-reco strong{color:var(--g700)}
  .quiz-cta{display:flex;flex-wrap:wrap;gap:.8rem;justify-content:center;margin-top:1.6rem}

  /* ═══════════ EL TALLO (navegación por secciones) ═══════════
     La savia sube por el tallo a medida que se recorre la página. El crecimiento va ligado
     al scroll con animation-timeline, así que corre en el compositor y no toca el hilo
     principal. Sin soporte, el tallo queda entero y todo sigue funcionando igual. */
  /* left/width explícitos: al ser un <nav>, si no los declara hereda nav{left:0;width:100%} */
  .rail{position:fixed;right:30px;left:auto;width:auto;top:50%;transform:translateY(-50%);z-index:55;display:none;
    flex-direction:column;align-items:center;gap:1.65rem;padding:.6rem 0}
  @media(min-width:900px){.rail{display:flex}}


  .rail-tallo{position:absolute;left:50%;top:0;bottom:0;width:2px;margin-left:-1px;
    border-radius:2px;background:rgba(26,92,56,.15);overflow:hidden;pointer-events:none}
  .rail-savia{display:block;width:100%;height:100%;transform-origin:top center;border-radius:2px;
    background:linear-gradient(180deg,var(--mint),var(--g500) 55%,var(--g700))}
  @supports (animation-timeline: scroll()){
    .rail-savia{transform:scaleY(0);animation:subeSavia linear both;animation-timeline:scroll(root)}
    @keyframes subeSavia{from{transform:scaleY(0)}to{transform:scaleY(1)}}
  }
  @media(prefers-reduced-motion:reduce){.rail-savia{transform:none;animation:none}}

  /* Las hojas NO van clavadas sobre el tallo: salen de él con su propio peciolo, alternando
     lado, con tamaños y separaciones distintas. Un tallo regular parece una barra de progreso. */
  .rail-item{position:relative;display:flex;align-items:center;justify-content:center;
    --hoja:13px;--peciolo:8px}
  .rail-item:nth-child(2){--hoja:11px;--peciolo:6px;margin-bottom:.2rem}
  .rail-item:nth-child(3){--hoja:15px;--peciolo:10px}
  .rail-item:nth-child(4){--hoja:12px;--peciolo:7px;margin-bottom:-.25rem}
  .rail-item:nth-child(5){--hoja:16px;--peciolo:11px;margin-bottom:.3rem}
  .rail-item:nth-child(6){--hoja:11px;--peciolo:6px}
  .rail-item:nth-child(7){--hoja:14px;--peciolo:9px;margin-bottom:-.2rem}
  .rail-item:nth-child(8){--hoja:12px;--peciolo:7px;margin-bottom:.25rem}
  .rail-item:nth-child(9){--hoja:16px;--peciolo:11px}
  .rail-item:nth-child(10){--hoja:12px;--peciolo:7px;margin-bottom:-.15rem}
  .rail-item:nth-child(11){--hoja:17px;--peciolo:12px}

  /* Peciolo: el hilito que une la hoja con el tallo */
  .rail-item::before{content:'';position:absolute;top:50%;width:var(--peciolo);height:1.5px;
    background:rgba(26,92,56,.28);border-radius:2px;pointer-events:none}
  .rail-item:nth-child(odd)::before{right:50%}
  .rail-item:nth-child(even)::before{left:50%}

  .rail-dot{width:var(--hoja);height:var(--hoja);border:none;padding:0;
    border-radius:0 100% 0 100%;background:rgba(26,92,56,.22);
    transition:transform .4s var(--ease-spring),background .35s var(--ease-out),box-shadow .35s}
  /* Cada hoja se aparta del tallo hacia su lado y se inclina distinto */
  .rail-item:nth-child(odd) .rail-dot{
    transform:translateX(calc(-1 * (var(--peciolo) + var(--hoja)/2))) rotate(-38deg)}
  .rail-item:nth-child(even) .rail-dot{
    transform:translateX(calc(var(--peciolo) + var(--hoja)/2)) rotate(128deg)}
  .rail-item:nth-child(odd) .rail-dot:hover{
    transform:translateX(calc(-1 * (var(--peciolo) + var(--hoja)/2))) rotate(-38deg) scale(1.3);
    background:rgba(45,138,94,.55)}
  .rail-item:nth-child(even) .rail-dot:hover{
    transform:translateX(calc(var(--peciolo) + var(--hoja)/2)) rotate(128deg) scale(1.3);
    background:rgba(45,138,94,.55)}
  .rail-item:nth-child(odd) .rail-dot.active{
    transform:translateX(calc(-1 * (var(--peciolo) + var(--hoja)/2))) rotate(-38deg) scale(1.45)}
  .rail-item:nth-child(even) .rail-dot.active{
    transform:translateX(calc(var(--peciolo) + var(--hoja)/2)) rotate(128deg) scale(1.45)}
  .rail-dot.active{background:linear-gradient(135deg,var(--g500),var(--mint));
    box-shadow:0 4px 16px rgba(26,92,56,.4)}

  /* El brote del extremo: la punta que todavía está creciendo */
  /* Yema → hoja. `scale` es una propiedad aparte: se multiplica con el transform de cada hoja
     sin pisarlo. La clase .brotada no se saca nunca: la planta que ya creció no vuelve atrás. */
  .rail-dot{scale:.5;opacity:.7;
    transition:transform .4s var(--ease-spring),background .35s var(--ease-out),box-shadow .35s,
      scale .6s var(--ease-spring),opacity .4s var(--ease-out)}
  .rail-dot.brotada{scale:1;opacity:1}
  .rail-dot.active{scale:1.22}
  @media(prefers-reduced-motion:reduce){.rail-dot{scale:1;opacity:1}}
  .rail-brote{width:9px;height:14px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;
    background:linear-gradient(180deg,var(--mint),var(--g500));opacity:.35;
    align-self:center;margin-top:-.3rem;pointer-events:none}

  .rail-tip{position:absolute;right:26px;padding:5px 11px;border-radius:999px;background:var(--g950);color:#fff;font-size:11px;font-weight:700;
    opacity:0;transform:translateX(6px);transition:all .2s var(--ease-out);white-space:nowrap;pointer-events:none}
  .rail-item:hover .rail-tip{opacity:1;transform:none}

  /* ═══════════ FAQ ═══════════ */
  .faq{background:#fff;border:1px solid #e7e5df;border-radius:var(--r-md);overflow:hidden;transition:border-color .3s,box-shadow .3s}
  .faq[data-open="true"]{border-color:var(--sage);box-shadow:0 10px 30px rgba(8,28,18,.08)}
  .faq-q{width:100%;display:flex;justify-content:space-between;align-items:center;gap:1rem;text-align:left;
    padding:1.25rem 1.4rem;font-weight:700;font-size:.95rem;color:var(--ink)}
  .faq-q svg{flex-shrink:0;color:var(--g700);transition:transform .4s var(--ease-spring)}
  .faq[data-open="true"] .faq-q svg{transform:rotate(180deg)}
  .faq-a{display:grid;grid-template-rows:0fr;transition:grid-template-rows .45s var(--ease-out)}
  .faq[data-open="true"] .faq-a{grid-template-rows:1fr}
  .faq-a-inner{overflow:hidden}
  .faq-a p{padding:0 1.4rem 1.3rem;font-size:.92rem;line-height:1.65;color:#55665c}

  /* ═══════════ BIO ═══════════ */
  .bio-photo{width:208px;height:208px;border-radius:50%;overflow:hidden;margin:0 auto 1.2rem;position:relative;
    border:4px solid transparent;
    background:linear-gradient(var(--cream),var(--cream)) padding-box,linear-gradient(135deg,var(--mint),var(--g500),var(--amber)) border-box;
    box-shadow:var(--shadow-deep)}
  .bio-photo img{width:100%;height:100%;object-fit:cover}
  .icon-pill{width:44px;height:44px;border-radius:50%;border:1px solid #ddd9d0;display:inline-flex;align-items:center;justify-content:center;
    transition:all .3s var(--ease-spring);background:#fff;text-decoration:none}
  .icon-pill:hover{transform:translateY(-3px) scale(1.07);box-shadow:0 10px 22px rgba(8,28,18,.13)}

  /* ═══════════ RECORRIDO DEL TALLER (Elbio) ═══════════ */
  .taller-recorrido{max-width:54rem;margin:0 auto;background:rgba(255,255,255,.05);border:1px solid rgba(122,179,192,.28);
    border-radius:var(--r-lg);padding:2.2rem 1.7rem 1.8rem;backdrop-filter:blur(8px);box-shadow:0 18px 50px rgba(0,0,0,.28)}
  .taller-recorrido .t-head{text-align:center;margin-bottom:1.7rem}
  .t-temas{list-style:none;display:grid;gap:.8rem;max-width:26rem;margin:0 auto}
  .t-temas li{display:flex;align-items:center;gap:.85rem;color:#fff;font-size:1rem;font-weight:700;
    background:rgba(122,179,192,.09);border:1px solid rgba(122,179,192,.24);border-radius:var(--r-md);padding:.95rem 1.2rem}
  .t-dot{flex-shrink:0;width:9px;height:9px;border-radius:50%;background:linear-gradient(135deg,var(--inst-light),var(--amber))}
  .t-foot{text-align:center;font-size:.85rem;color:rgba(122,179,192,.85);margin-top:1.8rem;padding-top:1.3rem;
    border-top:1px solid rgba(122,179,192,.16)}
  @media(min-width:768px){.taller-recorrido{padding:2.6rem 2.6rem 2rem}}
  /* Colaboración Savia × Elbio */
  .collab{display:flex;align-items:center;justify-content:center;gap:1.2rem;margin:1.6rem 0 .4rem}
  .collab .c-logo{width:92px;height:92px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;
    padding:14px;box-shadow:0 12px 34px rgba(0,0,0,.35),inset 0 0 0 1px rgba(122,179,192,.25);
    transition:transform .4s var(--ease-spring)}
  .collab .c-logo:hover{transform:translateY(-4px) scale(1.06)}
  .collab .c-logo img{width:100%;height:100%;object-fit:contain}
  /* El archivo del logo de Savia tiene 57% de aire alrededor del dibujo; el del Elbio, 11%.
     Sin este ajuste el mismo círculo hace ver a Savia un tercio más chico. */
  .collab .c-savia img{transform:scale(1.42)}
  .collab .c-x{font-size:1.4rem;font-weight:300;color:rgba(122,179,192,.7)}

  /* ═══════════ SERVICE CARDS (inst) ═══════════ */
  .svc{background-color:#fff;
    background-image:radial-gradient(320px circle at var(--mx,-300px) var(--my,-300px),rgba(30,74,92,.1),transparent 68%);
    border-radius:var(--r-lg);padding:1.8rem;border:2px solid transparent;box-shadow:0 6px 24px rgba(0,0,0,.12);
    transition:transform .45s var(--ease-spring),border-color .35s,box-shadow .45s}
  .svc:hover{transform:translateY(-6px);border-color:rgba(122,179,192,.55);box-shadow:0 26px 56px rgba(0,0,0,.25)}
  .svc .emoji{font-size:2.3rem;display:inline-block;transition:transform .4s var(--ease-spring)}
  .svc:hover .emoji{transform:scale(1.18) rotate(-6deg)}

  /* ═══════════ WHATSAPP FLOTANTE ═══════════ */
  .wa-float{position:fixed;right:18px;bottom:20px;z-index:80;width:54px;height:54px;border-radius:50%;
    background:#25d366;color:#fff;display:flex;align-items:center;justify-content:center;
    box-shadow:0 10px 30px rgba(37,211,102,.45),0 3px 10px rgba(0,0,0,.2);
    opacity:0;transform:translateY(16px) scale(.8);pointer-events:none;
    transition:opacity .35s var(--ease-out),transform .35s var(--ease-spring)}
  .wa-float.show{opacity:1;transform:none;pointer-events:auto}
  .wa-float:hover{transform:translateY(-3px) scale(1.07)}
  .wa-float:focus-visible{outline:3px solid var(--amber);outline-offset:3px}

  /* ═══════════ FOOTER ═══════════ */
  footer{background:var(--g950);color:var(--sage);padding:3rem 0 2rem}

  /* Al cambiar de vista, estos elementos se transforman en lugar de fundirse:
     el encabezado queda fijo y solo el contenido hace la transición. */
  @supports (view-transition-name: x){
    nav .nav-inner{view-transition-name:barra}
    .brand img{view-transition-name:marca}
    .seg{view-transition-name:selector}
    #waFloat{view-transition-name:wasap}
    ::view-transition-old(root),::view-transition-new(root){animation-duration:.45s}
  }

  /* ═══════════ MISC ═══════════ */
  @media(min-width:768px){.split{display:flex;gap:3.5rem;align-items:center}.split>*{flex:1}}
  .stat-band{display:flex;flex-wrap:wrap;justify-content:center;gap:2.6rem;margin-top:3rem}
  .stat{text-align:center}
  .stat b{display:block;font-size:2rem;font-weight:900;color:var(--mint)}
  .stat span{font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.68)}

  /* ═══════════ IMPRESIÓN / GUARDAR COMO PDF ═══════════ */
  @media print{
    .js .rv{opacity:1!important;transform:none!important;transition:none!important}
    .seg,nav,.rail,.wa-float,.skip-link,#progress,.marquee-band,.leaf-deco,.hero-grid,
    [data-switch-view]{display:none!important}
    html,body{background:#fff!important}
    .hero,.sec,.sec-dark,.sec-darker,.sec-cream,.sec-white,footer,section{background:#fff!important;
      min-height:0!important;padding:1.1rem 0!important;color:#000!important}
    .hero{padding-top:0!important}
    h1,h2,h3,h4,p,span,div,li,strong,figcaption,td,th,em,button,a{color:#000!important}
    .grad-text,.grad-text-light,.h-display span,.h-section span{background:none!important;
      -webkit-text-fill-color:#000!important;color:#000!important}
    .card,.card-dark,.svc,.faq,.taller-recorrido,.t-temas li{box-shadow:none!important;
      background:#fff!important;border:1px solid #bbb!important;break-inside:avoid;page-break-inside:avoid}
    .chip,.chip-outline,.chip-amber,.chip-cream,.chip-prog,.tag,.hero-chip,.badge-live{background:#fff!important;
      border:1px solid #999!important;box-shadow:none!important}
    .btn{border:1px solid #666!important;background:#fff!important;box-shadow:none!important}
    .faq-a{grid-template-rows:1fr!important}
    .hero-logo{width:120px!important}
    a[href^="http"]::after{content:" (" attr(href) ")";font-size:.68em;color:#555;word-break:break-all}
    section{break-inside:avoid-page}
  }

  /* En pantallas táctiles el desenfoque de fondo se recalcula en cada frame de scroll:
     la píldora baja de 20px a 8px con fondo más opaco, y los vidrios menores se apagan. */
  @media(pointer:coarse){
    .nav-inner{backdrop-filter:blur(8px) saturate(1.3);-webkit-backdrop-filter:blur(8px) saturate(1.3);background:rgba(8,28,18,.7)}
    nav.scrolled .nav-inner{background:rgba(250,247,242,.94)}
    .mobile-menu[popover]{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
    .hero-chip,.btn-ghost,.card-dark,.svc{backdrop-filter:none;-webkit-backdrop-filter:none}
  }

  /* En celular el tallo no cabe al costado: pasa a ser una hebra de 3px pegada al borde
     izquierdo, de alto de pantalla, con hojas chicas a la altura proporcional de cada sección.
     La savia sube con la misma animación de compositor que en escritorio. */
  @media(max-width:899px){
    .rail{display:flex;left:0;right:auto;top:0;bottom:0;transform:none;width:18px;padding:0;gap:0;
      pointer-events:none;flex-direction:column;justify-content:flex-start;align-items:flex-start}
    .rail-tallo{left:4px;margin-left:0;width:3px;border-radius:0 3px 3px 0;background:rgba(26,92,56,.13)}
    .rail-item{position:absolute;left:0;top:var(--pos,0%);margin:0!important;translate:0 -50%;
      width:18px;height:14px;justify-content:flex-start;--hoja:9px;--peciolo:0px}
    .rail-item::before,.rail-tip{display:none}
    /* todas las hojas salen hacia la derecha de la hebra, alternando la inclinación */
    .rail-item:nth-child(odd) .rail-dot{transform:translateX(9px) rotate(-36deg)}
    .rail-item:nth-child(even) .rail-dot{transform:translateX(9px) rotate(-62deg)}
    .rail-brote{position:absolute;left:1px;bottom:-4px;width:8px;height:12px}
    .liviano .rail{display:none}
  }

  /* ── Interacción viva: tarjetas que se inclinan hacia el cursor (solo con puntero fino) ── */
  @media(hover:hover) and (pointer:fine){
    .card:hover,.card-dark:hover,.svc:hover,.testi:hover{
      transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(var(--alza,-5px));
      transition-duration:.18s}
    .liviano .card:hover,.liviano .card-dark:hover,.liviano .svc:hover,.liviano .testi:hover{transform:translateY(-5px)}
  }
  /* En pantalla táctil la tarjeta se hunde al tocarla */
  @media(pointer:coarse){
    .card:active,.card-dark:active,.svc:active,.testi:active{scale:.982}
  }

  /* Hero: NO va fijado. Se probó sticky en el teléfono (1/9/2026) y se sentía como un fallo:
     lo que está debajo del dedo no se movía. Queda la hoja del cuerpo montada sobre su borde
     inferior y un leve retraso del contenido (parallax), que sí dan profundidad sin pelearse
     con el scroll nativo. */
  .hero{z-index:0}
  @media not (prefers-reduced-motion: reduce){
    @supports (animation-timeline: scroll()){
      .hero>.wrap{animation:rezagarse linear both;animation-timeline:scroll(root);animation-range:0 var(--altoHero,100svh)}
      /* Solo desplazamiento y chico: con 18vh y un fundido al 40% el hero se veía apagado y los
         chips quedaban pegados contra la hoja que sigue (probado en el teléfono). */
      @keyframes rezagarse{from{transform:none}to{transform:translateY(6vh)}}
    }
  }
  .liviano .hero>.wrap{animation:none}
  .liviano .cuerpo{border-radius:0;box-shadow:none;margin-top:0}
  .liviano .marquee-band{border-radius:0}

  /* En pantallas chicas los revelados laterales entran desde abajo: un bloque corrido 34px a la
     derecha mientras espera revelarse se sale del ancho, y en celular eso EXPANDE el viewport
     (la página entera se ve alejada). Va al final de la hoja para ganar por orden. */
  @media(max-width:767px){.js .rv.rv-l,.js .rv.rv-r{translate:0 26px}.js .rv.rv-l.in,.js .rv.rv-r.in{translate:0 0}}
}

@layer ajustes{
  /* ════════════════════════════════════════════════════════════════════════════
     CAPA "ajustes": todo lo que se agrega o corrige sobre la base.
     Por estar en una capa posterior GANA SIEMPRE sobre "base", sin importar la
     especificidad ni el orden en el archivo. (Excepción: un !important de "base"
     le gana a uno de "ajustes"; las capas invierten la prioridad de !important.)
     ════════════════════════════════════════════════════════════════════════════ */

  /* ── Tipografía: Inter alojada en el sitio, con tamaño óptico automático ── */
  body{font-optical-sizing:auto}

  /* ── Navegación: las pestañas ahora son enlaces a dos páginas reales ── */
  a.tab-btn{text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
  a.brand{text-decoration:none;color:inherit}
  .tab-btn.active{view-transition-name:pestana-activa}
  /* Isotipo (sin la palabra, que a este tamaño era ilegible) */
  .brand img{width:auto;height:44px;object-fit:contain}
  nav.scrolled .brand img{width:auto;height:38px}
  @media(min-width:768px){.brand img{height:50px}nav.scrolled .brand img{height:42px}}
  @media(max-width:359px){.brand img{height:38px}nav.scrolled .brand img{height:34px}}
  /* El menú cerrado NO se muestra. La base le ponía display:grid también cerrado, y quedaba
     invisible (opacidad 0) pero CLICKEABLE encima de la parte de arriba de cada pantalla:
     cualquier clic en esa zona caía en uno de sus enlaces y llevaba a otra sección. */
  .mobile-menu[popover]:not(:popover-open){display:none}
  .mobile-menu[popover]:popover-open{display:grid}
  .menu-cta{background:var(--g700);color:#fff!important;text-align:center;font-weight:800}
  .menu-cta-inst{background:var(--inst)}
  .menu-cta:hover{background:var(--g500)}
  .menu-cta-inst:hover{background:#16384a}

  /* ── Entrada de la portada en CSS puro: no espera a que corra el JavaScript ── */
  @keyframes entrar{from{opacity:0;translate:0 18px}to{opacity:1;translate:0 0}}
  .entra{animation:entrar .8s var(--ease-out) both;animation-delay:var(--d,0s)}
  .ya-visto .entra{animation:none}
  .ya-visto .savia-llena::after{animation:none;clip-path:none}
  @media(prefers-reduced-motion:reduce){.entra{animation:none}}

  /* Palabras clave dentro del H1, como línea chica sobre el titular */
  .h1-kicker{display:block;font-size:clamp(.75rem,1.4vw,.84rem);font-weight:700;letter-spacing:.14em;text-transform:uppercase;
    color:var(--mint);margin-bottom:1.1rem;line-height:1.5;text-wrap:balance}
  body[data-pagina="instituciones"] .h1-kicker{color:var(--inst-light)}

  /* ── Logo vivo: el dibujo original en capas que se arman al cargar ── */
  .logo-vivo{position:relative;width:clamp(104px,12.5vw,136px);margin:0 auto 1.5rem;z-index:1;
    animation:drift 7s ease-in-out 2.4s infinite}
  .logo-vivo-chico{width:clamp(78px,9.5vw,104px)}
  .logo-vivo .lv{position:absolute;inset:0;width:100%;height:auto;display:block;pointer-events:none;user-select:none}
  .logo-vivo .lv-sombra{position:relative}
  .lv-hoja-centro{transform-origin:51.9% 30%}
  .lv-hoja-izq{transform-origin:45.5% 40%;--giro:-16deg}
  .lv-hoja-der{transform-origin:58.1% 40%;--giro:16deg}
  @keyframes lvAparecer{from{opacity:0}}
  @keyframes lvMano{from{opacity:0;translate:0 9%}}
  @keyframes lvTallo{from{clip-path:inset(49% 0 0 0)}to{clip-path:inset(29% 0 0 0)}}
  @keyframes lvHoja{from{opacity:0;transform:scale(.12) rotate(var(--giro,0deg))}}
  @keyframes lvEscribir{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
  @media not (prefers-reduced-motion: reduce){
    html:not(.ya-visto) .lv-sombra{animation:lvAparecer .7s var(--ease-out) both}
    html:not(.ya-visto) .lv-mano{animation:lvMano .7s var(--ease-out) both}
    html:not(.ya-visto) .lv-tallo{animation:lvTallo .6s cubic-bezier(.45,.05,.3,1) .4s both}
    html:not(.ya-visto) .lv-hoja-centro{animation:lvHoja .75s var(--ease-spring) .85s both}
    html:not(.ya-visto) .lv-hoja-izq{animation:lvHoja .75s var(--ease-spring) 1s both}
    html:not(.ya-visto) .lv-hoja-der{animation:lvHoja .75s var(--ease-spring) 1.12s both}
    html:not(.ya-visto) .lv-sav{animation:lvEscribir .55s var(--ease-out) 1.4s both}
    html:not(.ya-visto) .lv-ia{animation:lvEscribir .4s var(--ease-out) 1.7s both}
  }
  .dormida .logo-vivo{animation-play-state:paused}

  /* ── Lienzo de savia (portada viva, js/savia-luz.js) ── */
  .savia-lienzo{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none;opacity:0;transition:opacity 1.4s var(--ease-out)}
  .savia-lienzo.lista{opacity:1}

  /* ── Testimonios: rol y videos ── */
  .testi-rol{display:block;font-size:.78rem;font-weight:600;color:#5a6b60;margin-top:.15rem}
  .testi-videos{margin:0 0 1.9rem}
  .tv-tit{font-size:.75rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--g700);text-align:center;margin-bottom:.9rem}
  .tv-grilla{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(.5rem,2vw,1.1rem);max-width:40rem;margin:0 auto}
  .tv{position:relative;display:block;padding:0;border:0;border-radius:1rem;overflow:hidden;aspect-ratio:9/16;background:var(--g900);
    cursor:pointer;box-shadow:0 14px 34px rgba(8,28,18,.18);transition:transform .35s var(--ease-spring),box-shadow .35s}
  .tv img{width:100%;height:100%;object-fit:cover;display:block}
  .tv-play{position:absolute;left:50%;top:52%;translate:-50% -50%;width:54px;height:54px;border-radius:50%;display:grid;place-items:center;
    background:rgba(8,28,18,.6);color:#fff;border:1px solid rgba(255,255,255,.4);transition:transform .3s var(--ease-spring),background .3s,color .3s}
  .tv:hover{transform:translateY(-4px);box-shadow:0 22px 44px rgba(8,28,18,.24)}
  .tv:hover .tv-play{transform:scale(1.1);background:var(--mint);color:var(--g950)}
  @media(max-width:480px){.tv-play{width:40px;height:40px}.tv-play svg{width:18px;height:18px}.tv{border-radius:.8rem}}

  /* ── Video de ejemplo alojado en el sitio ── */
  .promo-marco{max-width:280px;margin:0 auto;border-radius:1.6rem;overflow:hidden;box-shadow:var(--shadow-deep);border:3px solid var(--sage);
    background:#000;aspect-ratio:9/16}
  .promo-video{display:block;width:100%;height:100%;object-fit:cover}
  .promo-marco.reproduciendo{animation-play-state:paused}

  /* ── Diálogos: formularios y videos ── */
  .modal{border:0;padding:0;margin:auto;width:min(34rem,calc(100% - 1.2rem));max-height:calc(100dvh - 1.2rem);border-radius:1.6rem;
    background:var(--cream2);color:var(--ink);box-shadow:0 40px 90px rgba(8,28,18,.45);overflow:auto;overscroll-behavior:contain}
  .modal::backdrop{background:rgba(8,28,18,.64)}
  .modal[open]{animation:modalEntra .35s var(--ease-out)}
  @keyframes modalEntra{from{opacity:0;translate:0 16px;scale:.98}}
  @media(prefers-reduced-motion:reduce){.modal[open]{animation:none}}
  .modal-caja{padding:clamp(1.4rem,4.5vw,2.3rem);position:relative}
  .modal-cerrar{position:absolute;top:.7rem;right:.7rem;width:42px;height:42px;border-radius:50%;border:0;background:rgba(26,92,56,.08);
    color:var(--g700);font-size:1.6rem;line-height:1;cursor:pointer;z-index:2}
  .modal-cerrar:hover{background:rgba(26,92,56,.16)}
  .modal-tit{font-size:clamp(1.45rem,4.2vw,1.85rem);font-weight:900;letter-spacing:-.03em;line-height:1.15;margin:.5rem 2.4rem .5rem 0;color:var(--ink)}
  .modal-sub{color:#55665c;line-height:1.6;margin-bottom:1.3rem}
  .form-savia .campos{display:grid;gap:.95rem;margin-bottom:.4rem}
  .campo{display:grid;gap:.38rem;border:0;padding:0;margin:0;min-width:0}
  .campo>span,.campo>legend{font-size:.88rem;font-weight:700;color:var(--ink);padding:0}
  .campo em{font-style:normal;font-weight:500;color:#5a6b60}
  /* Solo los campos de texto: los botones de opción y las casillas tienen su propio estilo */
  .campo input:not([type=radio]):not([type=checkbox]),.campo select,.campo textarea{font:inherit;font-size:1rem;padding:.75rem .9rem;border-radius:.8rem;
    border:1.5px solid rgba(26,92,56,.22);background:#fff;color:var(--ink);width:100%;transition:border-color .2s,box-shadow .2s}
  .campo input:not([type=radio]):not([type=checkbox]):focus,.campo select:focus,.campo textarea:focus{outline:none;border-color:var(--g500);box-shadow:0 0 0 4px rgba(95,207,150,.25)}
  .campo [aria-invalid="true"]{border-color:#b45309;box-shadow:0 0 0 3px rgba(180,83,9,.15)}
  .niveles{display:grid;gap:.45rem;margin-top:.1rem}
  .nivel{display:flex;gap:.7rem;align-items:flex-start;padding:.6rem .8rem;border-radius:.8rem;border:1.5px solid rgba(26,92,56,.15);
    background:#fff;cursor:pointer;transition:border-color .2s,background .2s}
  .nivel input{margin-top:.28rem;accent-color:var(--g500);flex-shrink:0;width:18px;height:18px}
  .nivel b{display:block;font-size:.9rem;color:var(--ink)}
  .nivel small{display:block;color:#55665c;font-size:.8rem;line-height:1.4}
  .nivel:has(input:checked){border-color:var(--g500);background:rgba(95,207,150,.1)}
  .casillas{display:grid;gap:.45rem}
  .casilla{display:flex;gap:.6rem;align-items:center;font-size:.93rem;color:var(--ink);cursor:pointer}
  .casilla input{accent-color:var(--inst);width:18px;height:18px;flex-shrink:0}
  .trampa{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
  .form-priv{font-size:.8rem;color:#55665c;margin:.9rem 0 1.1rem;line-height:1.5}
  .form-priv a{color:var(--g700);font-weight:700}
  .form-enviar{width:100%}
  .form-enviar[aria-busy="true"]{opacity:.7;pointer-events:none}
  .form-estado{margin-top:.8rem;font-size:.88rem;color:#9a3412;min-height:1.2em;line-height:1.5}
  .form-estado a{color:inherit;font-weight:700}
  .form-listo{text-align:center;padding:.6rem 0 .2rem}
  .form-listo:focus{outline:none}
  .form-listo-ico{font-size:2.6rem;display:block;margin-bottom:.3rem}
  .form-listo .modal-tit{margin-right:0}
  .contacto-directo{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.2rem}
  .contacto-directo .btn{flex:1 1 12rem;padding:.8rem 1rem;font-size:.9rem}
  .cd-tit{width:100%;font-size:.86rem;color:#55665c;font-weight:600;margin:0}
  .btn-wa{background:#15803d;color:#fff}
  .btn-wa:hover{background:#166534;transform:translateY(-2px)}
  .pdf-link{display:inline-block;margin-top:1.1rem;font-size:.86rem;font-weight:700;color:var(--inst)}
  .modal-video{background:#000;width:auto;max-width:min(92vw,420px);border-radius:1.2rem;overflow:hidden}
  .modal-video video{display:block;width:100%;max-height:calc(100dvh - 2.4rem);background:#000}
  .modal-video .modal-cerrar{background:rgba(0,0,0,.55);color:#fff}

  /* ── Instituciones: pasos, preguntas en fondo oscuro y doble llamado ── */
  /* Los pasos son una línea de tiempo: un tallo los une y crece al bajar */
  .pasos{list-style:none;padding:0;margin:0 auto;max-width:42rem;display:grid;gap:1rem;position:relative}
  .pasos::before{content:'';position:absolute;left:calc(1.2rem + 1.07rem - 1px);top:1.8rem;bottom:1.8rem;width:2px;border-radius:2px;
    background:linear-gradient(180deg,var(--inst-light),rgba(122,179,192,.25));transform-origin:top center;z-index:0}
  .paso-n{z-index:1}
  .paso{position:relative;padding:1.4rem 1.4rem 1.3rem 4.3rem;border-radius:var(--r-lg);background:rgba(255,255,255,.05);border:1px solid rgba(122,179,192,.22)}
  .paso-n{position:absolute;left:1.2rem;top:1.25rem;width:2.15rem;height:2.15rem;border-radius:50%;display:grid;place-items:center;
    font-weight:900;color:#08202a;background:linear-gradient(135deg,var(--inst-light),#b8dde6)}
  .paso h3{color:#fff;font-size:1.02rem;font-weight:800;margin-bottom:.35rem;line-height:1.3}
  .paso p{color:rgba(255,255,255,.74);font-size:.93rem;line-height:1.6}
  .faq-oscuro{display:grid;gap:.7rem}
  .faq-oscuro .faq{background:rgba(255,255,255,.05);border-color:rgba(122,179,192,.22)}
  .faq-oscuro .faq-q{color:#fff}
  .faq-oscuro .faq-a p{color:rgba(255,255,255,.76)}
  .faq-oscuro .faq[data-open="true"]{border-color:rgba(122,179,192,.5)}
  .cta-doble{display:flex;flex-wrap:wrap;gap:.8rem;justify-content:center}
  .collab .c-savia img{transform:none}   /* el logo ya viene recortado: no hace falta agrandarlo */

  /* ── Contenidos: el tallo crece por cada bloque y los temas brotan como hojas ── */
  .bloque ul{position:relative;padding-left:.2rem}
  .bloque ul::before{content:'';position:absolute;left:.52rem;top:.55rem;bottom:.55rem;width:2px;border-radius:2px;
    background:linear-gradient(180deg,var(--mint),var(--g500));transform-origin:top center}
  .bloque li{position:relative;gap:.7rem}
  .bloque li::before{width:11px;height:11px;border-radius:0 100% 0 100%;background:linear-gradient(135deg,var(--g500),var(--mint));
    transform:rotate(-45deg);position:relative;z-index:1}
  @supports (animation-timeline: view()){
    @media not (prefers-reduced-motion: reduce){
      .bloque ul{view-timeline-name:--temas}
      .bloque ul::before{animation:crecerTallo linear both;animation-timeline:--temas;animation-range:entry 10% cover 45%}
      .bloque li::before{animation:brotar linear both;animation-timeline:--temas}
      .bloque li:nth-child(1)::before{animation-range:entry 10% cover 16%}
      .bloque li:nth-child(2)::before{animation-range:entry 20% cover 22%}
      .bloque li:nth-child(3)::before{animation-range:entry 30% cover 28%}
      .bloque li:nth-child(4)::before{animation-range:entry 40% cover 34%}
      .bloque li:nth-child(5)::before{animation-range:entry 50% cover 40%}
      .bloque li:nth-child(6)::before{animation-range:entry 60% cover 46%}
      @keyframes crecerTallo{from{transform:scaleY(0)}to{transform:scaleY(1)}}
      @keyframes brotar{from{transform:rotate(-45deg) scale(0)}to{transform:rotate(-45deg) scale(1)}}
    }
  }

  /* ── Demo de prompts: la respuesta "se escribe" como en un chat de IA ── */
  .demo-out{position:relative}
  .demo-out .palabra{opacity:0;transition:opacity .22s ease-out}
  .demo-out .palabra.ya{opacity:1}
  /* Mientras "piensa", tres renglones que titilan encima de la respuesta todavía invisible */
  .demo-out.pensando::before{content:'';position:absolute;left:0;top:.15rem;width:min(78%,22rem);height:3.4rem;border-radius:.5rem;
    background:
      linear-gradient(90deg,rgba(255,255,255,.07),rgba(191,242,214,.22),rgba(255,255,255,.07)) 0 0/200% .7rem no-repeat,
      linear-gradient(90deg,rgba(255,255,255,.07),rgba(191,242,214,.22),rgba(255,255,255,.07)) 0 1.3rem/200% .7rem no-repeat,
      linear-gradient(90deg,rgba(255,255,255,.07),rgba(191,242,214,.22),rgba(255,255,255,.07)) 0 2.6rem/140% .7rem no-repeat;
    animation:pensar 1s linear infinite}
  @keyframes pensar{to{background-position:-200% 0,-200% 1.3rem,-140% 2.6rem}}

  /* ── Páginas simples: 404 y privacidad ── */
  .p404{min-height:100vh;min-height:100svh;display:grid;place-items:center;text-align:center;padding:8rem 1.2rem 4rem;color:#fff;
    background:radial-gradient(ellipse 80% 65% at 70% 0%,rgba(45,138,94,.3),transparent 62%),linear-gradient(180deg,var(--g950),var(--g900))}
  .p404-caja{max-width:34rem}
  .p404-logo{width:88px;height:auto;margin:0 auto 1.4rem;display:block}
  .p404 h1{color:#fff;margin:.8rem 0}
  .p404 p{color:rgba(255,255,255,.76);margin-bottom:2rem;line-height:1.6}
  .p404 .kicker{color:var(--mint)}
  .legal{background:var(--cream2);padding:8.5rem 1.2rem 5rem}
  .legal-caja{max-width:44rem;margin:0 auto}
  .legal h1{margin:.7rem 0 .4rem}
  .legal-fecha{color:#5a6b60;font-size:.88rem;margin-bottom:2.2rem}
  .legal h2{font-size:1.12rem;font-weight:800;color:var(--ink);margin:2rem 0 .6rem}
  .legal p,.legal li{color:#3d4d43;line-height:1.7}
  .legal ul{padding-left:1.2rem;display:grid;gap:.6rem}
  .legal a{color:var(--g700);font-weight:700}

  /* ════════ INSTITUCIONES ════════ */
  /* Superficie clara bajo las anclas oscuras, como en Docentes: las costuras curvas la dejan ver */
  .cuerpo-inst{background:linear-gradient(180deg,#eef4f5 0%,#f7fafa 45%,#ecf2f4 100%);overflow:hidden;overflow:clip}
  .sec-inst-claro{background:transparent;position:relative;z-index:1}
  .sec-inst-claro .h-section{color:#0e1f28}
  .chip-inst-claro{background:rgba(30,74,92,.08);color:var(--inst);border:1px solid rgba(30,74,92,.2)}
  .sub-inst{color:#46595f;line-height:1.65}
  .ancla-inst{position:relative;overflow:hidden;overflow:clip}   /* clip: ver .ancla */
  #elbio.ancla-inst{border-bottom-left-radius:62% 70px;border-bottom-right-radius:30% 42px;padding-bottom:8rem}
  #como-trabajamos.ancla-inst{border-top-left-radius:64% 76px;border-top-right-radius:28% 44px;padding-top:8.5rem}
  @media(max-width:700px){
    #elbio.ancla-inst{border-bottom-left-radius:70% 40px;border-bottom-right-radius:30% 26px;padding-bottom:6rem}
    #como-trabajamos.ancla-inst{border-top-left-radius:70% 44px;border-top-right-radius:30% 28px;padding-top:6.5rem}
  }
  body[data-pagina="instituciones"] .escena-luz{background:radial-gradient(ellipse 50% 50% at 50% 50%,rgba(122,179,192,.16),transparent 68%)}
  #preguntas .escena-luz{right:auto;left:-26vmax;top:auto;bottom:-18vmax}

  /* Formatos: íconos de línea propios (en lugar de emoji), que se dibujan cuando la tarjeta aparece */
  .svc-ico{display:inline-grid;place-items:center;width:54px;height:54px;border-radius:17px;
    background:linear-gradient(140deg,rgba(122,179,192,.24),rgba(30,74,92,.06));border:1px solid rgba(30,74,92,.13);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.7);transition:transform .45s var(--ease-spring)}
  .svc-ico svg{width:32px;height:32px;fill:none;stroke:var(--inst);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;overflow:visible}
  .svc-ico .ac{stroke:var(--amber)}
  .svc-ico .ac-f{fill:var(--amber);stroke:none}
  .svc:hover .svc-ico{transform:translateY(-3px) rotate(-6deg)}
  .svc-ico.oscuro{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2);box-shadow:none}
  .svc-ico.oscuro svg{stroke:#d2e9ef}
  @media not (prefers-reduced-motion: reduce){
    /* Por tipo de elemento y no por [pathLength]: con un atributo SVG en camelCase, Chrome no vuelve a
       calcular el estilo del trazo cuando la tarjeta recibe .in, y el ícono se queda sin dibujar */
    .js .svc.rv .svc-ico path:not(.ac-f){stroke-dasharray:1;stroke-dashoffset:1}
    .js .svc.rv.in .svc-ico path:not(.ac-f){animation:trazarIcono 1.2s var(--ease-out) calc(var(--d,0s) + .3s) both}
    @keyframes trazarIcono{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
    .js .svc.rv .svc-ico .ac-f{opacity:0;scale:.4;transform-box:fill-box;transform-origin:center;
      transition:opacity .4s calc(var(--d,0s) + 1.1s),scale .5s var(--ease-spring) calc(var(--d,0s) + 1.1s)}
    .js .svc.rv.in .svc-ico .ac-f{opacity:1;scale:1}
  }

  /* ════════ ÍCONOS DE LÍNEA (Docentes y el propósito de las dos páginas) ════════
     El mismo lenguaje que los formatos de Instituciones: trazo verde (azul petróleo en Instituciones)
     con un acento ámbar, y se dibujan cuando su bloque aparece. */
  .ico{display:inline-grid;place-items:center;flex-shrink:0;width:46px;height:46px;border-radius:14px;vertical-align:middle;
    background:linear-gradient(140deg,rgba(95,207,150,.24),rgba(26,92,56,.05));border:1px solid rgba(26,92,56,.13);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.75);transition:transform .45s var(--ease-spring)}
  .ico svg{width:26px;height:26px;fill:none;stroke:var(--g700);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;overflow:visible}
  .ico .ac{stroke:var(--amber)}
  .ico .ac-f{fill:var(--amber);stroke:none}
  .ico-xl{width:58px;height:58px;border-radius:18px}
  .ico-xl svg{width:32px;height:32px}
  .card:hover .ico{transform:translateY(-3px) rotate(-6deg)}
  body[data-pagina="instituciones"] .ico{background:linear-gradient(140deg,rgba(122,179,192,.26),rgba(30,74,92,.06));border-color:rgba(30,74,92,.14)}
  body[data-pagina="instituciones"] .ico svg{stroke:var(--inst)}
  @media not (prefers-reduced-motion: reduce){
    /* por tipo de elemento y no por [pathLength]: ver la nota de los íconos de los formatos */
    .js .rv .ico path:not(.ac-f){stroke-dasharray:1;stroke-dashoffset:1}
    .js .rv.in .ico path:not(.ac-f){animation:trazarIcono 1.1s var(--ease-out) calc(var(--d,0s) + .25s) both}
    .js .rv .ico .ac-f{opacity:0;scale:.4;transform-box:fill-box;transform-origin:center;
      transition:opacity .4s calc(var(--d,0s) + .95s),scale .5s var(--ease-spring) calc(var(--d,0s) + .95s)}
    .js .rv.in .ico .ac-f{opacity:1;scale:1}
  }

  /* ── Qué vas a poder hacer: grilla de capacidades ── */
  .grid-cap{display:grid;gap:1rem}
  .cap{padding:1.2rem 1.25rem;display:flex;gap:1rem;align-items:flex-start}
  .cap h3{font-size:.95rem;line-height:1.3;margin:.12rem 0 .3rem}
  .cap p{font-size:.87rem;color:#5a6b60;line-height:1.55}
  @media(max-width:639px){   /* 19 tarjetas en una columna: más compactas para no alargar tanto el scroll */
    .grid-cap{gap:.7rem}
    .cap{padding:.9rem 1rem;gap:.8rem}
    .cap .ico{width:40px;height:40px;border-radius:12px}
    .cap .ico svg{width:23px;height:23px}
    .cap h3{font-size:.93rem;margin:.05rem 0 .2rem}
    .cap p{font-size:.85rem;line-height:1.5}
  }
  @media(min-width:640px){
    .grid-cap{grid-template-columns:1fr 1fr}
    .grid-cap>.cap:last-child:nth-child(odd){grid-column:1/-1;justify-content:center}
  }
  @media(min-width:1000px){
    .grid-cap{grid-template-columns:repeat(3,1fr);gap:1.1rem}
    .grid-cap>.cap:last-child:nth-child(odd){grid-column:auto;justify-content:flex-start}
    /* la última, si queda sola en su fila, la ocupa entera: la grilla cierra pareja */
    .grid-cap>.cap:last-child:nth-child(3n+1){grid-column:1/-1;justify-content:center}
    .grid-cap>.cap:last-child:nth-child(3n+2){grid-column:span 2}
  }

  /* ════════ PROPÓSITO: por qué nace Savia (las dos páginas) ════════ */
  .proposito{position:relative;z-index:1;padding:5.5rem 0 6rem}
  .nexo{display:grid;grid-template-columns:58px 1fr 58px;align-items:start;column-gap:.7rem;max-width:32rem;padding:0 1.6rem;margin:1.8rem auto 4.2rem}
  .nexo-polo{position:relative;display:grid}
  /* las etiquetas cuelgan debajo de cada ícono, fuera de la grilla: así la línea llega hasta los íconos */
  .nexo-et{position:absolute;left:50%;top:calc(100% + .6rem);translate:-50% 0;width:8.6rem;font-size:.7rem;font-weight:800;
    letter-spacing:.12em;text-transform:uppercase;color:var(--g700);line-height:1.35;text-align:center}
  /* la línea une los centros de los íconos (29px), no los de las etiquetas: el % de un margen
     se mide sobre el ancho, y la mitad del alto de la línea es 34/300 de su ancho */
  .nexo-linea{display:block;width:100%;height:auto;overflow:visible;margin-top:calc(29px - 11.3333%)}
  .nexo-camino{fill:none;stroke:url(#nexoDegrade);stroke-width:2.4;stroke-linecap:round}
  .nx-a{stop-color:var(--g500)}
  .nx-b{stop-color:var(--amber)}
  .nx-hoja-a{fill:var(--g500)}
  .nx-hoja-b{fill:var(--mint)}
  .nexo-pulso .nx-halo{fill:rgba(227,169,60,.25)}
  .nexo-pulso .nx-nucleo{fill:var(--amber)}
  .nexo-pulso-b .nx-halo{fill:rgba(45,138,94,.22)}
  .nexo-pulso-b .nx-nucleo{fill:var(--g500)}
  .proposito-frase{font-size:clamp(1.3rem,2.6vw,1.92rem);font-weight:800;line-height:1.34;letter-spacing:-.015em;color:var(--ink);
    text-align:center;max-width:46rem;margin:0 auto 1.25rem;text-wrap:balance}
  .proposito-resalte{background:linear-gradient(92deg,var(--g700),var(--g500) 55%,var(--amber));-webkit-background-clip:text;background-clip:text;
    -webkit-text-fill-color:transparent;color:transparent}
  .proposito-texto{font-size:clamp(1rem,1.45vw,1.1rem);color:#4a5b51;line-height:1.72;text-align:center;max-width:41rem;margin:0 auto;text-wrap:pretty}
  body[data-pagina="instituciones"] .nexo-et{color:var(--inst)}
  body[data-pagina="instituciones"] .nx-a{stop-color:var(--inst)}
  body[data-pagina="instituciones"] .nx-hoja-a{fill:var(--inst)}
  body[data-pagina="instituciones"] .nx-hoja-b{fill:var(--inst-light)}
  body[data-pagina="instituciones"] .nexo-pulso-b .nx-halo{fill:rgba(30,74,92,.2)}
  body[data-pagina="instituciones"] .nexo-pulso-b .nx-nucleo{fill:var(--inst)}
  body[data-pagina="instituciones"] .proposito-resalte{background-image:linear-gradient(92deg,var(--inst),#3e7f92 55%,var(--amber))}
  body[data-pagina="instituciones"] .proposito-texto{color:#46595f}
  @media(max-width:560px){
    .proposito{padding:4.5rem 0 5rem}
    .nexo{padding:0 1.2rem;column-gap:.4rem;margin-bottom:3.6rem}
    .nexo-et{width:6.4rem;font-size:.6rem;letter-spacing:.08em}
  }
  @media not (prefers-reduced-motion: reduce){
    .js .nexo.rv .nexo-camino{stroke-dasharray:1;stroke-dashoffset:1}
    .js .nexo.rv.in .nexo-camino{animation:trazarIcono 1.4s var(--ease-out) .45s both}
    .js .nexo.rv .nexo-brote{scale:0;transform-box:fill-box;transform-origin:50% 100%;transition:scale .9s var(--ease-spring) 1.6s}
    .js .nexo.rv.in .nexo-brote{scale:1}
    .js .nexo.rv .nexo-pulso{opacity:0;transition:opacity .7s 1.9s}
    .js .nexo.rv.in .nexo-pulso{opacity:1}
  }
  @media (prefers-reduced-motion: reduce){.nexo-pulso{display:none}}
  .liviano .nexo-pulso{display:none}

  /* El propósito quedó entre la marquesina y "El curso" (y en Instituciones antes del Elbio):
     esas anclas oscuras ahora también entran en curva */
  #estado.ancla{border-top-left-radius:30% 46px;border-top-right-radius:66% 84px;padding-top:8.5rem;border-top:2px solid rgba(95,207,150,.32)}
  #elbio.ancla-inst{border-top-left-radius:30% 46px;border-top-right-radius:66% 84px;padding-top:8.5rem}
  @media(max-width:700px){
    #estado.ancla{border-top-left-radius:34% 28px;border-top-right-radius:60% 46px;padding-top:7rem}
    #elbio.ancla-inst{border-top-left-radius:34% 28px;border-top-right-radius:60% 46px;padding-top:7rem}
  }

  /* El ciclo del Elbio, taller por taller: el tallo une los tres y el tercero está brotando */
  .ciclo{list-style:none;padding:0;margin:2.2rem auto 0;max-width:58rem;display:grid;gap:1.1rem;position:relative}
  .ciclo::before{content:'';position:absolute;left:calc(1.15rem + 9px);top:2rem;bottom:2rem;width:2px;border-radius:2px;
    background:linear-gradient(180deg,var(--inst-light),var(--amber));transform-origin:top center;z-index:0}
  .taller{position:relative;padding:1.15rem 1.2rem 1.2rem 3.5rem;border-radius:var(--r-lg);background:rgba(255,255,255,.05);border:1px solid rgba(122,179,192,.22)}
  .taller-nodo{position:absolute;left:1.15rem;top:1.2rem;width:20px;height:20px;border-radius:50%;z-index:1;
    background:linear-gradient(135deg,var(--inst-light),#b8dde6);box-shadow:0 0 0 5px rgba(122,179,192,.16)}
  .taller.hecho .taller-nodo::after{content:'✓';display:grid;place-items:center;height:100%;font-size:11px;font-weight:900;color:#08202a}
  .taller.brote .taller-nodo{background:radial-gradient(circle at 50% 60%,#f0c36d,#b77d1c);box-shadow:0 0 0 6px rgba(227,169,60,.2)}
  @media not (prefers-reduced-motion: reduce){
    .taller.brote .taller-nodo{animation:broteLatido 2.6s ease-in-out infinite}
    @keyframes broteLatido{50%{box-shadow:0 0 0 12px rgba(227,169,60,.05)}}
  }
  .taller-et{font-size:.75rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--inst-light);margin-bottom:.7rem}
  .taller.brote .taller-et{color:var(--amber)}
  .taller-txt{color:rgba(255,255,255,.74);font-size:.95rem}
  .ciclo .t-temas{max-width:none;margin:0;gap:.45rem}
  .ciclo .t-temas li{display:flex;align-items:center;gap:.6rem;font-size:.95rem;font-weight:700;color:#fff;padding:0;background:none;border:0}
  .ciclo .t-temas li::before{content:'';flex-shrink:0;width:9px;height:9px;border-radius:0 100% 0 100%;transform:rotate(-45deg);
    background:linear-gradient(135deg,var(--inst-light),#b8dde6)}
  @media(min-width:760px){
    .ciclo{grid-template-columns:repeat(3,1fr)}
    .ciclo::before{left:16.66%;right:16.66%;top:calc(1.2rem + 9px);bottom:auto;width:auto;height:2px;transform-origin:left center;
      background:linear-gradient(90deg,var(--inst-light),var(--amber))}
    .taller{padding:3.1rem 1.3rem 1.4rem;text-align:center}
    .taller-nodo{left:50%;translate:-50% 0}
    .ciclo .t-temas li{justify-content:center}
  }
  @supports (animation-timeline: view()){
    @media not (prefers-reduced-motion: reduce){
      .ciclo,.pasos{view-timeline-name:--linea}
      .ciclo::before,.pasos::before{animation:crecerLinea linear both;animation-timeline:--linea;animation-range:entry 25% cover 50%}
      @keyframes crecerLinea{from{transform:scaleY(0)}to{transform:scaleY(1)}}
      @media(min-width:760px){
        .ciclo::before{animation-name:crecerAncho;animation-range:entry 10% cover 38%}   /* completa con el ciclo a media pantalla */
        @keyframes crecerAncho{from{transform:scaleX(0)}to{transform:scaleX(1)}}
      }
    }
  }

  /* Elegidor de formato: el mismo lenguaje del autodiagnóstico, en los colores institucionales */
  .elegir{padding:clamp(1.4rem,4vw,2.2rem)}
  .elegir .quiz-count{color:var(--inst)}
  .elegir .quiz-bar{background:rgba(30,74,92,.1)}
  .elegir .quiz-bar i{background:linear-gradient(90deg,var(--inst),var(--inst-light))}
  .elegir .quiz-op:hover{border-color:var(--inst);background:rgba(30,74,92,.05)}
  .elegir .quiz-op.elegida{border-color:var(--inst);background:rgba(30,74,92,.08);box-shadow:inset 3px 0 0 var(--inst)}
  .elegir .quiz-back:hover{color:var(--inst)}
  .elegir-res .kicker,.elegir-res .quiz-nombre{color:var(--inst)}
  .elegir-sub{font-weight:700;color:#35606e;margin:-.4rem 0 .9rem}
  .elegir-res .tags{justify-content:center;margin-bottom:1.1rem}
  .elegir-res .tag{background:rgba(30,74,92,.08);color:var(--inst)}
  .elegir-porque{font-size:.9rem;color:#46595f;max-width:32rem;margin:0 auto;line-height:1.6}

  /* Tallo lateral en los colores institucionales */
  body[data-pagina="instituciones"] .rail-tallo{background:rgba(122,179,192,.22)}
  body[data-pagina="instituciones"] .rail-savia{background:linear-gradient(180deg,#b8dde6,var(--inst-light) 55%,#3e7f92)}
  body[data-pagina="instituciones"] .rail-dot{background:rgba(122,179,192,.4)}
  body[data-pagina="instituciones"] .rail-dot.active{background:linear-gradient(135deg,var(--inst-light),#b8dde6);box-shadow:0 0 0 4px rgba(122,179,192,.2)}
  body[data-pagina="instituciones"] .rail-item::before{background:rgba(122,179,192,.4)}
  body[data-pagina="instituciones"] .rail-brote{background:linear-gradient(180deg,#b8dde6,var(--inst-light))}

  /* ── Pie ── */
  .pie-fila{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1.6rem}
  .pie-marca{display:flex;align-items:center;gap:.9rem;text-decoration:none}
  .pie-marca img{height:74px;width:auto}
  .pie-nombre{display:block;color:#fff;font-weight:800;font-size:1.35rem;letter-spacing:-.02em}
  .pie-nombre b{color:var(--mint)}
  .pie-desc{display:block;font-size:.82rem;color:var(--sage)}
  .pie-redes{display:flex;gap:.7rem}
  .pie-redes .icon-pill{background:transparent;border-color:rgba(168,201,176,.3);color:var(--sage)}
  .pie-legal{border-top:1px solid rgba(255,255,255,.08);margin-top:2rem;padding-top:1.4rem;display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem}
  .pie-legal p{font-size:.8rem;color:rgba(168,201,176,.82)}
  .pie-legal a{color:inherit;text-decoration-color:rgba(168,201,176,.4)}

  /* ── Accesibilidad: tamaños mínimos, contraste y foco visible con la marca ── */
  .chip{font-size:.75rem}
  .chip-prog{font-size:.72rem}
  .demo-meter span{font-size:.72rem}
  .dk-num span{font-size:.78rem}
  :focus-visible{outline:3px solid var(--g500);outline-offset:3px}
  .btn:focus-visible{outline-offset:4px}
  .hero :focus-visible,.sec-dark :focus-visible,.sec-darker :focus-visible,footer :focus-visible,
  #nav:not(.scrolled) :focus-visible,body[data-pagina="instituciones"] main :focus-visible,.modal-video :focus-visible{outline-color:var(--mint)}
  .campo input:focus-visible,.campo select:focus-visible,.campo textarea:focus-visible{outline:none}
  main:focus{outline:none}

  /* ── Rendimiento: ningún botón reserva una capa de GPU por las dudas ── */
  .btn{will-change:auto}

  /* ════════ ELBIO: ciclo completado (resultados, voces y fotos) ════════
     Todo sobre el ancla oscura del caso. Los números van en tinta blanca; el color lo llevan las
     barras y los acentos (el "después" en ámbar, el "antes" en gris azulado, que es contexto). */
  .chip-hecho{background:rgba(122,179,192,.16);color:#b8dde6;border:1px solid rgba(122,179,192,.38)}
  .ciclo-completo::before{background:linear-gradient(90deg,var(--inst-light),#b8dde6 60%,var(--inst-light))}
  @media(max-width:759px){.ciclo-completo::before{background:linear-gradient(180deg,var(--inst-light),#b8dde6 60%,var(--inst-light))}}

  .elbio-res{max-width:64rem;margin:4.5rem auto 0}
  .elbio-h3{color:#fff;font-size:clamp(1.3rem,2.5vw,1.7rem);font-weight:900;letter-spacing:-.02em;line-height:1.25;text-wrap:balance}
  .elbio-bajada{color:rgba(255,255,255,.66);font-size:.95rem;margin:.5rem auto 2rem;max-width:36rem}

  /* El dato principal: autonomía antes y después, con dos medidores sobre la misma pista */
  .autonomia{display:grid;gap:1.3rem;align-items:center;padding:1.7rem 1.5rem;border-radius:var(--r-lg);
    background:linear-gradient(140deg,rgba(122,179,192,.1),rgba(255,255,255,.03));border:1px solid rgba(122,179,192,.24)}
  @media(min-width:820px){.autonomia{grid-template-columns:auto 1fr;gap:2.8rem;padding:2.2rem 2.6rem}}
  .aut-num{display:flex;flex-direction:column;align-items:center;line-height:1}
  .aut-num b{font-size:clamp(3.6rem,7.5vw,5rem);font-weight:900;letter-spacing:-.045em;color:#fff}
  .aut-num span{font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--inst-light);margin-top:.45rem}
  .aut-t{color:#fff;font-weight:800;font-size:1.05rem;line-height:1.4;margin-bottom:1.1rem;text-wrap:balance}
  .medidor{display:grid;grid-template-columns:7.2rem 1fr 3.3rem;align-items:center;gap:.85rem;margin-bottom:.75rem}
  .medidor-et{font-size:.84rem;color:rgba(255,255,255,.74)}
  .medidor-pista{height:12px;border-radius:6px;background:rgba(122,179,192,.14);overflow:hidden}
  .medidor-pista i{display:block;height:100%;width:var(--v);border-radius:6px;background:#5f8f9b}
  .medidor.ahora .medidor-pista i{background:linear-gradient(90deg,#c48a24,var(--amber))}
  .medidor.ahora .medidor-et{color:#fff;font-weight:700}
  .medidor-v{font-weight:800;color:#fff;font-size:.98rem;text-align:right}
  .aut-nota{font-size:.87rem;color:rgba(255,255,255,.68);line-height:1.55;margin-top:1rem}
  @media(max-width:480px){.medidor{grid-template-columns:5.6rem 1fr 3rem;gap:.6rem}.medidor-et{font-size:.78rem}}
  @media not (prefers-reduced-motion: reduce){
    .js .rv .medidor-pista i{width:0;transition:width 1.3s var(--ease-out) .35s}
    .js .rv .medidor.ahora .medidor-pista i{transition-delay:.75s}
    .js .rv.in .medidor-pista i{width:var(--v)}
  }

  /* Los otros cuatro datos */
  .kpis{display:grid;gap:1rem;margin-top:1.1rem}
  @media(min-width:640px){.kpis{grid-template-columns:1fr 1fr}}
  @media(min-width:1000px){.kpis{grid-template-columns:repeat(4,1fr)}}
  .kpi{padding:1.4rem 1.3rem 1.5rem;border-radius:var(--r-md);background:rgba(255,255,255,.04);border:1px solid rgba(122,179,192,.18)}
  .kpi::before{content:'';display:block;width:28px;height:3px;border-radius:2px;background:var(--inst-light);margin-bottom:1rem}
  .kpi b{display:block;font-size:2.4rem;font-weight:900;letter-spacing:-.035em;color:#fff;line-height:1}
  .kpi span{display:block;margin-top:.6rem;font-size:.88rem;line-height:1.5;color:rgba(255,255,255,.74)}
  .elbio-fuente{text-align:center;font-size:.8rem;color:rgba(255,255,255,.56);margin-top:1.3rem;line-height:1.5}

  /* Voces del equipo docente: anónimas, sin asignatura */
  .elbio-voces{display:grid;gap:1rem;max-width:64rem;margin:3.8rem auto 0}
  @media(min-width:900px){.elbio-voces{grid-template-columns:repeat(3,1fr)}}
  .voz{margin:0;padding:1.6rem 1.5rem 1.2rem;border-radius:var(--r-lg);display:flex;flex-direction:column;position:relative;
    background:rgba(255,255,255,.045);border:1px solid rgba(122,179,192,.22)}
  .voz::before{content:'';position:absolute;top:1.35rem;right:1.35rem;width:32px;height:24px;background:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 24'%3E%3Cpath fill='%23e3a93c' fill-opacity='.5' d='M0 24V14C0 6 4 1.5 12 0l1.5 3.2C9 4.6 7 7.5 6.8 11H12v13ZM18 24V14c0-8 4-12.5 12-14l1.5 3.2C27 4.6 25 7.5 24.8 11H30v13Z'/%3E%3C/svg%3E")}
  .voz-et{font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--inst-light);margin-bottom:.8rem}
  .voz blockquote{flex:1;color:rgba(255,255,255,.88);font-size:1rem;line-height:1.65;margin-bottom:1.1rem}
  .voz figcaption{border-top:1px solid rgba(122,179,192,.18);padding-top:.8rem;font-size:.8rem;font-weight:700;color:rgba(255,255,255,.6)}

  /* Fotos: grilla pareja (las del ciclo son todas verticales; no se recortan) y se amplían al tocarlas.
     El pie de cada foto se lee al ampliarla. */
  .elbio-galeria{max-width:64rem;margin:4rem auto 0}
  .elbio-galeria .elbio-h3{text-align:center;margin-bottom:1.6rem}
  .ef-grupo+.ef-grupo{margin-top:2.2rem}
  .ef-grupo-t{font-size:.74rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--inst-light);margin-bottom:.9rem}
  /* Celdas de proporción fija: verticales 3:4 y horizontales 3:2 a dos columnas, así las filas cierran parejas aunque
     se mezclen fotos de distintos teléfonos. La miniatura se recorta apenas por los bordes; la foto ampliada va completa. */
  .elbio-fotos{display:grid;grid-template-columns:repeat(2,1fr);grid-auto-flow:row dense;gap:.7rem}
  @media(min-width:700px){
    .elbio-fotos{grid-template-columns:repeat(3,1fr);gap:1rem}
  }
  .ef{position:relative;margin:0;aspect-ratio:3/4;border-radius:var(--r-md);overflow:hidden;background:rgba(255,255,255,.04);border:1px solid rgba(122,179,192,.18)}
  .ef.ancha{grid-column:span 2;aspect-ratio:3/2}
  @media(min-width:700px){
    /* en tres columnas la horizontal toma el alto de la vertical de su fila (así cierran exactas);
       el mínimo cubre el caso de una horizontal sin compañera */
    .ef.ancha{aspect-ratio:auto;min-height:18rem}
  }
  .ef-abrir{position:absolute;inset:0;display:block;width:100%;height:100%;padding:0;border:0;background:none;cursor:zoom-in;overflow:hidden}
  .ef-abrir img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .7s var(--ease-out)}
  .ef-abrir:hover img{transform:scale(1.035)}
  .ef figcaption{padding:.65rem .9rem .75rem;font-size:.83rem;line-height:1.45;color:rgba(255,255,255,.72)}
  .ef-hueco{display:grid;place-items:center;height:100%;border:1.5px dashed rgba(122,179,192,.5);
    background:repeating-linear-gradient(135deg,rgba(122,179,192,.05) 0 14px,transparent 14px 28px);
    color:rgba(255,255,255,.62);font-size:.85rem;font-weight:700;text-align:center;padding:1rem}
  .modal-foto{background:#05090c;width:fit-content;max-width:min(94vw,1200px);border-radius:1.2rem;overflow:hidden}
  .modal-foto img{display:block;max-width:100%;max-height:calc(100dvh - 6rem);width:auto;height:auto;margin:0 auto}
  .modal-foto figcaption{padding:.8rem 1.1rem 1rem;font-size:.9rem;color:rgba(255,255,255,.8);text-align:center}
  .modal-foto figcaption:empty{display:none}
  .modal-foto .modal-cerrar{background:rgba(0,0,0,.55);color:#fff}
  .modal-foto :focus-visible{outline-color:var(--inst-light)}

  /* Cierre del caso */
  .elbio-cta{text-align:center;margin-top:3.6rem}
  .elbio-cta p{color:#fff;font-weight:800;font-size:1.15rem;margin-bottom:1.1rem}

}
