/* Gemeinsames Erscheinungsbild (aus den Prototypen übernommen).
   Schriften bewusst lokal/systemseitig: kein Laden von Google-Servern (DSGVO). */
:root {
  --bg: #eef1f4;
  --panel: #ffffff;
  --ink: #17212b;
  --muted: #5c6b79;
  --line: #d3dae1;
  --accent: #1d5c96;
  --accent-ink: #ffffff;
  --accent-soft: #e2edf7;
  --strip: #f6f8fa;
  --good: #1f7a4d;
  --good-soft: #e1f2e8;
  --warn: #9a6200;
  --warn-soft: #fbf0d9;
  --bad: #b3261e;
  --bad-soft: #f9e3e1;
  --fuel: #c27a12;
  --font-display: "Barlow Condensed", "Arial Narrow", "Roboto Condensed", "Helvetica Neue", sans-serif;
  --font-body: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
  --font-data: ui-monospace, "SF Mono", "SFMono-Regular", Menlo, Consolas, monospace;
  --r: 6px;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg: #11171d; --panel: #18212a; --ink: #e3e9ef; --muted: #93a3b2; --line: #2b3742;
    --accent: #6fa8dc; --accent-ink: #0f1820; --accent-soft: #1d2f40; --strip: #1d2731;
    --good: #5cc28d; --good-soft: #17322a; --warn: #e3ae4c; --warn-soft: #3a2e17;
    --bad: #f08a80; --bad-soft: #3b1f1d; --fuel: #e3a14c; color-scheme: dark;
  }
}
:root[data-theme="dark"] {
  --bg: #11171d; --panel: #18212a; --ink: #e3e9ef; --muted: #93a3b2; --line: #2b3742;
  --accent: #6fa8dc; --accent-ink: #0f1820; --accent-soft: #1d2f40; --strip: #1d2731;
  --good: #5cc28d; --good-soft: #17322a; --warn: #e3ae4c; --warn-soft: #3a2e17;
  --bad: #f08a80; --bad-soft: #3b1f1d; --fuel: #e3a14c; color-scheme: dark;
}
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; background: var(--bg); color: var(--ink); font-family: var(--font-body); font-size: 15px; line-height: 1.45; }
[hidden] { display: none !important; }
h1, h2, h3 { font-family: var(--font-display); font-weight: 600; letter-spacing: .02em; margin: 0; text-wrap: balance; }
.data, .num { font-family: var(--font-data); font-variant-numeric: tabular-nums; }
.label { font-size: 11px; text-transform: uppercase; letter-spacing: .08em; color: var(--muted); font-weight: 500; }
.note { font-size: 13px; color: var(--muted); }
.wrap { max-width: 1240px; margin: 0 auto; padding-block: 16px 48px; padding-left: max(16px, env(safe-area-inset-left, 0px)); padding-right: max(16px, env(safe-area-inset-right, 0px)); display: grid; gap: 16px; }

/* Kopfleiste */
.topbar { background: var(--panel); border-bottom: 2px solid var(--ink); }
.topbar .in { max-width: 1240px; margin: 0 auto; padding-block: 10px; padding-left: max(16px, env(safe-area-inset-left, 0px)); padding-right: max(16px, env(safe-area-inset-right, 0px)); display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center; }
.brand { font-family: var(--font-display); font-weight: 700; font-size: 22px; text-transform: uppercase; letter-spacing: .03em; }
.nav { display: flex; flex-wrap: wrap; gap: 4px; }
.nav a { color: var(--ink); text-decoration: none; padding: 6px 10px; border-radius: 4px; }
.nav a:hover { background: var(--strip); }
.nav a[aria-current="page"] { background: var(--accent); color: var(--accent-ink); }
.who { margin-left: auto; display: flex; gap: 10px; align-items: center; font-size: 13px; color: var(--muted); flex-wrap: wrap; }

