/* mapfit - was NUR mapfit hat: eigene Token, die Anordnung der Arbeitsfläche
   und die Zutaten des Kopfes. Farben, Schriften, Maße, Kopf, Knöpfe und
   Formulare kommen aus gestaltung/marke.css und gestaltung/basis.css
   (byte-identisch mit design-system/dist/) - dort ändern, nicht hier.
 *
 * Ladereihenfolge (index.html): marke.css → basis.css → gestaltung/hilfe.css →
 * dieses Blatt → werkzeuge.css → karte.css → zeichnen.css → werte.css →
 * listen.css → bedienung.css → drucken.css → hilfe.css → telefon.css.
 * Späteres überschreibt Früheres.
 */

/* --- Token, die es nur in mapfit gibt --------------------------------------
   Alles Übrige kommt aus gestaltung/marke.css; ein neuer allgemeiner Wert
   gehört dorthin. */
:root {
  /* Der Grund UNTER der Karte - blitzt beim Schwenken durch, bevor Kacheln da sind. */
  --kartengrund: #e8e8e8;

  /* NUR ZEIGER DES SYSTEMS: Chrome nimmt unter Windows default, pointer,
     crosshair, text, move, ew-/ns-/nesw-/nwse-resize, help, wait, progress und
     not-allowed vom Zeigerschema des Rechners (mit Rand). grab, grabbing,
     col-/row-resize, copy, alias, cell, zoom-in/-out zeichnet Chrome selbst hell
     ohne Rand - die nicht verwenden. Eigene Zeichnungen nur, wo das System
     nichts hat: Drehen, Einfügen, Entfernen. Jede Stelle benutzt die Variable,
     damit ein Wechsel eine Zeile kostet. */
  --cursor-rotate: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M12 5A7 7 0 1 1 5 12' fill='none' stroke='%23fff' stroke-width='6' stroke-linecap='round'/%3E%3Cpath d='M5 7.5L1.5 13L8.5 13Z' fill='%230969da' stroke='%23fff' stroke-width='1.5'/%3E%3Cpath d='M12 5A7 7 0 1 1 5 12' fill='none' stroke='%230969da' stroke-width='2.5' stroke-linecap='round'/%3E%3C/svg%3E") 12 12, default;
  --cursor-einfuegen: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='26'%3E%3Cpath d='M5 2.5v14.6l3.7-3.5 2.2 5.2 2.6-1.1-2.2-5.1h5.1z' fill='%23fff' stroke='%2324292f' stroke-width='1.8' stroke-linejoin='round'/%3E%3Cpath d='M15.5 6h9M20 1.5v9' stroke='%23fff' stroke-width='4' stroke-linecap='round'/%3E%3Cpath d='M15.5 6h9M20 1.5v9' stroke='%23000' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") 4 2, copy;
  --cursor-hand: pointer;        /* Karte schwenken (Leertaste, mittlere Taste, MapLibre) */
  --cursor-greift: move;         /* … und zieht */
  --cursor-spalte: ew-resize;    /* Leisten breiter und schmaler */
  --cursor-vierpfeil: move;      /* Objekt oder Griff bewegen */
  --cursor-loeschen: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='26'%3E%3Cpath d='M5 2.5v14.6l3.7-3.5 2.2 5.2 2.6-1.1-2.2-5.1h5.1z' fill='%23fff' stroke='%2324292f' stroke-width='1.8' stroke-linejoin='round'/%3E%3Cpath d='M15.5 6h9' stroke='%23fff' stroke-width='4' stroke-linecap='round'/%3E%3Cpath d='M15.5 6h9' stroke='%23000' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") 4 2, default;

  /* Quelle und Ziel einer Georeferenz: Gelb = Punkt IM BILD, Rot = Punkt IN
     DER KARTE. Gelten für Marke, Legende und Tabelle gleichermaßen. Sie gehen
     das Thema NICHT mit - sie liegen auf der Basiskarte des Anbieters. */
  --marke-quelle: #bf8700;
  --marke-ziel: #cf222e;

  /* Das Eigenschaften-Panel: breit genug, dass Breite und Länge einer
     Georeferenz nebeneinander in eine Zeile passen. */
  --sidebar-width: 390px;
  /* Die Werkzeugleiste: 40 px Knopf (Sinnbild und Taste nebeneinander) plus Luft. */
  --werkzeug-breite: 52px;

  /* Der Grund der KARTENAUFSÄTZE (Zoomanzeige, Quellenvermerk): halbdeckend,
     damit die Karte durchscheint. Token statt Literal, weil er das Thema
     mitgehen muss - die Schrift darin kommt aus --text. */
  --aufsatz: rgba(255, 255, 255, 0.92);
  /* Derselbe Grund, leiser - für den Quellenvermerk, der dauerhaft dasteht. */
  --aufsatz-leise: rgba(255, 255, 255, 0.78);
}

