/* ═══════════════════════════════════════════════════════════════════
   gigolosos — ficha de perfil.

   Composición editorial asimétrica: la fotografía ocupa la columna
   ancha y se queda quieta mientras la columna de datos scrollea. El
   nombre entra grande, en serif, como titular de revista.

   El tarifario es la pieza firma: matriz duración × modalidad, cifras
   tabulares, filetes en vez de cajas. Es el dato más consultado.
   ═══════════════════════════════════════════════════════════════════ */

.ficha {
  padding-top: var(--e-8);
  /* Espacio para la barra de contacto fija del móvil. */
  padding-bottom: var(--e-32);
}
@media (min-width: 900px) { .ficha { padding-bottom: var(--aire); } }

.ficha__cuerpo {
  display: grid;
  gap: var(--aire-corto);
  align-items: start;
}

/* La columna de fotografía es la ancha. El literal del breakpoint es el
   punto donde el tarifario deja de apretarse en la columna angosta;
   las media queries no leen custom properties. */
@media (min-width: 900px) {
  .ficha__cuerpo {
    grid-template-columns: minmax(0, 1.02fr) minmax(0, 1fr);
    gap: var(--e-16);
  }
  .ficha__galeria {
    position: sticky;
    top: var(--e-16);
  }
}


/* ── Galería ──────────────────────────────────────────────────────── */

.galeria__principal {
  position: relative;
  overflow: hidden;
  border-radius: var(--radio-2);
  background: var(--carbon);
  box-shadow: var(--sombra-3);
}
.galeria__principal::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  border-radius: inherit;
  box-shadow: inset 0 0 0 1px var(--filete);
  pointer-events: none;
}
/* `height: auto` NO es decorativo y no se puede sacar.

   Los atributos width/height del <img> no son solo metadatos: el HTML los
   mapea a las propiedades CSS `width` y `height` como pistas de presentación.
   La regla de autor de acá pisa el `width`, pero si no declara `height` la
   pista gana y la imagen queda con la altura EN PIXELES del archivo —2000 px
   para una foto vertical—. Con ancho y alto definidos, `aspect-ratio` deja de
   aplicar, y `object-fit: cover` recorta los costados para llenar esa caja
   altísima: las fotos se ven como tiras verticales.

   Pasó exactamente eso el 10/08/2026, al agregar width/height a la ficha para
   evitar el salto de maquetación. `height: auto` devuelve el control a
   `aspect-ratio` y conserva el beneficio de reservar el espacio. */
.galeria__principal img {
  width: 100%;
  height: auto;
  aspect-ratio: var(--ratio-ficha);
  object-fit: cover;
}

.galeria__vacia {
  display: grid;
  place-items: center;
  aspect-ratio: var(--ratio-ficha);
  background: var(--sup-1);
}
.galeria__vacia span {
  font-family: var(--serif);
  font-size: var(--t-hero);
  line-height: 1;
  color: var(--humo-tenue);
}

.galeria__aviso {
  margin-top: var(--e-3);
  color: var(--humo);
  font-size: var(--t-meta);
}

.galeria__tira {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr));
  gap: var(--e-2);
  margin-top: var(--e-2);
}

.galeria__miniatura {
  position: relative;
  display: block;
  width: 100%;
  padding: 0;
  overflow: hidden;
  border: 0;
  border-radius: var(--radio);
  background: var(--carbon);
  cursor: pointer;
  transition: transform var(--trans-media), box-shadow var(--trans-media);
}
.galeria__miniatura::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  border-radius: inherit;
  box-shadow: inset 0 0 0 1px var(--filete);
  transition: box-shadow var(--trans-rapida);
}
/* Mismo motivo que arriba: sin `height: auto` la pista de presentación del
   atributo manda y la miniatura se estira a la altura del archivo. */
