/* ============================================================================
   buscador.css — PORTAL por niveles apilados (landing + PWA).
   ⚠️ FUENTE ÚNICA en clientes/css/. La copia de la raíz la genera ./sync-buscador.sh.

   Sigue el esquema que dibujó el cliente (7-sep): filas de botones apiladas, la
   opción elegida en ROJO, y debajo —siempre— el cuadro de la IA, el mapa, el
   contador de resultados y los resultados. Tipografía grande, sin textos explicativos.

   17-sep-2026 — REDISEÑO VISUAL (pedido de Matt: "se ve anticuado, botones muy
   cuadrados y líneas gruesas y planas"). Reglas de la vuelta de rosca:
     · ningún borde negro de 1,5 px: los controles llevan 1 px gris claro y el
       estado elegido se dice con el relleno rojo, no con el trazo;
     · radios de 14/18 px y sombras suaves en vez de bordes duros;
     · el nivel 1 es un control segmentado dentro de una píldora gris;
     · la separación entre niveles la da el aire, no un hilo rojo;
     · el contador de resultados va centrado y grande, justo ENCIMA del mapa (18-sep):
       arriba de él es panel de control, abajo son resultados (pedido del cliente).
   18-sep-2026 — correcciones del cliente: inmobiliarIA debajo de los 4 botones; sin
   "MÁS OPCIONES" ni zonas (nivel 5 mínimo: dormitorios + cochera); descartadas como UN
   botón con la jerarquía del contador; mapa DENTRO de la ficha; videos como link.
   22-sep-2026 — LETRA MÁS GRANDE (pedido de Matt, el cliente lo pidió varias veces): todo lo
   que estaba entre 12 y 19 px subió 1 px; lo de 20 px o más subió 2 px. Lo menor a 12 px
   (rótulos de specs, contadores de los botones) quedó igual.
   Los tokens (--ink, --accent, --line…) los setea brand.js en :root.
   ⚠️ Los tokens --pt-* se declaran también en .pt-sheet y .pt-asis porque esos dos
   cuelgan del <body>, FUERA de .pt: sin esto la ficha salía sin radio ni borde y el
   botón rojo sin fondo (bug real, 17-sep).
   ========================================================================== */
