:root {
  --bg: #0e1116;
  --bg-elevated: #161b22;
  --bg-elevated-2: #1c2229;
  --border: #2a313c;
  --border-soft: #232a33;
  --text: #e6e9ef;
  --text-dim: #8b95a5;
  --accent: #4ade80;
  --accent-dim: #2f8f5a;
  --accent-2: #60a5fa;
  --danger: #f87171;
  --radius: 10px;
  --shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
  --transition: 160ms cubic-bezier(0.4, 0, 0.2, 1);
  /* Fallback: direkt der rohe env()-Wert, bis app.js (updateSafeAreaVars)
     ihn per JS-Messung mit erzwungenem Reflow überschreibt. Auf einem
     iPad-PWA-Kaltstart kann env() selbst (nicht nur 100dvh) laut einem
     dokumentierten WebKit-Bug falsche/eingefrorene Werte liefern, die sich
     ohne aktives Nachmessen nie korrigieren - das war die eigentliche
     Ursache des "wie nach oben verschoben"-Bugs, unabhängig davon, welche
     CSS-Formel drumherum stand. Siehe updateSafeAreaVars in app.js. */
  --safe-top: env(safe-area-inset-top, 0px);
  --safe-right: env(safe-area-inset-right, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --safe-left: env(safe-area-inset-left, 0px);
}

* { box-sizing: border-box; }

html, body {
  height: 100%;
  width: 100%;
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: "Segoe UI", -apple-system, BlinkMacSystemFont, "Inter", sans-serif;
  font-size: 14px;
}

/* Verhindert, dass sich das GESAMTE Anwendungsfenster verschieben/scrollen
   lässt (v.a. iOS-Safari-Bounce-Effekt beim Ziehen außerhalb der Karte).
   NUR auf der eigentlichen Kartenanwendung (Klasse "app-shell" auf <html>
   UND <body>, siehe index.html) - Impressum/Datenschutz sind normale,
   potenziell lange Textseiten und binden dasselbe style.css ein; mit dieser
   Regel auf einem bare "html, body"-Selektor waren sie plötzlich nicht mehr
   scrollbar UND durch das fehlende automatische Zentrieren linksbündig statt
   zentriert.

   WICHTIG: <html>/<body> sind hier bewusst NICHT mehr selbst
   "position: fixed" (frühere Version war das, mit "inset: 0" oder einer
   vh/dvh-Einheit als Höhe - beides wurde ausprobiert, beides hatte in der
   installierten Homescreen-App (Standalone) mal eine sichtbare Lücke, mal
   sichtbar abgeschnittene Inhalte am unteren Rand zur Folge, ganz
   unabhängig von der genauen Formel). Stattdessen bleiben <html>/<body> im
   normalen Fluss (nur mit fester Höhe und "overflow: hidden" als
   Bounce-Sperre) - NUR NOCH #app selbst ist "position: fixed", direkt mit
   "top:0; left:0; height:100vh; width:100vw" (siehe unten). Das folgt
   einem von Lukas gefundenen, auf Apples eigenem WebKit-Blog zu
   "Designing Websites for iPhone X" basierenden Muster: nur EIN
   fixiertes Element statt zwei ineinander verschachtelte.
   Der frühere Grund, das bewusst NICHT so zu machen (zwei potenziell
   voneinander abweichende Fixed-Anker während einer laufenden Drehung),
   gilt inzwischen nicht mehr: eine echte Drehung führt jetzt zu einem
   kompletten Neuladen der Seite (siehe checkForRealOrientationChange in
   app.js) statt einer Live-Neuberechnung - es gibt also keine laufende
   Übergangsphase mehr, in der zwei Anker auseinanderlaufen könnten. */
/* KORREKTUR: Das Entfernen von "overflow: hidden" (vorherige Version)
   änderte per Livemessung NICHTS an body/html RECT (weiterhin 788px statt
   820px) - logisch, "overflow" beeinflusst nie die eigene Boxgröße eines
   Elements, nur ob darüber hinausgehender INHALT sichtbar bleibt. Der
   eigentliche Verdächtige war die falsche Höhen-EINHEIT: "height: 100%"
   verhält sich in der PWA laut allen bisherigen Messungen genau wie
   dvh/innerHeight/visualViewport (kurz, 788px) - NUR die reine "vh"-Einheit
   maß hier durchgehend korrekt (820px, per isoliertem Test-Element UND
   jetzt auch direkt an #app bestätigt). <html>/<body> nutzen deshalb jetzt
   ebenfalls "100vh" statt "100%" - dieselbe Einheit wie das fixierte
   #app, wodurch Vorfahre und Kind dieselbe (korrekte) Höhe haben und sich
   die Frage nach einem Zurückschneiden gar nicht mehr stellt.
   Für die Bounce-Sperre reicht "overscroll-behavior: none" allein aus
   (das moderne, für genau dieses Problem gedachte CSS-Feature) - <body>
   hat ohnehin keinen eigenen sichtbaren/scrollbaren Inhalt mehr, alles
   läuft über das fixierte #app. */
html.app-shell, body.app-shell {
  height: 100vh;
  overscroll-behavior: none;
}

#app {
  position: fixed;
  top: 0;
  left: 0;
  height: var(--app-height, 100vh);
  width: 100vw;
  display: flex;
  flex-direction: column;
  /* "var(--app-height, 100vh)" statt direkt "100vh": app.js
     (measureAppHeight/updateAppHeight) misst die Höhe kontextabhängig neu
     und überschreibt den Fallback - im normalen Safari-Tab per
     window.visualViewport.height (reagiert korrekt auf die ein-/
     ausblendende Adressleiste und die Bildschirmtastatur), in der
     installierten PWA per isoliertem Test-Element (dort lieferten
     visualViewport/innerHeight beide denselben zu kurzen Wert wie dvh -
     nur diese eine Technik maß nachweislich korrekt). "100vh" bleibt nur
     als Fallback, bis JS das erste Mal gelaufen ist.
     padding-top bleibt nötig, damit der Inhalt (Topbar) nicht sichtbar
     unter/hinter der Statusleiste läuft (die Statusleiste überlagert
     #app, verdrängt dessen Inhalt aber nicht von selbst).
     UNTEN bewusst KEIN Padding (mehr): der Home-Indicator-Bereich ist nur
     eine Wisch-GESTEN-Zone, kein optisch blockierender Bereich wie die
     Statusleiste - andere auf demselben iPad installierte PWAs laufen dort
     nachweislich randlos bis zum echten Bildschirmrand durch (per direktem
     Vergleich bestätigt), ein eigens reservierter Rand sah dagegen wie ein
     Darstellungsfehler aus (heller Kartenausschnitt, der abrupt von einem
     dunklen Streifen abgeschnitten wird). Die Karte hat unten ohnehin keine
     fest angehefteten Bedienelemente, die mit der Geste kollidieren
     könnten. Im schmalen Mobile-Layout (siehe Media Query weiter unten)
     bleibt die dortige GENAUERE Behandlung (Toolbar-Höhe inkl. Sicherheits-
     abstand) unverändert bestehen - die betrifft eine eigene, tatsächlich
     interaktive Symbolleiste, nicht die reine Kartenansicht.
     "var(--safe-top)" statt direkt "env(...)": die Custom-Property wird in
     :root zunächst auf den rohen env()-Wert gesetzt, aber von app.js
     (updateSafeAreaVars) per JS-Messung mit erzwungenem Reflow
     überschrieben, sobald ein zuverlässigerer Wert vorliegt - env() selbst
     kann auf einem PWA-Kaltstart laut einem dokumentierten WebKit-Bug
     falsch/eingefroren sein (siehe app.js). */
  padding-top: var(--safe-top, 0px);
}