.galeria__miniatura img {
  width: 100%;
  height: auto;
  aspect-ratio: var(--ratio-retrato);
  object-fit: cover;
  transition: transform var(--trans-lenta);
}
.galeria__miniatura:hover {
  transform: translateY(calc(var(--alza-2) * -1));
  box-shadow: var(--sombra-2);
}
.galeria__miniatura:hover::before { box-shadow: inset 0 0 0 1px var(--filete-oro); }
.galeria__miniatura:hover img { transform: scale(var(--zoom-foto)); }

/* ── Video en la galería ──────────────────────────────────────────── */

/* La miniatura de un video es el póster del perfil, así que sin este
   distintivo es indistinguible de una foto y nadie le da clic. El triángulo
   va en un disco de vidrio, que es el mismo material de las señales sobre
   fotografía — no un botón relleno de color, que sería un acento nuevo sin
   función nueva. */
.galeria__miniatura--video .galeria__play {
  position: absolute;
  z-index: 3;
  inset: 0;
  margin: auto;
  width: var(--e-10);
  height: var(--e-10);
  display: grid;
  place-items: center;
  padding-left: .12em;          /* el glifo ▶ carga a la izquierda */
  border-radius: var(--radio-pastilla);
  background: var(--vidrio-denso);
  -webkit-backdrop-filter: var(--desenfoque);
  backdrop-filter: var(--desenfoque);
  box-shadow: inset 0 0 0 var(--grosor-filete) var(--filete-vivo);
  color: var(--hueso);
  font-size: var(--t-menor);
  line-height: 1;
}

/* La celda de un video sin ninguna foto detrás: el póster no existe y el
   fondo del botón queda a la vista. */
.galeria__miniatura--video { aspect-ratio: var(--ratio-retrato); }

/* Reproductor en el lugar de la imagen grande, para el perfil que tiene
   video y ninguna foto. `contain` y no `cover`: recortar un video para que
   calce en la proporción de la ficha le corta la cabeza a quien salga. */
.galeria__reproductor {
  width: 100%;
  height: auto;
  max-height: 80svh;
  aspect-ratio: var(--ratio-ficha);
  object-fit: contain;
  background: var(--tinta-0);
  border-radius: var(--radio-2);
}


/* ── Encabezado de la ficha ───────────────────────────────────────── */

.ficha__señales {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-2);
  margin-bottom: var(--e-4);
}
/* En la ficha las señales no van sobre fotografía: llevan superficie
   propia en vez de vidrio. */
.ficha__señales .senal {
  background: var(--carbon);
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.ficha__nombre {
  font-size: var(--t-titulo);
  letter-spacing: var(--track-titulo);
}

/* Fila de datos clave bajo el nombre, separados por filete vertical.
   Es lo primero que se mira después del nombre. */
.ficha__resumen {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-3) var(--e-5);
  margin-top: var(--e-5);
  padding-top: var(--e-5);
  border-top: var(--borde);
}
.ficha__dato {
  display: grid;
  gap: var(--e-1);
}
.ficha__dato dt {
  color: var(--humo);
  font-size: var(--t-etiqueta);
  font-weight: var(--peso-medio);
  letter-spacing: var(--track-etiqueta);
  text-transform: uppercase;
}
.ficha__dato dd {
  color: var(--hueso);
  font-size: var(--t-dato);
  font-variant-numeric: tabular-nums;
}

.ficha__descripcion {
  max-width: var(--ancho-texto);
  margin-top: var(--e-8);
  color: var(--texto-2);
  line-height: var(--alto-cuerpo);
}
.ficha__descripcion p + p { margin-top: var(--e-4); }

/* La primera letra de la descripción, en serif y a tres líneas. Es un
   recurso de revista y es lo que separa una ficha de una tabla. */
.ficha__descripcion > p:first-child::first-letter {
  float: left;
  margin: .08em .12em 0 0;
  font-family: var(--serif);
  font-size: 3.1em;
  line-height: .82;
  color: var(--hueso);
}


/* ── Tarifario ────────────────────────────────────────────────────────
   Filetes, no cajas. Cifras tabulares para que las columnas alineen a
   la coma. Con un solo tramo la tabla es de una celda y se ve bien.  */

.tarifario {
  width: 100%;
  border-collapse: collapse;
}

