.ovlv{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:18px;align-items:start}.ovlv-map-wrap{position:relative;overflow:hidden;background:#f4f4f4;border-radius:14px;min-height:520px;touch-action:none;cursor:grab}.ovlv-map-wrap:active{cursor:grabbing}.ovlv-pan-stage{position:relative;transform-origin:0 0;will-change:transform;min-width:100%;line-height:0}.ovlv-map-img{width:100%;display:block;user-select:none;-webkit-user-drag:none}.ovlv-svg{position:absolute;inset:0;width:100%;height:100%;z-index:2}.ovlv-lot{stroke:transparent;stroke-width:0;cursor:pointer;transition:.2s}.ovlv-lot.available{fill:var(--ovlv-available-color,#2bb4ff);fill-opacity:var(--ovlv-available-opacity,.35)}.ovlv-lot.reserved{fill:var(--ovlv-reserved-color,#1abe50);fill-opacity:var(--ovlv-reserved-opacity,.45)}.ovlv-lot.sold{fill:var(--ovlv-sold-color,#ff8800);fill-opacity:var(--ovlv-sold-opacity,.58)}.ovlv-lot.blocked{fill:var(--ovlv-blocked-color,#787878);fill-opacity:var(--ovlv-blocked-opacity,.45)}.ovlv-lot:hover{filter:brightness(1.12) drop-shadow(0 0 2px rgba(0,0,0,.25))}.ovlv-public-controls{position:absolute;top:14px;left:14px;z-index:5;display:flex;gap:7px;background:rgba(255,255,255,.92);border-radius:12px;padding:7px;box-shadow:0 4px 18px rgba(0,0,0,.14)}.ovlv-public-controls button{border:0;background:#234a34;color:#fff;border-radius:8px;min-width:36px;height:36px;font-size:18px;font-weight:700;cursor:pointer}.ovlv-public-controls .ovlv-zoom-reset{font-size:13px;padding:0 12px;background:#e8f2ea;color:#234a34}.ovlv-legend{position:absolute;left:50%;bottom:15px;transform:translateX(-50%);background:#fff;border-radius:10px;padding:9px 14px;box-shadow:0 4px 18px rgba(0,0,0,.14);z-index:3;font-size:14px;white-space:nowrap}.ovlv-legend span{display:inline-block;width:10px;height:10px;border-radius:50%;margin:0 5px 0 12px}.ovlv-legend .available{background:var(--ovlv-available-color,#2bb4ff)}.ovlv-legend .reserved{background:var(--ovlv-reserved-color,#1abe50)}.ovlv-legend .sold{background:var(--ovlv-sold-color,#ff8800)}.ovlv-legend .blocked{background:var(--ovlv-blocked-color,#888)}.ovlv-panel{background:#fff;border-radius:18px;padding:24px;box-shadow:0 6px 24px rgba(0,0,0,.12);position:sticky;top:20px;opacity:0;transform:translateY(14px) scale(.98);pointer-events:none;transition:opacity .22s ease,transform .22s ease}.ovlv.panel-open .ovlv-panel{opacity:1;transform:translateY(0) scale(1);pointer-events:auto}.ovlv.panel-hidden .ovlv-panel{display:none}.ovlv-close{float:right;border:0;background:#edf0f3;border-radius:50%;font-size:24px;width:38px;height:38px;cursor:pointer;line-height:1}.ovlv-panel h2{margin:0 0 12px;color:#173c64;font-size:28px}.ovlv-panel h3{margin:0 0 15px}.ovlv-status{display:inline-block;padding:8px 12px;border-radius:9px;margin-bottom:12px}.ovlv-status.available{background:rgba(43,180,255,.18);color:#087fc0}.ovlv-status.reserved{background:rgba(26,190,80,.15);color:#13843c}.ovlv-status.sold{background:rgba(255,136,0,.18);color:#ad5d00}.ovlv-status.blocked{background:#eee;color:#666}.ovlv-info-list{margin:8px 0 22px;border-top:1px solid #e7e7e7}.ovlv-info-row{display:flex;justify-content:space-between;gap:16px;align-items:center;border-bottom:1px solid #e7e7e7;padding:13px 0}.ovlv-info-row span{color:#6b7280}.ovlv-info-row strong{text-align:right;color:#1f2937}.ovlv-wa{display:flex;align-items:center;justify-content:center;gap:9px;text-align:center;background:#05c65c;color:#fff!important;padding:13px;border-radius:24px;text-decoration:none;font-weight:700}.ovlv-wa-icon{width:22px;height:22px;flex:0 0 22px}@media(max-width:900px){.ovlv{display:block}.ovlv-map-wrap{min-height:72vh;border-radius:10px}.ovlv-panel{display:none;position:fixed;left:10px;right:10px;bottom:10px;top:auto;z-index:9999;max-height:70vh;overflow:auto}.ovlv.panel-open .ovlv-panel{display:block;opacity:1;transform:translateY(0) scale(1);pointer-events:auto}.ovlv.panel-hidden .ovlv-panel{display:none}.ovlv-legend{font-size:12px;max-width:92%;overflow:auto}.ovlv-public-controls{top:10px;left:10px}.ovlv-public-controls button{height:34px;min-width:34px}.ovlv-public-controls .ovlv-zoom-reset{font-size:12px}}
/* v1.0.7: promoción destacada y cabecera corregida */
.ovlv-panel h3{font-size:26px;color:#0f3d1f;font-weight:800;margin:4px 0 14px;}
.ovlv-promo{margin:8px 0 14px;padding:12px 14px;border-radius:14px;background:linear-gradient(135deg,rgba(35,74,52,.10),rgba(193,222,79,.22));color:#234a34;font-weight:800;line-height:1.25;border:1px solid rgba(35,74,52,.12)}
.ovlv-info-list{border-top:1px solid #e5e7eb;border-bottom:0;}
.ovlv-info-row{border-bottom:1px solid #e5e7eb;padding:14px 0;background:transparent;}


/* v1.0.8: identidad visual, promo dorada y nota de precio */
.ovlv-panel h2{
  color:#234a34 !important;
  font-weight:800;
}
.ovlv-panel h3{
  color:#0b3d24 !important;
  font-weight:900;
}
.ovlv-promo{
  background:linear-gradient(135deg, rgba(245,207,91,.38), rgba(255,244,186,.72), rgba(193,146,42,.28)) !important;
  border:1px solid rgba(184,134,11,.35) !important;
  color:#4b3510 !important;
  box-shadow:0 8px 22px rgba(184,134,11,.16);
}
.ovlv-price-note{
  margin:10px 0 20px;
  font-size:13px;
  line-height:1.35;
  color:#6b7280;
  font-style:italic;
}
.ovlv-price-note strong{color:#234a34;}
@media(max-width:900px){
  .ovlv-map-wrap{touch-action:none;overscroll-behavior:contain;}
}


/* v1.0.9: móvil con scroll natural, promo más dorada y mapa más limpio */
.ovlv-map-wrap{
  background:#fff !important;
  border:0 !important;
  border-radius:22px !important;
  box-shadow:none !important;
}
.ovlv-pan-stage{
  background:#fff !important;
}
.ovlv-map-img{
  border-radius:0 !important;
}
.ovlv-promo{
  background:linear-gradient(135deg,#fff4bf 0%,#f4c542 42%,#d59b1f 72%,#fff1a6 100%) !important;
  border:1px solid rgba(165,114,10,.65) !important;
  color:#3b2a05 !important;
  box-shadow:0 10px 24px rgba(190,135,20,.30), inset 0 1px 0 rgba(255,255,255,.55) !important;
}
@media(max-width:900px){
  .ovlv-map-wrap{
    touch-action:pan-y !important;
    overscroll-behavior:auto !important;
    border-radius:14px !important;
    min-height:72vh;
  }
  .ovlv-public-controls{
    border-radius:12px;
  }
}

/* v1.0.10: carga en tamaño nativo para evitar pixelación por transform sobre imagen reducida */
.ovlv-pan-stage{
  max-width:none !important;
  min-width:0 !important;
  transform-origin:0 0 !important;
}
.ovlv-map-img{
  max-width:none !important;
  object-fit:fill !important;
  image-rendering:auto !important;
}
.ovlv-svg{
  max-width:none !important;
}


/* v1.0.11: corrige sección rota al usar imagen nativa de alta resolución */
.ovlv-map-wrap{
  height:min(78vh,760px) !important;
  min-height:520px !important;
  overflow:hidden !important;
  position:relative !important;
}
.ovlv-pan-stage{
  position:absolute !important;
  left:0 !important;
  top:0 !important;
  max-width:none !important;
  min-width:0 !important;
  line-height:0 !important;
}
.ovlv-map-img{
  display:block !important;
  width:100% !important;
  height:100% !important;
}
.ovlv-svg{
  position:absolute !important;
  inset:0 !important;
  width:100% !important;
  height:100% !important;
}
@media(max-width:900px){
  .ovlv-map-wrap{
    height:68vh !important;
    min-height:460px !important;
    max-height:720px !important;
  }
}
@media(max-width:480px){
  .ovlv-map-wrap{
    height:62vh !important;
    min-height:430px !important;
  }
}


/* v1.0.12: controles abajo izquierda y arrastre PC más cómodo */
.ovlv-public-controls{
  top:auto !important;
  left:18px !important;
  bottom:18px !important;
  z-index:8 !important;
}
.ovlv-map-wrap{ cursor:grab; }
.ovlv-map-wrap:active{ cursor:grabbing; }
@media(max-width:900px){
  .ovlv-public-controls{
    top:auto !important;
    left:12px !important;
    bottom:12px !important;
  }
}


/* v1.0.13: repara apertura de detalles en PC y mueve controles al costado izquierdo */
.ovlv-public-controls{
  top:50% !important;
  bottom:auto !important;
  left:14px !important;
  transform:translateY(-50%) !important;
  flex-direction:column !important;
  align-items:stretch !important;
  gap:7px !important;
  padding:8px !important;
}
.ovlv-public-controls button{
  min-width:38px !important;
  width:38px !important;
  height:38px !important;
  padding:0 !important;
}
.ovlv-public-controls .ovlv-zoom-reset{
  width:auto !important;
  min-width:38px !important;
  height:auto !important;
  padding:8px 7px !important;
  writing-mode:vertical-rl;
  text-orientation:mixed;
  line-height:1;
}
@media(max-width:900px){
  .ovlv-public-controls{
    top:50% !important;
    bottom:auto !important;
    left:8px !important;
    transform:translateY(-50%) !important;
  }
  .ovlv-public-controls button{
    min-width:34px !important;
    width:34px !important;
    height:34px !important;
  }
  .ovlv-public-controls .ovlv-zoom-reset{
    padding:7px 6px !important;
    font-size:11px !important;
  }
}

/* v1.0.15: promo administrable y advertencia configurable */
.ovlv-promo strong{display:block;font-size:13px;text-transform:uppercase;letter-spacing:.04em;margin-bottom:3px;color:#2d1b00;}
.ovlv-promo span{display:block;}
.ovlv-price-note{border-top:1px solid #eef0f2;padding-top:10px;}


/* v1.0.16: restablecer zoom sin salto visual */
.ovlv-pan-stage{ backface-visibility:hidden; }
.ovlv-public-controls{ user-select:none; -webkit-user-select:none; }
.ovlv-public-controls button{ touch-action:manipulation; }


/* v1.0.18: zoom-out estable sin reset recursivo */
.ovlv-pan-stage{ transform-origin:0 0 !important; }


/* v1.0.19: motor de zoom estable para evitar bloques blancos al reducir */
.ovlv-map-wrap{ background:#fff !important; isolation:isolate; }
.ovlv-pan-stage{
  transform-origin:0 0 !important;
  will-change:transform !important;
  backface-visibility:hidden !important;
  -webkit-backface-visibility:hidden !important;
  contain:layout paint;
}
.ovlv-map-img{
  background:#fff !important;
  transform:translateZ(0);
  -webkit-transform:translateZ(0);
}


/* v1.0.20: estabiliza render del mapa al reducir zoom (evita cuadros blancos por GPU/compositing) */
.ovlv-pan-stage{
  transform-origin:0 0 !important;
  will-change:auto !important;
  backface-visibility:visible !important;
  -webkit-backface-visibility:visible !important;
  contain:none !important;
  overflow:visible !important;
}
.ovlv-map-img{
  transform:none !important;
  -webkit-transform:none !important;
  backface-visibility:visible !important;
  -webkit-backface-visibility:visible !important;
  will-change:auto !important;
}
.ovlv-svg{
  overflow:visible !important;
  contain:none !important;
}
