/* Andrang Design-System — gemeinsame Basis aller Seiten */
:root{
  --bg:#0d1730;
  --bg-raised:#101d38;
  --bg-input:#0a1226;
  --border:#26355c;
  --text:#ffffff;
  --text-dim:#9fb3e8;
  --text-faint:#8093c4;   /* >=4.5:1 auf --bg und --bg-raised (WCAG AA) */
  --primary:#1f7a33;       /* weiß darauf 5.4:1 (WCAG AA; #2e9e44 lag bei 3.45:1) */
  --primary-hover:#23863a; /* weiß darauf 4.6:1 */
  --secondary:#2e2560;
  --secondary-hover:#3a2f78;
  --danger:#7a2b24;
  --danger-hover:#93362d;
  --neutral:#3a4763;        /* neutrales Grau-Blau: Schließen/Verwerfen (nicht die Marken-Aktion) */
  --neutral-hover:#495a7d;
  --accent:#f2c12e;
  --on-accent:#101d38;            /* Textfarbe AUF dem Akzent (aktive Buttons/Chips) */
  /* Karten-Farben (MapLibre + Marker) — V-75: zentral, damit ein Schema-Wechsel
     auch die Karte mitnimmt. glmap.js liest genau diese Variablen. */
  --map-bg:#0e1a34;            /* Wasser / Karten-Hintergrund */
  --map-land:#1a2947;          /* Landfläche */
  --map-country:#f2c12e;       /* Ländergrenzen */
  --map-region:#33456e;        /* Regionsgrenzen */
  --map-road-0:#7a8fc2; --map-road-1:#6d81b4; --map-road-2:#4d5f8f; --map-road-3:#44557f;
  --map-rail:#6cc9bf;          /* Fernbahn/Fähre */
  --map-rail-dim:#4fa89e;      /* Nahverkehr */
  --map-marker-festival:#f2c12e;
  --map-marker-concert:#9d6ee0;
  --map-marker-past:#5f719c;
  --map-marker-stroke:#0e1a34; /* Pin-Rand */
  --map-label:#ffffff;         /* Pin-Beschriftung */
  --map-label-shadow:#0e1a34;
  --radius:8px;
  --radius-sm:5px;
  --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:20px; --space-6:24px;
  --shadow:0 8px 24px rgba(0,0,0,.45);
}

/* ── Farbschemen (V-75/V-77) ───────────────────────────────────────────────
   „night" ist das Standard-:root oben und bleibt UNANGETASTET (Andrang-Original).
   Umschalten global über <html data-scheme="day|dusk|oled"> (core.js:
   Andrang.setScheme). Kontraste nach WCAG AA geprüft (Fließtext ≥4.5:1, UI/
   Grafik ≥3:1 — Basis von Apple HIG / Material). Im Editor /theme.html anpassbar. */
