/* ===================================================================
 *  TOMATE VACACIONES — sistema de diseño
 *
 *  Sale de las maquetas de evolution/boceto/, aprobadas por el cliente.
 *
 *  TODAS las clases llevan el prefijo "tv-". No es capricho: el sitio ya
 *  carga Style.css, agosto.css y responsive.css, con nombres como .logo,
 *  .caja o .foto. El prefijo garantiza que este archivo no le pise nada a
 *  los que ya estaban, ni al reves, y que las paginas que todavia no se
 *  rediseñaron sigan viendose igual que siempre.
 *
 *  Este archivo se carga ULTIMO en Header.php.
 *
 *  Sobre los colores: el verde y el naranja del boceto del cliente son
 *  muy claros para texto. Se conservan tal cual en superficies
 *  decorativas y se usan variantes un poco mas profundas donde hay que
 *  leer:
 *      naranja  #F0741F -> #C4520D en botones y precios  (2.91 -> 4.61)
 *      verde    #55B248 -> #357D29 en enlaces            (2.68 -> 5.10)
 *      banner   #55B248 -> #38842B con texto blanco      (2.68 -> 4.66)
 *  A simple vista son el mismo verde y el mismo naranja.
 * =================================================================== */

:root{
  --tv-verde:#4FA83D;          /* decorativo: iconos, fondos claros */
  --tv-verde-texto:#357D29;    /* 5.10:1 sobre blanco */
  --tv-verde-banner:#38842B;   /* 4.66:1 con texto blanco */
  --tv-verde-suave:#EAF6E7;
  --tv-naranja:#F0741F;        /* decorativo */
  --tv-naranja-fuerte:#C4520D; /* 4.61:1 con blanco */
  --tv-naranja-hover:#A8440A;

  --tv-tinta:#1F2937;
  --tv-tinta-2:#5B6472;
  --tv-tinta-3:#6A7280;        /* 4.85:1 sobre blanco */
  --tv-linea:#E6E9ED;
  --tv-papel:#FFFFFF;
  --tv-papel-2:#F7F8FA;

  --tv-r:12px;
  --tv-r-g:16px;
  --tv-sombra:0 1px 2px rgba(31,41,55,.05), 0 6px 18px -8px rgba(31,41,55,.14);
  --tv-sombra-alta:0 4px 8px rgba(31,41,55,.06), 0 20px 40px -16px rgba(31,41,55,.24);
  --tv-ancho:1180px;
  --tv-alto-cab:64px;
  /* Alto de la barra de busqueda compacta, la que queda pegada abajo de
     la cabecera. Las dos juntas son la franja fija de arriba: cualquier
     cosa que se pegue tiene que arrancar DEBAJO de las dos. */
  --tv-alto-barra:72px;
  --tv-alto-fijo:calc(var(--tv-alto-cab) + var(--tv-alto-barra));
}

/* Las paginas que no dibujan la barra (la home, las altas, el panel)
   solo tienen la cabecera arriba.
   --tv-alto-fijo se declara de nuevo, no alcanza con cambiar
   --tv-alto-barra: el calc() de :root ya se resolvio ahi contra el valor
   de :root, y lo que hereda es el resultado, no la formula. */
body.tv-sin-barra{--tv-alto-barra:0px;--tv-alto-fijo:var(--tv-alto-cab)}

/* El atributo hidden trae display:none desde el navegador, con
   especificidad (0,1,0). Cualquier regla propia con la misma
   especificidad —".tv-x{display:flex}"— le gana por orden y el elemento
   se sigue viendo aunque este marcado como oculto. */
.tv [hidden]{display:none !important}

/* ---------- base ----------
 * Va sobre body.tv para no cambiar las paginas que todavia usan el
 * diseño viejo. Cuando esten todas migradas se puede subir a body.
 * ------------------------------------------------------------------- */
body.tv{
  margin:0;background:var(--tv-papel);color:var(--tv-tinta);
  font-family:"Poppins","Trebuchet MS",Helvetica,system-ui,sans-serif;
  font-size:14.5px;line-height:1.55;-webkit-font-smoothing:antialiased;
  min-width:0;
}
.tv *{box-sizing:border-box}
.tv img{display:block;max-width:100%}
/* :where() deja esta regla en especificidad (0,1,0) en vez de (0,1,1).
   Sin eso le ganaba a .tv-btn-naranja y a .tv-btn-ver, que son <a>: los
   botones naranjas terminaban con el texto oscuro heredado —3.19:1—
   en vez del blanco que corresponde. */
.tv :where(a){color:inherit;text-decoration:none}
.tv button{font-family:inherit;cursor:pointer}
.tv :focus-visible{outline:2px solid var(--tv-verde-texto);outline-offset:2px;border-radius:4px}
.tv-caja{max-width:var(--tv-ancho);margin:0 auto;padding:0 22px}
.tv-ancho-grande{--tv-ancho:1320px}

@media (prefers-reduced-motion: reduce){
  .tv *,.tv *::before,.tv *::after{
    animation-duration:.01ms !important;transition-duration:.01ms !important;
  }
}

/* ---------- logotipo ----------
 * Public/Img/logo.png mide 850x220 y trae el personaje en x=0..412 y la
 * palabra "tomate vacaciones" en BLANCO PURO, hecha para la barra verde
 * del diseño anterior. Sobre fondo claro esa palabra desaparece, asi que
 * se recorta el personaje —relacion 412/220 = 1.875— y la palabra se
 * compone con tipografia. El recorte es por background-size/position: no
 * se genera ningun archivo nuevo ni se toca el original.
 * ------------------------------------------------------------------- */
.tv-logo{display:inline-flex;align-items:center;gap:9px}
.tv-fruta{
  --tv-h:34px;
  display:block;flex:none;height:var(--tv-h);width:calc(var(--tv-h) * 1.875);
  background:url("../Img/logo.png") no-repeat left center;
  background-size:auto var(--tv-h);
}
.tv-logo .tv-palabra{display:flex;flex-direction:column;line-height:1;color:var(--tv-verde-texto)}
.tv-logo .tv-palabra b{font-weight:700;font-size:19px;letter-spacing:-.02em}
.tv-logo .tv-palabra i{font-style:italic;font-weight:400;font-size:13.5px;margin-top:1px}

/* ---------- cabecera ---------- */
.tv-cab{
  border-bottom:1px solid var(--tv-linea);background:#fff;
  position:sticky;top:0;z-index:70;
}
.tv-cab .tv-caja{display:flex;align-items:center;gap:22px;height:var(--tv-alto-cab)}

/* Style.css:386 tiene un "nav{float:left; min-width:100%; max-height:30px}"
   suelto, SIN clase, para la barra naranja del diseño anterior. Al ser
   un selector de ELEMENTO le pega a todos los <nav> del diseño nuevo, y
   hace dos destrozos:
     - min-width:100% estiraba la navegacion de la cabecera y empujaba la
       cuenta y el boton de publicar fuera de la pantalla;
     - float:left en las migas dejaba al bloque siguiente —que es flex, o
       sea que crea su propio contexto de formato— ubicado AL LADO del
       float, con 0px de ancho disponible.
   Se anula de una vez para todos los <nav> del diseño nuevo. */
body.tv nav[class*="tv-"]{
  float:none;min-width:0;max-width:none;min-height:0;max-height:none;
  margin:0;text-align:left;position:static;
}
.tv-nav{display:flex;gap:2px;font-size:14px}
.tv-nav > *{position:relative}
.tv-nav a,.tv-nav .tv-desplegable > button{
  display:flex;align-items:center;gap:6px;padding:8px 13px;border-radius:8px;
  color:var(--tv-tinta);transition:background .2s;background:0;border:0;font-size:14px;
  white-space:nowrap;
}
.tv-nav a:hover,.tv-nav .tv-desplegable > button:hover,.tv-nav a.tv-act{
  background:var(--tv-verde-suave);color:var(--tv-verde-texto);
}
.tv-nav .tv-ch{font-size:9px;color:var(--tv-tinta-3);line-height:1}

/* El panel es absolute: sin position:relative en el envoltorio se colgaba
   del <header>, que era el ancestro posicionado mas cercano, y el de
   "Tu Tomate" terminaba contra el margen derecho de la ventana en vez de
   caer debajo del boton. Con esto los dos desplegables caen igual, desde
   el borde izquierdo de su propio boton. */
.tv-desplegable{position:relative}

.tv-desplegable > .tv-panel{
  display:none;position:absolute;left:0;top:calc(100% + 6px);min-width:210px;
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r);
  box-shadow:var(--tv-sombra-alta);padding:6px;z-index:90;
}
.tv-desplegable.tv-abierto > .tv-panel{display:block}
.tv-desplegable .tv-panel a{
  display:block;padding:8px 12px;border-radius:8px;font-size:13.5px;white-space:nowrap;
}

.tv-acc{margin-left:auto;display:flex;align-items:center;gap:14px;font-size:14px}
.tv-acc .tv-ingresar{color:var(--tv-tinta);padding:8px 4px}
.tv-acc .tv-registrate{color:var(--tv-verde-texto);font-weight:600}
.tv-acc .tv-registrate:hover,.tv-acc .tv-ingresar:hover{text-decoration:underline}

