/* ══════════════════════════════════════════════════════════
   BRUNIO WHO — Centro de transmisión
   Paleta y tipografías del LOOK & FEEL oficial del proyecto.
   ══════════════════════════════════════════════════════════ */

:root{
  --black:#070808;          /* fondo principal        */
  --black-soft:#0B0D0D;     /* bloques / secciones    */
  --black-card:#111211;     /* cards y paneles        */
  --black-warm:#151311;     /* fondos con textura     */

  --white-main:#E9E5DE;     /* títulos                */
  --white-soft:#CFCAC1;     /* texto secundario       */
  --gray-muted:#8B8984;     /* metadata               */

  --red-main:#D84032;       /* botones y titulares    */
  /* El MISMO rojo, apenas más oscuro, para las superficies que llevan
     texto blanco encima. #D84032 con blanco da 4.47:1 y el mínimo de
     WCAG para texto es 4.5: pasaba raspando por abajo. #D23D2F da
     4.72:1, con margen, y a simple vista es el mismo rojo —seis
     puntos de 255 en el canal rojo—.
     No se tocó --red-main porque también es el rojo de los brillos,
     del punto del logo y de los bordes: ahí oscurecerlo no arregla
     nada y apaga la marca. La regla es simple: si encima va texto
     blanco, --red-ink; si no, --red-main. */
  --red-ink:#D23D2F;        /* rojo con texto blanco encima (4.72:1) */
  --red-dark:#A92820;       /* hover / rojo apagado   */
  --red-bright:#F04A38;     /* glow, señal, detalle   */
  --red-deep:#661B18;       /* sombras rojas          */

  --border-dark:#292824;
  --border-light:#5C5850;
  --radio-gold:#9C7650;     /* detalles de radio / vintage */
  --radio-gold-dark:#5E452F;

  --cold:#7E93A2;           /* identidad fría S01 */

  --f-display:"Bebas Neue","Oswald",Impact,sans-serif;
  --f-ui:"Oswald",system-ui,sans-serif;
  --f-body:"Roboto Condensed",system-ui,sans-serif;

  --gut:clamp(20px,5vw,72px);
  /* Ritmo vertical de las secciones. Antes cada una traía el suyo —90, 81,
     90, 90, 63— y encima medido en vh, así que el aire cambiaba al
     redimensionar la ventana a lo alto y dos secciones vecinas nunca
     coincidían. Un solo token, en vw, y todas respiran igual.
     --pad-sec-corta es para los bloques de poco contenido: el club tenía
     tanto fondo como el manifiesto y ahí sí sobraba negro. */
  --pad-sec:clamp(52px,5.4vw,88px);
  --pad-sec-corta:clamp(30px,3.1vw,40px);
  --max:1520px;
  --ease:cubic-bezier(.22,.61,.36,1);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
/* Un ancla no puede caer debajo del encabezado fijo. La regla valía sólo
   para <section id>, pero en las temporadas el id vive en el <h2> —la
   sección se identifica con aria-labelledby— y #t-videos quedaba tapado.
   Vale para cualquier cosa con id a la que se llegue por ancla.
   104 y no 88: la barra mide 88 y con eso el título quedaba pegado
   abajo del borde. Los 16 de más son el aire que lo hace legible. */
section[id],h2[id],h3[id],[id^="t-"]{scroll-margin-top:104px}
body{
  margin:0;background:var(--black);color:var(--white-main);
  font-family:var(--f-body);font-size:16.5px;line-height:1.6;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
img,video,svg{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
h1,h2,h3{margin:0;font-weight:400}
p,figure,blockquote{margin:0}
ul,ol{margin:0;padding:0;list-style:none}
button,input{font:inherit;color:inherit}

.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--red-ink);color:#fff;padding:12px 18px;font-family:var(--f-ui);font-size:12px}
.skip:focus{left:12px;top:12px}
:focus-visible{outline:2px solid var(--red-bright);outline-offset:3px}

/* grano de película */
body::after{
  content:"";position:fixed;inset:-50%;z-index:60;pointer-events:none;opacity:.14;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='.55'/%3E%3C/svg%3E");
  animation:grain 6s steps(6) infinite;
}
@keyframes grain{
  0%{transform:translate(0,0)}20%{transform:translate(-4%,3%)}40%{transform:translate(3%,-4%)}
  60%{transform:translate(-3%,-3%)}80%{transform:translate(4%,2%)}100%{transform:translate(0,0)}
}

/* ── átomos ───────────────────────────────────────────── */
.kicker{
  font-family:var(--f-ui);font-weight:500;font-size:11.5px;letter-spacing:.26em;
  text-transform:uppercase;color:var(--gray-muted);
}
.kicker--signal{color:var(--red-bright)}
.kicker--gold{color:var(--radio-gold)}

.btn{
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--f-ui);font-weight:500;font-size:13px;letter-spacing:.19em;text-transform:uppercase;
  padding:16px 30px;border:1px solid transparent;white-space:nowrap;max-width:100%;
  transition:background .35s var(--ease),color .35s var(--ease),border-color .35s var(--ease);
}
.btn--signal{background:var(--red-ink);color:#fff;border-color:var(--red-ink)}
.btn--signal:hover{background:var(--red-dark);border-color:var(--red-dark)}
.btn--ghost{border-color:rgba(233,229,222,.42)}
.btn--ghost:hover{background:var(--white-main);color:var(--black);border-color:var(--white-main)}
.btn--line{padding:16px 4px;border-bottom:1px solid rgba(233,229,222,.3);color:var(--white-soft)}
.btn--line:hover{color:var(--white-main);border-bottom-color:var(--radio-gold)}

/* el punto rojo que late: lo usan el receptor, la franja de temas y
   las tarjetas de temporada. El badge del hero que lo estrenó ya no está. */
.onair-tag__dot{
  width:7px;height:7px;border-radius:50%;background:var(--red-bright);flex:none;
  box-shadow:0 0 0 0 rgba(240,74,56,.6);animation:pulse 2.4s var(--ease) infinite;
}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(240,74,56,.55)}
  70%{box-shadow:0 0 0 10px rgba(240,74,56,0)}
  100%{box-shadow:0 0 0 0 rgba(240,74,56,0)}
}

/* encabezados de sección */
.shead{
  max-width:var(--max);margin:0 auto clamp(38px,5vw,72px);padding:0 var(--gut);
  position:relative;
}
.shead__idx{
  font-family:var(--f-ui);font-size:11.5px;letter-spacing:.3em;color:var(--radio-gold);
  margin-bottom:14px;
}
.shead__idx::after{content:"";display:inline-block;width:44px;height:1px;background:var(--border-dark);margin-left:14px;vertical-align:middle}
.shead__title{
  font-family:var(--f-display);text-transform:uppercase;
  font-size:clamp(46px,8.4vw,124px);line-height:.9;letter-spacing:.01em;
}
.shead__sub{margin-top:16px;color:var(--white-soft);font-size:clamp(15px,1.6vw,19px);max-width:38ch}
.shead--tight{margin-bottom:clamp(28px,3.5vw,48px)}
.shead--tight .shead__title{font-size:clamp(38px,5.6vw,88px)}

