diff --git a/App/teacher.html b/App/teacher.html
index b529c50..945d741 100644
--- a/App/teacher.html
+++ b/App/teacher.html
@@ -2753,16 +2753,18 @@ var IV_ICON={
more:'',
work:'',
good:'',
- idle:''};
+ idle:'',
+ calm:''};
var IV_META={support:['Fördern','zuletzt schwächere Läufe','--ivns'],more:['Fordern','zuletzt sicher, kaum gefordert','--ivnm'],
- work:['Begleiten','zuletzt viel gearbeitet, wenig Ertrag','--ivnw'],good:['Bestätigen','zuletzt besser geworden','--ivngd'],idle:['Nicht aktiv','länger nicht mehr dran (oder noch nie)','--ivni']};
+ work:['Begleiten','zuletzt viel gearbeitet, wenig Ertrag','--ivnw'],good:['Bestätigen','zuletzt besser geworden','--ivngd'],
+ calm:['Läuft gut','solide unterwegs, keine Auffälligkeiten','--ivg'],idle:['Nicht aktiv','länger nicht mehr dran (oder noch nie)','--ivni']};
var IV_WEEK_CAP = 10800; // eine Woche zählt max. 3 h aktive Zeit (Ausreißer-Schutz)
// Rendert die 5 Triage-Karten (support/more/work/good/idle) aus fertigen Gruppen.
// Wiederverwendet für „HEUTE" und „insgesamt". todayMode passt Untertitel/Tooltips an.
function _ivTriageCards(groups, maxSec, todayMode){
var h='
';
- ['support','more','work','good','idle'].forEach(function(key){
+ ['support','more','work','good','calm','idle'].forEach(function(key){
var rows=groups[key], m=IV_META[key];
var sub=(todayMode && key==='idle')?'heute noch nicht dran':m[1];
h+='
'+m[0]+'
'+sub+'
'+rows.length+'
';
@@ -2828,7 +2830,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){
var playsById={};
((matrix&&matrix.students)||[]).forEach(function(s){ playsById[s.id]=(matrix.totals[s.id]||{}).plays||0; });
- var groups={support:[],more:[],work:[],good:[],idle:[]}, calm=[], erfSum=0,erfN=0, weekTotals=[];
+ var groups={support:[],more:[],work:[],good:[],calm:[],idle:[]}, erfSum=0,erfN=0, weekTotals=[];
cs.forEach(function(s){
var sid=s.studentId||s.id;
var recErf=(s.recentErfolg!=null)?s.recentErfolg:null; // Ø letzte 3 Läufe
@@ -2843,7 +2845,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){
weekTotals.push(secs);
var g=ivTriage(recErf, days, rplays, rising);
var row={sid:sid, name:s.displayName, erf:recErf, status:s.status, secs:secs, days:days};
- if(g) groups[g].push(row); else calm.push(s.displayName);
+ if(g) groups[g].push(row); else groups.calm.push(row);
});
var erfAvg = erfN? Math.round(erfSum/erfN):null;
@@ -2894,7 +2896,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){
todayPlaysById[su.studentId]=sess.length;
todayErfById[su.studentId]= sco.length? Math.round(sco.reduce(function(a,b){return a+b;},0)/sco.length) : null;
});
- var heuteGroups={support:[],more:[],work:[],good:[],idle:[]}, heuteCalm=[];
+ var heuteGroups={support:[],more:[],work:[],good:[],calm:[],idle:[]};
cs.forEach(function(s){
var sid=s.studentId||s.id;
var played=(todayPlaysById[sid]||0)>0;
@@ -2903,7 +2905,7 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){
while(secs2.length<10) secs2.unshift(0);
var g2 = !played ? 'idle' : ivTriage(tErf, 0, todayPlaysById[sid], false);
var row2={sid:sid, name:s.displayName, erf:played?tErf:null, status:s.status, secs:secs2, days:played?0:(s.daysSince!=null?s.daysSince:null)};
- if(g2) heuteGroups[g2].push(row2); else heuteCalm.push(s.displayName);
+ if(g2) heuteGroups[g2].push(row2); else heuteGroups.calm.push(row2);
});
var heutePlayed=Object.keys(todayPlaysById).length;
var need=groups.support.length+groups.more.length+groups.work.length+groups.good.length+groups.idle.length;
@@ -2911,12 +2913,10 @@ function ivBuildOverview(cockpit, weeks, studentsCount, matrix, todaySummary){
// 1) HEUTE (oben) — genau dieselbe Darstellung, nur auf heute gefiltert
h+='
Empfohlene Aktivität für dich — HEUTE'+heutePlayed+' heute aktiv
Läuft rund — '+calm.length+''+calm.map(esc).join(' · ')+'
';
// Legende
h+='
'
+'
Die Empfehlung beruht nur auf der aktuellen Leistung: dem Erfolg der letzten Läufe und den Tagen seit dem letzten Mal. Der Verlauf daneben ist nur Historie.