/* ---------------- Topbar ---------------- */

#topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 20px;
  height: 56px;
  background: linear-gradient(180deg, var(--bg-elevated), var(--bg));
  border-bottom: 1px solid var(--border);
  z-index: 20;
}

/* Ist jetzt ein <button> (öffnet das App-Info-/Installations-Popup, siehe
   app.js), daher zunächst die Browser-Button-Grundstyles zurücksetzen, damit
   es optisch exakt wie das vorherige <div> aussieht - nur Cursor/Hover/
   Touch-Feedback kommt neu dazu, das Logo selbst bleibt unverändert. */
.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  background: transparent;
  border: none;
  font: inherit;
  color: inherit;
  padding: 4px 6px;
  margin: -4px -6px;
  border-radius: 8px;
  cursor: pointer;
  transition: background var(--transition);
}

.brand:hover,
.brand:focus-visible {
  background: rgba(255, 255, 255, 0.06);
}

.brand:active {
  background: rgba(255, 255, 255, 0.1);
}

.brand-logo {
  display: block;
  height: 32px;
  width: auto;
  /* Die SVG-Datei bringt bereits eine weisse Fläche mit (das Logo ist für
     hellen Hintergrund gestaltet), daher hier nur noch dezent abgerundet -
     kein zusätzlicher Hintergrund nötig. */
  border-radius: 5px;
}

.brand-text {
  font-weight: 600;
  font-size: 15px;
  letter-spacing: 0.2px;
}

.topbar-actions {
  display: flex;
  align-items: center;
  gap: 14px;
}

.field-count {
  color: var(--text-dim);
  font-size: 12.5px;
}

/* ---------------- Layout ---------------- */

#layout {
  flex: 1;
  display: flex;
  min-height: 0;
}

#sidebar {
  width: 340px;
  min-width: 340px;
  background: var(--bg-elevated);
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  min-height: 0;
  transition: width 200ms ease, min-width 200ms ease;
}

/* Einklappbar auf Desktop-/Tablet-Breiten (siehe #btn-sidebar-collapse) -
   auf schmalen (Mobile-)Breiten bleibt die Sidebar unverändert ein
   Off-Canvas-Drawer (siehe .mobile-open unten), der Toggle-Button dafür
   wird dort per JS gar nicht erst eingeblendet. */
#sidebar.collapsed {
  width: 0;
  min-width: 0;
  border-right: none;
}

.sidebar-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 16px 10px;
}

.sidebar-header h2 {
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 0.8px;
  color: var(--text-dim);
  margin: 0;
  font-weight: 700;
}

#field-list {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 4px 12px 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

#sidebar-legal-row {
  flex-shrink: 0;
  display: flex;
  gap: 14px;
  padding: 10px 16px;
  border-top: 1px solid var(--border-soft);
}

#sidebar-legal-row a {
  color: var(--text-dim);
  font-size: 11.5px;
  text-decoration: none;
}

#sidebar-legal-row a:hover { color: var(--text); text-decoration: underline; }

#map-wrap {
  flex: 1;
  position: relative;
}

/* Sitzt genau auf der Grenze zwischen Sidebar und Kartenansicht - da
   #map-wrap dank Flexbox automatisch neben der (ggf. eingeklappten)
   Sidebar beginnt, wandert der Button beim Ein-/Ausklappen von ganz allein
   mit, ohne eigene Positions-Synchronisierung. */
#btn-sidebar-collapse {
  position: absolute;
  top: 50%;
  left: -14px;
  transform: translateY(-50%);
  z-index: 650;
  width: 28px;
  height: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-radius: 50%;
  color: var(--text-dim);
  cursor: pointer;
  box-shadow: var(--shadow);
}

#btn-sidebar-collapse:hover { color: var(--accent); border-color: var(--accent-dim); }
#btn-sidebar-collapse.hidden { display: none; }
#btn-sidebar-collapse .ui-icon { width: 16px; height: 16px; transition: transform 200ms ease; }
#btn-sidebar-collapse.collapsed .ui-icon { transform: rotate(180deg); }