.tarifario th,
.tarifario td {
  padding: var(--e-4) var(--e-2);
  border-bottom: var(--borde);
  text-align: right;
}
.tarifario th:first-child,
.tarifario td:first-child { text-align: left; padding-left: 0; }
.tarifario th:last-child,
.tarifario td:last-child { padding-right: 0; }

.tarifario thead th {
  padding-top: 0;
  color: var(--humo);
  font-size: var(--t-etiqueta);
  font-weight: var(--peso-medio);
  letter-spacing: var(--track-etiqueta);
  text-transform: uppercase;
}

.tarifario tbody th {
  color: var(--texto-2);
  font-size: var(--t-menor);
  font-weight: var(--peso-normal);
}

.tarifario tbody tr { transition: background var(--trans-rapida); }
.tarifario tbody tr:hover { background: var(--oro-velo); }
.tarifario tbody tr:last-child th,
.tarifario tbody tr:last-child td { border-bottom: 0; }

.cifra {
  color: var(--hueso);
  font-size: var(--t-seccion);
  font-family: var(--serif);
  font-variant-numeric: tabular-nums;
  line-height: 1;
}

/* Celda sin dato: guion, no cero. --humo-tenue no cumple AA y por eso
   vive acá — no es información, es la ausencia de ella, y va con
   aria-label para quien no ve el guion. */
.vacia { color: var(--humo-tenue); }


/* ── Contacto ─────────────────────────────────────────────────────────
   Caja con filete de oro. Es la acción que sostiene el negocio y es lo
   único de la ficha que tiene tratamiento de pieza aparte.           */

.contacto-caja {
  padding: var(--e-6);
  border-radius: var(--radio-2);
  background: var(--sup-1);
  box-shadow: var(--canto-oro), var(--sombra-2), var(--filo);
}

.contacto-acciones {
  display: grid;
  gap: var(--e-3);
}
@media (min-width: 420px) {
  .contacto-acciones { grid-auto-flow: column; grid-auto-columns: 1fr; }
}

.contacto-secundario {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-4);
  margin-top: var(--e-4);
  padding-top: var(--e-4);
  border-top: var(--borde);
}
.contacto-secundario a {
  color: var(--humo);
  font-size: var(--t-menor);
  text-decoration: none;
  text-underline-offset: var(--offset-subrayado);
  transition: color var(--trans-rapida);
}
.contacto-secundario a:hover { color: var(--hueso); text-decoration: underline; }


/* ── Datos y servicios ────────────────────────────────────────────── */

/* Ficha técnica, no lista de filetes (15/08/2026, elegido mirando cuatro
   variantes en pantalla). Antes era una tabla de etiquetas grises con la
   cifra al mismo peso que todo lo demás: 237 px de alto en el teléfono que
   había que leer renglón por renglón.

   Ahora cada dato es una celda con la cifra grande en serif, que es el
   mismo lenguaje del tarifario —la pieza firma del sistema—. Ocupa 120 px
   y se capta de una mirada.

   La jerarquía la dan el tamaño y la fuente, no el color: el oro está
   reservado a beneficio pagado y verificación, y usarlo también acá le
   quitaría fuerza al sello que de verdad importa. */
.datos {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-2);
}

.dato-celda {
  flex: 1 1 6rem;
  min-width: 0;
  padding: var(--e-3) var(--e-4) var(--e-4);
  border-radius: var(--radio-2);
  background: var(--sup-2);
  box-shadow: var(--filo), inset 0 0 0 1px var(--filete);
  transition: box-shadow var(--trans-media);
}
/* Las medidas y los idiomas piden más aire: «90 · 70 · 100» partido en dos
   líneas deja de leerse como una cifra. */
.dato-celda--ancha { flex-basis: 11rem; }

