Übersicht-Feinschliff + Idle-Fairness

- Überschrift „Klassenübersicht", Sektion „Empfohlene Aktivität für dich."
- Volle Legende (Gradient-Balken, Ampelpunkte, Beispiel-Sparkline)
- 4b-Testdaten: jede Triage-Karte besetzt (Beteiligen/Begleiten/Fördern/Fordern/
  Bestätigen), Verlauf in den letzten 10 Wochen inkl. steigender Fälle
- live-client.js: Idle-Fenster 90s→5min (Lesen/Denken nicht bestrafen) +
  Tab-Sichtbarkeit blendet echtes Weg-Sein aus

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-20 13:36:03 +02:00
parent 1c2fa2e1b4
commit 3d1b8e49a3
3 changed files with 306 additions and 6 deletions
+7 -1
View File
@@ -52,7 +52,10 @@
// Tab-Schließung, etc.).
// Hard-Cap: 120 min pro Sim-Lauf. Frontend stoppt von selbst,
// Backend (assessment.php/progress.php) capped zusätzlich defensiv.
var IDLE_THRESHOLD_MS = 90000; // 90 s ohne Interaktion → idle
// Großzügig (5 min): Lesen und Nachdenken sollen NICHT als „weg" gelten.
// Scrollen/Mausbewegung zählen ohnehin als Interaktion (siehe EVENTS), und
// echtes Weg-Sein (anderer Tab) wird über die Tab-Sichtbarkeit ausgeblendet.
var IDLE_THRESHOLD_MS = 300000; // 5 min ohne jede Regung → idle
var MAX_SESSION_MS = 7200000; // 120 min — Plattform-Hardcap
var TICK_MS = 1000; // Auflösung der activeMs-Akkumulation
var sessionStartedAt = Date.now();
@@ -77,6 +80,9 @@
var now = Date.now();
var delta = now - lastTickAt;
lastTickAt = now;
// Tab nicht sichtbar (anderer Tab, minimiert) → echtes Weg-Sein, nicht zählen.
// Denkpausen bei SICHTBAREM Tab bleiben über das großzügige Idle-Fenster erhalten.
if (typeof document !== 'undefined' && document.hidden) return;
// Plausibilität: bei Tab-Sleep kann delta riesig sein → max einen Tick
// anrechnen, der Rest war definitiv nicht aktive Spielzeit.
if (delta > TICK_MS * 3) delta = 0;