#map {
  width: 100%;
  height: 100%;
  background: #0b0e13;
}

.draw-hint {
  position: absolute;
  top: 16px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: calc(100vw - 32px);
  background: var(--bg-elevated-2);
  border: 1px solid var(--accent-dim);
  color: var(--accent);
  /* Symmetrisch, damit reiner Text (ohne Icon/Button auf einer Seite, z.B.
     "Tippen zum Wählen" auf Touch-Geräten) im Pill mittig statt schief
     wirkt - Icon/Beenden-Button/Platzhalter gleichen sich untereinander
     ohnehin selbst aus (siehe draw-hint-spacer), die Container-Polsterung
     muss dafür nicht mehr einseitig sein. */
  padding: 8px 16px;
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 600;
  box-shadow: var(--shadow);
  z-index: 800;
  animation: pulse-glow 1.6s ease-in-out infinite;
}

.draw-hint.hidden { display: none; }

/* Solange das Segmente-Modus-Panel rechts (300px + 16px Abstand) die Karte
   verdeckt, wirkt eine Zentrierung auf die volle Kartenbreite optisch nach
   links versetzt - stattdessen zwischen linker Sidebar und diesem Panel
   zentrieren (nur auf Desktop-Breiten, auf Mobile ist das Panel ein
   Bottom-Sheet und verdeckt die Kartenbreite nicht). */
.draw-hint.map-offset-right {
  left: calc(50% - 158px);
}

.draw-hint-mouse-icon {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
}

.draw-hint-mouse-icon.hidden { display: none; }

.draw-hint-mouse-btn-left { fill: var(--accent); }
.draw-hint-mouse-btn-right { fill: var(--danger); }

/* Gleich breiter, unsichtbarer Platzhalter wie das Maus-Icon auf der
   Gegenseite - ohne Beenden-Button (siehe showFinishButton:false) wäre der
   Text sonst optisch durch das Icon nach rechts verschoben. */
.draw-hint-spacer {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
}

.draw-hint-spacer.hidden { display: none; }

#draw-hint-text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.hint-action { font-weight: 700; }
.hint-action-left { color: var(--accent); }
.hint-action-right { color: var(--danger); }
.hint-action-sep { color: var(--text-dim); font-weight: 400; }

#draw-hint-finish {
  flex-shrink: 0;
  background: var(--accent);
  color: #06210f;
  border: none;
  padding: 6px 12px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
}

#draw-hint-finish:hover { filter: brightness(1.08); }

/* Ersatz für die gehaltene Umschalttaste (freier statt eingerasteter Winkel
   beim manuellen Verbinden) auf Touch-Geräten - siehe updateSegmentTopHint. */
#draw-hint-free-angle-toggle {
  flex-shrink: 0;
  background: transparent;
  color: var(--accent);
  border: 1px solid var(--accent-dim);
  padding: 5px 11px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
}

#draw-hint-free-angle-toggle.hidden { display: none; }

#draw-hint-free-angle-toggle.active {
  background: var(--accent);
  color: #06210f;
}

@keyframes pulse-glow {
  0%, 100% { box-shadow: 0 0 0 0 rgba(74, 222, 128, 0.35), var(--shadow); }
  50% { box-shadow: 0 0 0 6px rgba(74, 222, 128, 0), var(--shadow); }
}

/* ---------------- Buttons ---------------- */

.btn {
  border: 1px solid var(--border);
  background: var(--bg-elevated-2);
  color: var(--text);
  padding: 8px 14px;
  border-radius: 8px;
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
  transition: transform var(--transition), background var(--transition), border-color var(--transition), box-shadow var(--transition);
}

.btn:hover {
  transform: translateY(-1px);
  border-color: var(--accent-dim);
}

.btn:active { transform: translateY(0); }

.btn-primary {
  background: linear-gradient(135deg, var(--accent), #22c55e);
  color: #06210f;
  border: none;
  padding: 9px 18px;
}

.btn-primary:hover {
  box-shadow: 0 4px 18px rgba(74, 222, 128, 0.35);
}

.btn-danger {
  background: linear-gradient(135deg, var(--danger), #ef4444);
  color: #2a0a0a;
  border: none;
  padding: 9px 18px;
}

.btn-danger:hover {
  box-shadow: 0 4px 18px rgba(248, 113, 113, 0.35);
}

.btn-accent {
  background: var(--bg-elevated-2);
  border-color: var(--accent-dim);
  color: var(--accent);
}

.btn-small { padding: 6px 10px; font-size: 12px; }

.btn-ghost {
  background: transparent;
  border: 1px dashed var(--border);
  color: var(--text-dim);
  padding: 6px 8px;
  font-size: 11.5px;
}

.btn-ghost:hover {
  color: var(--text);
  border-color: var(--accent-dim);
  border-style: solid;
}

.btn.active-mode {
  background: var(--accent);
  color: #06210f;
  border-color: var(--accent);
}

.icon-btn {
  background: transparent;
  border: none;
  color: var(--text-dim);
  cursor: pointer;
  font-size: 16px;
  padding: 5px 8px;
  border-radius: 6px;
  transition: color var(--transition), background var(--transition);
}

.icon-btn:hover {
  color: var(--danger);
  background: rgba(248, 113, 113, 0.1);
}

/* Einheitliches Linien-Icon-Set (statt bunter Emojis) - skaliert per "em"
   automatisch mit der Schriftgröße des jeweiligen Buttons/Labels mit. */
.ui-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  flex-shrink: 0;
}

/* ---------------- Field cards ---------------- */

.field-card {
  background: var(--bg-elevated-2);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  overflow: hidden;
  flex-shrink: 0;
  animation: card-in 220ms ease;
  transition: border-color var(--transition), box-shadow var(--transition);
}

.field-card.active {
  border-color: var(--accent-dim);
  box-shadow: 0 0 0 1px rgba(74, 222, 128, 0.15);
}

@keyframes card-in {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: translateY(0); }
}

