html, body { height:100%; margin:0; font-family:Arial, sans-serif; }

/* --- Layout: Karte füllt, Panel nur Content-Höhe --- */
#layout{
  position:relative;
  display:grid;
  grid-template-rows: 1fr auto;
  grid-template-columns: 1fr;
  height:100dvh; height:100svh;
  width:100vw; overflow:hidden;
}
#map{ grid-column:1; grid-row:1; min-height:0; }

#bottomOverlay{
  grid-column:1; grid-row:2;
  background:#fff; border-radius:16px 16px 0 0; box-shadow:0 -4px 18px rgba(0,0,0,.13);
  z-index:2; max-height:75vh; overflow:auto;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
  padding-bottom: max(8px, env(safe-area-inset-bottom));
}
#sheetInner{ padding:16px; min-height:0; }

/* Splits */
@media (max-width: 991px) and (orientation: landscape){
  #layout{ grid-template-columns: 1fr 1fr; grid-template-rows: 1fr; }
  #map{ grid-column:2; grid-row:1; }
  #bottomOverlay{ grid-column:1; grid-row:1; border-radius:0; box-shadow:4px 0 18px rgba(0,0,0,.10); max-height:unset; height:100%; }
}
@media (min-width: 1200px){
  #layout{ grid-template-columns: minmax(340px, 40vw) 1fr; grid-template-rows: 1fr; }
  #map{ grid-column:2; grid-row:1; }
  #bottomOverlay{ grid-column:1; grid-row:1; border-radius:0; box-shadow:4px 0 18px rgba(0,0,0,.10); max-height:unset; height:100%; }
}