/* ══════════════════ NAVEGACIÓN ══════════════════ */
.nav{position:fixed;inset:0 0 auto;z-index:80;transition:background .4s var(--ease)}
.nav.is-stuck{background:rgba(7,8,8,.92);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
.nav__inner{
  max-width:var(--max);margin:0 auto;padding:0 var(--gut);
  height:88px;display:flex;align-items:center;gap:clamp(18px,4vw,54px);
}
/* La marca de la barra es tipográfica y no el graffiti: en Bebas —la
   display de todo el sitio— deja de ser un objeto pegado arriba y pasa a
   ser parte del sistema. El graffiti sigue firmando donde firma: el pie,
   los smart-links y la página de la radio.
   baseline y no center: el punto es un elemento vacío, y alineado por la
   base se apoya sobre el renglón en vez de flotar a media altura. */
/* La marca de la barra es tipográfica y no el graffiti: en Bebas —la
   display de todo el sitio— deja de ser un objeto pegado arriba y pasa a
   ser parte del sistema. El graffiti sigue firmando donde firma: el pie,
   los smart-links y la página de la radio.
   El cuerpo va 12% abajo del que tenía: como firma del header no compite
   con el título del hero, que es quien manda en esa pantalla. */
.nav__logo{
  display:inline-flex;align-items:baseline;margin-right:auto;
  font-family:var(--f-display);text-transform:uppercase;
  font-size:clamp(23px,2.8vw,35px);letter-spacing:.1em;line-height:1;
  color:var(--white-main);transition:color .3s var(--ease);
}
.nav__logo:hover{color:#fff}
/* El punto medio delante del nombre, como una cabecera de diario. Es un
   carácter y no un círculo dibujado: se sienta solo a la altura del ojo
   de la mayúscula y acompaña el cuerpo del texto sin tener que ajustarlo
   en cada breakpoint. */
.nav__dot{
  font-style:normal;color:var(--red-main);margin-right:.24em;
  transition:color .3s var(--ease);
}
.nav__logo:hover .nav__dot{color:var(--red-bright)}
.nav__links{display:flex;gap:clamp(16px,2.4vw,34px)}
.nav__links a{
  font-family:var(--f-ui);font-size:12px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--white-soft);position:relative;padding:4px 0;transition:color .3s var(--ease);
}
.nav__links a::after{
  content:"";position:absolute;left:0;bottom:0;width:0;height:1px;background:var(--radio-gold);
  transition:width .35s var(--ease);
}
.nav__links a:hover{color:var(--white-main)}
.nav__links a:hover::after{width:100%}
.nav__cta{
  font-family:var(--f-ui);font-weight:500;font-size:12px;letter-spacing:.18em;text-transform:uppercase;
  padding:11px 20px;border:1px solid rgba(233,229,222,.32);transition:.3s var(--ease);
}
.nav__cta:hover{background:var(--white-main);color:var(--black);border-color:var(--white-main)}
.nav__burger{display:none;background:none;border:0;padding:10px;cursor:pointer}
.nav__burger span{display:block;width:24px;height:1.5px;background:var(--white-main);transition:transform .35s var(--ease)}
.nav__burger span+span{margin-top:6px}
.nav__burger[aria-expanded="true"] span:first-child{transform:translateY(3.75px) rotate(45deg)}
.nav__burger[aria-expanded="true"] span:last-child{transform:translateY(-3.75px) rotate(-45deg)}

.menu{position:fixed;inset:0;z-index:79;background:var(--black);display:flex;flex-direction:column;justify-content:center;gap:8px;padding:100px var(--gut) 40px}
.menu[hidden]{display:none}
.menu__links{display:flex;flex-direction:column;gap:2px}
.menu__links a{font-family:var(--f-display);text-transform:uppercase;font-size:clamp(34px,10vw,58px);line-height:1.14}
.menu__cta{margin-top:32px;align-self:flex-start;font-family:var(--f-ui);font-weight:500;font-size:13px;letter-spacing:.2em;text-transform:uppercase;padding:15px 26px;background:var(--red-ink);color:#fff}
.menu__foot{margin-top:auto;font-family:var(--f-ui);font-size:11.5px;letter-spacing:.2em;color:var(--gray-muted);text-transform:uppercase}

/* ══════════════════ MÓDULO 1 — HERO ══════════════════ */
.hero{position:relative;min-height:100svh;display:flex;align-items:center;overflow:hidden;isolation:isolate;padding:104px 0 40px}
.hero__bg{
  position:absolute;inset:0;z-index:-3;background:var(--black);
  background-size:cover;
  /* La imagen viene recentrada: la cabeza quedó al 50% del ancho, así que
     el fondo se centra y listo. Antes estaba al 60% y había que corregirlo
     con background-position y un espejo; las dos muletas se fueron. */
  background-position:50% 50%;
  animation:heroIn 2.2s var(--ease) both;
}
@keyframes heroIn{from{transform:scale(1.05);opacity:0}to{transform:none;opacity:1}}
.hero__bg:not(.has-media)::before{
  content:"";position:absolute;inset:0;
  background:
    radial-gradient(120% 90% at 16% 88%, rgba(102,27,24,.5) 0%, rgba(102,27,24,0) 58%),
    linear-gradient(180deg,#101014 0%,#0A0A0C 45%,var(--black) 100%);
}
.hero__bg video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero__veil{
  position:absolute;inset:0;z-index:-2;
  background:
    linear-gradient(180deg,rgba(7,8,8,.34) 0%,rgba(7,8,8,.04) 22%,rgba(7,8,8,.55) 80%,var(--black) 100%),
    linear-gradient(90deg,rgba(7,8,8,.5) 0%,rgba(7,8,8,.05) 40%,rgba(7,8,8,.5) 72%,rgba(7,8,8,.82) 100%);
}

/* grilla: mensaje + receptor arriba, franja de temas abajo */
.hero__grid{
  max-width:var(--max);width:100%;margin:0 auto;padding:0 var(--gut);
  /* Dos columnas iguales. El hueco del MEDIO no es el gap: a 1471 el gap
     medía 26px y el hueco visible 154, porque el texto va centrado en su
     columna y el receptor en la suya, y las dos holguras se sumaban ahí.
     Como el aire total está fijo, sacárselo al medio es dárselo a los
     costados —o quitárselo al aire, ensanchando los módulos—.

     Se hizo lo segundo: el receptor ocupa su columna entera y el gap se
     parte al medio. El hueco baja de 154 a 69. Y de paso el receptor
     vuelve a terminar en la misma calle que la franja de temas, que
     cuelga de esta misma grilla y por eso no se puede encoger sin
     encogerla a ella también. */
  display:grid;grid-template-columns:1fr 1fr;
  /* start y no stretch: el receptor mide lo que mide. Estirado a la altura
     de la columna del título le quedaba un hueco muerto abajo. */
  /* start: el logotipo arranca a la misma altura que el receptor. Centrado
     contra una columna más alta caía 42px y el hero perdía el golpe de
     entrada. El receptor mide lo que mide (align-self). */
  gap:clamp(10px,.9vw,14px);align-items:start;
}
/* La franja cuelga de la grilla del hero, así que el gap de la grilla le
   servía de separación. Ese gap es CHICO a propósito —cierra el hueco
   entre el texto y el receptor— y un solo valor vale para los dos ejes,
   así que al cerrarlo horizontalmente la franja quedó pegada a lo de
   arriba. El aire vertical se lo pone ella. */
.strip{grid-column:1/-1;margin-top:clamp(30px,3.6vw,60px)}

/* panel base: caja oscura, borde fino, profundidad */
.panel{
  position:relative;
  background:linear-gradient(180deg,rgba(17,18,17,.3),rgba(7,8,8,.5));
  border:1px solid rgba(233,229,222,.11);
  backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);
  box-shadow:inset 0 1px 0 rgba(233,229,222,.06),0 40px 90px -50px #000;
}
/* El mensaje no es una caja: vive sobre la imagen, alineado al gutter
   como el logo. La caja queda sólo para el receptor, que es el aparato. */
.hero__msg{padding-right:clamp(20px,3vw,52px)}
/* La bajada que nombra la cosa. Ancho corto a propósito: leída en dos
   renglones tiene el peso de una bajada; a todo el ancho se lee como
   párrafo y compite con el logotipo. */
.hero__lead{
  margin-top:clamp(16px,2vh,24px);max-width:min(100%,590px);
  font-family:var(--f-body);font-size:clamp(18.5px,1.62vw,23px);
  line-height:1.38;color:var(--white-main);
}
.panel--rx{
  padding:clamp(18px,1.7vw,24px);display:flex;flex-direction:column;
  border-color:rgba(156,118,80,.34);
  background:linear-gradient(180deg,rgba(21,19,17,.72),rgba(7,8,8,.84));
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
}

.hero__title{margin:clamp(12px,1.6vh,20px) 0 0;line-height:0}
.hero__title img{
  /* Con tope: llenando la columna entera el logotipo pasaba a ser todo el
     hero. Cortado a 620px deja respirar el bloque de texto de abajo y le
     devuelve al fondo el espacio de la derecha. */
  width:min(100%,620px);height:auto;
  /* El PNG trae exactamente 3% de aire transparente a la izquierda, así
     que el logotipo quedaba sangrado y las tres líneas de abajo
     arrancaban antes que él. Se descuenta ese aire —en proporción, no en
     píxeles, para que valga en cualquier tamaño— y el trazo de la L y de
     la F cae en el mismo eje que la S de "Sintonizaste". */
  margin-left:calc(min(100%,620px) * -.03);
  filter:drop-shadow(0 14px 34px rgba(0,0,0,.7));
}
/* dónde escucharlo: fichas con la marca de cada plataforma */
.sprite{position:absolute;width:0;height:0;overflow:hidden}
.hero__plat{margin-top:20px}
.hero__plat-l{
  font-family:var(--f-ui);font-size:10px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--gray-muted);margin-bottom:10px;
}
.hero__plat-row{display:flex;flex-wrap:wrap;gap:8px}
.plat{
  display:inline-flex;align-items:center;gap:8px;
  padding:8px 13px;border:1px solid rgba(233,229,222,.16);background:rgba(7,8,8,.4);
  font-family:var(--f-ui);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--white-soft);cursor:pointer;
  transition:color .3s var(--ease),border-color .3s var(--ease),background .3s var(--ease);
}
.plat:hover{color:var(--white-main);border-color:var(--border-light);background:rgba(233,229,222,.06)}
.plat__i{width:15px;height:15px;flex:none;fill:currentColor}
/* mientras no tenga URL se ve, pero no lleva a ningún lado */
.plat[data-sin-link]{cursor:default;opacity:.5}
.plat[data-sin-link]:hover{color:var(--white-soft);border-color:rgba(233,229,222,.16);background:rgba(7,8,8,.4)}
/* las menos usadas van sólo con el icono, sin nombre */
.plat--icon{padding:8px;width:33px;justify-content:center;gap:0}

/* en px y no en ch, igual que el lema: 48ch daban 379 y la frase pide
   449 para entrar en un renglón. Partida en dos se leía como párrafo
   suelto en vez de bajada. */
.hero__line{margin-top:9px;max-width:min(100%,590px);color:var(--gray-muted);font-size:clamp(16px,1.35vw,19.5px);line-height:1.45}
/* la segunda gris va pegada a la primera: son dos partes de la misma
   descripción, no dos bloques */
.hero__actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}
/* ── Las dos puertas del hero ────────────────────────────────────────
   Enlaces subrayados y no cajas. Dos botones macizos arriba de todo
   rompían el tono del resto de la página, que resuelve TODAS sus
   acciones con texto y un filete —"Ver álbum", "Escuchar", "Álbum
   completo"—. Los recuadros se leían pegados de otro sitio.

   La jerarquía la sostiene el filete y no el relleno: el principal va
   en blanco pleno con dos píxeles de rojo abajo, el segundo en hueso
   apagado con la línea tenue de siempre. Se distinguen sin que ninguno
   grite. */
.hero .btn{font-size:13.5px;padding:0}
.hero__actions{gap:clamp(22px,2.6vw,40px)}
.hero .btn--line{padding:14px 2px 9px;gap:.55em}
.hero__cta--main{
  color:var(--white-main);
  border-bottom-width:2px;border-bottom-color:var(--red-main);
}
.hero__cta--main:hover{color:#fff;border-bottom-color:var(--red-bright)}
.hero__cta:not(.hero__cta--main):hover{border-bottom-color:var(--radio-gold)}

/* ── el bloque del hero, centrado ────────────────────────────────────
   El logotipo y el texto comparten eje. Ojo con el logotipo: el PNG no
   es simétrico —trae 3% de aire transparente a la izquierda y 1% a la
   derecha—, así que centrando la CAJA el trazo queda casi un 1% corrido
   a la derecha. Se compensa moviendo la caja esa mitad exacta, calculada
   sobre el mismo ancho que usa la imagen para que valga en cualquier
   pantalla. Medido en el render: el centro del trazo cae sobre el centro
   del texto. */
.hero__msg{padding-right:0;text-align:center}
.hero__lead,.hero__line{margin-left:auto;margin-right:auto}
.hero__actions{justify-content:center}
/* margin auto y no text-align: el reset del sitio pone display:block a
   todas las imágenes, así que centrar el texto del contenedor no movía
   el logotipo un píxel —quedaba pegado al margen izquierdo. */
.hero__title img{position:relative;left:calc(min(100%,620px) * -.0097);margin:0 auto}

/* ── COMPARTIR LA TRANSMISIÓN ────────────────────────────────────────
   /radio/ no es una sección del sitio: es la transmisión sola, para
   pasarle a alguien. Por eso no está en el menú y sí en los dos lugares
   donde la persona ya está escuchando —la cabecera del receptor y el
   dock— más el pie, que es donde se busca lo que uno ya sabe que existe.

   El botón nunca queda mudo: en el teléfono abre el menú nativo, en la
   computadora copia el link, y si el navegador no tiene ninguna de las
   dos muestra el link para copiarlo a mano. Lo resuelve js/compartir.js. */
/* Sirve para el <a> de la home y para cualquier <button> que use la
   misma pinta: por eso van juntos el reset de botón y el de enlace. */
.rx__share{
  cursor:pointer;background:none;border:0;padding:2px 0;
  display:inline-flex;align-items:center;gap:5px;text-decoration:none;
  font-family:var(--f-ui);font-weight:500;font-size:9.5px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gray-muted);
  border-bottom:1px solid transparent;
  transition:color .25s var(--ease),border-color .25s var(--ease);
}
.rx__share:hover,.rx__share:focus-visible{color:var(--white-main);border-bottom-color:var(--radio-gold)}
/* el On air empuja: Receptor queda a la izquierda, y el estado y el
   compartir se agrupan a la derecha */
.rx__head .rx__on{margin-left:auto}

.dock__share{
  flex:none;width:34px;height:34px;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  background:none;border:1px solid var(--border-dark);
  color:var(--gray-muted);
  transition:color .25s var(--ease),border-color .25s var(--ease);
}
.dock__share svg{width:16px;height:16px}
.dock__share:hover,.dock__share:focus-visible{color:var(--white-main);border-color:var(--radio-gold)}
@media (max-width:560px){
  /* en pantalla chica el dock ya va justo: el ícono se queda, el texto
     del receptor no hace falta repetirlo */
  .dock__share{width:30px;height:30px}
}