.field-card-header {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 10px 10px 12px;
  background: rgba(255, 255, 255, 0.02);
  border-bottom: 1px solid var(--border-soft);
}

.field-name {
  flex: 1;
  background: transparent;
  border: none;
  color: var(--text);
  font-weight: 700;
  font-size: 13.5px;
  padding: 4px 6px;
  border-radius: 6px;
  transition: background var(--transition);
}

.field-name:hover, .field-name:focus {
  background: rgba(255, 255, 255, 0.05);
  outline: none;
}

.field-card-body {
  padding: 10px 12px 14px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.feature-section-title {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.6px;
  color: var(--text-dim);
  margin-bottom: 6px;
  font-weight: 700;
}

.feature-row {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

select {
  width: 100%;
  background: var(--bg-elevated);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 6px 8px;
  font-size: 12.5px;
}

.feature-row-buttons {
  display: flex;
  gap: 6px;
}

.feature-row-buttons .btn-ghost { flex: 1; }

.polygon-list, .line-list, .point-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 8px;
  max-height: 220px;
  overflow-y: auto;
  padding-right: 2px;
}

.polygon-list::-webkit-scrollbar, .line-list::-webkit-scrollbar, .point-list::-webkit-scrollbar {
  width: 6px;
}
.polygon-list::-webkit-scrollbar-thumb, .line-list::-webkit-scrollbar-thumb, .point-list::-webkit-scrollbar-thumb {
  background: var(--border);
  border-radius: 8px;
}

.feature-item {
  background: #10141a;
  border: 1px solid var(--border);
  border-left-width: 3px;
  border-left-style: solid;
  border-left-color: var(--border);
  border-radius: 8px;
  padding: 7px 9px 7px 8px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.02);
  animation: card-in 180ms ease;
  transition: border-color var(--transition), background var(--transition);
}

.feature-item:hover {
  background: #141a22;
}

.feature-item-main {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.feature-item-actions {
  display: flex;
  justify-content: flex-end;
  gap: 2px;
  margin-top: 2px;
}

.feature-item-label {
  font-size: 12.5px;
  font-weight: 600;
}

.feature-item-meta {
  font-size: 11px;
  color: var(--text-dim);
}

.hole-list {
  margin-top: 6px;
  padding-left: 10px;
  border-left: 2px dashed var(--border);
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.hole-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 11.5px;
  color: var(--text-dim);
}

/* ---------------- Toasts ---------------- */

#toast-container {
  position: fixed;
  bottom: 20px;
  right: 20px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  z-index: 1000;
}

.toast {
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-left: 3px solid var(--accent);
  color: var(--text);
  padding: 12px 16px;
  border-radius: 8px;
  font-size: 12.5px;
  box-shadow: var(--shadow);
  animation: toast-in 220ms ease, toast-out 220ms ease 3.2s forwards;
  max-width: 320px;
}

.toast.error { border-left-color: var(--danger); }

@keyframes toast-in {
  from { opacity: 0; transform: translateX(20px); }
  to { opacity: 1; transform: translateX(0); }
}

@keyframes toast-out {
  to { opacity: 0; transform: translateX(20px); }
}

/* ---------------- Bestätigungs-Dialog (ersetzt native confirm()) ---------------- */

.confirm-dialog-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 2000;
  animation: confirm-overlay-in 150ms ease;
}

.confirm-dialog {
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: 20px;
  width: min(360px, calc(100vw - 32px));
  animation: confirm-dialog-in 180ms ease;
}

.confirm-dialog-message {
  color: var(--text);
  font-size: 13px;
  line-height: 1.5;
  white-space: pre-line;
  margin: 0 0 18px;
}

.confirm-dialog-actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
}

@keyframes confirm-overlay-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes confirm-dialog-in {
  from { opacity: 0; transform: translateY(8px) scale(0.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* ---------------- App-Info-/Installations-Popup (Logo oben links) ---------------- */
/* Selbes Overlay-/Dialog-Muster wie .confirm-dialog(-overlay) - eigene
   Klassen, weil der Inhalt (zentriert, Logo, Install-Button) anders
   aufgebaut ist, aber bewusst dieselbe Optik/Animation. */

.app-info-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 2000;
  animation: confirm-overlay-in 150ms ease;
}

.app-info-overlay.hidden { display: none; }

.app-info-dialog {
  position: relative;
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: 30px 22px 22px;
  width: min(280px, calc(100vw - 32px));
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 10px;
  animation: confirm-dialog-in 180ms ease;
}

.app-info-close {
  position: absolute;
  top: 8px;
  right: 8px;
}

.app-info-logo {
  width: 52px;
  height: 52px;
  border-radius: 11px;
  margin-bottom: 2px;
}

.app-info-dialog h2 {
  margin: 0;
  font-size: 16px;
}

.app-info-desc {
  margin: 0 0 4px;
  font-size: 12.5px;
  color: var(--text-dim);
  line-height: 1.5;
}

.app-info-install-btn {
  width: 100%;
}

.app-info-install-btn.hidden { display: none; }

.app-info-status {
  margin: 0;
  font-size: 12px;
  font-weight: 600;
  color: var(--accent);
}

.app-info-status.hidden { display: none; }

.app-info-ios-hint {
  margin: 2px 0 0;
  font-size: 11.5px;
  color: var(--text-dim);
  line-height: 1.5;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border-soft);
  border-radius: 8px;
  padding: 9px 10px;
}

.app-info-ios-hint.hidden { display: none; }
.app-info-ios-hint .ui-icon { vertical-align: -0.25em; color: var(--accent); }

/* ---------------- Misc ---------------- */

.hidden { display: none !important; }

.feature-designator {
  width: 100%;
  margin-top: 6px;
  background: var(--bg-elevated-2);
  color: var(--text);
  border: 1px solid var(--border-soft);
  border-radius: 6px;
  padding: 5px 7px;
  font-size: 11.5px;
  transition: border-color var(--transition), background var(--transition);
}

.feature-designator:focus {
  outline: none;
  border-color: var(--accent-dim);
  background: var(--bg-elevated);
}

.feature-designator::placeholder { color: var(--text-dim); }

/* ---------------- Leaflet tweaks ---------------- */

.leaflet-container {
  background: #0b0e13;
  font-family: inherit;
}

/* Segmente-Modus: Kartenkacheln aus (nur Vektorlinien auf hellem Grund) -
   erlaubt beliebig tiefes Zoomen ohne die sonst durch die Kachel-Auflösung
   begrenzte, dann schwarz erscheinende Ansicht, und macht Lücken zwischen
   Abschnitten besser sichtbar. */
#map.segment-mode-active {
  background: #eef1f5;
}

