/* Distrito Mediafels - maqueta 3D
   Los colores salen del tema de mediafels.com, no se inventa ninguno. */
:root{
  --bg:#0e1013; --bg2:#12151a;
  --surf:rgba(255,255,255,.045); --surf2:rgba(255,255,255,.075);
  --line:rgba(255,255,255,.09); --line2:rgba(255,255,255,.16);
  --lima:#c2f24a; --lima2:#d8ff5e; --limad:#8fbf1c;
  --ink:#eef1f4; --mut:#9ea5ac; --mut2:#868d95;
  --f:'Plus Jakarta Sans',system-ui,-apple-system,'Segoe UI',sans-serif;
  --serif:'Fraunces',Georgia,serif;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --r:22px;
  --arriba:env(safe-area-inset-top,0px);
  --abajo:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font-family:var(--f); font-size:16px; line-height:1.55;
  overflow:hidden; overscroll-behavior:none;
  -webkit-font-smoothing:antialiased;
}
#lienzo{position:fixed; inset:0; width:100%; height:100%; display:block; touch-action:none}
#capaPins{position:fixed; inset:0; pointer-events:none; overflow:hidden}

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

/* ---------- pantalla de carga ---------- */
#cargando{
  position:fixed; inset:0; z-index:60; display:grid; place-content:center; gap:20px;
  background:var(--bg); text-align:center; transition:opacity .5s ease, visibility .5s;
}
#cargando.fuera{opacity:0; visibility:hidden}
#cargando p{margin:0; color:var(--mut); font-size:.9rem; letter-spacing:.14em; text-transform:uppercase}
.c-marca{display:grid; grid-template-columns:repeat(2,20px); gap:5px; justify-content:center}
.c-marca span{height:20px; border-radius:5px; background:var(--lima); opacity:.18; animation:late 1.5s ease-in-out infinite}
.c-marca span:nth-child(2){animation-delay:.18s}
.c-marca span:nth-child(3){animation-delay:.54s}
.c-marca span:nth-child(4){animation-delay:.36s}
@keyframes late{0%,100%{opacity:.14;transform:translateY(0)}50%{opacity:1;transform:translateY(-4px)}}

