:root {
  color-scheme: light;
  --page-bg: #63ad6a;
  /*
    La escena completa mide 1921x5399. Se parte en dos tableros para que al
    entrar se vea solo el hero (titulo + Gurisa + Rio) centrado en la pantalla
    y los tres frames de abajo queden fuera de la vista. El tablero del hero
    ocupa toda la primera pantalla y muestra la escena de forma continua (su
    copia de la escena solo tiene fondo, titulo y personajes, sin frames). El
    resto arranca en y=1530 de la escena (--crop-rest): las 128 unidades de
    fondo puro que hay hasta los frames (y=1658) se solapan con el final del
    hero y se funden en gradiente sobre el (ver .rest / .artboard--rest), asi
    los dos tableros empalman sin costura aunque el hero este mas ampliado.
  */
  --crop-rest: 28.3386%;
  --grape: #7b1fa2;
  --grape-deep: #5e1380;
  --paper: #f4ec96;
  --coral: #f0563f;
}

* {
  box-sizing: border-box;
}

html {
  min-width: 320px;
  background: var(--page-bg);
}

body {
  min-width: 320px;
  margin: 0;
  overflow-x: hidden;
  background: var(--page-bg);
  font-family: Arial, Helvetica, sans-serif;
}

.site {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 100%;
}

/*
  El hero ocupa (al menos) toda la primera pantalla y se centra vertical: al
  entrar se ve el titulo con los personajes centrado, con aire arriba y abajo, y
  los frames de abajo (en .rest) caen recien despues de 100svh.
*/
.hero-stage {
  width: 100%;
  height: 100vh;
  height: 100svh;
  background: var(--page-bg);
}

.rest {
  width: 100%;
  display: flex;
  justify-content: center;
  /*
    Sube el tablero para que su banda de fondo puro (1530 a 1658 de la escena,
    128/1921 = 6.6632% del ancho del tablero) se superponga con el final del
    hero. Con la mascara de .artboard--rest, esa banda aparece en gradiente
    sobre el hero: los dos patrones se cruzan sin linea visible, y los frames
    (y=1658) quedan exactamente donde estaban, al borde de la primera pantalla.
  */
  margin-top: calc(min(100vw, 1921px) * -0.066632);
}

.artboard {
  position: relative;
  width: min(100%, 1921px);
  overflow: hidden;
  background: var(--page-bg);
  line-height: 0;
}

/*
  El tablero del hero es la primera pantalla completa: una ventana de 100vw x
  100svh sobre la escena, sin franjas de relleno. El fondo que se ve arriba,
  abajo y a los costados del titulo es siempre el dibujo real (ondas y halo
  amarillo), nunca un color plano.
*/
.artboard--hero {
  width: 100%;
  height: 100%;
}

/* Resto de la pagina: escena de 1530 hacia abajo (1921 x 2839). */
.artboard--rest {
  aspect-ratio: 1921 / 2839;
  /*
    Fundido de entrada sobre el hero: transparente arriba y opaco justo donde
    empiezan los frames (mismo largo que el margen negativo de .rest).
  */
  -webkit-mask-image: linear-gradient(
    to bottom,
    transparent 0,
    #000 calc(min(100vw, 1921px) * 0.066632)
  );
  mask-image: linear-gradient(
    to bottom,
    transparent 0,
    #000 calc(min(100vw, 1921px) * 0.066632)
  );
}

.scene {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  aspect-ratio: 1921 / 5399;
  transform-origin: top center;
}

/*
  La escena del hero se escala con el ALTO de la ventana (220svh de ancho) para
  que el conjunto crezca con la pantalla: el contenido (copete de Gurisa y=1028
  a subtitulo y=1643, 615 unidades) ocupa 615/1921 x 220svh = ~70% del alto
  visible. Puede quedar mas ancha que la ventana: el sobrante de fondo se
  recorta parejo a los costados. Topes: nunca menos que el ancho de la ventana,
  y no mas de 170vw para que el contenido (441..1489, 1049 unidades) siempre
  entre a lo ancho: 1921/1.70 = 1130 > 1049.

  El centrado vertical es del CONTENIDO: left/top 50% ponen el origen de la
  escena en el centro de la pantalla y el translate corre la escena para que el
  centro del contenido (y=1335.5, el 24.736% de sus 5399) caiga justo ahi.

  (Esta regla tiene que ir despues de .scene: pisa left/top/width con la misma
  especificidad.)
*/
.scene--hero {
  left: 50%;
  top: 50%;
  width: max(100%, min(220vh, 170vw));
  width: max(100%, min(220svh, 170vw));
  transform: translate(-50%, -24.736%);
}

