diff --git a/App/assets/js/sim-metrics.js b/App/assets/js/sim-metrics.js
index 01a6033..1738b49 100644
--- a/App/assets/js/sim-metrics.js
+++ b/App/assets/js/sim-metrics.js
@@ -106,39 +106,42 @@
function esc(s){ return String(s==null?'':s).replace(/[&<>"]/g,function(c){return{'&':'&','<':'<','>':'>','"':'"'}[c];}); }
function ampPct(v){ return v>=75?'ivm-g':v>=55?'ivm-li':v>=40?'ivm-y':v>=25?'ivm-o':'ivm-r'; }
+ // 5-stufige Leistungs-Skala (= _pctColor). Balken/Werte werden INLINE gefärbt,
+ // damit sie überall farbig sind — auch wo die ivm-CSS-Klassen fehlen (Drilldown),
+ // wo der Balken sonst schwarz erschien.
+ function ivmColor(v){ v=Math.max(0,Math.min(100,v||0)); return v>=90?'#1f7a3d':v>=80?'#7cb342':v>=60?'#f9c33b':v>=50?'#ef8b2c':'#d8453a'; }
function stars(n){
n = Math.max(0, Math.min(5, Math.round(n)));
return ''+'★'.repeat(n)+''+'★'.repeat(5-n)+'';
}
- function bar(pct, cls){
+ function bar(pct, col){
pct = Math.max(0, Math.min(100, Math.round(pct)));
- return '';
+ return '';
}
function money(v){
- var n = Math.round(v), cls = n<0?'ivm-r':'ivm-g';
- return ''+n.toLocaleString('de-AT')+' €';
+ var n = Math.round(v), col = n<0?'#d8453a':'#1f7a3d';
+ return ''+n.toLocaleString('de-AT')+' €';
}
function num(v, u){ return ''+(typeof v==='number'?v.toLocaleString('de-AT'):esc(v))+(u?' '+u+'':'')+''; }
function starsBlock(n, small){
- n = Math.max(0, Math.min(5, Math.round(n)));
- var c = ampPct(n/5*100);
- var cls = 'ivm-stars'+(small?' sm':'')+' '+c;
- return ''+'★'.repeat(n)+''+'★'.repeat(5-n)+''+bar(n/5*100, c);
+ // Sterne raus → Prozent + farbiger Balken (z. B. Heli Start/Landung, 0–5 → %).
+ var pct = Math.round(Math.max(0,Math.min(5,n))/5*100), col = ivmColor(pct);
+ return ''+pct+' %'+bar(pct, col);
}
function renderVal(f, v, src){
switch (f.type) {
case 'stars': return starsBlock(v, false);
case 'starsSmall': return starsBlock(v, true);
- case 'pct': return ''+Math.round(v)+'%'+bar(v, ampPct(v));
- case 'pctInv': return ''+Math.round(v)+'%'+bar(v, ampPct(100-v));
+ case 'pct': return ''+Math.round(v)+'%'+bar(v, ivmColor(v));
+ case 'pctInv': return ''+Math.round(v)+'%'+bar(v, ivmColor(100-v));
case 'ratio': { var tot=src[f.t]; if(tot==null) return num(v); var pct=tot>0?(v/tot*100):0;
- return ''+v+'/ '+tot+''+bar(pct, ampPct(pct)); }
+ return ''+v+'/ '+tot+''+bar(pct, ivmColor(pct)); }
case 'money': return money(v);
- case 'temp': { var t=Math.round(v*10)/10, c=t<=2?'ivm-g':t<=3?'ivm-y':'ivm-r';
- return ''+t.toLocaleString('de-AT')+' °C'; }
- case 'bool': return v?'✓ ja':'✗ nein';
- case 'boolInv': return v?'✗ nein':'✓ ja';
+ case 'temp': { var t=Math.round(v*10)/10, col=t<=2?'#1f7a3d':t<=3?'#f9c33b':'#d8453a';
+ return ''+t.toLocaleString('de-AT')+' °C'; }
+ case 'bool': return v?'✓ ja':'✗ nein';
+ case 'boolInv': return v?'✗ nein':'✓ ja';
case 'text': return ''+esc(v)+'';
default: return num(v, f.u);
}