.dato-celda dt {
  color: var(--humo);
  font-size: var(--t-etiqueta);
  letter-spacing: var(--track-etiqueta);
  text-transform: uppercase;
}
.dato-celda dd {
  margin-top: var(--e-1);
  color: var(--hueso);
  font-family: var(--serif);
  font-size: var(--t-dato);
  line-height: 1.15;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
/* La unidad no compite con la cifra: es contexto, no dato. */
.dato-celda__unidad {
  margin-left: .28em;
  color: var(--humo);
  font-family: var(--sans);
  font-size: var(--t-etiqueta);
  text-transform: lowercase;
}

/* Servicios en filete, no en caja: una nube de pastillas rellenas es
   exactamente el default de la categoría. */
.servicios {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-2);
}
.servicios li {
  padding: var(--e-2) var(--e-4);
  border-radius: var(--radio-pastilla);
  box-shadow: inset 0 0 0 1px var(--filete);
  color: var(--texto-2);
  font-size: var(--t-menor);
  transition: box-shadow var(--trans-rapida), color var(--trans-rapida);
}
.servicios li:hover { box-shadow: inset 0 0 0 1px var(--filete-vivo); color: var(--hueso); }

/* Texto libre del perfil, sin catálogo detrás: se marca distinto. */
.servicios__extra {
  font-style: italic;
  color: var(--humo);
  box-shadow: inset 0 0 0 1px var(--filete-oro) !important;
}


/* ── Barra de contacto fija (móvil) ───────────────────────────────────
   En un teléfono la ficha es larga y el teléfono queda a mitad de
   scroll. La barra lo deja siempre a un toque de distancia.          */

.barra-contacto {
  position: fixed;
  z-index: 30;
  inset-inline: 0;
  bottom: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-3);
  padding: var(--e-3) var(--paso);
  padding-bottom: max(var(--e-3), env(safe-area-inset-bottom));
  border-top: var(--borde);
  background: var(--vidrio-denso);
  -webkit-backdrop-filter: var(--desenfoque);
  backdrop-filter: var(--desenfoque);
  box-shadow: var(--sombra-4), var(--filo);
}
/* CON TRES BOTONES —los perfiles que ofrecen WhatsApp Y Telegram— la barra se
   salía por la derecha, y llevaba así desde antes de los iconos: medido sin
   ellos, un hijo quedaba fuera a 320, 360 y 390. Los iconos lo estiraron
   también a 414, así que se arregla acá.

   LA CAUSA ES `flex-basis: 0`, y por eso `flex-wrap` a secas no hace nada: con
   base 0 el tamaño hipotético de cada botón es cero, así que los tres siempre
   «caben» en una línea y no hay nada que envolver; después crecen a partes
   iguales y su `min-width: auto` les impide encoger bajo el min-content, con
   lo que el último se sale. Para que envolver tenga de dónde decidir hay que
   darles una base real.

   LOS 7rem ESTÁN MEDIDOS, no elegidos: con 8rem dos botones envuelven a 320 px
   sin ninguna necesidad. Con 7rem los perfiles de dos botones —9 de los 10
   publicados— se quedan en una fila en los cuatro anchos y encima quedan
   parejos, que bajo 390 no lo estaban (108|151 a 320 px). El de tres pasa a
   dos filas y deja de salirse.

   `min-width: 0` es la red de abajo: si algún día un rótulo no cabe ni en su
   propia fila, encoge en vez de desbordar la barra. */
.barra-contacto .boton {
  flex: 1 1 7rem;
  min-width: 0;
  padding-inline: var(--e-3);
}
@media (min-width: 900px) { .barra-contacto { display: none; } }


/* ── Visor de fotos ───────────────────────────────────────────────── */

.visor {
  max-width: min(94vw, var(--ancho-medio));
  max-height: 92svh;
  padding: 0;
  border: 0;
  background: transparent;
  overflow: visible;
}
.visor::backdrop {
  background: var(--velo-visor);
  -webkit-backdrop-filter: var(--desenfoque);
  backdrop-filter: var(--desenfoque);
}
.visor__foto,
.visor__video {
  max-width: 100%;
  max-height: 92svh;
  border-radius: var(--radio-2);
  box-shadow: var(--sombra-4);
}
/* El visor alterna foto y video con el atributo `hidden`, y `display: block`
   de una regla de autor le gana a `hidden` del navegador. Sin esto se ven los
   dos a la vez. */