/* ── receptor ── */
.rx__head{
  display:flex;align-items:center;gap:10px;
  font-family:var(--f-ui);font-size:10px;letter-spacing:.24em;text-transform:uppercase;
  color:var(--radio-gold);padding-bottom:12px;border-bottom:1px solid rgba(156,118,80,.24);
}
.rx__on{display:inline-flex;align-items:center;gap:7px;color:var(--red-bright)}
.rx__read{display:flex;align-items:baseline;gap:8px;margin-top:16px}
.rx__band{font-family:var(--f-ui);font-size:11px;letter-spacing:.2em;color:var(--gray-muted)}
.rx__freq{
  font-family:var(--f-display);font-size:clamp(38px,3.4vw,52px);line-height:.9;
  color:var(--white-main);letter-spacing:.02em;font-variant-numeric:tabular-nums;
  text-shadow:0 0 22px rgba(240,74,56,.25);
}
.rx__mhz{font-family:var(--f-ui);font-size:10px;letter-spacing:.2em;color:var(--gray-muted)}
.rx__now{margin-top:10px;padding:10px 12px;background:rgba(7,8,8,.5);border:1px solid rgba(233,229,222,.07)}
.rx__label{
  display:block;font-family:var(--f-ui);font-size:9.5px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--gray-muted);margin-bottom:4px;
}
.rx__track{
  display:block;font-family:var(--f-display);text-transform:uppercase;
  font-size:clamp(17px,1.5vw,22px);line-height:1.02;letter-spacing:.02em;color:var(--white-main);
}
.rx__wave{position:relative;height:34px;margin:14px 0 4px;overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.rx__wave svg{position:absolute;inset:0;width:200%;height:100%;animation:wave 7s linear infinite}
.rx__wave2{opacity:.4;animation-duration:11s!important;animation-direction:reverse!important}
.rx__wave path{fill:none;stroke:var(--radio-gold);stroke-width:1;vector-effect:non-scaling-stroke}
.rx__wave2 path{stroke:var(--radio-gold-dark)}
@keyframes wave{from{transform:translateX(0)}to{transform:translateX(-50%)}}

.rx__dial{position:relative;height:40px;overflow:hidden;cursor:pointer;border-top:1px solid rgba(156,118,80,.28)}
.rx__ticks{
  position:absolute;inset:0 0 auto;height:12px;
  background-image:repeating-linear-gradient(90deg,rgba(156,118,80,.6) 0 1px,transparent 1px 2.5%);
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
}
.rx__marks span{
  position:absolute;top:0;left:var(--x);width:1px;height:20px;background:rgba(233,229,222,.42);
  transform:translateX(-.5px);transition:background .3s var(--ease),height .3s var(--ease);
}
.rx__marks span.is-on{background:var(--radio-gold);height:26px}
.rx__needle{transition:left .52s cubic-bezier(.22,.8,.25,1);
  position:absolute;top:-1px;left:0;width:1px;height:30px;background:var(--red-bright);
  box-shadow:0 0 12px 1px rgba(240,74,56,.8);transform:translateX(-.5px);
  transition:left .5s var(--ease);
}
.rx__needle::after{
  content:"";position:absolute;left:50%;top:-3px;width:7px;height:7px;border-radius:50%;
  background:var(--red-bright);transform:translateX(-50%);box-shadow:0 0 10px 2px rgba(240,74,56,.6);
}
.rx__scale{
  display:flex;justify-content:space-between;margin-top:6px;margin-bottom:16px;
  font-family:var(--f-ui);font-size:9.5px;letter-spacing:.14em;color:var(--radio-gold-dark);
}
.rx__play{
  display:flex;align-items:center;gap:9px;padding:11px 13px;
  border:1px solid rgba(233,229,222,.22);background:rgba(7,8,8,.45);
  font-family:var(--f-ui);font-weight:500;font-size:11px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--white-main);transition:background .3s var(--ease),border-color .3s var(--ease);
}
.rx__play:hover{background:var(--red-main);border-color:var(--red-main)}
.rx__play-i{
  width:0;height:0;flex:none;
  border-left:8px solid var(--red-bright);border-top:5px solid transparent;border-bottom:5px solid transparent;
}
.rx__play:hover .rx__play-i{border-left-color:#fff}
/* Con la radio sonando, el triángulo se parte en dos barras: el botón
   muestra lo que va a hacer si lo apretás, no lo que está pasando.
   La regla vale para el receptor y para el dock —antes existía sólo
   para el dock y el receptor se quedaba siempre en play—. */
.rx__play.is-playing .rx__play-i,
.dock__play.is-playing .rx__play-i{
  box-sizing:border-box;width:12px;height:13px;border:0;
  border-left:4px solid var(--red-bright);border-right:4px solid var(--red-bright);
}
.rx__play.is-playing:hover .rx__play-i,
.dock__play.is-playing:hover .rx__play-i{border-color:#fff}
.rx__play{flex:1;cursor:pointer;text-align:left}

/* fila de transporte: emisora anterior · encender · emisora siguiente.
   Antes venía pegada a la barra de progreso y le alcanzaba con 14px;
   ahora cuelga directo de la escala del dial y necesita más aire. */
.rx__transport{display:flex;align-items:stretch;gap:7px;margin-top:26px}

/* UP NEXT: la emisión siempre dice qué sigue */
.rx__next{
  display:flex;align-items:baseline;gap:10px;margin-top:14px;padding-top:12px;
  border-top:1px solid var(--border-dark);min-width:0;
}
.rx__next-l{
  flex:none;font-family:var(--f-ui);font-size:9.5px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--radio-gold);
}
.rx__next-t{
  font-family:var(--f-ui);font-size:12px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--gray-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* el display parpadea al cambiar, como un equipo de verdad */
.rx__freq,.rx__track,.dock__name{transition:opacity .18s linear}
.is-swap{opacity:0!important}
.rx__step{
  flex:none;width:40px;cursor:pointer;position:relative;
  border:1px solid rgba(233,229,222,.22);background:rgba(7,8,8,.45);
  transition:background .3s var(--ease),border-color .3s var(--ease);
}
.rx__step:hover{background:var(--red-main);border-color:var(--red-main)}
.rx__step::before,.rx__step::after{
  content:"";position:absolute;top:50%;width:0;height:0;
  border-top:5px solid transparent;border-bottom:5px solid transparent;
}
/* las dos puntas van centradas respecto del botón, sin medidas fijas */
.rx__step--prev::before{left:50%;transform:translate(-100%,-50%);border-right:7px solid var(--white-soft)}
.rx__step--prev::after{left:50%;transform:translate(0,-50%);border-right:7px solid var(--white-soft)}
.rx__step--next::before{left:50%;transform:translate(-100%,-50%);border-left:7px solid var(--white-soft)}
.rx__step--next::after{left:50%;transform:translate(0,-50%);border-left:7px solid var(--white-soft)}
.rx__step:hover::before,.rx__step:hover::after{border-right-color:#fff;border-left-color:#fff}
.rx__foot{
  display:flex;justify-content:space-between;gap:10px;margin-top:auto;padding-top:12px;
  border-top:1px solid rgba(156,118,80,.18);
  font-family:var(--f-ui);font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--gray-muted);
}

/* ── franja de temas ── */
/* Oculta por decisión, no por accidente: sigue en el DOM porque la radio
   saca de ahí sus emisoras. Ver el comentario en index.html. */
.strip[hidden]{display:none}
.strip{
  border:1px solid rgba(233,229,222,.1);
  background:linear-gradient(180deg,rgba(17,18,17,.42),rgba(7,8,8,.62));
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:0 40px 90px -50px #000;
}
.strip__head{
  display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  padding:12px clamp(14px,1.4vw,20px);border-bottom:1px solid rgba(233,229,222,.09);
}
.strip__all{
  font-family:var(--f-ui);font-weight:500;font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--white-soft);transition:color .3s var(--ease);white-space:nowrap;
}
.strip__all:hover{color:var(--radio-gold)}
.strip__list{display:grid;grid-template-columns:repeat(5,minmax(0,1fr))}
.tk__item{min-width:0;display:flex;border-right:1px solid rgba(233,229,222,.08)}
.tk__item:last-child{border-right:0}
.tk{
  width:100%;text-align:left;cursor:pointer;background:none;border:0;
  padding:13px clamp(12px,1.2vw,16px) 14px;position:relative;
  display:flex;flex-direction:column;align-items:flex-start;
  transition:background .3s var(--ease);
}
.tk::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--red-main);
  transform:scaleY(0);transform-origin:bottom;transition:transform .35s var(--ease);
}
.tk:hover{background:rgba(233,229,222,.045)}
.tk__f{
  display:block;font-family:var(--f-ui);font-size:10.5px;letter-spacing:.16em;
  color:var(--radio-gold);margin-bottom:5px;font-variant-numeric:tabular-nums;
}
.tk__n{
  display:block;font-family:var(--f-display);text-transform:uppercase;
  font-size:clamp(14px,1.15vw,18px);line-height:1.04;letter-spacing:.02em;color:var(--white-soft);
  transition:color .3s var(--ease);
}
.tk:hover .tk__n{color:var(--white-main)}
.tk__on{
  display:none;align-items:center;gap:6px;margin-top:7px;
  font-family:var(--f-ui);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--red-bright);
}
.tk.is-on{background:rgba(216,64,50,.09)}
.tk.is-on::before{transform:scaleY(1)}
.tk.is-on .tk__n{color:var(--white-main)}
.tk.is-on .tk__f{color:var(--red-bright)}
.tk.is-on .tk__on{display:inline-flex}

/* ── franja de transmisión ── */
.ticker{
  border-top:1px solid var(--border-dark);border-bottom:1px solid var(--border-dark);
  background:var(--black-warm);overflow:hidden;padding:14px 0;
}
.ticker__track{
  display:flex;align-items:center;width:max-content;
  animation:marquee var(--dur,44s) linear infinite;
  will-change:transform;
}
.ticker__group{display:flex;align-items:center;gap:26px;padding-right:26px;flex:none}
/* fragmentos interceptados: las frases mandan, el estado acompaña */
.ticker__track .tk-l{color:var(--radio-gold-dark)}
.ticker__track .tk-loud{color:var(--white-main)}
.ticker__track .tk-s{color:var(--gray-muted)}
.ticker__track .tk-on{color:var(--red-bright)}
.ticker__track span{
  font-family:var(--f-ui);font-size:12px;letter-spacing:.34em;text-transform:uppercase;color:var(--gray-muted);
}
.ticker__track i{width:5px;height:5px;background:var(--radio-gold);transform:rotate(45deg);flex:none}
/* el JS clona grupos hasta cubrir el doble de la pantalla y mide el salto
   exacto, así el loop es continuo en cualquier ancho */
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(calc(-1 * var(--shift,33.333%)))}}

/* ══════════════════ MÓDULO 2 — TEMPORADAS ══════════════════ */
.seasons{
  position:relative;isolation:isolate;overflow:hidden;
  background:var(--black-soft);padding:var(--pad-sec) 0;
}
/* la atmósfera de la temporada en emisión, detrás de todo el rail */
.seasons__bg{
  /* La caja se estira 14% MÁS ANCHA que la sección y se recorta contra
     el borde derecho: con cover la imagen no sobraba de ancho y
     background-position-x no movía nada. Así la figura corre a la
     derecha sin que quede ningún hueco sin cubrir. */
  position:absolute;inset:0 -14% 0 0;z-index:-1;pointer-events:none;
  background:url("../assets/img/hero-s02.jpg") 50% 50%/cover no-repeat;
}
/* Velo parejo: la imagen ocupa toda la sección, sin apagarse en los bordes.
   El .80 no es a ojo: con .58 esta zona medía 34 de luminancia media contra
   los 27 del hero — se veía bastante más clara. Con .80 dan lo mismo. */
.seasons__bg::after{
  content:"";position:absolute;inset:0;
  background:rgba(11,13,13,.80);
}

.rail{position:relative;max-width:var(--max);margin:0 auto}
.rail__track{
  display:flex;gap:clamp(12px,1.4vw,24px);
  padding:0 var(--gut) 10px;
  overflow-x:auto;overscroll-behavior-x:contain;
  scroll-snap-type:x mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch;
}
.rail__track::-webkit-scrollbar{display:none}
.rail__track{cursor:grab}
.rail__track.is-dragging{cursor:grabbing;scroll-snap-type:none;user-select:none}
.rail__track.is-dragging *{pointer-events:none}

.sea{
  position:relative;flex:0 0 auto;scroll-snap-align:start;
  display:grid;grid-template-columns:auto auto;align-items:end;
  /* .18 y no .5: entre tarjeta y tarjeta hay un hueco, y al cruzarlo el
     puntero no está sobre ninguna. Con medio segundo de fade se veían dos
     temporadas en estados distintos —una prendiéndose y la otra sin haber
     bajado todavía— y parecía un bug. Así el cambio se lee instantáneo. */
  transition:opacity .18s var(--ease);
}
/* Al enfocar una temporada, las otras bajan. La atenuación cuelga del riel
   entero y no de :has(.sea:hover): mientras el puntero esté adentro, el
   estado se sostiene aunque pase por un hueco. La regla del hover va
   segunda a propósito —misma especificidad, gana la última. */
@media (hover:hover){
  .rail__track:hover .sea,
  .rail__track:focus-within .sea{opacity:.42}
  .rail__track .sea:hover,
  .rail__track .sea:focus-within{opacity:1}
}

/* el número como parte de la composición */
.sea__num{
  font-family:var(--f-display);line-height:.66;letter-spacing:-.05em;
  font-size:clamp(96px,13vw,205px);
  margin-right:-.13em;position:relative;z-index:1;
  color:var(--black-soft);
  -webkit-text-stroke:3px rgba(233,229,222,.42);
  transition:transform .6s var(--ease),-webkit-text-stroke-color .5s var(--ease);
}
.sea--s02 .sea__num{-webkit-text-stroke-color:rgba(233,229,222,.62)}