/* Kartengrund und Aufsätze im dunklen Thema - Machart wie in marke.css (--d-*
   und zwei Zuweisungen: Systemstand und ausdrückliche Wahl). Die Aufsätze
   gehen das Thema mit, weil ihre Schrift die des Themas ist; nur die Marken
   der Georeferenzen (--marke-quelle/--marke-ziel) bleiben fest. */
:root {
  --d-kartengrund: #0d100e;
  --d-aufsatz: rgba(27, 32, 29, 0.92);
  --d-aufsatz-leise: rgba(27, 32, 29, 0.82);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-thema="hell"]) {
    --kartengrund: var(--d-kartengrund);
    --aufsatz: var(--d-aufsatz);
    --aufsatz-leise: var(--d-aufsatz-leise);
  }
}
:root[data-thema="dunkel"] {
  --kartengrund: var(--d-kartengrund);
  --aufsatz: var(--d-aufsatz);
  --aufsatz-leise: var(--d-aufsatz-leise);
}

/* --- Die Anordnung ---------------------------------------------------------
   Kopf, Arbeitsfläche, Fuß übereinander; die Fläche dazwischen nimmt den Rest. */
body { display: flex; flex-direction: column; }
main { flex: 1; display: flex; min-height: 0; position: relative; }

/* Die Karte nimmt den Platz ZWISCHEN den Leisten, damit keine Leiste die
   Kartenbedienung überdeckt. Beim Klappen und Ziehen zieht map.resize() nach. */
#map-wrap { flex: 1; position: relative; min-width: 0; }

/* Die Klapp-Streifen der Seitenleisten bleiben stehen, wenn die Leiste zu ist -
   sonst gäbe es keinen Griff, sie wiederzuholen. Zugleich Zieh-Griff für die Breite. */
.leisten-griff {
  flex: none; width: 16px; position: relative; z-index: 21;
  background: var(--flaeche-tief); border-right: 1px solid var(--border);
}
#panel-griff { border-right: 0; border-left: 1px solid var(--border); cursor: var(--cursor-spalte); }
#ebenen-griff { cursor: var(--cursor-spalte); }
#hilfe-griff { cursor: var(--cursor-spalte); }
/* Solange eine Leiste gezogen wird, gilt der Spaltenzeiger ÜBERALL: Der Zeiger
   verlässt beim Ziehen den schmalen Griff, und jedes Element darunter brächte
   seinen eigenen Zeiger mit. */
body.leiste-zieht, body.leiste-zieht * { cursor: var(--cursor-spalte) !important; }
body.leiste-zieht { user-select: none; }
/* Der Hilfe-Griff (gestaltung/hilfe.css) nimmt dort col-resize - hier
   überstimmt, ohne dist/ anzufassen; col-resize zeichnet Chrome ohne Rand. */
body.hilfe-zieht, body.hilfe-zieht * { cursor: var(--cursor-spalte) !important; }
/* Punktierte Griffspur über dem Klapp-Knopf; unterm Zeiger färbt sich der Streifen. */
#ebenen-griff::before, #panel-griff::before {
  content: ''; position: absolute; left: 50%; top: 18%;
  width: 4px; height: 34px; transform: translateX(-50%);
  border-left: 2px dotted var(--muted); border-right: 2px dotted var(--muted);
}
#ebenen-griff:hover, #panel-griff:hover { background: var(--flaeche-hover); }
.leisten-griff button {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
  width: 16px; height: 48px; padding: 0; border: 1px solid var(--border); border-radius: 5px;
  background: var(--flaeche); color: var(--text); font-size: 13px; font-weight: 700;
  cursor: pointer; box-shadow: var(--schatten-klein);
}
.leisten-griff button:hover { color: var(--gruen-tief); border-color: var(--gruen-tief); }
#panel.leiste-zu { display: none; }
/* Zugeklappt bekommt der Streifen den Hauch der Marke: Er ist dann der einzige
   Griff zur Leiste und darf nicht mit dem Kartenrand verschwimmen. */