.scene--rest {
  transform: translateY(calc(-1 * var(--crop-rest)));
}

.layer {
  position: absolute;
  left: var(--x);
  top: var(--y);
  z-index: var(--z, 1);
  display: block;
  width: var(--w);
  height: auto;
  pointer-events: none;
  user-select: none;
  transform-origin: center;
  will-change: transform;
  transition: filter 180ms ease;
}

.hotspot {
  position: absolute;
  left: var(--x);
  top: var(--y);
  width: var(--w);
  height: var(--h);
  display: block;
  z-index: 100;
  outline: 0;
}

.hotspot:focus-visible {
  outline: 0;
}

.hotspot.is-active {
  outline: 0;
}

.delay-1 {
  animation-delay: -1.2s;
}

.delay-2 {
  animation-delay: -2.4s;
}

.delay-3 {
  animation-delay: -3.6s;
}

.float-soft {
  animation: float-soft 6.8s ease-in-out infinite;
}

.title-drift {
  animation: title-drift 7.4s ease-in-out infinite;
}

.paper-wiggle {
  animation: paper-wiggle 8.5s ease-in-out infinite;
}

.pulse-soft {
  animation: pulse-soft 4.8s ease-in-out infinite;
}

.sparkle {
  animation: sparkle 3.2s ease-in-out infinite;
}

.layer.is-hovered {
  animation: button-hover-pop 520ms cubic-bezier(0.18, 0.89, 0.32, 1.28) both;
  filter: drop-shadow(0 18px 14px rgba(0, 0, 0, 0.18));
}

.layer.is-hovered[class*="capitulo"] {
  animation-name: button-hover-play;
}

.layer.is-hovered[class*="guia-"] {
  animation-name: button-hover-paper;
}

.layer.is-hovered.enersa-img,
.layer.is-hovered.turismo-img,
.layer.is-hovered.mientrerios-img {
  animation-name: button-hover-sign;
}

@keyframes float-soft {
  0%,
  100% {
    transform: translate3d(0, 0, 0);
  }

  50% {
    transform: translate3d(0, -1.2%, 0);
  }
}

@keyframes title-drift {
  0%,
  100% {
    transform: rotate(-0.25deg) translate3d(0, 0, 0);
  }

  50% {
    transform: rotate(0.25deg) translate3d(0, -1%, 0);
  }
}

@keyframes paper-wiggle {
  0%,
  100% {
    transform: rotate(0deg) translate3d(0, 0, 0);
  }

  50% {
    transform: rotate(1.2deg) translate3d(0, -1.2%, 0);
  }
}

@keyframes pulse-soft {
  0%,
  100% {
    transform: scale(1);
  }

  50% {
    transform: scale(1.018);
  }
}

@keyframes sparkle {
  0%,
  100% {
    opacity: 0.82;
  }

  50% {
    opacity: 1;
  }
}

@keyframes button-hover-pop {
  0% {
    transform: translate3d(0, 0, 0) scale(1);
  }

  55% {
    transform: translate3d(0, -2%, 0) scale(1.07) rotate(-1deg);
  }

  100% {
    transform: translate3d(0, -1.2%, 0) scale(1.045) rotate(0deg);
  }
}

@keyframes button-hover-play {
  0% {
    transform: translate3d(0, 0, 0) scale(1);
  }

  48% {
    transform: translate3d(0, -2.3%, 0) scale(1.055);
  }

  100% {
    transform: translate3d(0, -1.2%, 0) scale(1.035);
  }
}

@keyframes button-hover-paper {
  0% {
    transform: translate3d(0, 0, 0) rotate(0deg) scale(1);
  }

  45% {
    transform: translate3d(0, -2%, 0) rotate(3deg) scale(1.06);
  }

  100% {
    transform: translate3d(0, -1.1%, 0) rotate(1.4deg) scale(1.035);
  }
}

@keyframes button-hover-sign {
  0% {
    transform: translate3d(0, 0, 0) scale(1);
  }

  55% {
    transform: translate3d(0, -1.8%, 0) scale(1.06) rotate(0.7deg);
  }

  100% {
    transform: translate3d(0, -0.9%, 0) scale(1.035) rotate(0deg);
  }
}