:root[data-scheme="day"]{        /* Strand — weiß/gelb/blau, hell */
  --bg:#e9f6ff;
  --bg-raised:#ffffff;
  --bg-input:#ffffff;
  --border:#bcd8ea;
  --text:#0b2b40;
  --text-dim:#38637e;
  --text-faint:#4a6f88;             /* >=4.5:1 auf #fff und --bg (WCAG AA) */
  --primary:#1f7a33; --primary-hover:#23863a;
  --secondary:#dcecf7; --secondary-hover:#cbe3f2;
  --danger:#b23b30; --danger-hover:#c9483b;
  --neutral:#c6d9e6; --neutral-hover:#b1cadc;
  --accent:#a87400;                 /* Sonnen-Amber, 3.7:1 auf hellem BG (AA) */
  --on-accent:#ffffff;              /* heller Text auf dem dunklen Amber-Akzent (4.1:1) */
  --shadow:0 8px 24px rgba(30,80,120,.18);
  --map-bg:#8fd3ea;                 /* Wasser hellblau */
  --map-land:#f5edd4;               /* Sand */
  --map-country:#e0a72c;
  --map-region:#cfe3d9;
  --map-road-0:#8a97a3; --map-road-1:#9fabb5; --map-road-2:#b4bec6; --map-road-3:#c3ccd2;
  --map-rail:#51b181; --map-rail-dim:#51b181;
  --map-marker-festival:#f2a900;
  --map-marker-concert:#2f79c9;
  --map-marker-past:#9ab0c2;
  --map-marker-stroke:#ffffff;
  --map-label:#0b2b40;
  --map-label-shadow:#ffffff;
}
:root[data-scheme="dusk"]{       /* Dämmerung — kühles Twilight-Slate + warmer Sonnen-Akzent */
  --bg:#2b3140;
  --bg-raised:#353c4d;
  --bg-input:#232834;
  --border:#49526a;
  --text:#f5f7fb;
  --text-dim:#c4cddb;             /* 6.9:1 auf --bg-raised (AA) */
  --text-faint:#a0abbe;           /* 4.8:1 auf --bg-raised (AA) */
  --primary:#1f7a33; --primary-hover:#23863a;
  --secondary:#3a4258; --secondary-hover:#47506a;
  --danger:#b23b30; --danger-hover:#c9483b;
  --neutral:#414a5e; --neutral-hover:#505b72;
  --accent:#ff9e64;              /* warmer Sonnenuntergang-Akzent, 6.4:1 auf --bg (AA) */
  --on-accent:#101d38;           /* dunkler Text auf dem hellen Korall-Akzent (8.2:1) */
  --shadow:0 8px 24px rgba(0,0,0,.45);
  --map-bg:#2f3a4e;
  --map-land:#3c4356;
  --map-country:#ff9e64;
  --map-region:#4e576e;
  --map-road-0:#8f9db0; --map-road-1:#7d8ba0; --map-road-2:#66748a; --map-road-3:#59667c;
  --map-rail:#8fd0c8; --map-rail-dim:#6fb0a8;
  --map-marker-festival:#ffb454;
  --map-marker-concert:#8ea2ff;
  --map-marker-past:#7f8ba0;
  --map-marker-stroke:#2b3140;
  --map-label:#ffffff;
  --map-label-shadow:#2b3140;
}
:root[data-scheme="oled"]{       /* OLED — true black, hoher Kontrast (spart Strom, kein Halo) */
  --bg:#000000;
  --bg-raised:#000000;           /* full black: Karten/Flächen via --border abgegrenzt */
  --bg-input:#000000;
  --border:#2c2c30;
  --text:#f2f2f4;                 /* leicht gebrochenes Weiß (weniger Halation) */
  --text-dim:#b3b3b8;             /* 9:1 auf --bg-raised (AA) */
  --text-faint:#8f8f96;           /* 5.9:1 auf --bg-raised (AA) */
  --primary:#1f7a33; --primary-hover:#23863a;
  --secondary:#1a1a1e; --secondary-hover:#232329;
  --danger:#b23b30; --danger-hover:#c9483b;
  --neutral:#262629; --neutral-hover:#33333a;
  --accent:#f2c12e;               /* Marken-Gelb, 12.4:1 auf Schwarz (AAA) */
  --on-accent:#101d38;            /* dunkler Text auf dem gelben Akzent (9.9:1) */
  --shadow:0 8px 24px rgba(0,0,0,.7);
  --map-bg:#3a3a3a;               /* Wasser: dunkles Grau, hebt sich vom schwarzen Land ab */
  --map-land:#000000;             /* Land/Basis full black */
  --map-country:#f2c12e;
  --map-region:#2a2a30;
  --map-road-0:#3a3a42; --map-road-1:#303038; --map-road-2:#262630; --map-road-3:#20202a;
  --map-rail:#37c0b6; --map-rail-dim:#2a8f88;
  --map-marker-festival:#f2c12e;
  --map-marker-concert:#b98cff;
  --map-marker-past:#6a6a72;
  --map-marker-stroke:#000000;
  --map-label:#ffffff;
  --map-label-shadow:#000000;
}

*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
/* Das hidden-Attribut MUSS verstecken – sonst überschreibt jede display:flex/grid-Regel
   die UA-Voreinstellung (display:none) und das Element bleibt sichtbar. Häufige Falle. */
[hidden]{display:none!important}
body{background:var(--bg);color:var(--text);font-family:Arial,Helvetica,sans-serif;
  line-height:1.45;padding:var(--space-3) var(--space-2) 40px}

/* Neon-Glow (gelb, --accent) für Logos: Andrang-A, Festival-Logos, später Band-Logos.
   drop-shadow folgt dem Alphakanal – transparente PNGs/SVGs leuchten in Kontur. */