/* Adresssuche und Kataster-Button sind im Segmente-Modus fehl am Platz
   (eigene, unabhängige Kartenansicht ohne Kataster/Adress-Bezug) und werden
   ausgeblendet - ".segment-mode-active" sitzt auf #map selbst, daher über
   den Geschwister-Kombinator "~" auf die danach folgenden Geschwister
   #map-search/#cadastre-control angewendet. */
#map.segment-mode-active ~ #map-search,
#map.segment-mode-active ~ #cadastre-control {
  display: none;
}

/* Punkt-Marker: farbiges Symbol-Badge je PointType */
.iso-point-marker { background: transparent; border: none; }

.iso-point-badge {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: 2px solid rgba(0, 0, 0, 0.4);
  color: #06210f;
  font-size: 12px;
  font-weight: 800;
  line-height: 1;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.45);
}

/* Hover-Tooltip: zeigt Elementtyp (+ Name) für Polygon/Linie/Punkt */
.leaflet-tooltip.iso-tooltip {
  background: var(--bg-elevated-2);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 4px 9px;
  font-size: 11.5px;
  font-weight: 600;
  box-shadow: var(--shadow);
}

.leaflet-tooltip.iso-tooltip.leaflet-tooltip-top::before {
  border-top-color: var(--border);
}

/* scrollbar */
#field-list::-webkit-scrollbar { width: 8px; }
#field-list::-webkit-scrollbar-thumb {
  background: var(--border);
  border-radius: 8px;
}

/* ================================================================
 * Adresssuche + "Locate me" - oben rechts auf der Karte.
 * Gilt für Desktop UND Mobile identisch (kein Media-Query nötig).
 * ================================================================ */

#map-search {
  position: absolute;
  top: 16px;
  right: 16px;
  z-index: 600;
  width: min(300px, calc(100vw - 32px));
}

.map-search-box {
  display: flex;
  align-items: center;
  gap: 4px;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 4px 4px 4px 12px;
  box-shadow: var(--shadow);
}

#address-search-input {
  flex: 1;
  min-width: 0;
  background: transparent;
  border: none;
  color: var(--text);
  font-size: 12.5px;
  padding: 7px 0;
}

#address-search-input:focus { outline: none; }
#address-search-input::placeholder { color: var(--text-dim); }

#btn-locate-me {
  font-size: 15px;
  padding: 6px 8px;
  flex-shrink: 0;
}

#address-search-results {
  margin-top: 6px;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-radius: 10px;
  box-shadow: var(--shadow);
  overflow: hidden;
  max-height: 260px;
  overflow-y: auto;
}

.search-result-item {
  padding: 9px 12px;
  font-size: 12px;
  color: var(--text);
  cursor: pointer;
  border-bottom: 1px solid var(--border-soft);
}

.search-result-item:last-child { border-bottom: none; }
.search-result-item:hover { background: rgba(255, 255, 255, 0.06); }

.search-result-attribution {
  padding: 6px 12px;
  font-size: 10.5px;
  color: var(--text-dim);
  background: var(--bg-elevated);
}

/* ================================================================
 * Kataster (ALKIS-WFS) - Button + Panel oben links, unterhalb des
 * Leaflet-Zoom-Controls.
 * ================================================================ */

#cadastre-control {
  position: absolute;
  /* Früher unter den Leaflet-Zoom-Buttons platziert (top:94px) - die gibt
     es nicht mehr, daher jetzt auf gleicher Höhe wie die Adresssuche. */
  top: 16px;
  left: 16px;
  z-index: 600;
}

.cadastre-toggle-btn {
  height: 34px;
  padding: 0 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-radius: 8px;
  font-size: 12.5px;
  font-weight: 600;
  white-space: nowrap;
  /* Deutlich sichtbare Akzentfarbe statt der schwächeren geerbten
     Text-Farbe - "Kataster" soll auf einen Blick als "Kataster-Grenzen
     laden" erkennbar sein, nicht nur ein dunkler Fleck auf der Karte. */
  color: var(--accent);
  cursor: pointer;
  box-shadow: var(--shadow);
}

.cadastre-toggle-btn:hover { border-color: var(--accent-dim); }
.cadastre-toggle-btn.active-mode { border-color: var(--accent); background: var(--bg-elevated); }

#cadastre-panel {
  position: absolute;
  top: 0;
  /* Relativ zur tatsächlichen Button-Breite statt fest verdrahtet - sonst
     überlappt das Panel den Button, sobald der (z.B. durch Text statt
     Icon) breiter wird. */
  left: calc(100% + 8px);
  width: 260px;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-radius: 10px;
  box-shadow: var(--shadow);
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.cadastre-panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--text-dim);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.cadastre-panel-header-actions {
  display: flex;
  align-items: center;
  gap: 2px;
}

/* Such-Popup für die oid/idflurst-Nummernsuche - schwebt über dem
   Kataster-Panel, statt den Platz dauerhaft zu belegen. */
.cadastre-search-popup {
  position: absolute;
  top: 0;
  left: calc(100% + 8px);
  width: 260px;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-radius: 10px;
  box-shadow: var(--shadow);
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: 610;
}