.sea__card{
  position:relative;z-index:2;
  /* 4:5 vertical: es el formato en el que están diseñados los
     pósters. Con el cuadrado anterior se les comía un cuarto del
     alto, y el título quedaba pegado al borde de arriba. */
  width:clamp(180px,19vw,300px);aspect-ratio:4/5;
  overflow:hidden;background:var(--black-card);
  box-shadow:0 30px 70px -34px #000;
  transition:transform .55s var(--ease),box-shadow .55s var(--ease);
}
.sea__poster{
  position:absolute;inset:0;display:block;
  background-size:cover;background-position:50% 50%;background-repeat:no-repeat;
  transition:transform 1s var(--ease),filter .55s var(--ease);
}

.sea__poster:not(.has-media){border:1px solid var(--border-dark)}
.sea--s02 .sea__poster:not(.has-media){background-image:linear-gradient(160deg,#17100F,#070808)}
.sea--s01 .sea__poster:not(.has-media){background-image:linear-gradient(200deg,#171A20,#070808)}
/* Temporada 00: hasta que llegue la tapa, un campo de ondas de radio.
   Se ve puesto a propósito, no roto. */
.sea--s00 .sea__poster:not(.has-media){
  background-color:var(--black-warm);
  background-image:
    repeating-radial-gradient(circle at 50% 50%, rgba(156,118,80,.22) 0 1px, rgba(156,118,80,0) 1px 46px),
    linear-gradient(200deg,#14110E,#070808);
}
.sea--s00 .sea__num{-webkit-text-stroke-color:rgba(156,118,80,.55)}
.sea--s00:hover .sea__num{-webkit-text-stroke-color:var(--radio-gold)}
.sea--s00 .sea__base-state{color:var(--radio-gold)}
.modal--s00 .modal__hero:not(.has-media){
  background-color:var(--black-warm);
  background-image:
    repeating-radial-gradient(circle at 50% 50%, rgba(156,118,80,.2) 0 1px, rgba(156,118,80,0) 1px 54px),
    linear-gradient(200deg,#14110E,#070808);
}
/* grano propio de la pieza */
.sea__card::after{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.1;z-index:1;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E");
}
.sea__open{
  position:absolute;inset:0;z-index:3;border:0;background:none;cursor:pointer;padding:0;
}

/* información que aparece al pasar */
















/* lo que se ve siempre, debajo del poster */
.sea__base{grid-column:2;padding-top:16px;max-width:clamp(190px,21vw,320px)}
.sea__base-name{
  font-family:var(--f-display);text-transform:uppercase;line-height:.94;
  font-size:clamp(22px,2vw,32px);letter-spacing:.012em;
}
.sea--s01 .sea__base-name{letter-spacing:.05em;color:var(--white-soft)}
.sea__base-state{
  display:inline-flex;align-items:center;gap:8px;margin-top:7px;
  font-family:var(--f-ui);font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--gray-muted);
}
.sea__base-state--live{color:var(--white-main)}
.sea--s01 .sea__base-state{color:var(--cold)}

@media (hover:hover){
  .sea:hover .sea__card,.sea:focus-within .sea__card{
    transform:translateY(-10px);box-shadow:0 50px 100px -34px #000;
  }
  .sea:hover .sea__poster{transform:scale(1.035)}
  .sea--s02:hover .sea__num{-webkit-text-stroke-color:var(--red-main)}
  .sea--s01:hover .sea__num{-webkit-text-stroke-color:var(--white-soft)}
  .sea:hover .sea__num{transform:translateX(-10px)}
}

/* flechas: sólo cuando el rail realmente desborda */
.rail__arrow{
  position:absolute;top:38%;z-index:5;width:46px;height:46px;cursor:pointer;
  border:1px solid var(--border-dark);background:rgba(7,8,8,.8);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  transition:background .3s var(--ease),border-color .3s var(--ease);
}
.rail__arrow[hidden]{display:none}
@media (hover:none),(pointer:coarse){.rail__arrow{display:none!important}}
.rail__arrow:hover{background:var(--white-main);border-color:var(--white-main)}
.rail__arrow::after{
  content:"";position:absolute;left:50%;top:50%;width:9px;height:9px;
  border-top:1px solid var(--white-main);border-right:1px solid var(--white-main);
}
.rail__arrow:hover::after{border-color:var(--black)}
.rail__arrow--prev{left:max(6px,calc(var(--gut) - 23px))}
.rail__arrow--prev::after{transform:translate(-35%,-50%) rotate(-135deg)}
.rail__arrow--next{right:max(6px,calc(var(--gut) - 23px))}
.rail__arrow--next::after{transform:translate(-65%,-50%) rotate(45deg)}

/* ── modal de temporada ── */
/* El ancho lo manda el texto, no la foto: la sinopsis mide 62ch y a 920px
   sobraba caja a los costados mientras la imagen —16/9— se comía media
   pantalla de alto. Ajustado al texto, la foto baja en la misma medida. */
.modal{
  width:min(620px,92vw);max-height:88vh;padding:0;border:0;overflow:auto;
  background:var(--black-card);color:var(--white-main);
  box-shadow:0 60px 140px -50px #000;
}
.modal::backdrop{background:rgba(4,4,5,.86);backdrop-filter:blur(6px)}
.modal[open]{animation:modalIn .45s var(--ease)}
@keyframes modalIn{from{opacity:0;transform:translateY(18px) scale(.985)}to{opacity:1;transform:none}}
.modal__hero{
  aspect-ratio:16/9;background-size:cover;background-position:50% 0;background-color:var(--black);
  position:relative;
}
.modal__hero::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(7,8,8,.25) 0%,rgba(7,8,8,0) 35%,rgba(17,18,17,.75) 82%,var(--black-card) 100%);
}
.modal__body{padding:0 clamp(22px,3.4vw,46px) clamp(28px,3.4vw,46px);margin-top:clamp(-70px,-5vw,-40px);position:relative}
.modal__title{
  font-family:var(--f-display);text-transform:uppercase;line-height:.92;margin-top:8px;
  font-size:clamp(34px,4.4vw,64px);letter-spacing:.012em;
}
.modal--s01 .modal__title{letter-spacing:.05em}
.modal__meta{
  margin-top:10px;font-family:var(--f-ui);font-size:11.5px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gray-muted);
}
.modal__syn{margin-top:18px;color:var(--white-soft);font-size:clamp(15px,1.5vw,17.5px);max-width:62ch;line-height:1.6}
/* tres puertas: el que quiere música no pasa por el lore */
.doors{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin-top:28px}
.door{
  font-family:var(--f-ui);font-weight:500;font-size:11.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--white-main);
  display:inline-flex;align-items:center;gap:8px;
  transition:color .3s var(--ease),gap .3s var(--ease);
}
.door span{color:var(--radio-gold);transition:transform .3s var(--ease)}
.door:hover{color:#fff}
.door:hover span{transform:translateX(4px)}
.door--main,.door--bone,.door--spotify,.door--youtube{padding:14px 24px}
.door[data-sin-link]{opacity:.42;cursor:default}
.door[data-sin-link]:hover{color:var(--white-main)}
.door[data-sin-link]:hover span{transform:none}
.door--main{background:var(--red-ink);color:#fff}
.door--main:hover{background:var(--red-dark)}
.door--bone{background:var(--white-main);color:var(--black)}
.door--bone:hover{background:var(--white-soft);color:var(--black)}
/* La playlist viva vive en dos plataformas y en ninguna es "la
   principal": cada botón lleva el color de la suya, así se elige de un
   vistazo. Es el único lugar del sitio con color de marca ajena —el
   resto se mantiene en la paleta— porque acá el color ES la etiqueta.
   El rojo de YouTube es el de la casa y no el #FF0000 oficial: al lado
   del verde, el naranja de la paleta se lee igual de YouTube y no
   pelea con el resto de la página. */
.door--spotify{background:#1DB954;color:#0A1B10}
.door--spotify:hover{background:#1ED760;color:#07130B}
.door--youtube{background:var(--red-ink);color:#fff}
.door--youtube:hover{background:var(--red-dark)}
.modal__tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:26px}
.modal__tags li{
  font-family:var(--f-ui);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gray-muted);padding:6px 12px;border:1px solid var(--border-dark);
}
.modal__tracks{margin-top:clamp(20px,2.2vw,28px);padding-top:16px;border-top:1px solid var(--border-dark)}
.modal__tracks ol{margin-top:14px;display:grid;gap:2px}
.modal__tracks li{
  display:flex;align-items:center;gap:16px;padding:10px 0;
  border-bottom:1px solid var(--line-soft,rgba(41,40,36,.5));
}
.tk-n{
  flex:none;font-family:var(--f-ui);font-size:11px;letter-spacing:.14em;color:var(--radio-gold);
}
.tk-t{
  flex:1 1 auto;min-width:0;
  font-family:var(--f-display);text-transform:uppercase;letter-spacing:.02em;
  font-size:clamp(17px,1.7vw,23px);line-height:1.15;color:var(--white-main);
}
.tk-acc{flex:none;display:flex;align-items:center;gap:6px}
.tk-a{
  display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;flex:none;
  border:1px solid rgba(233,229,222,.16);color:var(--white-soft);
  transition:color .25s var(--ease),border-color .25s var(--ease),background .25s var(--ease);
}
.tk-a svg{width:14px;height:14px;fill:currentColor}
.tk-a:hover{color:#fff;border-color:var(--border-light);background:rgba(233,229,222,.07)}
.tk-a--video{position:relative}
/* punto cobre: este tema tiene video oficial. No es un estado activo,
   es una marca de catálogo, así que va en el color de los microdetalles. */
.tk-a--video::after{
  content:"";position:absolute;top:-2px;right:-2px;width:5px;height:5px;
  border-radius:50%;background:var(--radio-gold);
}
.tk-a--video:hover{color:#fff;border-color:var(--radio-gold);background:var(--radio-gold)}
.tk-a--video:hover::after{background:var(--white-main)}

.modal__x{
  position:absolute;top:16px;right:16px;z-index:6;width:42px;height:42px;cursor:pointer;
  border:1px solid rgba(233,229,222,.3);background:rgba(7,8,8,.6);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:background .3s var(--ease)
}
.modal__x:hover{background:var(--radio-gold);border-color:var(--radio-gold)}
.modal__x::before,.modal__x::after{
  content:"";position:absolute;left:50%;top:50%;width:15px;height:1px;background:var(--white-main);
}
.modal__x::before{transform:translate(-50%,-50%) rotate(45deg)}
.modal__x::after{transform:translate(-50%,-50%) rotate(-45deg)}

/* ══════════════════ MÓDULO 3 — QUÉ ES ══════════════════ */
.about{background:var(--black);padding:var(--pad-sec) 0}
.about__inner{max-width:var(--max);margin:0 auto}
.about__grid{
  max-width:var(--max);margin:0 auto;padding:0 var(--gut);
  /* .86 y no .72: la foto crece sin comerse la medida del texto.
     align-items:start la sube a la altura del primer párrafo en vez de
     dejarla flotando en el centro de la columna. */
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.86fr);
  gap:clamp(22px,3vw,40px) clamp(28px,4.2vw,64px);align-items:start;
}
/* La foto va a la derecha y el texto a la izquierda: se lee primero lo
   que dice qué es el proyecto y después se mira quién lo hace.
   La foto estira a lo que mide la columna de al lado —el texto más la
   ficha— así las dos terminan a la misma altura. Su columna es la
   angosta para que al estirarse no quede desproporcionada. */
.about__media{
  /* nada de grid-row:span 2 — era de cuando la ficha era otra celda del
     grid. Al no existir esa segunda fila, el span la inventaba vacía y le
     sumaba a la foto justo los 40px del gap: por eso sobresalía. */
  /* stretch: la foto arranca y termina donde el bloque de texto. Con una
     proporción fija quedaba 190px más larga que la columna de al lado y la
     sección crecía por debajo sin nada que mostrar. */
  align-self:stretch;min-height:280px;
  background-size:cover;background-position:50% 42%;
  background-color:var(--black-card);
}
/* el manifiesto: la definición del proyecto funciona como titular */
.shead__idx--solo{
  max-width:var(--max);margin:0 auto 18px;padding:0 var(--gut);
}
.manifesto__lead{
  /* Un escalón menos de cuerpo y menos aire abajo: a 108px le ganaba a la
     foto que tiene al lado, y con 72px de margen el cuerpo quedaba
     desprendido del titular. */
  max-width:var(--max);margin:0 auto clamp(26px,3.2vw,48px);padding:0 var(--gut);
  font-family:var(--f-display);text-transform:uppercase;
  font-size:clamp(36px,5.8vw,92px);line-height:.94;letter-spacing:.012em;
  color:var(--white-main);
}
.about__text p{color:var(--white-soft);font-size:clamp(16px,1.6vw,19px);max-width:52ch;line-height:1.62}
.about__text p+p{margin-top:15px}

/* ficha: los datos duros, como los créditos de una película */
.ficha{
  margin-top:clamp(26px,3vw,40px);padding-top:clamp(20px,2.2vw,28px);
  border-top:1px solid var(--border-dark);
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px clamp(20px,2.4vw,36px);
}
.ficha dt{
  font-family:var(--f-ui);font-size:10px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--radio-gold);
}
.ficha dd{
  margin:6px 0 0;font-family:var(--f-ui);font-size:13.5px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--white-main);
}





/* ══════════════════ MÓDULO 4 — EN PANTALLA ══════════════════ */
.films{background:var(--black-soft);padding:clamp(64px,9vh,112px) 0 clamp(72px,10vh,128px)}
.films__inner{max-width:var(--max);margin:0 auto;padding:0 var(--gut)}
.films__inner .shead{max-width:none;padding:0}
.films__row::-webkit-scrollbar{display:none}
.film{flex:0 0 calc((100% - 2 * clamp(14px,1.5vw,24px)) / 3);scroll-snap-align:start;min-width:0}
.rail--films{position:relative}
.rail--films .rail__arrow{top:32%}
.rail--films .rail__arrow--prev{left:-14px}
.rail--films .rail__arrow--next{right:-14px}
.films__row{
  display:flex;gap:clamp(14px,1.5vw,24px);
  margin-top:clamp(28px,3.4vw,48px);
  overflow-x:auto;overscroll-behavior-x:contain;overflow-anchor:none;
  scroll-snap-type:x proximity;scroll-padding-left:0;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;
  padding:0 0 6px;
}
.film__card{display:block;position:relative}
.film__media{
  position:relative;display:block;aspect-ratio:16/9;overflow:hidden;
  background-size:cover;background-position:50% 50%;background-color:var(--black-card);
  border:1px solid var(--border-dark);
  transition:border-color .45s var(--ease),transform .6s var(--ease);
}
/* piso: si no cargó ni la miniatura ni el respaldo, igual hay algo */
.film__media:not(.has-media){
  background-color:var(--black-warm);
  background-image:repeating-linear-gradient(115deg, rgba(156,118,80,.07) 0 1px, rgba(156,118,80,0) 1px 9px);
}
.film__media::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(7,8,8,0) 40%,rgba(7,8,8,.55) 100%);
  transition:opacity .45s var(--ease);
}
.film__play{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:1;
  width:clamp(34px,2.9vw,44px);aspect-ratio:1;border-radius:50%;
  border:1px solid rgba(233,229,222,.6);background:rgba(7,8,8,.42);
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
  transition:background .4s var(--ease),border-color .4s var(--ease),transform .4s var(--ease);
}
.film__play::after{
  content:"";position:absolute;left:56%;top:50%;transform:translate(-50%,-50%);
  border-left:8px solid var(--white-main);border-top:5.5px solid transparent;border-bottom:5.5px solid transparent;
}
.film__foot{display:block;padding-top:15px}
.film__t{
  display:block;
  font-family:var(--f-display);text-transform:uppercase;letter-spacing:.016em;
  font-size:clamp(20px,1.9vw,28px);line-height:1.05;color:var(--white-main);
}
.film__c{
  display:block;margin-top:5px;
  font-family:var(--f-ui);font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--gray-muted);
}
@media (hover:hover){
  .film__card:hover .film__media{border-color:var(--border-light);transform:translateY(-4px)}
  .film__card:hover /* piso: si no cargó ni la miniatura ni el respaldo, igual hay algo */
.film__media:not(.has-media){
  background-color:var(--black-warm);
  background-image:repeating-linear-gradient(115deg, rgba(156,118,80,.07) 0 1px, rgba(156,118,80,0) 1px 9px);
}
.film__media::after{opacity:.4}
  .film__card:hover .film__play{background:var(--red-main);border-color:var(--red-main);transform:translate(-50%,-50%) scale(1.08)}
  .film__card:hover .film__t{color:#fff}
}
.film__card[data-player]{cursor:pointer}

/* El botón de play también se prende en las tarjetas de Novedades y en la
   grilla de videos de una temporada. Usan .film__play pero no .film__card,
   así que la regla de arriba no las alcanzaba y el botón quedaba apagado
   aunque la tarjeta entera fuera clickeable. */
@media (hover:hover){
  .lanz__card:hover .film__play{
    background:var(--red-main);border-color:var(--red-main);
    transform:translate(-50%,-50%) scale(1.08);
  }
  .lanz__card:hover .lanz__t{color:#fff}
  .lanz__card{cursor:pointer}
}

/* el subtítulo y el link, en la misma línea */
.films__line{
  display:flex;align-items:baseline;justify-content:space-between;gap:24px;flex-wrap:wrap;
  margin-top:16px;
}
.films__line .shead__sub{margin-top:0}
.films__all{
  display:inline-flex;align-items:center;gap:9px;flex:none;
  font-family:var(--f-ui);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--white-soft);padding-bottom:5px;border-bottom:1px solid var(--border-light);
  transition:color .3s var(--ease),border-color .3s var(--ease);
}
.films__all:hover{color:var(--white-main);border-color:var(--radio-gold)}

/* ══════════════════ MÓDULO 5 — FAQ ══════════════════ */
/* Fondo propio: la sección anterior también es negra y las dos se leían
   como una sola tirada larga. Un escalón de luminancia y un filete arriba
   alcanzan para separarlas sin cambiar de mundo. */
.faq{
  background:var(--black-card);padding:var(--pad-sec) 0;
  border-top:1px solid var(--border-dark);
}
.faq__inner{
  max-width:var(--max);margin:0 auto;padding:0 var(--gut);
  display:grid;grid-template-columns:minmax(0,.62fr) minmax(0,1fr);gap:clamp(30px,5vw,80px);
}
.faq__aside{align-self:start;position:sticky;top:110px;padding:0}
.faq__aside .shead__title{font-size:clamp(38px,4.6vw,76px)}
.faq__still{
  /* El retrato llena el cuadro, sin marco ni aire: la foto es la sección.
     El original es 1000×1500 y el cuadro 4/5, así que sobra un 20 % de alto;
     se recorta desde abajo (posición 22 %) para no comerse la cabeza. */
  margin-top:clamp(28px,3.4vw,44px);aspect-ratio:4/5;
  background-size:cover;background-repeat:no-repeat;
  background-position:50% 22%;background-color:var(--black);
  border:0;
  /* En blanco y negro: a color era la única mancha cálida de una home que
     es monocroma de punta a punta, y rompía más de lo que anclaba. El
     contraste sube un poco para que no se apague al perder el color. */
  filter:grayscale(1) contrast(1.12);
}
.faq__still.is-empty{display:none}
/* Con la marca en vez de un retrato el tratamiento se da vuelta: el
   logo es un dibujo con fondo transparente, no una foto que llena un
   cuadro. Así que entra ENTERO —contain, no cover—, en su propia
   proporción para que no quede una caja vacía alrededor, y sin el
   blanco y negro, que sobre un trazo ya monocromo sólo lo apagaba. */
.faq__still--marca{
  aspect-ratio:900/597;max-width:min(100%,400px);
  background-size:contain;background-position:0 50%;
  background-color:transparent;filter:none;opacity:.92;
}
.faq__quote{
  margin-top:clamp(24px,3vw,38px);padding-top:clamp(20px,2.4vw,28px);
  border-top:1px solid var(--radio-gold-dark);
  font-family:var(--f-display);text-transform:uppercase;
  font-size:clamp(20px,2.1vw,34px);line-height:1.08;letter-spacing:.02em;
  color:var(--white-main);
}
.faq__list{border-top:1px solid var(--border-dark)}
.qa{border-bottom:1px solid var(--border-dark)}
.qa summary{
  display:flex;align-items:baseline;gap:clamp(14px,2vw,28px);
  padding:clamp(20px,2.2vw,28px) 44px clamp(20px,2.2vw,28px) 0;
  cursor:pointer;list-style:none;position:relative;transition:color .3s var(--ease);
}
.qa summary::-webkit-details-marker{display:none}
.qa summary:hover{color:#fff}
.qa__n{font-family:var(--f-ui);font-size:11px;letter-spacing:.16em;color:var(--radio-gold);flex:none;padding-top:.3em}
.qa__q{
  font-family:var(--f-ui);font-weight:400;text-transform:uppercase;letter-spacing:.02em;
  font-size:clamp(16px,1.7vw,23px);line-height:1.25;
}
.qa summary::after,.qa summary::before{content:"";position:absolute;right:6px;top:50%;background:var(--white-soft);transition:transform .4s var(--ease),background .3s}
.qa summary::before{width:15px;height:1px;transform:translateY(-50%)}
.qa summary::after{width:1px;height:15px;right:13px;transform:translateY(-50%)}
.qa[open] summary::after{transform:translateY(-50%) rotate(90deg);background:var(--radio-gold)}
.qa[open] summary::before{background:var(--radio-gold)}
.qa__a{padding:0 6px clamp(24px,2.6vw,34px) 0}
.qa__a p{color:var(--white-soft);font-size:clamp(15px,1.5vw,17.5px);max-width:none;text-wrap:pretty}
.qa__a p+p{margin-top:13px}
.qa[hidden]{display:none}
/* la pregunta abierta manda; las demás bajan */
.faq__list:has(.qa[open]) .qa:not([open]) .qa__q{color:var(--white-soft);opacity:.65}
.qa__a{animation:qaIn .18s var(--ease)}
@keyframes qaIn{from{opacity:0}to{opacity:1}}
/* Las últimas preguntas viven detrás de este botón. Nueve preguntas
   abiertas en fila convierten el final de la home en un documento, y
   dejaban la columna del costado —título y firma— flotando arriba de
   media pantalla vacía. El botón se dibuja como una fila más de la
   lista, no como un botón puesto encima: es la que sigue. */
.faq__more{
  display:block;width:100%;text-align:left;cursor:pointer;background:none;
  border:0;border-bottom:1px solid var(--border-dark);
  padding:clamp(18px,2vw,24px) 0;
  font-family:var(--f-ui);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--radio-gold);transition:color .3s var(--ease);
}
.faq__more:hover{color:var(--white-main)}
.faq__more[hidden]{display:none}

/* ══════════════════ MÓDULO 6 — CLUB ══════════════════ */
/* Fondo neutro, no el negro cálido: una tele sin señal no tira temperatura.
   El rojo del botón y el dorado del volante siguen siendo de la marca. */
.club{position:relative;padding:var(--pad-sec-corta) var(--gut);overflow:hidden;background:var(--black)}
/* Interferencia: la señal que se pierde.
   Ruido de televisión sin señal. Antes esto esperaba una foto
   (club-static.jpg) que era un rectángulo negro, así que la sección se
   veía plana. Ahora se dibuja con feTurbulence —la misma técnica que el
   grano de la página— así que no hay archivo que subir y se ve nítido
   en cualquier pantalla.

   Son tres capas:
     ::before  el ruido, que salta (es lo único que se mueve)
     ::after   las líneas de barrido, quietas
     máscara   apaga el centro, para que el texto se lea igual        */
.club__static{
  position:absolute;inset:0;pointer-events:none;overflow:hidden;
  -webkit-mask-image:radial-gradient(72% 60% at 50% 48%, rgba(0,0,0,.22) 0%, #000 78%);
  mask-image:radial-gradient(72% 60% at 50% 48%, rgba(0,0,0,.22) 0%, #000 78%);
}
.club__static::before{
  content:"";position:absolute;inset:-16%;opacity:.72;
  /* el punto es duro, no gris: la curva discreta del canal alfa deja
     la mayor parte transparente y prende sólo algunos puntos en blanco.
     Con ruido gris parejo la sección se veía como fieltro, no como una
     tele sin señal. */
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260'%3E%3Cfilter id='r'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' numOctaves='1' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='0' intercept='1'/%3E%3CfeFuncG type='linear' slope='0' intercept='1'/%3E%3CfeFuncB type='linear' slope='0' intercept='1'/%3E%3CfeFuncA type='discrete' tableValues='0 0 0 0 0 .25 .7 1'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='260' height='260' filter='url(%23r)'/%3E%3C/svg%3E");
  /* el mosaico se agranda para que cada punto se vea: la tele vieja tiene
     grano gordo, no polvo. `pixelated` es lo que lo hace posible — al
     escalar, el navegador no lo suaviza y el punto sigue siendo duro. */
  background-size:560px 560px;
  image-rendering:pixelated;
  /* se mueve con transform, no con background-position: así lo dibuja
     la placa y no repinta la sección entera en cada cuadro */
  animation:estatica .55s steps(5) infinite;
}
.club__static::after{
  content:"";position:absolute;inset:0;
  background:repeating-linear-gradient(180deg,
    rgba(0,0,0,.42) 0 1px, rgba(0,0,0,0) 1px 3px);
}
@keyframes estatica{
  0%{transform:translate(0,0)}      20%{transform:translate(-6%,4%)}
  40%{transform:translate(5%,-5%)}  60%{transform:translate(-4%,-6%)}
  80%{transform:translate(6%,3%)}   100%{transform:translate(0,0)}
}
@media (prefers-reduced-motion:reduce){
  .club__static::before{animation:none}
}
.club__rings{
  position:absolute;left:50%;bottom:-42%;width:min(140vh,150vw);aspect-ratio:1;
  transform:translateX(-50%);pointer-events:none;opacity:.5;
  background:repeating-radial-gradient(circle at 50% 50%, rgba(233,229,222,.10) 0 1px, rgba(233,229,222,0) 1px 74px);
  -webkit-mask-image:radial-gradient(circle at 50% 50%,#000 6%,transparent 62%);
  mask-image:radial-gradient(circle at 50% 50%,#000 6%,transparent 62%);
}
/* el resplandor de abajo era rojo y teñía toda la sección: ahora es la
   misma luz, pero gris, que es lo que da una pantalla sin señal */
.club::before{
  content:"";position:absolute;inset:0;
  background:radial-gradient(70% 120% at 50% 130%, rgba(233,229,222,.07) 0%, rgba(233,229,222,0) 62%);
}
.club__inner{position:relative;max-width:900px;margin:0 auto;text-align:center}
.club__title{
  font-family:var(--f-display);text-transform:uppercase;color:var(--white-main);
  font-size:clamp(28px,4.1vw,54px);line-height:1;letter-spacing:.012em;
}
/* 44ch la partía en dos renglones; con 66 entra en uno solo en
   escritorio y sigue partiendo sola en celular, que es lo correcto */
.club__line{margin:10px auto 0;color:var(--white-soft);max-width:66ch;font-size:clamp(14px,1.4vw,17px)}
.club__form{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;align-items:stretch;margin-top:20px}
.club__form .btn{height:50px;padding:0 30px}
.club__form.is-gone{opacity:0;transition:opacity .18s linear}
/* [hidden] es display:none del navegador, pero display:flex de acá
   arriba le gana: el formulario terminado se apagaba y seguía ocupando
   152px de aire, con la confirmación colgando abajo. Todos los demás
   bloques del sitio con display propio ya tenían su regla; a éste le
   faltaba, y era el único que se ve DESPUÉS de que la persona hizo lo
   que le pedimos. */
.club__form[hidden]{display:none}
/* la confirmación es un momento de la emisión, no un cartel de formulario */
.club__ok{margin-top:36px;display:flex;flex-direction:column;align-items:center;gap:12px}
.club__ok[hidden]{display:none}
.club__ok-t{
  display:inline-flex;align-items:center;gap:10px;
  font-family:var(--f-ui);font-size:11px;letter-spacing:.26em;text-transform:uppercase;
  color:var(--red-bright);
}
.club__ok-dot{width:7px;height:7px;border-radius:50%;background:var(--red-bright);animation:okPulse 1s var(--ease) 2}
@keyframes okPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.7)}}
.club__ok-l{
  font-family:var(--f-display);text-transform:uppercase;letter-spacing:.02em;
  font-size:clamp(22px,3vw,44px);line-height:1;color:var(--white-main);
}
.club__form input{
  flex:1 1 320px;max-width:420px;background:rgba(7,8,8,.5);border:1px solid var(--border-dark);
  height:56px;padding:0 20px;font-family:var(--f-ui);font-size:14px;letter-spacing:.06em;
  transition:border-color .3s var(--ease);
}
.club__form input::placeholder{color:var(--gray-muted)}
.club__form input:focus{border-color:var(--radio-gold);outline:none}
.club__form input[aria-invalid="true"]{border-color:var(--red-bright)}
.club__status{min-height:1.4em;margin-top:8px;font-family:var(--f-ui);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--white-soft)}

/* ══════════════════ FOOTER ══════════════════ */
.foot{border-top:1px solid var(--border-dark);padding:var(--pad-sec-corta) 0;background:var(--black)}
/* Cuando está el club, el filete sobra: el bloque de ruido ya corta solo
   contra el negro del pie y con la línea encima parecían dos secciones
   peleadas. Donde el club no está —las landings de SEO— el filete se
   queda, que ahí sí separa el contenido del pie.
   Va con :has() y no con `.club + .foot`: en la home el club vive
   adentro de <main> y el pie afuera, así que no son hermanos. */
body:has(.club) .foot{border-top:0}
/* El pie es navegación de verdad: columnas por tema, no una fila
   de links sueltos. Es también donde un buscador entiende cómo se
   relacionan las páginas entre sí. */
/* con el gutter adentro y no en .foot, el texto del pie arranca en la
   misma columna que el de todas las secciones. Antes empezaba 40px más a
   la izquierda y era lo único desalineado de la página. */
.foot__inner{
  max-width:var(--max);margin:0 auto;padding:0 var(--gut);
  /* La columna de la marca pide su ancho: a 1fr medía 291px, menos que en
     mobile, y el logo quedaba más chico en la pantalla grande que en la
     chica. (Antes también llevaba el nombre en versales debajo; hoy es
     sólo el logo, pero el ancho sigue haciendo falta.) */
  display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,3.2fr);
  gap:clamp(30px,5vw,72px);align-items:start;
}
.foot__marca{display:flex;flex-direction:column;gap:12px}
/* Sólo la marca dibujada. Antes iba con el nombre en versales debajo y
   la ciudad; ahora el logo va solo y lleva a la home, así que el alt dice
   el nombre —es lo único que queda para el lector de pantalla y para el
   buscador—. */
