diff --git a/web/app.js b/web/app.js
index abbe7ab..dc2b563 100644
--- a/web/app.js
+++ b/web/app.js
@@ -444,8 +444,14 @@ function renderM15(s, snap) {
`Stop Loss: ${f(sl, 3)} (2,0×ATR_M15)`];
if (geg) zl2.push(`TP1: ${f(geg.level, 3)} (Level · ` +
`${100 - (geg.p_break ?? 50)} % haelt)`);
+ // ⚠⚠ Das ist die INIT-Formel. Ab Phase "Trail" laeuft der Broker-TP nach
+ // einer ANDEREN Regel: `Bestkurs ∓ 0,5×ATR` (in "Lock" sogar ∓0,3×ATR),
+ // also knapp HINTER dem Hoch statt weit davor. Wer 3,5×ATR fuer ein
+ // festes Ziel haelt, liegt ab dem Phasenwechsel daneben — deshalb steht
+ // es hier ausdruecklich dran.
zl2.push(`TP2: ${f(lg ? e + 3.5 * atr : e - 3.5 * atr, 3)} ` +
- `(3,5×ATR — das Trailing fuehrt ihn nach)`);
+ `(Init-Ziel 3,5×ATR — ab Phase Trail zieht der ` +
+ `TP an den Bestkurs heran, ∓0,5×ATR)`);
if (k120) zl2.push(`TP3: ${f(lg ? k120.hi : k120.lo, 3)} ` +
`(Kegel 120′, trifft ${Math.round(k120.coverage || 0)} %)`);
sb.innerHTML = zl2.join("
");
@@ -1215,8 +1221,7 @@ function render(d) {
$("tb-tp1").textContent = ziel
? `${fmt(ziel.level, 3)} (${100 - (ziel.p_break ?? 50)}% hält)`
: "—";
- // TP2 — der Broker-TP, den das Trailing fuehrt
- $("tb-tp2").textContent = p.tp ? fmt(p.tp, 3) : "—";
+ // ⚠ TP2 entfernt — es zeigte denselben Wert wie das Feld `tb-tp`.
// TP3 — Obergrenze des 80-%-Kegels auf 120 min
const lv = ((d.cone || {}).levels) || [];
const k = lv.find(x => x.band === 80 && x.minutes === 120);
diff --git a/web/index.html b/web/index.html
index e5d9365..e104bf5 100644
--- a/web/index.html
+++ b/web/index.html
@@ -12,7 +12,7 @@
⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard
und muss offline funktionieren. -->
-
+