main:has(#ebenen-panel.leiste-zu) #ebenen-griff,
main:has(#panel.leiste-zu) #panel-griff { background: var(--gruen-hauch); }
main:has(#ebenen-panel.leiste-zu) #ebenen-griff button,
main:has(#panel.leiste-zu) #panel-griff button { color: var(--gruen-tief); border-color: var(--gruen-tief); }
/* Auch die Hilfe-Leiste braucht den z-index - sonst malt die absolute Karte sie zu. */
#hilfe-griff, #hilfe-panel { position: relative; z-index: 21; }
#map { position: absolute; inset: 0; }

/* Der Ebenenbaum steht OBEN in der Leiste rechts, darunter die Eigenschaften
   des Gewählten. Zugeklappt bleiben Kopf und Kurzzeile - der Platz gehört dann
   dem Eigenschaftenfeld. */
#ebenen-panel {
  /* So hoch wie sein Inhalt, höchstens die halbe Leiste - NICHT schrumpfend,
     sonst drückt ihn das Eigenschaftenfeld auf ein paar Zeilen. */
  flex: 0 0 auto; max-height: 50%; box-sizing: border-box;
  display: flex; flex-direction: column; min-height: 0;
  border-bottom: 1px solid var(--border);
}
/* Von Hand gezogen (#ebenen-teiler, main.js): Die Höhe steht als Stil am
   Bereich; er darf dann mehr als die Hälfte haben, lässt dem Eigenschaftenfeld
   aber immer ein Stück. Zugeklappt gilt sie nicht. */
#ebenen-panel.hat-hoehe { max-height: calc(100% - 130px); }
/* Nie kleiner als EINE Ebenenzeile samt Kopf und Rollmarke: main.js misst das
   und legt es als --ebenen-min ab. min-height schlägt max-height - gewollt. */
#ebenen-panel:not(.leiste-zu) { min-height: var(--ebenen-min, 90px); }
#ebenen-panel.leiste-zu { height: auto !important; }
#ebenen-teiler {
  flex: 0 0 9px; position: relative; cursor: ns-resize; touch-action: none;
  border-bottom: 1px solid var(--border); background: var(--flaeche-leiste);
}
#ebenen-teiler::before {
  content: ""; position: absolute; left: 50%; top: 3px; width: 36px; height: 3px;
  margin-left: -18px; border-radius: 2px; background: var(--muted); opacity: .45;
}
#ebenen-teiler:hover, #ebenen-teiler:focus-visible, body.teiler-zieht #ebenen-teiler { background: var(--flaeche-hover); }
#ebenen-teiler:hover::before, body.teiler-zieht #ebenen-teiler::before { opacity: .9; }
/* Zugeklappt gibt es nichts zu teilen: Der Griff bleibt stehen und ist gesperrt
   (ausgrauen statt verstecken). */
#ebenen-panel.leiste-zu + #ebenen-teiler { pointer-events: none; opacity: .4; }
body.teiler-zieht, body.teiler-zieht * { cursor: ns-resize !important; }
body.teiler-zieht { user-select: none; }
body.ansicht #ebenen-teiler, body.praesentation #ebenen-teiler { display: none; }
#ebenen-panel #ebenen { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; }
#ebenen-panel .ebenen-inhalt { flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden; }
#ebenen-panel.leiste-zu .ebenen-inhalt { display: none; }
/* Zugeklappt gibt die KURZZEILE nach, nicht die Überschrift - sonst drückt ein
   langer Ebenenname die Überschrift auf „E…". */
#ebenen-panel.leiste-zu .ebenen-kopf h2 { flex: none; overflow: visible; }

/* DIE ROLLMARKE (js/rollmarke.js): sagt, wie viele Zeilen hinter dem Rand des
   Baums liegen; ein Klick rollt hin. */
#ebenen-panel #ebenen { position: relative; }
.rollmarke {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
  font: inherit; font-size: var(--gr-klein); line-height: 1; letter-spacing: .02em;
  padding: 4px 10px; border: 0; border-top: 1px solid var(--border);
  background: var(--flaeche-leiste); color: var(--gruen-tief); cursor: pointer; text-align: center;
}
.rollmarke-oben { bottom: auto; border-top: 0; border-bottom: 1px solid var(--border); }
.rollmarke:hover { background: var(--flaeche-hover); }
.rollmarke[hidden] { display: none; }
#ebenen-panel.leiste-zu .rollmarke, body.ansicht .rollmarke, body.praesentation .rollmarke { display: none; }
.ebenen-klapp {
  font: inherit; letter-spacing: inherit; text-transform: inherit; color: inherit;
  border: 0; background: none; padding: 0; cursor: pointer; white-space: nowrap;
}
.ebenen-klapp::after { content: " ▾"; color: var(--muted); }
.ebenen-klapp[aria-expanded="false"]::after { content: " ▸"; }
.ebenen-klapp:hover { color: var(--gruen-tief); }
.ebenen-kurz {
  flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: var(--muted); font-size: var(--gr-neben);
}

/* Das Panel rechts: Ebenenbaum und Eigenschaftenfeld, das für sich scrollt.
   Einklappbar über den Griff-Streifen, Breite ziehbar. */
#panel {
  flex: none; width: var(--sidebar-width); box-sizing: border-box;
  position: relative; z-index: 21;   /* über der Karte, die darunter durchläuft */
  display: flex; flex-direction: column; min-height: 0;
  border-left: 1px solid var(--border);
  background: var(--flaeche-leiste);
  accent-color: var(--gruen-tief);
}
#eigenschaften {
  flex: 1 1 auto; min-height: 0; overflow-y: auto;
  /* Kein Quer-Scrollen: Manche Regler messen sich 4 px breiter als ihre Zeile. */
  overflow-x: hidden;
  padding: var(--polster);
}
/* --- Was mapfit im Kopf zusätzlich hat -------------------------------------
   Der Rest des Kopfes steht in basis.css. */