@media (prefers-reduced-motion: reduce) {
  .float-soft,
  .title-drift,
  .paper-wiggle,
  .pulse-soft,
  .sparkle,
  .layer.is-hovered {
    animation: none;
  }
}

.capitulo-1 {
  --x: 19.0583%;
  --y: 44.3526%;
  --w: 19.8328%;
  --h: 4.7004%;
}

.fondo {
  --x: 0%;
  --y: 0%;
  --w: 100%;
  --z: 1;
}

.gradients {
  --x: 0%;
  --y: 0%;
  --w: 100%;
  --z: 2;
}

/*
  El titulo es un WebP animado cuadrado con margenes transparentes: el titulo en
  si ocupa el 60.73% central del ancho del lienzo. Estas medidas escalan y
  desplazan el lienzo completo para que ese recuadro caiga exactamente donde
  estaba el PNG original (--x: 36.4846%; --y: 20.9035%; --w: 27.0109%). El margen
  sobrante queda transparente y deja pasar al pajaro cuando entra y sale del
  cuadro. El loop infinito ya viene en el propio archivo.

  --y bajo 50px respecto del original (16.7484%) por el vuelo del pajaro: en el
  despegue (cuadros 165-170) subia demasiado y se lo veia rebotar contra el
  borde. Ahora ademas el hero muestra la escena continua hacia arriba, asi que
  al pajaro le sobra cielo por encima.

  El WebP esta regenerado a partir del master sin perdida de 1920 y con el drift
  del titulo compensado: las letras se corrian hasta 4.6 px del lienzo a lo
  largo del loop y volvian de golpe al reiniciar. Ahora el recorrido es de 1.4 px
  y el salto de loop de 1.3 px (menos de 1 px en pantalla).
*/
.titulo {
  --x: 26.7760%;
  --y: 17.6745%;
  --w: 44.4880%;
  --z: 10;
  filter: url("#titulo-color");

  /*
    Disuelve los laterales del lienzo para que el pajaro entre y salga sin
    borde duro. El pajaro solo cruza por izquierda (cuadros 2-29) y por derecha
    (174-182), nunca por arriba ni por abajo, asi que alcanza con un degradado
    horizontal. El texto ocupa del 21.80% al 82.50% del lienzo y las mesetas
    opacas van del 20% al 84%, o sea que la mascara no lo toca en absoluto.
    Los pasos intermedios aproximan una curva suave: un degradado lineal corta
    de forma perceptiblemente brusca en las puntas.
  */
  --borde-difuso: linear-gradient(
    to right,
    rgba(0, 0, 0, 0) 0%,
    rgba(0, 0, 0, 0.16) 5%,
    rgba(0, 0, 0, 0.5) 10%,
    rgba(0, 0, 0, 0.84) 15%,
    #000 20%,
    #000 84%,
    rgba(0, 0, 0, 0.84) 88%,
    rgba(0, 0, 0, 0.5) 92%,
    rgba(0, 0, 0, 0.16) 96%,
    rgba(0, 0, 0, 0) 100%
  );
  -webkit-mask-image: var(--borde-difuso);
  mask-image: var(--borde-difuso);
}

.girl-standing {
  --x: 16.6554%;
  --y: 17.7283%;
  --w: 28.9745%;
  --z: 11;
}

.boy-standing {
  --x: 52.5039%;
  --y: 17.7283%;
  --w: 29.6330%;
  --z: 11;
}

.volti {
  --x: 21.3288%;
  --y: 30.1143%;
  --w: 20.1743%;
  --z: 20;
}

.modo {
  --x: 38.5737%;
  --y: 30.7464%;
  --w: 23.3732%;
  --z: 20;
}

.jujo {
  --x: 58.3550%;
  --y: 30.7464%;
  --w: 21.1348%;
  --z: 20;
}

.volti-button {
  --x: 21.3288%;
  --y: 30.1004%;
  --w: 20.1743%;
  --h: 9.9046%;
}

.modo-button {
  --x: 38.5737%;
  --y: 30.7464%;
  --w: 23.3732%;
  --h: 8.6127%;
}

.jujo-button {
  --x: 58.3550%;
  --y: 30.7464%;
  --w: 21.1348%;
  --h: 8.6127%;
}