.visor__foto[hidden], .visor__video[hidden] { display: none; }
/* Un video vertical de 91 s no puede pasarse de alto: el diálogo no tiene
   scroll y los controles quedarían fuera de la pantalla. */
.visor__video { width: auto; height: auto; background: var(--tinta-0); }
.visor__cerrar {
  position: absolute;
  top: var(--e-3);
  right: var(--e-3);
  width: var(--e-10);
  height: var(--e-10);
  display: grid;
  place-items: center;
  padding: 0;
  border: var(--borde-vivo);
  border-radius: var(--radio-pastilla);
  background: var(--vidrio-denso);
  -webkit-backdrop-filter: var(--desenfoque);
  backdrop-filter: var(--desenfoque);
  color: var(--hueso);
  font-size: var(--t-menor);
  cursor: pointer;
  transition: border-color var(--trans-rapida), transform var(--trans-media);
}
.visor__cerrar:hover { border-color: var(--filete-vivo); transform: rotate(90deg); }

@media (prefers-reduced-motion: no-preference) {
  .visor[open] { animation: visor-entra var(--trans-media); }
  @keyframes visor-entra {
    from { opacity: 0; transform: scale(.97); }
    to   { opacity: 1; transform: none; }
  }
}


/* ── Viaje vigente ─────────────────────────────────────────────────
   Destino y fechas del producto TOUR. Filete al costado en --rosa, que
   pese al nombre es violeta desde el 14/09/2026 (ver tokens.css): es el
   acento de la señal de viaje.                                                     */

.viaje {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--e-2) var(--e-3);
  margin: var(--e-5) 0 0;
  padding: var(--e-3) 0 var(--e-3) var(--e-4);
  border-left: var(--grosor-foco) solid var(--filete-rosa);
  color: var(--texto-2);
  font-size: var(--t-menor);
  line-height: var(--alto-medio);
}
.viaje strong { color: var(--rosa); font-weight: var(--peso-medio); }

.viaje__rotulo {
  color: var(--humo);
  font-size: var(--t-etiqueta);
  letter-spacing: var(--track-etiqueta);
  text-transform: uppercase;
}

.viaje__fechas { font-variant-numeric: tabular-nums; }

.viaje__telefono {
  flex-basis: 100%;
  color: var(--humo);
  font-size: var(--t-meta);
}


/* ── Nota media ────────────────────────────────────────────────────
   La cifra en serif y tabular, como el tarifario: son las dos piezas
   de la ficha donde un número es el dato, no un adorno.            */

.nota-media {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--e-3);
  margin: 0 0 var(--e-6);
}

.nota-media__cifra {
  color: var(--hueso);
  font-family: var(--serif);
  font-size: var(--t-seccion);
  font-variant-numeric: tabular-nums;
  line-height: 1;
}

.nota-media__total {
  color: var(--humo);
  font-size: var(--t-meta);
}


/* ── Formulario de reseña ──────────────────────────────────────────
   Separado del listado por un filete: es otra cosa —escribir— y sin
   la separación se lee como una reseña más.                        */

.forma-resena {
  max-width: var(--ancho-texto);
  margin-top: var(--e-8);
  padding-top: var(--e-6);
  border-top: var(--borde);
}
.forma-resena .casilla .estrellas { margin-right: var(--e-2); }


/* ── Visitas ───────────────────────────────────────────────────────────
   El contador iba en `--humo` sobre nada: un dato duro fuera del sistema,
   que desde el 15/08/2026 dice que van en cian. Victor lo pidió «con un
   tono destacado o algo más relevante y grande» el 30/08.

   SIGUE AL PIE. La nota vieja decía «en tono secundario a propósito» y su
   motivo era que el tema viejo lo ponía ARRIBA, compitiendo con el nombre:
   ese riesgo es de la posición, no del color, y la posición no cambia. A
   una ficha entera de distancia del nombre, una cifra en cian no compite
   con nada.

   La cifra en serif tabular, como el tarifario y como `.dato-celda`. */

