.map-page-wrap{padding:0}.map-shell{position:relative;height:auto;min-height:0;border-radius:16px;overflow:hidden;border:1px solid #dbe3ec;background:#eaf0f6}#map{position:relative;inset:auto;z-index:1;display:block;width:100%}#map.sh-map{height:90vh;min-height:560px}
.map-overlay-top{position:absolute;top:12px;left:12px;right:76px;z-index:600;display:flex;gap:8px;align-items:center;pointer-events:none}.map-overlay-top>*{pointer-events:auto}
.map-search-box{flex:0 1 min(50%,560px);max-width:min(50%,560px);min-width:220px;display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.96);border:1px solid #d8e2ee;border-radius:14px;box-shadow:0 8px 24px rgba(15,23,42,.12);padding:10px 12px}.map-search-box input{border:0;outline:0;width:100%;background:transparent;color:#0f172a;font-size:14px}.map-search-icon{opacity:.75;font-size:15px}
.map-icon-btn{width:44px;height:44px;border:1px solid #d8e2ee;background:rgba(255,255,255,.96);color:#0f172a;border-radius:14px;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 8px 24px rgba(15,23,42,.10);cursor:pointer;position:relative}.map-icon-btn.active{border-color:#2563eb;color:#2563eb;box-shadow:0 8px 24px rgba(37,99,235,.16)}
.map-icon-btn .badge-dot{position:absolute;top:7px;right:7px;width:8px;height:8px;border-radius:50%;background:#ef4444;display:none}.map-icon-btn.has-dot .badge-dot{display:block}
.map-search-area-btn{position:absolute;bottom:16px;left:50%;transform:translateX(-50%);z-index:600;border:0;background:#fff;color:#0f172a;padding:11px 16px;border-radius:999px;box-shadow:0 12px 30px rgba(15,23,42,.18);border:1px solid #dbe3ec;font-weight:700;cursor:pointer}.map-search-area-btn.hidden{display:none}
.map-pill-state{position:absolute;bottom:16px;right:16px;z-index:600;display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;max-width:min(70vw,560px)}.map-pill{border-radius:999px;background:rgba(255,255,255,.96);border:1px solid #dbe3ec;color:#334155;font-size:12px;padding:7px 10px;box-shadow:0 8px 18px rgba(15,23,42,.08)}
.map-filter-popup{position:absolute;top:64px;right:0;width:min(360px,calc(100vw - 24px));max-height:72vh;overflow:auto;background:rgba(255,255,255,.98);border:1px solid #dbe3ec;border-radius:16px;box-shadow:0 18px 40px rgba(15,23,42,.18);padding:10px;display:none}.map-filter-popup.open{display:block}
.filter-popup-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 4px 10px;border-bottom:1px solid #eef2f7;margin-bottom:10px}.filter-popup-title{font-size:14px;font-weight:800;color:#0f172a}
.filter-section{margin-bottom:12px}.filter-section h4{margin:0 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#64748b}.filter-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.filter-chip{display:inline-flex;align-items:center;gap:8px;padding:8px 10px;border-radius:12px;border:1px solid #e2e8f0;background:#fff;color:#0f172a;cursor:pointer;user-select:none;font-size:13px}.filter-chip input{display:none}.filter-chip .ico{width:18px;text-align:center;opacity:.9;display:inline-flex;align-items:center;justify-content:center;flex:0 0 18px}.filter-chip .ico-img img{width:18px;height:18px;display:block;object-fit:contain}.filter-chip.on{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}
.filter-actions{position:sticky;bottom:-10px;background:rgba(255,255,255,.98);display:flex;gap:8px;padding-top:10px;border-top:1px solid #eef2f7}.filter-actions button{flex:1;border:1px solid #dbe3ec;background:#fff;color:#0f172a;font-weight:700;border-radius:12px;padding:10px 12px;cursor:pointer}.filter-actions .apply{background:#2563eb;border-color:#2563eb;color:#fff}
.map-top-toast{position:absolute;top:64px;left:12px;z-index:610;background:rgba(15,23,42,.92);color:#fff;border-radius:12px;padding:8px 10px;font-size:12px;display:none}.map-top-toast.show{display:block}
.place-mini-card{display:none !important}.place-mini-card.show{display:none !important}
.place-mini-card .title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.place-mini-card .title-row strong{font-size:14px;color:#0f172a}.place-mini-card .meta{font-size:12px;color:#64748b;margin-top:4px}.place-mini-card .tags{margin-top:8px;display:flex;flex-wrap:wrap;gap:6px}.place-mini-card .tags span{border-radius:999px;border:1px solid #e2e8f0;background:#f8fafc;font-size:11px;padding:4px 8px;color:#475569}
.place-mini-card .actions{margin-top:8px;display:flex;gap:8px}.place-mini-card .actions a,.place-mini-card .actions button{border:1px solid #dbe3ec;background:#fff;border-radius:10px;padding:8px 10px;font-weight:700;color:#0f172a;cursor:pointer;text-decoration:none}.place-mini-card .actions .fav.active{border-color:#f59e0b;color:#b45309;background:#fffbeb}

.map-right-dock{position:absolute;top:12px;right:12px;z-index:620;display:flex;align-items:flex-start;gap:8px;pointer-events:none}.map-right-dock>*{pointer-events:auto}
.map-dock-toggle{width:48px;height:48px;border-radius:16px;font-size:18px;font-weight:700}
.map-right-dock-panel{display:flex;flex-direction:column;gap:8px;opacity:0;transform:translateX(8px) scale(.98);pointer-events:none;transition:.18s ease}.map-right-dock-panel.open{opacity:1;transform:none;pointer-events:auto}
.map-dock-group{position:relative;display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.map-dock-submenu{position:absolute;top:0;right:52px;display:none;flex-direction:column;gap:6px;min-width:210px;background:rgba(255,255,255,.98);border:1px solid #dbe3ec;border-radius:14px;box-shadow:0 14px 30px rgba(15,23,42,.16);padding:8px}.map-dock-submenu.open{display:flex}
.map-dock-subbtn{border:1px solid #e2e8f0;background:#fff;color:#0f172a;border-radius:10px;padding:9px 10px;font-size:13px;font-weight:700;text-align:left;cursor:pointer}.map-dock-subbtn:hover{background:#f8fafc}.map-dock-subbtn.on{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}
.map-filter-popup{top:0;right:52px}
.map-filter-popup.open{display:block}

.vln-user-avatar-icon-wrap{background:transparent;border:0}
.vln-user-avatar-marker{position:relative;width:34px;height:34px;border-radius:999px;border:2px solid #fff;box-shadow:0 8px 18px rgba(15,23,42,.25);display:flex;align-items:center;justify-content:center;overflow:hidden;background:#64748b;color:#fff;font-size:15px;line-height:1}
.vln-user-avatar-marker::after{content:'';position:absolute;inset:-3px;border-radius:999px;border:2px solid transparent;pointer-events:none}
.vln-user-avatar-marker.kind-friend::after{border-color:#10b981}
.vln-user-avatar-marker.kind-follower::after{border-color:#3b82f6}
.vln-user-avatar-marker.kind-radar::after{border-color:#f59e0b}
.vln-user-avatar-marker img{width:100%;height:100%;object-fit:cover;display:block}
.vln-user-avatar-marker.no-avatar.kind-friend{background:#10b981}
.vln-user-avatar-marker.no-avatar.kind-follower{background:#3b82f6}
.vln-user-avatar-marker.no-avatar.kind-radar{background:#f59e0b}
.vln-user-avatar-marker span{transform:translateY(-1px)}

@media (max-width:768px){.map-shell{border-radius:0;border-left:0;border-right:0;height:auto;min-height:0}.map-overlay-top{top:10px;left:10px;right:68px}.map-search-box{flex:0 1 min(calc(100vw - 92px), 72vw);max-width:min(calc(100vw - 92px), 72vw);min-width:160px;padding:10px}.map-right-dock{top:10px;right:10px}.map-right-dock-panel{gap:6px}.map-dock-toggle,.map-icon-btn{width:42px;height:42px;border-radius:13px}.map-dock-submenu{position:fixed;right:8px;top:60px;left:auto;max-width:min(92vw,280px)}.map-search-area-btn{bottom:12px}.map-pill-state{right:10px;bottom:56px;max-width:78vw}.map-filter-popup{position:fixed;left:8px;right:8px;bottom:8px;top:auto;width:auto;max-height:68vh;border-radius:18px}.filter-grid{grid-template-columns:1fr}#map.sh-map{height:72vh;min-height:420px}}
/* Patch 013 – verschiedene Platzarten mit eigenen Kartensymbolen (park4night-inspiriert) */
.vln-place-marker-wrap { background: transparent !important; border: 0 !important; }
.vln-place-marker{
  position: relative;
  width: 30px;
  height: 30px;
  border-radius: 12px;
  border: 2px solid #ffffff;
  box-shadow: 0 8px 16px rgba(15,23,42,.22);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 14px;
  font-weight: 800;
  line-height: 1;
  user-select: none;
}
.vln-place-marker::after{
  content:'';
  position:absolute;
  left:50%;
  bottom:-8px;
  width:12px;
  height:12px;
  background: inherit;
  border-right: 2px solid #fff;
  border-bottom: 2px solid #fff;
  transform: translateX(-50%) rotate(45deg);
  box-sizing: border-box;
}
.vln-place-marker span{
  position: relative;
  z-index: 2;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  transform: translateY(-1px);
}
.vln-place-marker.pt-offroad span{
  font-size: 10px;
  letter-spacing: .2px;
  transform: translateY(0);
}
.vln-place-marker.pt-free,
.vln-place-marker.pt-parking{
  font-size: 15px;
}
.vln-place-marker.pt-camping { background:#0ea5a4; }
.vln-place-marker.pt-paid    { background:#f59e0b; }
.vln-place-marker.pt-free    { background:#16a34a; }
.vln-place-marker.pt-private { background:#8b5cf6; }
.vln-place-marker.pt-nature  { background:#15803d; }
.vln-place-marker.pt-picnic  { background:#ec4899; }
.vln-place-marker.pt-rest    { background:#64748b; }
.vln-place-marker.pt-ve      { background:#0ea5e9; }
.vln-place-marker.pt-farm    { background:#92400e; }
.vln-place-marker.pt-offroad { background:#334155; }
.vln-place-marker.pt-daynight{ background:#1d4ed8; }
.vln-place-marker.pt-day     { background:#f97316; }
.vln-place-marker.pt-parking { background:#2563eb; }
.vln-place-marker.pt-default { background:#475569; }

/* aktiver Marker beim Hover/Click optisch klarer */
.leaflet-marker-icon:hover .vln-place-marker{
  transform: translateY(-1px);
  box-shadow: 0 10px 18px rgba(15,23,42,.28);
}

/* ensure leaflet fills visible map area */
#map.sh-map.leaflet-container{height:90vh;min-height:560px}
@media (max-width:768px){#map.sh-map.leaflet-container{height:72vh;min-height:420px}}


/* Marker-Klick Overlay (neue Detailkarte in der Map) */
.leaflet-popup.vln-place-popup .leaflet-popup-content-wrapper{
  border-radius:18px;
  border:1px solid #c7d7ef;
  box-shadow:0 18px 38px rgba(15,23,42,.22);
  padding:0;
}
.leaflet-popup.vln-place-popup .leaflet-popup-content{
  margin:0;
  width:min(360px, calc(100vw - 64px)) !important;
}
.leaflet-popup.vln-place-popup .leaflet-popup-tip{
  background:#fff;
  box-shadow: none;
}
.leaflet-popup.vln-place-popup .leaflet-popup-close-button{ display:none; }

.vln-place-popup-card{
  background:#fff;
  border-radius:18px;
  padding:12px 14px 10px;
  color:#1e293b;
}
.vln-popup-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  margin-bottom:8px;
}
.vln-popup-head-actions{
  display:flex;
  align-items:center;
  gap:6px;
}
.vln-popup-iconbtn{
  border:1px solid #dbe3ec;
  background:#fff;
  color:#64748b;
  border-radius:10px;
  width:28px;
  height:28px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  font-weight:700;
  line-height:1;
}
.vln-popup-iconbtn:hover{ background:#f8fafc; }
.vln-popup-fav{ font-size:16px; }
.vln-popup-fav.active{
  color:#d97706;
  border-color:#f5d28a;
  background:#fff8e7;
}
.vln-popup-close{ font-size:18px; }
.vln-stars{ display:inline-flex; gap:2px; font-size:16px; line-height:1; }
.vln-stars .s{ color:#d1d5db; }
.vln-stars .s.on{ color:#f5c400; }
.vln-stars .s.half{
  background:linear-gradient(90deg,#f5c400 50%,#d1d5db 50%);
  -webkit-background-clip:text;
  background-clip:text;
  color:transparent;
}
.vln-popup-type{
  display:flex;
  align-items:center;
  gap:10px;
  margin-bottom:8px;
}
.vln-popup-type-ico{
  width:38px;
  height:38px;
  border-radius:999px;
  border:2px solid #dbe3ec;
  background:#f8fafc;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  font-size:18px;
  flex:0 0 38px;
}
.vln-popup-type-label{
  font-weight:800;
  color:#1d4ed8;
  font-size:15px;
}
.vln-popup-field{ margin-top:6px; }
.vln-popup-field .k{
  font-weight:800;
  color:#1d4ed8;
  line-height:1.15;
  margin-bottom:1px;
}
.vln-popup-field .v{
  color:#334155;
  font-size:13px;
  line-height:1.25;
}
.vln-popup-footer{
  margin-top:10px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
}
.vln-popup-viewbtn{
  border:1px solid #cfe0f6;
  background:#fff;
  border-radius:11px;
  padding:7px 12px;
  font-weight:800;
  color:#0369a1;
  text-decoration:none;
}
.vln-popup-viewbtn:hover{
  background:#f0f9ff;
  color:#0c4a6e;
}
.vln-popup-stats{
  display:flex;
  align-items:center;
  gap:10px;
  color:#64748b;
  font-size:12px;
  white-space:nowrap;
}
@media (max-width:768px){
  .leaflet-popup.vln-place-popup .leaflet-popup-content{
    width:min(320px, calc(100vw - 40px)) !important;
  }
  .vln-place-popup-card{ padding:10px 12px 9px; }
  .vln-popup-type-label{ font-size:14px; }
  .vln-popup-field .v{ font-size:12px; }
}



/* Hotfix: map truly fills visible area and stays large */
#map, #map.sh-map { width:100%; display:block; }
.map-shell #map, .map-shell #map.sh-map, .map-shell .leaflet-container { max-height:none !important; }

/* Suchleiste mittig oben anordnen */
.map-overlay-top{
  left:50% !important;
  right:auto !important;
  transform:translateX(-50%) !important;
  width:min(50%, 720px) !important;
  justify-content:center !important;
}
.map-overlay-top .map-search-box{
  flex:0 1 auto !important;
  width:100% !important;
  max-width:100% !important;
}
@media (max-width:768px){
  .map-overlay-top{
    left:68px !important;
    right:68px !important; /* Platz für rechtes Dock */
    transform:none !important;
    width:auto !important;
  }
  .map-overlay-top .map-search-box{
    width:100% !important;
  }
}

/* Repair patch: rechtes Menü dauerhaft sichtbar, Toggle aus */
.map-right-dock{pointer-events:auto !important;}
#btnMapDockToggle,.map-dock-toggle{display:none !important;}
.map-right-dock-panel{opacity:1 !important;transform:none !important;pointer-events:auto !important;}
.map-right-dock-panel:not(.open){opacity:1 !important;transform:none !important;pointer-events:auto !important;}
.map-dock-submenu{z-index:700;}
.map-dock-group.submenu-open .map-dock-submenu{display:flex;}
@media (max-width:768px){
  .map-right-dock{right:8px !important;top:8px !important;}
  .map-dock-submenu{z-index:1300;}
}


/* Standort-Zustimmung (Vor-Popup vor Browser-Geolocation-Prompt) */
.vln-geo-consent-backdrop{
  position:fixed;
  inset:0;
  background:rgba(15,23,42,.26);
  z-index:1600;
  display:none;
  align-items:center;
  justify-content:center;
  padding:16px;
}
.vln-geo-consent-backdrop.show{ display:flex; }
.vln-geo-consent-card{
  position:relative;
  width:min(420px, calc(100vw - 24px));
  background:#fff;
  border:1px solid #dbe3ec;
  border-radius:16px;
  box-shadow:0 20px 48px rgba(15,23,42,.24);
  padding:14px 14px 12px;
  color:#0f172a;
}
.vln-geo-consent-close{
  position:absolute;
  top:10px;
  right:10px;
  width:28px;
  height:28px;
  border-radius:10px;
  border:1px solid #dbe3ec;
  background:#fff;
  color:#475569;
  line-height:1;
  font-size:18px;
  cursor:pointer;
}
.vln-geo-consent-title{
  font-weight:800;
  font-size:15px;
  padding-right:34px;
  margin-bottom:6px;
}
.vln-geo-consent-text{
  color:#334155;
  font-size:13px;
  line-height:1.35;
  margin-bottom:8px;
}
.vln-geo-consent-hint{
  background:#f8fafc;
  border:1px solid #e2e8f0;
  border-radius:10px;
  padding:8px 10px;
  color:#475569;
  font-size:12px;
  line-height:1.35;
  margin-bottom:10px;
}
.vln-geo-consent-actions{
  display:grid;
  gap:8px;
}
.vln-geo-btn{
  border:1px solid #dbe3ec;
  background:#fff;
  color:#0f172a;
  border-radius:12px;
  padding:10px 12px;
  text-align:left;
  font-weight:700;
  cursor:pointer;
}
.vln-geo-btn:hover{ background:#f8fafc; }
.vln-geo-btn.primary{
  border-color:#bfdbfe;
  background:#eff6ff;
  color:#1d4ed8;
}
.vln-geo-btn.danger{
  border-color:#fecaca;
  background:#fff7f7;
  color:#b91c1c;
}
body.vln-geo-consent-open{ overflow:hidden; }
@media (max-width:768px){
  .vln-geo-consent-card{
    width:min(360px, calc(100vw - 16px));
    border-radius:14px;
    padding:12px 12px 10px;
  }
  .vln-geo-btn{ font-size:13px; }
}