.episodios-title {
  --x: 36.2832%;
  --y: 40.0259%;
  --w: 28.4227%;
  --z: 30;
}

.capitulo-1-img {
  --x: 17.3347%;
  --y: 43.6933%;
  --w: 22.3842%;
  --z: 33;
}

.capitulo-2-img {
  --x: 39.6668%;
  --y: 43.6933%;
  --w: 21.0307%;
  --z: 33;
}

.capitulo-3-img {
  --x: 60.6976%;
  --y: 43.6933%;
  --w: 22.0198%;
  --z: 33;
}

.capitulo-4-img {
  --x: 27.8501%;
  --y: 51.6577%;
  --w: 22.3842%;
  --z: 33;
}

.capitulo-5-img {
  --x: 50.1822%;
  --y: 51.6577%;
  --w: 23.1650%;
  --z: 33;
}

.capybara-bike {
  --x: 0%;
  --y: 46.9161%;
  --w: 37.4805%;
  --z: 31;
}

.animal-pointing {
  --x: 67.4128%;
  --y: 46.5086%;
  --w: 32.5872%;
  --z: 31;
}

.estrellitas {
  --x: 0%;
  --y: 60.1778%;
  --w: 100%;
  --z: 40;
}

.guias-title {
  --x: 36.3352%;
  --y: 59.9926%;
  --w: 30.1406%;
  --z: 42;
}

.girl-jumping {
  --x: 8.6413%;
  --y: 61.6966%;
  --w: 25.7678%;
  --z: 43;
}

.boy-jumping {
  --x: 64.4977%;
  --y: 61.6966%;
  --w: 24.0500%;
  --z: 43;
}

.guia-1-img {
  --x: 24.6746%;
  --y: 64.6416%;
  --w: 15.5128%;
  --z: 45;
}

.guia-2-img {
  --x: 35.7106%;
  --y: 64.4934%;
  --w: 13.6387%;
  --z: 45;
}

.guia-3-img {
  --x: 44.9245%;
  --y: 63.8081%;
  --w: 13.1182%;
  --z: 45;
}

.guia-4-img {
  --x: 54.8152%;
  --y: 63.7340%;
  --w: 12.1291%;
  --z: 45;
}

.guia-5-img {
  --x: 63.8730%;
  --y: 64.0119%;
  --w: 12.9099%;
  --z: 45;
}

.queres-img {
  --x: 24.9870%;
  --y: 70.2538%;
  --w: 50.9630%;
  --z: 50;
}

.enersa-img {
  --x: 17.1265%;
  --y: 74.2174%;
  --w: 20.8225%;
  --z: 51;
}

.turismo-img {
  --x: 37.9490%;
  --y: 74.2174%;
  --w: 21.7074%;
  --z: 51;
}

.mientrerios-img {
  --x: 59.6044%;
  --y: 74.2174%;
  --w: 24.8308%;
  --z: 51;
}

.capitulo-2 {
  --x: 40.4297%;
  --y: 44.3526%;
  --w: 19.8328%;
  --h: 4.7004%;
}

.capitulo-3 {
  --x: 61.8010%;
  --y: 44.3526%;
  --w: 19.8328%;
  --h: 4.7004%;
}

.capitulo-4 {
  --x: 28.9745%;
  --y: 52.1450%;
  --w: 19.8328%;
  --h: 4.7004%;
}

.capitulo-5 {
  --x: 51.9458%;
  --y: 52.1450%;
  --w: 19.8328%;
  --h: 4.7004%;
}

.guia-1 {
  --x: 26.5146%;
  --y: 65.2242%;
  --w: 12.3172%;
  --h: 4.8722%;
}

.guia-2 {
  --x: 36.9458%;
  --y: 64.6742%;
  --w: 10.6010%;
  --h: 4.6417%;
}

.guia-3 {
  --x: 46.7339%;
  --y: 64.5353%;
  --w: 9.7146%;
  --h: 4.4993%;
}

.guia-4 {
  --x: 55.8427%;
  --y: 64.5108%;
  --w: 10.0891%;
  --h: 4.6934%;
}

.guia-5 {
  --x: 64.6000%;
  --y: 64.8315%;
  --w: 11.3656%;
  --h: 5.1161%;
}

.queres-conocer {
  --x: 26.7547%;
  --y: 70.2789%;
  --w: 49.1437%;
  --h: 4.0700%;
}