.neon{filter:drop-shadow(0 0 5px rgba(242,193,46,.85))
  drop-shadow(0 0 16px rgba(242,193,46,.45)) drop-shadow(0 0 40px rgba(242,193,46,.22))}

/* Karten & Layout */
.card{background:var(--bg-raised);border:1px solid var(--border);
  border-radius:var(--radius);padding:var(--space-6);box-shadow:var(--shadow)}
.wrap-narrow{max-width:420px;margin:8vh auto 0}
.wrap{max-width:820px;margin:0 auto}

/* Buttons: mind. 44px Tap-Ziel */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:44px;padding:10px 20px;border:none;border-radius:var(--radius-sm);
  font-size:14px;font-weight:700;font-family:inherit;cursor:pointer;
  color:var(--text);background:var(--secondary);text-decoration:none}
.btn:hover{background:var(--secondary-hover)}
.btn-primary{background:var(--primary)}
.btn-primary:hover{background:var(--primary-hover)}
.btn-danger{background:var(--danger)}
.btn-danger:hover{background:var(--danger-hover)}
/* Warn-Stufe zwischen neutral und danger (z.B. „Absagen" neben „Abbrechen") */
.btn-warn{background:#7a5a14}
.btn-warn:hover{background:#94701c}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,
button:focus-visible,textarea:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px}

/* Formulare: Labels, Inline-Fehler */
.field{margin-bottom:var(--space-4)}
.field label{display:block;font-size:13px;font-weight:700;color:var(--text-dim);
  margin-bottom:var(--space-1)}
.field input,.field select{width:100%;min-height:44px;padding:10px 12px;
  font-size:16px;font-family:inherit;color:var(--text);
  background:var(--bg-input);border:1px solid var(--border);
  border-radius:var(--radius-sm)}
.field input::placeholder{color:var(--text-faint)}
.field .err{display:none;color:#ff9d94;font-size:12.5px;margin-top:var(--space-1)}
.field.invalid input{border-color:var(--danger-hover)}
.field.invalid .err{display:block}

/* ============================================================================
   Komponenten – gemeinsamer Vorrat. NICHT pro Seite neu erfinden: Wer ein
   Auswahl-Menü, ein Popover, ein Modal oder Toggle-Chips braucht, nimmt DIESE
   Klassen. So bleibt die Bedienung überall gleich und modern.
   ============================================================================ */

/* .chip-toggle — Segmented/Umschalt-Chip (an/aus), z.B. Typ- oder Genre-Filter.
   (Name bewusst nicht ".chip": das ist auf einzelnen Seiten anders belegt.) */
.chip-toggle{min-height:36px;padding:6px 14px;border-radius:18px;border:1px solid var(--border);
  background:var(--bg-raised);color:var(--text-dim);font-size:13px;font-weight:700;
  font-family:inherit;cursor:pointer}
.chip-toggle:hover{border-color:var(--accent)}
.chip-toggle[aria-pressed="true"]{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}

/* .pickbtn — Button, der ein Popover/Menü öffnet (sieht aus wie ein Select). */
.pickbtn{min-height:44px;padding:8px 12px;border-radius:var(--radius-sm);
  border:1px solid var(--border);background:var(--bg-input);color:var(--text);
  font-size:14px;font-family:inherit;cursor:pointer;text-align:left;white-space:nowrap}
.pickbtn:hover{border-color:var(--accent)}
.pickbtn[aria-pressed="true"]{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}

/* .popover — leichtes Aufklapp-Panel (Kalender, Mehrfachauswahl …). */
.popover{max-width:340px;margin:var(--space-2) auto 0;background:var(--bg-raised);
  border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);
  box-shadow:0 12px 40px rgba(0,0,0,.5)}
.popover-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.popover-head b{font-size:14px}
.popover-foot{display:flex;align-items:center;gap:8px;margin-top:var(--space-3)}
.popover-info{flex:1;font-size:12px;color:var(--text-dim)}
.popover-search{width:100%;min-height:44px;padding:8px 12px;border-radius:var(--radius-sm);
  border:1px solid var(--border);background:var(--bg-input);color:var(--text);
  font-size:16px;font-family:inherit;margin-bottom:8px}
.popover-list{max-height:240px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}
/* V-82: native <button>, darum Theme-Farben explizit setzen — sonst UA-Default
   (dunkler Text) → im dunklen Schema „black on black" und beim Hover unlesbar. */
.popover-opt{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:var(--radius-sm);
  cursor:pointer;font-size:13.5px;width:100%;text-align:left;border:none;background:none;
  color:var(--text);font-family:inherit}
.popover-opt:hover{background:var(--bg-input)}
.popover-opt.sel{color:var(--accent);font-weight:700}
.popover-opt input{width:18px;height:18px;flex:0 0 auto}
.popover-opt .n{margin-left:auto;color:var(--text-faint);font-size:12px}

/* .modal — mittiges Dialogfenster über einem abdunkelnden Overlay. */
.modal-wrap{position:fixed;inset:0;background:rgba(0,0,0,.6);display:flex;
  align-items:center;justify-content:center;padding:var(--space-4);z-index:200}
.modal{max-width:400px;background:var(--bg-raised);border:1px solid var(--border);
  border-radius:var(--radius);padding:var(--space-6);
  /* Nie höher als der Viewport: lange Formulare scrollen IM Modal,
     die Buttons am Ende bleiben auf Phones erreichbar. */
  max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);overflow-y:auto}