/* Die Suche gibt als Erstes nach: Ein halbes Suchfeld ist benutzbar, ein
   halber Knopf nicht. */
#suchleiste { flex: 0 1 420px; }

/* Das Blatt der Marke: Raster und Wort kommen aus dem System, nur die Farbe
   steht hier, weil es .marke-blatt heißt und nicht .marke-akzent. */
header .marke-blatt { fill: var(--gruen); stroke: var(--gruen); }
header .brand:hover .marke-blatt { fill: var(--gruen-hell); stroke: var(--gruen-hell); }
/* Das Wort der Marke weicht schon MIT dem kompakten Kopf (720 px), nicht erst
   unter 480 wie im System - mapfits Kopf ist voll. Dieselbe Abfrage wie
   css/telefon.css (samt flachem Telefon quer); gemeinsam ändern. */
@media (max-width: 720px), ((max-height: 520px) and (hover: none)) {
  header .brand > span { display: none; }
}

/* Die Wegmarke im Kopf: der Sicherungsstand („zuletzt gesichert 14:03"). */
header .crumb { color: var(--tinte-leise); font-size: var(--gr-bedienung); white-space: nowrap; }

/* NOCH NICHT GESPEICHERT: gelber Punkt am Speichern-Knopf - auch am Telefon,
   wo die Sicherungszeile nur im Menü steht. Klasse setzt main.js (setzeUngespeichert). */
#btn-save { position: relative; }
body.ungespeichert #btn-save::after {
  /* Klein und in der Ecke - er darf das Sinnbild nicht verdecken. */
  content: ""; position: absolute; top: 1px; right: 1px; width: 7px; height: 7px;
  border-radius: 50%; background: #f5b73a; border: 1.5px solid var(--tinte, #0f1a12);
}

/* Der Quellenvermerk steht dauerhaft sichtbar (nicht hinter einem ⓘ-Knopf) -
   so verlangen es die Nutzungsbedingungen der Anbieter. Klein, höchstens die
   halbe Breite, Umbruch statt Abschneiden, aber lesbar. */
.maplibregl-ctrl-attrib {
  font-size: var(--gr-winzig); line-height: 1.35;
  max-width: min(52ch, 50%);
}
/* Zwei Klassen, weil maplibre sein Stylesheet zur Laufzeit als <style> HINTER
   unsere <link>s schreibt und bei gleichem Gewicht gewinnt. Der Grund geht
   das Thema mit. */
.maplibregl-ctrl-attrib.maplibregl-ctrl { background: var(--aufsatz-leise); color: var(--text); }
/* Auch die Links mit zwei Klassen - MapLibre färbt sie sonst dunkelgrau,
   unlesbar im dunklen Thema. */