.tv-btn-naranja{
  display:inline-flex;align-items:center;gap:8px;background:var(--tv-naranja-fuerte);color:#fff;
  border:0;border-radius:999px;padding:11px 22px;font-weight:600;font-size:13.5px;
  letter-spacing:.02em;transition:background .2s,transform .15s;white-space:nowrap;
}
.tv-btn-naranja:hover{background:var(--tv-naranja-hover);transform:translateY(-1px);color:#fff}
.tv-btn-naranja .tv-mas{
  width:17px;height:17px;border-radius:50%;border:1.6px solid currentColor;
  display:grid;place-items:center;font-size:11px;line-height:1;flex:none;font-weight:700;
}

/* boton de menu en celular */
.tv-hamburguesa{
  display:none;background:0;border:1px solid var(--tv-linea);border-radius:9px;
  padding:8px 10px;color:var(--tv-tinta);
}

/* ---------- notificaciones ---------- */
.tv-notif{position:relative}
.tv-notif > button{
  position:relative;display:grid;place-items:center;width:36px;height:36px;
  border:1px solid var(--tv-linea);border-radius:50%;background:#fff;color:var(--tv-tinta-2);
  padding:0;transition:.15s;
}
.tv-notif > button:hover{border-color:var(--tv-verde-texto);color:var(--tv-verde-texto)}
.tv-notif-badge{
  position:absolute;top:-3px;right:-3px;min-width:17px;height:17px;padding:0 4px;
  border-radius:999px;background:var(--tv-naranja-fuerte);color:#fff;
  font-size:10.5px;font-weight:600;line-height:17px;text-align:center;
}
.tv-notif-panel{
  display:none;position:absolute;right:0;top:calc(100% + 8px);width:330px;
  max-width:calc(100vw - 24px);background:#fff;border:1px solid var(--tv-linea);
  border-radius:var(--tv-r);box-shadow:var(--tv-sombra-alta);z-index:95;overflow:hidden;
}
.tv-notif.tv-abierto .tv-notif-panel{display:block}
.tv-notif-titulo{
  padding:11px 14px;border-bottom:1px solid var(--tv-linea);
  font-size:13.5px;font-weight:600;
}
.tv-notif-lista{max-height:360px;overflow-y:auto}
.tv-notif-item{
  display:flex;align-items:flex-start;gap:10px;padding:11px 14px;
  border-bottom:1px solid var(--tv-linea);background:#fff;
}
.tv-notif-item:last-child{border-bottom:0}
.tv-notif-item:hover{background:var(--tv-papel-2)}
.tv-notif-item.tv-sin-leer{background:var(--tv-verde-suave)}
.tv-notif-main{flex:1 1 auto;min-width:0}
.tv-notif-msg{display:block;font-size:13px;line-height:1.35;color:var(--tv-tinta);word-break:break-word}
.tv-notif-item:not(.tv-sin-leer) .tv-notif-msg{color:var(--tv-tinta-2)}
.tv-notif-fecha{display:block;margin-top:3px;font-size:11px;color:var(--tv-tinta-3)}
.tv-notif-acc{display:flex;flex:none;align-items:center;gap:6px}
.tv-notif-acc button{
  display:grid;place-items:center;width:22px;height:22px;padding:0;
  border:1px solid var(--tv-linea);border-radius:50%;background:#fff;
  color:var(--tv-tinta-3);font-size:12px;line-height:1;
}
.tv-notif-acc button:hover{color:var(--tv-tinta);border-color:#C7CDD5;background:var(--tv-papel-2)}
.tv-notif-vacio{padding:14px;font-size:13px;color:var(--tv-tinta-2)}

/* ===================================================================
 *  BUSCADOR
 *  Dos formas del MISMO formulario: la grande de la portada y la
 *  pastilla compacta del resto de las paginas.
 * =================================================================== */
/* position:relative lo necesitan los <input type=date>, que van adentro
   en posicion absoluta para poder abrirse desde el boton visible. */
.tv-busc-campo{
  position:relative;display:flex;align-items:center;gap:10px;min-width:0;
  background:transparent;border:0;text-align:left;color:inherit;font-family:inherit;
}
.tv-busc-campo .tv-ic{width:18px;height:18px;flex:none;color:var(--tv-verde-texto)}
.tv-busc-txt{min-width:0;flex:1}
.tv-busc-k{
  display:block;font-size:13px;font-weight:600;color:var(--tv-tinta);line-height:1.25;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.tv-busc-v{
  display:block;font-size:12.5px;color:var(--tv-tinta-2);line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.tv-busc-v.tv-vacio{color:var(--tv-tinta-3)}
.tv-busc-campo input[type=text]{
  border:0;background:transparent;font-family:inherit;font-size:12.5px;color:var(--tv-tinta-2);
  width:100%;padding:0;line-height:1.3;
}
.tv-busc-campo input[type=text]:focus{outline:none}
.tv-busc-campo input[type=text]::placeholder{color:var(--tv-tinta-3)}
.tv-busc-flecha{margin-left:auto;font-size:10px;color:var(--tv-tinta-3);flex:none}

.tv-btn-buscar{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  background:var(--tv-naranja-fuerte);color:#fff;border:0;border-radius:10px;
  padding:0 26px;font-weight:600;font-size:14.5px;transition:background .2s;
}
.tv-btn-buscar:hover{background:var(--tv-naranja-hover)}

/* ----- forma grande, sobre la portada -----
 * Cuatro columnas para tres campos y el boton. Con mas columnas que
 * elementos el boton se iba a una segunda fila. */
.tv-busc-grande{
  position:relative;z-index:5;margin:-56px auto 0;max-width:calc(var(--tv-ancho) - 130px);
  background:#fff;border-radius:var(--tv-r-g);box-shadow:var(--tv-sombra-alta);
  display:grid;grid-template-columns:1.6fr 1.1fr 1.1fr auto;align-items:stretch;padding:7px;
}
.tv-busc-grande .tv-busc-campo{padding:10px 16px;border-radius:10px;transition:background .2s}
.tv-busc-grande .tv-busc-campo:hover{background:var(--tv-papel-2)}
.tv-busc-grande .tv-busc-campo + .tv-busc-campo{border-left:1px solid var(--tv-linea)}

/* ----- forma compacta, debajo de la cabecera ----- */
.tv-busc-barra{
  background:#fff;border-bottom:1px solid var(--tv-linea);
  position:sticky;top:var(--tv-alto-cab);z-index:60;
}
.tv-busc-barra .tv-caja{padding-top:11px;padding-bottom:11px}
/* El formulario es el contenedor flex; la pastilla es un bloque adentro.
   Si la grilla se pone en el <form>, el boton de buscar pasa a ser una
   celda mas y cae a una segunda fila. */
.tv-busc-linea{display:flex;align-items:center;gap:12px}
.tv-busc-pastilla{
  flex:1;min-width:0;display:grid;grid-template-columns:1.4fr 1fr 1.05fr;
  border:1px solid var(--tv-linea);border-radius:999px;background:var(--tv-papel-2);
  transition:box-shadow .2s,border-color .2s;
}
.tv-busc-pastilla:hover{border-color:#CBD2DA;box-shadow:var(--tv-sombra)}
.tv-busc-pastilla .tv-busc-campo{padding:8px 18px;border-radius:999px}
.tv-busc-pastilla .tv-busc-campo + .tv-busc-campo{border-left:1px solid var(--tv-linea)}
.tv-busc-pastilla .tv-busc-k{
  font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--tv-tinta-3);font-weight:500;
}
.tv-busc-pastilla .tv-busc-v{font-size:13px;font-weight:600;color:var(--tv-tinta)}
.tv-busc-pastilla .tv-busc-v.tv-vacio{font-weight:400;color:var(--tv-tinta-3)}
.tv-busc-barra .tv-btn-buscar{border-radius:999px;padding:11px 24px;flex:none;font-size:14px}

/* ----- panel de viajeros ----- */
.tv-busc-viajeros{position:relative}
.tv-viajeros-panel{
  display:none;position:absolute;right:0;top:calc(100% + 10px);width:330px;
  max-width:calc(100vw - 24px);background:#fff;border:1px solid var(--tv-linea);
  border-radius:var(--tv-r);box-shadow:var(--tv-sombra-alta);padding:16px 18px;z-index:95;
}
.tv-busc-viajeros.tv-abierto .tv-viajeros-panel{display:block}
.tv-viajero-fila{
  display:grid;grid-template-columns:1fr auto auto auto;align-items:center;gap:10px;
  padding:9px 0;
}
.tv-viajero-fila + .tv-viajero-fila{border-top:1px solid var(--tv-linea)}
.tv-viajero-fila b{display:block;font-size:13.5px;font-weight:600;color:var(--tv-tinta)}
.tv-viajero-fila small{display:block;font-size:11.5px;color:var(--tv-tinta-2);margin-top:1px}
.tv-viajero-fila small a{color:var(--tv-verde-texto);text-decoration:underline}
.tv-viajero-fila button{
  width:32px;height:32px;border-radius:50%;border:1px solid var(--tv-linea);
  background:#fff;color:var(--tv-tinta);font-size:17px;line-height:1;padding:0;
  display:grid;place-items:center;transition:.15s;
}
.tv-viajero-fila button:hover:not(:disabled){border-color:var(--tv-verde-texto);color:var(--tv-verde-texto)}
.tv-viajero-fila button:disabled{color:#C7CDD5;cursor:default}
.tv-viajero-fila strong{
  min-width:26px;text-align:center;font-size:14px;font-weight:600;
  font-variant-numeric:tabular-nums;
}
/* Los <input type=date> nativos se disparan desde el boton visible; no
   se muestran, pero tienen que seguir existiendo y siendo enfocables. */
.tv-fecha-nativa{
  position:absolute;left:0;top:0;width:1px;height:1px;opacity:0;
  border:0;padding:0;margin:0;pointer-events:none;
}

/* ===================================================================
 *  BOTONES Y PIEZAS COMPARTIDAS
 * =================================================================== */
.tv-btn-borde{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;background:#fff;
  color:var(--tv-verde-texto);border:1.5px solid var(--tv-verde-texto);border-radius:10px;
  padding:9px 20px;font-weight:600;font-size:13.5px;transition:.15s;
}
.tv-btn-borde:hover{background:var(--tv-verde-suave);color:var(--tv-verde-texto)}

.tv-enc{display:flex;align-items:baseline;justify-content:space-between;gap:20px;margin-bottom:14px}
.tv-enc h2{font-size:21px;font-weight:600;letter-spacing:-.015em;margin:0}
.tv-enc a{font-size:13.5px;color:var(--tv-verde-texto);font-weight:500;white-space:nowrap}
.tv-enc a:hover{text-decoration:underline}

/* ---------- tarjeta de aviso ---------- */
/* position:relative para el corazon de favoritos, que va FUERA del <a>
   —adentro, cada click en favoritos ademas navegaba al aviso— y por lo
   tanto necesita a la tarjeta como referencia. */
.tv-tarjeta{
  position:relative;
  border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);overflow:hidden;background:#fff;
  transition:box-shadow .2s,transform .2s,border-color .2s;display:block;
}
.tv-tarjeta:hover{box-shadow:var(--tv-sombra-alta);transform:translateY(-2px);border-color:#D7DDE4}
.tv-tarjeta-foto{position:relative;aspect-ratio:16/11;overflow:hidden;background:var(--tv-papel-2)}
.tv-tarjeta-foto img{
  width:100%;height:100%;object-fit:cover;
  transition:transform .7s cubic-bezier(.2,.8,.2,1);
}
.tv-tarjeta:hover .tv-tarjeta-foto img{transform:scale(1.05)}
.tv-tipo{
  position:absolute;left:10px;top:10px;background:var(--tv-verde-banner);color:#fff;
  font-size:11.5px;font-weight:600;padding:4px 11px;border-radius:999px;letter-spacing:.01em;
}
.tv-fav{
  position:absolute;right:10px;top:10px;width:30px;height:30px;border-radius:50%;border:0;
  background:rgba(255,255,255,.94);color:var(--tv-tinta);display:grid;place-items:center;
  transition:.2s;box-shadow:0 2px 6px rgba(31,41,55,.2);padding:0;
}
.tv-fav:hover{transform:scale(1.1)}
.tv-fav svg{width:15px;height:15px}
.tv-fav.tv-activo{color:var(--tv-naranja-fuerte)}
.tv-fav.tv-activo svg{fill:currentColor}
.tv-donde{
  position:absolute;left:0;right:0;bottom:0;padding:22px 11px 9px;color:#fff;font-size:11.5px;
  background:linear-gradient(to top,rgba(20,26,20,.82),rgba(20,26,20,0));
  display:flex;align-items:center;gap:5px;
}
.tv-donde svg{flex:none;opacity:.9}
.tv-donde span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.tv-tarjeta-cuerpo{padding:11px 13px 13px}
.tv-tarjeta h3{
  font-size:14.5px;font-weight:600;margin:0;line-height:1.3;color:var(--tv-tinta);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.tv-puntaje{font-size:12px;color:var(--tv-tinta-2);margin-top:4px}
.tv-puntaje b{color:var(--tv-tinta);font-weight:600}
/* Las estrellas dicen la categoria del hotel, asi que son informacion,
   no decoracion: van en el naranja profundo (4.61:1) y no en el claro,
   que daba 2.91:1. */
.tv-estrellas{color:var(--tv-naranja-fuerte);font-size:11.5px;letter-spacing:1px}
.tv-tarjeta-pie{
  display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin-top:9px;
}
.tv-rasgos{
  font-size:11.5px;color:var(--tv-tinta-2);display:flex;align-items:center;
  gap:2px 13px;flex-wrap:wrap;min-width:0;
}
.tv-rasgos > span{white-space:nowrap}
.tv-plata{text-align:right;flex:none}
.tv-plata .tv-desde{font-size:10.5px;color:var(--tv-tinta-3);line-height:1.2}
.tv-plata b{display:block;font-size:16.5px;font-weight:700;color:var(--tv-naranja-fuerte);letter-spacing:-.02em;line-height:1.2}
.tv-plata .tv-noche{font-size:10.5px;color:var(--tv-tinta-3);line-height:1.2}

.tv-grilla-4{display:grid;grid-template-columns:repeat(var(--tv-cols,4),minmax(0,1fr));gap:18px}
.tv-grilla-6{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px}
.tv-grilla-6 .tv-tarjeta-foto{aspect-ratio:4/3}
.tv-grilla-6 .tv-tarjeta h3{font-size:13px}
.tv-grilla-6 .tv-donde{font-size:10.5px;padding:14px 9px 7px}
.tv-grilla-6 .tv-tarjeta-cuerpo{padding:9px 11px 11px}
.tv-grilla-6 .tv-plata b{font-size:14px}
.tv-grilla-6 .tv-rasgos{font-size:10.5px}

/* ===================================================================
 *  HOME
 * =================================================================== */
.tv-portada{position:relative;min-height:300px;display:flex;align-items:center;overflow:visible}
.tv-portada-foto{position:absolute;inset:0;overflow:hidden}
/* <picture> es inline por defecto y deja un hueco debajo de la foto:
   se lo pone en bloque y a toda la altura. */
.tv-portada-foto picture{display:block;width:100%;height:100%}
.tv-portada-foto img{width:100%;height:100%;object-fit:cover}
.tv-portada-foto::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(100deg,rgba(20,26,20,.86) 0%,rgba(20,26,20,.62) 38%,rgba(20,26,20,.12) 72%);
}
/* width:100% es imprescindible: .tv-portada es flex y, sin ancho, la
   caja encoge al tamaño del texto y el margin:auto la centra. */
.tv-portada .tv-caja{position:relative;z-index:2;width:100%;padding-top:34px;padding-bottom:96px}
.tv-portada h1{
  font-size:clamp(28px,3.6vw,40px);font-weight:700;line-height:1.14;
  letter-spacing:-.025em;margin:0 0 12px;color:#fff;max-width:15ch;
}
.tv-portada p{margin:0;color:rgba(255,255,255,.92);font-size:15px;max-width:40ch;line-height:1.5}

.tv-categorias{padding:26px 0 6px}
.tv-categorias .tv-caja{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px}
.tv-cat{
  display:flex;align-items:center;gap:11px;background:#fff;border:1px solid var(--tv-linea);
  border-radius:var(--tv-r);padding:12px 14px;transition:.2s;
}
.tv-cat:hover{border-color:var(--tv-verde);box-shadow:var(--tv-sombra);transform:translateY(-2px)}
.tv-cat .tv-ic{
  width:36px;height:36px;border-radius:9px;background:var(--tv-verde-suave);
  color:var(--tv-verde-texto);display:grid;place-items:center;flex:none;
}
.tv-cat span{font-size:13.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.tv-bloque-home{padding:26px 0 6px}

.tv-destinos{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px}
.tv-destino{
  position:relative;border-radius:var(--tv-r);overflow:hidden;aspect-ratio:1/1;
  display:block;background:var(--tv-papel-2);
}
.tv-destino img{width:100%;height:100%;object-fit:cover;transition:transform .6s cubic-bezier(.2,.8,.2,1)}
.tv-destino:hover img{transform:scale(1.06)}
.tv-destino .tv-txt{
  position:absolute;left:0;right:0;bottom:0;padding:26px 12px 11px;color:#fff;
  background:linear-gradient(to top,rgba(20,26,20,.86),rgba(20,26,20,0));
  display:flex;align-items:flex-end;justify-content:space-between;gap:8px;
}
.tv-destino b{display:block;font-size:13.5px;font-weight:600;line-height:1.2}
.tv-destino small{display:block;font-size:11px;opacity:.88;margin-top:1px}
.tv-destino .tv-flecha{
  width:24px;height:24px;border-radius:50%;background:rgba(255,255,255,.92);
  color:var(--tv-tinta);display:grid;place-items:center;flex:none;font-size:12px;
}

/* ---------- banda de publicar ---------- */
.tv-publicar{padding:30px 0 6px}
.tv-publicar .tv-interior{
  background:var(--tv-verde-banner);border-radius:var(--tv-r-g);padding:22px 26px;
  display:grid;grid-template-columns:auto 1fr auto auto auto;align-items:center;gap:24px;
  position:relative;overflow:hidden;
}
.tv-publicar .tv-casita{
  width:66px;height:66px;border-radius:50%;background:rgba(255,255,255,.18);
  display:grid;place-items:center;flex:none;
}
.tv-publicar .tv-decir{color:#fff}
.tv-publicar .tv-p1{font-size:15px;font-weight:500;line-height:1.2}
.tv-publicar .tv-p2{
  font-size:clamp(22px,2.6vw,29px);font-weight:700;letter-spacing:-.02em;line-height:1.15;
  border-bottom:3px solid rgba(255,255,255,.55);display:inline-block;padding-bottom:2px;margin-top:2px;
}
.tv-publicar .tv-lista{display:flex;flex-direction:column;gap:7px;color:#fff;font-size:13px}
.tv-publicar .tv-lista span{display:flex;align-items:center;gap:8px}
.tv-publicar .tv-lista svg{flex:none;opacity:.92}
.tv-publicar .tv-mascota{--tv-h:74px;align-self:center}

/* ===================================================================
 *  RESULTADOS DE BUSQUEDA
 * =================================================================== */
.tv-migas{font-size:12.5px;color:var(--tv-tinta-3);padding:16px 0 0}
.tv-migas a:hover{color:var(--tv-verde-texto);text-decoration:underline}
.tv-migas i{font-style:normal;margin:0 6px}

.tv-titulo-res{
  display:flex;align-items:flex-end;justify-content:space-between;gap:20px;
  flex-wrap:wrap;margin:6px 0 14px;
}
.tv-titulo-res h1{font-size:25px;font-weight:700;letter-spacing:-.02em;margin:0;line-height:1.2}
.tv-cuenta{font-size:13.5px;color:var(--tv-tinta-2);margin-top:2px}
.tv-cuenta b{color:var(--tv-tinta);font-weight:600}

.tv-controles{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.tv-orden{
  display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--tv-linea);
  border-radius:10px;padding:7px 12px;font-size:13px;color:var(--tv-tinta-2);
}
.tv-orden select{
  border:0;background:transparent;font-family:inherit;font-size:13px;font-weight:600;
  color:var(--tv-tinta);cursor:pointer;
}
.tv-orden select:focus{outline:none}
.tv-vistas{display:flex;background:#fff;border:1px solid var(--tv-linea);border-radius:10px;overflow:hidden}
.tv-vistas a{
  display:flex;align-items:center;gap:7px;padding:8px 13px;font-size:13px;
  color:var(--tv-tinta-2);transition:.15s;
}
.tv-vistas a + a{border-left:1px solid var(--tv-linea)}
.tv-vistas a.tv-act{background:var(--tv-verde-suave);color:var(--tv-verde-texto);font-weight:600}

.tv-cuerpo-res{
  display:grid;grid-template-columns:264px minmax(0,1fr);gap:24px;
  align-items:start;padding-bottom:44px;
}

.tv-filtros{
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);
  position:sticky;top:calc(var(--tv-alto-fijo) + 18px);
  max-height:calc(100vh - var(--tv-alto-fijo) - 36px);overflow-y:auto;
}
.tv-filtros .tv-cabf{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:14px 16px;border-bottom:1px solid var(--tv-linea);
  position:sticky;top:0;background:#fff;z-index:2;
}
.tv-filtros .tv-cabf b{font-size:14px;font-weight:600}
.tv-limpiar{
  background:0;border:0;font-size:12.5px;color:var(--tv-verde-texto);font-weight:600;padding:2px 0;
}
.tv-limpiar:hover{text-decoration:underline}
.tv-limpiar[disabled],.tv-limpiar.tv-flojo{color:var(--tv-tinta-3);font-weight:400;cursor:default;text-decoration:none}

.tv-grupo{border-bottom:1px solid var(--tv-linea);padding:13px 16px}
.tv-grupo:last-child{border-bottom:0}
.tv-grupo > h3{
  font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  color:var(--tv-tinta-3);margin:0 0 9px;
}
.tv-op{display:flex;align-items:center;gap:9px;padding:4px 0;font-size:13.5px;cursor:pointer}
.tv-op input{
  appearance:none;-webkit-appearance:none;width:17px;height:17px;flex:none;
  border:1.6px solid #C7CDD5;border-radius:5px;background:#fff;display:grid;place-items:center;
  transition:.15s;margin:0;cursor:pointer;
}
.tv-op input:checked{background:var(--tv-verde-texto);border-color:var(--tv-verde-texto)}
.tv-op input:checked::after{
  content:"";width:9px;height:5px;border:2px solid #fff;border-top:0;border-right:0;
  transform:rotate(-45deg) translate(1px,-1px);
}
.tv-op .tv-n{margin-left:auto;font-size:11.5px;color:var(--tv-tinta-3);font-variant-numeric:tabular-nums}
/* Una opcion sin resultados se atenua con COLOR, no con opacity: con
   opacity el texto quedaba en 2.15:1 y no se leia. */
.tv-op.tv-cero{cursor:default}
.tv-op.tv-cero span{color:var(--tv-tinta-3)}
.tv-op.tv-cero .tv-n{text-decoration:line-through}
.tv-op.tv-cero input{cursor:default;border-color:#DEE2E7;background:#F4F5F7}

.tv-precio{display:flex;align-items:center;gap:8px}
.tv-precio label{flex:1;min-width:0}
.tv-precio span{display:block;font-size:10.5px;color:var(--tv-tinta-3);margin-bottom:3px}
.tv-precio input{
  width:100%;border:1px solid var(--tv-linea);border-radius:8px;padding:7px 9px;
  font-family:inherit;font-size:13px;color:var(--tv-tinta);background:var(--tv-papel-2);
}
.tv-precio input:focus{outline:none;border-color:var(--tv-verde-texto);background:#fff}
.tv-rango{font-size:11.5px;color:var(--tv-tinta-3);margin-top:7px}

.tv-ver-mas{background:0;border:0;padding:6px 0 0;font-size:12.5px;color:var(--tv-verde-texto);font-weight:600}
.tv-ver-mas:hover{text-decoration:underline}

.tv-aplicados{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.tv-aplicados:empty{display:none}
.tv-chip{
  display:inline-flex;align-items:center;gap:7px;background:var(--tv-verde-suave);
  color:var(--tv-verde-texto);border:1px solid #CDE6C6;border-radius:999px;
  padding:5px 8px 5px 13px;font-size:12.5px;font-weight:500;
}
.tv-chip .tv-x{
  border:0;background:rgba(53,125,41,.14);color:inherit;width:17px;height:17px;
  border-radius:50%;display:grid;place-items:center;font-size:12px;line-height:1;padding:0;
}
.tv-chip .tv-x:hover{background:var(--tv-verde-texto);color:#fff}

/* ---------- resultado en lista ---------- */
.tv-lista-res{display:flex;flex-direction:column;gap:14px}
.tv-res{
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);overflow:hidden;
  display:grid;grid-template-columns:272px minmax(0,1fr) 208px;
  transition:box-shadow .2s,border-color .2s,transform .2s;
}
.tv-res:hover{box-shadow:var(--tv-sombra-alta);border-color:#D7DDE4;transform:translateY(-2px)}
.tv-res .tv-f{position:relative;overflow:hidden;background:var(--tv-papel-2);min-height:190px}
.tv-res .tv-f img{width:100%;height:100%;object-fit:cover;transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.tv-res:hover .tv-f img{transform:scale(1.05)}
.tv-nfotos{
  position:absolute;left:10px;bottom:10px;background:rgba(20,26,20,.72);color:#fff;
  font-size:11px;font-weight:500;padding:3px 9px;border-radius:999px;
  display:flex;align-items:center;gap:5px;
}
.tv-res .tv-medio{padding:15px 18px;min-width:0;display:flex;flex-direction:column}
.tv-res h2{font-size:17px;font-weight:600;letter-spacing:-.01em;margin:0;line-height:1.25}
.tv-res h2 a:hover{color:var(--tv-verde-texto)}
.tv-res-donde{display:flex;align-items:center;gap:5px;font-size:12.5px;color:var(--tv-tinta-2);margin-top:4px}
.tv-res-donde svg{flex:none;color:var(--tv-tinta-3)}
.tv-calle{font-size:12px;color:var(--tv-tinta-3);margin-top:1px}
.tv-res-puntaje{display:flex;align-items:center;gap:8px;margin-top:9px;font-size:12.5px;color:var(--tv-tinta-2);flex-wrap:wrap}
.tv-res-puntaje b{
  background:var(--tv-verde-banner);color:#fff;font-weight:600;font-size:12.5px;
  padding:2px 7px;border-radius:6px 6px 6px 2px;
}
.tv-atributos{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}
.tv-at{
  display:inline-flex;align-items:center;gap:6px;background:var(--tv-papel-2);
  border:1px solid var(--tv-linea);border-radius:8px;padding:5px 10px;
  font-size:12px;color:var(--tv-tinta-2);
}
.tv-at b{color:var(--tv-tinta);font-weight:600}
.tv-at svg{flex:none;color:var(--tv-verde-texto)}
.tv-servicios-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto;padding-top:11px}
.tv-sv-chip{font-size:11.5px;color:var(--tv-tinta-2);background:var(--tv-verde-suave);border-radius:6px;padding:3px 8px}
.tv-sv-chip.tv-mas-sv{background:transparent;color:var(--tv-tinta-3)}
.tv-res .tv-p{
  border-left:1px solid var(--tv-linea);padding:15px 18px;display:flex;flex-direction:column;
  align-items:flex-end;justify-content:space-between;gap:12px;text-align:right;
}
.tv-res .tv-p .tv-desde{font-size:11px;color:var(--tv-tinta-3);line-height:1.2}
.tv-res .tv-p .tv-n{font-size:23px;font-weight:700;color:var(--tv-naranja-fuerte);letter-spacing:-.02em;line-height:1.15}
.tv-res .tv-p .tv-noche{font-size:11px;color:var(--tv-tinta-3)}
.tv-cuotas{font-size:11.5px;color:var(--tv-verde-texto);font-weight:500;margin-top:3px}
.tv-btn-ver{
  display:block;width:100%;text-align:center;background:var(--tv-naranja-fuerte);color:#fff;
  border:0;border-radius:10px;padding:10px 14px;font-weight:600;font-size:13.5px;transition:background .2s;
}
.tv-btn-ver:hover{background:var(--tv-naranja-hover);color:#fff}
.tv-libre{font-size:11.5px;color:var(--tv-verde-texto);display:flex;align-items:center;gap:5px;justify-content:flex-end}

/* ---------- galeria de resultados ----------
 * Se llama "vista-galeria" y no "galeria": .tv-galeria ya existe como la
 * galeria de FOTOS de la ficha, y al compartir nombre le pasaba su
 * background y su overflow a la lista de resultados. Entre otras cosas,
 * ".tv-galeria a{background:var(--tv-papel-2)}" le borraba el naranja al
 * boton "Ver aviso", que quedaba blanco sobre blanco.
 * ------------------------------------------------------------------- */
.tv-lista-res.tv-vista-galeria{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.tv-lista-res.tv-vista-galeria .tv-res{grid-template-columns:1fr;grid-template-rows:auto auto auto}
.tv-lista-res.tv-vista-galeria .tv-res .tv-f{aspect-ratio:16/11;min-height:0}
.tv-lista-res.tv-vista-galeria .tv-res .tv-p{
  border-left:0;border-top:1px solid var(--tv-linea);flex-direction:column;
  align-items:stretch;text-align:left;padding:12px 16px 15px;gap:11px;
}
.tv-lista-res.tv-vista-galeria .tv-btn-ver{width:100%}
.tv-lista-res.tv-vista-galeria .tv-libre,
.tv-lista-res.tv-vista-galeria .tv-servicios-chips{display:none}

/* Se llama "sin-resultados" y no "vacio": .tv-vacio ya existe como
   modificador del texto gris del buscador, y al compartir nombre este
   bloque le metia 40px de padding, borde y fondo blanco a la etiqueta
   "Elegi las fechas", que quedaba como una caja de 99px de alto. */
.tv-sin-resultados{
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);
  padding:40px 26px;text-align:center;
}
.tv-sin-resultados b{display:block;font-size:17px;margin-bottom:6px}
.tv-sin-resultados p{margin:0 0 16px;color:var(--tv-tinta-2);font-size:13.5px}

.tv-paginas{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:22px;flex-wrap:wrap}
.tv-paginas a,.tv-paginas span{
  min-width:36px;height:36px;border:1px solid var(--tv-linea);background:#fff;border-radius:9px;
  font-size:13.5px;color:var(--tv-tinta-2);padding:0 10px;transition:.15s;
  display:inline-flex;align-items:center;justify-content:center;
}
.tv-paginas a:hover{border-color:var(--tv-verde-texto);color:var(--tv-verde-texto)}
.tv-paginas .tv-act{background:var(--tv-verde-banner);border-color:var(--tv-verde-banner);color:#fff;font-weight:600}
.tv-paginas .tv-flojo{opacity:.4;cursor:default}

.tv-abrir-filtros{display:none}

/* ===================================================================
 *  FICHA DEL AVISO
 * =================================================================== */
.tv-cab-aviso{
  display:flex;align-items:flex-end;justify-content:space-between;gap:22px;
  flex-wrap:wrap;margin:8px 0 14px;
}
.tv-cab-aviso h1{font-size:28px;font-weight:700;letter-spacing:-.025em;margin:0;line-height:1.18}
.tv-sub{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:7px;
  font-size:13.5px;color:var(--tv-tinta-2);
}
.tv-sub .tv-pts{display:inline-flex;align-items:center;gap:7px}
.tv-sub .tv-pts b{
  background:var(--tv-verde-banner);color:#fff;font-weight:600;font-size:12.5px;
  padding:2px 8px;border-radius:6px 6px 6px 2px;
}
.tv-sub .tv-d{display:inline-flex;align-items:center;gap:5px}
.tv-sub .tv-d svg{color:var(--tv-tinta-3);flex:none}
.tv-sub .tv-sep{color:var(--tv-linea)}
.tv-acciones{display:flex;gap:8px}
.tv-acciones button,.tv-acciones a{
  display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--tv-linea);
  border-radius:10px;padding:8px 14px;font-size:13px;font-weight:500;color:var(--tv-tinta);transition:.15s;
}
.tv-acciones button:hover,.tv-acciones a:hover{border-color:var(--tv-verde-texto);color:var(--tv-verde-texto)}
.tv-acciones .tv-activo{color:var(--tv-naranja-fuerte);border-color:var(--tv-naranja-fuerte)}
.tv-acciones .tv-activo svg{fill:currentColor}
/* El mismo boton de favoritos que usan las tarjetas, pero aca es un
   boton mas de la barra de acciones, no un circulo flotando sobre una
   foto: hay que sacarle el posicionamiento absoluto. */
.tv-acciones .tv-fav{
  position:static;width:auto;height:auto;border-radius:10px;
  border:1px solid var(--tv-linea);background:#fff;box-shadow:none;
  display:inline-flex;align-items:center;gap:7px;padding:8px 14px;
  font-size:13px;font-weight:500;color:var(--tv-tinta);
}
.tv-acciones .tv-fav:hover{transform:none;border-color:var(--tv-verde-texto);color:var(--tv-verde-texto)}
.tv-acciones .tv-fav.tv-activo{color:var(--tv-naranja-fuerte);border-color:var(--tv-naranja-fuerte)}
.tv-acciones .tv-fav::after{content:"Guardar"}
.tv-acciones .tv-fav.tv-activo::after{content:"Guardado"}

/* ---------- puente con la caja de reserva ----------
 * El formulario de reserva —calendario, disponibilidad, precio,
 * habitacion— se conservo tal cual, con su CSS propio
 * (aviso-reserva.css y reservas-calendario.css). Aca solo se lo encaja
 * dentro de la tarjeta lateral del diseño nuevo: se le sacan el ancho
 * fijo, los margenes y el borde que traia de cuando era una caja suelta.
 * No se le toca ninguna clase interna ni ningun id.
 * ------------------------------------------------------------------- */
/* Los !important son a proposito: aviso-reserva.css define estas dos
   cajas por ID y con float, y es justamente el archivo que NO se quiere
   tocar para no arriesgar el formulario de reserva. Sin esto el
   formulario quedaba 85px corrido respecto del precio. */
.tv-reserva #calendario_reserva_overlay{
  position:static !important;float:none !important;width:100% !important;
  margin:0 !important;padding:0 !important;background:transparent !important;
  border:0 !important;box-shadow:none !important;display:block !important;inset:auto !important;
}
.tv-reserva .reserva-modal-card{
  float:none !important;width:100% !important;max-width:none !important;min-width:0 !important;
  margin:0 !important;padding:0 20px !important;
  border:0 !important;border-radius:0 !important;box-shadow:none !important;
  background:transparent !important;box-sizing:border-box !important;
}
.tv-reserva .reserva-modal-card > form{margin:0}
.tv-reserva .reserva-viajeros-panel{width:auto;left:0;right:0}

/* ---------- el calendario, como popup de verdad ----------
 * aviso-reserva.css lo define "position:absolute; right:0; top:104px;
 * width:980px", pensado para cuando la caja de reserva ocupaba media
 * pagina. Metido en la columna lateral de 348px quedaba anclado adentro
 * y recortado.
 *
 * Pasa a modal: fijo, centrado y por encima de todo. El JS lo sigue
 * abriendo y cerrando igual, cambiando style.display; no se toco
 * aviso-reserva.js.
 * ------------------------------------------------------------------- */
.tv-cal-fondo{
  position:fixed;inset:0;z-index:9998;
  background:rgba(20,26,20,.55);
}
body.tv .reserva-calendar-wrap{
  position:fixed !important;
  left:50% !important;top:50% !important;right:auto !important;bottom:auto !important;
  transform:translate(-50%,-50%);
  width:min(980px, calc(100vw - 28px)) !important;
  max-width:none !important;
  max-height:calc(100vh - 32px);
  overflow:auto;
  z-index:9999 !important;
  border-radius:var(--tv-r-g) !important;
  box-shadow:0 24px 60px rgba(31,41,55,.32) !important;
  background:#fff !important;
}
/* el boton de cerrar, visible sobre el calendario */
body.tv .reserva-calendar-wrap .reserva-modal-cerrar{
  position:absolute;right:12px;top:10px;z-index:2;
  width:32px;height:32px;border-radius:50%;border:1px solid var(--tv-linea);
  background:#fff;color:var(--tv-tinta);font-size:19px;line-height:1;padding:0;
  display:grid;place-items:center;
}
body.tv .reserva-calendar-wrap .reserva-modal-cerrar:hover{background:var(--tv-papel-2)}
/* El formulario de reserva arma su layout con floats. Sin limpiarlos, el
   pie de la tarjeta —"Todavia no se cobra nada" y el numero de aviso—
   quedaba AL LADO del formulario en vez de debajo. */
.tv-reserva .tv-abajo{clear:both}
.tv-reserva::after{content:"";display:table;clear:both}
/* El formulario venia con anchos pensados para una caja mas ancha, asi
   que dentro de la tarjeta quedaba corrido a la derecha. */
.tv-reserva .reserva-modal-top,
.tv-reserva .reserva-boxes,
.tv-reserva .reserva-viajeros-box,
.tv-reserva .reserva-price-line,
.tv-reserva #reserva_room_selected,
.tv-reserva .reserva-submit,
.tv-reserva .reserva-modal-card button[type="submit"]{
  width:100%;max-width:none;min-width:0;margin-left:0;margin-right:0;float:none;
}

/* ---------- galeria ----------
 * Cada disposicion tiene EXACTAMENTE tantas celdas como fotos, asi no
 * queda ningun hueco que se lea como una foto que no cargo.
 * ------------------------------------------------------------------- */
.tv-galeria{
  display:grid;gap:8px;border-radius:var(--tv-r-g);overflow:hidden;
  background:var(--tv-papel-2);position:relative;
}
.tv-galeria.tv-n1{grid-template-columns:1fr}
.tv-galeria.tv-n2{grid-template-columns:1fr 1fr}
.tv-galeria.tv-n3{grid-template-columns:2fr 1fr;grid-template-rows:1fr 1fr}
.tv-galeria.tv-n3 .tv-g1{grid-row:span 2}
.tv-galeria.tv-n4{grid-template-columns:2fr 1fr;grid-template-rows:repeat(3,1fr)}
.tv-galeria.tv-n4 .tv-g1{grid-row:span 3}
.tv-galeria.tv-n5{grid-template-columns:2fr 1fr 1fr;grid-template-rows:1fr 1fr}
.tv-galeria.tv-n5 .tv-g1{grid-row:span 2}
.tv-galeria a{display:block;position:relative;overflow:hidden;background:var(--tv-papel-2)}
.tv-galeria img{width:100%;height:100%;object-fit:cover;transition:transform .6s cubic-bezier(.2,.8,.2,1)}
.tv-galeria a:hover img{transform:scale(1.04)}
.tv-galeria.tv-n1 img{aspect-ratio:21/9}
.tv-galeria:not(.tv-n1) .tv-g1 img{height:100%}
.tv-galeria:not(.tv-n1){height:min(430px,46vw)}
/* De la sexta en adelante no entran en el mosaico, pero siguen en el
   documento para que el lightbox las recorra. */
.tv-galeria .tv-g-mas{display:none}
.tv-ver-fotos{
  position:absolute;right:14px;bottom:14px;background:rgba(255,255,255,.96);color:var(--tv-tinta);
  border:0;border-radius:10px;padding:9px 15px;font-size:13px;font-weight:600;
  display:inline-flex;align-items:center;gap:8px;box-shadow:0 2px 10px rgba(31,41,55,.24);
  font-family:inherit;cursor:pointer;
}
.tv-ver-fotos:hover{background:#fff;color:var(--tv-tinta)}
.tv-una-foto{
  position:absolute;left:14px;bottom:14px;background:rgba(20,26,20,.72);color:#fff;
  border-radius:999px;padding:5px 13px;font-size:12px;display:inline-flex;align-items:center;gap:7px;
}

.tv-cuerpo-aviso{
  display:grid;grid-template-columns:minmax(0,1fr) 348px;gap:38px;
  align-items:start;padding:26px 0 44px;
}
.tv-bloque{border-bottom:1px solid var(--tv-linea);padding:22px 0}
.tv-bloque:first-child{padding-top:0}
.tv-bloque:last-child{border-bottom:0}
.tv-bloque > h2{font-size:19px;font-weight:600;letter-spacing:-.015em;margin:0 0 14px}

.tv-resumen{display:flex;flex-wrap:wrap;gap:9px}
.tv-resumen .tv-at{padding:9px 14px;font-size:13px}

.tv-confianza{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.tv-cf{display:flex;gap:11px}
.tv-cf .tv-ic{
  width:34px;height:34px;border-radius:9px;background:var(--tv-verde-suave);
  color:var(--tv-verde-texto);display:grid;place-items:center;flex:none;
}
.tv-cf b{display:block;font-size:13.5px;font-weight:600;line-height:1.3}
.tv-cf p{margin:2px 0 0;font-size:12.5px;color:var(--tv-tinta-2);line-height:1.45}

.tv-reglas{display:flex;flex-wrap:wrap;gap:10px}
.tv-rg{
  display:inline-flex;align-items:center;gap:9px;border:1px solid var(--tv-linea);
  border-radius:10px;padding:9px 14px;font-size:13px;background:#fff;
}
.tv-rg .tv-ic{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;flex:none}
.tv-rg.tv-si .tv-ic{background:var(--tv-verde-suave);color:var(--tv-verde-texto)}
.tv-rg.tv-no .tv-ic{background:#F1F3F5;color:var(--tv-tinta-3)}
.tv-rg.tv-no{color:var(--tv-tinta-2)}
.tv-choque{
  margin:12px 0 0;font-size:12.5px;line-height:1.5;color:#6B5416;
  background:#FFF8E8;border:1px solid #F0DCA8;border-radius:var(--tv-r);padding:10px 14px;
}
.tv-choque b{color:#4E3D0C}

.tv-camas{display:flex;flex-wrap:wrap;gap:10px}
.tv-cama{border:1px solid var(--tv-linea);border-radius:var(--tv-r);padding:12px 16px;min-width:132px;background:#fff}
.tv-cama svg{color:var(--tv-tinta-3)}
.tv-cama b{display:block;font-size:15px;font-weight:600;margin-top:6px}
.tv-cama span{font-size:12.5px;color:var(--tv-tinta-2)}

/* ---------- habitaciones de hotel ---------- */
.tv-habs{display:flex;flex-direction:column;gap:14px}
.tv-hab{
  display:grid;grid-template-columns:210px minmax(0,1fr) 190px;
  border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);overflow:hidden;background:#fff;
  transition:box-shadow .2s,border-color .2s;
}
.tv-hab:hover{box-shadow:var(--tv-sombra);border-color:#D7DDE4}
.tv-hab .tv-f{position:relative;overflow:hidden;background:var(--tv-papel-2);min-height:150px}
.tv-hab .tv-f img{width:100%;height:100%;object-fit:cover}
.tv-hab .tv-c{padding:14px 17px;min-width:0}
.tv-hab h3{font-size:16px;font-weight:600;margin:0;line-height:1.25}
.tv-hab .tv-d{font-size:13px;color:var(--tv-tinta-2);margin:5px 0 0;line-height:1.5}
.tv-hab .tv-camitas{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px}
.tv-hab .tv-camitas span{
  display:inline-flex;align-items:center;gap:6px;background:var(--tv-papel-2);
  border:1px solid var(--tv-linea);border-radius:8px;padding:4px 10px;
  font-size:12px;color:var(--tv-tinta-2);
}
.tv-hab .tv-camitas b{color:var(--tv-tinta);font-weight:600}
.tv-hab .tv-p{
  border-left:1px solid var(--tv-linea);padding:14px 17px;display:flex;flex-direction:column;
  align-items:flex-end;justify-content:center;gap:10px;text-align:right;
}
.tv-hab .tv-p .tv-n{font-size:20px;font-weight:700;color:var(--tv-naranja-fuerte);letter-spacing:-.02em;line-height:1.15}
.tv-hab .tv-p small{font-size:11px;color:var(--tv-tinta-3);display:block}
.tv-hab .tv-p button{
  width:100%;background:#fff;color:var(--tv-verde-texto);border:1.5px solid var(--tv-verde-texto);
  border-radius:10px;padding:9px 12px;font-weight:600;font-size:13px;transition:.15s;
}
.tv-hab .tv-p button:hover{background:var(--tv-verde-suave)}
.tv-hab.tv-elegida{border-color:var(--tv-verde-texto);box-shadow:0 0 0 1px var(--tv-verde-texto)}
.tv-hab.tv-elegida .tv-p button{background:var(--tv-verde-banner);color:#fff;border-color:var(--tv-verde-banner)}
/* "Ver mas info" es la accion secundaria: se lee como enlace para que no
   compita con "Elegir", que es la que lleva a la reserva. */
.tv-hab .tv-hab-mas{
  width:100%;background:0;border:0;padding:2px 0;font-size:12.5px;font-weight:600;
  color:var(--tv-verde-texto);text-decoration:underline;text-underline-offset:3px;
}
.tv-hab .tv-hab-mas:hover{color:var(--tv-verde-banner)}

/* ---------- popup de detalle de habitacion ----------
 * Mismo patron que el calendario: fijo, centrado y sobre todo lo demas.
 * Va por debajo del calendario (9999) porque al elegir una habitacion
 * este se cierra y aquel se abre.
 * ------------------------------------------------------------------- */
.tv-modal-fondo{position:fixed;inset:0;z-index:9990;background:rgba(20,26,20,.55)}
.tv-modal{
  position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);
  z-index:9991;width:min(680px,calc(100vw - 28px));max-height:calc(100vh - 40px);
  display:flex;flex-direction:column;overflow:hidden;
  background:#fff;border-radius:var(--tv-r-g);box-shadow:0 24px 60px rgba(31,41,55,.32);
}
.tv-modal-cerrar{
  position:absolute;right:12px;top:12px;z-index:3;
  width:34px;height:34px;border-radius:50%;border:0;
  background:rgba(255,255,255,.94);color:var(--tv-tinta);
  font-size:21px;line-height:1;padding:0;display:grid;place-items:center;
  box-shadow:0 2px 8px rgba(31,41,55,.24);
}
.tv-modal-cerrar:hover{background:#fff}
.tv-modal-foto{position:relative;flex:none;background:var(--tv-papel-2);aspect-ratio:16/9;overflow:hidden}
.tv-modal-foto img{width:100%;height:100%;object-fit:cover}
.tv-modal-nav{
  position:absolute;top:50%;transform:translateY(-50%);
  width:36px;height:36px;border-radius:50%;border:0;
  background:rgba(255,255,255,.92);color:var(--tv-tinta);
  font-size:20px;line-height:1;padding:0;display:grid;place-items:center;
  box-shadow:0 2px 8px rgba(31,41,55,.24);
}
.tv-modal-nav:hover{background:#fff}
.tv-modal-nav.tv-ant{left:12px}
.tv-modal-nav.tv-sig{right:12px}
.tv-modal-contador{
  position:absolute;right:12px;bottom:12px;background:rgba(20,26,20,.72);color:#fff;
  font-size:11.5px;padding:3px 10px;border-radius:999px;
}
.tv-modal-cuerpo{padding:20px 24px 4px;overflow-y:auto}
.tv-modal-cuerpo h2{font-size:21px;font-weight:600;letter-spacing:-.015em;margin:0 0 8px}
.tv-modal-cuerpo h3{
  font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  color:var(--tv-tinta-3);margin:18px 0 9px;
}
/* Los chips de camas: el estilo de .tv-hab .tv-camitas span esta scopeado
   a la tarjeta, asi que dentro del popup los items salian pegados
   ("1 cama individual2 camas dobles5 personas"). */
.tv-modal-cuerpo .tv-camitas{display:flex;flex-wrap:wrap;gap:7px;margin-top:14px}
.tv-modal-cuerpo .tv-camitas span{
  display:inline-flex;align-items:center;gap:6px;background:var(--tv-papel-2);
  border:1px solid var(--tv-linea);border-radius:8px;padding:5px 11px;
  font-size:12.5px;color:var(--tv-tinta-2);
}
.tv-modal-serv{display:flex;flex-wrap:wrap;gap:7px}
.tv-modal-serv span{
  font-size:12.5px;color:var(--tv-tinta-2);background:var(--tv-verde-suave);
  border-radius:7px;padding:4px 10px;
}
.tv-modal-pie{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:16px 24px;border-top:1px solid var(--tv-linea);background:#fff;flex:none;
}
.tv-modal-pie .tv-n{font-size:23px;font-weight:700;color:var(--tv-naranja-fuerte);letter-spacing:-.02em;line-height:1.15}
.tv-modal-pie small{font-size:11.5px;color:var(--tv-tinta-3)}

@media(max-width:560px){
  .tv-modal{width:calc(100vw - 20px);max-height:calc(100vh - 24px)}
  .tv-modal-cuerpo{padding:16px 18px 4px}
  .tv-modal-pie{padding:14px 18px}
  .tv-modal-pie .tv-btn-reservar{padding:12px 18px !important;font-size:14px}
}

.tv-desc{font-size:14.5px;color:var(--tv-tinta-2);line-height:1.65;margin:0}
.tv-desc + .tv-desc{margin-top:10px}
.tv-aclara{
  margin-top:12px;font-size:12.5px;color:var(--tv-tinta-3);
  border-left:3px solid var(--tv-linea);padding-left:11px;line-height:1.5;
}

.tv-servicios{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 20px}
.tv-sv{display:flex;align-items:center;gap:11px;font-size:13.5px}
.tv-sv .tv-ic{
  width:32px;height:32px;border-radius:9px;background:var(--tv-verde-suave);
  color:var(--tv-verde-texto);display:grid;place-items:center;flex:none;
}

.tv-dir{display:flex;align-items:center;gap:8px;font-size:14px;margin:0 0 12px}
.tv-dir svg{color:var(--tv-verde-texto);flex:none}
.tv-mapa{
  position:relative;border:1px solid var(--tv-linea);border-radius:var(--tv-r);
  overflow:hidden;height:320px;background:#EAEDE8;
}
.tv-mapa #map_canvas{width:100% !important;height:100% !important;float:none !important;margin:0 !important;position:absolute !important;inset:0 !important}
.tv-pie-mapa{
  position:absolute;left:0;right:0;bottom:0;background:rgba(255,255,255,.94);
  padding:10px 14px;font-size:12.5px;color:var(--tv-tinta-2);
  border-top:1px solid var(--tv-linea);display:flex;align-items:center;gap:8px;z-index:500;
}
.tv-pie-mapa svg{width:15px;height:15px;flex:none;color:var(--tv-verde-texto)}

.tv-condiciones{display:grid;grid-template-columns:1fr 1fr;gap:26px}
.tv-dl{margin:0}
.tv-dl > div{display:flex;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid var(--tv-linea)}
.tv-dl > div:last-child{border-bottom:0}
.tv-dl dt{font-size:13.5px;color:var(--tv-tinta-2)}
.tv-dl dd{margin:0;font-size:13.5px;font-weight:600;text-align:right}
.tv-pagos{display:flex;flex-wrap:wrap;gap:8px}
.tv-pago{
  display:inline-flex;align-items:center;gap:7px;border:1px solid var(--tv-linea);
  border-radius:9px;padding:7px 12px;font-size:12.5px;background:#fff;
}
.tv-pago svg{color:var(--tv-verde-texto);flex:none}
.tv-no-acepta{font-size:12.5px;color:var(--tv-tinta-3);margin:10px 0 0}

.tv-relacionados{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}

/* ---------- caja de reserva ---------- */
/* Sin overflow:hidden. El calendario de reserva es un popup que sale de
   esta caja; con overflow oculto quedaba recortado adentro. */
/* El top tiene que contar la cabecera Y la barra de busqueda: con
   solo la cabecera la caja se pegaba a 84px, la barra terminaba en 136
   y se la comia por arriba. El max-height es para el caso en que la
   caja sea mas alta que lo que queda de pantalla -- pasa en un hotel
   con varias habitaciones, o en una ventana baja -- porque si no, el
   final de la caja no se puede alcanzar nunca. */
.tv-reserva{
  border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);box-shadow:var(--tv-sombra-alta);
  background:#fff;position:sticky;top:calc(var(--tv-alto-fijo) + 18px);
  max-height:calc(100vh - var(--tv-alto-fijo) - 36px);overflow-y:auto;
}
/* La cabecera del panel de celular --tirador y cruz-- no existe cuando
   la caja es la columna de la derecha: no hay nada que cerrar. */
.tv-hoja-cab{display:none}
.tv-reserva .tv-arriba{padding:18px 20px 0}
.tv-desde-etq{font-size:11.5px;color:var(--tv-tinta-3);line-height:1.2}
.tv-precio-linea{display:flex;align-items:baseline;gap:8px}
.tv-precio-linea b{font-size:27px;font-weight:700;color:var(--tv-tinta);letter-spacing:-.02em}
.tv-precio-linea span{font-size:13.5px;color:var(--tv-tinta-2)}
.tv-hab-elegida{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  background:var(--tv-verde-suave);border:1px solid #CDE6C6;border-radius:10px;
  padding:8px 12px;margin-top:11px;font-size:13px;color:var(--tv-verde-texto);
}
.tv-hab-elegida button{
  background:0;border:0;padding:0;font-size:12.5px;color:var(--tv-verde-texto);
  text-decoration:underline;font-weight:600;flex:none;
}
.tv-fechas{
  display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--tv-linea);
  border-radius:11px;margin-top:15px;overflow:hidden;
}
.tv-fechas > *{padding:10px 13px;background:#fff;border:0;text-align:left;font-family:inherit}
.tv-fechas > * + *{border-left:1px solid var(--tv-linea)}
.tv-fechas .tv-k{display:block;font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:var(--tv-tinta-3)}
.tv-fechas .tv-v{display:block;font-size:13.5px;font-weight:600;margin-top:1px}
.tv-fechas .tv-v.tv-vacio{font-weight:400;color:var(--tv-tinta-3)}
.tv-viajeros-btn{
  display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;
  border:1px solid var(--tv-linea);border-radius:11px;margin-top:9px;padding:10px 13px;
  background:#fff;text-align:left;
}
.tv-viajeros-btn svg{color:var(--tv-tinta-3);flex:none}
.tv-viajeros-btn .tv-k{display:block;font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:var(--tv-tinta-3)}
.tv-viajeros-btn .tv-v{display:block;font-size:13.5px;font-weight:600}

.tv-cuenta{margin-top:15px;border-top:1px solid var(--tv-linea);padding-top:13px}
.tv-cuenta > div{display:flex;justify-content:space-between;gap:12px;font-size:13.5px;color:var(--tv-tinta-2);padding:4px 0}
.tv-cuenta .tv-total{
  border-top:1px solid var(--tv-linea);margin-top:8px;padding-top:11px;
  font-size:15px;font-weight:700;color:var(--tv-tinta);
}
.tv-cuenta .tv-sena{color:var(--tv-verde-texto);font-weight:600}
.tv-cuenta .tv-resto{font-size:12px;color:var(--tv-tinta-3)}

.tv-reserva .tv-abajo{padding:15px 20px 18px}
.tv-btn-reservar{
  display:block;width:100%;text-align:center;background:var(--tv-naranja-fuerte);color:#fff;border:0;
  border-radius:11px;padding:13px;font-weight:600;font-size:15px;transition:background .2s;
}
.tv-btn-reservar:hover{background:var(--tv-naranja-hover);color:#fff}
/* Sin habitacion elegida el boton no puede prometer una reserva: cambia
   de texto y se apaga, pero sigue visible para que se entienda que falta
   un paso. El gris da 4.85:1 con blanco. */
.tv-btn-reservar.tv-flojo{background:var(--tv-tinta-3);cursor:default}
.tv-btn-reservar.tv-flojo:hover{background:var(--tv-tinta-3)}
.tv-sin-cargo{text-align:center;font-size:12px;color:var(--tv-tinta-2);margin:9px 0 0}
.tv-ref{
  margin-top:13px;padding-top:12px;border-top:1px solid var(--tv-linea);
  font-size:11.5px;color:var(--tv-tinta-3);display:flex;justify-content:space-between;gap:10px;
}
.tv-ref a{color:var(--tv-verde-texto)}

.tv-barra-movil{display:none}

/* ===================================================================
 *  CUENTA: ingresar, registrarse, recuperar clave y pantallas de estado
 * =================================================================== */
.tv-cuenta-pag{background:var(--tv-papel-2);padding:38px 0 48px;min-height:60vh}
.tv-cuenta-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;align-items:start}

.tv-panel{
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);
  box-shadow:var(--tv-sombra);padding:26px 28px;
}
.tv-panel > h1,.tv-panel > h2{
  font-size:21px;font-weight:700;letter-spacing:-.02em;margin:0 0 4px;line-height:1.2;
}
.tv-panel > p.tv-bajada{margin:0 0 18px;font-size:13.5px;color:var(--tv-tinta-2);line-height:1.5}

.tv-campo{display:block;margin-bottom:14px}
.tv-campo > span{
  display:block;font-size:12.5px;font-weight:600;color:var(--tv-tinta);margin-bottom:5px;
}
.tv-campo input[type=text],
.tv-campo input[type=email],
.tv-campo input[type=password]{
  width:100%;border:1px solid var(--tv-linea);border-radius:10px;padding:11px 13px;
  font-family:inherit;font-size:14px;color:var(--tv-tinta);background:#fff;
  transition:border-color .15s,box-shadow .15s;
}
.tv-campo input:focus{
  outline:none;border-color:var(--tv-verde-texto);
  box-shadow:0 0 0 3px rgba(53,125,41,.14);
}
.tv-campo input::placeholder{color:var(--tv-tinta-3)}
.tv-campo.tv-mal input{border-color:#C0392B}
.tv-error{
  display:block;margin-top:5px;font-size:12.5px;color:#8A2C12;line-height:1.4;
}

.tv-recordar{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--tv-tinta-2);margin:4px 0 16px}
.tv-recordar input{
  appearance:none;-webkit-appearance:none;width:17px;height:17px;flex:none;
  border:1.6px solid #C7CDD5;border-radius:5px;background:#fff;display:grid;place-items:center;
  transition:.15s;margin:0;cursor:pointer;
}
.tv-recordar input:checked{background:var(--tv-verde-texto);border-color:var(--tv-verde-texto)}
.tv-recordar input:checked::after{
  content:"";width:9px;height:5px;border:2px solid #fff;border-top:0;border-right:0;
  transform:rotate(-45deg) translate(1px,-1px);
}

.tv-btn-lleno{
  display:block;width:100%;text-align:center;background:var(--tv-naranja-fuerte);color:#fff;
  border:0;border-radius:11px;padding:13px;font-weight:600;font-size:15px;
  font-family:inherit;transition:background .2s;
}
.tv-btn-lleno:hover{background:var(--tv-naranja-hover);color:#fff}

.tv-o{
  display:flex;align-items:center;gap:12px;margin:20px 0;
  font-size:12px;color:var(--tv-tinta-3);text-transform:uppercase;letter-spacing:.06em;
}
.tv-o::before,.tv-o::after{content:"";flex:1;height:1px;background:var(--tv-linea)}

.tv-btn-google{
  display:flex;align-items:center;justify-content:center;gap:10px;width:100%;
  background:#fff;border:1px solid var(--tv-linea);border-radius:11px;padding:12px;
  font-family:inherit;font-size:14.5px;font-weight:500;color:var(--tv-tinta);transition:.15s;
}
.tv-btn-google:hover{border-color:#C7CDD5;background:var(--tv-papel-2);color:var(--tv-tinta)}
.tv-btn-google img{width:19px;height:19px}

.tv-panel-pie{
  margin:18px 0 0;padding-top:16px;border-top:1px solid var(--tv-linea);
  font-size:13px;color:var(--tv-tinta-2);text-align:center;
}
.tv-panel-pie a{color:var(--tv-verde-texto);font-weight:600}
.tv-panel-pie a:hover{text-decoration:underline}

/* por que registrarse */
.tv-ventajas{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}
.tv-ventajas li{display:flex;gap:11px;font-size:13.5px;color:var(--tv-tinta-2);line-height:1.5}
.tv-ventajas .tv-ic{
  width:30px;height:30px;border-radius:9px;background:var(--tv-verde-suave);
  color:var(--tv-verde-texto);display:grid;place-items:center;flex:none;
}
.tv-ventajas b{display:block;color:var(--tv-tinta);font-size:13.5px}

/* pantalla de estado: activacion, recupero, etc. */
.tv-estado{
  max-width:560px;margin:0 auto;background:#fff;border:1px solid var(--tv-linea);
  border-radius:var(--tv-r-g);box-shadow:var(--tv-sombra);padding:34px 30px;text-align:center;
}
.tv-estado .tv-ic{
  width:56px;height:56px;border-radius:50%;margin:0 auto 16px;
  display:grid;place-items:center;background:var(--tv-verde-suave);color:var(--tv-verde-texto);
}
.tv-estado.tv-mal .tv-ic{background:#FDEEEA;color:#8A2C12}
.tv-estado h1{font-size:22px;font-weight:700;letter-spacing:-.02em;margin:0 0 8px;line-height:1.25}
.tv-estado p{margin:0 0 18px;font-size:14px;color:var(--tv-tinta-2);line-height:1.6}

@media(max-width:860px){
  .tv-cuenta-grid{grid-template-columns:1fr}
}
@media(max-width:560px){
  .tv-cuenta-pag{padding:22px 0 32px}
  .tv-panel{padding:20px 18px}
  .tv-estado{padding:26px 20px}
}

/* ===================================================================
 *  ELEGIR QUE PUBLICAR
 * =================================================================== */
.tv-pub-intro{text-align:center;max-width:640px;margin:0 auto 26px}
.tv-pub-intro h1{font-size:clamp(26px,3.2vw,34px);font-weight:700;letter-spacing:-.025em;margin:0 0 10px;line-height:1.18}
.tv-pub-intro p{margin:0;font-size:15px;color:var(--tv-tinta-2);line-height:1.55}
.tv-pub-sellos{display:flex;justify-content:center;flex-wrap:wrap;gap:10px;margin-top:18px}
.tv-pub-sellos span{
  display:inline-flex;align-items:center;gap:7px;background:var(--tv-verde-suave);
  color:var(--tv-verde-texto);border-radius:999px;padding:6px 14px;font-size:12.5px;font-weight:500;
}

.tv-pub-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.tv-pub{
  display:flex;flex-direction:column;background:#fff;border:1px solid var(--tv-linea);
  border-radius:var(--tv-r-g);overflow:hidden;
  transition:box-shadow .2s,transform .2s,border-color .2s;
}
.tv-pub:hover{box-shadow:var(--tv-sombra-alta);transform:translateY(-2px);border-color:#D7DDE4}
.tv-pub-foto{position:relative;aspect-ratio:16/9;overflow:hidden;background:var(--tv-papel-2);flex:none}
.tv-pub-foto img{width:100%;height:100%;object-fit:cover;transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.tv-pub:hover .tv-pub-foto img{transform:scale(1.04)}
.tv-pub-foto .tv-ic{
  position:absolute;left:16px;bottom:16px;width:44px;height:44px;border-radius:12px;
  background:rgba(255,255,255,.95);color:var(--tv-verde-texto);display:grid;place-items:center;
  box-shadow:0 2px 10px rgba(31,41,55,.24);
}
/* flex:1 y el boton con margin-top:auto: asi las dos tarjetas terminan
   con el boton a la misma altura aunque los textos midan distinto. El
   diseño anterior lo forzaba con height:150px fijo, y con textos de
   largo distinto los botones quedaban desalineados. */
.tv-pub-cuerpo{padding:20px 22px 22px;display:flex;flex-direction:column;flex:1}
.tv-pub-cuerpo h2{font-size:20px;font-weight:600;letter-spacing:-.015em;margin:0 0 7px}
.tv-pub-cuerpo p{margin:0 0 14px;font-size:14px;color:var(--tv-tinta-2);line-height:1.55}
.tv-pub-cats{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:20px}
.tv-pub-cats span{
  font-size:12px;color:var(--tv-tinta-2);background:var(--tv-papel-2);
  border:1px solid var(--tv-linea);border-radius:7px;padding:4px 10px;
}
.tv-pub-cuerpo .tv-btn-lleno{margin-top:auto}

/* comercios: misma pieza, en franja y con menos peso */
.tv-pub-franja{
  display:grid;grid-template-columns:200px minmax(0,1fr) auto;gap:22px;align-items:center;
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);
  overflow:hidden;margin-top:20px;transition:box-shadow .2s,border-color .2s;
}
.tv-pub-franja:hover{box-shadow:var(--tv-sombra);border-color:#D7DDE4}
.tv-pub-franja .tv-f{aspect-ratio:16/10;overflow:hidden;background:var(--tv-papel-2)}
.tv-pub-franja .tv-f img{width:100%;height:100%;object-fit:cover}
.tv-pub-franja .tv-c{padding:16px 0}
.tv-pub-franja h2{font-size:17px;font-weight:600;margin:0 0 5px}
.tv-pub-franja p{margin:0 0 10px;font-size:13.5px;color:var(--tv-tinta-2);line-height:1.5}
.tv-pub-franja .tv-a{padding-right:22px}

@media(max-width:860px){
  .tv-pub-grid{grid-template-columns:1fr}
  .tv-pub-franja{grid-template-columns:1fr;gap:0}
  .tv-pub-franja .tv-f{aspect-ratio:16/7}
  .tv-pub-franja .tv-c{padding:18px 20px 0}
  .tv-pub-franja .tv-a{padding:16px 20px 20px}
  .tv-pub-franja .tv-a .tv-btn-borde{width:100%}
}

/* ===================================================================
 *  FORMULARIOS DE ALTA (altaaviso, altahotel, altacomercio)
 *
 *  Estos formularios estan muy pegados a su JavaScript: upload-img.js
 *  depende de #file-0..4, #antefileInputN, #cerrar-N; validacion_aviso.js
 *  de #mensaje3..17 y de los id de cada campo; y el calendario de
 *  precios de los inputs que arma al vuelto.
 *
 *  Por eso NO se reescribe el HTML: se reestilan las clases que ya
 *  existen (.fset, .titulo_fset, .fset_label_1, .checkbox_list,
 *  .error_mjs_*, etc.) dentro del alcance .tv-form. Cero riesgo de
 *  romper el alta, que es la funcion mas critica del sitio.
 *
 *  Hay varios !important: el markup viejo trae atributos style inline
 *  con anchos y floats fijos, y un atributo style solo se puede pisar
 *  asi.
 * =================================================================== */
.tv-form-pag{background:var(--tv-papel-2);padding:30px 0 44px}
/* Sin max-width propio: asi el formulario ocupa el mismo ancho que el
   contenido de la cabecera, o sea desde el borde izquierdo del logo hasta
   el borde derecho del boton de publicar. Ese ancho ya lo define
   .tv-caja (var(--tv-ancho) menos su padding), asi que alcanza con no
   angostarlo.
   De paso el formulario se acorta bastante: las grillas internas son
   auto-fit, asi que con 1136px en vez de 820 entran cinco campos por
   fila en lugar de tres, y cinco casillas en lugar de tres. */
.tv-form-cab{max-width:none;margin:0 0 24px}
.tv-form-cab h1{font-size:clamp(24px,3vw,31px);font-weight:700;letter-spacing:-.025em;margin:0 0 8px;line-height:1.2}
.tv-form-cab p{margin:0;font-size:14.5px;color:var(--tv-tinta-2);line-height:1.55}

.tv-form{max-width:none;margin:0}

/* ---- cada bloque del formulario pasa a ser una tarjeta ---- */
.tv-form .fset{
  display:block;background:#fff;border:1px solid var(--tv-linea) !important;
  border-radius:var(--tv-r-g);box-shadow:var(--tv-sombra);
  padding:22px 24px 24px !important;margin:0 0 18px !important;
  width:auto !important;min-width:0 !important;max-width:none !important;
  float:none !important;position:relative !important;height:auto !important;
  min-height:0 !important;max-height:none !important;box-sizing:border-box;
}
/* contiene los slots de foto, que van flotados */
.tv-form .fset::after{content:"";display:table;clear:both}
.tv-form .titulo_fset{
  display:block;float:none !important;position:static !important;
  width:auto !important;padding:0 !important;margin:0 0 4px !important;
  font-family:inherit !important;font-size:19px !important;font-weight:600 !important;
  color:var(--tv-tinta) !important;background:transparent !important;
  letter-spacing:-.015em;line-height:1.25;text-align:left !important;
}
/* clear:both es para el texto que va DESPUES de los slots de foto, que
   son flotados: sin esto queda encajado al costado en una columna
   angosta en vez de abajo. En el primer .descrip_fset de cada seccion no
   tiene efecto, porque ahi todavia no hay ningun float. */
.tv-form .descrip_fset{
  display:block;clear:both;float:none !important;position:static !important;
  width:auto !important;margin:0 0 18px !important;
  font-family:inherit !important;font-size:13.5px !important;
  color:var(--tv-tinta-2) !important;line-height:1.5;text-align:left !important;
}
/* el <br> suelto que separaba el legend del texto ya no hace falta */
.tv-form .fset > br{display:none}

/* ---- grillas internas: el viejo usaba floats de 4 columnas ---- */
.tv-form .fset_content_4col,
.tv-form .fset_content_3col,
.tv-form .fset_content_2col,
.tv-form .fset_content_1col,
.tv-form .fset_content{
  display:grid !important;grid-template-columns:repeat(auto-fit,minmax(210px,1fr)) !important;
  gap:14px 18px !important;
  /* fset_content_2col traia column-count:2 + column-rule; el rule se
     seguia dibujando en el medio del bloque aunque la grilla manda */
  column-count:auto !important;column-rule:none !important;
  float:none !important;position:static !important;
  width:auto !important;min-width:0 !important;max-width:none !important;
  height:auto !important;min-height:0 !important;margin:0 !important;padding:0 !important;
}

/* Un fieldset puede traer dos grillas seguidas (por ejemplo los datos
   del hotel y despues accesibilidad/mascotas/fumar). La regla de arriba
   las deja con margin 0, asi que se tocaban. */
.tv-form [class^="fset_content"] + [class^="fset_content"]{margin-top:18px !important}

.tv-form .fset_label_1,
.tv-form .fset_label1,
.tv-form .fset_label2,
.tv-form .fset_label2_fp,
.tv-form .fset_label_check1,
.tv-form label.label_ubicacion{
  display:flex !important;flex-direction:column;align-items:flex-start;gap:5px;
  float:none !important;position:relative !important;
  width:auto !important;min-width:0 !important;max-width:none !important;
  height:auto !important;min-height:0 !important;margin:0 !important;padding:0 !important;
  font-family:inherit !important;
}
/* el texto de cada campo, como etiqueta */
.tv-form .Det_Gen_text,
.tv-form .Det_Gen_text_2,
.tv-form .Det_Gen_text_3,
.tv-form .Det_Gen_text_3_bis,
.tv-form .label_text,
.tv-form .dscrp_check_txt,
.tv-form .font_list_descrip,
.tv-form .label_ubicacion_text,
.tv-form .text_price{
  display:block !important;float:none !important;position:static !important;
  width:auto !important;margin:0 !important;padding:0 !important;
  font-family:inherit !important;font-size:12.5px !important;font-weight:600 !important;
  color:var(--tv-tinta) !important;text-align:left !important;line-height:1.3 !important;
}
/* Los iconos de atributos se esconden. Son los archivos de
   Public/Img/icon_altas_inmueble/, los mismos que en la ficha aparecian
   cruzados: al lado de "Cochera" se dibuja una "E" y al lado de "Baños"
   un inodoro que no se entiende en 18px. La etiqueta de texto alcanza. */
.tv-form .icon_general{display:none !important}
/* "m²" viene DESPUES del input, asi que no es una etiqueta sino una
   aclaracion de la unidad: se muestra como pista y no como titulo. */
.tv-form .Det_Gen_text_2{
  font-weight:400 !important;font-size:11.5px !important;
  color:var(--tv-tinta-3) !important;margin-top:2px !important;
}

/* ---- controles ---- */
.tv-form select,
.tv-form input[type=text],
.tv-form input[type=number],
.tv-form input[type=time],
.tv-form input[type=date],
.tv-form input[type=email],
.tv-form textarea{
  width:100% !important;min-width:0 !important;max-width:none !important;
  height:auto !important;min-height:0 !important;
  float:none !important;position:static !important;margin:0 !important;
  border:1px solid var(--tv-linea) !important;border-radius:10px !important;
  padding:10px 12px !important;background:#fff !important;
  font-family:inherit !important;font-size:14px !important;color:var(--tv-tinta) !important;
  box-sizing:border-box !important;transition:border-color .15s,box-shadow .15s;
}
.tv-form select{
  appearance:none;-webkit-appearance:none;cursor:pointer;padding-right:34px !important;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236A7280' stroke-width='3'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important;background-position:right 12px center !important;
}
.tv-form select:focus,
.tv-form input:focus,
.tv-form textarea:focus{
  outline:none;border-color:var(--tv-verde-texto) !important;
  box-shadow:0 0 0 3px rgba(53,125,41,.14);
}

/* ---- mensajes de validacion ----
 * Los pone y los saca validacion_aviso.js cambiando display, asi que
 * aca solo se define como se ven. */
.tv-form .error_mjs_input,
.tv-form .error_mjs_img,
.tv-form .error_mjs_checkbox_ic,
.tv-form .error_mjs_checkbox_fp,
.tv-form .error_mjs_checkbox_dia,
.tv-form .error_mjs_direccion,
.tv-form .error_mjs{
  float:none !important;position:static !important;
  width:auto !important;height:auto !important;margin:3px 0 0 !important;padding:0 !important;
  font-family:inherit !important;font-size:12.5px !important;font-weight:500 !important;
  color:#8A2C12 !important;background:transparent !important;
  border:0 !important;text-align:left !important;line-height:1.4 !important;
}

/* ---- comodidades y formas de pago: lista de casillas ---- */
/* Las casillas de comodidades y de formas de pago vienen con la etiqueta
   ANTES del input. Se dibujan como una fila: texto a la izquierda,
   casilla a la derecha, con un borde que las hace tocables. */
.tv-form .fset_label_check1,
.tv-form .chiquita > label{
  display:flex !important;flex-direction:row !important;align-items:center;
  justify-content:space-between;gap:10px;
  float:none !important;position:static !important;
  width:auto !important;min-width:0 !important;height:auto !important;
  margin:0 !important;padding:9px 12px !important;
  border:1px solid var(--tv-linea);border-radius:10px;background:#fff;
  font-family:inherit !important;cursor:pointer;transition:.15s;
}
.tv-form .fset_label_check1:hover,
.tv-form .chiquita > label:hover{border-color:var(--tv-verde-texto);background:var(--tv-verde-suave)}
.tv-form .fset_label_check1 > span,
.tv-form .chiquita > label > span{
  float:none !important;position:static !important;
  width:auto !important;margin:0 !important;
  font-family:inherit !important;font-size:13px !important;font-weight:500 !important;
  color:var(--tv-tinta) !important;line-height:1.3 !important;
}
.tv-form .chiquita{
  display:grid !important;grid-template-columns:repeat(auto-fit,minmax(190px,1fr)) !important;
  gap:8px 12px !important;float:none !important;width:auto !important;
  height:auto !important;margin:0 !important;padding:0 !important;
}
.tv-form input[type=checkbox]{
  appearance:none;-webkit-appearance:none;
  width:17px !important;height:17px !important;flex:none;
  float:none !important;position:static !important;margin:0 !important;
  border:1.6px solid #C7CDD5 !important;border-radius:5px !important;
  background:#fff !important;display:grid;place-items:center;cursor:pointer;
  transition:.15s;box-shadow:none !important;
}
.tv-form input[type=checkbox]:checked{
  background:var(--tv-verde-texto) !important;border-color:var(--tv-verde-texto) !important;
}
.tv-form input[type=checkbox]:checked::after{
  content:"";width:9px;height:5px;border:2px solid #fff;border-top:0;border-right:0;
  transform:rotate(-45deg) translate(1px,-1px);
}

/* ---- fotos del alta de aviso ----
 * Una sola zona de carga en vez de cinco casillas fijas. Cada foto se
 * sube sola apenas se elige (Public/Js/tv-fotos.js) y aparece como una
 * tarjeta que se puede quitar o arrastrar para reordenar. La primera
 * de la fila es la portada del aviso.
 * ------------------------------------------------------------------- */
.tv-fotos{clear:both}

.tv-fotos-zona{
  display:grid;place-items:center;gap:2px;
  position:relative;padding:26px 18px;margin:0 0 14px;
  border:1.5px dashed #C7CDD5;border-radius:var(--tv-r);
  background:var(--tv-papel-2);text-align:center;cursor:pointer;
  transition:border-color .15s,background .15s;
}
.tv-fotos-zona:hover,
.tv-fotos-encima{border-color:var(--tv-verde-texto);background:var(--tv-verde-suave)}
/* El input tapa toda la zona para que el clic caiga en cualquier lado.
   No se usa display:none: asi el foco por teclado sigue llegando. */
.tv-form .tv-fotos-input{
  position:absolute !important;inset:0;width:100% !important;height:100% !important;
  opacity:0;cursor:pointer;padding:0 !important;border:0 !important;
}
.tv-fotos-input:focus-visible + .tv-fotos-mas{outline:2px solid var(--tv-verde-texto);outline-offset:4px}
.tv-fotos-mas{
  display:grid;place-items:center;width:34px;height:34px;border-radius:50%;
  background:var(--tv-verde-texto);color:#fff;font-size:22px;line-height:1;
}
.tv-fotos-texto{font-size:14.5px;font-weight:600;color:var(--tv-tinta);margin-top:6px}
.tv-fotos-ayuda{font-size:12.5px;color:var(--tv-tinta-2)}
.tv-fotos-llena .tv-fotos-mas{background:var(--tv-tinta-3)}
.tv-fotos-llena{cursor:not-allowed;opacity:.7}

.tv-fotos-barra{
  display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:10px;
}
.tv-fotos-cuenta{font-size:13px;font-weight:600;color:var(--tv-tinta)}
.tv-fotos-orden{font-size:12.5px;color:var(--tv-tinta-2)}
.tv-fotos-aviso{
  margin:0 0 10px;padding:9px 12px;border-radius:10px;
  background:#FDEEEA;border:1px solid #F3CDC2;color:#8A2C12;font-size:13px;
}

.tv-fotos-grilla{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:12px;
}
.tv-foto{
  position:relative;aspect-ratio:4/3;border-radius:var(--tv-r);overflow:hidden;
  border:1px solid var(--tv-linea);background:var(--tv-papel-2);cursor:grab;
}
.tv-foto img{width:100%;height:100%;object-fit:cover;display:block}
.tv-foto-moviendo{opacity:.4}
.tv-foto-mal{border-color:#E8B4A4}
.tv-foto-mal img{opacity:.35}

.tv-foto-portada{
  position:absolute;left:8px;top:8px;z-index:2;
  background:var(--tv-verde-banner);color:#fff;font-size:10.5px;font-weight:600;
  padding:2px 8px;border-radius:999px;pointer-events:none;
}
.tv-foto-cargando,
.tv-foto-error{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  padding:5px 8px;font-size:11.5px;font-weight:600;line-height:1.3;
  background:rgba(20,26,20,.72);color:#fff;
}
.tv-foto-error{background:#8A2C12}
.tv-foto-quitar{
  position:absolute;right:6px;top:6px;z-index:3;
  width:24px;height:24px;display:grid;place-items:center;
  border:0;border-radius:50%;background:rgba(20,26,20,.62);color:#fff;
  font-size:16px;line-height:1;cursor:pointer;padding:0;
}
.tv-foto-quitar:hover{background:#8A2C12}

/* Mientras hay fotos en el aire los botones quedan apagados: si no, el
   aviso se guardaria sin ellas. */
.tv-form-acciones input[type=submit]:disabled{opacity:.55;cursor:progress}

@media (max-width:560px){
  .tv-fotos-grilla{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px}
}

/* ---- alta de hotel: habitaciones ----
 * Cada habitacion es una tarjeta con sus datos, sus camas y su propia
 * zona de fotos. Antes eran bloques armados a mano con estilos inline
 * y cuatro casillas de foto fijas.
 * ------------------------------------------------------------------- */
.tv-alta-habs{display:grid;gap:16px;margin-bottom:16px}
.tv-alta-habs:empty{margin-bottom:0}
.tv-alta-hab{
  border:1px solid var(--tv-linea);border-radius:var(--tv-r);
  padding:16px 18px 18px;background:var(--tv-papel-2);
}
.tv-alta-hab-cab{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin-bottom:14px;
}
.tv-alta-hab-cab h3{margin:0;font-size:15.5px;font-weight:600;color:var(--tv-tinta)}
.tv-alta-hab-quitar{
  border:1px solid var(--tv-linea);border-radius:999px;background:#fff;
  color:var(--tv-tinta-2);font-family:inherit;font-size:12.5px;font-weight:500;
  padding:5px 13px;cursor:pointer;transition:.15s;
}
.tv-alta-hab-quitar:hover{border-color:#E8B4A4;background:#FDEEEA;color:#8A2C12}

.tv-alta-hab-datos{
  display:grid;grid-template-columns:1fr 1fr;gap:14px 18px;margin-bottom:16px;
}
/* la descripcion ocupa la fila entera: es la que necesita lugar */
.tv-alta-hab-desc{grid-column:1/-1}
.tv-form .tv-alta-hab-desc textarea{min-height:74px;resize:vertical}

.tv-alta-hab-camas{margin-bottom:16px}
/* "Camas" encabeza el grupo, no es la etiqueta de un campo: va separado
   de las tres etiquetas de abajo. */
.tv-alta-hab-camas > .label_text{display:block;margin-bottom:11px;font-weight:600 !important}
.tv-alta-hab-camas-fila{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;
}
.tv-alta-hab-camas-fila .label_text{font-size:12.5px !important;color:var(--tv-tinta-2) !important}

/* la zona de fotos de una habitacion va mas contenida que la del hotel */
.tv-fotos-chica .tv-fotos-zona{padding:16px 14px}
.tv-fotos-chica .tv-fotos-mas{width:28px;height:28px;font-size:18px}
.tv-fotos-chica .tv-fotos-texto{font-size:13.5px}
.tv-fotos-chica .tv-fotos-grilla{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px}

.tv-alta-habs-vacio{
  margin:0 0 14px;padding:14px 16px;border-radius:var(--tv-r);
  border:1px dashed var(--tv-linea);background:var(--tv-papel-2);
  color:var(--tv-tinta-2);font-size:13.5px;
}

/* ---- alta de hotel: categoria en estrellas ----
 * Style.css:2745 le pone float:left y un margin-top negativo con una
 * unidad rota ("-30pxpx"). Dentro del campo va como un bloque mas. */
.tv-estrellas-campo{align-items:flex-start}
.tv-form #stars{
  float:none !important;margin:2px 0 4px !important;padding:0 !important;
  display:flex;gap:3px;cursor:pointer;
}
.tv-form #stars li{float:none !important;flex:none}

@media (max-width:560px){
  .tv-alta-hab-datos{grid-template-columns:1fr}
  .tv-alta-hab{padding:14px}
}

/* ---- fotos: casillas fijas ----
 * Sigue en pie para el alta de hotel y de comercio, que todavia mandan
 * las fotos con el resto del formulario.
 *
 * upload-img.js inyecta un <img> dentro de #photo-N con ancho y alto
 * INLINE (335x335 el principal, 95x95 los chicos) y le pone fondo al
 * .cerrar solo cuando hay foto cargada. Aca se respeta ese mecanismo:
 * se acomoda la caja y se deja que el JS haga lo suyo.
 * ------------------------------------------------------------------- */
/* float y no inline-block: los cinco slots son cinco divs hermanos
   separados por saltos de linea en el HTML, y como inline-block cada
   salto suma un espacio de ~5px, asi que el quinto se caia de fila.
   Los floats ignoran esos espacios. El .fset los contiene con su
   propio clearfix, mas abajo. */
.tv-form .divs_in_carga,
.tv-form .divs_in_carga_small{
  display:block !important;float:left !important;
  position:relative !important;
  width:auto !important;height:auto !important;
  margin:0 12px 12px 0 !important;padding:0 !important;
}
/* la primera es la foto de portada del aviso */
.tv-form .divs_in_carga{position:relative !important}
.tv-form .divs_in_carga::before{
  content:"Principal";position:absolute;left:8px;top:8px;z-index:4;
  background:var(--tv-verde-banner);color:#fff;font-size:10.5px;font-weight:600;
  padding:2px 8px;border-radius:999px;pointer-events:none;
}
.tv-form .divs_in_carga ul,
.tv-form .divs_in_carga_small ul{
  list-style:none;float:none !important;position:static !important;
  width:auto !important;margin:0 !important;padding:0 !important;
}
.tv-form .divs_in_carga li,
.tv-form .divs_in_carga_small li{
  position:relative;float:none !important;display:block !important;
  /* 140+12 de separacion x 5 = 760, y el formulario mide 772: asi los
     cinco slots entran en una sola fila. */
  width:140px !important;height:105px !important;margin:0 !important;
  border:1.5px dashed #C7CDD5 !important;border-radius:var(--tv-r) !important;
  background:var(--tv-papel-2) !important;background-image:none !important;
  overflow:hidden;transition:border-color .15s,background .15s;
}
.tv-form .divs_in_carga li:hover,
.tv-form .divs_in_carga_small li:hover{border-color:var(--tv-verde-texto) !important}
.tv-form .divs_in_carga li input[type=file],
.tv-form .divs_in_carga_small li input[type=file]{
  position:absolute !important;left:0;top:0;width:100% !important;height:100% !important;
  opacity:0;cursor:pointer;z-index:2;padding:0 !important;border:0 !important;
}
/* #photo-N: el contenedor donde el JS mete la miniatura */
.tv-form [id^="photo-"]{
  position:absolute !important;inset:0 !important;
  width:auto !important;height:auto !important;
  display:grid;place-items:center;padding:8px;box-sizing:border-box;
}
/* object-fit:contain y no cover: asi se ve la foto entera al revisarla,
   y el dibujo de "sin foto" no queda estirado. Los tamaños van con
   !important porque el JS los escribe inline. */
.tv-form [id^="photo-"] img{
  width:100% !important;height:100% !important;
  max-width:100% !important;max-height:100% !important;
  margin:0 !important;object-fit:contain !important;border-radius:8px !important;
}
/* El .cerrar no lleva fondo propio: upload-img.js se lo pone recien
   cuando hay una foto cargada, y le mete adentro su icono. Si se le
   pintara aca, en los slots vacios apareceria una X que no hace nada. */
.tv-form .cerrar{
  position:absolute !important;right:6px;top:6px;z-index:3;
  width:22px !important;height:22px !important;border-radius:50% !important;
  margin:0 !important;cursor:pointer;overflow:hidden;
}

/* Las formas de pago viven dentro de un <label class="fset_label2_fp">
   que es UNA celda de la grilla de condiciones, asi que las ocho casillas
   quedaban apiladas en una columna angosta. Ocupa la fila entera. */
.tv-form .fset_label2_fp{grid-column:1/-1;align-items:stretch !important}

/* "Reserva con" y "Cancelacion" traen un select y un importe juntos: van
   uno al lado del otro, no apilados. */
.tv-form .fset_label2{flex-direction:row !important;flex-wrap:wrap;align-items:center;gap:8px}
.tv-form .fset_label2 > .label_text{flex-basis:100%}
.tv-form .fset_label2 > select{width:auto !important;flex:none;min-width:118px}
.tv-form .fset_label2 > input{flex:1 !important;min-width:90px}

/* ---- seccion Condiciones ----
 * Dos columnas: a la izquierda los datos de la estadia, repartidos en dos
 * sub-columnas (horarios y estadia minima / seña y cancelacion), y a la
 * derecha las formas de pago, tambien de dos en dos. Antes los seis campos
 * caian en una sola grilla auto-fit y las formas de pago se comian una fila
 * entera abajo, lo que estiraba la seccion sin necesidad. */
.tv-form .tv-cond{grid-template-columns:1fr 1fr !important;align-items:start}
.tv-cond-datos{display:grid;grid-template-columns:1fr 1fr;gap:14px 18px;align-items:start}
.tv-cond-col{display:grid;gap:14px;align-content:start}
.tv-cond-pago{min-width:0}
/* dentro de media columna, el auto-fit de .chiquita colapsaba a una sola */
.tv-form .tv-cond .chiquita{grid-template-columns:1fr 1fr !important}
@media (max-width:900px){
  .tv-form .tv-cond{grid-template-columns:1fr !important}
}
@media (max-width:560px){
  .tv-cond-datos{grid-template-columns:1fr}
  .tv-form .tv-cond .chiquita{grid-template-columns:1fr !important}
}

/* ---- seccion Precio ----
 * El calendario arriba, a todo el ancho, y debajo dos columnas: el
 * precio base a la izquierda y los precios por rango de fechas a la
 * derecha. Antes el precio base iba arriba y todo lo del rango quedaba
 * apretado debajo del calendario, en una linea con anchos fijos.
 * ------------------------------------------------------------------- */
.tv-form #alta_calendario_precios{margin:0 0 4px}
.tv-precio-cols{
  display:grid;grid-template-columns:1fr 1fr;gap:22px;
  margin-top:18px;padding-top:18px;border-top:1px solid var(--tv-linea);
  clear:both;
}
.tv-precio-col > .label_text{
  display:block !important;margin:0 0 10px !important;
  font-size:13.5px !important;font-weight:600 !important;
}
.tv-form .tv-precio-fila{
  display:flex !important;align-items:stretch;gap:8px;width:100%;
}
.tv-form .tv-precio-fila select{
  width:auto !important;flex:none;min-width:88px;
  background-color:var(--tv-papel-2) !important;color:var(--tv-tinta-2) !important;
}
.tv-form .tv-precio-fila input{flex:1;min-width:0}
.tv-precio-ayuda{
  margin:9px 0 0;font-size:12.5px;color:var(--tv-tinta-2);line-height:1.5;
}
.tv-precio-rango{
  display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);
  border-radius:10px;padding:10px 13px;margin-bottom:12px;
}
.tv-precio-etq{
  font-size:11.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  color:var(--tv-tinta-3);flex:none;
}
.tv-form .tv-precio-rango .font_list_descrip{
  font-size:13px !important;font-weight:500 !important;
  color:var(--tv-tinta) !important;margin:0 !important;
}
.tv-precio-alta{display:flex;align-items:flex-end;gap:10px}
.tv-precio-alta .fset_label1{flex:1;min-width:0}
.tv-form .tv-precio-alta .tv-btn-borde{
  flex:none;padding:10px 18px;white-space:nowrap;
  border-radius:10px;font-size:13.5px;
}
/* la lista de rangos ya cargados */
.tv-form #alta_precio_rangos{margin-top:12px;float:none !important;width:auto !important}
.tv-form #alta_precio_rangos:empty{margin-top:0}

@media(max-width:860px){
  .tv-precio-cols{grid-template-columns:1fr;gap:18px}
}
@media(max-width:520px){
  .tv-precio-alta{flex-direction:column;align-items:stretch}
  .tv-form .tv-precio-alta .tv-btn-borde{width:100%}
}

/* ---- botones del formulario ---- */
.tv-form-acciones{
  display:flex;flex-wrap:wrap;gap:10px;align-items:center;
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);
  box-shadow:var(--tv-sombra);padding:18px 24px;
}
.tv-form-acciones input[type=submit],
.tv-form-acciones input[type=reset]{
  width:auto !important;float:none !important;position:static !important;
  margin:0 !important;font-family:inherit !important;
  border-radius:11px !important;padding:12px 26px !important;
  font-size:14.5px !important;font-weight:600 !important;cursor:pointer;
  border:0 !important;box-shadow:none !important;transition:background .2s,border-color .15s;
}
.tv-form-acciones input[name=cargar]{
  background:var(--tv-naranja-fuerte) !important;color:#fff !important;
}
.tv-form-acciones input[name=cargar]:hover{background:var(--tv-naranja-hover) !important}
.tv-form-acciones input[name=guardar]{
  background:#fff !important;color:var(--tv-verde-texto) !important;
  border:1.5px solid var(--tv-verde-texto) !important;
}
.tv-form-acciones input[name=guardar]:hover{background:var(--tv-verde-suave) !important}
.tv-form-acciones input[type=reset]{
  background:transparent !important;color:var(--tv-tinta-3) !important;
  padding:12px 14px !important;font-weight:500 !important;
}
.tv-form-acciones input[type=reset]:hover{color:var(--tv-tinta) !important}
.tv-form-nota{font-size:12.5px;color:var(--tv-tinta-2);margin:0;flex:1;min-width:160px}

/* ---- la direccion del alta ----
 * El campo iba flotado a la derecha del texto, con ancho fijo y un borde
 * gris propio. Ahora va debajo de su etiqueta, como cualquier otro campo.
 * prueba.html mete el <input> dentro de un .nominatim-wrapper para colgar
 * el desplegable de sugerencias, asi que el ancho hay que darselo al
 * envoltorio: si no, la columna flex lo achica al contenido. */
.tv-form .tv-direccion{align-items:stretch !important;max-width:620px !important}
.tv-form .tv-direccion .nominatim-wrapper{width:100% !important;float:none !important}

/* ---- el mapa del alta ---- */
.tv-form #map_canvas{
  width:100% !important;height:300px !important;float:none !important;
  margin:14px 0 0 !important;border:1px solid var(--tv-linea);border-radius:var(--tv-r);
}

@media(max-width:560px){
  .tv-form-pag{padding:20px 0 32px}
  .tv-form .fset{padding:18px 16px 20px !important}
  .tv-form .divs_in_carga li,
  .tv-form .divs_in_carga_small li{width:calc(50% - 6px);height:100px}
  .tv-form-acciones{padding:16px}
  .tv-form-acciones input[type=submit]{flex:1;min-width:140px}
}

/* ---------- panel del usuario ----------
 * La columna de la izquierda es menuizq.html, que comparten todas las
 * pantallas del panel. Trae su propio <style> con .bar_user flotado y
 * las clases dash-user-*: aca solo se lo encuadra en la grilla y se le
 * emparejan los colores y los bordes con el resto del diseño.
 * ------------------------------------------------------------------- */
.tv-dash-pag{background:var(--tv-papel-2);padding:26px 0 44px;min-height:60vh}
.tv-dash{display:grid;grid-template-columns:236px minmax(0,1fr);gap:24px;align-items:start}
.tv-dash-cuerpo{min-width:0;display:grid;gap:26px}
.tv-dash-cuerpo > .tv-alerta{margin:0}

/* el lateral compartido: se lo saca del float y se lo deja como celda */
.tv-dash-lateral{min-width:0}
.tv-dash-lateral .bar_user,
.tv-dash-lateral .dash-user-sidebar{
  float:none !important;width:100% !important;margin:0 !important;
}
.tv-dash-lateral .dash-user-sidebar{
  border-radius:var(--tv-r-g) !important;border-color:var(--tv-linea) !important;
  padding:16px !important;box-shadow:var(--tv-sombra);
}
.tv-dash-lateral .dash-user-link,
.tv-dash-lateral .dash-user-profile,
.tv-dash-lateral .dash-user-section,
.tv-dash-lateral .dash-user-section-head{float:none !important}
.tv-dash-lateral .dash-user-link{padding:7px 12px !important;border-radius:10px !important}
.tv-dash-lateral .dash-user-link:hover{background:var(--tv-verde-suave) !important}
.tv-dash-lateral .dash-user-link-label{font-size:13.5px !important}
.tv-dash-lateral .dash-user-profile-name{font-size:15.5px !important}
/* el word-break del menu partia el mail al medio de la palabra
   ("codeart2016@gmail.c / om"): mejor cortarlo con puntos suspensivos */
.tv-dash-lateral .dash-user-profile-email{
  word-break:normal !important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.tv-dash-lateral .dash-user-avatar,
.tv-dash-lateral .dash-user-avatar-image,
.tv-dash-lateral .dash-user-avatar-fallback{
  width:54px !important;height:54px !important;flex-basis:54px !important;
  line-height:54px !important;font-size:26px !important;
}

/* los numeros de arriba, como atajos a las mismas pantallas del menu */
.tv-dash-numeros{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;
}
.tv-dash-numeros a{
  display:block;background:#fff;border:1px solid var(--tv-linea);
  border-radius:var(--tv-r);padding:15px 17px;transition:.15s;
}
.tv-dash-numeros a:hover{border-color:var(--tv-verde-texto);box-shadow:var(--tv-sombra)}
.tv-dash-numeros b{
  display:block;font-size:25px;font-weight:700;letter-spacing:-.02em;
  color:var(--tv-tinta);line-height:1.1;
}
.tv-dash-numeros span{display:block;margin-top:3px;font-size:12.5px;color:var(--tv-tinta-2)}

/* el encabezado del panel, con sus botones a la derecha */
.tv-dash-cab{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.tv-dash-cab > div{min-width:0}
.tv-dash-cab-acciones{display:flex;gap:10px;flex:none}

/* solapas: las mismas ramas que el menu de la izquierda, arriba de la
   lista, para saltar de una a otra sin volver al menu */
.tv-solapas{display:flex;flex-wrap:wrap;gap:6px}
.tv-solapas a{
  display:inline-block;padding:8px 15px;border-radius:999px;font-size:13.5px;
  border:1px solid var(--tv-linea);background:#fff;color:var(--tv-tinta-2);transition:.15s;
}
.tv-solapas a:hover{border-color:var(--tv-verde-texto);color:var(--tv-verde-texto)}
.tv-solapas a.tv-act{
  background:var(--tv-verde-banner);border-color:var(--tv-verde-banner);
  color:#fff;font-weight:600;
}

/* ---- una fila del panel: foto, datos, y a la derecha precio y botones ---- */
.tv-filas{display:grid;gap:12px}
.tv-fila{
  display:grid;grid-template-columns:150px minmax(0,1fr) 190px;gap:16px;
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r);
  padding:13px;align-items:center;
}
.tv-fila-foto{
  display:block;position:relative;aspect-ratio:4/3;border-radius:10px;
  overflow:hidden;background:var(--tv-papel-2);
}
.tv-fila-foto img{width:100%;height:100%;object-fit:cover;display:block}
.tv-fila-chip{
  position:absolute;left:7px;top:7px;padding:3px 9px;border-radius:999px;
  font-size:10.5px;font-weight:600;background:rgba(20,26,20,.72);color:#fff;
}
.tv-fila-chip.tv-chip-ok{background:var(--tv-verde-banner)}
.tv-fila-chip.tv-chip-espera{background:#B4690E}
.tv-fila-chip.tv-chip-mal{background:#8A2C12}

.tv-fila-cuerpo{min-width:0}
.tv-fila-cuerpo h3{font-size:15.5px;font-weight:600;margin:0;line-height:1.25}
.tv-fila-cuerpo h3 a:hover{color:var(--tv-verde-texto)}
.tv-fila-donde{
  display:flex;align-items:center;gap:5px;margin:4px 0 9px;
  font-size:12.5px;color:var(--tv-tinta-2);
}
.tv-fila-datos{display:flex;flex-wrap:wrap;gap:4px 18px;margin:0}
.tv-fila-datos > div{display:flex;gap:6px;min-width:0}
.tv-fila-datos dt{font-size:12.5px;color:var(--tv-tinta-3);margin:0}
.tv-fila-datos dd{font-size:12.5px;color:var(--tv-tinta);margin:0;font-weight:500}
.tv-fila-pie{margin:9px 0 0;font-size:11.5px;color:var(--tv-tinta-3)}

.tv-fila-lado{display:flex;flex-direction:column;align-items:flex-end;gap:10px;text-align:right}
.tv-fila-botones{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
/* Antes eran <button> con onclick="location='...'": no se podian abrir
   en otra pestaña ni los anunciaba un lector de pantalla. */
.tv-fila-btn{
  display:inline-block;padding:6px 12px;border-radius:8px;font-size:12.5px;font-weight:500;
  border:1px solid var(--tv-linea);background:#fff;color:var(--tv-tinta-2);transition:.15s;
}
.tv-fila-btn:hover{border-color:var(--tv-verde-texto);color:var(--tv-verde-texto);background:var(--tv-verde-suave)}
.tv-fila-btn-ver{border-color:var(--tv-verde-banner);color:var(--tv-verde-texto);font-weight:600}
.tv-fila-btn-mal:hover{border-color:#E8B4A4;color:#8A2C12;background:#FDEEEA}

@media (max-width:1100px){
  .tv-fila{grid-template-columns:130px minmax(0,1fr)}
  .tv-fila-lado{
    grid-column:1/-1;flex-direction:row;align-items:center;justify-content:space-between;
    text-align:left;border-top:1px solid var(--tv-linea);padding-top:11px;flex-wrap:wrap;
  }
}
@media (max-width:560px){
  .tv-fila{grid-template-columns:1fr}
  .tv-fila-foto{aspect-ratio:16/9}
  .tv-fila-botones{justify-content:flex-start}
}

/* ---- foto de perfil ----
 * upload-img.js mete la miniatura dentro de #photo-8 con el tamaño
 * INLINE (105x105) y el .cerrar solo aparece cuando hay foto. El html
 * viene de agosto.css: el <ul> flotado dejaba el contenedor con 0 de
 * alto y #photo-8, que es absolute y mide 160, se montaba encima del
 * texto de al lado y del primer campo. Aca se le da una caja real.
 * ------------------------------------------------------------------- */
.tv-perfil-foto{
  display:flex;align-items:center;gap:16px;
  margin-bottom:20px;padding-bottom:18px;border-bottom:1px solid var(--tv-linea);
}
.tv-perfil-foto .divs_in_carga_small_user{
  position:relative !important;flex:none;
  width:96px !important;height:96px !important;
  margin:0 !important;padding:0 !important;float:none !important;
}
.tv-perfil-foto .divs_in_carga_small_user ul,
.tv-perfil-foto .divs_in_carga_small_user li{
  position:absolute !important;inset:0 !important;
  width:auto !important;height:auto !important;
  margin:0 !important;padding:0 !important;float:none !important;
  list-style:none;border:0 !important;background:none !important;
}
.tv-perfil-foto .divs_in_carga_small_user li{
  border-radius:50% !important;overflow:hidden;
  background:var(--tv-papel-2) !important;
  border:1px solid var(--tv-linea) !important;cursor:pointer;
}
.tv-perfil-foto .divs_in_carga_small_user li:hover{border-color:var(--tv-verde-texto) !important}
/* el <input type=file> tapa el circulo entero */
.tv-perfil-foto input[type=file]{
  position:absolute !important;inset:0;width:100% !important;height:100% !important;
  opacity:0;cursor:pointer;z-index:2;padding:0 !important;border:0 !important;
}
.tv-perfil-foto #photo-8{
  position:absolute !important;inset:0 !important;
  width:auto !important;height:auto !important;top:0 !important;
  display:grid;place-items:center;
}
/* los tamaños van con !important porque el js los escribe inline */
.tv-perfil-foto #photo-8 img{
  width:100% !important;height:100% !important;
  margin:0 !important;object-fit:cover !important;border-radius:50% !important;
}
/* el aviso de formatos que agrega el js no entra en un circulo de 96px */
.tv-perfil-foto #photo-8 span{display:none !important}
.tv-perfil-foto .cerrar{
  position:absolute !important;right:-2px;top:-2px;z-index:3;
  width:22px;height:22px;padding:0 !important;
  display:grid;place-items:center;border-radius:50%;
  background:rgba(20,26,20,.72);
}
.tv-perfil-foto .cerrar:empty{display:none}
.tv-perfil-foto-ayuda{margin:0;font-size:13px;color:var(--tv-tinta-2);line-height:1.45}

/* ---------- reseñas ---------- */

/* Las estrellitas, tanto las de mostrar como las de elegir. El vacio
   no se dibuja gris claro sino con el mismo color al 22%: sobre el
   papel crema queda mas parejo que un gris frio. */
.tv-estr{display:inline-flex;gap:1px;vertical-align:middle;line-height:1}
.tv-estr-u{color:rgba(240,116,31,.22);font-size:14px}
.tv-estr-on{color:var(--tv-naranja)}

.tv-res-resumen{
  display:flex;flex-wrap:wrap;gap:26px;margin:0 0 20px;padding:16px 18px;
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);border-radius:var(--tv-r);
}
.tv-res-nota{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--tv-tinta-2)}
.tv-res-nota b{font-size:22px;color:var(--tv-tinta);line-height:1}
.tv-res-nota .tv-estr-u{font-size:15px}

.tv-res-lista{display:grid;gap:16px}
@media (min-width:820px){
  .tv-res-lista{grid-template-columns:1fr 1fr;gap:18px 26px}
}

.tv-resena{
  padding:15px 17px;border:1px solid var(--tv-linea);border-radius:var(--tv-r);
  background:#fff;
}
.tv-resena-cab{
  display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px;
}
.tv-resena-cab b{font-size:14px;color:var(--tv-tinta)}
.tv-resena-fecha{font-size:12px;color:var(--tv-tinta-3)}
.tv-resena-puntos{
  display:flex;flex-wrap:wrap;gap:6px 18px;margin-bottom:10px;
  font-size:12.5px;color:var(--tv-tinta-2);
}
.tv-resena-puntos span{display:inline-flex;align-items:center;gap:6px}
.tv-resena p{margin:0;font-size:14px;line-height:1.55;color:var(--tv-tinta);overflow-wrap:anywhere}

.tv-resena-titulo{margin:22px 0 12px;font-size:15px;color:var(--tv-tinta)}
.tv-resena-titulo:first-of-type{margin-top:0}
.tv-resena-espera{
  margin:18px 0 0;padding:13px 15px;border-radius:var(--tv-r);
  background:var(--tv-papel-2);border:1px dashed var(--tv-linea);
  color:var(--tv-tinta-2);font-size:13px;line-height:1.5;
}
.tv-resena-aviso{margin:2px 0 0;font-size:12.5px;color:var(--tv-tinta-2);line-height:1.5}

.tv-resena-form{display:grid;gap:18px;justify-items:start}
.tv-resena-form .tv-campo{width:100%;margin:0}

/* Elegir puntaje. Son radios de verdad --se usan con el teclado-- y el
   dibujo sale del CSS: la estrella se pinta si le sigue una marcada,
   por eso van en orden inverso con direction:rtl. */
.tv-punt{border:0;padding:0;margin:0;min-width:0}
.tv-punt legend{padding:0;font-size:14px;font-weight:600;color:var(--tv-tinta)}
.tv-punt-ayuda{margin:2px 0 7px;font-size:12.5px;color:var(--tv-tinta-2)}
.tv-punt-estrellas{position:relative;display:inline-flex;flex-direction:row-reverse;gap:3px}
/* El radio se esconde pero sigue existiendo para el teclado y para el
   lector de pantalla. position:relative arriba y left/top aca porque si
   no, el absolute se cuelga del primer ancestro posicionado y el radio
   termina en cualquier lado de la pagina. Y pointer-events:none para
   que no se coma el clic que iba a la estrella. */
.tv-punt-estrellas input{
  position:absolute;left:0;top:0;width:1px;height:1px;opacity:0;pointer-events:none;
}
.tv-punt-estrellas label{
  cursor:pointer;font-size:27px;line-height:1;color:rgba(240,116,31,.22);
  transition:color .12s ease;
}
.tv-punt-estrellas input:checked ~ label,
.tv-punt-estrellas label:hover,
.tv-punt-estrellas label:hover ~ label{color:var(--tv-naranja)}
.tv-punt-estrellas input:focus-visible + label{
  outline:2px solid var(--tv-verde-texto);outline-offset:2px;border-radius:4px;
}

/* el nombre propio del alojamiento, en el alta y en la edicion. Usa las
   clases viejas del formulario, asi que solo se ajusta lo suyo. */
.tv-campo-titulo{grid-column:1 / -1}
.tv-campo-titulo input{
  width:100%;box-sizing:border-box;border:1px solid var(--tv-linea);border-radius:8px;
  padding:9px 11px;font-family:inherit;font-size:14px;color:var(--tv-tinta);background:#fff;
}
.tv-campo-titulo input:focus{
  outline:none;border-color:var(--tv-verde-texto);box-shadow:0 0 0 3px rgba(53,125,41,.14);
}
.tv-campo-titulo em{font-style:normal;color:var(--tv-tinta-3);font-weight:400}
.tv-campo-nota{display:block;margin-top:5px;font-size:12px;color:var(--tv-tinta-2);line-height:1.45}

/* ---------- contacto, reportes y bandeja ---------- */

/* La trampa anti bot. No usa display:none ni visibility:hidden porque
   algunos bots los detectan y saltean el campo: se lo saca de la
   pantalla y se lo deja fuera del recorrido del teclado. */
.tv-trampa{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}

.tv-contacto{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:26px;align-items:start}
.tv-contacto .tv-panel{margin:0}
.tv-contacto-nota{
  padding:20px 22px;border-radius:var(--tv-r);
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);
}
.tv-contacto-nota h2{margin:0 0 12px;font-size:16px;color:var(--tv-tinta)}
.tv-contacto-nota p{margin:0 0 12px;font-size:13.5px;line-height:1.6;color:var(--tv-tinta-2)}
.tv-contacto-nota p:last-child{margin-bottom:0}
@media (max-width:820px){ .tv-contacto{grid-template-columns:1fr} }

/* el pie de la ficha */
.tv-reportar{
  margin:26px 0 0;padding-top:18px;border-top:1px solid var(--tv-linea);
  font-size:13px;color:var(--tv-tinta-3);
}
.tv-reportar a{color:var(--tv-tinta-2);text-decoration:underline;text-underline-offset:2px}
.tv-reportar a:hover{color:var(--tv-naranja-fuerte)}

.tv-reportar-form{display:grid;gap:14px}
.tv-reportar-form select,
.tv-reportar-form input[type=email],
.tv-reportar-form input[type=text],
.tv-reportar-form textarea{
  width:100%;box-sizing:border-box;border:1px solid var(--tv-linea);border-radius:10px;
  padding:10px 12px;font-family:inherit;font-size:14px;color:var(--tv-tinta);background:#fff;
}
.tv-reportar-form textarea{resize:vertical;min-height:96px}
.tv-reportar-form button{justify-self:start}

.tv-dialogo-bajada{margin:0 0 16px;font-size:13.5px;line-height:1.55;color:var(--tv-tinta-2)}

/* la bandeja */
.tv-buzon{
  padding:16px 18px;border:1px solid var(--tv-linea);border-radius:var(--tv-r);background:#fff;
}
.tv-buzon-nuevo{border-left:3px solid var(--tv-naranja-fuerte)}
.tv-buzon-ok{opacity:.66}
.tv-buzon-cab{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:9px}
.tv-buzon-cab b{font-size:14px;color:var(--tv-tinta)}
.tv-buzon-tipo{
  padding:2px 9px;border-radius:999px;font-size:11px;font-weight:600;
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);color:var(--tv-tinta-2);
}
.tv-buzon-den{background:#FDEEEA;border-color:#F3CDC2;color:#8A2C12}
.tv-buzon-fecha{margin-left:auto;font-size:12px;color:var(--tv-tinta-3)}
.tv-buzon-texto{margin:0 0 10px;font-size:14px;line-height:1.55;color:var(--tv-tinta);overflow-wrap:anywhere}
.tv-buzon-quien,
.tv-buzon-aviso{margin:0 0 6px;font-size:12.5px;color:var(--tv-tinta-2)}
.tv-buzon-baja{
  margin-left:6px;padding:1px 8px;border-radius:999px;font-size:11px;
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);color:var(--tv-tinta-3);
}
.tv-buzon-acciones{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.tv-buzon-acciones form{margin:0}

/* ---------- pagina de destino ---------- */

/* Ojo con el nombre: .tv-destino son las fichas de la portada. Esta
   pagina usa tv-dest- para no pisarlas. */
.tv-dest-pag{padding:0 0 60px}
.tv-dest-cab{margin:4px 0 22px}
.tv-dest-cab h1{margin:0 0 6px;font-size:30px;line-height:1.15;color:var(--tv-tinta)}
.tv-dest-cab p{margin:0;font-size:14.5px;color:var(--tv-tinta-2)}
.tv-dest-cab b{color:var(--tv-tinta)}

.tv-dest-tipos{display:flex;flex-wrap:wrap;gap:9px;margin:0 0 24px}
.tv-dest-tipos a{
  display:inline-flex;align-items:center;gap:7px;
  padding:8px 14px;border-radius:999px;
  border:1px solid var(--tv-linea);background:#fff;
  font-size:13.5px;color:var(--tv-tinta-2);
}
.tv-dest-tipos a:hover{border-color:var(--tv-verde-texto);color:var(--tv-verde-texto)}
.tv-dest-tipos a span{
  font-size:11.5px;color:var(--tv-tinta-3);
  background:var(--tv-papel-2);border-radius:999px;padding:1px 7px;
}
.tv-dest-tipos a.tv-act{
  background:var(--tv-verde-suave);border-color:#CDE6C6;
  color:var(--tv-verde-texto);font-weight:600;
}
.tv-dest-tipos a.tv-act span{background:#fff;color:var(--tv-verde-texto)}

.tv-dest-otros{margin-top:44px;padding-top:28px;border-top:1px solid var(--tv-linea)}
.tv-dest-otros h2{margin:0 0 14px;font-size:18px;color:var(--tv-tinta)}
.tv-dest-chips{display:grid;grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:10px}
.tv-dest-chips a{
  display:block;padding:12px 14px;border-radius:var(--tv-r);
  border:1px solid var(--tv-linea);background:#fff;
}
.tv-dest-chips a:hover{border-color:var(--tv-verde-texto)}
.tv-dest-chips b{display:block;font-size:14px;color:var(--tv-tinta)}
.tv-dest-chips span{display:block;margin-top:2px;font-size:12px;color:var(--tv-tinta-3)}

@media (max-width:700px){
  .tv-dest-cab h1{font-size:24px}
}

/* ---------- promociones ---------- */

/* La cinta sobre la foto de la tarjeta. Va arriba a la izquierda,
   debajo de la etiqueta del tipo: abajo se pisaba con .tv-donde, que
   ocupa todo el ancho inferior con la ubicacion. */
.tv-promo-tag{
  position:absolute;left:10px;top:40px;z-index:2;
  padding:4px 9px;border-radius:999px;
  background:var(--tv-naranja-fuerte);color:#fff;
  font-size:12px;font-weight:700;letter-spacing:.2px;
}

/* el precio tachado, en tarjetas y en la caja de reserva */
.tv-plata s,
.tv-precio-linea s{color:var(--tv-tinta-3);font-weight:400;margin-right:6px;text-decoration:line-through}
.tv-plata s{font-size:12.5px;display:block;line-height:1.2;margin:0}
.tv-precio-linea s{font-size:15px}

/* el precio de lista en la fila de resultados, arriba del rebajado */
.tv-n-lista{font-size:13px;color:var(--tv-tinta-3);line-height:1.2}
.tv-n-lista s{text-decoration:line-through}

/* el cartel de la promocion en la ficha */
.tv-promo-cinta{
  display:flex;align-items:center;gap:9px;margin-top:10px;
  padding:8px 11px;border-radius:var(--tv-r);
  background:#FDF0E6;border:1px solid #F2C9A8;
}
.tv-promo-cinta b{
  flex:none;padding:2px 8px;border-radius:999px;
  background:var(--tv-naranja-fuerte);color:#fff;font-size:12.5px;
}
.tv-promo-cinta span{font-size:12.5px;color:#7A3E12;line-height:1.35}

/* la pantalla de administracion */
.tv-promo-h{margin:0 0 6px;font-size:16px}
.tv-promo-ayuda{margin:0 0 16px;font-size:13px;color:var(--tv-tinta-2);line-height:1.55;max-width:70ch}

.tv-promo-form{
  display:grid;gap:14px;align-items:end;
  grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
}
.tv-promo-form .tv-campo{margin:0}
.tv-promo-form input{
  width:100%;border:1px solid var(--tv-linea);border-radius:10px;padding:10px 12px;
  font-family:inherit;font-size:14px;color:var(--tv-tinta);background:#fff;
}
.tv-promo-form input:focus{
  outline:none;border-color:var(--tv-verde-texto);box-shadow:0 0 0 3px rgba(53,125,41,.14);
}
.tv-promo-pct{position:relative}
.tv-promo-pct i{
  position:absolute;right:12px;bottom:11px;font-style:normal;
  font-size:14px;color:var(--tv-tinta-3);pointer-events:none;
}
.tv-promo-pct input{padding-right:28px}
.tv-promo-tit{grid-column:1 / -1}
.tv-promo-form .tv-campo em{font-style:normal;color:var(--tv-tinta-3);font-weight:400}
.tv-promo-form button{justify-self:start}

.tv-promo-lista{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.tv-promo-item{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:13px 15px;border:1px solid var(--tv-linea);border-radius:var(--tv-r);background:#fff;
}
.tv-promo-pct-caja{
  flex:none;display:grid;place-items:center;min-width:58px;height:44px;border-radius:10px;
  background:var(--tv-naranja-fuerte);color:#fff;
}
.tv-promo-pct-caja b{font-size:16px}
.tv-promo-datos{flex:1;min-width:190px;display:grid;gap:2px}
.tv-promo-datos b{font-size:14px;color:var(--tv-tinta)}
.tv-promo-datos span{font-size:12.5px;color:var(--tv-tinta-2)}
.tv-promo-ej s{color:var(--tv-tinta-3)}
.tv-promo-ej b{font-size:12.5px}
.tv-promo-estado{
  flex:none;padding:3px 10px;border-radius:999px;font-size:11.5px;font-weight:600;
  background:var(--tv-papel-2);color:var(--tv-tinta-2);border:1px solid var(--tv-linea);
}
.tv-promo-on .tv-promo-estado{background:var(--tv-verde-suave);border-color:#CDE6C6;color:#2A5F20}
.tv-promo-prox .tv-promo-estado{background:#FFF8E8;border-color:#F0DCA8;color:#6B5416}
.tv-promo-off,
.tv-promo-fin{opacity:.62}
.tv-promo-off .tv-promo-pct-caja,
.tv-promo-fin .tv-promo-pct-caja{background:var(--tv-tinta-3)}
.tv-promo-acciones{display:flex;gap:8px;flex:none}
.tv-promo-acciones form{margin:0}

@media (max-width:560px){
  .tv-promo-item{align-items:flex-start}
  .tv-promo-acciones{width:100%}
}

/* el puntaje de reseñas en las tarjetas y en las filas de resultados */
.tv-nota{display:flex;align-items:center;gap:6px;margin:2px 0 0;font-size:12.5px;color:var(--tv-tinta-2)}
.tv-nota b{color:var(--tv-tinta);font-size:13px}
/* la aclaracion de que esas estrellas son la categoria del hotel */
.tv-puntaje{display:flex;align-items:center;gap:6px}
.tv-puntaje span{font-size:11.5px;color:var(--tv-tinta-3)}

/* solo el contador, no las estrellas: ".tv-nota span" las alcanzaba
   tambien, y por especificidad les ganaba, asi que salian grises */
.tv-nota-n{color:var(--tv-tinta-3)}
.tv-nota .tv-estr-u{font-size:12px}

/* el aviso de reseñas pendientes, en la portada del panel */
.tv-dash-pend{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.tv-dash-pend .tv-btn-borde{flex:none}

/* la reputacion de la otra parte, al lado de su nombre en el listado */
.tv-fila-rep{display:inline-flex;align-items:center;gap:4px;margin-left:8px;font-size:12px;color:var(--tv-tinta-2)}
.tv-fila-rep i{font-style:normal;color:var(--tv-tinta-3)}
.tv-fila-rep .tv-estr-u{font-size:12px}

/* ---------- conversacion de una reserva ---------- */
.tv-chat-cab{
  display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  flex-wrap:wrap;margin-bottom:18px;
}
.tv-chat-cab h2{margin:0}

.tv-chat{list-style:none;margin:0 0 18px;padding:0;display:grid;gap:10px}
.tv-chat-msj{display:flex}
/* los propios van a la derecha: de un vistazo se ve quien dijo que */
.tv-chat-mio{justify-content:flex-end}
.tv-chat-globo{
  max-width:min(78%, 60ch);padding:11px 14px;border-radius:14px;
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);
}
.tv-chat-mio .tv-chat-globo{background:var(--tv-verde-suave);border-color:#CDE6C6}
.tv-chat-globo p{
  margin:0;font-size:14px;line-height:1.5;color:var(--tv-tinta);
  /* un mensaje puede traer una direccion larga sin espacios */
  overflow-wrap:anywhere;
}
/* los enlaces que pasa la otra parte: subrayados, para que se vea que
   son un enlace tambien en el globo propio, que ya viene de color */
.tv-chat-globo p a{
  color:var(--tv-verde-texto);text-decoration:underline;text-underline-offset:2px;
}
.tv-chat-globo p a:hover,
.tv-chat-globo p a:focus-visible{color:var(--tv-naranja-fuerte)}

.tv-chat-hora{display:block;margin-top:6px;font-size:11.5px;color:var(--tv-tinta-3)}

/* la lista va siempre en el html, aunque todavia no haya nada */
.tv-chat:empty{display:none}

/* los que llegan con la pantalla abierta entran con un gesto corto, si
   no aparecen de golpe y no se nota que hay algo nuevo */
.tv-chat-nuevo{animation:tv-chat-entra .24s ease-out}
@keyframes tv-chat-entra{
  from{opacity:0;transform:translateY(6px)}
  to{opacity:1;transform:none}
}
@media (prefers-reduced-motion:reduce){
  .tv-chat-nuevo{animation:none}
}

.tv-chat-vacio,
.tv-chat-cerrado{
  margin:0;padding:14px 16px;border-radius:var(--tv-r);
  background:var(--tv-papel-2);border:1px dashed var(--tv-linea);
  color:var(--tv-tinta-2);font-size:13.5px;line-height:1.5;
}
.tv-chat-cerrado{background:#FFF8E8;border-style:solid;border-color:#F0DCA8;color:#6B5416}

.tv-chat-form{display:grid;gap:10px;justify-items:end}
.tv-chat-form .tv-campo{width:100%;margin:0}
.tv-form textarea,
.tv-resena-form textarea,
.tv-chat-form textarea{
  width:100%;border:1px solid var(--tv-linea);border-radius:10px;padding:11px 13px;
  font-family:inherit;font-size:14px;color:var(--tv-tinta);background:#fff;
  resize:vertical;min-height:76px;
}
.tv-resena-form textarea:focus,
.tv-chat-form textarea:focus{
  outline:none;border-color:var(--tv-verde-texto);box-shadow:0 0 0 3px rgba(53,125,41,.14);
}
.tv-chat-nota{margin:12px 0 0;font-size:12.5px;color:var(--tv-tinta-2)}

/* el contador de mensajes sin leer, en el boton del listado */
.tv-fila-globo{
  display:inline-block;min-width:17px;padding:0 5px;margin-left:5px;
  border-radius:999px;background:var(--tv-naranja-fuerte);color:#fff;
  font-size:10.5px;font-weight:700;line-height:17px;text-align:center;
}

/* etiqueta que solo leen los lectores de pantalla */
.tv-oculto{
  position:absolute !important;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;
}

@media (max-width:560px){
  .tv-chat-globo{max-width:88%}
  .tv-chat-form{justify-items:stretch}
}

/* ---------- cuenta regresiva de los enlaces del correo ---------- */
.tv-cuenta-reloj{
  margin:0 0 16px;padding:10px 14px;border-radius:10px;
  background:#FFF8E8;border:1px solid #F0DCA8;color:#6B5416;
  font-size:13.5px;line-height:1.45;
}
.tv-cuenta-reloj b{font-variant-numeric:tabular-nums}
/* cuando se vencio deja de ser una espera y pasa a ser un aviso */
.tv-cuenta-reloj.tv-vencido{background:#FDEEEA;border-color:#F3CDC2;color:#8A2C12}
.tv-cuenta-reloj.tv-vencido a{color:#8A2C12;font-weight:600;text-decoration:underline}

.tv-reenvio{margin:0 0 6px}
.tv-reenvio button{width:100%;justify-content:center}
.tv-reenvio button:disabled{
  opacity:.55;cursor:not-allowed;font-variant-numeric:tabular-nums;
}
.tv-reenvio button:disabled:hover{background:#fff;border-color:var(--tv-linea);color:var(--tv-tinta-2)}

.tv-ic-mal{background:#FDEEEA !important;color:#8A2C12 !important}

/* ---------- paginas legales ----------
 * Un documento largo: el indice a la izquierda, pegado al hacer scroll,
 * y el texto en una medida que se pueda leer. Antes era un <div> suelto
 * a todo el ancho, con lineas de 1180px.
 * ------------------------------------------------------------------- */
.tv-legal-pag{background:var(--tv-papel-2);padding:26px 0 48px}
.tv-legal{display:grid;grid-template-columns:280px minmax(0,1fr);gap:32px;align-items:start}

/* El indice es un <nav>, y el reset de mas arriba
   -- body.tv nav[class*="tv-"] -- le pone position:static y
   max-height:none con especificidad (0,2,2). Por eso estas dos van en
   una regla con la misma forma: si no, el indice no se pegaba y se
   perdia apenas se scrolleaba. */
body.tv nav.tv-legal-indice{
  position:sticky;top:calc(var(--tv-alto-fijo) + 18px);
  max-height:calc(100vh - var(--tv-alto-fijo) - 36px);
}
.tv-legal-indice{
  overflow-y:auto;
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);
  padding:18px 20px;box-shadow:var(--tv-sombra);
}
.tv-legal-indice > b{
  display:block;font-size:11.5px;font-weight:600;color:var(--tv-tinta-3);
  text-transform:uppercase;letter-spacing:.04em;margin-bottom:11px;
}
.tv-legal-indice ol{list-style:none;margin:0;padding:0}
.tv-legal-indice li{margin:0}
.tv-legal-indice a{
  display:block;padding:5px 9px;border-radius:7px;font-size:12.5px;line-height:1.35;
  color:var(--tv-tinta-2);transition:.12s;
}
.tv-legal-indice a:hover{background:var(--tv-verde-suave);color:var(--tv-verde-texto)}
/* las subsecciones (4.2, 4.3...) van indentadas y mas chicas */
.tv-legal-n3 a{padding-left:20px;font-size:12px;color:var(--tv-tinta-3)}

.tv-legal-texto{
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);
  padding:34px 40px 40px;box-shadow:var(--tv-sombra);
  max-width:74ch;font-size:15px;line-height:1.7;color:var(--tv-tinta-2);
}
.tv-legal-texto h2{
  font-size:19px;font-weight:600;letter-spacing:-.015em;color:var(--tv-tinta);
  margin:34px 0 10px;padding-top:20px;border-top:1px solid var(--tv-linea);
  scroll-margin-top:calc(var(--tv-alto-fijo) + 20px);
}
.tv-legal-texto h3{
  font-size:15.5px;font-weight:600;color:var(--tv-tinta);margin:24px 0 8px;
  scroll-margin-top:calc(var(--tv-alto-fijo) + 20px);
}
.tv-legal-texto h2:first-of-type{margin-top:28px}
.tv-legal-texto p{margin:0 0 14px}
.tv-legal-texto a{color:var(--tv-verde-texto);font-weight:600;text-decoration:underline}

/* la seccion a la que apunta el link del pie, para no perderla */
.tv-legal-foco{
  background:var(--tv-verde-suave);border-radius:8px;
  padding:8px 12px !important;margin-left:-12px;margin-right:-12px;
}
.tv-legal-aviso{
  background:#FFF8E8;border:1px solid #F0DCA8;border-radius:var(--tv-r);
  padding:13px 16px;margin:0 0 22px !important;font-size:13.5px;color:#6B5416;
}
.tv-legal-aviso a{color:#6B5416}

@media (max-width:900px){
  .tv-legal{grid-template-columns:1fr;gap:18px}
  body.tv nav.tv-legal-indice{position:static;max-height:none}
  .tv-legal-texto{padding:24px 22px 28px}
}
@media (max-width:560px){
  .tv-legal-pag{padding:18px 0 32px}
  .tv-legal-texto{padding:20px 17px 24px;font-size:14.5px}
}

/* ---- confirmar un cambio de estado ----
 * La pantalla que pregunta antes de publicar, finalizar o republicar.
 * Es una sola decision: la caja va angosta para que no quede un boton
 * perdido en 1180px de ancho.
 * ------------------------------------------------------------------- */
.tv-caja-angosta{max-width:760px}
.tv-fila-confirmar{align-items:start}
.tv-confirmar-acciones{
  display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:16px;
}
.tv-confirmar-acciones form{margin:0}
/* el boton que da de baja no va en naranja: no es la salida esperada */
.tv-btn-mal{border-color:#E8B4A4;color:#8A2C12}
.tv-btn-mal:hover{background:#FDEEEA;border-color:#8A2C12;color:#8A2C12}

@media (max-width:560px){
  .tv-confirmar-acciones{flex-direction:column;align-items:stretch}
  .tv-confirmar-acciones form,
  .tv-confirmar-acciones form button,
  .tv-confirmar-acciones > a{width:100%;justify-content:center;text-align:center}
}

/* dos columnas de tarjetas, para los formularios del perfil */
.tv-dash-cols{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:start}
.tv-panel-caja{
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r-g);
  box-shadow:var(--tv-sombra);padding:22px 24px;min-width:0;
}
.tv-panel-caja > h2{font-size:17px;font-weight:600;letter-spacing:-.015em;margin:0 0 16px}
.tv-panel-caja .tv-campo:last-of-type{margin-bottom:18px}
.tv-campo small{display:block;margin-top:5px;font-size:12px;color:var(--tv-tinta-2);line-height:1.4}
.tv-campo small a{color:var(--tv-verde-texto);font-weight:600}
.tv-campo small a:hover{text-decoration:underline}
.tv-campo .tv-error{
  display:block;margin-top:5px;font-size:12.5px;font-style:normal;color:#8A2C12;
}
.tv-ancho{width:100%;justify-content:center}
/* nombre y apellido, uno al lado del otro */
.tv-campos-par{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
@media (max-width:420px){.tv-campos-par{grid-template-columns:1fr}}
.tv-mapa-contacto{height:280px;border:1px solid var(--tv-linea);border-radius:var(--tv-r)}
/* el campo de direccion de contacto usa el mismo envoltorio que el alta */
.tv-panel-caja .tv-direccion .nominatim-wrapper{width:100% !important;float:none !important}

@media (max-width:900px){
  .tv-dash-cols{grid-template-columns:1fr}
}
@media (max-width:560px){
  .tv-panel-caja{padding:18px 16px}
}

.tv-panel-bajada{margin:-8px 0 16px;font-size:13.5px;color:var(--tv-tinta-2);line-height:1.5}

/* ---- calendario de precios del aviso ---- */
.tv-cal-precios{margin-bottom:18px}
.tv-cal-form{display:grid;gap:14px;max-width:520px}
.tv-cal-form .tv-campo{margin:0}
.tv-cal-rango{
  display:flex;flex-wrap:wrap;align-items:center;gap:10px;
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);
  border-radius:10px;padding:10px 13px;font-size:13.5px;color:var(--tv-tinta);
}
.tv-cal-rango-etq{
  font-size:11px;font-weight:600;color:var(--tv-tinta-3);
  text-transform:uppercase;letter-spacing:.03em;
}
.tv-cal-botones{display:flex;flex-wrap:wrap;gap:10px}
.tv-cal-botones button:disabled{opacity:.5;cursor:not-allowed}

.tv-cal-meses{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px}
.tv-cal-mes,
.tv-cal-reserva{
  border:1px solid var(--tv-linea);border-radius:var(--tv-r);padding:13px 15px;
  background:var(--tv-papel-2);display:grid;gap:3px;align-content:start;
}
.tv-cal-mes strong,
.tv-cal-reserva strong{font-size:15.5px;color:var(--tv-tinta);font-weight:600}
.tv-cal-mes-dias{font-size:12.5px;color:var(--tv-tinta-2);line-height:1.4}
.tv-cal-mes-plata{
  margin-top:6px;font-size:19px;font-weight:700;letter-spacing:-.02em;
  color:var(--tv-naranja-fuerte);line-height:1.15;
}
.tv-cal-mes-plata-chica{font-size:14.5px}
.tv-cal-mes-libre{margin-top:6px;font-size:12.5px;font-weight:600;color:var(--tv-verde-texto)}

/* el estado de cada reserva, por color y tambien por texto: el color
   solo no alcanza para quien no lo distingue */
.tv-cal-reserva-estado{
  justify-self:start;padding:2px 9px;border-radius:999px;margin-bottom:4px;
  font-size:10.5px;font-weight:600;background:rgba(20,26,20,.72);color:#fff;
}
.tv-cal-en-curso{background:var(--tv-verde-suave);border-color:#CDE6C6}
.tv-cal-en-curso .tv-cal-reserva-estado{background:var(--tv-verde-banner)}
.tv-cal-proxima{background:#FFF8E8;border-color:#F0DCA8}
.tv-cal-proxima .tv-cal-reserva-estado{background:#B4690E}
.tv-cal-vencida{opacity:.72}

/* la fila de solapas con el filtro a la derecha */
.tv-dash-barra{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}
.tv-dash-filtro{display:flex;align-items:center;gap:8px}
.tv-dash-filtro label{font-size:13px;color:var(--tv-tinta-2)}
.tv-dash-filtro select{
  border:1px solid var(--tv-linea);border-radius:9px;padding:8px 32px 8px 12px;
  background:#fff;font-family:inherit;font-size:13.5px;color:var(--tv-tinta);cursor:pointer;
  appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236A7280' stroke-width='3'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 11px center;
}

/* el formulario de un boton que borra o cambia estado: no tiene que
   ocupar una linea propia al lado de los links */
.tv-fila-form{display:inline;margin:0}
.tv-fila-nota{
  margin:9px 0 0;padding:8px 11px;border-radius:9px;
  background:#FFF8E8;border:1px solid #F0DCA8;color:#6B5416;font-size:12.5px;line-height:1.4;
}
.tv-fila-mensaje{
  margin:9px 0 0;padding:9px 12px;border-radius:9px;background:var(--tv-papel-2);
  font-size:12.5px;color:var(--tv-tinta-2);line-height:1.45;
  overflow-wrap:anywhere;
}
.tv-fila-reserva{align-items:start}
.tv-fila-reserva .tv-fila-lado{align-self:center}

/* ---- cuadro emergente del panel ----
 * Se llama "dialogo" y no "modal": .tv-modal ya existe como el popup de
 * habitacion de la ficha del hotel, y es otra cosa -- alla la clase es
 * la caja en si, con su propio .tv-modal-fondo detras. Al compartir
 * nombre, su "left:50%;top:50%;transform:translate(-50%,-50%)" se le
 * aplicaba a este, que es la capa de fondo a pantalla completa: quedaba
 * de 680px corrido media pantalla para arriba y para la izquierda, o
 * sea fuera de la vista. .tv-modal-pie chocaba igual.
 * ------------------------------------------------------------------- */
.tv-dialogo{
  position:fixed;inset:0;z-index:9999;background:rgba(20,26,20,.55);
  display:grid;place-items:center;padding:16px;
}
.tv-dialogo[hidden]{display:none}
.tv-dialogo-caja{
  background:#fff;border-radius:var(--tv-r-g);box-shadow:var(--tv-sombra-alta);
  padding:24px 26px;width:min(430px,100%);max-height:calc(100vh - 32px);overflow:auto;
}
.tv-dialogo-caja h2{font-size:19px;font-weight:700;letter-spacing:-.02em;margin:0}
.tv-dialogo-bajada{margin:5px 0 0;font-size:13px;color:var(--tv-tinta-2);line-height:1.4}
.tv-dialogo-datos{display:grid;gap:12px;margin:18px 0 0}
.tv-dialogo-datos dt{font-size:11.5px;font-weight:600;color:var(--tv-tinta-3);text-transform:uppercase;letter-spacing:.03em;margin:0}
.tv-dialogo-datos dd{margin:3px 0 0;font-size:15px;color:var(--tv-tinta);overflow-wrap:anywhere}
.tv-dialogo-pie{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}

.tv-dash-titulo{
  display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:14px;
}
.tv-dash-titulo h2{font-size:18px;font-weight:600;letter-spacing:-.015em;margin:0}
.tv-dash-titulo a{font-size:13px;font-weight:600;color:var(--tv-verde-texto);flex:none}
.tv-dash-titulo a:hover{text-decoration:underline}

/* una consulta hecha: foto, de que aviso era, y con quien */
.tv-dash-contactos{display:grid;gap:12px}
.tv-dash-contacto{
  display:grid;grid-template-columns:132px minmax(0,1fr) 156px;gap:16px;
  background:#fff;border:1px solid var(--tv-linea);border-radius:var(--tv-r);
  padding:13px;align-items:center;
}
.tv-dash-contacto-foto{
  display:block;aspect-ratio:4/3;border-radius:10px;overflow:hidden;background:var(--tv-papel-2);
}
.tv-dash-contacto-foto img{width:100%;height:100%;object-fit:cover;display:block}
.tv-dash-contacto-cuerpo{min-width:0}
.tv-dash-contacto-cuerpo h3{font-size:15px;font-weight:600;margin:0;line-height:1.25}
.tv-dash-contacto-cuerpo h3 a:hover{color:var(--tv-verde-texto)}
.tv-dash-contacto-donde{
  display:flex;align-items:center;gap:5px;margin:4px 0 9px;
  font-size:12.5px;color:var(--tv-tinta-2);
}
.tv-dash-contacto-datos{display:flex;flex-wrap:wrap;gap:4px 20px;margin:0}
.tv-dash-contacto-datos > div{display:flex;gap:6px;min-width:0}
.tv-dash-contacto-datos dt{font-size:12.5px;color:var(--tv-tinta-3);margin:0}
.tv-dash-contacto-datos dd{font-size:12.5px;color:var(--tv-tinta);margin:0;font-weight:500}
.tv-dash-contacto-lado{
  display:flex;flex-direction:column;align-items:flex-end;gap:9px;text-align:right;
}
.tv-dash-contacto-lado .tv-btn-borde{padding:7px 14px;font-size:12.5px}

@media (max-width:900px){
  .tv-dash{grid-template-columns:1fr}
  .tv-dash-contacto{grid-template-columns:110px minmax(0,1fr)}
  .tv-dash-contacto-lado{
    grid-column:1/-1;flex-direction:row;align-items:center;justify-content:space-between;
    text-align:left;border-top:1px solid var(--tv-linea);padding-top:11px;
  }
}
@media (max-width:560px){
  .tv-dash-pag{padding:18px 0 30px}
  .tv-dash-contacto{grid-template-columns:1fr}
  .tv-dash-contacto-foto{aspect-ratio:16/9}
}

/* ---------- avisos y mensajes ---------- */
.tv-alerta{
  border-radius:var(--tv-r);padding:12px 16px;font-size:13.5px;line-height:1.5;
  margin:0 0 16px;border:1px solid;
}
.tv-alerta-ok{background:var(--tv-verde-suave);border-color:#CDE6C6;color:#2A5F20}
.tv-alerta-mal{background:#FDEEEA;border-color:#F3CDC2;color:#8A2C12}
.tv-alerta-info{background:#FFF8E8;border-color:#F0DCA8;color:#6B5416}

/* ---------- pie ---------- */
/* clear:both es imprescindible. Casi todas las paginas del sitio arman
   su contenido con "position:relative;float:left" y no lo limpian nunca.
   El pie es una grilla, y un contenedor de grilla crea su propio
   contexto de formato: en vez de quedar DEBAJO del contenido flotado se
   ubica AL LADO, y el documento crecia a 2034px de ancho en las 15
   paginas que todavia usan ese layout. */
.tv-pie{
  clear:both;background:var(--tv-papel-2);border-top:1px solid var(--tv-linea);
  padding:34px 0 0;margin-top:20px;
}
.tv-pie-grid{display:grid;grid-template-columns:1.5fr repeat(3,1fr) 1.1fr;gap:30px;padding-bottom:28px}
.tv-pie-grid > div > p{font-size:12.5px;color:var(--tv-tinta-2);margin:12px 0 0;max-width:34ch;line-height:1.5}
.tv-pie h4{
  font-size:11.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  color:var(--tv-tinta-3);margin:0 0 12px;
}
.tv-pie ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.tv-pie ul a{font-size:13px;color:var(--tv-tinta-2)}
.tv-pie ul a:hover{color:var(--tv-verde-texto)}
.tv-redes{display:flex;gap:10px}
.tv-redes svg{width:15px;height:15px}
.tv-redes a{
  width:30px;height:30px;border-radius:50%;background:#fff;border:1px solid var(--tv-linea);
  display:grid;place-items:center;color:var(--tv-tinta-2);transition:.2s;
}
.tv-redes a:hover{background:var(--tv-verde-texto);color:#fff;border-color:var(--tv-verde-texto)}
.tv-pie-abajo{
  border-top:1px solid var(--tv-linea);padding:16px 0;display:flex;
  align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  font-size:12px;color:var(--tv-tinta-3);
}

/* ===================================================================
 *  RESPONSIVE
 * =================================================================== */
@media(max-width:1180px){
  .tv-res{grid-template-columns:230px minmax(0,1fr) 190px}
  .tv-lista-res.tv-vista-galeria{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:1080px){
  .tv-busc-grande{grid-template-columns:1fr 1fr;max-width:calc(100% - 44px)}
  .tv-busc-grande .tv-busc-campo:nth-child(3){border-left:0}
  .tv-busc-grande .tv-btn-buscar{grid-column:span 2;padding:14px}
  .tv-categorias .tv-caja,.tv-destinos{grid-template-columns:repeat(3,minmax(0,1fr))}
  .tv-grilla-4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tv-grilla-6{grid-template-columns:repeat(3,minmax(0,1fr))}
  .tv-publicar .tv-interior{grid-template-columns:1fr;gap:16px;text-align:left}
  .tv-publicar .tv-mascota{display:none}
  .tv-pie-grid{grid-template-columns:1fr 1fr;gap:24px}
}
@media(max-width:1040px){
  /* La caja de reserva deja de ser una columna y pasa a una barra fija
     abajo, que es lo que hacen Booking y Airbnb en celular. */
  .tv-cuerpo-aviso{grid-template-columns:1fr;gap:0}

  /* La caja deja de ser columna y pasa a ser un panel que sube desde
     abajo. Antes estaba en display:none y no habia forma de reservar
     desde el celular: el boton de la barra apuntaba con un ancla a un
     elemento de adentro, que al estar oculto no llevaba a ningun lado.
     No se usa display:none para esconderla --se translada fuera de
     pantalla-- asi el calendario y el panel de viajeros conservan sus
     medidas y se abren donde corresponde. */
  .tv-reserva{
    /* top:auto es obligatorio: la regla de escritorio deja un top para
       el sticky y, si queda, el panel tiene top Y bottom a la vez y se
       estira de punta a punta con un vacio abajo del contenido. */
    position:fixed;left:0;right:0;bottom:0;top:auto;z-index:90;
    max-height:88vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
    margin:0;padding-bottom:18px;
    border:0;border-radius:20px 20px 0 0;
    background:#fff;
    box-shadow:0 -12px 40px -12px rgba(31,41,55,.45);
    transform:translateY(101%);
    visibility:hidden;
    transition:transform .22s ease, visibility .22s ease;
  }
  body.tv-hoja-abierta .tv-reserva{transform:none;visibility:visible}
  body.tv-hoja-abierta{overflow:hidden}

  .tv-hoja-fondo{
    position:fixed;inset:0;z-index:85;
    background:rgba(20,26,20,.5);
  }

  /* La cabecera del panel: el tirador y la cruz. */
  .tv-hoja-cab{
    display:block;position:sticky;top:0;z-index:2;
    padding:10px 0 6px;background:#fff;
    border-radius:20px 20px 0 0;
  }
  .tv-hoja-tirador{
    display:block;width:38px;height:4px;margin:0 auto;
    border-radius:999px;background:var(--tv-linea);
  }
  .tv-hoja-cerrar{
    position:absolute;right:12px;top:6px;
    width:32px;height:32px;padding:0;
    display:grid;place-items:center;
    border:1px solid var(--tv-linea);border-radius:50%;
    background:#fff;color:var(--tv-tinta);font-size:20px;line-height:1;
    cursor:pointer;
  }
  .tv-barra-movil{
    display:flex;align-items:center;justify-content:space-between;gap:14px;
    position:fixed;left:0;right:0;bottom:0;z-index:80;background:#fff;
    border-top:1px solid var(--tv-linea);padding:11px 18px;
    box-shadow:0 -4px 18px -8px rgba(31,41,55,.3);
  }
  .tv-barra-movil b{font-size:19px;font-weight:700;letter-spacing:-.02em}
  /* El selector va al hijo DIRECTO: con ".tv-barra-movil span" el
     display:block cae tambien sobre el span de adentro, lo parte en dos
     lineas y la barra crece hasta tapar el pie. */
  .tv-barra-movil > div > span{display:block;font-size:11.5px;color:var(--tv-tinta-2);white-space:nowrap}
  .tv-barra-movil a{
    background:var(--tv-naranja-fuerte);color:#fff;border-radius:11px;padding:11px 24px;
    font-weight:600;font-size:14.5px;white-space:nowrap;
  }
  body.tv-con-barra{padding-bottom:84px}
  .tv-hab{grid-template-columns:180px minmax(0,1fr) 165px}
  .tv-servicios,.tv-confianza,.tv-relacionados{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:980px){
  .tv-nav{display:none}
  .tv-hamburguesa{display:inline-flex;align-items:center;gap:8px}
  .tv-cuerpo-res{grid-template-columns:1fr}
  /* Los filtros pasan a un panel que se abre. Dejarlos arriba en una
     columna obliga a bajar media pantalla antes del primer resultado. */
  .tv-filtros{
    position:fixed;inset:0;z-index:90;max-height:none;border-radius:0;border:0;
    overflow-y:auto;display:none;
  }
  .tv-filtros.tv-abierto{display:block}
  .tv-cerrar-filtros{
    position:sticky;bottom:0;background:#fff;border-top:1px solid var(--tv-linea);padding:12px 16px;
  }
  .tv-cerrar-filtros button{
    width:100%;background:var(--tv-naranja-fuerte);color:#fff;border:0;border-radius:10px;
    padding:12px;font-weight:600;font-size:14px;
  }
  .tv-abrir-filtros{
    display:inline-flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--tv-linea);
    border-radius:10px;padding:8px 14px;font-size:13px;font-weight:600;color:var(--tv-tinta);
  }
  .tv-abrir-filtros .tv-n{
    background:var(--tv-verde-banner);color:#fff;border-radius:999px;min-width:18px;height:18px;
    display:grid;place-items:center;font-size:11px;
  }
  .tv-busc-pastilla{grid-template-columns:1fr 1fr}
  .tv-busc-pastilla .tv-busc-campo:nth-child(3){border-left:0}
}
@media(max-width:760px){
  .tv-acc .tv-ingresar{display:none}
  .tv-busc-barra{position:static}
  /* apilada, el radio de 999px la deja con forma de pastilla gigante */
  .tv-busc-pastilla{grid-template-columns:1fr;border-radius:var(--tv-r-g)}
  .tv-busc-pastilla .tv-busc-campo{border-radius:0}
  .tv-busc-pastilla .tv-busc-campo:first-child{border-radius:var(--tv-r-g) var(--tv-r-g) 0 0}
  .tv-busc-pastilla .tv-busc-campo:last-child{border-radius:0 0 var(--tv-r-g) var(--tv-r-g)}
  .tv-busc-pastilla .tv-busc-campo + .tv-busc-campo{border-left:0;border-top:1px solid var(--tv-linea)}
  .tv-busc-grande{grid-template-columns:1fr;margin-top:-40px}
  .tv-busc-grande .tv-busc-campo + .tv-busc-campo{border-left:0;border-top:1px solid var(--tv-linea)}
  .tv-busc-grande .tv-btn-buscar{grid-column:span 1;padding:14px}
  .tv-categorias .tv-caja,.tv-destinos{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tv-grilla-6{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tv-pie-grid{grid-template-columns:1fr}
  .tv-pie-abajo{flex-direction:column;align-items:flex-start}

  .tv-res{grid-template-columns:1fr}
  .tv-res .tv-f{aspect-ratio:16/10;min-height:0}
  .tv-res .tv-p{
    border-left:0;border-top:1px solid var(--tv-linea);flex-direction:column;
    align-items:stretch;text-align:left;gap:11px;
  }
  .tv-res .tv-p > div:first-child{text-align:left}
  .tv-btn-ver{width:100%}
  .tv-libre{justify-content:flex-start}
  .tv-lista-res.tv-vista-galeria{grid-template-columns:1fr}
  .tv-titulo-res{align-items:flex-start;flex-direction:column;gap:12px}
  .tv-controles{width:100%}

  .tv-cab-aviso h1{font-size:23px}
  .tv-galeria:not(.tv-n1){height:auto;grid-template-columns:1fr;grid-template-rows:none}
  .tv-galeria:not(.tv-n1) .tv-g1{grid-row:auto}
  .tv-galeria:not(.tv-n1) img{aspect-ratio:16/10;height:auto}
  /* con una sola columna, cuatro fotos apiladas son una pared: se deja
     la primera y el boton "ver las N fotos" hace el resto */
  .tv-galeria a:not(.tv-g1){display:none}
  .tv-condiciones{grid-template-columns:1fr;gap:20px}
  .tv-servicios,.tv-confianza,.tv-relacionados{grid-template-columns:1fr}
  .tv-hab{grid-template-columns:1fr}
  .tv-hab .tv-f{aspect-ratio:16/9;min-height:0}
  .tv-hab .tv-p{
    border-left:0;border-top:1px solid var(--tv-linea);flex-direction:row;
    align-items:center;justify-content:space-between;text-align:left;
  }
  .tv-hab .tv-p button{width:auto;padding:9px 20px}
}
@media(max-width:560px){
  /* En 390px la cabecera medi­a 442px: logo 134 + menu 80 + boton 146 +
     los espacios. Se recorta a lo esencial — el icono del menu sin la
     palabra, "PUBLICÁ" sin "GRATIS" y menos aire — y baja a ~306px. */
  .tv-larga{display:none}
  /* Con sesion la cabecera trae ademas la campana y "Tu Tomate", y en
     390px se iba a 421px de ancho. El menu del usuario se esconde: sus
     destinos ya estan en el menu de la hamburguesa (Mi panel, Salir), y
     la campana queda porque es la unica via a las notificaciones. */
  #tv-menu-user{display:none}
  .tv-caja{padding:0 14px}
  .tv-cab .tv-caja{gap:10px}
  .tv-acc{gap:10px}
  .tv-acc .tv-registrate{display:none}
  .tv-acc .tv-btn-naranja{padding:9px 14px;font-size:12px;letter-spacing:.02em}
  .tv-hamburguesa{padding:8px 9px}
  .tv-fruta{--tv-h:28px}
  .tv-logo{gap:7px}
  .tv-logo .tv-palabra b{font-size:17px}
  .tv-logo .tv-palabra i{font-size:10px}
  .tv-orden,.tv-vistas a{font-size:12px}
  .tv-resumen .tv-at{padding:8px 11px;font-size:12.5px}
  .tv-barra-movil a{padding:11px 18px}
  .tv-cab .tv-caja{gap:12px}
}
@media(max-width:460px){
  .tv-grilla-4,.tv-grilla-6{grid-template-columns:1fr}
}

/* ===================================================================
 *  RED DE SEGURIDAD PARA LAS PAGINAS QUE TODAVIA NO SE REDISEÑARON
 *
 *  Las altas, las modificaciones y los paneles siguen usando el layout
 *  viejo: .w_rap_center tiene un ancho FIJO de 1000px y .w_rap de 800px,
 *  asi que en un celular hay que arrastrar la pagina de costado.
 *
 *  Esto no las rediseña —eso es otro trabajo— pero al menos evita el
 *  scroll horizontal. Solo actua por debajo de 1024px, asi que en
 *  escritorio no cambia absolutamente nada.
 * =================================================================== */
@media(max-width:1024px){
  body.tv .w_rap,
  body.tv .w_rap_center,
  body.tv .centrado_contenido,
  body.tv .content_user_nav,
  body.tv .font_ruta,
  body.tv .cotent_aviso_list,
  body.tv .cotent_aviso_list_panel,
  body.tv .content_right,
  body.tv .content_left{
    width:100% !important;min-width:0 !important;max-width:100% !important;
    box-sizing:border-box;
  }
  body.tv .w_rap,body.tv .w_rap_center{padding-left:14px;padding-right:14px}
  /* las miniaturas del panel tienen ancho fijo y desbordaban */
  body.tv .img_aviso_list{max-width:100% !important;height:auto !important}
  body.tv .font_ruta{white-space:normal !important;font-size:12px !important}
}

/* ---------- metricas del aviso ----------
 * metricas.php. El grafico es SVG a mano: son barras y una linea de
 * base, y una libreria de graficos pesa mas que toda la pagina.
 *
 * Un solo color para las barras --el verde de la marca-- y no uno por
 * serie. Apariciones y visitas van en graficos separados, asi que el
 * color no tiene que distinguir nada; y verde contra naranja, que era
 * lo primero que uno prueba, es justo el par que no distingue quien
 * tiene daltonismo rojo-verde.
 * ------------------------------------------------------------------- */
.tv-met-cab{
  display:flex;align-items:flex-end;justify-content:space-between;
  gap:18px;flex-wrap:wrap;margin-bottom:14px;
}
.tv-met-cab h1{margin:0;font-size:26px;line-height:1.15}

/* Quien es el aviso. La foto adelante: es lo que el dueño reconoce de
   un vistazo, mas rapido que cualquier nombre. */
.tv-met-quien{display:flex;align-items:center;gap:14px;min-width:0}
.tv-met-foto{
  flex:0 0 auto;width:62px;height:62px;border-radius:var(--tv-r);
  overflow:hidden;background:var(--tv-papel-2);display:block;
}
.tv-met-foto img{width:100%;height:100%;object-fit:cover;display:block}
.tv-met-volantin{
  font-size:11.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--tv-tinta-3);margin-bottom:2px;
}
.tv-met-donde{margin:3px 0 0;font-size:13px;color:var(--tv-tinta-2)}
.tv-met-estado{
  display:inline-block;margin-left:4px;padding:1px 7px;border-radius:999px;
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);
  font-size:11px;color:var(--tv-tinta-3);
}

/* Pasar al aviso de al lado sin volver al listado. */
.tv-met-paso{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-bottom:18px;
}
.tv-met-paso-btn{
  display:inline-flex;align-items:center;gap:7px;min-width:0;max-width:38%;
  padding:7px 12px;border:1px solid var(--tv-linea);border-radius:999px;
  background:#fff;color:var(--tv-tinta-2);font-size:13px;text-decoration:none;
}
.tv-met-paso-btn:hover{background:var(--tv-papel-2);color:var(--tv-tinta)}
.tv-met-paso-btn span[aria-hidden]{font-size:17px;line-height:1;color:var(--tv-tinta-3)}
/* El nombre del vecino puede ser largo: se corta con puntos suspensivos
   antes que empujar el boton de al lado fuera de la fila. */
.tv-met-paso-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tv-met-paso-der{justify-content:flex-end}
/* Al medio, y de verdad: los dos botones tienen nombres de largo
   distinto, asi que sin esto el "19 de 27" quedaba pegado al de la
   izquierda. */
.tv-met-paso-n{
  flex:1 1 auto;text-align:center;
  font-size:12.5px;color:var(--tv-tinta-3);white-space:nowrap;
}
.tv-met-paso-n a{color:var(--tv-verde-texto);margin-left:6px}

.tv-met-rango{display:flex;gap:6px}
.tv-met-rango a{
  padding:7px 13px;border:1px solid var(--tv-linea);border-radius:999px;
  font-size:13px;color:var(--tv-tinta-2);background:#fff;text-decoration:none;
}
.tv-met-rango a:hover{background:var(--tv-papel-2)}
.tv-met-rango a.tv-met-rango-on{
  background:var(--tv-verde-suave);border-color:var(--tv-verde);
  color:var(--tv-verde-texto);font-weight:700;
}

.tv-met-tarjetas{
  display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:18px 0;
}
.tv-met-tarjeta{
  border:1px solid var(--tv-linea);border-radius:var(--tv-r);
  background:#fff;padding:14px 15px;
}
.tv-met-n{font-size:27px;font-weight:800;color:var(--tv-tinta);line-height:1.1}
.tv-met-t{font-size:13.5px;font-weight:700;color:var(--tv-tinta);margin-top:2px}
.tv-met-tarjeta p{margin:5px 0 0;font-size:11.5px;color:var(--tv-tinta-3);line-height:1.35}

.tv-met-panel{margin-bottom:18px}
.tv-met-panel h2{margin:0 0 4px}
.tv-met-panel .tv-bajada{margin:0 0 16px}

.tv-met-embudo{list-style:none;margin:0;padding:0;display:grid;gap:13px}
.tv-met-embudo-cab{
  display:flex;justify-content:space-between;align-items:baseline;
  gap:12px;margin-bottom:5px;font-size:13.5px;color:var(--tv-tinta-2);
}
.tv-met-embudo-cab b{color:var(--tv-tinta);font-size:15px;white-space:nowrap}
/* El porcentaje es del escalon anterior: se lee al lado del numero,
   pero no compite con el. */
.tv-met-embudo-cab em{
  font-style:normal;font-size:12.5px;font-weight:600;color:var(--tv-tinta-3);
}
.tv-met-barra{height:9px;border-radius:999px;background:var(--tv-papel-2);overflow:hidden}
.tv-met-barra span{display:block;height:100%;border-radius:999px;background:var(--tv-verde-banner)}

.tv-met-graf{margin-bottom:22px}
.tv-met-graf-cab{
  display:flex;justify-content:space-between;align-items:baseline;
  gap:12px;margin-bottom:8px;
}
.tv-met-graf-cab h3{margin:0;font-size:14px}
.tv-met-graf-cab span{font-size:12px;color:var(--tv-tinta-3)}

.tv-graf-caja{width:100%}
.tv-graf{display:block;width:100%;height:132px}
.tv-graf-barra{fill:var(--tv-verde-banner)}
.tv-graf-cero{fill:var(--tv-linea)}
.tv-graf-guia{stroke:var(--tv-linea);stroke-width:1;stroke-dasharray:3 4}
.tv-graf-piso{stroke:var(--tv-linea);stroke-width:1}
.tv-graf-pie{
  display:flex;justify-content:space-between;
  font-size:11.5px;color:var(--tv-tinta-3);margin-top:2px;
}

.tv-met-tabla{border-top:1px solid var(--tv-linea);padding-top:12px}
.tv-met-tabla summary{
  cursor:pointer;font-size:13.5px;color:var(--tv-verde-texto);font-weight:600;
}
/* La tabla es ancha: scrollea ella, no la pagina. */
.tv-met-tabla-scroll{overflow-x:auto;margin-top:12px}
.tv-met-tabla table{width:100%;border-collapse:collapse;font-size:13px}
.tv-met-tabla th,.tv-met-tabla td{
  padding:6px 10px;text-align:right;border-bottom:1px solid var(--tv-linea);
  white-space:nowrap;
}
.tv-met-tabla th:first-child,.tv-met-tabla td:first-child{text-align:left}
.tv-met-tabla th{color:var(--tv-tinta-3);font-weight:600}

.tv-met-fila{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.tv-met-fila > div{
  border:1px solid var(--tv-linea);border-radius:var(--tv-r);
  padding:13px 15px;background:var(--tv-papel-2);
}
.tv-met-fila b{display:block;font-size:21px;color:var(--tv-tinta);line-height:1.2}
.tv-met-fila span{font-size:12.5px;color:var(--tv-tinta-3)}

.tv-met-nota{font-size:12px;color:var(--tv-tinta-3);line-height:1.5;margin:0 0 30px}

@media (max-width: 900px){
  .tv-met-tarjetas{grid-template-columns:repeat(2,1fr)}
  .tv-met-fila{grid-template-columns:1fr}
  .tv-met-cab{align-items:flex-start}
  .tv-met-cab h1{font-size:22px}
  .tv-met-quien{width:100%}
  /* En celular los nombres de los vecinos no entran: quedan las
     flechas y el "3 de 7", que es lo que hace falta para moverse. */
  .tv-met-paso-txt{display:none}
  .tv-met-paso-btn{max-width:none;padding:7px 14px}
  .tv-met-foto{width:52px;height:52px}
}

@media (max-width: 520px){
  .tv-met-tarjetas{grid-template-columns:1fr 1fr}
  .tv-met-n{font-size:23px}
  .tv-met-rango a{padding:6px 11px;font-size:12.5px}
}

/* La caja de cerrar fechas, en el calendario del dueño. Se separa de la
   de precios con una linea: son dos decisiones distintas sobre el mismo
   rango marcado. */
.tv-cal-cerrar{border-top:1px solid var(--tv-linea);margin-top:22px;padding-top:18px}
.tv-cal-cerrar h3{margin:0 0 4px;font-size:15px}
.tv-cal-cerrar .tv-panel-bajada{margin:0 0 14px}
.tv-cal-reserva.tv-cal-cerrada{
  background:repeating-linear-gradient(135deg,#F7F8FA 0 7px,#EDEFF2 7px 14px);
  border-color:var(--tv-linea);
}
.tv-cal-reserva.tv-cal-cerrada .tv-cal-reserva-estado{background:var(--tv-tinta);color:#fff}

/* ---------- las dos acciones del calendario del dueño ----------
 * Marca un rango una sola vez y despues elige: cambiarle el precio o
 * cerrarlo. Van al lado y no una debajo de la otra porque son dos
 * caminos posibles para lo mismo, no dos pasos de un mismo tramite.
 * ------------------------------------------------------------------- */
.tv-cal-acciones{
  display:grid;grid-template-columns:1fr 1fr;gap:0;align-items:stretch;
  border:1px solid var(--tv-linea);border-radius:var(--tv-r);overflow:hidden;
  margin-top:16px;
}
.tv-cal-col{padding:18px 20px;background:#fff;display:flex;flex-direction:column}
/* La linea que las separa: en la grilla, no un borde por columna, asi
   no se duplica al apilarse en celular. */
.tv-cal-col + .tv-cal-col{border-left:1px solid var(--tv-linea)}
.tv-cal-col h3{margin:0 0 5px;font-size:15.5px}
.tv-cal-col-bajada{
  margin:0 0 16px;font-size:13px;line-height:1.5;color:var(--tv-tinta-2);
}
.tv-cal-col .tv-campo{margin-bottom:14px}
/* Los dos campos del mismo ancho: uno corto y otro largo se leen como
   si pidieran cosas de distinto peso, y piden lo mismo --el dato de esa
   columna--. */
.tv-cal-col .tv-campo input{width:100%;box-sizing:border-box}
/* Los botones abajo del todo aunque un texto sea mas largo que el otro:
   las dos columnas terminan parejas. */
.tv-cal-col .tv-cal-botones{margin-top:auto}
.tv-cal-col button[disabled]{opacity:.45;cursor:default}
/* La de cerrar es la accion seria de las dos: se distingue al pasar. */
.tv-cal-btn-cerrar:hover:not([disabled]){
  border-color:var(--tv-naranja-fuerte);color:var(--tv-naranja-fuerte);
}

@media (max-width: 860px){
  .tv-cal-acciones{grid-template-columns:1fr}
  .tv-cal-col + .tv-cal-col{border-left:0;border-top:1px solid var(--tv-linea)}
}

/* ---------- dos series en el mismo grafico ----------
 * Barras agrupadas por mes, con el numero arriba de cada una y la
 * referencia abajo. En HTML y no en SVG: el otro grafico se estira con
 * preserveAspectRatio="none" y ahi el texto se deformaria.
 *
 * Los colores estan validados para daltonismo rojo-verde: verde y azul
 * se separan con ΔE 29.6 en deuteranopia. El verde y el naranja de la
 * marca daban 5.8, o sea la misma barra dos veces para esos ojos.
 * ------------------------------------------------------------------- */
.tv-graf2{
  display:grid;grid-auto-flow:column;grid-auto-columns:1fr;
  gap:6px;align-items:end;
  height:190px;padding-top:18px;
  border-bottom:1px solid var(--tv-linea);
}
.tv-graf2-mes{display:flex;flex-direction:column;justify-content:flex-end;height:100%;min-width:0}
/* Las dos barras del mes, pegadas entre si y separadas del mes de al
   lado: asi se lee "estas dos van juntas". */
.tv-graf2-barras{display:flex;align-items:flex-end;justify-content:center;gap:3px;height:100%}
.tv-graf2-b{
  position:relative;flex:1 1 0;min-width:0;max-width:26px;
  border-radius:4px 4px 0 0;
}
/* El numero, arriba de la barra. Es lo que hace legible la serie corta
   cuando la otra es mucho mas alta y la deja casi al ras. */
.tv-graf2-b span{
  position:absolute;left:50%;top:-15px;transform:translateX(-50%);
  font-size:10.5px;font-weight:700;color:var(--tv-tinta-2);
  line-height:1;white-space:nowrap;
}
.tv-graf2-cero{background:var(--tv-linea) !important;height:2px !important}
.tv-graf2-cero span{color:var(--tv-tinta-3);font-weight:400}

.tv-graf2-c1{background:#38842B}
.tv-graf2-c2{background:#2563EB}

.tv-graf2-etq{
  margin-top:7px;text-align:center;font-size:10.5px;color:var(--tv-tinta-3);
  white-space:nowrap;
}
.tv-graf2-corto{display:none}
.tv-graf2-corto b{display:block;font-weight:400;opacity:.7}

.tv-graf2-refs{
  display:flex;gap:20px;flex-wrap:wrap;justify-content:center;
  margin-top:12px;font-size:12.5px;color:var(--tv-tinta-2);
}
.tv-graf2-refs span{display:inline-flex;align-items:center;gap:7px}
.tv-graf2-refs i{width:12px;height:12px;border-radius:3px;flex:none}

@media (max-width: 760px){
  .tv-graf2{height:160px;gap:3px}
  .tv-graf2-b{max-width:14px}
  .tv-graf2-b span{font-size:8.5px;top:-12px}
  /* Doce "09/2025" no entran en 358px: se pisan hasta volverse un
     borron. Va el mes arriba y el año abajo. */
  .tv-graf2-etq{font-size:9px;line-height:1.15}
  .tv-graf2-largo{display:none}
  .tv-graf2-corto{display:block}
}

/* ---------- editar una promocion, en el lugar ----------
 * Un <details> adentro de la propia fila: se abre debajo, con lo que
 * ya tiene puesto. Sin javascript y sin pantalla aparte, porque lo que
 * se edita es esta fila y verla mientras se cambia es el punto.
 * ------------------------------------------------------------------- */
/* .tv-promo-item es flex, no grid: para ocupar todo el ancho de la fila
   va flex-basis 100%, no grid-column. */
.tv-promo-editar{flex:1 1 100%;margin-top:10px}
.tv-promo-editar > summary{
  display:inline-block;cursor:pointer;font-size:12.5px;
  color:var(--tv-verde-texto);font-weight:600;list-style:none;
}
.tv-promo-editar > summary::-webkit-details-marker{display:none}
.tv-promo-editar > summary::before{content:"✎ ";opacity:.7}
.tv-promo-editar[open] > summary{margin-bottom:12px}
.tv-promo-editar[open] > summary::before{content:"✕ ";opacity:.7}
.tv-promo-editar .tv-promo-form{
  background:var(--tv-papel-2);border:1px solid var(--tv-linea);
  border-radius:var(--tv-r);padding:14px;
}
.tv-promo-titulo{flex:1 1 200px;min-width:160px}