.modal h2{font-size:18px;margin-bottom:var(--space-3)}
.modal p{color:var(--text-dim);font-size:14px;line-height:1.6}
.modal-btns{display:flex;gap:var(--space-3);justify-content:flex-end;margin-top:var(--space-5)}

/* Meldungen */
.msg{display:none;border-radius:var(--radius-sm);padding:10px 12px;
  font-size:13.5px;margin-bottom:var(--space-4)}
.msg.ok{display:block;background:#12331c;border:1px solid #2e9e44;color:#a5e8b3}
.msg.error{display:block;background:#3a1512;border:1px solid #93362d;color:#ffb4ac}
.msg.info{display:block;background:#122240;border:1px solid var(--border);color:var(--text-dim)}

/* Spinner */
.spinner{display:inline-block;width:16px;height:16px;border-radius:50%;
  border:2px solid rgba(255,255,255,.3);border-top-color:#fff;
  animation:spin .7s linear infinite;vertical-align:-3px}
@keyframes spin{to{transform:rotate(360deg)}}

/* Typografie */
h1{font-size:20px;margin-bottom:var(--space-2)}
.sub{color:var(--text-dim);font-size:13.5px;margin-bottom:var(--space-4)}
.foot{text-align:center;color:var(--text-faint);font-size:11px;margin-top:var(--space-3);line-height:1.5}
/* Wie .foot, aber footer.js lässt es stehen (für Hinweise, die bleiben müssen) */
.hint-foot{text-align:center;color:var(--text-faint);font-size:11px;margin-top:var(--space-3);line-height:1.5}
/* Gemeinsamer Footer (footer.js), deutlich abgesetzt vom Seiteninhalt */
.appfoot{display:block;text-align:center;color:var(--text-faint);font-size:11.5px;
  line-height:1.8;margin:calc(var(--space-6) * 2.5) auto var(--space-4);padding-top:var(--space-6);
  max-width:640px;border-top:1px solid var(--border)}
.appfoot a{color:var(--text-faint);text-decoration:none}
.appfoot a:hover{color:var(--text-dim);text-decoration:underline}

/* Footer-Links (Impressum, GitHub, Lizenz) */
.foot a{color:var(--text-faint);text-decoration:none}
.foot a:hover{color:var(--text-dim);text-decoration:underline}

/* Burger-Navigation (nav.js): schwebender Button + Bottom Sheet */
/* Seiten mit Burger-Button: Footer bekommt Luft nach unten, nichts klemmt unterm Button */
body.has-navfab{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
#navFab{position:fixed;bottom:calc(16px + env(safe-area-inset-bottom));right:16px;z-index:150;
  width:56px;height:56px;border-radius:50%;border:none;cursor:pointer;touch-action:none;
  background:var(--accent);color:var(--on-accent);font-size:23px;line-height:1;
  box-shadow:0 4px 16px rgba(0,0,0,.5),0 0 12px rgba(242,193,46,.35);
  display:grid;place-items:center;
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
#navFab svg{display:block}
/* Bewertungs-Sheet offen (planner.js setzt body.pop-open): FAB weicht, statt es zu verdecken */
body.pop-open #navFab{display:none}
#navFab.bl{right:auto;left:16px}
#navFab.drag{transform:scale(1.12);opacity:.92;
  box-shadow:0 8px 28px rgba(0,0,0,.65),0 0 22px rgba(242,193,46,.65)}
#navBackdrop{position:fixed;inset:0;z-index:151;background:rgba(5,10,25,.6);
  opacity:0;transition:opacity .22s}
#navBackdrop.open{opacity:1}
#navSheet{position:fixed;bottom:0;right:0;z-index:152;width:100%;max-width:400px;
  background:var(--bg-raised);border:1px solid var(--border);border-bottom:none;
  border-radius:14px 14px 0 0;padding:10px 10px calc(14px + env(safe-area-inset-bottom));
  transform:translateY(100%);transition:transform .25s ease-out;outline:none}
#navSheet.open{transform:translateY(0)}
#navSheet.bl{right:auto;left:0}
#navSheet .grip{width:44px;height:4px;border-radius:2px;background:var(--border);margin:0 auto 8px}
/* Kopfzeile: Sprachwahl links, Zahnrad rechts (V-1: drei Zonen statt Mischliste) */
#navSheet .nav-head{display:flex;align-items:center;justify-content:space-between;
  padding:0 8px 6px}
