/* ============================================================
   MOTION KIT v2 · Cazador de Webs
   Patrones de animación nivel agencia premium. Vanilla, sin
   dependencias. Colores del cliente como variables:
   :root { --mk-primario:#...; --mk-secundario:#...; --mk-fondo:#...; --mk-texto:#...; }
   ============================================================ */

/* --- INTRO: cortina con el logo del cliente ------------------ */
/* HTML: <div class="mk-intro"><img src="logo" alt=""></div> (primer hijo del body) */
.mk-intro { position: fixed; inset: 0; z-index: 9999; display: grid; place-items: center; background: var(--mk-fondo); animation: mkCurtain 1s cubic-bezier(.76,0,.24,1) 1.6s forwards; }
.mk-intro img { max-width: min(42vw, 260px); max-height: 30vh; opacity: 0; animation: mkLogoIn 1.1s cubic-bezier(.22,1,.36,1) .15s forwards; }
@keyframes mkLogoIn { from { opacity: 0; transform: scale(.86); filter: blur(8px); } to { opacity: 1; transform: scale(1); filter: none; } }
@keyframes mkCurtain { to { transform: translateY(-100%); } }

/* --- BARRA DE PROGRESO de scroll (motion.js la crea) --------- */
.mk-progress { position: fixed; top: 0; left: 0; height: 3px; width: 100%; z-index: 9998; background: var(--mk-primario); transform-origin: 0 50%; transform: scaleX(0); }

/* --- HERO: entrada escalonada -------------------------------- */
.mk-hero > * { opacity: 0; animation: mkRise .9s cubic-bezier(.22,1,.36,1) forwards; }
.mk-hero > *:nth-child(1) { animation-delay: 2.1s; }
.mk-hero > *:nth-child(2) { animation-delay: 2.25s; }
.mk-hero > *:nth-child(3) { animation-delay: 2.4s; }
.mk-hero > *:nth-child(4) { animation-delay: 2.55s; }
@keyframes mkRise { from { opacity: 0; transform: translateY(28px); } to { opacity: 1; transform: none; } }
/* Si no hay .mk-intro en la página, usa .mk-hero--solo (sin espera) */
.mk-hero--solo > *:nth-child(1) { animation-delay: .1s; } .mk-hero--solo > *:nth-child(2) { animation-delay: .25s; }
.mk-hero--solo > *:nth-child(3) { animation-delay: .4s; } .mk-hero--solo > *:nth-child(4) { animation-delay: .55s; }

/* --- SPLIT-TEXT: titular palabra a palabra (motion.js trocea) - */
/* HTML: <h1 class="mk-split">Tu titular aquí</h1> */
.mk-split .mk-w { display: inline-block; overflow: hidden; vertical-align: top; }
.mk-split .mk-w > span { display: inline-block; transform: translateY(110%); animation: mkWord .8s cubic-bezier(.22,1,.36,1) forwards; animation-delay: calc(var(--mk-i) * .07s + var(--mk-split-base, 2.1s)); }
@keyframes mkWord { to { transform: none; } }

/* --- GLOW de fondo con el color primario --------------------- */
.mk-glow { position: relative; overflow: hidden; }
.mk-glow::before { content: ""; position: absolute; inset: -20%; z-index: 0; pointer-events: none;
  background: radial-gradient(ellipse 60% 45% at 50% 0%, color-mix(in srgb, var(--mk-primario) 26%, transparent), transparent 70%);
  animation: mkGlow 9s ease-in-out infinite alternate; }
.mk-glow > * { position: relative; z-index: 1; }
@keyframes mkGlow { from { transform: translateX(-4%) scale(1); opacity: .8; } to { transform: translateX(4%) scale(1.08); opacity: 1; } }

/* --- KEN BURNS: fotos reales del cliente con zoom lento ------ */
/* HTML: <figure class="mk-kenburns"><img src="foto-real.jpg"></figure> */
.mk-kenburns { overflow: hidden; }
.mk-kenburns img { width: 100%; height: 100%; object-fit: cover; animation: mkKen 14s ease-in-out infinite alternate; }
@keyframes mkKen { from { transform: scale(1) translate(0,0); } to { transform: scale(1.12) translate(-1.5%, 1.5%); } }