/* Bausteine */
.card, .box { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r); padding: 14px; display: grid; gap: 12px; min-width: 0; }
.card h2, .box h2 { font-size: 21px; text-transform: uppercase; }
.field { display: grid; gap: 4px; min-width: 0; }
.row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.row3 { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; }
input, select, textarea { font: inherit; color: var(--ink); background: var(--panel); border: 1px solid var(--line); border-radius: 4px; padding: 8px 10px; width: 100%; min-width: 0; }
input[type=checkbox], input[type=radio] { width: auto; }
input:focus-visible, select:focus-visible, button:focus-visible, a:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
input.invalid { border-color: var(--bad); }
button { font: inherit; cursor: pointer; border-radius: 6px; padding: 8px 13px; border: 1px solid var(--line); background: var(--panel); color: var(--ink); }
button:hover { border-color: var(--accent); }
button.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); font-weight: 600; }
button:disabled { opacity: .45; cursor: not-allowed; }
button.ghost { border-color: transparent; color: var(--muted); background: transparent; }
button.ghost:hover { color: var(--bad); }
button.small { padding: 4px 9px; font-size: 13px; }
button.add { border-style: dashed; color: var(--accent); }
a.btn { display: inline-block; text-decoration: none; border-radius: 6px; padding: 8px 13px; border: 1px solid var(--line); background: var(--panel); color: var(--ink); }
a.btn:hover { border-color: var(--accent); }
a.btn.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); font-weight: 600; }
.qrbox { background: #fff; padding: 10px; border-radius: 8px; width: min(260px, 70vw); margin: 0 auto; }
.qrbox svg { display: block; width: 100%; height: auto; }
.chip { font-size: 12px; font-weight: 600; padding: 2px 9px; border-radius: 999px; white-space: nowrap; display: inline-block; }
.chip.ok { color: var(--good); background: var(--good-soft); }
.chip.done { color: var(--panel); background: var(--good); }
.chip.err { color: var(--bad); background: var(--bad-soft); }
.chip.warn { color: var(--warn); background: var(--warn-soft); }
.chip.live, .chip.go { color: var(--accent-ink); background: var(--accent); }
.chip.open { color: var(--muted); background: var(--strip); border: 1px solid var(--line); }
.msg { padding: 10px 12px; border-radius: 4px; border-left: 4px solid var(--accent); background: var(--accent-soft); }
.msg.err { border-color: var(--bad); background: var(--bad-soft); }
.msg.ok { border-color: var(--good); background: var(--good-soft); }
.msg.warn { border-color: var(--warn); background: var(--warn-soft); }
.scroll { overflow-x: auto; }
table { border-collapse: collapse; width: 100%; }
th, td { text-align: left; padding: 7px 9px; border-bottom: 1px solid var(--line); vertical-align: middle; }
th { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); font-weight: 500; }
td.num, th.num { text-align: right; font-family: var(--font-data); white-space: nowrap; }
.secret { font-family: var(--font-data); background: var(--strip); border: 1px dashed var(--line); padding: 6px 10px; border-radius: 4px; user-select: all; word-break: break-all; }
.toast { position: fixed; bottom: calc(16px + env(safe-area-inset-bottom, 0px)); right: max(16px, env(safe-area-inset-right, 0px)); background: var(--ink); color: var(--bg); padding: 10px 14px; border-radius: 6px; z-index: 50; max-width: min(90vw, 420px); }
.toast.err { background: var(--bad); color: #fff; }

/* Hoverpass-Logo und Porta-Zeichen, in hell und dunkel erkennbar */
.hp-logo { display: inline-block; flex: none; height: var(--hp-h, 24px); aspect-ratio: 2127 / 338; background: url(/assets/hoverpass-horizontal.svg) left center / contain no-repeat; vertical-align: middle; }
.hp-logo.stacked { height: auto; width: var(--hp-w, 200px); aspect-ratio: 1878 / 1219; background-image: url(/assets/hoverpass-logo.svg); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .hp-logo { background-image: url(/assets/hoverpass-horizontal-dark.svg); } :root:not([data-theme="light"]) .hp-logo.stacked { background-image: url(/assets/hoverpass-logo-dark.svg); } }
:root[data-theme="dark"] .hp-logo { background-image: url(/assets/hoverpass-horizontal-dark.svg); }
:root[data-theme="dark"] .hp-logo.stacked { background-image: url(/assets/hoverpass-logo-dark.svg); }
.brand { text-decoration: none; }
.pmark { display: inline-block; flex: none; height: var(--pmark-h, 26px); aspect-ratio: 673 / 840; background: url(/assets/porta-mark.png) center / contain no-repeat; vertical-align: middle; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .pmark { background-image: url(/assets/porta-mark-dark.png); } }
:root[data-theme="dark"] .pmark { background-image: url(/assets/porta-mark-dark.png); }
.brand { display: inline-flex; align-items: center; gap: 9px; }
.pfoot { display: flex; align-items: center; gap: 10px; --pmark-h: 22px; opacity: .85; }

/* Laufende Flugnummer je Flugtag */
.fno { font-family: var(--font-data); font-variant-numeric: tabular-nums; font-weight: 700; white-space: nowrap; }
td.fno { color: var(--accent); }
.slotbtn .fno { display: inline-block; min-width: 2.2em; margin-right: 6px; padding: 1px 5px; border-radius: 4px; background: var(--accent-soft); color: var(--accent); font-size: .8em; text-align: center; }

/* Logo des Betreibers in der Kopfleiste: auf hellem Grund, damit es auch im Dunkelmodus lesbar bleibt */
.tlogo { height: 36px; max-width: 150px; object-fit: contain; }
/* Im Dunkelmodus ein heller Untergrund, damit dunkle Logo-Teile (Schrift, Rotor) sichtbar bleiben */
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .tlogo { background: #fff; border-radius: 6px; padding: 3px 6px; } }
:root[data-theme="dark"] .tlogo { background: #fff; border-radius: 6px; padding: 3px 6px; }
.whotxt { display: grid; line-height: 1.25; text-align: right; }
.whotxt b { color: var(--ink); font-weight: 600; }
.whotxt .c3 { font-family: var(--font-data); font-weight: 700; color: var(--ink); }

/* Umschalter zwischen Ansichten/Unterseiten (Flugtage: Operations/Verkaufsdaten, Check-in: Einzelflug/Tagesübersicht) – überall gleich */
.tabs { display: inline-flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.tabs > a, .tabs > button { text-decoration: none; padding: 8px 16px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel); color: var(--ink); font: inherit; font-weight: 600; font-size: 14.5px; line-height: 1.2; cursor: pointer; }
.tabs > a:hover, .tabs > button:hover { border-color: var(--accent); }
.tabs > a[aria-current="page"], .tabs > button[aria-pressed="true"] { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); }
.tabs > .note { margin-left: 6px; font-weight: 400; }

/* Zeitleiste eines Flugtags mit Auslastung (Flugtage und Check-in) */
.timeline { position: relative; height: 30px; background: var(--strip); border: 1px solid var(--line); border-radius: 4px; overflow: hidden; }
.seg { position: absolute; top: 0; bottom: 0; }
.seg.start { background: repeating-linear-gradient(135deg, var(--line) 0 4px, transparent 4px 8px); }
.seg.slot { background: var(--accent-soft); border-left: 2px solid var(--accent); font-family: var(--font-data); font-size: 11px; display: flex; align-items: center; padding-left: 4px; overflow: hidden; white-space: nowrap; }
.seg.slot.l-full { background: var(--good-soft); border-left-color: var(--good); }
.seg.slot.l-part { background: var(--warn-soft); border-left-color: var(--warn); }
.seg.pause { background: repeating-linear-gradient(90deg, transparent 0 3px, var(--line) 3px 4px); }
.ticks { display: flex; justify-content: space-between; font-family: var(--font-data); font-size: 11px; color: var(--muted); margin-top: 4px; }
.legend { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12px; color: var(--muted); margin-top: 6px; align-items: center; }
.legend i { display: inline-block; width: 12px; height: 12px; border-radius: 3px; vertical-align: -2px; margin-right: 4px; border: 1px solid var(--line); }
.seg.slot.rel::after { content: '✓'; margin-left: 3px; color: var(--good); font-weight: 700; }
.seg.now { width: 2px; margin-left: -1px; background: var(--bad); z-index: 2; }
.seg.slot[data-open] { cursor: pointer; } .seg.slot[data-open]:hover { filter: brightness(.95); }

/* Link als Schaltfläche (Datei-Upload, Downloads) */
.btnlike { display: inline-block; cursor: pointer; border-radius: 6px; padding: 8px 13px; background: var(--accent); color: var(--accent-ink); font-weight: 600; text-decoration: none; }
.btnlike:focus-within, .btnlike:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.btnlike[aria-disabled="true"] { opacity: .5; cursor: not-allowed; }