.enersa {
  --x: 16.5344%;
  --y: 74.5653%;
  --w: 21.4021%;
  --h: 3.0387%;
}

.turismo {
  --x: 32.2979%;
  --y: 74.5704%;
  --w: 27.3057%;
  --h: 3.1784%;
}

.mientrerios {
  --x: 57.7099%;
  --y: 73.3083%;
  --w: 26.7260%;
  --h: 4.4405%;
}

/* ---------- PDF viewer ---------- */
.pdf-viewer {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(12px, 3vw, 40px);
}

.pdf-viewer[hidden] {
  display: none;
}

.pdf-viewer__backdrop {
  position: absolute;
  inset: 0;
  background: radial-gradient(
    circle at 50% 30%,
    rgba(99, 173, 106, 0.82),
    rgba(40, 78, 45, 0.92)
  );
  backdrop-filter: blur(6px);
  animation: pdf-fade 240ms ease both;
}

.pdf-viewer__panel {
  position: relative;
  display: flex;
  flex-direction: column;
  width: min(100%, 1000px);
  height: min(100%, 92vh);
  background: #fffef7;
  border-radius: 26px;
  border: 4px solid var(--grape);
  box-shadow: 0 26px 60px rgba(40, 20, 60, 0.45);
  overflow: hidden;
  animation: pdf-pop 320ms cubic-bezier(0.18, 0.89, 0.32, 1.28) both;
}

.pdf-viewer__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 12px clamp(14px, 2.4vw, 22px);
  background: linear-gradient(135deg, var(--grape) 0%, var(--grape-deep) 100%);
  color: #fff;
  flex: 0 0 auto;
}

.pdf-viewer__brand {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}

.pdf-viewer__dot {
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--paper);
  box-shadow: 0 0 0 4px rgba(244, 236, 150, 0.28);
}

.pdf-viewer__title {
  margin: 0;
  font-size: clamp(1rem, 2.6vw, 1.45rem);
  font-weight: 800;
  letter-spacing: 0.01em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-shadow: 0 2px 0 rgba(0, 0, 0, 0.12);
}

.pdf-viewer__actions {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: 0 0 auto;
}

.pdf-viewer__btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 42px;
  padding: 0 16px;
  border: 0;
  border-radius: 999px;
  font-family: inherit;
  font-size: 0.95rem;
  font-weight: 800;
  color: var(--grape-deep);
  background: var(--paper);
  cursor: pointer;
  text-decoration: none;
  transition: transform 160ms ease, box-shadow 160ms ease, background 160ms ease;
  box-shadow: 0 4px 0 rgba(0, 0, 0, 0.16);
}

.pdf-viewer__btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 0 rgba(0, 0, 0, 0.18);
}

.pdf-viewer__btn:active {
  transform: translateY(1px);
  box-shadow: 0 2px 0 rgba(0, 0, 0, 0.18);
}

.pdf-viewer__btn--close {
  width: 42px;
  padding: 0;
  justify-content: center;
  color: #fff;
  background: var(--coral);
}

.pdf-viewer__btn:focus-visible {
  outline: 3px solid #fff;
  outline-offset: 2px;
}

.pdf-viewer__stage {
  position: relative;
  flex: 1 1 auto;
  min-height: 0;
  background: #ece4c8;
}

.pdf-viewer__frame {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}

.pdf-viewer__spinner {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 54px;
  height: 54px;
  margin: -27px 0 0 -27px;
  border: 6px solid rgba(123, 31, 162, 0.22);
  border-top-color: var(--grape);
  border-radius: 50%;
  animation: pdf-spin 0.9s linear infinite;
}

body.pdf-open {
  overflow: hidden;
}

@keyframes pdf-fade {
  from {
    opacity: 0;
  }
}

@keyframes pdf-pop {
  from {
    opacity: 0;
    transform: translateY(18px) scale(0.94);
  }
}

@keyframes pdf-spin {
  to {
    transform: rotate(360deg);
  }
}

@media (max-width: 640px) {
  .pdf-viewer__btn span {
    display: none;
  }

  .pdf-viewer__btn {
    width: 42px;
    padding: 0;
    justify-content: center;
  }
}

@media (prefers-reduced-motion: reduce) {
  .pdf-viewer__backdrop,
  .pdf-viewer__panel,
  .pdf-viewer__spinner {
    animation: none;
  }
}

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