.foot__mark-link{display:block}
.foot__mark{
  /* Ocupa el ancho de su columna. Antes tenía un ancho fijo y en pantalla
     grande quedaba flotando chiquito en un espacio enorme. */
  width:100%;height:auto;
  opacity:.92;transition:opacity .25s var(--ease);
}
.foot__mark-link:hover .foot__mark{opacity:1}
.foot__cols{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:26px clamp(18px,2.4vw,36px);
}
.foot__h{
  font-family:var(--f-ui);font-weight:500;font-size:10px;letter-spacing:.26em;
  text-transform:uppercase;color:var(--radio-gold);margin-bottom:13px;
}
.foot__col ul{list-style:none;display:grid;gap:9px}
.foot__col a{
  font-family:var(--f-ui);font-size:12.5px;letter-spacing:.08em;
  color:var(--white-soft);transition:color .25s var(--ease);
}
.foot__col a:hover{color:var(--radio-gold)}

@media (max-width:1180px){
  .foot__cols{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:1000px){
  .foot__inner{grid-template-columns:1fr;gap:34px}
  .foot__cols{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 20px}
}
@media (max-width:460px){
  .foot__cols{grid-template-columns:1fr;gap:24px}
}
/* La línea legal: copyright, ciudad y privacidad. Cruza todo el ancho
   debajo de las columnas, separada por una regla fina. En pantalla chica
   se apila y los separadores se van, que sueltos no dicen nada. */
.foot__legal{
  grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:9px;
  margin-top:clamp(38px,5vw,62px);padding-top:22px;
  border-top:1px solid var(--border-dark);
  font-family:var(--f-ui);font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gray-muted);
}
.foot__legal a{color:var(--gray-muted);transition:color .25s var(--ease)}
.foot__legal a:hover,.foot__legal a:focus-visible{color:var(--radio-gold)}
@media (max-width:560px){
  .foot__legal{flex-direction:column;align-items:flex-start;gap:7px}
  .foot__legal span[aria-hidden]{display:none}
}
.foot__links a{font-family:var(--f-ui);font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--white-soft);transition:color .3s var(--ease)}
.foot__links a:hover{color:var(--radio-gold)}