.cadastre-search-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--text-dim);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.cadastre-search-hint {
  margin: 0;
  font-size: 11px;
  color: var(--text-dim);
  line-height: 1.4;
}

#cadastre-search-inputs {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.cadastre-search-input-row {
  display: flex;
  gap: 4px;
}

.cadastre-search-input {
  flex: 1;
  min-width: 0;
  background: var(--bg-elevated);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 6px 8px;
  font-size: 12.5px;
}

.cadastre-apply-separate {
  width: 100%;
}

.cadastre-load-row {
  display: flex;
  gap: 6px;
  align-items: center;
}
.cadastre-load-row .btn { flex: 1; }

.cadastre-checkbox {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11.5px;
  color: var(--text-dim);
  cursor: pointer;
}
.cadastre-checkbox input { margin: 0; }

.cadastre-target-field {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 11.5px;
  color: var(--text-dim);
}
.cadastre-target-field select {
  flex: 1;
  min-width: 0;
}

#cadastre-new-field-name {
  width: 100%;
  background: var(--bg-elevated);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 6px 8px;
  font-size: 12.5px;
}

.cadastre-status {
  font-size: 11.5px;
  color: var(--text-dim);
  line-height: 1.4;
}
.cadastre-status.warn { color: #fbbf24; }

/* Pflicht-Namensnennung für die LGLN-Flurstücksdaten (CC BY 4.0) - nur
   bei Niedersachsen nötig, NRW-Kataster braucht laut Datenlizenz
   Deutschland - Zero keine Namensnennung. */
.cadastre-attribution {
  font-size: 10.5px;
  color: var(--text-dim);
  line-height: 1.3;
}

/* Zeigt das automatisch anhand des Kartenausschnitts erkannte Bundesland an
   (ersetzt die frühere manuelle Auswahl per Dropdown). */
.cadastre-detected-state {
  font-size: 11.5px;
  color: var(--text-dim);
}
.cadastre-detected-state strong {
  color: var(--text);
}

#cadastre-selection-bar {
  display: flex;
  flex-direction: column;
  gap: 6px;
  border-top: 1px solid var(--border-soft);
  padding-top: 8px;
  font-size: 12px;
}

.cadastre-selection-actions {
  display: flex;
  gap: 6px;
}
.cadastre-selection-actions .btn { flex: 1; }

/* Parzellen-Layer auf der Karte: dezent, "amtlich" wirkend, klar von den
   eigenen gezeichneten Feldgrenzen unterscheidbar. */
.leaflet-interactive.cadastre-parcel {
  cursor: pointer;
}

/* Dauerhaft eingeblendete Flurstücks-Beschriftung (lagebeztxt). Bewusst
   ohne Sprechblasen-Pfeil/Schatten des Standard-Leaflet-Tooltips, damit
   viele benachbarte Flurstücke die Karte nicht zupflastern. */
.leaflet-tooltip.cadastre-permanent-label {
  background: rgba(15, 20, 26, 0.78);
  border: none;
  box-shadow: none;
  color: #e5e9f0;
  font-size: 10.5px;
  font-weight: 600;
  padding: 1px 5px;
  border-radius: 4px;
  pointer-events: none;
  white-space: nowrap;
}
.leaflet-tooltip.cadastre-permanent-label::before {
  display: none;
}

/* ================================================================
 * Mobile-Elemente: per Default versteckt, erscheinen nur unterhalb
 * des Breakpoints (siehe Media Query weiter unten). Auf Desktop
 * bleibt dadurch alles exakt wie zuvor.
 * ================================================================ */

.mobile-only-flex { display: none; }

#mobile-toolbar {
  display: none;
}

/* ================================================================
 * Mobile Layout (<= 860px). Nur additive Regeln unterhalb dieses
 * Breakpoints - alle Basis-/Desktop-Regeln oben bleiben unberührt.
 * ================================================================ */

