/* CODE BY JYF */
/* =========================================================
   地图：Leaflet 必需样式（按 Leaflet 1.9 官方样式精简改写，BSD-2 许可）+ 房源地图界面
   ========================================================= */
.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}
.leaflet-container{overflow:hidden;-webkit-tap-highlight-color:transparent;font:12px/1.5 var(--font);outline-offset:1px}
.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{user-select:none;-webkit-user-drag:none}
.leaflet-tile::selection{background:transparent}
.leaflet-container img.leaflet-tile,.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer{max-width:none!important;max-height:none!important;width:auto;padding:0}
.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}
.leaflet-container.leaflet-touch-zoom{touch-action:pan-x pan-y}
.leaflet-container.leaflet-touch-drag{touch-action:none}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{touch-action:none}
.leaflet-tile{filter:inherit;visibility:hidden}
.leaflet-tile-loaded{visibility:inherit}
.leaflet-zoom-box{width:0;height:0;box-sizing:border-box;z-index:800}
.leaflet-pane{z-index:400}
.leaflet-tile-pane{z-index:200}
.leaflet-overlay-pane{z-index:400}
.leaflet-shadow-pane{z-index:500}
.leaflet-marker-pane{z-index:600}
.leaflet-tooltip-pane{z-index:650}
.leaflet-popup-pane{z-index:700}
.leaflet-map-pane canvas{z-index:100}
.leaflet-map-pane svg{z-index:200}
.leaflet-control{position:relative;z-index:800;pointer-events:auto}
.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}
.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}
.leaflet-control{float:left;clear:both}
.leaflet-right .leaflet-control{float:right;margin-right:10px}
.leaflet-top .leaflet-control{margin-top:10px}
.leaflet-bottom .leaflet-control{margin-bottom:10px}
.leaflet-left .leaflet-control{margin-left:10px}
.leaflet-fade-anim .leaflet-popup{opacity:0;transition:opacity .2s linear}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}
.leaflet-zoom-animated{transform-origin:0 0}
svg.leaflet-zoom-animated{will-change:transform}
.leaflet-zoom-anim .leaflet-zoom-animated{transition:transform .25s cubic-bezier(0,0,.25,1)}
.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{transition:none}
.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}
.leaflet-interactive{cursor:pointer}
.leaflet-grab{cursor:grab}
.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:grabbing}
.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}
.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive{pointer-events:auto}
.leaflet-container{background:var(--map-bg)}
.leaflet-container a{color:var(--accent)}
.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.35);border-radius:6px}
.leaflet-bar a{background:var(--surface);border-bottom:1px solid var(--line);width:32px;height:32px;line-height:32px;display:block;text-align:center;text-decoration:none;color:var(--fg);font:bold 18px/32px system-ui,sans-serif}
.leaflet-bar a:first-child{border-top-left-radius:6px;border-top-right-radius:6px}
.leaflet-bar a:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-bottom:none}
.leaflet-bar a.leaflet-disabled{cursor:default;opacity:.4}
.leaflet-control-attribution{background:color-mix(in srgb,var(--surface) 85%,transparent);margin:0;padding:0 6px;color:var(--muted);font-size:10.5px;line-height:1.5;border-top-left-radius:4px}
.leaflet-control-attribution a{text-decoration:none}
.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}
.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:10px}
.leaflet-popup-content{margin:12px 16px;line-height:1.4;font-size:13px;min-height:1px}
.leaflet-popup-content p{margin:0}
.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}
.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;transform:rotate(45deg)}
.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:var(--surface);color:var(--fg);box-shadow:0 3px 14px rgba(0,0,0,.3)}
.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:26px;height:26px;font:18px/26px system-ui,sans-serif;color:var(--muted);text-decoration:none;background:transparent}
.leaflet-tooltip{position:absolute;padding:3px 8px;background:var(--surface);border:1px solid var(--line);border-radius:4px;color:var(--fg);white-space:nowrap;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.3);font-size:12px}
.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{transition:transform .3s ease-out,opacity .3s ease-in}