/* ══════════════════ REVEALS ══════════════════ */
.reveal{opacity:0;transform:translateY(26px);transition:opacity 1s var(--ease),transform 1s var(--ease)}
.reveal.is-in{opacity:1;transform:none}

/* ══════════════════ SIN FOTO TODAVÍA ══════════════════ */
.about__media.is-empty{display:none}
.about__grid:has(.about__media.is-empty){grid-template-columns:minmax(0,1fr)}
.about__grid:has(.about__media.is-empty) .about__text{
  columns:2;column-gap:clamp(30px,5vw,80px);
}
.about__grid:has(.about__media.is-empty) .about__text p{max-width:44ch;break-inside:avoid}

/* ══════════════════ RESPONSIVE ══════════════════ */
/* en pantallas muy angostas un CTA largo no entra en una línea: antes de
   desbordar la página, que envuelva. */
@media (max-width:430px){
  .btn{white-space:normal;text-align:center;padding-left:18px;padding-right:18px}
}

@media (max-width:1100px){
  .hero__inner{grid-template-columns:1fr;align-items:end;gap:26px}
  .hero{min-height:auto;padding:100px 0 44px}
  /* En una columna: primero quién es —el logotipo y las dos líneas que
     dicen qué es esto—, después el receptor para escucharlo, y abajo la
     franja de temas. Antes el receptor iba primero y aparecía una radio
     sin decir de qué. minmax(0,1fr) y no 1fr: con 1fr la columna no
     puede bajar del min-content del receptor (~330px) y en pantallas de
     320-370 los paneles se salían del gutter y quedaban cortados. */
  /* En el teléfono el hero mide 420x1301 —lo estiran el mensaje, el receptor
     y la franja— y con `cover` la imagen se agranda tres veces para llenarlo:
     sólo se ve el 18% de su ancho, o sea un primerísimo plano de la cabeza.
     Acá el fondo deja de ocupar el alto entero y se queda con la franja de
     arriba, donde `cover` le recorta poco y la figura entra completa.
     La altura propia es además lo que hace que el degradado funcione: con
     inset:0 la máscara se repartía sobre los 1301px de la caja mientras la
     foto terminaba a los 512, así que el corte quedaba a la vista. */
  .hero__bg{
    bottom:auto;height:min(64vh,600px);
    -webkit-mask-image:linear-gradient(180deg,#000 58%,transparent 100%);
    mask-image:linear-gradient(180deg,#000 58%,transparent 100%);
  }
  .hero__grid{grid-template-columns:minmax(0,1fr);gap:14px}
  /* En el teléfono la radio va ARRIBA. Es lo único de la home con lo
     que se puede hacer algo sin scrollear, y el logotipo con la bajada
     la empujaba abajo del pliegue. */
  .panel--rx{order:0}
  .hero__msg{order:1;padding-right:0}
  .strip{order:2;margin-top:clamp(18px,4vw,26px)}
  .hero__lead{max-width:none;font-size:clamp(16px,4.2vw,20px)}
  .hero__line{max-width:none}
  .strip__list{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tk__item:nth-child(odd){border-right:1px solid rgba(233,229,222,.08)}
  .tk__item{border-bottom:1px solid rgba(233,229,222,.08)}
  .tk__item:nth-last-child(-n+1){border-bottom:0}
  .tk__item:last-child{grid-column:1/-1}
  .faq__inner{grid-template-columns:1fr;gap:32px}
  .faq__aside{position:static}
}
@media (max-width:1000px){
  .film{flex-basis:calc((100% - clamp(14px,1.5vw,24px)) / 2)}
  .nav__links,.nav__cta{display:none}
  .nav__burger{display:block}
  .about__grid{grid-template-columns:minmax(0,1fr);gap:30px}
  /* min-height:280 + aspect-ratio le daba un ancho mínimo de 407px: en una
     columna de 371 se desbordaba y la home se scrolleaba de costado. */
  .about__media{aspect-ratio:16/11;max-width:560px;min-height:0}
  .hero__scroll{display:none}
}
/* ── mobile: el hero traía demasiado aire y empujaba el dial y los
      botones abajo del pliegue. Se comprime sin tocar nada más. ── */
@media (max-width:860px){
  /* El aire de abajo separa el último botón de la marquesina. Con 26px
     casi se tocaban: en escritorio esa distancia es de 172, y en el
     teléfono quedaba el texto pegado a una franja que además se mueve. */
  .hero{padding:88px 0 clamp(44px,9vw,68px)}
  .hero__grid{gap:10px}
  .strip__head{padding:11px var(--gut) 9px}
  .hero__title{margin-top:10px}
  .hero__lead{margin-top:13px}
  .hero__actions{margin-top:16px}
  .hero__plat{margin-top:14px}
  .shead{margin-bottom:18px}
}

@media (max-width:860px){
  .film{flex-basis:82%}
  .sea{grid-template-columns:1fr}
  .sea__num{
    grid-column:1;margin:0 0 -.2em 4px;font-size:clamp(84px,23vw,140px);
    color:var(--white-main);-webkit-text-stroke:0;
  }
  .sea--s01 .sea__num{color:transparent;-webkit-text-stroke:2px var(--border-light)}
  .sea__card{width:min(78vw,336px)}
  .sea__base{grid-column:1;max-width:min(78vw,336px)}
  .rail__track{gap:22px;scroll-padding-left:var(--gut)}
}
@media (max-width:680px){
  .film{flex-basis:82%}
  .films__row{gap:16px}
  .faq__still{display:none}
  /* En el teléfono el receptor entra justo y el UP NEXT es lo primero
     que sobra: dice qué sigue, que se va a ver igual cuando siga. Se
     esconde, no se borra: radio.js le sigue escribiendo el nombre y en
     pantalla grande está. */
  .rx__next{display:none}
  .hero{padding-top:100px}
  /* dónde escucharlo, sin convertirlo en una fila de logos */
.hero__plat,.hero__plat-extra{
  display:flex;align-items:center;flex-wrap:wrap;gap:8px 16px;
  font-family:var(--f-ui);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;
}
.hero__plat{margin-top:18px}
.hero__plat-l{color:var(--gray-muted)}
.hero__plat [hidden]{display:none}
.hero__plat-more{
  cursor:pointer;background:none;border:0;padding:0 0 3px;
  font:inherit;letter-spacing:inherit;text-transform:inherit;
  color:var(--radio-gold);border-bottom:1px solid transparent;
  transition:color .3s var(--ease),border-color .3s var(--ease);
}
.hero__plat-more:hover{color:var(--white-main);border-bottom-color:var(--radio-gold)}
.hero__plat a{
  color:var(--white-soft);padding-bottom:3px;border-bottom:1px solid rgba(233,229,222,.22);
  transition:color .3s var(--ease),border-color .3s var(--ease);
}
.hero__plat a:hover{color:var(--white-main);border-bottom-color:var(--radio-gold)}
  /* Los enlaces del hero NO se estiran al ancho de la pantalla: el
     filete es un subrayado y estirado de borde a borde se leía como
     una línea divisoria. Se apilan centrados y cada uno mide lo que
     mide su texto. */
  .hero__actions{flex-direction:column;align-items:center;gap:6px}
  .hero__actions .btn{flex:0 0 auto;width:auto;padding:14px 2px 9px}
  .hero{padding-top:92px}
  .hero__title img{max-width:100%}
  .hero__actions .btn{flex:1 1 100%}
  .panel--rx{padding:16px 16px 18px}
  /* la franja pasa a scroll horizontal: se ve que hay más temas */
  .strip__list{
    display:flex;overflow-x:auto;scroll-snap-type:x mandatory;
    scrollbar-width:none;-webkit-overflow-scrolling:touch;
  }
  .strip__list::-webkit-scrollbar{display:none}
  .tk__item{flex:0 0 58%;scroll-snap-align:start;border-bottom:0;border-right:1px solid rgba(233,229,222,.08)}
  .tk__item:last-child{grid-column:auto;border-right:0}
  .track a{grid-template-columns:auto 1fr auto;gap:16px;padding:14px 4px}
  .track__play{width:30px;height:30px}
  .qa__a{padding-left:0;padding-right:0}
  .about__grid:has(.about__media.is-empty) .about__text{columns:1}
}

/* ══════════════════ MOVIMIENTO REDUCIDO ══════════════════ */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition-duration:.01ms!important}
  .reveal{opacity:1;transform:none}
}

/* ══════════════════ DOCK — la transmisión sigue ══════════════════
   Al bajar, el receptor se despega del hero y queda abajo.
   La radio no se corta porque dejaste de mirarla. */
.dock{
  position:fixed;left:0;right:0;bottom:0;z-index:60;
  background:rgba(7,8,8,.93);border-top:1px solid var(--border-dark);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:0 -24px 60px -30px #000;
  animation:dockIn .5s var(--ease) both;
}
.dock[hidden]{display:none}
@keyframes dockIn{from{transform:translateY(100%)}to{transform:none}}
/* el pie no queda tapado: el dock es fijo y el footer va después de main */
.has-dock body{padding-bottom:56px}

.dock__inner{
  max-width:var(--max);margin:0 auto;padding:0 var(--gut);
  height:56px;display:flex;align-items:center;gap:clamp(14px,2vw,30px);
}
.dock__on{
  flex:none;display:flex;align-items:center;gap:9px;
  font-family:var(--f-ui);font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--gray-muted);
}
.rx-playing .dock__on-t{color:var(--red-bright)}
.dock__f{color:var(--radio-gold)}
.dock__f b{font-weight:500;font-variant-numeric:tabular-nums}