@media (max-width: 860px) {

  #topbar {
    padding: 0 12px;
    height: 50px;
  }

  .brand-text { font-size: 13px; }
  .brand-logo { height: 26px; }

  /* Die textlastigen Aktionen wandern in die untere Mobile-Toolbar. */
  #topbar .topbar-actions #btn-import,
  #topbar .topbar-actions #btn-generate {
    display: none;
  }

  /* Kataster-Button wandert unten links über die Mobile-Toolbar, damit er
     mit dem Daumen erreichbar ist (statt oben links, wo er auf einem
     Handy weit vom natürlichen Grifpunkt entfernt liegt). */
  #cadastre-control {
    top: auto;
    left: 10px;
    bottom: calc(42px + var(--safe-bottom, 0px) + 10px);
  }

  /* Toast-Meldungen (z.B. "Feld importiert") landen sonst ganz unten und
     damit hinter/unter der Mobile-Toolbar - stattdessen knapp darüber. */
  #toast-container {
    bottom: calc(42px + var(--safe-bottom, 0px) + 10px);
  }

  /* Kleine Icon-Buttons (Loch zeichnen/hochladen, Segmente-Modus, Löschen,
     Ebenen ein-/ausblenden, Lücken-Navigation, ...) sind auf dem Desktop mit
     der Maus präzise genug zu treffen, auf dem Handy per Finger aber knapp -
     größere Klickfläche + größeres Icon (skaliert automatisch mit, siehe
     .ui-icon: width/height: 1em). */
  .icon-btn {
    padding: 9px 11px;
    font-size: 19px;
  }

  /* Panel wächst dadurch nach OBEN statt nach unten (sonst würde es hinter
     der Mobile-Toolbar verschwinden) - Höhe zusätzlich begrenzt, damit es
     auf kleinen Screens nicht über den oberen Bildschirmrand hinausragt. */
  #cadastre-panel {
    top: auto;
    bottom: 0;
    width: min(260px, calc(100vw - 90px));
    max-height: calc(100vh - 42px - var(--safe-bottom, 0px) - 90px);
    overflow-y: auto;
  }

  /* Auf schmalen Screens würde das Such-Popup rechts neben dem Kataster-
     Panel abgeschnitten - stattdessen als eigenes, vom Panel unabhängiges
     Overlay direkt über der Toolbar anzeigen. WICHTIG: position:fixed
     (nicht mehr relativ zum Panel) - sonst würde es vom neuen
     "overflow-y: auto" des Panels (s.u.) mit abgeschnitten, weil es per
     negativem Offset eigentlich AUSSERHALB der Panel-Box gerendert wird. */
  .cadastre-search-popup {
    position: fixed;
    left: 10px;
    right: 10px;
    top: auto;
    bottom: calc(42px + var(--safe-bottom, 0px) + 10px);
    width: auto;
    max-height: 70vh;
    overflow-y: auto;
    z-index: 1300;
  }

  /* Sidebar wird zum Off-Canvas-Drawer über der Karte. */
  #sidebar {
    position: fixed;
    top: 50px;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    min-width: 0;
    z-index: 1200; /* über Leaflets eigenen Controls (z-index: 1000) */
    transform: translateX(-100%);
    transition: transform 220ms ease;
    border-right: none;
  }

  #sidebar.mobile-open {
    transform: translateX(0);
  }

  .mobile-only-flex { display: inline-flex; }

  /* Seiten-Zoom beim Fokussieren/Verlassen eines Feldes: zwei Versuche, den
     nativen iOS-Auto-Zoom (ausgelöst durch Schrift < 16px) per JS nach dem
     Verlassen zurückzusetzen, waren auf echten iPhones nicht zuverlässig -
     das ist ein bekanntermassen fragiles Verhalten je nach iOS-Version.
     Robuster Ansatz: den nativen Zoom durch >=16px Schrift von vornherein
     gar nicht erst auslösen, und den gewünschten "Herein-Zoom"-Effekt beim
     Fokussieren stattdessen selbst per CSS-Transform nachbilden - :focus/
     :blur setzt das garantiert (browser-nativ, keine Timing-Race) wieder
     zurück, ganz ohne Viewport-Hacks. */
  .field-name,
  select,
  .feature-designator,
  #address-search-input {
    font-size: 16px;
  }

  .field-name:focus,
  select:focus,
  .feature-designator:focus,
  #address-search-input:focus {
    transform: scale(1.08);
    transform-origin: left center;
    transition: transform 120ms ease;
    position: relative;
    z-index: 5;
  }

  /* Suchfeld lässt links Platz für das Leaflet-Zoom-Control (+/-),
     damit sich beide auf schmalen Screens nicht überlappen. */
  #map-search {
    top: 10px;
    left: 54px;
    right: 10px;
    width: auto;
  }

  /* Map-Wrap braucht unten Platz für die Mobile-Toolbar. env() = 0 auf
     Geräten ohne Safe-Area (z.B. Android), auf iPhones (Home-Indicator /
     untere Safari-Symbolleiste) liefert es den tatsächlich reservierten
     Bereich - nur wirksam durch viewport-fit=cover im <meta viewport>. */
  #map-wrap { padding-bottom: calc(42px + var(--safe-bottom, 0px)); }
  #map { position: absolute; inset: 0 0 calc(42px + var(--safe-bottom, 0px)) 0; height: auto; }

  #mobile-toolbar {
    display: flex;
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: calc(42px + var(--safe-bottom, 0px));
    padding-bottom: var(--safe-bottom, 0px);
    background: var(--bg-elevated);
    border-top: 1px solid var(--border);
    z-index: 700;
  }

  .mtb-btn {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    background: transparent;
    border: none;
    color: var(--text-dim);
    font-size: 9.5px;
    font-weight: 600;
    cursor: pointer;
    /* Wirkt jetzt erkennbar wie ein Button statt wie ein statisches Bild:
       eigene abgerundete Tippfläche (statt über die volle Höhe/Breite
       durchgehend) mit sichtbarem Druck-Feedback. */
    margin: 4px 3px;
    border-radius: 10px;
    -webkit-tap-highlight-color: transparent;
    transition: background var(--transition), color var(--transition);
  }

  .mtb-btn:active { background: rgba(255, 255, 255, 0.09); }
  .mtb-btn.mtb-primary:active { background: rgba(74, 222, 128, 0.14); }
  .mtb-btn:disabled { opacity: 0.4; }
  .mtb-icon {
    /* display:flex statt des vorherigen reinen Inline-Texts: das darin
       verschachtelte SVG (.ui-icon) ist inline und hat als solches eine
       kleine, browserbedingte Baseline-Lücke darunter - dadurch wirkte das
       Icon leicht nach oben verschoben statt exakt zentriert. */
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
    line-height: 1;
  }
  .mtb-btn.mtb-primary { color: var(--accent); }
}

/* ================================================================
   Segmente-Modus: Feldgrenze aus zwei Quellen kombinieren
   ================================================================ */

#segment-mode-panel {
  position: absolute;
  top: 16px;
  right: 16px;
  bottom: 16px;
  width: 300px;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-radius: 10px;
  box-shadow: var(--shadow);
  padding: 12px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  z-index: 650;
  overflow-y: auto;
}

.segment-mode-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 13px;
  font-weight: 700;
}

/* Eigenständiger Button oben rechts in der Kartenansicht, NICHT Teil der
   Menüleiste/des Panels (siehe index.html) - auf Desktop links neben dem
   Segmente-Panel platziert (das selbst schon top:16/right:16 belegt),
   sonst würden sich beide überlappen. Auf Mobile ist das Panel ein
   Bottom-Sheet, dort kann der Button an derselben Fensterecke bleiben. */