/* --- UI --- */
#sheetHeader {display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:8px;}
#sheetHeader h2 {margin:0; font-size:22px; font-weight:700;}
.estWrap{display:inline-flex;gap:6px;align-items:center;cursor:pointer}
.iBtn{width:22px;height:22px;border-radius:50%;border:none;background:#ff9800;color:#fff;font-weight:700;display:inline-flex;align-items:center;justify-content:center}

.reorderHint{ font-size:12px; color:#666; margin:2px 0 8px; }
.reorderHint.hide{ display:none; }

.row{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.addressInput{
  flex:1 1 auto;font-size:16px;border-radius:11px;border:1px solid #bbb;
  padding:10px 12px;background:#f8f8f8;min-height:44px;box-sizing:border-box
}
.addBtn,.removeBtn,.smallBtn{
  width:36px;height:36px;border-radius:10px;border:none;font-size:20px;font-weight:700;
  display:flex;justify-content:center;align-items:center;cursor:pointer;transition:background .2s
}
.addBtn{background:#22e822;color:#fff}.addBtn:active{background:#1db81d}
.removeBtn{background:#ed3a37;color:#fff}.removeBtn:active{background:#b91b17}
.smallBtn{height:36px;border-radius:10px;font-size:14px;background:#eee;padding:0 10px}
.smallBtn:active{background:#e0e0e0}

/* Griff (kein Button) */
.dragHandle{
  width:28px;height:36px;min-width:28px;border-radius:8px;border:1px solid #cfcfcf;background:#f7f7f7;
  display:flex;align-items:center;justify-content:center;cursor:grab;user-select:none;
  -webkit-user-drag:none; touch-action:none; padding:0 4px;
}
.grip{font-weight:700; opacity:.75; line-height:1;}

/* Tools & Buttons */
#toolsRow{display:flex;gap:8px;margin:4px 0 10px;flex-wrap:wrap}
.toolBtn{font-size:12px;border:none;border-radius:10px;padding:6px 10px;background:#eee;cursor:pointer}
.toolBtn:active{background:#e0e0e0}

.buttonsRow{ display:flex; gap:8px; margin-top:6px; }
#extrasBtn,#calculateBtn{flex:1 1 48%;font-size:20px;border-radius:14px;font-weight:700;padding:12px 0;border:none;cursor:pointer}
#extrasBtn{background:orange}#extrasBtn:active{background:#cb9a04}
#calculateBtn{background:#16fe16}#calculateBtn:active{background:#13c113}

#result{margin-top:10px;font-weight:700;font-size:16px;color:#222;min-height:26px}
#error{margin-top:6px;color:#b00020;font-size:13px;min-height:1em}

/* LRM-Itinerary ausblenden */
.leaflet-routing-container{display:none!important}

/* Popups */
.leaflet-popup-content{margin:12px 14px}
.leaflet-popup-content-wrapper{border-radius:10px;border:1px solid #ccc;box-shadow:0 3px 14px rgba(0,0,0,.15)}
.leaflet-popup-tip{box-shadow:0 3px 14px rgba(0,0,0,.15)}
.popupHdr{display:flex;align-items:center;gap:6px;margin-bottom:6px;font-size:14px}
.popupHdr .city{font-weight:800;color:#003366}
.popupHdr .actions{margin-left:auto;display:flex;gap:8px}
.iconBtn{border:none;background:#f2f2f2;width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer}
.iconBtn:hover{background:#e8e8e8}
.iconBtn svg{width:18px;height:18px}
.addrLine{font-size:13px;color:#222}
.inlineEdit{margin-top:6px;display:none}
.editWrap{display:flex;align-items:center;gap:6px}
.inlineEdit input{width:260px;max-width:70vw;font-size:13px;padding:8px 10px;border:1px solid #bbb;border-radius:6px}
.clearX{border:none;background:#fff;color:#d32f2f;font-weight:800;border:1px solid #d32f2f;width:30px;height:30px;border-radius:8px;cursor:pointer}
.clearX:hover{background:#ffecec}
.okBtn{border:none;background:#e8f5e9;color:#2e7d32;border:1px solid #2e7d32;width:30px;height:30px;border-radius:8px;cursor:pointer;font-weight:700}
.okBtn:hover{background:#d7f0db}

/* Loader */
#loader{position:fixed;inset:0;background:rgba(0,0,0,.18);display:none;align-items:center;justify-content:center;z-index:9000}
.spinner{width:56px;height:56px;border-radius:50%;border:6px solid rgba(255,255,255,.6);border-top-color:#1b5e20;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* Sortable */
.sortable-ghost{ opacity:0.35; }
.sortable-chosen{ background:#fafafa; }

/* Custom Controls */
.leaflet-control.custom-buttons{ display:flex; flex-direction:column; gap:6px; }
.ctrlBtn{
  background:#fff; border:1px solid #bbb; border-radius:6px; width:36px; height:36px;
  display:flex; align-items:center; justify-content:center; cursor:pointer;
  box-shadow:0 1px 4px rgba(0,0,0,.25);
}
.ctrlBtn:hover{ background:#f5f5f5 }
.ctrlBtn svg{ width:18px; height:18px; }

@media (max-width: 480px){
  #stopsContainer { max-height: 50dvh; overflow:auto; }
}

/* --- HARDENED OVERLAYS (Modal + Tooltip) --- */
#extrasModal{
  display:none !important;
  position:fixed !important;
  inset:0 !important;
  background:rgba(0,0,0,.27) !important;
  z-index:100000 !important;
  align-items:center; justify-content:center;
}
#extrasModal .content{
  background:#fff; border-radius:18px; max-width:360px; width:90%;
  padding:16px 10px 20px; max-height:85vh; overflow:auto; box-sizing:border-box;
  display:flex; flex-direction:column;
}
#tipBox{
  position:fixed !important;
  background:#222; color:#fff; font-size:12px;
  padding:10px 12px; border-radius:8px;
  box-shadow:0 6px 20px rgba(0,0,0,.2);
  display:none !important;
  z-index:100001 !important;
  line-height:1.35; max-width:520px;
}
#tipArrow{ position:fixed !important; width:0; height:0; display:none !important; z-index:100001 !important; }
#tipBox.show, #tipArrow.show{ display:block !important; }
.tipArrow-top{ border-left:6px solid transparent; border-right:6px solid transparent; border-top:6px solid #222; }
.tipArrow-bottom{ border-left:6px solid transparent; border-right:6px solid transparent; border-bottom:6px solid #222; }



/* Einheitliche Zeilenhöhe (anpassbar) */
:root { --row-h: clamp(36px, 7.5vw, 48px); }

/* Start-Zeile: 70% Feld, 30% "Ändern" */
#sheetInner > .row:first-of-type{
  display: grid;
  grid-template-columns: minmax(0,70%) minmax(86px,30%); /* 86px = passt für "Ändern" */
  align-items: center;
  gap: 8px;
}

/* Ziel + Zwischenstopps: 10% / 70% / 10% / 10%  (mit Mindestbreiten 36px) */
#stopsContainer .row{
  display: grid;
  grid-template-columns:
    minmax(36px,10%)    /* Griff */
    minmax(0,70%)       /* Eingabefeld */
    minmax(36px,10%)    /* Minus */
    minmax(36px,10%);   /* Plus */
  align-items: center;
  gap: 8px;
}

/* Griff (kein Button) füllt seine 10%-Spalte */
.dragHandle{
  width: 100%;
  height: var(--row-h);
  display: flex; align-items: center; justify-content: center;
  border-radius: 10px; border:1px solid #cfcfcf; background:#f7f7f7;
  cursor: grab; user-select: none; padding: 0;
}
.grip{ font-size: clamp(14px, 4vw, 16px); opacity:.75; line-height:1; }

/* Eingabefeld füllt sauber 70%-Spalte */
#stopsContainer .row .addressInput{
  width: 100%;
  min-height: var(--row-h);
  font-size: clamp(14px,3.6vw,18px);
  padding: clamp(8px, 2.2vw, 12px) clamp(10px, 2.8vw, 12px);
}

/* Plus/Minus nehmen je 10% (mit Min. 36px) */
#stopsContainer .row .addBtn,
#stopsContainer .row .removeBtn{
  width: 100%;
  height: var(--row-h);
  font-size: clamp(18px,5vw,20px);
  border-radius: 10px;
}

/* "Ändern"-Button skaliert und bricht nicht um */
.smallBtn{
  height: var(--row-h);
  font-size: clamp(12px, 3.2vw, 14px);
  padding: 0 clamp(12px, 3.4vw, 16px);
  min-width: 86px;
  white-space: nowrap;
}

/* (optional) Auf ultrakleinen Screens etwas enger */
@media (max-width: 360px){
  :root { --row-h: 34px; }
}


/* --- Extras-Modal robust toggeln --- */
#extrasModal{
  display:none !important;
  position:fixed !important;
  inset:0 !important;
  background:rgba(0,0,0,.27) !important;
  z-index:100000 !important;
  align-items:center; justify-content:center;
}
/* Sichtbar, sobald .open dran ist */
#extrasModal.open{ display:flex !important; }

/* „Ändern“-Button ausblenden (wir übernehmen automatisch) */
#startSetBtn{ display:none !important; }
/* ===== Extras-Modal robust ausrichten ===== */
#extrasModal.open { display:flex !important; }          /* Sichtbar, wenn .open dran ist */
#extrasModal .content{
  display:block;                                        /* kein flex-Column mehr nötig */
  width:min(92vw, 460px);
  max-width:460px;
  padding:16px 14px 20px;
  border-radius:18px;
}

/* Jede Eingabezeile: Label links, Input rechts */
#extrasModal .fieldRow{
  display:grid !important;
  grid-template-columns: 1fr auto;                      /* Label dehnt, Input fix */
  align-items:center;
  gap:12px;
  margin-bottom:12px;
  font-size:18px;
}

/* Label nicht umbrechen lassen (nur wenn Platz knapp, sonst normal) */
#extrasModal .fieldRow label{
  min-width:0;                                          /* darf schrumpfen */
  white-space:normal;
}

/* Zahlenfeld: kompakt und rechtsbündig – mit hoher Spezifität */
#extrasModal .fieldRow input[type="number"]{
  width:90px !important;                                /* überstimmt evtl. globale Regeln */
  max-width:28vw;
  text-align:right;
  padding:6px 8px;
  border-radius:8px;
  border:1px solid #bbb;
  box-sizing:border-box;
}

/* Schließen-Button schön über gesamte Breite */
#extrasModal #closeExtrasBtn{
  display:block;
  width:100%;
  margin-top:12px;
  background:#e9e9e9;
  padding:12px 24px;
  font-weight:700;
  font-size:17px;
  border-radius:14px;
  border:1px solid #cfcfcf;
  cursor:pointer;
}

/* Sicherheit: nichts aus dem Formular erbt Zeilen-/Grid-Regeln von außen */
#extrasModal .row,
#extrasModal .addressInput,
#extrasModal .addBtn,
#extrasModal .removeBtn,
#extrasModal .dragHandle { all: unset; }                /* resetten */
#extrasModal .row { display:block; }                    /* falls .row irgendwo auftaucht */
