/*!
 * revier-nacht.css — die Rotlicht-Toenung. Gehoert zu revier-nacht.js.
 *
 * Alles hier ist an genau eine Zahl gebunden: --nacht-farbe. Das JS setzt sie auf
 * rgb(255|158|87, 0, 0) je nach Stufe und schreibt denselben Faktor in die
 * feColorMatrix fuer den Top-Layer. Ein Wert, zwei Anwendungsorte — sie koennen
 * nicht auseinanderlaufen.
 */

/* ── 1) Die Toenung ────────────────────────────────────────────────────────────
   Pseudo-Element statt <div>: es wirkt ab dem ERSTEN Paint, weil im Head nur die
   Klasse gesetzt werden muss. Ein DOM-Knoten braucht document.body und kaeme einen
   Frame zu spaet — genau der weisse Blitz, den dieser Modus verhindern soll.

   z-index 2147483647 (Maximum) ist kein Uebermut, sondern der Bugfix: bis 30.07.2026
   lag die Toenung bei 99999 und damit UNTER Werkzeugleiste (100000), allen Modals
   (100001/100002), dem Funkloch-Streifen (100200), der Foto-Lightbox (2147483000) und
   den Toasts (2147483646). Rot wurde praktisch nur die Karte; jede Rueckfrage leuchtete
   weiter hell. Der Wert wird von webmap/tests/nacht-oben.py gegen alle z-index-Werte
   im Repo geprueft — wer irgendwo hoeher stapelt, macht den Testlauf rot. */
html.nightmode::after {
  content: "";
  position: fixed;
  inset: 0;
  background: var(--nacht-farbe, rgb(158, 0, 0));
  mix-blend-mode: multiply;
  pointer-events: none;
  z-index: 2147483647;
}

/* ── 2) Der Top-Layer ─────────────────────────────────────────────────────────
   Ein position:fixed-Overlay kann einen per showModal() geoeffneten Dialog GRUNDSAETZLICH
   nicht ueberdecken, egal welcher z-index (steht als Kommentar auch in ui-dialog.js:159).
   Deshalb bekommt der Dialog denselben Effekt als Filter aufgemalt: Multiply mit (s,0,0)
   ist exakt dieselbe Abbildung wie diese Farbmatrix.

   `:modal` statt `[open]`, aus zwei Gruenden: es matcht automatisch JEDEN modalen Dialog
   (auch das Schusszeiten-Popup in revier3d/src/main.js:2873, ohne ihn zu kennen), und es
   matcht NICHT den Fallback-Pfad fuer iOS < 15.4 (.ruid-dlg-fallback, ui-dialog.js:317) —
   der liegt im normalen Stapel, wird also schon von der Toenung erwischt und waere sonst
   doppelt getoent, also fast schwarz.

   Die zweite Klasse `nightfx` setzt revier-nacht.js erst, NACHDEM das SVG im Body haengt.
   Ohne sie gaebe es ein Zeitfenster, in dem die Regel auf einen nicht existierenden Filter
   zeigt — Browser sind sich uneinig, ob das "kein Filter" oder "nicht rendern" heisst. */
html.nightmode.nightfx dialog:modal {
  filter: url(#revier-nacht-matrix);
}

/* ── 3) Rueckfallebene fuer den Dialog ────────────────────────────────────────
   Falls filter:url() irgendwo zickt, soll der Dialog trotzdem rot sein statt hell.
   ui-dialog.js:40-47 liest genau diese Variablen; html.nightmode (0,1,1) schlaegt das
   :root der Seiten ohne !important. Alle Werte haben G=B=0, damit die Matrix sie nur
   noch skaliert und nicht die Farbe verschiebt. */
html.nightmode {
  --ruid-surface-override: #1a0000;
  --ruid-surface2-override: #2b0000;
  --ruid-ink-override: #ff0000;
  --ruid-muted-override: #a30000;
  --ruid-line-override: rgba(255, 0, 0, .22);
  --ruid-accent-ink-override: #1a0000;
}

/* ── 4) Ausdrucke bleiben normal ──────────────────────────────────────────────
   Der Planer druckt ohnehin in ein eigenes Fenster (planer.html:2320/:2374/:3525) und
   ist damit unberuehrt. Aber Strg+P auf /2d/ druckt DIESES Dokument — ohne die Regel
   hier kaeme die Karte rot aus dem Drucker. */
@media print {
  html.nightmode::after { display: none !important; }
  html.nightmode.nightfx dialog:modal { filter: none !important; }
}