.ficha__visitas {
  display: flex;
  align-items: baseline;
  gap: var(--e-3);
  margin-top: var(--e-8);
  padding-top: var(--e-5);
  border-top: var(--grosor-filete) solid var(--neon-filete);
}

.ficha__visitas-cifra {
  color: var(--neon-cian);
  font-family: var(--serif);
  font-size: var(--t-seccion);
  line-height: 1;
  font-variant-numeric: tabular-nums;
  text-shadow: var(--neon-brillo-cifra);
}

/* El rótulo es contexto y no compite con la cifra: es el mismo par que
   `.dato-celda` y que las categorías de la portada. */
.ficha__visitas-rotulo {
  color: var(--neon-rosa);
  font-size: var(--t-etiqueta);
  font-weight: var(--peso-medio);
  letter-spacing: var(--track-etiqueta);
  text-transform: uppercase;
}

/* ── Reportar ──────────────────────────────────────────────────────────
   Cerrado por omisión y en tono secundario: es una salida que tiene que
   existir, no una llamada a usarla. <details> nativo, sin JS. */
.reportar {
  margin-top: var(--e-8);
  padding-top: var(--e-6);
  border-top: var(--borde);
}
.reportar__abrir {
  color: var(--humo);
  font-size: var(--t-meta);
  cursor: pointer;
}
.reportar__abrir:hover { color: var(--texto-2); }
.reportar__abrir:focus-visible {
  outline: var(--grosor-foco) solid var(--lapis);
  outline-offset: var(--sep-foco);
}
.reportar__forma { margin-top: var(--e-5); }
.reportar__forma .casillas { display: grid; gap: var(--e-2); }


/* ═══════════════════════════════════════════════════════════════════
   LA FICHA EN EL TELÉFONO
   ═══════════════════════════════════════════════════════════════════

   Medido con Chromium a 390×844 el 15/08/2026, no estimado: la ficha
   medía 3.826 px de alto y **el nombre aparecía pasados unos 1.200**,
   detrás de la foto grande y de ocho miniaturas en grilla. Casi tres
   pantallas de fotos antes de saber de quién es el perfil, si está
   verificada, dónde está o cuánto cobra.

   El orden del HTML —galería y después datos— es el correcto para la
   pantalla ancha, donde son dos columnas y se ven a la vez. En una sola
   columna se convierte en un muro.

   Se reordena SIN TOCAR EL HTML: `display: contents` disuelve el
   contenedor de datos y sus hijos pasan a ser celdas del mismo grid que
   la galería, donde `order` los coloca. El HTML sigue sirviendo el
   contenido en el orden que le conviene al escritorio y a un lector de
   pantalla que lea el documento de arriba abajo.

   `.ficha__datos` es un <div> sin semántica, así que disolverlo no quita
   ningún rol del árbol de accesibilidad. */

@media (max-width: 899px) {
  /* `minmax(0, 1fr)` y `min-width: 0` NO son adorno: al disolver el
     contenedor, sus hijos pasan a ser celdas del grid, y una celda de
     grid trae `min-width: auto`, que le prohíbe encogerse por debajo de
     su contenido. La tabla del tarifario ensanchaba entonces la columna
     —y con ella la página entera— a 1.780 px en un teléfono de 390.
     Medido con Chromium; a ojo es invisible hasta que se ve. */
  .ficha__cuerpo { grid-template-columns: minmax(0, 1fr); }
  .ficha__datos { display: contents; }
  .ficha__cuerpo > * { min-width: 0; }

  /* Quién es, primero. Lo demás puede esperar al scroll; esto no. */
  .ficha__datos > header                              { order: 1; }
  .ficha__galeria                                     { order: 2; }
  /* Contacto y tarifas antes que el texto: son las dos cosas que se
     vienen a buscar. El tarifario es además la pieza firma del sistema
     visual y estaba enterrado bajo el muro de fotos. */
  .ficha__datos > [aria-labelledby="t-contacto"]      { order: 3; }
  .ficha__datos > [aria-labelledby="t-tarifas"]       { order: 4; }
  .ficha__datos > .ficha__descripcion                 { order: 5; }
  .ficha__datos > [aria-labelledby="t-servicios"]     { order: 6; }
  .ficha__datos > [aria-labelledby="t-datos"]         { order: 7; }
  .ficha__datos > [aria-labelledby="t-resenas"]       { order: 8; }
  /* Lo que quede sin orden explícito va al final, no al principio. */
  .ficha__datos > *                                   { order: 9; }

  /* La cabecera se pega al borde superior del contenido: con el nombre
     arriba, el aire que había entre la miga y la foto ya no separa nada. */
  .ficha__cuerpo { gap: var(--e-6); }
}