#navSheet .nav-lang{display:flex;gap:2px;background:var(--bg-input);border-radius:6px;padding:2px}
#navSheet .nav-lang button{min-width:40px;min-height:32px;border:none;border-radius:5px;
  cursor:pointer;font-weight:700;font-size:12px;font-family:inherit;
  background:transparent;color:var(--text-dim)}
#navSheet .nav-lang button[aria-pressed="true"]{background:var(--accent);color:var(--on-accent)}
#navSheet .nav-gear{width:44px;height:44px;border:none;background:none;color:var(--text-dim);
  cursor:pointer;border-radius:var(--radius-sm);display:grid;place-items:center}
#navSheet .nav-gear:hover{background:var(--secondary);color:var(--text)}
#navSheet .nav-group{border-top:1px solid var(--border);margin-top:8px;padding-top:6px}
#navSheet .nav-ico{display:inline-flex;opacity:.75;flex:0 0 auto}
#navSheet .nav-legal{border-top:1px solid var(--border);margin-top:6px;
  padding:10px 14px 0;display:flex;gap:8px;justify-content:flex-end;font-size:12px}
#navSheet.bl .nav-legal{justify-content:flex-start}
#navSheet .nav-legal a{display:inline-flex;width:auto;min-height:0;padding:0;
  font-size:12px;color:var(--text-faint);text-decoration:none;font-weight:400}
#navSheet .nav-legal a:hover{color:var(--text-dim);text-decoration:underline}
#navSheet .nav-legal span{color:var(--text-faint)}
#navSheet a,#navSheet button.item{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;
  padding:0 14px;border:none;background:none;color:var(--text);font-size:15px;font-weight:700;
  font-family:inherit;text-decoration:none;border-radius:var(--radius-sm);cursor:pointer;
  justify-content:flex-end;text-align:right}
#navSheet.bl a,#navSheet.bl button.item{justify-content:flex-start;text-align:left}
#navSheet a:hover,#navSheet button.item:hover{background:var(--secondary)}
/* Aktueller Ort im Menü: Akzentfarbe + Marker (page = exakt, true = Bereich) */
#navSheet a[aria-current]{color:var(--accent)}
#navSheet a[aria-current] .nav-ico{opacity:1}
#navSheet a[aria-current="page"]::after{content:"●";font-size:8px;margin-left:8px}
/* Suche im Sheet (V3-M5): Eingabe + Live-Trefferliste */
#navSheet .nav-search{padding:6px 8px 2px}
#navSheet input#navSearch{width:100%;min-height:44px;padding:8px 12px;
  border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-input);
  color:var(--text);font-size:16px;font-family:inherit}
#navSheet .nav-results{margin-top:6px;max-height:38vh;overflow-y:auto;
  border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg)}