/* --- REVELADO DE IMAGEN con cortinilla (clip-path) ----------- */
.mk-unveil { clip-path: inset(0 100% 0 0); transition: clip-path 1.1s cubic-bezier(.76,0,.24,1); }
.mk-unveil.mk-in { clip-path: inset(0 0 0 0); }

/* --- REVEAL al scroll ---------------------------------------- */
.mk-reveal { opacity: 0; transform: translateY(34px); transition: opacity .8s cubic-bezier(.22,1,.36,1), transform .8s cubic-bezier(.22,1,.36,1); }
.mk-reveal.mk-in { opacity: 1; transform: none; }
.mk-reveal:nth-child(2) { transition-delay: .1s; } .mk-reveal:nth-child(3) { transition-delay: .2s; } .mk-reveal:nth-child(4) { transition-delay: .3s; }

/* --- PARALLAX a sangre completa (motion.js mueve el fondo) --- */
/* HTML: <section class="mk-parallax" style="background-image:url(foto-real.jpg)">…</section> */
.mk-parallax { background-size: cover; background-position: center 0px; background-attachment: fixed; }
@supports (-webkit-touch-callout: none) { .mk-parallax { background-attachment: scroll; } }

/* --- CARDS con tilt 3D (motion.js) --------------------------- */
.mk-card { transition: transform .45s cubic-bezier(.22,1,.36,1), box-shadow .45s; will-change: transform; transform-style: preserve-3d; }
.mk-card:hover { box-shadow: 0 24px 60px color-mix(in srgb, var(--mk-primario) 22%, rgba(0,0,0,.25)); }