/* La tira de miniaturas, en tira de verdad ───────────────────────────
   En una grilla de tres columnas, ocho miniaturas se apilan en tres filas
   y empujan todo lo demás casi mil píxeles hacia abajo. En horizontal
   ocupan una sola fila y se recorren con el dedo, que es el gesto que ya
   hace cualquiera con una galería en un teléfono.

   Es el mismo patrón del carrusel de la portada —scroll-snap nativo, sin
   una línea de JS— y sangra hasta los bordes por el mismo motivo: el
   margen lateral corta el gesto antes de tiempo. */
@media (max-width: 899px) {
  .galeria__tira {
    display: flex;
    gap: var(--e-2);
    overflow-x: auto;
    scroll-snap-type: x proximity;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    margin-inline: calc(var(--paso) * -1);
    padding-inline: var(--paso);
    /* La máscara avisa que hay más a la derecha, igual que en la barra
       de categorías. */
    mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - var(--e-8)), transparent);
  }
  .galeria__tira::-webkit-scrollbar { display: none; }
  .galeria__tira > li {
    flex: 0 0 auto;
    width: 5.5rem;
    scroll-snap-align: start;
  }
}


/* ── Neón en la ficha (15/08/2026) ──────────────────────────────────
   Cada sección pasa a ser una superficie con halo, en vez de flotar
   sobre el fondo. El cian queda para los datos duros —altura, peso,
   medidas— y el magenta para los títulos: dos familias que separan de
   un vistazo «lo que se lee» de «lo que se mide». */

.ficha__datos .bloque {
  padding: var(--e-5);
  border-radius: var(--radio-2);
  background: linear-gradient(160deg, var(--neon-sup), var(--neon-fondo));
  box-shadow: var(--neon-halo), inset 0 0 0 1px var(--neon-filete);
}

.dato-celda {
  background: linear-gradient(160deg, var(--neon-sup-alta), var(--neon-sup));
  box-shadow: var(--neon-halo-cian), inset 0 0 0 1px var(--neon-filete-cian);
}
.dato-celda dt { color: var(--neon-rosa); }
.dato-celda dd {
  color: var(--neon-cian);
  text-shadow: var(--neon-brillo-cifra);
}
.dato-celda__unidad { color: var(--neon-rosa); }

/* Los servicios pasan a pastilla rellena. Es lo que el sistema de tinta
   evitaba por parecerse al resto del rubro; acá es la decisión tomada.
   Texto oscuro encima, que es lo que la deja en AA. */
.servicios li {
  color: var(--tinta-0);
  background: var(--neon-gradiente);
  border-color: transparent;
  box-shadow: var(--neon-halo-pastilla);
}

.ficha__nombre { text-shadow: var(--neon-brillo-nombre); }

/* La foto lleva halo pero NO velo de color encima: la fotografía sigue
   siendo lo único saturado de la pantalla, y teñirla sería competir con
   lo que la escort vino a mostrar. */
.galeria__principal { box-shadow: var(--neon-halo-foto); }

/* El tarifario conserva sus filetes y sus cifras en serif —es la pieza
   firma— y solo cambia de acento. Rellenarlo lo convertiría en una
   tabla de colores. */
.tarifario td { color: var(--neon-cian); }
.tarifario th[scope="row"] { color: var(--neon-rosa); }