#navSheet .nav-results a.nr{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;
  min-height:44px;padding:6px 10px;justify-content:flex-start;text-align:left;
  border-radius:0;font-weight:600;font-size:14px}
#navSheet .nav-results a.nr.sel,#navSheet .nav-results a.nr:hover{background:var(--secondary)}
#navSheet .nr-kind{font-size:10.5px;font-weight:800;text-transform:uppercase;
  color:var(--text-dim);border:1px solid var(--border);border-radius:4px;padding:1px 5px}
#navSheet .nr-name{font-weight:800}
#navSheet .nr-sub{flex-basis:100%;color:var(--text-faint);font-size:12px;font-weight:400}
#navSheet .nr-empty{padding:10px;color:var(--text-dim);font-size:13px;text-align:center}
#navSettings{display:none;position:fixed;inset:0;z-index:160;background:rgba(5,10,25,.85);
  align-items:center;justify-content:center;padding:16px}
#navSettings.open{display:flex}
#navSettings .ns-sheet{background:var(--bg-raised);border:1px solid var(--border);
  border-radius:12px;padding:20px;max-width:400px;width:100%}
#navSettings h2{font-size:17px;margin-bottom:14px}
#navSettings .ns-group{margin-bottom:14px}
#navSettings .ns-group b{display:block;font-size:13px;color:var(--text-dim);margin-bottom:6px}
#navSettings .ns-row{display:flex;gap:8px}
#navSettings .ns-row button{flex:1;min-height:44px;border:1px solid var(--border);
  border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text);
  font-weight:700;font-family:inherit;font-size:13.5px;cursor:pointer}
#navSettings .ns-row button[aria-pressed="true"]{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
#navSettings .ns-hint{font-size:12px;color:var(--text-faint);line-height:1.5;margin-bottom:12px}
#navSettings .ns-close{width:100%;min-height:44px;border:none;border-radius:var(--radius-sm);
  background:var(--secondary);color:var(--text);font-weight:700;font-family:inherit;font-size:13.5px;cursor:pointer}
@media (prefers-reduced-motion:reduce){
  #navSheet,#navBackdrop{transition:none}
}

/* Karte (map.js, V3-M4): SVG-Vektorkarte mit Pins — gemeinsame Optik aller Seiten.
   Pin-Farben: gelb = Festival (Default), lila = Konzert/Venue, gedimmt = vergangen. */
