/* Welle 3 (Nr. 182, Riegel PVM_HEUTE): die Startseite „Heute“ — nur wenn `#dash-heute` im Dokument steht (bei zu gibt es keinen Behälter, diese Regeln treffen nichts).
   Handy < 900 px: einspaltig, keine horizontale Rolle (Nr. 127 L-5: lange Titel brechen um), Tippflächen >= 44 px. Rechner >= 900 px: zwei Spalten
   (links Weiter + Termine, rechts Tickets + Rückmeldungen), Gefahr/Hinweise über beiden. Kontrast: nur Textfarben aus basis.css (>= 7:1), Gefahr als Schrift `--danger-text`. */
.heute { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 var(--ab-4); margin-bottom: var(--ab-2); }
.heute .card { margin-bottom: var(--ab-3); min-width: 0; }
.heute .card-header { margin-bottom: var(--ab-2); }
.heute p { margin: 0 0 var(--ab-alt-6); overflow-wrap: anywhere; }

.heute-gefahr { display: flex; align-items: center; gap: var(--ab-2); width: 100%; min-height: 44px; margin-bottom: var(--ab-3); padding: var(--ab-2) var(--ab-3); font: inherit; font-weight: 600; text-align: left; cursor: pointer;
    background: var(--bg-card); color: var(--danger-text); border: 2px solid var(--danger); border-radius: var(--radius); }
.heute-gefahr:focus-visible { outline: 3px solid var(--border-focus); outline-offset: 2px; }
.heute-gefahr-zahl { font-variant-numeric: tabular-nums; font-size: var(--gr-alt-20); }

.heute-wer { font-size: var(--gr-alt-17); font-weight: 600; color: var(--text-primary); }
.heute-was { color: var(--text-secondary); }
.heute-stand { font-weight: 600; color: var(--text-primary); }
.heute-hinweis { color: var(--text-secondary); }
.heute-zuletzt, .heute-weitere, .heute-wartet, .heute-offline { color: var(--text-muted); }
.heute-offline { padding: var(--ab-1) 0 var(--ab-2); }

.heute-liste { list-style: none; margin: 0; padding: 0; }
.heute-zeile, .heute-termin { padding: var(--ab-2) 0; border-top: 1px solid var(--border); min-width: 0; }
.heute-zeile:first-child, .heute-termin:first-child { border-top: 0; }
.heute-termin { display: flex; flex-wrap: wrap; gap: var(--ab-alt-2) var(--ab-2); align-items: baseline; }
.heute-zeit { font-variant-numeric: tabular-nums; font-weight: 600; min-width: 4.5em; }
.heute-titel { flex: 1 1 12em; min-width: 0; overflow-wrap: anywhere; color: var(--text-primary); }
.heute-ort, .heute-monteur, .heute-status { flex: 1 1 100%; color: var(--text-muted); overflow-wrap: anywhere; }
.heute-erledigt .heute-titel, .heute-erledigt .heute-zeit { color: var(--text-muted); text-decoration: line-through; }
.heute-summary { min-height: 44px; display: flex; align-items: center; justify-content: space-between; gap: var(--ab-2); cursor: pointer; font-weight: 600; }
.heute-betrieb details[open] > .heute-summary > span { display: inline-block; transform: rotate(90deg); } /* W-5: das „›“ der zugeklappten Liste dreht sich beim Aufklappen */
/* W-4: Art, „übergeben am“ und Kunde · Ort einer Rückmeldung stehen je auf eigener Zeile (gemessen: vorher klebten sie, `.heute-zeile` ist kein Flex-Behälter; Probe W4 in `tests/gate2-w3-heute-chromium.test.js`) */
#heute-rueckmeldungen .heute-zeile { display: flex; flex-wrap: wrap; gap: var(--ab-alt-2) var(--ab-2); align-items: baseline; }
.heute-fehler .btn, .heute-leer .btn, .heute-ohne-netz .btn { min-height: 44px; margin-top: var(--ab-1); }
/* Skeletthöhe (Auflage C1, Gate 2 W3, 07.11.2026): das Skelett ist mindestens so hoch wie das erste Bild (100dvh − Kopf 56 px − Handy-Navigation, am Rechner ohne Navigation). Gemessen (Chromium, 390 × 844, 375 × 667, 360 × 740, 430 × 932, 1280 × 800; leer, voll, erstmals; 15 von 15 Fällen):
   während des Skeletts steht kein Knopf der Zählerwand im ersten Bild, und nach dem Eintreffen liegt an keinem Rasterpunkt des ersten Bildes ein anderer Knopf als vorher (`tests/gate-w34-chromium.test.js` C1). Der Sprung der Zählerwand bleibt (−682 bis +1 103 px) und liegt unterhalb des Falzes.
   Die Werte 427 px und 108 px (`heute-sprung.css`) stammen aus der früheren Messung (Demo-Monteur, 390 × 844, Heute 547 px) und sind nur noch die Untergrenze für niedrige Fenster. Das Skelett gibt es nur bei gemerkter Freigabe (ohne Merker zeichnet Heute nichts, Probe N-2g). */
.heute-skelett { --heute-skelett-karte: 427px; --heute-skelett-knopf: 0px; --heute-skelett-bild: calc(100vh - var(--kopf-hoehe) - var(--handy-leiste-hoehe, 0px)); min-height: max(calc(var(--heute-skelett-karte) + var(--heute-skelett-knopf)), var(--heute-skelett-bild)); }
@supports (height: 100dvh) { .heute-skelett { --heute-skelett-bild: calc(100dvh - var(--kopf-hoehe) - var(--handy-leiste-hoehe, 0px)); } }
/* Tippsperre (Auflage W-1, Gate 2 W3; `heute-sperre.js`): 500 ms nach dem Einfügen von Heute und nach einer Höhenänderung > 24 px stehen die Tippziele des Panels auf `pointer-events: none`, sonst ändert sich nichts Sichtbares.
   Gemessen (Chromium, 1280 × 800): ein Tipp an der Stelle eines gewechselten Knopfs löst in dieser Zeit nichts aus, nach Ablauf wirkt er, und Scrollen mit dem Mausrad geht bei stehender Sperre (Probe W1 in `tests/gate2-w3-heute-chromium.test.js`). */
#panel-dashboard.heute-tippsperre :is(button, a, summary, input, select, textarea, label, [onclick], [role="button"]) { pointer-events: none; }
.heute-herkunft { color: var(--text-muted); }

@media (min-width: 900px) {
    .heute { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-flow: row dense; align-items: start; } /* W-5: eine Karte ist so hoch wie ihr Inhalt, nicht wie die Zeile daneben */
    .heute > .heute-gefahr, .heute > .heute-offline, .heute > .heute-neuanlage, .heute > .heute-ohne-netz, .heute > .heute-leer, .heute > .heute-fehler, .heute > .heute-erstmals, .heute > .heute-skelett { grid-column: 1 / -1; }
    .heute > .heute-weiter, .heute > .heute-termine { grid-column: 1; }
    .heute > .heute-tickets, .heute > .heute-rueckmeldungen { grid-column: 2; }
}
