'
+ '
🕒 Zeitraum '+_pad2(fromH)+':00 – '+_pad2(toH)+':00'
+ (_isAuto ? 'Auto: erste – letzte Aktivität'
@@ -2278,25 +2304,21 @@ async function renderLiveSummary() {
+ '
'
+ '
'
+ '
'+_ticks+'
'
+ '
';
- // Marker an sauberen Uhrzeiten INNERHALB des Fensters — Schrittweite passt sich
- // der Spanne an (kurze Stunde = 15-min-Takt, langer Tag = Stunden-Takt), damit
- // die Achse weder leer noch überladen wirkt. Erster Marker = erste saubere Zeit
- // ab winStart (nicht winStart selbst, das liegt ja mitten im 15-min-Raster).
- var stepMs = winSpanMs <= 2*3600*1000 ? 15*60*1000
- : winSpanMs <= 5*3600*1000 ? 30*60*1000
- : 60*60*1000;
+ // Marker an den Block-Grenzen der gestauchten Skala (Stopp-Stunden 0,6,7,…,21,24),
+ // soweit sie im gewählten Fenster liegen. So verdichtet sich nichts in den
+ // gestauchten Nacht-/Abend-Blöcken.
var scaleMarks = [];
- for (var t = Math.ceil(winStart / stepMs) * stepMs; t <= winEnd; t += stepMs) {
- var d = new Date(t);
- scaleMarks.push({ ms: t, label: _fmtHM(t), isHour: d.getMinutes() === 0 });
- }
+ TS_STOPS.forEach(function(hh){
+ if (hh < fromH - 0.001 || hh > toH + 0.001) return;
+ scaleMarks.push({ ms: dayBase + hh*3600*1000, label: _pad2(hh)+':00', isHour: true });
+ });
html += '