#btn-segment-fit-bounds {
  position: absolute;
  top: 16px;
  right: 332px;
  z-index: 650;
  width: 34px;
  height: 34px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bg-elevated-2);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text);
  cursor: pointer;
  box-shadow: var(--shadow);
}

#btn-segment-fit-bounds:hover { border-color: var(--accent-dim); color: var(--accent); }
#btn-segment-fit-bounds.hidden { display: none; }


.segment-mode-hint {
  margin: 0;
  font-size: 12px;
  color: var(--text-dim);
  line-height: 1.5;
}

#segment-mode-import-row .btn { width: 100%; }

.segment-layer-list-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 2px;
  font-size: 11px;
  font-weight: 600;
  color: var(--text-dim);
  text-transform: uppercase;
  letter-spacing: 0.4px;
}

.segment-layer-list-header.hidden { display: none; }

.segment-layer-list {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.segment-layer-row {
  display: flex;
  align-items: center;
  gap: 6px;
  background: var(--bg-elevated);
  border-radius: 6px;
  padding: 4px 6px 4px 8px;
  font-size: 11px;
  cursor: pointer;
}

.segment-layer-row:hover {
  background: var(--accent-dim);
}

.segment-layer-swatch {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
}

.segment-layer-label {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.segment-layer-row.segment-layer-hidden .segment-layer-label {
  color: var(--text-dim);
  text-decoration: line-through;
}

/* Eigener Header für die Abschnittsliste (gleiche Optik wie
   .segment-layer-list-header) plus etwas Abstand nach oben - macht die
   Trennung zwischen "importierte Ebenen" und "ausgewählte Abschnitte"
   klarer, gerade wenn beide Listen viele Einträge haben. */
#segment-list-header {
  margin-top: 6px;
}

.segment-list {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.segment-list-row {
  display: flex;
  align-items: center;
  gap: 6px;
  background: var(--bg-elevated);
  border-radius: 6px;
  padding: 4px 6px 4px 8px;
  font-size: 11px;
  cursor: default;
}

.segment-list-row:hover {
  background: var(--accent-dim);
}

.segment-list-swatch {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
}

.segment-list-labels {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  line-height: 1.35;
}

.segment-list-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.segment-list-sublabel {
  font-size: 9.5px;
  color: var(--text-dim);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.segment-list-actions {
  display: flex;
  flex-shrink: 0;
  gap: 2px;
}

.segment-mode-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  border-top: 1px solid var(--border-soft);
  padding-top: 10px;
  margin-top: auto;
}
.segment-mode-actions .btn { width: 100%; }

/* Blättert durch die roten Verbindungslinien einer erzeugten Vorschau
   (Lücken, die automatisch geschlossen wurden) - siehe generateSegmentPreview. */
.segment-gap-nav {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  background: var(--bg-elevated);
  border: 1px solid var(--danger);
  border-radius: 6px;
  padding: 5px 6px;
  font-size: 11.5px;
  color: var(--danger);
}
.segment-gap-nav.hidden { display: none; }

/* Deutlich größer/fetter als ein normaler .icon-btn - dickerer Pfeil
   (stroke-width 3 statt 2), eigener sichtbarer Hintergrund/Rand statt nur
   Textfarbe, damit die Klickfläche zum Durchblättern der Lücken auf einen
   Blick erkennbar ist. */
.segment-gap-nav-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  background: rgba(248, 113, 113, 0.12);
  border: 1px solid var(--danger);
  border-radius: 6px;
  color: var(--danger);
  cursor: pointer;
}
.segment-gap-nav-btn .ui-icon { width: 18px; height: 18px; }
.segment-gap-nav-btn:hover { background: rgba(248, 113, 113, 0.28); }
.segment-gap-nav-btn:active { background: rgba(248, 113, 113, 0.4); }

#segment-gap-nav-label { min-width: 68px; text-align: center; font-weight: 700; }

/* Nur auf schmalen Screens sichtbar/wirksam (siehe .mobile-only-flex und
   die Media-Query unten) - klappt Ebenen-/Abschnittsliste ein, damit das
   Panel nach dem Importieren nicht fast die ganze Kartenansicht einnimmt.
   Auf dem Desktop bleibt der Button per Grundregel unten unsichtbar und
   #segment-mode-body dauerhaft offen wie bisher. */
.segment-mode-body-toggle {
  align-items: center;
  justify-content: space-between;
  width: 100%;
  background: var(--bg-elevated);
  border: 1px solid var(--border-soft);
  border-radius: 6px;
  padding: 7px 10px;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--text);
  cursor: pointer;
}
.segment-mode-body-toggle-chevron {
  width: 15px;
  height: 15px;
  flex-shrink: 0;
  transition: transform 150ms ease;
}
.segment-mode-body-toggle.expanded .segment-mode-body-toggle-chevron {
  transform: rotate(180deg);
}

@media (max-width: 860px) {
  #segment-mode-panel {
    left: 10px;
    right: 10px;
    width: auto;
    top: auto;
    bottom: calc(42px + var(--safe-bottom, 0px) + 10px);
    max-height: 60vh;
  }

  /* Panel ist hier ein Bottom-Sheet, verdeckt die Kartenbreite also nicht -
     normal zentrieren wie ohne Segmente-Modus. */
  .draw-hint.map-offset-right {
    left: 50%;
  }

  /* Panel ist hier ein Bottom-Sheet (siehe oben) - der Button muss also
     nicht mehr neben ihm ausweichen, sondern bleibt in der echten
     Fensterecke wie auf jedem anderen Mobile-Steuerelement auch. */
  #btn-segment-fit-bounds {
    right: 10px;
  }

  /* Standardmäßig eingeklappt (siehe app.js: wird direkt nach dem ersten
     Import automatisch eingeklappt) - Ebenen-/Abschnittsliste ist dann
     unsichtbar, das Panel schrumpft dadurch auf Header+Hinweis+Toggle. */
  #segment-mode-panel.segment-body-collapsed #segment-mode-body {
    display: none;
  }
}