.pt,.pt-sheet,.pt-asis{
  --pt-r:14px;                          /* radio de los controles */
  --pt-r-card:18px;                     /* radio de tarjetas, mapa y paneles */
  --pt-alto:48px;                       /* alto de toque cómodo en celular */
  --pt-display:var(--font-display,'Jost',sans-serif);
  --pt-borde:1px solid var(--line-2,#D9D9D3);
  --pt-sombra:0 1px 2px rgba(22,22,21,.04),0 6px 18px rgba(22,22,21,.06);
  --pt-sombra-alta:0 10px 30px rgba(22,22,21,.12);
  /* ROJO DE SELECCIÓN (pedido del cliente, 10-sep: "que todas las selecciones
     queden en el rojo de la marca en vez del botón negro").
     ⚠️ Es un pelo más oscuro que el rojo del logo (#ED1D32) a propósito: con el
     logo exacto, el texto BLANCO encima da 4,4:1 y el mínimo legible para texto
     chico es 4,5:1. Éste da 5,1:1 y a ojo es el mismo rojo. Los ÍCONOS y todo lo
     que no lleva texto encima siguen con el rojo exacto del logo (--accent). */
  --sel:#D91B2E;
}
.pt{display:flex;flex-direction:column;gap:10px}
.pt *{box-sizing:border-box}
.pt [hidden]{display:none!important}    /* hidden lo pisa cualquier display: ver memoria */

/* ---------- filas de niveles ----------
   Cada nivel es una fila; entre niveles hay más aire que entre botones de una
   misma fila. Así se lee como una sucesión de pasos sin líneas divisorias. */
.pt-fila{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.pt-nivel{margin-top:6px}
.pt-b{
  flex:1 1 auto;min-width:0;min-height:var(--pt-alto);padding:10px 14px;
  border:var(--pt-borde);border-radius:var(--pt-r);background:var(--surface);color:var(--ink);
  font-family:var(--pt-display);font-weight:600;font-size:17.5px;letter-spacing:.03em;line-height:1.15;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;text-align:center;
  cursor:pointer;transition:background .14s,color .14s,border-color .14s,transform .1s,box-shadow .14s;
}
.pt-b:active{transform:scale(.98)}
.pt-b.on{background:var(--sel);color:#fff;border-color:var(--sel);box-shadow:0 4px 14px rgba(217,27,46,.22)}
/* Apagado = sin resultados con el filtro actual. NO se bloquea: tocarlo limpia
   lo de abajo y pasa a mandar él (regla de jerarquía pedida por el cliente). */
.pt-b.off{border-color:var(--line,#E7E7E2);color:var(--ink-3);background:var(--surface)}
/* 🐞 10-sep — un botón puede estar ELEGIDO y a la vez sin resultados (VENTA + GALPÓN:
   no hay galpones en venta). Las dos clases pesan igual y `.off` va después, así que
   el texto salía gris sobre el rojo del elegido: ilegible (1,4:1). Manda el elegido. */
.pt-b.on.off{background:var(--sel);border-color:var(--sel);color:#fff}
.pt-b.on.off i{color:#fff;background:rgba(255,255,255,.2)}
/* el contador de cada botón es una pastilla chica, no un número suelto */
.pt-b i{font-style:normal;font-size:13px;font-weight:600;color:var(--ink-2);letter-spacing:0;
  background:var(--suave,#F4F3F0);border-radius:20px;padding:2px 7px;line-height:1.2}
.pt-b.on i{color:#fff;background:rgba(255,255,255,.2)}
.pt-b.off i{color:var(--ink-3)}
/* 🐞 El :hover se aplica SOLO con mouse. En pantalla táctil el hover queda "pegado"
   después del toque, así que al DESELECCIONAR una opción el botón seguía negro
   hasta tocar otra cosa (bug reportado por Matt, 08-sep). */
@media (hover:hover) and (pointer:fine){
  .pt-b:hover{border-color:var(--ink-3);box-shadow:var(--pt-sombra)}
  .pt-b.on:hover{background:var(--sel);color:#fff;border-color:var(--sel)}
}
/* nivel 1: la navegación del portal, siempre arriba. Es un CONTROL SEGMENTADO:
   una píldora gris con los cuatro botones adentro; el elegido es la píldora roja.
   Ícono arriba y texto abajo (el cliente pidió lupa · llave · corazón · personita). */
.pt-fila.n1{gap:4px;background:var(--suave,#F4F3F0);border-radius:calc(var(--pt-r) + 4px);padding:4px;
  flex-wrap:nowrap}
.pt-fila.n1 .pt-b{flex:1 1 0;flex-direction:column;gap:3px;font-size:13px;letter-spacing:.04em;
  padding:8px 2px;min-height:60px;border:none;background:transparent;border-radius:var(--pt-r);box-shadow:none}
.pt-fila.n1 .pt-b svg{width:22px;height:22px;stroke:var(--accent);stroke-width:1.9;fill:none;
  stroke-linecap:round;stroke-linejoin:round;transition:stroke .14s}
.pt-fila.n1 .pt-b.on{background:var(--sel);color:#fff;box-shadow:0 4px 12px rgba(217,27,46,.25)}
.pt-fila.n1 .pt-b.on svg{stroke:#fff}
.pt-fila.n1 .pt-b i{font-size:11px;padding:1px 6px}
/* WEB (29-sep): el cuarto botón es "ABRIR LA APP". El nombre es más largo que "YO" y en el
   celular va en dos líneas: los cuatro botones se estiran a la misma altura. */
.pt-web .pt-fila.n1{align-items:stretch}
.pt-fila.n1 .pt-b.pt-sale span{line-height:1.1}
@media (max-width:560px){.pt-fila.n1 .pt-b.pt-sale{font-size:11.5px;letter-spacing:.02em}}
@media (hover:hover) and (pointer:fine){
  .pt-fila.n1 .pt-b:hover{background:var(--surface);box-shadow:var(--pt-sombra)}
  .pt-fila.n1 .pt-b.on:hover{background:var(--sel)}
}
/* nivel 2: dos botones grandes, es la decisión más importante */
.pt-fila.n2 .pt-b{font-size:19px;letter-spacing:.06em;min-height:54px}
/* nivel 3: cada tipología toma su ancho natural y la fila se parte sola,
   como en el esquema del cliente (CASA chico, DEPARTAMENTO más ancho) */
.pt-fila.n3 .pt-b{flex:1 1 auto;white-space:nowrap;font-size:16px;padding:10px 13px}

/* ---------- nivel 4: presupuesto y dormitorios ---------- */
.pt-fila.n4{gap:8px}
.pt-lbl{font-family:var(--pt-display);font-weight:600;font-size:15px;letter-spacing:.08em;
  color:var(--ink-2);padding:0 4px;flex:0 0 auto}
/* en pantalla angosta el rótulo encabeza la fila y mínimo/máximo van lado a lado */
@media(max-width:600px){
  .pt-lbl{flex:1 0 100%;padding:2px 2px 0}
  .pt-fila.n4{gap:8px 8px}
}
.pt-sel{flex:1 1 130px;display:flex;flex-direction:column;gap:4px;min-width:0}
.pt-sel span{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-weight:600;padding-left:2px}
.pt-sel select{
  width:100%;min-height:var(--pt-alto);border:var(--pt-borde);border-radius:var(--pt-r);
  background:var(--surface);color:var(--ink);padding:9px 12px;font-weight:600;font-size:18px;
  font-family:inherit;cursor:pointer;appearance:none;transition:border-color .14s,box-shadow .14s;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%238B8B86' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;background-size:11px;padding-right:34px;
}
.pt-sel select:focus{outline:none;border-color:var(--ink);box-shadow:0 0 0 3px rgba(22,22,21,.08)}

/* ---------- nivel 5: dormitorios (mín.) + cochera ----------
   Reemplaza a "MÁS OPCIONES" (cliente, 18-sep: "menos filtros"). Un selector y un
   botón, en el MISMO rectángulo que los selectores del presupuesto. */
.pt-fila.n5.filtros{gap:8px;align-items:flex-end}
.pt-fila.n5.filtros .pt-sel{flex:1 1 170px;max-width:280px}
.pt-fila.n5.filtros .pt-b{flex:0 1 auto;min-height:var(--pt-alto);padding:10px 20px;
  font-family:var(--pt-display);font-size:16px;letter-spacing:.04em}
/* la fila de características del formulario de OFRECER (botones chicos, muchos) */
.pt-fila.n5:not(.filtros) .pt-b{flex:1 1 120px;font-size:15px;font-family:var(--font-ui,'Inter',sans-serif);letter-spacing:0}

/* ---------- cuadro de la IA ----------
   Píldora gris con el botón de enviar como círculo rojo: es el único control
   "de conversación" de la pantalla y se distingue de los botones de filtro. */
.pt-ia{display:flex;gap:6px;align-items:center;border:none;border-radius:999px;
  background:var(--suave,#F4F3F0);margin-top:2px;padding:5px 5px 5px 8px;
  transition:box-shadow .15s,background .15s}
.pt-ia:focus-within{background:var(--surface);box-shadow:0 0 0 1px var(--ink) inset,var(--pt-sombra)}
.pt-ia input{flex:1;min-width:0;border:none;background:none;padding:11px 12px;
  font-family:inherit;font-size:18px;color:var(--ink);outline:none}
.pt-ia input::placeholder{color:var(--ink-3)}
.pt-ia button{flex:0 0 auto;width:42px;height:42px;border:none;border-radius:50%;
  background:var(--sel);color:#fff;font-size:22px;line-height:1;cursor:pointer;
  display:grid;place-items:center;transition:background .15s,transform .1s;
  box-shadow:0 3px 10px rgba(217,27,46,.25)}
.pt-ia button:active{transform:scale(.95)}

/* ---------- mapa ---------- */
.pt-mapa-wrap{margin-top:4px}
/* Leaflet apila sus panes hasta z-index 800 y sus controles a 1000. Sin un contexto
   de apilado PROPIO, el mapa se dibuja por encima de la cabecera sticky y de las filas
   de botones al scrollear (bug real visto en la verificación). `isolation:isolate`
   encierra todo eso adentro del contenedor. */
.pt-mapa{height:290px;border:none;border-radius:var(--pt-r-card);overflow:hidden;
  background:#E8EDE6;position:relative;z-index:0;isolation:isolate;box-shadow:var(--pt-sombra)}
.pt-mapa .leaflet-bar{border:none;box-shadow:var(--pt-sombra);border-radius:10px;overflow:hidden}
.pt-mapa .leaflet-bar a{border-bottom-color:var(--line);color:var(--ink)}
.pt-mapa-nota{font-size:13.5px;color:var(--ink-3);text-align:center;margin:8px 0 0;line-height:1.5}
.pt-pin{background:var(--ink);color:#fff;border-radius:50%;display:flex;align-items:center;
  justify-content:center;font-weight:700;font-size:16px;border:3px solid #fff;
  box-shadow:0 3px 12px rgba(0,0,0,.28);cursor:pointer;font-family:var(--pt-display)}
.pt-pin.on{background:var(--sel)}
.leaflet-container{font-family:inherit}

/* ---------- contador de resultados ----------
   "Todo lo que está por encima de la cantidad de resultados es panel de control, y
   todo lo que está por debajo son los resultados" (cliente, 16-sep). Centrado y
   grande, con el orden como una píldora discreta debajo. */
.pt-res{display:flex;flex-direction:column;align-items:center;gap:10px;padding:16px 0 8px;
  text-align:center}
.pt-conteo{font-family:var(--pt-display);font-weight:600;font-size:23px;letter-spacing:.02em;
  color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.2}
.pt-conteo.cero{color:var(--ink-2);font-size:19px}
.pt-orden{display:inline-flex;align-items:center;gap:8px;background:var(--suave,#F4F3F0);
  border-radius:999px;padding:4px 6px 4px 14px}
.pt-orden span{font-size:14.5px;color:var(--ink-2);font-weight:500}
.pt-orden select{border:none;border-radius:999px;padding:8px 30px 8px 12px;background:var(--surface);
  color:var(--ink);font-family:inherit;font-weight:600;font-size:15.5px;cursor:pointer;appearance:none;
  box-shadow:var(--pt-sombra);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23161615' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 11px center;background-size:10px}
.pt-orden select:focus{outline:2px solid var(--accent);outline-offset:1px}

/* ---------- resultados ---------- */
.pt-lista{display:flex;flex-direction:column;gap:12px}
.pt-card{position:relative;display:flex;gap:0;background:var(--surface);border:1px solid var(--line,#E7E7E2);
  border-radius:var(--pt-r-card);overflow:hidden;color:inherit;text-decoration:none;cursor:pointer;
  box-shadow:var(--pt-sombra);transition:box-shadow .15s,transform .12s,border-color .15s;text-align:left}
.pt-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pt-foto{flex:0 0 120px;background:#EDEBE5;align-self:stretch;min-height:118px}
.pt-foto img,.pt-foto svg{width:100%;height:100%;object-fit:cover;display:block}
.pt-cuerpo{flex:1;min-width:0;padding:13px 50px 13px 15px;display:flex;flex-direction:column;gap:2px;justify-content:center}
.pt-l1{font-family:var(--pt-display);font-weight:600;font-size:14px;letter-spacing:.08em;line-height:1.3;
  color:var(--ink-2);text-transform:uppercase}
.pt-l1.alq{color:var(--accent-dark)}
.pt-l2{font-size:17px;color:var(--ink);font-weight:500}
.pt-l2 span{font-size:13.5px;color:var(--ink-3);font-weight:400}
.pt-l3{font-family:var(--pt-display);font-weight:600;font-size:25px;line-height:1.2;margin-top:1px}
.pt-l3 span{font-size:14.5px;font-weight:400;color:var(--ink-2)}
.pt-l4{font-size:14.5px;color:var(--ink-3);margin-top:3px;line-height:1.4;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* Área de toque generosa: con la estrella chica el dedo abría la ficha en vez de
   guardar (reportado por el cliente, 08-sep). 48px es el mínimo cómodo en celular. */
.pt-fav{position:absolute;right:6px;top:8px;width:44px;height:44px;
  border:none;background:var(--surface);padding:0;cursor:pointer;display:grid;place-items:center;
  border-radius:50%;box-shadow:var(--pt-sombra)}
/* Corazón, no estrella (pedido del cliente, 10-sep): guardado se pinta con el rojo
   exacto del logo — no lleva texto encima, así que no necesita el tono de --sel. */
.pt-fav svg{width:24px;height:24px;fill:none;stroke:var(--ink);stroke-width:1.7;stroke-linejoin:round;
  transition:fill .15s,stroke .15s,transform .15s}
.pt-fav.on svg{fill:var(--accent);stroke:var(--accent)}
.pt-fav:focus-visible{outline:2px solid var(--accent);outline-offset:1px}

.pt-vacio{background:var(--suave,#F4F3F0);border-radius:var(--pt-r-card);padding:34px 20px;text-align:center;
  display:flex;flex-direction:column;gap:6px;align-items:center}
.pt-vacio b{font-family:var(--pt-display);font-weight:600;font-size:19px}
.pt-vacio span{font-size:16px;color:var(--ink-2);max-width:44ch}
.pt-vacio-acc{display:flex;gap:9px;flex-wrap:wrap;justify-content:center;margin-top:12px}
.pt-vacio-acc button{border-radius:var(--pt-r);padding:12px 18px;font-family:var(--pt-display);
  font-weight:600;font-size:16px;letter-spacing:.03em;cursor:pointer;border:var(--pt-borde);
  display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--pt-alto)}
.pt-vacio-acc .rojo{background:var(--sel);color:#fff;border-color:var(--sel)}
.pt-vacio-acc .rojo svg{width:17px;height:17px;stroke:#fff;stroke-width:1.8;fill:none;
  stroke-linecap:round;stroke-linejoin:round;flex:none}
.pt-vacio-acc .borde{background:var(--surface);color:var(--ink)}

/* La CAMPANA acompaña siempre a "crear alerta" (pedido del cliente, 10-sep).
   Es la acción principal al pie de la pantalla: rellena de rojo. */
.pt-alerta{width:100%;min-height:56px;margin-top:6px;border:none;border-radius:var(--pt-r);
  background:var(--sel);color:#fff;font-family:var(--pt-display);font-weight:600;
  font-size:17px;letter-spacing:.06em;cursor:pointer;transition:background .15s,transform .1s,box-shadow .15s;
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  box-shadow:0 6px 18px rgba(217,27,46,.25)}
.pt-alerta svg{width:20px;height:20px;stroke:#fff;stroke-width:1.8;fill:none;
  stroke-linecap:round;stroke-linejoin:round;flex:none}
.pt-alerta:active{transform:scale(.99)}
.pt-alerta[disabled]{opacity:.7;cursor:wait;box-shadow:none}

@keyframes pt-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}

/* ---------- web: dos columnas de resultados y más aire ---------- */
@media(min-width:860px){
  .pt-web{gap:12px}
  .pt-web .pt-mapa{height:340px}
  .pt-web .pt-lista{display:grid;grid-template-columns:1fr 1fr;gap:14px}
  .pt-web .pt-vacio{grid-column:1/-1}
  .pt-web .pt-alerta{max-width:380px;align-self:center}
  .pt-web .pt-fila.n1{max-width:520px;align-self:center;width:100%}
}
/* En celular no entran tres tipologías por fila con el texto en una sola línea
   ("DEPARTAMENTO 9" se recortaba dentro del botón): ahí el texto se ajusta. */
@media(max-width:560px){
  .pt-fila.n3 .pt-b{white-space:normal;font-size:14.5px;padding:9px 9px;line-height:1.2;
    letter-spacing:.01em;overflow:hidden}
  .pt-fila.n2 .pt-b{font-size:18px}
}
@media(max-width:400px){
  /* medido en 320 y 375 px: a 12px las cuatro etiquetas siguen entrando en UNA
     línea y ninguna se corta (el cliente pidió tres veces letra más grande) */
  .pt-fila.n1 .pt-b{font-size:12.5px;letter-spacing:.02em;padding:8px 1px}
}
@media(max-width:340px){
  /* en 320 px FAVORITOS quedaba justo con 12,5: un pelo menos de aire entre letras */
  .pt-fila.n1 .pt-b{font-size:12px;letter-spacing:.005em}
  .pt-fila.n3 .pt-b{font-size:13.5px}
  .pt-foto{flex:0 0 100px}
  .pt-cuerpo{padding:12px 48px 12px 12px}
  .pt-l3{font-size:22px}
}

/* ---------- hover: solo con mouse ----------
   En táctil el estado :hover queda pegado después del toque y confunde con
   "seleccionado". Todos los hovers del portal viven acá adentro. */
@media (hover:hover) and (pointer:fine){
  .pt-ia button:hover{background:var(--accent)}
  .pt-card:hover{box-shadow:var(--pt-sombra-alta);transform:translateY(-2px)}
  .pt-fav:hover svg{transform:scale(1.12)}
  .pt-alerta:hover{background:var(--accent);box-shadow:0 8px 22px rgba(237,29,50,.3)}
}

/* ---------- detalle en panel (compartido web + app) ----------
   Reemplaza la navegación a ficha.html en la web: el panel se abre encima y al
   cerrarlo la búsqueda sigue tal cual estaba. */
.pt-sheet{position:fixed;inset:0;z-index:2000;display:none}
.pt-sheet.on{display:block}
.pt-sheet-fondo{position:absolute;inset:0;background:rgba(15,15,14,.55);animation:pt-fade .2s ease-out}
.pt-sheet-panel{position:absolute;left:0;right:0;bottom:0;max-width:560px;margin:0 auto;
  background:var(--surface);border-radius:24px 24px 0 0;max-height:92vh;overflow-y:auto;
  padding:0 0 calc(20px + env(safe-area-inset-bottom));animation:pt-subir .24s cubic-bezier(.2,.8,.3,1);
  box-shadow:0 -10px 40px rgba(0,0,0,.2)}
body.pt-sin-scroll{overflow:hidden}
.pt-sh-foto{aspect-ratio:16/10;background:#EDEBE5;position:relative}
.pt-sh-foto img,.pt-sh-foto svg{width:100%;height:100%;object-fit:cover;display:block}
/* #82 (19-oct): en la ficha las fotos se ven ENTERAS, sea cual sea su orientación (el fondo rellena lo que sobra) */
.pt-sh-foto{background:#1b1b1a}
.pt-sh-foto img{object-fit:contain}
/* #80 (19-oct): la ficha como nube de etiquetas, sin segmentos */
.pt-sh-cars.nube{gap:6px 6px}
.pt-sh-cars span.nota{border-style:dashed;color:var(--ink-3);font-weight:500}   /* #104: «Planos: consultar» */
.pt-sh-x{position:absolute;top:12px;right:12px;width:38px;height:38px;border:none;border-radius:50%;
  background:rgba(22,22,21,.72);color:#fff;font-size:18px;cursor:pointer;backdrop-filter:blur(6px);
  display:flex;align-items:center;justify-content:center}
.pt-sh-cuerpo{padding:18px 20px 4px}
.pt-sh-zona{font-size:16px;font-weight:500;margin-top:2px}
.pt-sh-precio{font-family:var(--pt-display);font-weight:600;font-size:30px;line-height:1.2;margin-top:4px}
.pt-sh-precio span{font-size:14px;font-weight:400;color:var(--ink-2)}
.pt-sh-exp{font-size:14.5px;color:var(--ink-2)}
.pt-sh-tit{font-size:15.5px;color:var(--ink-2);margin-top:6px;line-height:1.45}
.pt-sh-specs{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:8px;margin:16px 0 4px}
.pt-sh-specs>div{background:var(--suave,#F4F3F0);border-radius:12px;padding:11px 12px}
.pt-sh-specs b{display:block;font-size:15.5px}
.pt-sh-specs span{font-size:10.5px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em}
.pt-sh-cars{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.pt-sh-cars span{border:var(--pt-borde);border-radius:999px;padding:6px 12px;
  font-size:13.5px;font-weight:600;color:var(--ink-2)}
/* Las acciones de la ficha comparten UN rectángulo: mismo alto, borde y radio.
   Lo pidió el cliente (16-sep) para "no me interesa", que iba con línea punteada. */
.pt-sh-acciones{display:flex;gap:9px;padding:14px 20px 0;flex-wrap:wrap}
.pt-sh-btn{flex:1 1 auto;min-height:50px;padding:12px 16px;border-radius:var(--pt-r);cursor:pointer;
  font-family:var(--pt-display);font-weight:600;font-size:15.5px;letter-spacing:.04em;
  border:var(--pt-borde);background:var(--surface);color:var(--ink);transition:filter .15s,border-color .15s;
  display:inline-flex;align-items:center;justify-content:center;gap:8px}
.pt-sh-btn.rojo{background:var(--sel);border-color:var(--sel);color:#fff;box-shadow:0 4px 14px rgba(217,27,46,.22)}
.pt-sh-btn:active{filter:brightness(.95)}
.pt-sh-nota{font-size:13.5px;color:var(--ink-3);padding:12px 20px 0;line-height:1.6}
@keyframes pt-subir{from{transform:translateY(24px);opacity:.6}to{transform:none;opacity:1}}
@keyframes pt-fade{from{opacity:0}to{opacity:1}}
@media(min-width:860px){
  /* en escritorio el panel se centra como diálogo, no como hoja del celular */
  .pt-sheet-panel{bottom:auto;top:50%;transform:translateY(-50%);border-radius:22px;max-height:88vh;
    max-width:600px;animation:pt-in .2s ease-out}
}

/* ---------- DESCARTADAS ("no me interesa") ----------
   La tarjeta descartada no desaparece del todo: si el usuario pide verlas, vuelve
   atenuada y con un botón para recuperarla en el mismo lugar donde estaba. */
.pt-card.oculta{opacity:.55;border-style:dashed;box-shadow:none}
.pt-card.oculta .pt-fav{display:none}
.pt-recuperar{position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:2;
  border:var(--pt-borde);background:var(--surface);color:var(--ink);border-radius:999px;
  padding:9px 13px;font-family:inherit;font-size:13.5px;font-weight:600;cursor:pointer;line-height:1.2}
/* "N descartadas en esta búsqueda · volver a mostrarlas" es UN botón con la misma
   jerarquía que el contador: centrado, grande, en el rectángulo de las acciones
   (cliente, 18-sep: "tendría que ser un botón con la misma jerarquía"). */
.pt-ocultas{width:100%;min-height:52px;margin-top:6px;padding:12px 16px;cursor:pointer;
  border:var(--pt-borde);border-radius:var(--pt-r);background:var(--surface);color:var(--ink);
  font-family:var(--pt-display);font-weight:600;font-size:17.5px;letter-spacing:.02em;line-height:1.3;
  text-align:center;white-space:normal;transition:border-color .15s,box-shadow .15s}
.pt-sh-descartar{display:flex;align-items:center;justify-content:center;gap:8px;
  width:calc(100% - 40px);margin:9px 20px 0;min-height:50px;padding:12px 16px;
  border:var(--pt-borde);border-radius:var(--pt-r);background:var(--surface);cursor:pointer;
  font-family:var(--pt-display);font-size:15.5px;font-weight:600;letter-spacing:.04em;color:var(--ink-2)}

/* ---------- ALERTA: un toque, y el modo "guardar cambios" ----------
   El cliente (11-sep) pidió que la búsqueda que acaba de hacer YA sea la alerta:
   se aprieta una vez y se confirma en el mismo lugar, sin cambiar de pantalla. */
.pt-alerta-ok{width:100%;border:none;background:var(--ok-soft,#E9F5EE);
  border-radius:var(--pt-r);padding:16px;margin-top:6px;text-align:center;
  animation:pt-in .2s ease-out}
.pt-alerta-ok b{display:block;font-family:var(--pt-display);font-weight:600;font-size:17px;
  color:var(--ok-text,#17743F)}
.pt-alerta-ok span{font-size:14.5px;color:var(--ink-2)}
.pt-alerta-edit{display:flex;flex-direction:column;gap:8px;align-items:center;width:100%;margin-top:6px}
.pt-alerta-nota{font-size:14px;color:var(--ink-3);text-align:center;line-height:1.5;margin:0}
.pt-alerta.guardar{margin-top:0}
.pt-alerta-cancel{background:none;border:none;cursor:pointer;padding:6px 10px;
  font-family:inherit;font-size:14.5px;font-weight:600;color:var(--ink-3);
  text-decoration:underline;text-underline-offset:3px}
/* la etiqueta es más larga que "CREAR ALERTA": que pueda partirse en dos líneas */
.pt-alerta{white-space:normal;line-height:1.25;padding:12px 16px}
@media (hover:hover) and (pointer:fine){
  .pt-recuperar:hover{border-color:var(--ink);color:var(--ink)}
  .pt-ocultas:hover{border-color:var(--ink-3);box-shadow:var(--pt-sombra)}
  .pt-sh-descartar:hover{border-color:var(--ink-3);color:var(--ink)}
  .pt-sh-btn:hover{border-color:var(--ink-3)}
  .pt-alerta-cancel:hover{color:var(--ink)}
}

/* ---------- ASISTENTE VIRTUAL (botón flotante + conversación) ----------
   Pedido del cliente (10-sep): "un botón flotante como el de Mercado Pago que
   abra un asistente virtual". Vive colgado del <body>, así que no se pierde
   cuando la búsqueda se vuelve a dibujar. Se apoya por debajo del detalle
   (z-index 2000) para que abrir una propiedad lo tape. */
/* El botón flota abajo a la derecha y, en la app, tapaba el borde de CREAR ALERTA
   al llegar al final de la pantalla (medido: se solapaban 53 px). Este aire lo evita. */
.pt-app{padding-bottom:76px}
/* en YO (sólo la barra) el asistente está oculto: ese aire sobraba y dejaba un hueco */
.pt-app.pt-solo{padding-bottom:0}
.pt-asis{position:fixed;right:14px;bottom:14px;z-index:1500;
  display:flex;flex-direction:column;align-items:flex-end;gap:10px;
  padding-bottom:env(safe-area-inset-bottom)}
.pt-asis.oculto{display:none}
.pt-asis-btn{display:inline-flex;align-items:center;gap:9px;cursor:pointer;
  background:var(--sel,#D91B2E);color:#fff;border:none;border-radius:30px;padding:13px 18px;
  box-shadow:0 8px 24px rgba(217,27,46,.35);
  font-family:var(--font-display,'Jost',sans-serif);font-weight:600;font-size:15px;letter-spacing:.06em;
  transition:transform .12s,box-shadow .15s}
.pt-asis-btn svg{width:23px;height:23px;stroke:currentColor;stroke-width:1.7;fill:none;
  stroke-linecap:round;stroke-linejoin:round;flex:none}
.pt-asis-btn:active{transform:scale(.97)}
.pt-asis.on .pt-asis-btn{display:none}
.pt-asis-panel{display:none;width:min(370px,calc(100vw - 26px));max-height:min(74vh,560px);
  background:var(--surface,#fff);border:none;border-radius:20px;overflow:hidden;
  box-shadow:0 16px 48px rgba(20,20,20,.28);flex-direction:column;
  animation:pt-subir .2s cubic-bezier(.2,.8,.3,1)}
.pt-asis.on .pt-asis-panel{display:flex}
.pt-asis-cab{background:var(--sel,#D91B2E);color:#fff;padding:14px 46px 14px 18px;position:relative}
.pt-asis-cab b{display:block;font-family:var(--font-display,'Jost',sans-serif);font-size:17px;
  font-weight:600;letter-spacing:.04em}
.pt-asis-cab span{font-size:13.5px;opacity:.86}
.pt-asis-x{position:absolute;top:50%;right:10px;transform:translateY(-50%);width:34px;height:34px;
  border:none;border-radius:50%;background:rgba(255,255,255,.18);color:#fff;font-size:16px;cursor:pointer}
.pt-asis-msgs{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:9px;
  background:var(--suave,#F4F3F0);-webkit-overflow-scrolling:touch}
.pt-msg{max-width:88%;padding:10px 14px;border-radius:16px;font-size:15.5px;line-height:1.5}
.pt-msg.bot{background:var(--surface,#fff);border:none;box-shadow:var(--pt-sombra);
  border-bottom-left-radius:5px;align-self:flex-start;color:var(--ink,#161615)}
.pt-msg.bot b{font-weight:700}
.pt-msg.yo{background:var(--ink,#161615);color:#fff;border-bottom-right-radius:5px;align-self:flex-end}
.pt-chips{display:flex;flex-wrap:wrap;gap:6px;align-self:flex-start;max-width:96%}
.pt-chips button{border:1px solid var(--sel,#D91B2E);background:var(--surface,#fff);
  color:var(--accent-dark,#C21829);border-radius:999px;padding:8px 13px;cursor:pointer;
  font-family:inherit;font-size:14.5px;font-weight:600}
.pt-chips button:active{background:var(--accent-soft,#FEEDEF)}
.pt-asis-pie{display:flex;gap:6px;align-items:center;padding:8px;border-top:1px solid var(--line,#E7E7E2);
  background:var(--surface,#fff)}
.pt-asis-pie input{flex:1;min-width:0;border:none;background:var(--suave,#F4F3F0);border-radius:999px;
  padding:12px 15px;font-family:inherit;font-size:17px;color:var(--ink,#161615);outline:none}
.pt-asis-pie button{flex:0 0 auto;width:42px;height:42px;border:none;border-radius:50%;
  background:var(--sel,#D91B2E);color:#fff;font-size:22px;line-height:1;cursor:pointer;
  display:grid;place-items:center}
@media (hover:hover) and (pointer:fine){
  .pt-asis-btn:hover{box-shadow:0 10px 28px rgba(217,27,46,.42)}
  .pt-chips button:hover{background:var(--accent-soft,#FEEDEF)}
}
@media(max-width:420px){
  .pt-asis-btn span{display:none}          /* en celular, sólo el círculo */
  .pt-asis-btn{padding:15px;border-radius:50%}
}

/* ---------- roles (17-sep): ficha de mi cliente / de un colega ---------- */
.pt-ficha-btns{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.pt-alerta.sec{background:var(--surface);color:var(--ink);border:var(--pt-borde);box-shadow:none;
  font-size:15.5px;min-height:50px;margin-top:0}
.pt-alerta.sec svg{stroke:var(--accent)}
.pt-ficha-form{display:flex;flex-direction:column;gap:10px;background:var(--suave,#F4F3F0);
  border-radius:var(--pt-r-card);padding:16px;margin-top:6px}
.pt-ficha-form>b{font-family:var(--pt-display);font-weight:600;font-size:17px}
.pt-ficha-form .pt-alerta{margin-top:4px}

/* ---------- OFRECER (17-sep): la carga de una propiedad ---------- */
.pt-of{display:flex;flex-direction:column;gap:12px;margin-top:4px}
.pt-of-hint{font-size:15px;color:var(--ink-3);text-align:center;margin:0}
.pt-of-sec{background:var(--surface);border:var(--pt-borde);border-radius:var(--pt-r-card);padding:14px 14px 16px;
  display:flex;flex-direction:column;gap:10px}
.pt-of-sec h3{font-family:var(--pt-display);font-weight:600;font-size:14.5px;letter-spacing:.1em;color:var(--ink-2);
  margin:0;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.pt-of-sec h3 em{font-style:normal;font-family:var(--font-ui,'Inter',sans-serif);font-weight:400;font-size:13.5px;
  letter-spacing:0;color:var(--ink-3);text-transform:none}
.pt-of-fila{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}
.pt-of-fila>.pt-sel{flex:1 1 140px}
.pt-of-fila>input{flex:1 1 160px;min-width:0}
.pt-of input,.pt-of textarea,.pt-of select,.pt-ficha-form input,.pt-ficha-form select{
  width:100%;min-height:var(--pt-alto);border:var(--pt-borde);border-radius:var(--pt-r);background:var(--surface);
  color:var(--ink);padding:10px 12px;font-family:inherit;font-size:17px;outline:none;transition:border-color .14s,box-shadow .14s}
.pt-of textarea{min-height:76px;resize:vertical;line-height:1.45}
.pt-of input:focus,.pt-of textarea:focus,.pt-of select:focus,.pt-ficha-form input:focus,.pt-ficha-form select:focus{
  border-color:var(--ink);box-shadow:0 0 0 3px rgba(22,22,21,.07)}
.pt-of select,.pt-ficha-form select{appearance:none;font-weight:600;padding-right:34px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%238B8B86' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;background-size:11px}
.pt-of-link{align-self:flex-start;background:none;border:none;padding:4px 2px;cursor:pointer;font-family:inherit;
  font-size:15px;font-weight:600;color:var(--accent-dark);text-decoration:underline;text-underline-offset:3px}
.pt-of-mini{flex:0 0 auto;min-height:var(--pt-alto);padding:0 16px;border:none;border-radius:var(--pt-r);background:var(--ink);
  color:#fff;font-family:var(--pt-display);font-weight:600;font-size:15px;letter-spacing:.04em;cursor:pointer}
.pt-of-mapa{height:220px;border-radius:14px;overflow:hidden;position:relative;z-index:0;isolation:isolate;box-shadow:var(--pt-sombra)}
.pt-of-mapa[hidden]{display:none}
.pt-of-fotos{display:flex;flex-wrap:wrap;gap:8px}
.pt-of-foto{position:relative;width:96px;height:72px;border-radius:12px;overflow:hidden;background:#EDEBE5;box-shadow:var(--pt-sombra)}
.pt-of-foto img{width:100%;height:100%;object-fit:cover;display:block}
.pt-of-foto button,.pt-of-doc button{width:26px;height:26px;border:none;border-radius:50%;background:rgba(22,22,21,.75);
  color:#fff;font-size:14px;cursor:pointer;display:grid;place-items:center;flex:none}
.pt-of-foto button{position:absolute;top:4px;right:4px}
.pt-of-add{width:96px;height:72px;border:1.5px dashed var(--line-2);border-radius:12px;display:flex;align-items:center;
  justify-content:center;font-size:30px;color:var(--ink-3);cursor:pointer;background:var(--suave,#F4F3F0)}
.pt-of-add.doc{width:auto;height:auto;min-height:var(--pt-alto);padding:10px 16px;font-size:15.5px;font-weight:600;
  font-family:var(--pt-display);letter-spacing:.03em;color:var(--ink-2);align-self:flex-start}
.pt-of-doc{display:flex;align-items:center;gap:8px;background:var(--suave,#F4F3F0);border-radius:12px;padding:9px 12px;font-size:15px}
.pt-of-doc span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pt-of-error{background:var(--accent-soft);color:var(--accent-dark);border-radius:var(--pt-r);padding:11px 14px;
  font-size:15px;font-weight:600;margin:0}
.pt-of-ok{background:var(--ok-soft,#E9F5EE);border-radius:var(--pt-r-card);padding:22px 18px;text-align:center;
  display:flex;flex-direction:column;gap:8px;align-items:center}
.pt-of-ok b{font-family:var(--pt-display);font-weight:600;font-size:20px;color:var(--ok-text,#17743F)}
.pt-of-ok span{font-size:16px;color:var(--ink-2)}
.pt-of-ok .pt-alerta{max-width:300px;margin-top:8px}

/* ---------- ficha: galería, video, etiquetas, charla ---------- */
.pt-sh-n{position:absolute;left:12px;bottom:12px;background:rgba(22,22,21,.72);color:#fff;font-size:13px;font-weight:600;
  border-radius:999px;padding:4px 10px;backdrop-filter:blur(6px)}
.pt-sh-tiras{display:flex;gap:6px;padding:10px 20px 0;overflow-x:auto;scrollbar-width:none}
.pt-sh-tiras img{width:64px;height:48px;object-fit:cover;border-radius:8px;flex:none;cursor:pointer;opacity:.6;border:2px solid transparent}
.pt-sh-tiras img.on{opacity:1;border-color:var(--accent)}
.pt-sh-zona span{color:var(--ink-3);font-weight:400;font-size:14px}
.pt-sh-etq{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.pt-sh-etq span{background:var(--accent-soft);color:var(--accent-dark);border-radius:999px;padding:5px 11px;font-size:13.5px;font-weight:600}
.pt-sh-desc{font-size:16px;color:var(--ink-2);line-height:1.55;margin:10px 0 0;white-space:pre-line}
.pt-sh-video{position:relative;width:100%;aspect-ratio:16/9;border:none;border-radius:14px;overflow:hidden;margin-top:12px;
  padding:0;background:#000;cursor:pointer;display:block}
.pt-sh-video img{width:100%;height:100%;object-fit:cover;display:block;opacity:.85}
.pt-sh-video span{position:absolute;inset:0;display:grid;place-items:center;font-size:24px;color:#fff}
.pt-sh-video span::before{content:'';position:absolute;width:64px;height:64px;border-radius:50%;background:var(--sel);
  z-index:-1;box-shadow:0 6px 18px rgba(0,0,0,.3)}
.pt-sh-video iframe{width:100%;height:100%;border:0}
.pt-sh-charla{margin:14px 20px 0;background:var(--suave,#F4F3F0);border-radius:var(--pt-r-card);padding:14px}
.pt-ch-tit{font-family:var(--pt-display);font-weight:600;font-size:17px;margin-bottom:8px}
.pt-ch-msgs{display:flex;flex-direction:column;gap:8px;max-height:280px;overflow-y:auto;margin-bottom:10px}
.pt-ch-msgs .pt-msg{max-width:92%}
.pt-ch-in{display:flex;gap:6px;align-items:center;background:var(--surface);border-radius:999px;padding:5px 5px 5px 8px}
.pt-ch-in input{flex:1;min-width:0;border:none;background:none;padding:10px;font-family:inherit;font-size:17px;color:var(--ink);outline:none}
.pt-ch-in button{flex:0 0 auto;width:40px;height:40px;border:none;border-radius:50%;background:var(--sel);color:#fff;
  font-size:20px;cursor:pointer;display:grid;place-items:center}
.pt-ch-in button[disabled]{opacity:.6}
.pt-ch-nota{font-size:13.5px;color:var(--ink-3);margin:8px 0 0;line-height:1.5}
.pt-ch-cuenta{display:flex;flex-direction:column;gap:10px;align-items:flex-start}

/* ---------- mapa: un punto por propiedad + racimos ---------- */
.pt-punto{width:26px;height:26px;border-radius:50%;background:var(--sel);border:3px solid #fff;box-shadow:0 3px 10px rgba(0,0,0,.3);cursor:pointer}
/* #21: la favorita es un corazón rojo (el SVG va adentro del div) */
.pt-punto.fav{background:transparent;border:none;box-shadow:none;display:flex;align-items:center;justify-content:center}
/* #28: casi Match en el mapa, atenuado */
.pt-punto.casi{width:20px;height:20px;opacity:.45;border-width:2.5px}
.pt-punto.fav svg{width:100%;height:100%;fill:var(--sel);stroke:#fff;stroke-width:1.4;stroke-linejoin:round;filter:drop-shadow(0 3px 5px rgba(0,0,0,.35));overflow:visible}
.pt-pin.pt-cl{background:var(--sel)}
.marker-cluster{background:none}

/* ---------- ficha: mapa adentro (cliente, 18-sep) ----------
   La propiedad abierta es el punto rojo grande; las demás de la búsqueda, puntos
   chicos oscuros que al tocarlos cambian de ficha. */
.pt-sh-mapa{height:230px;margin-top:14px;border-radius:14px;overflow:hidden;position:relative;z-index:0;
  isolation:isolate;box-shadow:var(--pt-sombra);background:#E8EDE6}
.pt-sh-mapa .leaflet-bar{border:none;box-shadow:var(--pt-sombra);border-radius:10px;overflow:hidden}
.pt-sh-mapa .leaflet-bar a{border-bottom-color:var(--line);color:var(--ink)}
.pt-sh-mapa-nota{font-size:13.5px;color:var(--ink-3);margin:8px 0 0;line-height:1.5}
.pt-punto.on{width:30px;height:30px;box-shadow:0 0 0 5px rgba(217,27,46,.22),0 3px 10px rgba(0,0,0,.3);cursor:default}
.pt-punto.otro{width:18px;height:18px;background:var(--ink);border-width:2.5px;opacity:.9}
.pt-punto.otro.fav{background:transparent;opacity:1}
.pt-punto.otro.fav svg{fill:var(--accent-dark)}
.leaflet-tooltip{font-family:var(--pt-display);font-weight:600;font-size:14px;border:none;border-radius:10px;
  box-shadow:var(--pt-sombra);padding:5px 10px;color:var(--ink)}
.leaflet-tooltip-top:before{border-top-color:#fff}
@media(min-width:860px){ .pt-sh-mapa{height:260px} }
/* un video que no es de YouTube se abre aparte, en vez de perderse */
.pt-sh-video-link{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:12px;min-height:50px;
  border:var(--pt-borde);border-radius:var(--pt-r);background:var(--surface);color:var(--ink);text-decoration:none;
  font-family:var(--pt-display);font-weight:600;font-size:15.5px;letter-spacing:.04em}

/* 23-sep (noche): características por segmento en la ficha y en OFRECER */
.pt-sh-seg{display:flex;flex-wrap:wrap;gap:6px;width:100%}
.pt-sh-seg i{font-style:normal;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);width:100%;margin-top:4px}
.pt-of-seg i{display:block;font-style:normal;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin:10px 0 4px}
/* línea roja translúcida entre segmentos (Matt, 23-sep noche) */
.pt-sh-seg+.pt-sh-seg{border-top:1px solid rgba(237,29,50,.28);padding-top:8px;margin-top:4px}
.pt-of-seg+.pt-of-seg{border-top:1px solid rgba(237,29,50,.28);margin-top:10px}

/* ---------- #28 (1-oct): CASI MATCH — superan el tope de precio hasta un 30 %, atenuadas y etiquetadas ---------- */
.pt-casi{margin-top:18px}
.pt-casi h3{font-family:var(--pt-display);font-weight:600;font-size:19px;letter-spacing:.02em;margin:0 0 10px;text-align:center}
.pt-casi h3 small{display:block;font-size:13.5px;color:var(--ink-3);font-weight:500;letter-spacing:0;margin-top:2px}
.pt-card.casi{opacity:.62;border-style:dashed}
.pt-card.casi:hover,.pt-card.casi:focus-within{opacity:1}
.pt-casi-etq{display:inline-block;margin-top:6px;font-size:11px;font-weight:700;letter-spacing:.06em;color:var(--warn-text,#96600F);
  background:var(--warn-soft,#FCF3E1);border-radius:999px;padding:3px 9px}
.pt-casi-nota{font-size:13.5px;color:var(--ink-3);text-align:center}

/* 3-oct-2026 — #42: aviso de cliente ya registrado dentro del mini formulario "ficha de…" */
.pt-ficha-existente-caja{font-size:13px;line-height:1.45;background:#fff;border:1px solid var(--line-2,#D9D9D3);border-radius:10px;padding:10px 12px}
.pt-ficha-existente-caja b{font-weight:700}
/* #41: datos del panel (sólo el equipo) y la casilla de publicar */
.pt-of-equipo{border:1px dashed var(--accent,#ED1D32);border-radius:12px;padding:12px}
.pt-of-check{display:flex;align-items:center;gap:8px;font-size:13.5px;margin-top:8px;cursor:pointer}
.pt-of-check input{width:18px;height:18px;accent-color:var(--accent,#ED1D32)}
.pt-of-check small{color:var(--ink-3,#8B8B86)}
/* #60 (14-oct): el bloque de ALQUILER del formulario — checklist de requisitos, ajuste y honorarios */
.pt-of-seg i em{font-style:normal;font-weight:400;text-transform:none;letter-spacing:0;margin-left:6px;color:var(--ink-3)}
.pt-of-reqs{display:flex;flex-direction:column;gap:8px;margin-bottom:4px}
.pt-of-req{display:flex;align-items:center;gap:10px}
.pt-of-req input[type=checkbox]{flex:none;width:22px;height:22px;accent-color:var(--accent,#ED1D32);margin:0}
.pt-of-req input:not([type=checkbox]){flex:1;min-width:0}
.pt-of-req button{flex:none;width:34px;height:34px;border:none;border-radius:50%;background:var(--suave,#F4F3F0);color:var(--ink-2);
  font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center}
.pt-of-req button:hover{background:var(--accent-soft);color:var(--accent-dark)}
.pt-of-check-fila{flex:0 0 auto;margin:0 0 13px;white-space:nowrap}
.pt-of input[readonly]{background:var(--suave,#F4F3F0);color:var(--ink-2)}
/* #87 (19-oct): el presupuesto se escribe (con los montos de siempre como sugerencia) */
.pt-fila.n4 .pt-sel input{width:100%;min-height:var(--pt-alto);border:var(--pt-borde);border-radius:var(--pt-r);background:var(--surface);
  color:var(--ink);padding:10px 12px;font-family:inherit;font-size:17px;outline:none;transition:border-color .14s,box-shadow .14s}
.pt-fila.n4 .pt-sel input:focus{border-color:var(--ink);box-shadow:0 0 0 3px rgba(22,22,21,.07)}
/* #101: el submenú de INVERSIÓN, pegado a las tipologías */
.pt-fila.n3.pt-inv{margin-top:-6px;padding-left:12px;border-left:3px solid var(--sel)}
/* #91: lo que el particular quiere contar antes de guardar su búsqueda */
.pt-busq-nota{display:flex;margin-bottom:10px}
.pt-busq-nota textarea{width:100%;min-height:64px;border:var(--pt-borde);border-radius:var(--pt-r);padding:10px 12px;font-family:inherit;font-size:16px;resize:vertical}
/* #89: permuta en la ficha y en OFRECER */
.pt-sh-permuta{display:flex;flex-direction:column;gap:4px;margin-top:10px;padding:10px 14px;border:1px dashed var(--line-2,#D9D9D3);border-radius:12px;font-size:14.5px}
.pt-sh-permuta b{color:var(--accent-dark)}
.pt-sh-permuta span{color:var(--ink-2)}
.pt-of .pt-of-check small{color:var(--ink-3)}
/* la ficha pública: ajuste, honorarios y requisitos del alquiler (#60) */
.pt-sh-alq{display:flex;flex-direction:column;gap:7px;margin-top:12px;padding:12px 14px;background:var(--suave,#F4F3F0);border-radius:12px;font-size:14.5px;line-height:1.45}
.pt-sh-alq>div{display:flex;gap:6px;flex-wrap:wrap;align-items:baseline}
.pt-sh-alq b{font-weight:600;color:var(--ink-2);white-space:nowrap}
.pt-sh-alq b::after{content:':'}
.pt-sh-alq span{color:var(--ink)}

/* #119 (21-oct): las dos filas de botones del ajuste (cada N meses / índice) ya no van pegadas */
.pt-of-alq .pt-fila.n5 + .pt-fila.n5{margin-top:8px}