.dock__now{flex:1 1 auto;min-width:0;display:flex;align-items:baseline;gap:12px}
.dock__name{
  font-family:var(--f-display);text-transform:uppercase;letter-spacing:.02em;
  font-size:clamp(15px,1.4vw,20px);line-height:1;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.dock__ctrl{flex:none;display:flex;align-items:stretch;gap:7px;height:32px}
.dock__play{
  width:38px;height:32px;flex:none;cursor:pointer;position:relative;
  border:1px solid rgba(233,229,222,.28);background:rgba(233,229,222,.06);
  display:flex;align-items:center;justify-content:center;
  transition:background .3s var(--ease),border-color .3s var(--ease);
}
.dock__play:hover{background:var(--red-main);border-color:var(--red-main)}
.dock__play:hover .rx__play-i{border-left-color:#fff}
.dock .rx__step{width:38px}
.dock__x{
  width:28px;height:28px;align-self:center;cursor:pointer;position:relative;margin-left:4px;
  border:1px solid transparent;background:none;transition:border-color .3s var(--ease);
}
.dock__x:hover{border-color:var(--border-light)}
.dock__x::before,.dock__x::after{
  content:"";position:absolute;left:50%;top:50%;width:11px;height:1px;background:var(--gray-muted);
}
.dock__x::before{transform:translate(-50%,-50%) rotate(45deg)}
.dock__x::after{transform:translate(-50%,-50%) rotate(-45deg)}
.dock__x:hover::before,.dock__x:hover::after{background:var(--white-main)}

@media (max-width:860px){
  .dock__inner{height:56px;gap:12px}
  .dock__f{display:none}
  .has-dock body{padding-bottom:58px}
}
@media (max-width:480px){
  .dock .rx__step{display:none}
}
@media (prefers-reduced-motion:reduce){
  .dock{animation:none}
}

/* ══════════════════ VISOR DE VIDEO ══════════════════
   El video se abre encima de la página. Nunca te saca del sitio. */
.viewer{
  width:100vw;max-width:100vw;height:100vh;max-height:100vh;
  padding:clamp(16px,4vw,56px);margin:0;border:0;background:transparent;color:var(--white-main);
  display:none;flex-direction:column;align-items:center;justify-content:center;gap:clamp(12px,1.6vw,20px);
  overflow:hidden;
}
.viewer[open]{display:flex}
.viewer::backdrop{background:rgba(4,4,5,.94);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.viewer[open]{animation:viewerIn .38s var(--ease)}
@keyframes viewerIn{from{opacity:0;transform:scale(.985)}to{opacity:1;transform:none}}

.viewer__box{
  width:min(1360px,100%);max-height:78vh;aspect-ratio:16/9;
  background:#000;box-shadow:0 60px 140px -40px #000;position:relative;
}
.viewer__stage{position:absolute;inset:0}
.viewer__stage video,.viewer__stage iframe{
  position:absolute;inset:0;width:100%;height:100%;border:0;display:block;background:#000;
}
.viewer__cap{
  font-family:var(--f-display);text-transform:uppercase;letter-spacing:.02em;
  font-size:clamp(18px,2vw,30px);line-height:1;color:var(--white-soft);
}
.viewer__x{
  position:fixed;top:clamp(14px,2vw,26px);right:clamp(14px,2vw,26px);z-index:3;
  width:46px;height:46px;cursor:pointer;
  border:1px solid rgba(233,229,222,.3);background:rgba(7,8,8,.6);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  transition:background .3s var(--ease),border-color .3s var(--ease);
}
.viewer__x:hover{background:var(--radio-gold);border-color:var(--radio-gold)}
.viewer__x::before,.viewer__x::after{
  content:"";position:absolute;left:50%;top:50%;width:16px;height:1px;background:var(--white-main);
}
.viewer__x::before{transform:translate(-50%,-50%) rotate(45deg)}
.viewer__x::after{transform:translate(-50%,-50%) rotate(-45deg)}

@media (max-width:680px){
  .viewer{padding:14px}
  .viewer__box{max-height:none}
  .viewer__cap{font-size:16px}
}
@media (prefers-reduced-motion:reduce){
  .viewer[open]{animation:none}
}



/* ══════════════════════════════════════════════════════════
   MÓDULO 4 — ÚLTIMOS LANZAMIENTOS
   Reemplaza a la videoteca de la temporada. Es cronológico y
   transversal: hoy son tres piezas de S02, mañana puede haber
   una de otra temporada. Tres como máximo — la home es una
   portada, no el archivo de un universo.
   ══════════════════════════════════════════════════════════ */
.latest{position:relative;padding:var(--pad-sec) 0;background:var(--black)}
.latest__inner{max-width:var(--max);margin:0 auto;padding:0 var(--gut)}
.latest__inner .shead{max-width:none;padding:0}

/* Cuatro en la home. Con tres columnas la cuarta caía sola en una segunda
   fila y se leía como un sobrante; en cuatro entran las cuatro en una línea.
   Las páginas de temporada listan todo lo suyo y siguen envolviendo solas. */
/* ── NOVEDADES: cuatro novedades en fila ─────────────────────────────
   Las cuatro miden lo mismo. La destacada se distingue por el cartel
   de su tipo en rojo y no por el ancho: cuando era un 15% más ancha,
   su tapa cuadrada quedaba 44px más alta que las otras y los títulos
   de la fila no alineaban entre sí. La jerarquía por color no cuesta
   alineación; la jerarquía por tamaño sí.

   El newsletter no está acá: es el bloque del final de la home. Un
   formulario no tiene tapa, así que dentro de una fila de tarjetas
   con imagen siempre iba a ser el elemento raro. */
/* El título a la izquierda y el formulario a la derecha, en el mismo
   renglón. Alineados por abajo: así la bajada "Lo último que salió al
   aire" y el campo del mail comparten línea de base. */
.latest__head{
  display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
  gap:clamp(20px,3vw,48px);
}
/* margin:0 y no margin-bottom:0. .shead trae "margin:0 auto" para
   centrarse cuando va solo; acá es un ítem de flex, y un margen auto
   se come todo el espacio libre: el título se iba a la derecha y
   quedaba desalineado de la fila de tarjetas de abajo. */
.latest__head .shead{margin:0}
/* ── LA ANTENA ───────────────────────────────────────────────────
   Misma caja que el receptor: hereda .panel y .panel--rx en el HTML,
   así que el fondo, el borde dorado y el desenfoque no se repiten acá.
   Lo único propio es lo de adentro, y hasta eso copia las medidas del
   receptor —el mismo alto de cabecera, la misma ventanita hundida, el
   mismo botón— para que los dos aparatos se lean como el mismo equipo.

   No alinea a la derecha como antes: ahora es una caja con borde, y
   una caja ya cierra sola contra el borde de la fila de tarjetas. */
.nclub{
  flex:0 1 clamp(300px,32vw,420px);min-width:0;
  padding:clamp(15px,1.4vw,20px);
}
/* La cabecera del receptor, con las mismas medidas: 10px, .24em y el
   filete dorado abajo. */
.nclub__head{
  display:flex;align-items:center;gap:10px;margin:0;
  font-family:var(--f-ui);font-size:10px;letter-spacing:.24em;text-transform:uppercase;
  color:var(--radio-gold);padding-bottom:12px;border-bottom:1px solid rgba(156,118,80,.24);
}
.nclub__on{margin-left:auto;display:inline-flex;align-items:center;gap:7px;color:var(--red-bright)}

/* En columna y no en fila: el botón entero abajo es el de "Encender la
   radio", que es el gesto que esta caja está imitando. Y de paso el
   campo se queda con todo el ancho, que es lo que un mail necesita. */
.nclub__form{display:flex;flex-direction:column;gap:10px;margin-top:14px}

/* La ventanita hundida donde el receptor dice qué está sonando. Acá
   dice tu mail. Mismas medidas y mismo fondo. */
.nclub__box{
  display:block;padding:10px 12px;
  background:rgba(7,8,8,.5);border:1px solid rgba(233,229,222,.07);
  transition:border-color .25s var(--ease);
}
/* El foco se pinta en la ventana y no en el campo: adentro el campo no
   tiene borde propio, así que el anillo del navegador quedaría flotando
   en el aire. El dorado es el mismo que usa el receptor al enfocarse. */
.nclub__box:focus-within{border-color:var(--radio-gold)}
.nclub__label{
  display:block;font-family:var(--f-ui);font-size:9.5px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--gray-muted);margin-bottom:5px;
}
/* Sin mayúsculas ni tipografía de display, al revés que el nombre del
   tema en el receptor: un mail se escribe en minúscula y hay que poder
   releerlo antes de mandarlo. */
.nclub__form input{
  display:block;width:100%;padding:0;border:0;background:none;
  color:var(--white-main);font:inherit;font-size:15px;line-height:1.3;
}
.nclub__form input::placeholder{color:var(--gray-muted)}
.nclub__form input:focus{outline:none}
.nclub__form input[aria-invalid="true"]{color:var(--red-bright)}

/* El botón de encender la radio, con el mismo triángulo rojo que se
   pone blanco cuando el fondo se llena. */
.nclub__go{
  display:flex;align-items:center;justify-content:center;gap:9px;
  width:100%;padding:12px 13px;cursor:pointer;
  border:1px solid rgba(233,229,222,.22);background:rgba(7,8,8,.45);
  font-family:var(--f-ui);font-weight:500;font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--white-main);
  transition:background .3s var(--ease),border-color .3s var(--ease);
}
.nclub__go:hover,.nclub__go:focus-visible{background:var(--red-ink);border-color:var(--red-ink)}
.nclub__go:hover .rx__play-i,.nclub__go:focus-visible .rx__play-i{border-left-color:#fff}
.nclub__go[disabled]{opacity:.5;cursor:default}
.nclub__go[disabled]:hover{background:rgba(7,8,8,.45);border-color:rgba(233,229,222,.22)}

/* Vacío no ocupa: la antena es una caja de flex, y un <p> sin texto
   pero con margen dejaba 65px de aire entre el botón y el borde de
   abajo. Con el mensaje puesto vuelve a aparecer solo. */
.nclub__status:empty{display:none}
.nclub__status:not(:empty){
  margin-top:10px;font-family:var(--f-ui);font-size:10px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--radio-gold);
}
/* La confirmación, adentro de la caja. El bloque grande del pie la
   centra y la pone en 44px porque ahí ocupa el ancho de la página;
   acá vive en una columna de 400px y al lado de una cabecera alineada
   a la izquierda, así que se alinea igual y baja de cuerpo. */
.nclub__ok{margin-top:14px;align-items:flex-start;gap:9px;text-align:left}
.nclub__ok .club__ok-l{font-size:clamp(21px,1.9vw,27px);line-height:1.04}
.nclub__ok .club__ok-t{font-size:10px;letter-spacing:.24em}
.nclub__ok[hidden]{display:none}
/* Se apila a 1000 y no a 760: entre medio la antena entraba al lado del
   título pero quedaba de 280px, demasiado angosta para una caja con
   cabecera, ventana y botón adentro. Apilada tiene su ancho entero. */
@media (max-width:1000px){
  .latest__head{display:block}
  .nclub{margin-top:24px;max-width:420px}
}

.latest__row{
  list-style:none;margin-top:clamp(26px,4vh,44px);
  display:grid;gap:clamp(16px,1.8vw,26px);
  grid-template-columns:repeat(4,minmax(0,1fr));
}

@media (max-width:1180px){ .latest__row{grid-template-columns:repeat(2,minmax(0,1fr))} }
/* El título acompaña al tamaño de la tarjeta, y la tapa se recorta un
   poco menos alta: más ancha con el mismo alto se veía estirada. */
.lanz--fijada .lanz__t{font-size:clamp(19px,2.1vw,25px)}
.lanz--fijada .lanz__tag{background:var(--red-ink);color:#fff;border-color:var(--red-ink)}
.lanz{min-width:0}
/* Las tarjetas de una fila miden todas lo mismo y su acción queda
   siempre abajo. Sin esto, una que trae una línea de más —"Hecho con
   IA." en Money Guy— crecía y dejaba la fila despareja, con el borde y
   el REPRODUCIR más bajos que los de al lado. La S02 se veía bien de
   casualidad: ninguno de sus videos tiene nota. */
.lanz{display:flex}
.lanz__card{display:flex;flex-direction:column;width:100%;position:relative}
.lanz__foot{flex:1;display:flex;flex-direction:column}

.lanz__media{
  display:block;position:relative;aspect-ratio:16/9;overflow:hidden;
  background:var(--black-card) 50% 50%/cover no-repeat;
  border:1px solid var(--border-dark);
  transition:border-color .3s var(--ease);
}

/* En NOVEDADES conviven tapas de álbum (cuadradas) y capturas de video
   (16:9). Con el marco apaisado la tapa se recortaba, y la tapa es lo
   que más importa. Así que el marco pasa a ser cuadrado:

     · la tapa entra justa y se ve entera;
     · la captura de video se muestra completa, sin recortar, con bandas
       negras arriba y abajo — como en una tele.

   No pasa en la grilla de videos de una temporada (--temp), donde son
   todos videos y el apaisado es lo correcto. */
.latest__row .lanz__media{
  aspect-ratio:1;
  background-color:#000;background-size:contain;
}
.latest__row .lanz__media--art{background-size:cover;background-position:50% 50%}
.latest__row--temp .lanz__media{
  aspect-ratio:16/9;background-color:var(--black-card);background-size:cover;
}
.lanz__card:hover .lanz__media{border-color:var(--border-light)}
.lanz__media::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(7,8,8,0) 40%,rgba(7,8,8,.55) 100%);
}