/* ---------- 房源地图界面 ---------- */
:root{--map-bg:#e9eef2;--sch-water:#a9d0ea;--sch-park:#cfe6c8;--sch-text:#5d7a52}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--map-bg:#1b2229;--sch-water:#28506b;--sch-park:#22392a;--sch-text:#8fb38a}}
:root[data-theme="dark"]{--map-bg:#1b2229;--sch-water:#28506b;--sch-park:#22392a;--sch-text:#8fb38a}
.mapsec{display:grid;gap:10px}
.map-tools{display:flex;justify-content:space-between;align-items:center;gap:8px 14px;flex-wrap:wrap}
.map-status{font-size:12.5px;color:var(--muted)}
.map-src{display:inline-flex;flex-direction:row;align-items:center;gap:6px;white-space:nowrap}
.map-src select{width:auto}
.map-slot{height:min(62vh,560px);min-height:320px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--map-bg);position:relative}
.map-canvas{width:100%;height:100%}
.map-note{margin:0;font-size:12.5px}
.map-list .list{margin-top:8px}
.map-down{height:100%;display:grid;place-items:center;text-align:center;padding:24px;color:var(--muted);font-size:14px}
/* 价格标记：文字用正文色，边框表示出租状态 */
.pm-wrap{background:none;border:0}
.pm{display:inline-block;transform:translate(-50%,-100%);margin-top:-6px;background:var(--surface);color:var(--fg);border:2px solid var(--st,var(--accent));border-radius:999px;padding:2px 9px;font:700 12px/1.5 var(--font);white-space:nowrap;box-shadow:0 1px 4px rgba(0,0,0,.28);cursor:pointer;position:relative}
.pm::after{content:"";position:absolute;left:50%;bottom:-7px;margin-left:-5px;border:5px solid transparent;border-top-color:var(--st,var(--accent))}
.pm.st-vacant{--st:var(--vacant)} .pm.st-notice{--st:var(--notice)} .pm.st-let{--st:var(--let)}
.leaflet-marker-icon:hover .pm,.pm:hover,.pm:focus-visible{z-index:5;background:var(--st);color:#fff}
.pm-key{display:inline-block;margin-left:8px;padding:0 8px;border:2px solid var(--st);border-radius:999px;font-size:12px;color:var(--fg)}
.pm-key.st-vacant{--st:var(--vacant)} .pm-key.st-notice{--st:var(--notice)} .pm-key.st-let{--st:var(--let)}
.mcl-wrap{background:none;border:0}
.mcl{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:var(--accent);color:var(--on-accent);font:700 13px var(--font);box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 28%,transparent);cursor:pointer;border:0}
.um-wrap{background:none;border:0;display:inline-flex;align-items:center;gap:3px;transform:translate(-9px,-9px);pointer-events:auto}
.um{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--surface);color:var(--accent);box-shadow:0 0 0 1.5px var(--accent),0 1px 3px rgba(0,0,0,.25)}
.uml{font-size:11px;font-weight:600;color:var(--fg);background:color-mix(in srgb,var(--surface) 80%,transparent);padding:0 4px;border-radius:3px;white-space:nowrap}
.z-lo .uml{display:none}
/* 选中的价格标记 */
.pm.sel{background:var(--st);color:#fff;z-index:6;transform:translate(-50%,-100%) scale(1.12)}
/* 地图下方的已选房源横条：高度约为列表横条的两倍 */
.map-pick:empty{display:none}
.mcard{display:grid;grid-template-columns:260px minmax(0,1fr) auto;gap:16px;min-height:170px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px;align-items:stretch}
.mc-ph{display:block;min-height:146px}
.mc-ph .ph{height:100%;aspect-ratio:auto;border-radius:8px;padding:8px;display:flex;align-items:flex-end;font-size:12px}
.mc-body{display:grid;gap:6px;align-content:center;min-width:0}
.mc-t{font-weight:700;font-size:16px;color:var(--fg);text-decoration:none}
.mc-t:hover{color:var(--accent)}
.mc-price{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;font-size:18px}
.mc-price .meta{font-size:13px}
.mc-f{font-size:13px;color:var(--muted)}
.mc-f .lines{display:inline-flex;gap:3px;vertical-align:middle}
.mc-acts{display:flex;flex-direction:column;justify-content:flex-end;align-items:stretch;gap:8px;position:relative;padding-top:30px}
.mc-x{position:absolute;top:-4px;right:-4px;border:0;background:none;color:var(--muted);font-size:20px;line-height:1;cursor:pointer;width:32px;height:32px;border-radius:6px}
.mc-x:hover{background:var(--line);color:var(--fg)}
@media (max-width:720px){
  .mcard{grid-template-columns:120px minmax(0,1fr);gap:10px 12px;min-height:0;padding:10px}
  .mc-ph{min-height:120px}
  .mc-acts{grid-column:1/-1;flex-direction:row;justify-content:flex-start;padding-top:0;position:static}
  .mcard{position:relative}
  .mc-x{top:4px;right:4px}
  .mc-body{padding-right:24px}
}
/* 离线示意图 */
.sch{position:relative;width:100%;height:100%;overflow:hidden;background:var(--map-bg);touch-action:none;cursor:grab;outline-offset:-3px}
.sch:active{cursor:grabbing}
.sch-bg{position:absolute;inset:0;width:100%;height:100%}
.sch .sp{fill:var(--sch-park)}
.sch .spl{fill:var(--sch-text);font-size:11px;text-anchor:middle;dominant-baseline:middle;pointer-events:none}
.sch .sr{fill:none;stroke:var(--sch-water);stroke-linecap:round;stroke-linejoin:round}
.sch .srl{fill:color-mix(in srgb,var(--sch-water) 60%,var(--fg));font-size:12px;font-style:italic}
.sch-mk{position:absolute;inset:0}
.sch-mk .pm,.sch-mk .sch-cl,.sch-mk .sch-um{position:absolute}
.sch-mk .sch-cl{transform:translate(-50%,-50%)}
.sch-pop{position:absolute;width:240px;background:var(--surface);color:var(--fg);border-radius:10px;padding:12px 14px;box-shadow:0 3px 14px rgba(0,0,0,.3);z-index:5}
.sch-x{position:absolute;top:2px;right:4px;border:0;background:none;color:var(--muted);font-size:18px;cursor:pointer;width:26px;height:26px}
.sch-zoom{position:absolute;top:10px;left:10px;display:grid;box-shadow:0 1px 5px rgba(0,0,0,.35);border-radius:6px;overflow:hidden;z-index:4}
.sch-zoom button{width:32px;height:32px;border:0;border-bottom:1px solid var(--line);background:var(--surface);color:var(--fg);font:bold 18px system-ui,sans-serif;cursor:pointer}
.sch-zoom button:last-child{border-bottom:0}
.sch-attr{position:absolute;right:0;bottom:0;background:color-mix(in srgb,var(--surface) 85%,transparent);color:var(--muted);font-size:10.5px;padding:0 6px;border-top-left-radius:4px}
@media (max-width:720px){.map-slot{height:56vh;min-height:300px;margin:0 -16px;border-radius:0;border-left:0;border-right:0}.map-tools{font-size:13px}}