/* --- MARQUEE (reseñas / platos / marcas) --------------------- */
.mk-marquee { overflow: hidden; white-space: nowrap; mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.mk-marquee-track { display: inline-flex; gap: 3rem; padding-right: 3rem; animation: mkMarquee 26s linear infinite; }
.mk-marquee:hover .mk-marquee-track { animation-play-state: paused; }
@keyframes mkMarquee { to { transform: translateX(-50%); } }

/* --- CTA con pulso ------------------------------------------- */
.mk-pulse { position: relative; }
.mk-pulse::after { content: ""; position: absolute; inset: -4px; border-radius: inherit; border: 2px solid var(--mk-primario); animation: mkPulse 2.2s ease-out infinite; pointer-events: none; }
@keyframes mkPulse { 0% { opacity: .9; transform: scale(1); } 100% { opacity: 0; transform: scale(1.12); } }

/* ============================================================
   SCROLLYTELLING 3D — patrones conducidos por --mk-p (0→1),
   que escribe motion.js en cada [data-mk-scrolly].
   Uso típico del hero:
   <section class="mk-pin" data-mk-scrolly>
     <div class="mk-pin-stage mk-scene3d">
       <div class="mk-layer" style="--mk-depth:-220px"><img class="mk-zoomout" src="ambiente.jpg"></div>
       <div class="mk-layer" style="--mk-depth:-80px"><img src="plato.jpg"></div>
       <div class="mk-layer mk-seq" style="--mk-depth:40px"> logo + titular + claims </div>
     </div>
   </section>
   ============================================================ */

/* --- PIN: la escena se clava y el scroll "avanza la película" - */
.mk-pin { position: relative; height: 250vh; }
.mk-pin-stage { position: sticky; top: 0; height: 100vh; overflow: hidden; display: grid; place-items: center; }

/* --- Escenario 3D y capas con profundidad -------------------- */
.mk-scene3d { perspective: 1200px; transform-style: preserve-3d; }
.mk-layer {
  position: absolute; inset: 0; display: grid; place-items: center;
  will-change: transform;
  /* cada capa se acerca desde su profundidad hasta el plano según avanza el scroll */
  transform: translateZ(calc(var(--mk-depth, 0px) * (1 - var(--mk-p, 0))))
             translateY(calc(var(--mk-depth, 0px) * (1 - var(--mk-p, 0)) * -0.25));
}

/* --- ZOOM-OUT del fondo: entra cerca, asienta lejos ----------- */
.mk-zoomout {
  width: 100%; height: 100%; object-fit: cover;
  transform: scale(calc(1.25 - 0.25 * var(--mk-p, 0)));
  filter: brightness(calc(0.55 + 0.25 * var(--mk-p, 0)));
}

/* --- TILT por scroll: el producto rota en 3D ------------------ */
.mk-tilt-scroll {
  will-change: transform;
  transform: rotateX(calc((1 - var(--mk-p, 0)) * 24deg))
             rotateY(calc((var(--mk-p, 0) - 0.5) * 14deg))
             scale(calc(0.9 + 0.1 * var(--mk-p, 0)));
}

/* --- SECUENCIA: los hijos aparecen por umbrales de scroll ----- */
.mk-seq > * { opacity: calc((var(--mk-p, 0) - var(--mk-at, 0.2)) / 0.15); transform: translateY(calc(max(0, 1 - (var(--mk-p, 0) - var(--mk-at, 0.2)) / 0.15) * 26px)); }
.mk-seq > *:nth-child(1) { --mk-at: 0.15; }
.mk-seq > *:nth-child(2) { --mk-at: 0.35; }
.mk-seq > *:nth-child(3) { --mk-at: 0.55; }
.mk-seq > *:nth-child(4) { --mk-at: 0.75; }

/* --- STATEMENT: frase gigante que vive en el centro del scroll -
   Sección normal con data-mk-scrolly; el texto aparece al llegar
   al centro del viewport y se desvanece al pasarlo (pico en p=0.5). */
.mk-statement {
  opacity: calc(1 - max(calc(var(--mk-p, 0) - 0.5), calc(0.5 - var(--mk-p, 0))) * 2.6);
  transform: scale(calc(0.92 + 0.08 * (1 - max(calc(var(--mk-p, 0) - 0.5), calc(0.5 - var(--mk-p, 0))) * 2)));
  will-change: transform, opacity;
}

/* --- GALERÍA HORIZONTAL conducida por scroll vertical ---------
   <section class="mk-pin" data-mk-scrolly>
     <div class="mk-pin-stage mk-hscroll">
       <div class="mk-hscroll-track" style="--mk-shift:-60%"> fotos… </div>
     </div>
   </section>  (ajusta --mk-shift al ancho del track) */
.mk-hscroll { display: flex; align-items: center; }
.mk-hscroll-track {
  display: flex; gap: 3vw; padding: 0 8vw; will-change: transform;
  transform: translateX(calc(var(--mk-p, 0) * var(--mk-shift, -60%)));
}
.mk-hscroll-track > * { flex-shrink: 0; }

/* --- WIPE: la siguiente imagen se abre en círculo con el scroll */
.mk-wipe {
  clip-path: circle(calc(var(--mk-p, 0) * 120%) at 50% 50%);
  will-change: clip-path;
}

/* --- COLORMORPH: el fondo de la sección muta con el progreso -- */
.mk-colormorph {
  background: color-mix(in srgb,
    var(--mk-fondo) calc(100% - var(--mk-p, 0) * 22%),
    var(--mk-primario) calc(var(--mk-p, 0) * 22%));
}

/* ============================================================
   LA PELÍCULA (v4) — experiencia de UN SOLO LIENZO.
   Sin secciones: un contenedor .mk-film da la duración del scroll
   y un lienzo sticky .mk-film-stage lo muestra todo. Cada bloque
   de información es un "shot" con su ventana temporal --in/--out
   dentro del timeline global --mk-p (0→1).

   <div class="mk-film" data-mk-scrolly style="--mk-shots:10">
     <div class="mk-film-stage">
       <div class="mk-filmshot mk-fx-zoom" style="--in:0; --out:.14">  …fondo/logo… </div>
       <div class="mk-filmshot mk-fx-rise" style="--in:.10; --out:.26"> …titular…  </div>
       …
     </div>
   </div>
   <footer> …cierre estático (CTA/contacto), fuera de la película… </footer>

   Solapa las ventanas (~4%) para que el lienzo nunca quede vacío.

   NOTA: esta clase se llama .mk-filmshot (no .mk-shot) a propósito —
   .mk-shot ya existe en site.css como envoltorio simple de capturas
   ("captura simple", con sombra y esquinas redondeadas). Si coincidieran
   de nombre, esta regla (opacity: var(--alive), que vale 0 fuera de un
   [data-mk-scrolly]) dejaría invisible CUALQUIER captura de producto
   que use .mk-shot en el resto del sitio.
   ============================================================ */
.mk-film { position: relative; height: calc(var(--mk-shots, 8) * 120vh); }
.mk-film-stage { position: sticky; top: 0; height: 100vh; overflow: hidden; }

.mk-filmshot {
  /* progreso local del shot dentro de su ventana */
  --lp: clamp(0, calc((var(--mk-p, 0) - var(--in, 0)) / max(0.001, calc(var(--out, 1) - var(--in, 0)))), 1);
  /* rampas de entrada (primer 15% de la ventana) y salida (último 15%) */
  --ramp-in: clamp(0, calc(var(--lp) / 0.15), 1);
  --ramp-out: clamp(0, calc((1 - var(--lp)) / 0.15), 1);
  --alive: min(var(--ramp-in), var(--ramp-out));
  position: absolute; inset: 0; display: grid; place-items: center;
  opacity: var(--alive);
  pointer-events: none;
  will-change: transform, opacity;
}
/* el shot sólo es interactivo mientras está en escena */
.mk-filmshot[data-live], .mk-filmshot:hover { pointer-events: auto; }

/* --- Efectos de shot (combinables) --------------------------- */
/* Sube al entrar y se eleva al despedirse */
.mk-fx-rise { transform: translateY(calc((1 - var(--ramp-in)) * 60px - (1 - var(--ramp-out)) * 60px)); }
/* Se acerca desde el fondo y sigue creciendo al salir (atraviesa la cámara) */
.mk-fx-zoom { transform: scale(calc(0.82 + var(--lp) * 0.28)); }
/* Entra desde un lateral y sale por el contrario */
.mk-fx-drift-l { transform: translateX(calc((1 - var(--ramp-in)) * -12vw + (1 - var(--ramp-out)) * 12vw)); }
.mk-fx-drift-r { transform: translateX(calc((1 - var(--ramp-in)) * 12vw + (1 - var(--ramp-out)) * -12vw)); }
/* Rota en 3D mientras vive */
.mk-fx-tilt { transform: perspective(1100px) rotateX(calc((1 - var(--lp)) * 18deg)) rotateY(calc((var(--lp) - 0.5) * 10deg)); }
/* Foto de fondo viva: zoom continuo durante toda su ventana */
.mk-fx-kenburns-live img, img.mk-fx-kenburns-live { width: 100%; height: 100%; object-fit: cover; transform: scale(calc(1.06 + var(--lp) * 0.14)); }
/* Capas internas con profundidad (dentro de un shot) */
.mk-fx-parallax > * { transform: translateY(calc((1 - var(--lp)) * var(--mk-depth, 0px))); will-change: transform; }

/* ============================================================
   EL TÚNEL 3D (v5) — la cámara VUELA A TRAVÉS de los contenidos.
   Cada shot vive a una profundidad del túnel (--zi = su índice) y
   el scroll avanza la cámara: los shots emergen del fondo, llegan
   a foco, y PASAN POR ENCIMA de la cámara (nos metemos dentro).

   <div class="mk-film" data-mk-scrolly data-mk-shots="16" style="--mk-nshots:16">
     <div class="mk-film-stage mk-tunnel">
       <div class="mk-zshot" style="--zi:0">  …logo…            </div>
       <div class="mk-zshot" style="--zi:1">  …titular + foto…  </div>
       …
       <div class="mk-zshot" style="--zi:15"> …CTA…             </div>
     </div>
   </div>
   (--mk-nshots = número de shots; el mismo valor que data-mk-shots)
   ============================================================ */
.mk-tunnel { perspective: 1100px; perspective-origin: 50% 46%; }
.mk-zshot {
  /* f = distancia de la cámara a este shot, en "unidades de shot".
     f<0: aún lejos, al fondo · f=0: en foco · f>0: lo estamos atravesando */
  --f: calc(var(--mk-p, 0) * (var(--mk-nshots, 10) - 1) - var(--zi, 0));
  position: absolute; inset: 0; display: grid; place-items: center;
  transform: translateZ(calc(var(--f) * 760px));
  /* visible solo cerca del foco (~0,35 shots antes y después) para que el shot
     siguiente/anterior no quede semi-opaco encima del que está en foco */
  opacity: min(
    clamp(0, calc((var(--f) + 0.95) / 0.6), 1),
    clamp(0, calc((0.35 - var(--f)) / 0.3), 1)
  );
  pointer-events: none;
  will-change: transform, opacity;
}
.mk-zshot[data-live] { pointer-events: auto; }

/* Dentro de un zshot: capas a distinta profundidad → paralaje al atravesar */
.mk-zdepth { transform: translateZ(var(--z, 0px)); }

/* DIVE: foto por la que ENTRAMOS — crece hasta tragarse la cámara.
   Úsala como fondo de un zshot (la siguiente escena emerge de su interior). */
.mk-fx-dive { width: 100%; height: 100%; object-fit: cover; }

/* Niebla de profundidad: oscurece lo lejano para dar volumen al túnel */
.mk-zfog { filter: brightness(calc(1 + min(0, var(--f)) * 0.22)); }

/* Raíl de progreso de la película (lado derecho) — lo crea motion.js.
   Es un SCRUBBER: se puede pinchar y arrastrar para moverse por la película. */
.mk-rail {
  position: fixed; right: 12px; top: 50%; transform: translateY(-50%);
  width: 5px; height: 60vh; border-radius: 5px;
  background: rgba(255,255,255,0.22); z-index: 9997;
  pointer-events: auto; cursor: grab; touch-action: none;
}
/* zona de agarre generosa (invisible) alrededor del raíl */
.mk-rail::before { content: ""; position: absolute; inset: -10px -16px; }
.mk-rail.mk-dragging { cursor: grabbing; }
.mk-rail-thumb {
  position: absolute; left: 0; width: 100%; height: 10%; border-radius: 5px;
  background: var(--mk-primario, #fff);
  top: calc(var(--mk-p, 0) * 90%);
  box-shadow: 0 0 12px color-mix(in srgb, var(--mk-primario, #fff) 60%, transparent);
  transition: transform .2s;
}
.mk-rail:hover .mk-rail-thumb, .mk-rail.mk-dragging .mk-rail-thumb { transform: scaleX(2.2); }

/* ============================================================
   EDITORIAL REVEAL (v6) — alternativa clara/plana al túnel 3D,
   inspirada en el ritmo de SaaS modernos: franjas de color a
   sangre completa, revelado en cortinilla, tarjetas flotantes
   con paralaje suave y un subrayado "a mano" como firma visual
   recurrente. Sin dependencias, motor por IntersectionObserver.
   Úsala para negocios que piden un look luminoso/corporativo en
   vez del vuelo cinematográfico oscuro del túnel.
   ============================================================ */

/* --- FADE-UP: entra al hacer scroll (no al cargar) ------------ */
/* HTML: <div class="mk-fadeup" data-mk-delay="150">…</div> */
.mk-fadeup { opacity: 0; transform: translateY(40px); transition: opacity .8s cubic-bezier(.65,0,.35,1), transform .8s cubic-bezier(.65,0,.35,1); }
.mk-fadeup.mk-in { opacity: 1; transform: none; }

/* --- SPLIT-WORDS con stagger, disparado por scroll ------------ */
/* HTML: <h2 class="mk-splitscroll">Titular a trocear</h2> */
.mk-splitscroll .mk-w { display: inline-block; overflow: hidden; vertical-align: top; }
.mk-splitscroll .mk-w > span { display: inline-block; transform: translateY(110%); opacity: 0; transition: transform .7s cubic-bezier(.65,0,.35,1), opacity .7s; }
.mk-splitscroll.mk-in .mk-w > span { transform: none; opacity: 1; }

/* --- MASK-REVEAL: panel que se abre en cortinilla -------------- */
/* HTML: <div class="mk-maskreveal" data-mk-dir="left"><img …></div>
   data-mk-dir: left (por defecto) · right · bottom */
.mk-maskreveal { clip-path: inset(0 0 0 100%); transition: clip-path 1.15s cubic-bezier(.65,0,.35,1); border-radius: inherit; }
.mk-maskreveal[data-mk-dir="right"] { clip-path: inset(0 100% 0 0); }
.mk-maskreveal[data-mk-dir="bottom"] { clip-path: inset(100% 0 0 0); }
.mk-maskreveal.mk-in { clip-path: inset(0 0 0 0); }

/* --- FLOAT: tarjetas flotantes con paralaje suave al hacer scroll */
/* HTML: <div class="mk-float" data-mk-float="1.2">…</div> */
.mk-float { will-change: transform; }

/* --- SCRIBBLE: subrayado "a mano" que se traza al entrar ------- */
/* HTML: <span class="mk-scribble">texto clave
           <svg class="mk-scribble-svg" viewBox="0 0 200 20" preserveAspectRatio="none">
             <path pathLength="1" d="M2 14 Q 100 2 198 12"/>
           </svg></span>
   El atributo pathLength="1" en el <path> es obligatorio: hace que
   el trazo dibujado sea proporcional pase lo que pase con la curva. */
.mk-scribble { position: relative; display: inline-block; }
.mk-scribble-svg { position: absolute; left: -2%; bottom: -.14em; width: 104%; height: .5em; overflow: visible; pointer-events: none; }
.mk-scribble-svg path { fill: none; stroke: var(--mk-secundario); stroke-width: 6; stroke-linecap: round; stroke-dasharray: 1; stroke-dashoffset: 1; transition: stroke-dashoffset 1s cubic-bezier(.65,0,.35,1) .1s; }
.mk-scribble.mk-in .mk-scribble-svg path { stroke-dashoffset: 0; }

/* --- BANDA a sangre completa (ritmo de color, sin gradientes) -- */
.mk-band { border-radius: 22px; }
.mk-band-accent { background: var(--mk-secundario); color: #08131a; }
.mk-band-dark { background: var(--mk-primario); color: #fff; }
.mk-band-light { background: color-mix(in srgb, var(--mk-texto) 6%, #fff); color: var(--mk-texto); }

/* --- TARJETA FLOTANTE tipo mock-UI (blanca, sombra suave) ------ */
.mk-ui-card { background: #fff; color: #1a1a1a; border-radius: 15px; box-shadow: 0 0 40px 8px rgba(0,0,0,.16); padding: .9rem 1.1rem; }

/* ============================================================
   STICKY MEDIA SECTIONS — la imagen se queda fija en pantalla
   mientras el texto pasa por pasos al hacer scroll; cada paso
   cruza a su propia imagen. Sensación de "vídeo" al bajar.
   Mecánica: capas superpuestas con opacity cross-fade + un
   IntersectionObserver por paso con el umbral en el centro de
   la pantalla (no hay matemática de scroll% continua).

   <div class="mk-sticky-media">
     <div class="mk-sm-media">
       <div class="mk-sm-layer active"><img src="paso1.jpg"></div>
       <div class="mk-sm-layer"><img src="paso2.jpg"></div>
       …
     </div>
     <div class="mk-sm-content">
       <div class="mk-sm-step">
         <div class="mk-sm-mobile-media"><img src="paso1.jpg"></div>  (solo se ve en móvil)
         …titular y texto del paso 1…
       </div>
       <div class="mk-sm-step">…paso 2…</div>
       …
     </div>
   </div>
   Añade content-left si quieres el texto a la izquierda y la
   imagen a la derecha (por defecto: imagen izquierda, texto derecha).
   ============================================================ */
.mk-sticky-media { display: flex; gap: 6%; flex-wrap: nowrap; align-items: flex-start; }
.mk-sticky-media.content-left { flex-direction: row-reverse; }
.mk-sm-media { position: sticky; top: 8vh; width: 60%; max-height: 84vh; aspect-ratio: 16 / 10; border-radius: 20px; flex-shrink: 0; background: var(--mk-sm-bg, transparent); }
.mk-sm-layer { position: absolute; inset: 0; opacity: 0; transition: opacity .2s ease .1s; border-radius: inherit; }
.mk-sm-layer.active { opacity: 1; transition: opacity .35s ease; z-index: 2; }
.mk-sm-layer img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: inherit; box-shadow: 0 30px 60px -18px rgba(17,20,60,.4); }
.mk-sm-content { flex: 1; min-width: 0; }
.mk-sm-step { position: relative; }
@media (min-width: 901px) { .mk-sticky-media .mk-sm-step:not(:last-child) { margin-bottom: 42vh; } }
.mk-sm-mobile-media { display: none; }
@media (max-width: 900px) {
  .mk-sticky-media { flex-direction: column !important; gap: 0; }
  .mk-sm-media { display: none; }
  .mk-sm-step { margin-bottom: 2.6rem; }
  .mk-sm-mobile-media { display: block; margin-bottom: 1.2rem; border-radius: 18px; overflow: hidden; box-shadow: 0 20px 40px -15px rgba(17,20,60,.3); }
  .mk-sm-mobile-media img { width: 100%; display: block; }
}

/* --- CARRUSEL con scroll-snap, sin librería de arrastre -------- */
.mk-carousel { display: flex; gap: 1.2rem; overflow-x: auto; scroll-snap-type: x mandatory; padding: .5rem .2rem 1.2rem; -webkit-overflow-scrolling: touch; }
.mk-carousel > * { scroll-snap-align: start; flex: 0 0 auto; }
.mk-carousel::-webkit-scrollbar { height: 6px; }
.mk-carousel::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--mk-secundario) 50%, transparent); border-radius: 4px; }

/* --- HEADER que gana sombra al pasar un umbral de scroll ------- */
/* HTML: <header class="mk-header-shrink">…</header> (motion.js añade/quita .mk-scrolled) */
.mk-header-shrink { transition: box-shadow .3s, padding .3s; }
.mk-header-shrink.mk-scrolled { box-shadow: 0 8px 30px rgba(0,0,0,.10); }

/* --- WHATSAPP FLOTANTE: botón burbuja + panel, sin plugin ------ */
/* HTML: <div data-mk-whatsapp data-mk-wa-number="573216883539"
           data-mk-wa-text="Hola, quiero más información"
           data-mk-wa-title="Escríbenos" data-mk-wa-name="Soporte"
           data-mk-wa-hint="Normalmente respondemos en minutos."></div>
   (colócalo una vez en cada página; motion.js construye el widget) */
.mk-wa-btn { position: fixed; right: 20px; bottom: 20px; z-index: 9995; width: 56px; height: 56px; border-radius: 50%; background: #25D366; display: grid; place-items: center; box-shadow: 0 8px 24px rgba(0,0,0,.28); cursor: pointer; border: none; }
.mk-wa-btn svg { width: 28px; height: 28px; fill: #fff; }
.mk-wa-panel { position: fixed; right: 20px; bottom: 88px; z-index: 9995; width: min(300px, 84vw); background: #fff; border-radius: 16px; box-shadow: 0 20px 55px rgba(0,0,0,.28); overflow: hidden; opacity: 0; transform: translateY(14px) scale(.96); pointer-events: none; transition: opacity .25s cubic-bezier(.65,0,.35,1), transform .25s cubic-bezier(.65,0,.35,1); }
.mk-wa-panel.mk-open { opacity: 1; transform: none; pointer-events: auto; }
.mk-wa-panel header { background: #25D366; color: #fff; padding: .85rem 1rem; font-weight: 700; font-size: .9rem; }
.mk-wa-panel .body { padding: 1rem; font-size: .84rem; color: #333; line-height: 1.4; }
.mk-wa-panel .body .name { font-weight: 700; margin-bottom: .2rem; }
.mk-wa-panel a.mk-wa-cta { display: block; text-align: center; margin: 0 1rem 1rem; background: #25D366; color: #fff; font-weight: 700; text-decoration: none; padding: .6rem; border-radius: 999px; font-size: .85rem; }

/* --- Accesibilidad ------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .mk-intro { display: none; }
  .mk-hero > *, .mk-split .mk-w > span, .mk-reveal, .mk-unveil, .mk-marquee-track, .mk-pulse::after, .mk-glow::before, .mk-kenburns img { animation: none !important; transition: none !important; opacity: 1 !important; transform: none !important; clip-path: none !important; }
  .mk-pin { height: auto; }
  .mk-pin-stage { position: relative; height: auto; min-height: 100vh; }
  .mk-layer { position: relative; transform: none !important; }
  .mk-zoomout, .mk-tilt-scroll, .mk-seq > *, .mk-statement, .mk-hscroll-track { transform: none !important; opacity: 1 !important; filter: none !important; }
  .mk-wipe { clip-path: none !important; }
  .mk-hscroll { overflow-x: auto; }
  /* La película se despliega como documento normal: shots apilados, todo visible */
  .mk-rail { display: none; }
  .mk-film { height: auto; }
  .mk-film-stage { position: relative; height: auto; overflow: visible; }
  .mk-filmshot, .mk-zshot { position: relative; inset: auto; min-height: 60vh; opacity: 1 !important; transform: none !important; pointer-events: auto; }
  .mk-zfog { filter: none !important; }
  .mk-fadeup, .mk-splitscroll .mk-w > span, .mk-maskreveal { transition: none !important; opacity: 1 !important; transform: none !important; clip-path: none !important; }
  .mk-scribble-svg path { transition: none !important; stroke-dashoffset: 0 !important; }
  .mk-float { transform: none !important; }
}