/* Qué es la novedad —ÁLBUM, VIDEO OFICIAL— sobre la tapa y no en una línea
   de metadatos abajo: se sabe antes de leer el título, y la ficha de abajo
   queda igual para todas. Va sobre el degradado, por eso el z-index. */
.lanz__tag{
  position:absolute;z-index:1;top:10px;right:10px;
  padding:5px 9px 4px;
  font-family:var(--f-ui);font-weight:500;font-size:9.5px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--white-main);
  background:rgba(7,8,8,.72);border:1px solid var(--border-light);
  backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  transition:border-color .3s var(--ease),color .3s var(--ease);
}
.lanz__card:hover .lanz__tag{border-color:var(--radio-gold);color:#fff}

.lanz__foot{margin-top:14px}
.lanz__tipo{
  display:block;font-family:var(--f-ui);font-weight:500;font-size:10px;
  letter-spacing:.24em;text-transform:uppercase;color:var(--radio-gold);
}
.lanz__tipo i{font-style:normal;color:var(--border-light);margin:0 5px}
.lanz__t{
  display:block;margin-top:7px;
  font-family:var(--f-display);text-transform:uppercase;
  font-size:clamp(19px,2.1vw,27px);line-height:1.08;color:var(--white-main);
}
.lanz__c{
  display:block;margin-top:auto;padding-top:7px;font-family:var(--f-ui);font-size:11px;
  letter-spacing:.18em;text-transform:uppercase;color:var(--gray-muted);
  transition:color .25s var(--ease);
}
.lanz__card:hover .lanz__c{color:var(--white-soft)}

@media (max-width:900px){
  .latest__row{grid-template-columns:1fr;gap:26px}
  .lanz__media{aspect-ratio:16/10}
  /* en una sola columna el cuadrado ocuparía media pantalla por tarjeta */
  .latest__row .lanz__media{aspect-ratio:4/3}
}


/* ── "Empezá por acá": tres señales para entrar, no el tracklist ── */
.empeza{list-style:none;margin-top:4px}
/* padding:0 a propósito: .modal__tracks li ya le mete 10px arriba y abajo
   y se sumaban a los del enlace. Entre las dos reglas cada fila llevaba
   38px de aire vertical. El que manda es el del <a>, que es el área
   clickeable. */
.empeza li{border-top:1px solid var(--border-dark);padding:0}
.empeza li:last-child{border-bottom:1px solid var(--border-dark)}
.empeza a{
  display:flex;align-items:center;gap:14px;padding:9px 0;
  transition:padding-left .25s var(--ease);
}
.empeza a:hover{padding-left:8px}
.empeza .tk-n{flex:none;width:26px}
.empeza .tk-t{flex:1 1 auto;min-width:0}
.empeza .tk-ir{margin-left:auto}
.tk-ir{
  flex:none;font-family:var(--f-ui);font-weight:500;font-size:10.5px;
  letter-spacing:.2em;text-transform:uppercase;color:var(--gray-muted);
  transition:color .25s var(--ease);
}
.tk-ir i{font-style:normal;margin-left:5px}
.empeza a:hover .tk-ir{color:var(--radio-gold)}

.modal__pie{
  margin-top:16px;font-family:var(--f-ui);font-size:11px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gray-muted);
}
.modal__pie a{border-bottom:1px solid rgba(233,229,222,.28)}
.modal__pie a:hover{color:var(--white-main);border-bottom-color:var(--radio-gold)}


/* ── receptor: el enlace al tema sintonizado en todas las plataformas.
      Reemplaza a la línea estática que decía "La Frecuencia · S02".
      El botón de play sigue siendo el que reproduce el adelanto. ── */
/* la bajada de una novedad, cuando la tiene */
.lanz__d{
  display:block;margin-top:6px;font-size:13.5px;line-height:1.5;
  color:var(--gray-muted);
}
.lanz__f{
  display:block;margin-top:8px;font-family:var(--f-ui);font-size:10px;
  letter-spacing:.18em;text-transform:uppercase;color:var(--border-light);
}

/* AVISO DE "LINK COPIADO" ─────────────────────────────────
   Copiar al portapapeles no se ve. En /radio/ el aviso vive
   dentro del bloque de compartir; en el resto del sitio no hay
   dónde ponerlo, así que compartir.js arma este. Va por encima
   del dock, no tapa nada y no se puede clickear. */
.copiado-flash{
  position:fixed;left:50%;bottom:clamp(76px,10vh,108px);z-index:80;
  transform:translate(-50%,10px);opacity:0;pointer-events:none;
  margin:0;padding:11px 18px;
  border:1px solid var(--radio-gold);background:var(--black-card);
  font-family:var(--f-ui);font-weight:500;font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--white-main);white-space:nowrap;max-width:92vw;
  transition:opacity .2s var(--ease),transform .2s var(--ease);
}
.copiado-flash.is-in{opacity:1;transform:translate(-50%,0)}
@media (prefers-reduced-motion:reduce){
  .copiado-flash{transition:opacity .2s linear;transform:translate(-50%,0)}
}