/* ---------- barra ---------- */
.barra{
  position:fixed; z-index:30; top:0; left:0; right:0;
  display:flex; align-items:center; gap:18px;
  padding:calc(12px + var(--arriba)) 18px 12px;
  background:linear-gradient(180deg,rgba(14,16,19,.92),rgba(14,16,19,.55) 62%,transparent);
  backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
}
.logo{display:flex; align-items:center; gap:10px; text-decoration:none; color:var(--ink); flex:0 0 auto}
.logo-marca{display:grid; place-items:center; width:32px; height:32px; border-radius:9px; background:var(--lima)}
.logo-txt{font-weight:800; letter-spacing:-.02em; font-size:1.02rem}
.barra-mid{flex:1 1 auto; min-width:0; text-align:center}
.barra-mid h1{
  margin:0; font-family:var(--serif); font-weight:600; font-size:1.06rem;
  letter-spacing:-.01em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.barra-mid p{margin:1px 0 0; font-size:.74rem; color:var(--mut2); letter-spacing:.04em}
.barra-der{flex:0 0 auto; display:flex; align-items:center; gap:9px}

.btn-lima{
  display:inline-flex; align-items:center; justify-content:center;
  background:var(--lima); color:#0e1013; text-decoration:none;
  font-weight:700; font-size:.84rem; padding:9px 16px; border-radius:999px;
  border:0; cursor:pointer; transition:background .18s ease, transform .18s ease;
}
.btn-lima:hover{background:var(--lima2); transform:translateY(-1px)}
.btn-lima.ancho{width:100%; padding:13px 18px; font-size:.92rem; border-radius:14px}
.btn-ghost{
  background:var(--surf); color:var(--ink); border:1px solid var(--line);
  font-family:inherit; font-weight:600; font-size:.84rem; padding:8px 14px;
  border-radius:999px; cursor:pointer; transition:background .18s ease, border-color .18s ease;
}
.btn-ghost:hover{background:var(--surf2); border-color:var(--line2)}

/* ---------- filtros ---------- */
.filtros{
  position:fixed; z-index:28; top:calc(66px + var(--arriba)); left:0; right:0;
  overflow-x:auto; overflow-y:hidden; scrollbar-width:none;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 14px,#000 calc(100% - 14px),transparent);
          mask-image:linear-gradient(90deg,transparent,#000 14px,#000 calc(100% - 14px),transparent);
}
.filtros::-webkit-scrollbar{display:none}
.filtros-in{display:flex; gap:7px; padding:4px 18px 10px; width:max-content; min-width:100%}
.chip{
  flex:0 0 auto; display:inline-flex; align-items:center; gap:7px;
  background:rgba(18,21,26,.82); color:var(--mut); border:1px solid var(--line);
  font-family:inherit; font-size:.8rem; font-weight:600; letter-spacing:.01em;
  padding:7px 14px; border-radius:999px; cursor:pointer; white-space:nowrap;
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  transition:color .18s ease, border-color .18s ease, background .18s ease;
}
.chip:hover{color:var(--ink); border-color:var(--line2)}
.chip[aria-pressed="true"]{background:var(--lima); border-color:var(--lima); color:#0e1013}
.chip .n{font-family:var(--mono); font-size:.7rem; opacity:.62}
.chip[aria-pressed="true"] .n{opacity:.7}

/* ---------- carteles sobre los edificios ----------
   Antes eran una pildora con el nombre y el precio en la misma linea: se
   leia regular y el elegido era un bloque de lima que tapaba el edificio.
   Ahora: icono del tipo, nombre arriba, precio debajo, y el elegido se
   marca con un borde y una barra, no pintandolo entero. */
.pin{
  position:absolute; transform:translate(-50%,-100%);
  pointer-events:auto; cursor:pointer; will-change:transform, opacity;
  transition:opacity .22s ease;
  display:flex; flex-direction:column; align-items:center;
}
.pin-caja{
  display:flex; align-items:center; gap:9px;
  padding:7px 13px 7px 10px;
  /* SIN backdrop-filter a proposito. Son diez carteles que cambian de sitio
     en cada fotograma: con desenfoque de fondo cada uno es una capa que el
     compositor rehace sesenta veces por segundo, y en los equipos donde eso
     falla los carteles salen en BLANCO, sin texto. Un fondo solido no puede
     fallar y encima va mas rapido. */
  background:#11151a;
  color:var(--ink);
  border:1px solid var(--line2); border-left:3px solid var(--mut2);
  border-radius:12px;
  box-shadow:0 10px 26px rgba(0,0,0,.5), 0 1px 0 rgba(255,255,255,.06) inset;
  transition:border-color .18s ease, background .18s ease, transform .18s ease;
}
.pin:hover .pin-caja{
  background:#171c22; border-left-color:var(--lima);
  transform:translateY(-2px);
}
.pin-ico{display:flex; color:var(--mut); transition:color .18s ease}
.pin:hover .pin-ico{color:var(--lima)}
.pin-col{display:flex; flex-direction:column; align-items:flex-start; gap:1px; line-height:1.15}
.pin-txt{
  font-size:.78rem; font-weight:700; color:var(--ink);
  white-space:nowrap; letter-spacing:-.005em;
}
.pin-eur{
  font-family:var(--mono); font-size:.67rem; font-weight:500;
  color:var(--lima); white-space:nowrap; letter-spacing:-.01em;
}

/* el hilo hasta el edificio, con su punto de anclaje */
.pin-pata{width:1px; height:20px; background:linear-gradient(180deg,var(--line2),rgba(194,242,74,.55))}
.pin-punta{
  width:7px; height:7px; margin-top:-3.5px; border-radius:50%;
  background:var(--lima); box-shadow:0 0 0 3px rgba(194,242,74,.18);
}

/* el elegido: borde y barra en lima, no un bloque de color */
.pin.sel{z-index:2}
.pin.sel .pin-caja{
  background:#161b14;
  border-color:rgba(194,242,74,.55); border-left-color:var(--lima);
  box-shadow:0 12px 30px rgba(0,0,0,.55), 0 0 0 1px rgba(194,242,74,.18);
}
.pin.sel .pin-ico{color:var(--lima)}
.pin.sel .pin-txt{color:#fff}
.pin.sel .pin-punta{box-shadow:0 0 0 5px rgba(194,242,74,.26)}

/* nuestra oficina no esta en venta: se distingue sin gritar */
.pin.nuestro .pin-caja{border-left-color:rgba(194,242,74,.6)}
.pin.nuestro .pin-eur{color:var(--mut2); font-family:var(--f); font-size:.68rem; font-weight:600}

.pin.apagado{opacity:.26}
.pin.apagado .pin-eur{display:none}
.pin[hidden]{display:none}
body.con-ficha .pin:not(.sel){opacity:.42}
body.con-ficha .pin:not(.sel):hover{opacity:1}

@media (max-width:880px){
  .pin-caja{padding:6px 11px 6px 9px; gap:7px}
  .pin-txt{font-size:.74rem}
  .pin-eur{font-size:.63rem}
  .pin-pata{height:15px}
}

/* ---------- ficha ---------- */
.panel{
  position:fixed; z-index:34; top:calc(108px + var(--arriba)); right:16px; bottom:16px;
  width:min(420px,calc(100vw - 32px));
  background:linear-gradient(180deg,rgba(18,21,26,.96),rgba(14,16,19,.97));
  border:1px solid var(--line); border-radius:var(--r);
  box-shadow:0 30px 70px rgba(0,0,0,.6);
  backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px);
  overflow:hidden auto; overscroll-behavior:contain;
  animation:entra .34s cubic-bezier(.2,.9,.25,1);
}
/* el panel vive siempre, pero solo se ve cuando hay algo que ensenar */
body:not(.con-panel) .panel{display:none}
@keyframes entra{from{opacity:0; transform:translateX(22px)}to{opacity:1; transform:none}}
.panel-x{
  position:absolute; z-index:2; top:12px; right:12px; width:32px; height:32px;
  display:grid; place-items:center; border-radius:50%;
  background:var(--surf); border:1px solid var(--line); color:var(--mut);
  cursor:pointer; transition:color .18s, background .18s;
}
.panel-x:hover{color:var(--ink); background:var(--surf2)}
.panel-cuerpo{padding:22px 22px 26px}

.estado{
  display:inline-flex; align-items:center; gap:7px; font-size:.7rem; font-weight:700;
  letter-spacing:.1em; text-transform:uppercase; padding:5px 11px; border-radius:999px;
  border:1px solid var(--line2); color:var(--mut);
}
.estado i{width:6px; height:6px; border-radius:50%; background:var(--lima); font-style:normal}
.estado.caliente{color:var(--lima); border-color:rgba(194,242,74,.4)}
.estado.frio i{background:var(--mut2)}

.panel h2{
  margin:13px 0 4px; font-family:var(--serif); font-weight:600;
  font-size:1.58rem; line-height:1.12; letter-spacing:-.02em;
}
.panel .titular{margin:0 0 16px; color:var(--lima); font-size:.92rem; font-weight:600}
.panel .texto{margin:0 0 18px; color:var(--mut); font-size:.92rem}

.datos{
  display:grid; grid-template-columns:1fr 1fr; gap:1px;
  background:var(--line); border:1px solid var(--line); border-radius:14px; overflow:hidden; margin-bottom:18px;
}
.datos div{background:var(--bg2); padding:12px 13px}
.datos dt{margin:0 0 3px; font-size:.68rem; letter-spacing:.09em; text-transform:uppercase; color:var(--mut2)}
.datos dd{margin:0; font-family:var(--mono); font-size:.95rem; font-weight:500; color:var(--ink)}

.lista{margin:0 0 20px; padding:0; list-style:none; display:grid; gap:9px}
.lista li{display:flex; gap:10px; font-size:.88rem; color:var(--mut)}
.lista li::before{content:""; flex:0 0 auto; width:6px; height:6px; margin-top:7px; border-radius:50%; background:var(--lima)}

.panel-pie{display:grid; gap:9px}
.aviso{
  margin:16px 0 0; padding:11px 13px; border-radius:12px;
  background:rgba(194,242,74,.05); border:1px solid rgba(194,242,74,.16);
  font-size:.78rem; color:var(--mut); line-height:1.5;
}

/* ---------- mandos y pista ---------- */
.mandos{
  position:fixed; z-index:30; left:16px; bottom:calc(16px + var(--abajo));
  display:flex; flex-direction:column; gap:7px; align-items:flex-start;
}
.mando{
  display:inline-flex; align-items:center; gap:8px;
  background:rgba(18,21,26,.86); color:var(--mut); border:1px solid var(--line);
  font-family:inherit; font-size:.8rem; font-weight:600;
  padding:8px 14px; border-radius:999px; cursor:pointer;
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  transition:color .18s ease, border-color .18s ease;
}
.mando:hover{color:var(--ink); border-color:var(--line2)}
.mando[aria-pressed="true"]{color:var(--lima); border-color:rgba(194,242,74,.38)}
.mando svg{flex:0 0 auto}

.pista{
  position:fixed; z-index:26; left:50%; bottom:calc(18px + var(--abajo));
  transform:translateX(-50%); margin:0; white-space:nowrap;
  font-size:.74rem; color:var(--mut2); letter-spacing:.03em;
  transition:opacity .5s ease; pointer-events:none;
}
.pista.fuera{opacity:0}

/* ---------- hoja "que es esto" y respaldo ---------- */
.hoja,.respaldo{
  position:fixed; inset:0; z-index:50; display:grid; place-items:center;
  padding:20px; background:rgba(8,9,11,.72);
  backdrop-filter:blur(7px); -webkit-backdrop-filter:blur(7px);
  animation:aparece .28s ease;
}
/* display:grid pisa al atributo hidden, hay que decirlo a mano */
.hoja[hidden],.respaldo[hidden]{display:none}
@keyframes aparece{from{opacity:0}to{opacity:1}}
.hoja-in,.respaldo-in{
  position:relative; width:min(640px,100%); max-height:86vh; overflow:auto;
  padding:30px; border-radius:var(--r);
  background:linear-gradient(180deg,#12151a,#0e1013);
  border:1px solid var(--line); box-shadow:0 40px 90px rgba(0,0,0,.6);
}
.ceja{
  display:inline-block; font-size:.68rem; font-weight:700; letter-spacing:.14em;
  text-transform:uppercase; color:var(--lima); margin-bottom:10px;
}
.hoja h2,.respaldo h2{
  margin:0 0 14px; font-family:var(--serif); font-weight:600;
  font-size:1.72rem; line-height:1.16; letter-spacing:-.02em;
}
.hoja p,.respaldo p{margin:0 0 14px; color:var(--mut); font-size:.94rem}
.que-grid{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin:20px 0 22px}
.que-grid>div{padding:15px 16px; border-radius:14px; background:var(--surf); border:1px solid var(--line)}
.que-grid b{display:block; margin-bottom:5px; font-size:.9rem}
.que-grid p{margin:0; font-size:.83rem; line-height:1.5}
.respaldo ul{margin:0 0 22px; padding:0 0 0 18px; color:var(--mut); font-size:.9rem}
.respaldo li{margin-bottom:7px}
.respaldo li b{color:var(--ink)}

/* ---------- movil ---------- */
@media (max-width:880px){
  .barra{gap:10px; padding:calc(10px + var(--arriba)) 13px 10px}
  .barra-mid{display:none}
  .barra-der{margin-left:auto}
  .filtros{top:calc(58px + var(--arriba))}
  .filtros-in{padding:4px 13px 10px}
  .que-grid{grid-template-columns:1fr}
  .hoja-in,.respaldo-in{padding:24px 20px}
  .hoja h2,.respaldo h2{font-size:1.42rem}

  /* la ficha pasa a ser una hoja que sube desde abajo */
  .panel{
    top:auto; right:0; left:0; bottom:0; width:100%;
    max-height:74vh; border-radius:20px 20px 0 0;
    border-left:0; border-right:0; border-bottom:0;
    animation:sube .34s cubic-bezier(.2,.9,.25,1);
  }
  @keyframes sube{from{opacity:0; transform:translateY(30px)}to{opacity:1; transform:none}}
  .panel-cuerpo{padding:22px 18px calc(26px + var(--abajo))}
  .panel::before{
    content:""; position:sticky; top:0; display:block;
    width:42px; height:4px; margin:0 auto 12px; border-radius:99px; background:var(--line2);
  }
  .mandos{flex-direction:row; left:13px; right:13px; bottom:calc(13px + var(--abajo)); flex-wrap:wrap}
  .mando{font-size:.76rem; padding:7px 12px}
  .pista{display:none}
  .panel h2{font-size:1.36rem}
}
@media (max-width:420px){
  .logo-txt{display:none}
  .datos{grid-template-columns:1fr}
}
/* con la ficha abierta en movil los mandos estorban */
@media (max-width:880px){
  body.con-ficha .mandos{opacity:0; pointer-events:none}
}
.mandos{transition:opacity .25s ease}

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

/* ===================================================== v20: ciudad de día
   La interfaz sigue siendo oscura sobre un 3D luminoso: es lo que hacen las
   webs de promoción buenas, porque el cristal oscuro no compite con el
   edificio y deja leer las cifras a pleno sol. */

/* --- horas del sol, abajo a la derecha --- */
.horas{
  position:fixed; z-index:30; right:16px; bottom:calc(16px + var(--abajo));
  display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end; max-width:48vw;
}
.chip-hora{font-size:.78rem; padding:7px 13px}

/* --- brújula --- */
.brujula{
  position:fixed; z-index:28; right:18px; top:calc(112px + var(--arriba));
  width:54px; height:54px; border-radius:50%;
  background:rgba(18,21,26,.72); border:1px solid var(--line);
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  display:grid; place-items:center;
}
.brujula-n{
  position:absolute; top:4px; font-size:.6rem; font-weight:800;
  letter-spacing:.1em; color:var(--mut2);
}
.aguja{display:block; width:100%; height:100%; position:relative}
.aguja i{
  position:absolute; left:50%; top:9px; width:0; height:0; margin-left:-5px;
  border-left:5px solid transparent; border-right:5px solid transparent;
  border-bottom:17px solid var(--lima);
}
.aguja::after{
  content:""; position:absolute; left:50%; bottom:9px; width:0; height:0; margin-left:-5px;
  border-left:5px solid transparent; border-right:5px solid transparent;
  border-top:17px solid rgba(255,255,255,.22);
}

/* --- ficha: dirección, precio y cuota --- */
.panel .dir{
  margin:0 0 10px; font-family:var(--mono); font-size:.76rem;
  letter-spacing:.02em; color:var(--mut2);
}
.panel .precio{
  margin:0 0 16px; font-family:var(--mono); font-size:1.12rem;
  font-weight:600; color:var(--lima);
}
.cuota{
  display:grid; grid-template-columns:1fr 1fr; gap:1px; margin:0 0 18px;
  background:var(--line); border:1px solid var(--line); border-radius:14px; overflow:hidden;
}
.cuota div{background:rgba(194,242,74,.045); padding:12px 13px}
.cuota dt{margin:0 0 3px; font-size:.68rem; letter-spacing:.09em; text-transform:uppercase; color:var(--mut2)}
.cuota dd{margin:0; font-family:var(--mono); font-size:.95rem; font-weight:500; color:var(--ink)}
.cuota p{
  grid-column:1 / -1; margin:0; padding:9px 13px; background:var(--bg2);
  font-size:.72rem; color:var(--mut2); line-height:1.45;
}

/* --- la chincheta de nuestra oficina se distingue --- */
.pin.nuestro .pin-caja{border-color:rgba(194,242,74,.55)}
.pin.nuestro .pin-eur{color:var(--mut2)}

/* --- modo sala de ventas: fuera todo lo que no sea la ciudad --- */
body.sala .barra,
body.sala .filtros,
body.sala .mandos,
body.sala .horas,
body.sala .pista{opacity:0; pointer-events:none}
body.sala .brujula{opacity:0}
.barra,.filtros,.pista{transition:opacity .4s ease}

@media (max-width:880px){
  .brujula{width:44px; height:44px; top:auto; bottom:calc(74px + var(--abajo)); right:13px}
  .aguja i{top:7px; border-bottom-width:13px}
  .aguja::after{bottom:7px; border-top-width:13px}
  .horas{right:13px; left:13px; bottom:calc(13px + var(--abajo)); max-width:none; justify-content:center}
  .chip-hora{font-size:.74rem; padding:6px 11px}
  .mandos{bottom:calc(52px + var(--abajo))}
  body.con-ficha .horas,
  body.con-ficha .brujula{opacity:0; pointer-events:none}
  .horas,.brujula{transition:opacity .25s ease}
}

/* --- empotrada: hasta que no la pulsas, el gesto es de la pagina --------
   Sin esto, quien baja por la pagina llega al 3D y se queda atrapado: la
   rueda y el dedo se los queda la maqueta y no puede seguir bajando. */
#lienzo{touch-action:auto}
body.tomado #lienzo{touch-action:none}

.tomar{
  position:fixed; inset:0; z-index:38; width:100%; height:100%;
  display:grid; place-items:center; cursor:pointer;
  background:linear-gradient(180deg,rgba(14,16,19,0) 55%,rgba(14,16,19,.3));
  border:0; font:inherit; color:var(--ink);
  transition:background .25s ease;
}
.tomar:hover{background:linear-gradient(180deg,rgba(14,16,19,.06) 45%,rgba(14,16,19,.38))}
.tomar-txt{
  display:inline-flex; align-items:center; gap:10px;
  background:rgba(14,16,19,.8); border:1px solid rgba(194,242,74,.5);
  border-radius:999px; padding:13px 24px; font-size:.92rem; font-weight:700;
  backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  box-shadow:0 16px 40px rgba(0,0,0,.45);
  transition:transform .22s ease;
}
.tomar-txt::before{
  content:""; width:9px; height:9px; border-radius:50%; background:var(--lima);
  box-shadow:0 0 12px var(--lima);
}
.tomar:hover .tomar-txt{transform:translateY(-2px) scale(1.02)}

.soltar{
  position:fixed; z-index:39; right:16px; top:calc(16px + var(--arriba));
  background:rgba(14,16,19,.8); color:var(--mut); border:1px solid var(--line);
  font-family:inherit; font-size:.78rem; font-weight:600;
  padding:7px 14px; border-radius:999px; cursor:pointer;
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
}
.soltar:hover{color:var(--ink)}
.soltar[hidden],.tomar[hidden]{display:none}

/* --- movil: diez nombres no caben en 375 px. Se deja el icono y el precio,
       y el nombre vuelve en cuanto se abre una ficha. --- */
@media (max-width:880px){
  body.carteles-cortos .pin:not(.sel) .pin-txt{display:none}
  body.carteles-cortos .pin:not(.sel) .pin-eur{font-size:.7rem}
  body.carteles-cortos .pin:not(.sel) .pin-caja{padding:6px 10px 6px 8px; gap:6px}
}

/* --- acciones de la ficha: compartir, PDF y foto --- */
.acciones{display:grid; grid-template-columns:repeat(3,1fr); gap:7px; margin-top:9px}
.acciones button{
  display:flex; align-items:center; justify-content:center; gap:6px;
  background:var(--surf); color:var(--mut); border:1px solid var(--line);
  font-family:inherit; font-size:.76rem; font-weight:600;
  padding:9px 6px; border-radius:11px; cursor:pointer;
  transition:color .18s ease, border-color .18s ease, background .18s ease;
}
.acciones button:hover{color:var(--ink); background:var(--surf2); border-color:var(--line2)}
.acciones svg{flex:0 0 auto}

/* --- un activo vendido o reservado se apaga en el cartel --- */
.pin.vendido .pin-caja{border-left-color:var(--mut2)}
.pin.vendido .pin-eur{color:var(--mut2); text-decoration:line-through; text-decoration-thickness:1px}
.pin.vendido .pin-punta{background:var(--mut2); box-shadow:0 0 0 3px rgba(134,141,149,.18)}

/* --- aviso corto (enlace copiado, foto guardada) --- */
.aviso-corto{
  position:fixed; z-index:45; left:50%; bottom:calc(84px + var(--abajo));
  transform:translateX(-50%) translateY(10px);
  background:rgba(14,16,19,.92); color:var(--ink);
  border:1px solid rgba(194,242,74,.4); border-radius:999px;
  padding:10px 20px; font-size:.84rem; font-weight:600;
  backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  box-shadow:0 14px 34px rgba(0,0,0,.45);
  opacity:0; pointer-events:none; max-width:86vw;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  transition:opacity .25s ease, transform .25s ease;
}
.aviso-corto.visible{opacity:1; transform:translateX(-50%) translateY(0)}

@media (max-width:880px){
  .acciones button{font-size:.72rem; padding:9px 4px; gap:4px}
}

/* --- carteles apagados: quedan los puntos, que siguen siendo pulsables --- */
body.sin-carteles .pin:not(.sel) .pin-caja{
  opacity:0; transform:scale(.9); pointer-events:none;
}
body.sin-carteles .pin:not(.sel) .pin-pata{opacity:0}
body.sin-carteles .pin:not(.sel):hover .pin-caja{opacity:1; transform:none; pointer-events:auto}
body.sin-carteles .pin:not(.sel):hover .pin-pata{opacity:1}
body.sin-carteles .pin-punta{width:11px; height:11px; margin-top:0}
.pin-caja{transition:border-color .18s ease, background .18s ease, transform .18s ease, opacity .18s ease}
.pin-pata{transition:opacity .18s ease}

/* --- el boton de soltar pisaba el de "Quiero la mía" --- */
.soltar{top:auto; bottom:auto; right:16px; top:calc(112px + var(--arriba))}
.brujula{top:calc(162px + var(--arriba))}
@media (max-width:880px){
  .soltar{right:13px; top:calc(104px + var(--arriba))}
  .brujula{top:auto}
}

/* ======================================================= MODO INTERIOR ==
   Dentro de una vivienda sobran los carteles, los filtros y la brujula: solo
   queda el sol, el titulo de lo que estas viendo y la salida. */
.en-interior #capaPins,
.en-interior .filtros,
.en-interior .brujula,
.en-interior .mandos,
.en-interior .pista{opacity:0; pointer-events:none; visibility:hidden}

.dentro-barra{
  position:fixed; z-index:40; left:14px; right:14px; bottom:calc(14px + var(--abajo));
  display:flex; align-items:flex-end; gap:18px; justify-content:space-between;
  padding:16px 18px; border-radius:var(--r);
  background:rgba(14,16,19,.76); border:1px solid var(--line);
  backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  box-shadow:0 20px 50px rgba(0,0,0,.42);
  animation:sube .34s cubic-bezier(.2,.8,.3,1);
}
.dentro-barra[hidden]{display:none}
@keyframes sube{from{opacity:0; transform:translateY(14px)}to{opacity:1; transform:none}}
.dentro-txt{min-width:0; max-width:62ch}
.dentro-txt h2{
  margin:4px 0 5px; font-family:var(--serif); font-weight:600;
  font-size:1.3rem; line-height:1.2; letter-spacing:-.02em;
}
.dentro-txt p{margin:0; color:var(--mut); font-size:.86rem; line-height:1.5}
.dentro-bot{display:flex; align-items:center; gap:9px; flex:0 0 auto}

/* el boton de entrar, dentro de la ficha */
.btn-dentro{
  display:flex; align-items:center; gap:12px; width:100%; margin:4px 0 18px;
  padding:13px 15px; border-radius:16px; cursor:pointer; text-align:left;
  color:var(--ink); font:inherit; font-size:.88rem;
  background:linear-gradient(135deg,rgba(194,242,74,.14),rgba(194,242,74,.05));
  border:1px solid rgba(194,242,74,.3);
  transition:border-color .18s ease, transform .18s ease, background .18s ease;
}
.btn-dentro:hover{border-color:rgba(194,242,74,.62); transform:translateY(-1px)}
.btn-dentro svg{flex:0 0 auto; color:var(--lima)}
.btn-dentro span{display:block; min-width:0; line-height:1.35; color:var(--mut); font-size:.79rem}
.btn-dentro b{display:block; margin-bottom:1px; color:var(--ink); font-size:.95rem}
.btn-dentro .fl{margin-left:auto; color:var(--lima); font-style:normal; font-size:1.1rem}

/* ====================================================== BIENVENIDA ==
   El primero que llega no sabe que esto se toca. Tres pasos y fuera. */
.bienve .hoja-in{width:min(560px,100%); text-align:left}
.bienve h2{font-size:1.52rem}
.bienve-pasos{display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin:20px 0 22px}
.bienve-pasos>div{
  padding:14px 14px 15px; border-radius:16px;
  background:var(--surf); border:1px solid var(--line);
}
.bienve-pasos span{
  display:grid; place-items:center; width:25px; height:25px; margin-bottom:9px;
  border-radius:8px; background:var(--lima); color:#0e1013;
  font-size:.78rem; font-weight:800;
}
.bienve-pasos b{display:block; font-size:.88rem; margin-bottom:3px}
.bienve-pasos p{margin:0; color:var(--mut); font-size:.78rem; line-height:1.45}
.bienve-pie{margin:14px 0 0 !important; font-size:.76rem !important; color:var(--mut2) !important}

@media (max-width:880px){
  .dentro-barra{
    flex-direction:column; align-items:stretch; gap:12px;
    left:10px; right:10px; bottom:calc(10px + var(--abajo)); padding:14px;
  }
  .dentro-txt h2{font-size:1.1rem}
  .dentro-txt p{font-size:.8rem}
  .dentro-bot{justify-content:space-between}
  .dentro-bot .btn-lima{flex:1; text-align:center}
  .bienve-pasos{grid-template-columns:1fr; gap:8px}
  .bienve-pasos>div{display:grid; grid-template-columns:25px 1fr; gap:4px 12px; align-items:center}
  .bienve-pasos span{margin:0; grid-row:span 2}
  .bienve-pasos b{align-self:end}
  .bienve-pasos p{align-self:start}
  .bienve h2{font-size:1.3rem}
}

/* ========================================================= EL RELOJ DEL SOL
   Cuatro botones no cuentan que a las 18:30 da el sol en la terraza y a las
   19:30 ya no, y eso es justo lo que decide una compra por orientacion. */
.sol{
  position:fixed; z-index:30; right:16px; bottom:calc(16px + var(--abajo));
  display:flex; flex-direction:column; align-items:flex-end; gap:8px; max-width:52vw;
}
.sol .horas{position:static; max-width:none}
.reloj{
  display:flex; align-items:center; gap:10px; padding:8px 14px 8px 12px;
  border-radius:99px; background:rgba(14,16,19,.72); border:1px solid var(--line);
  backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); color:var(--mut);
}
.reloj svg{flex:0 0 auto; color:var(--lima)}
.reloj span{
  min-width:4.2ch; font-family:var(--mono); font-size:.82rem;
  font-variant-numeric:tabular-nums; color:var(--ink);
}
.reloj input[type=range]{
  -webkit-appearance:none; appearance:none; width:188px; height:4px; margin:0;
  border-radius:99px; background:linear-gradient(90deg,#4a5a6b,var(--lima)); cursor:pointer;
}
.reloj input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none; width:16px; height:16px; border-radius:50%;
  background:var(--lima); border:2px solid #0e1013; cursor:grab;
  box-shadow:0 2px 8px rgba(0,0,0,.5);
}
.reloj input[type=range]::-moz-range-thumb{
  width:14px; height:14px; border-radius:50%; background:var(--lima);
  border:2px solid #0e1013; cursor:grab;
}
.reloj input[type=range]:focus-visible{outline:2px solid var(--lima); outline-offset:4px}
.en-interior .sol{opacity:1}
@media (max-width:880px){
  .sol{left:10px; right:10px; max-width:none; align-items:stretch}
  .reloj{justify-content:space-between}
  .reloj input[type=range]{flex:1; width:auto}
  .sol .horas{justify-content:space-between}
}

/* ===================================================== LA CHAPA EN LA MAQUETA
   Diez tarjetas con nombre y precio flotando se pisan entre ellas y tapan el
   edificio que vienes a ver. Una chapa con el numero no tapa nada, y el
   nombre sale al pasar por encima o al abrirla. */
.pin-chapa{
  display:grid; place-items:center; width:30px; height:30px;
  border-radius:50%; background:#11151a; color:var(--ink);
  border:1.5px solid var(--line2);
  font-family:var(--mono); font-size:.72rem; font-weight:600;
  font-variant-numeric:tabular-nums;
  box-shadow:0 6px 18px rgba(0,0,0,.5);
  transition:background .16s ease, border-color .16s ease, transform .16s ease, color .16s ease;
}
.pin:hover .pin-chapa{border-color:var(--lima); transform:scale(1.08)}
.pin.sel .pin-chapa{
  background:var(--lima); color:#0e1013; border-color:var(--lima);
  box-shadow:0 6px 20px rgba(194,242,74,.4);
}
.pin.nuestro .pin-chapa{border-style:dashed}

/* el nombre, solo cuando hace falta */
.pin-globo{
  position:absolute; left:50%; bottom:calc(100% + 7px); transform:translateX(-50%);
  display:flex; flex-direction:column; align-items:center; gap:1px;
  padding:6px 11px; border-radius:10px; white-space:nowrap;
  background:#11151a; border:1px solid var(--line2);
  box-shadow:0 10px 26px rgba(0,0,0,.5);
  opacity:0; visibility:hidden; transition:opacity .16s ease, visibility .16s;
}
.pin-globo b{font-size:.76rem; font-weight:700; color:var(--ink)}
.pin-globo i{font-family:var(--mono); font-style:normal; font-size:.66rem; color:var(--lima)}
.pin:hover .pin-globo,.pin.sel .pin-globo{opacity:1; visibility:visible}
.pin.sel{z-index:3}

/* ========================================================= LA LISTA
   Aqui es donde se lee: nombre, lo que es, dos datos y el precio. */
.lista-cab{padding:24px 24px 16px}
.lista-cab h2{
  margin:8px 0 7px; font-family:var(--serif); font-weight:600;
  font-size:1.42rem; line-height:1.16; letter-spacing:-.02em;
}
.lista-cab p{margin:0; color:var(--mut); font-size:.85rem; line-height:1.5}
.lista-activos{list-style:none; margin:0; padding:0 12px 16px}
.fila{
  display:grid; grid-template-columns:84px 1fr auto; grid-template-areas:'foto tx eur';
  gap:12px; align-items:center;
  width:100%; padding:12px; border-radius:14px; cursor:pointer; text-align:left;
  background:transparent; border:1px solid transparent; color:var(--ink); font:inherit;
  transition:background .16s ease, border-color .16s ease;
}
.fila:hover{background:var(--surf); border-color:var(--line)}
.fila.sel{background:rgba(194,242,74,.09); border-color:rgba(194,242,74,.34)}
.fl-foto{
  grid-area:foto; width:84px; height:63px; object-fit:cover; display:block;
  border-radius:10px; background:#1a1e24; border:1px solid var(--line);
}
.fl-num{
  grid-area:foto; align-self:start; justify-self:start; margin:4px 0 0 4px;
  display:grid; place-items:center; width:21px; height:21px; border-radius:50%;
  background:rgba(10,12,15,.78); border:1px solid var(--line2);
  font-family:var(--mono); font-size:.62rem; color:var(--ink);
  font-variant-numeric:tabular-nums;
}
.fila.sel .fl-num{background:var(--lima); color:#0e1013; border-color:var(--lima)}
.fl-tx{grid-area:tx; display:flex; flex-direction:column; gap:2px; min-width:0}
.fl-tx b{font-size:.88rem; font-weight:700; line-height:1.25; letter-spacing:-.01em}
.fl-tx i{
  font-style:normal; font-size:.76rem; color:var(--mut); line-height:1.35;
  overflow:hidden; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
}
.fl-tx em{font-style:normal; font-size:.7rem; color:var(--mut2); font-family:var(--mono)}
.fl-eur{
  grid-area:eur; display:flex; flex-direction:column; align-items:flex-end; gap:4px;
  font-family:var(--mono); font-size:.76rem; font-weight:600; color:var(--lima);
  white-space:nowrap; text-align:right;
}
.fl-eur u{
  text-decoration:none; font-family:var(--f); font-size:.64rem; font-weight:700;
  letter-spacing:.04em; text-transform:uppercase; color:var(--mut2);
}
.fl-eur u.caliente{color:#9ac93a}

.volver{
  display:inline-flex; align-items:center; gap:6px; margin:18px 0 0 18px;
  padding:7px 13px 7px 10px; border-radius:99px; cursor:pointer;
  background:var(--surf); border:1px solid var(--line); color:var(--mut);
  font:inherit; font-size:.78rem; font-weight:600;
  transition:color .16s ease, border-color .16s ease;
}
.volver:hover{color:var(--ink); border-color:var(--line2)}
.vista-ficha .panel-cuerpo{padding-top:14px}

.solo-movil{display:none}
@media (max-width:880px){
  .solo-movil{display:inline-flex}
  .lista-cab{padding:20px 20px 12px}
  .lista-cab h2{font-size:1.2rem}
  .volver{margin:14px 0 0 14px}
}

/* ================================================== LA BARRA DE ABAJO
   El sol, los filtros y las acciones en una sola tira abajo a la izquierda.
   Repartidos por las cuatro esquinas no se encontraban y cada uno tapaba un
   trozo distinto de la maqueta. */
.barra-baja{
  position:fixed; z-index:30;
  left:16px; bottom:calc(16px + var(--abajo));
  right:calc(420px + 32px);
  display:flex; flex-direction:column; align-items:flex-start; gap:9px;
  pointer-events:none;
}
body:not(.con-panel) .barra-baja{right:16px}
.barra-baja>*,.barra-baja .baja-fila>*{pointer-events:auto}
.baja-fila{display:flex; flex-wrap:wrap; align-items:center; gap:9px}
.barra-baja .sol{position:static; max-width:none; flex-direction:row; align-items:center; gap:9px}
.barra-baja .filtros{position:static; background:none; border:0; padding:0; backdrop-filter:none}
.barra-baja .filtros-in{padding:0; overflow:visible; display:flex; flex-wrap:wrap; gap:6px;
  width:auto; min-width:0; max-width:100%}
.barra-baja .mandos{position:static; flex-direction:row; flex-wrap:wrap; gap:7px}
.barra-baja .horas{position:static; max-width:none}

@media (max-width:880px){
  .barra-baja{
    left:10px; right:10px; bottom:calc(10px + var(--abajo));
    gap:7px;
  }
  body.con-panel .barra-baja{display:none}
  .barra-baja .sol{flex-direction:column; align-items:stretch; width:100%}
  .baja-fila{gap:6px}
  .barra-baja .filtros-in,.barra-baja .mandos{flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none}
  .barra-baja .filtros-in::-webkit-scrollbar,.barra-baja .mandos::-webkit-scrollbar{display:none}
}

/* ============================================ FAVORITOS Y COMPARADOR
   Lo que guarda el visitante vive en su navegador, no en un servidor: no hay
   cuentas y no hace falta pedirle nada. */
.lista-mandos{display:flex; flex-wrap:wrap; gap:7px; margin-top:14px}
.chip-lista{
  display:inline-flex; align-items:center; gap:6px;
  padding:6px 13px; border-radius:99px; cursor:pointer;
  background:var(--surf); border:1px solid var(--line); color:var(--mut);
  font:inherit; font-size:.76rem; font-weight:600;
  transition:color .16s ease, border-color .16s ease, background .16s ease;
}
.chip-lista:hover{color:var(--ink); border-color:var(--line2)}
.chip-lista[aria-pressed="true"]{
  color:var(--lima); border-color:rgba(194,242,74,.42); background:rgba(194,242,74,.1);
}
.chip-lista[aria-pressed="true"] svg{fill:var(--lima); stroke:var(--lima)}
.chip-lista[hidden]{display:none}

.fila{position:relative}
.fl-fav{
  position:absolute; right:10px; top:9px; display:grid; place-items:center;
  width:26px; height:26px; border-radius:50%; cursor:pointer; color:var(--mut2);
  transition:color .16s ease, background .16s ease;
}
.fl-fav:hover{color:var(--ink); background:var(--surf2)}
.fl-fav.on{color:var(--lima)}
.fl-fav.on svg{fill:var(--lima)}
.fl-fav:focus-visible{outline:2px solid var(--lima); outline-offset:2px}
.fl-eur{padding-right:26px}

.hoja-in.ancha{width:min(980px,100%)}
.tabla-comp{overflow:auto; margin-top:16px; border-radius:14px; border:1px solid var(--line)}
.tabla-comp table{border-collapse:collapse; width:100%; font-size:.84rem}
.tabla-comp th,.tabla-comp td{
  padding:11px 14px; text-align:left; border-bottom:1px solid var(--line);
  vertical-align:top; white-space:nowrap;
}
.tabla-comp thead th{background:var(--surf); vertical-align:bottom; white-space:normal; min-width:150px}
.tabla-comp thead img{
  display:block; width:100%; max-width:170px; height:112px; object-fit:cover;
  border-radius:9px; margin-bottom:8px; background:#1a1e24;
}
.tabla-comp thead b{font-size:.88rem; line-height:1.25}
.tabla-comp tbody th{
  color:var(--mut); font-weight:600; background:var(--surf);
  position:sticky; left:0; z-index:1;
}
.tabla-comp tbody td{font-family:var(--mono); font-size:.8rem}
.tabla-comp tr.eur td{color:var(--lima); font-weight:600}
.tabla-comp i{color:var(--mut2); font-style:normal}
.tabla-comp tr:last-child th,.tabla-comp tr:last-child td{border-bottom:0}

@media (max-width:880px){
  .hoja-in.ancha{width:100%}
  .tabla-comp thead th{min-width:124px}
  .tabla-comp th,.tabla-comp td{padding:9px 11px; font-size:.78rem}
}

/* ================================================= ACABADOS DEL INTERIOR
   Cuatro estilos, como el configurador de una promocion. */
.dentro-acabados{display:flex; flex-wrap:wrap; gap:6px; align-items:center}
.acabado{
  display:inline-flex; align-items:center; gap:7px;
  padding:6px 12px 6px 7px; border-radius:99px; cursor:pointer;
  background:var(--surf); border:1px solid var(--line); color:var(--mut);
  font:inherit; font-size:.76rem; font-weight:600;
  transition:color .16s ease, border-color .16s ease, background .16s ease;
}
.acabado i{
  width:15px; height:15px; border-radius:50%; flex:0 0 auto;
  border:1px solid rgba(255,255,255,.22);
}
.acabado:hover{color:var(--ink); border-color:var(--line2)}
.acabado[aria-pressed="true"]{
  color:var(--ink); border-color:rgba(194,242,74,.5); background:rgba(194,242,74,.1);
}
.dentro-barra{align-items:center}
.dentro-txt{flex:1 1 auto}
@media (max-width:880px){
  .dentro-acabados{width:100%; overflow-x:auto; flex-wrap:nowrap; scrollbar-width:none}
  .dentro-acabados::-webkit-scrollbar{display:none}
}

/* Dentro de un interior la barra de abajo se queda SOLO con el sol (la hora
   sigue valiendo: se ve entrar la luz por el ventanal) y sube por encima de
   la barra de la vivienda, que si no se montaban una sobre otra. */
.en-interior .barra-baja{bottom:calc(152px + var(--abajo))}
.en-interior .baja-fila{display:none}
@media (max-width:880px){
  .en-interior .barra-baja{display:flex; bottom:calc(214px + var(--abajo))}
}