.maplibregl-ctrl-attrib.maplibregl-ctrl a { color: inherit; }

/* --- Die Ansicht per Leselink (js/ansicht.js) ------------------------------
   Eine ANDERE Oberfläche, kein Zustand - deshalb ausnahmsweise display:none
   statt Ausgrauen. Die Klasse setzt main.js aus der Adresse, noch vor der
   Karte, damit nichts aufblitzt. */
body.ansicht #ebenen-panel, body.ansicht #ebenen-griff,
body.ansicht #panel, body.ansicht #panel-griff,
body.ansicht #hilfe-griff, body.ansicht #hilfe-panel,
body.ansicht header .header-group, body.ansicht header .kopf-menue,
body.ansicht header #btn-suche, body.ansicht header #btn-hilfe,
body.ansicht header #save-state, body.ansicht header #suchleiste,
body.ansicht #karten-kopf .kopf-mitte,
body.ansicht .gcp-marker { display: none !important; }
/* DIE SEITE ROLLT NIE: mapfit ist eine Fläche, Karte und Leisten rollen für
   sich. Sonst lässt ein halber Pixel Überstand (125-%-Skalierung) eine
   Rollleiste erscheinen, die Karte bekommt ein resize, die Leiste geht wieder -
   ein endloses Zittern. Nicht beim Drucken (würde das zweite Blatt
   abschneiden) und nicht in der Anmeldemaske (gewöhnliche Seite). */
@media screen {
  html, body { overflow: hidden; }
  body.anmeldung { overflow: auto; }
}

/* --- Die Präsentation (js/praesentation.js) --------------------------------
   Nur die Karte, für Wandmonitor und Beamer: auch der Kopf geht. Es bleiben
   Maßstab/Zoom, Quellenvermerk (Lizenz) und das Schild. display:none wie oben. */
body.praesentation header,
body.praesentation #ebenen-panel, body.praesentation #ebenen-griff,
body.praesentation #panel, body.praesentation #panel-griff,
body.praesentation #hilfe-griff, body.praesentation #hilfe-panel,
body.praesentation #modusleiste,
body.praesentation #karten-kopf .kopf-mitte,
body.praesentation .gcp-marker { display: none !important; }
#praesentation-schild, #praesentation-ende { display: none; }
/* Der Ausgang ist ein Glied des Kartenkopfs (liegt er frei, deckt er die
   Zoomanzeige zu): zuerst in der Reihe, im Kleid der Zoomanzeige
   (#scale-badge, listen.css). */
body.praesentation #praesentation-ende {
  display: inline-flex; align-items: center; order: -1; z-index: 9;
  background: var(--aufsatz); border: 1px solid var(--border); color: var(--text);
  border-radius: var(--rund); padding: 5px 9px; font-size: var(--gr-neben); font-weight: 600;
  min-height: 0; height: auto; line-height: 1.3;
}
body.praesentation #praesentation-ende:hover, body.praesentation #praesentation-ende:focus-visible { background: var(--flaeche); }
/* Das Schild teilt sich die Reihe des Kartenkopfs mit der Zoomanzeige (bei
   Enge untereinander). Keine Klicks - darunter muss die Karte schwenkbar sein. */
body.praesentation #praesentation-schild:not([hidden]) {
  display: block; max-width: min(60ch, 70%); padding: 4px 10px;
  border-radius: var(--rund-klein); background: var(--aufsatz-leise);
  color: var(--text); font-size: var(--gr-neben); font-weight: 600;
  pointer-events: none;
}
#karten-kopf > #praesentation-schild { pointer-events: none; }
body.ansicht #ansicht-kopf, body.ansicht #ansicht-basiskarte { display: inline-flex; align-items: center; }
body.ansicht #ansicht-kopf { color: var(--tinte-text); font-weight: 600; }
/* Die Basiskartenwahl im Kopf: derselbe Knopf wie im Eigenschaftenfeld
   (bedienung.css, .karte-wahl), nur nicht über die ganze Breite. */
body.ansicht #ansicht-basiskarte .karte-wahl { width: auto; min-width: 180px; padding-top: 3px; padding-bottom: 3px; }
/* „+ Ebene …" bleibt eine Zeile, sonst bricht es in der schmalen Leiste um. */
.ebenen-kopf .ebene-neu { flex: none; }
.ebenen-kopf .stapel-neu { white-space: nowrap; }