.geomap{position:relative;width:100%;aspect-ratio:4/3;background:var(--map-land);
  border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.geomap svg{position:absolute;inset:0;width:100%;height:100%}
/* Leer-/Fehlerzustände der Karte (map.js) */
.geomap-note{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  color:var(--text-dim);font-size:13px;text-align:center;padding:16px}
.geomap-warn{position:absolute;left:8px;bottom:8px;z-index:6;background:rgba(16,29,56,.92);
  border:1px solid var(--border);border-radius:6px;padding:4px 10px;
  font-size:11.5px;color:var(--text-dim)}
/* „Karte zoomen: ⌘ + Scrollen" — erscheint beim Scrollen ohne Modifier-Taste */
.geomap-zoomhint{position:absolute;inset:0;z-index:7;display:flex;align-items:center;
  justify-content:center;background:rgba(5,10,25,.45);color:#fff;font-size:14px;
  font-weight:700;text-align:center;padding:16px;opacity:0;pointer-events:none;
  transition:opacity .2s}
.geomap-zoomhint.on{opacity:1}
.geomap .geo-country{fill:#1a2947;stroke:#f2c12e;stroke-opacity:.55;stroke-width:1;stroke-linejoin:round}
.geomap .geo-region{fill:none;stroke:#33456e;stroke-width:.5}
/* Stadt-Zoom (map.js setzt .deepzoom): grobe Grenzen zurücknehmen, Pins tragen */
.geomap.deepzoom .geo-country{stroke-opacity:.15;fill:#152137}
.geomap.deepzoom .geo-region{stroke-opacity:.35}
/* Straßen-Häppchen (V-9): Klassen 0 Hauptachsen … 3 Fußgängerzonen */
/* V-9 (SVG-Straßen) abgeschafft 01.08.2026 — Stadt-Ebene macht die Vektor-Karte (V-13) */
/* Pins schweben als HTML-Marker über der Karte (map.js positioniert sie bei Zoom/Pan).
   Nichts wird ins SVG gerendert – daher keine Verzerrung und keine skalierenden Konturen. */
.geomap .pinlayer{position:absolute;inset:0;z-index:4;pointer-events:none;overflow:hidden}
.mpin{position:absolute;left:0;top:0;will-change:transform;
  display:flex;align-items:center;gap:5px;pointer-events:auto;
  cursor:pointer;text-decoration:none;white-space:nowrap;line-height:1}
/* Label-Culling (map.js): unterlegene Pins einer Rasterzelle zeigen keinen Namen */
.mpin.nolabel .lab{display:none}
.mpin .dot{border-radius:50%;border:1.5px solid #0e1a34;background:var(--accent);
  box-shadow:0 1px 3px rgba(0,0,0,.5);flex:0 0 auto}
.mpin .lab{font-size:11px;font-weight:700;color:#fff;
  text-shadow:0 0 3px #0e1a34,0 0 2px #0e1a34,1px 1px 2px #0e1a34}
.pinlayer.nolabels .lab{display:none}
/* Venue-Namen (lila Pins) erst bei Stadt-/Straßen-Zoom — vorher nur Punkte */
.pinlayer.novenuelabels .mpin.concert .lab{display:none}
.mpin:hover .dot{outline:2px solid #f2c12e;outline-offset:1px}
.mpin.concert .dot{background:#9d6ee0}
.mpin.concert:hover .dot{outline-color:#a68ff0}
.mpin.past .dot{background:#5f719c}
.mpin.nomatch{opacity:.4}
.mapnav{position:absolute;right:8px;top:8px;display:flex;flex-direction:column;gap:6px;z-index:5}
.mapbtn{width:44px;height:44px;border:1px solid var(--border);border-radius:10px;
  background:rgba(16,29,56,.92);color:var(--text);font-size:19px;font-weight:800;
  font-family:inherit;cursor:pointer;line-height:1}
.mapbtn:hover{border-color:var(--accent)}

/* Druck: dunkles Design würde als helle Schrift auf weißem Papier enden.
   Chrome (Nav, Overlays, Buttons, Karte) fliegt raus, Inhalt wird schwarz auf weiß. */
@media print{
  :root{--bg:#fff;--bg-raised:#fff;--bg-input:#fff;--text:#000;
    --text-dim:#333;--text-faint:#555;--border:#bbb;--accent:#000}
  body{background:#fff!important;color:#000!important}
  #navFab,#navSheet,#navBackdrop,#langToggle,.appfoot,.geomap,.mapnav,
  #exportChooser,#exportOverlay,#privacyOverlay,#introOverlay,#pop,
  .btn,button,.modal-wrap{display:none!important}
  a{color:#000;text-decoration:underline}
}

/* PWA-Leisten (pwa.js, V-6): Update-Hinweis + Offline-Anzeige */
.pwabar{position:fixed;left:50%;bottom:84px;transform:translateX(-50%);z-index:390;
  display:none;align-items:center;gap:12px;max-width:calc(100vw - 24px);
  background:var(--bg-raised);border:1px solid var(--border);border-radius:8px;
  padding:10px 14px;font-size:13px;color:var(--text);box-shadow:var(--shadow)}
.pwabar.on{display:flex}
.pwabar button{min-height:36px;padding:6px 14px;border:none;border-radius:6px;
  background:var(--primary);color:#fff;font-weight:700;font-family:inherit;cursor:pointer}
.pwabar button:hover{background:var(--primary-hover)}

/* Brotkrume auf Detailseiten (V-2) */
.crumb{display:inline-block;margin-bottom:6px;color:var(--text-dim);
  text-decoration:none;font-size:13px;font-weight:700}
.crumb:hover{color:var(--accent)}

/* Desktop (V-2): sichtbare Kopfnavigation ab 900px — der mobile FAB weicht */
.topnav{display:none}
@media (min-width:900px){
  .topnav{position:fixed;top:0;left:0;right:0;z-index:140;display:flex;align-items:center;
    gap:18px;padding:0 18px;height:56px;background:var(--bg-raised);
    border-bottom:1px solid var(--border)}
  .topnav .tn-brand{color:var(--accent);font-weight:800;font-size:16px;text-decoration:none}
  .topnav .tn-links{display:flex;gap:4px;flex:1}
  .topnav .tn-links a{color:var(--text-dim);text-decoration:none;font-weight:700;
    font-size:13.5px;padding:8px 12px;border-radius:var(--radius-sm);min-height:40px;
    display:inline-flex;align-items:center}
  .topnav .tn-links a:hover{background:var(--secondary);color:var(--text)}
  .topnav .tn-links a[aria-current]{color:var(--accent)}
  /* DE/EN in der Topnav (gleiche Optik wie der schwebende Toggle aus i18n.js) */
  .topnav .tn-lang{display:flex;gap:2px;background:var(--bg-raised);border-radius:6px;padding:2px}
  .topnav .tn-lang button{min-width:44px;min-height:44px;border:none;border-radius:5px;
    cursor:pointer;font-weight:700;font-size:12px;font-family:inherit;
    background:transparent;color:var(--text-dim)}
  .topnav .tn-lang button:hover{color:var(--text)}
  .topnav .tn-lang button[aria-pressed="true"]{background:var(--accent);color:var(--on-accent)}
  .topnav .nav-search{position:relative;width:280px;padding:0}
  .topnav .nav-search input{width:100%;min-height:38px;padding:6px 12px;
    border:1px solid var(--border);border-radius:var(--radius-sm);
    background:var(--bg-input);color:var(--text);font-size:14px;font-family:inherit}
  .topnav .nav-results{position:absolute;top:calc(100% + 4px);right:0;width:340px;
    max-height:55vh;overflow-y:auto;border:1px solid var(--border);
    border-radius:var(--radius-sm);background:var(--bg-raised);box-shadow:var(--shadow)}
  .topnav .nav-results a.nr{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;
    min-height:44px;padding:6px 10px;color:var(--text);text-decoration:none;
    font-weight:600;font-size:14px}
  .topnav .nav-results a.nr.sel,.topnav .nav-results a.nr:hover{background:var(--secondary)}
  .topnav .nr-kind{font-size:10.5px;font-weight:800;text-transform:uppercase;
    color:var(--text-dim);border:1px solid var(--border);border-radius:4px;padding:1px 5px}
  .topnav .nr-name{font-weight:800}
  .topnav .nr-sub{flex-basis:100%;color:var(--text-faint);font-size:12px;font-weight:400}
  .topnav .nr-empty{padding:10px;color:var(--text-dim);font-size:13px;text-align:center}
  body.has-navfab{padding-top:68px}
  #navFab{display:none}
  /* V-81: Zahnrad in der Topbar (dort, wo vorher DE/EN stand) */
  .topnav .tn-gear{width:44px;height:44px;min-width:44px;border:none;border-radius:8px;
    background:var(--bg-raised);color:var(--text-dim);cursor:pointer;display:grid;place-items:center}
  .topnav .tn-gear:hover{background:var(--secondary);color:var(--text)}
  .topnav .tn-gear svg{display:block}
  /* Einstellungen als Dropdown unter dem Zahnrad statt zentriertem Modal */
  #navSettings{background:transparent;align-items:flex-start;justify-content:flex-end;padding:60px 16px 0}
  #navSettings .ns-sheet{max-width:300px;box-shadow:var(--shadow)}
  #nsPosGroup,#navSettings .ns-hint{display:none}
}

/* Band-Picker (bandpicker.js, V3-M2): Typeahead-Dropdown mit Unterscheidungszeile */
.bp-wrap{position:relative;display:inline-block;min-width:0}
.bp-list{position:absolute;left:0;top:100%;z-index:220;min-width:100%;max-width:360px;
  max-height:290px;overflow-y:auto;margin:2px 0 0;padding:4px;list-style:none;
  background:var(--bg-raised);border:1px solid var(--border);
  border-radius:var(--radius-sm);box-shadow:var(--shadow)}
.bp-item{padding:7px 10px;border-radius:4px;font-size:13px;color:var(--text);
  cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bp-item b{font-weight:700}
.bp-item .bp-sub{color:var(--text-dim);font-size:12px}
.bp-item.bp-active{background:var(--secondary)}
.bp-item.bp-create{color:var(--accent);border-top:1px solid var(--border);
  border-radius:0 0 4px 4px;margin-top:2px}
