Elliott entmachtet (v=144)
Vier Verbesserungen, alle aus dem Gemessenen abgeleitet — kein neues Signal.
Ausgangspunkt: die Karte hat genau eine belegte Funktion, das Veto; als Prognose
ist sie ein Muenzwurf (48-51 % ueber 1.071 Episoden).
(1) SELBST-KALIBRIERUNG. Neue Tabelle rec_outcomes: eine Zeile je EPISODE
(Richtungswechsel, nicht je Minute), Auswertung ~alle 5 min gegen candles_m1
nach 30/60 min, Snapshot rec_track, Zeile #vd-selfcal. Gegen 50 % zu lesen.
Warum der groesste Hebel: die Qualitaet war bis heute unsichtbar und musste
auf Nachfrage rueckwirkend gemessen werden. Dasselbe Muster
(pbreak_predictions) hat den Ausfall des P(break)-Modells LIVE aufgedeckt.
Mit 4 Szenarien getestet (tests_rec_outcomes.py). Zwei Fehlschlaege dabei
waren Testfehler, keine Code-Fehler — dokumentiert.
(2) alignment_stats auf die VOLLE Historie (1.216 statt 40 Trades) und
zusaetzlich je Lot. Absolute Euro-Vergleiche sind bei wechselnder
Positionsgroesse ungueltig (Lehre 04.08.). Damit steht die einzige
beidhaelftig robuste Aussage der Karte auf ihrer vollen Stichprobe.
(3) Block-Gruende sichtbar (block_mix -> #vd-blocks): "heute X % ohne Block ·
entry_room … · min_conf …". Bisher nur per DB-Abfrage zu beantworten.
(4) ELLIOTT: Verdict-Gewicht 1,0 -> 0. Gemessen ueber 15.544 Zeilen hatte es mit
1.384 Episoden die groesste Stichprobe der Tabelle und ist darin flach
(-0,075/+0,032, 50 % Treffer) — bei 25,9 % Einfluss auf die Nadel, weil es
in nur 1 % der Zeilen schweigt. Chip bleibt, Stimme entfaellt.
⚠ Folge: die Nadel schlaegt staerker aus (real +0,33 -> +1,00).
⚠ Namenskollision beim Bau gefunden und behoben: die neue Klasse hiess zuerst
.vd-track — so heisst bereits die Schiene der Bias-Nadel; sie waere
ueberschrieben worden. Jetzt .vd-selfcal.
Live verifiziert: alignment je Lot, block_mix (93 von 1381 ohne Block),
rec_outcomes angelegt, Elliott weight=0 bei erhaltenem Chip, v=144 ausgeliefert,
eine Instanz auf Port 8000.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
346 lines
18 KiB
HTML
346 lines
18 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||
<meta name="theme-color" content="#0d1117">
|
||
<title>Oil · MT5</title>
|
||
<link rel="manifest" href="manifest.json">
|
||
<link rel="stylesheet" href="style.css?v=144">
|
||
</head>
|
||
<body>
|
||
<!-- Modul-Menü (ganz oben) -->
|
||
<nav id="tabs">
|
||
<button class="tab active" data-view="dash">Dashboard</button>
|
||
<!-- Aufteilung nach WIRKUNG (User-Vorgabe 2026-08-05), nicht nach Thema:
|
||
„SIG Live" = Module MIT Verdict-Gewicht (fließen in die Empfehlung ein),
|
||
„SIG Anzeige" = gemessen OHNE Einfluss. Die Trennung ist am Code prüfbar
|
||
(`_verdict`: `add(...)` mit Gewicht > 0), nicht Geschmackssache. -->
|
||
<button class="tab" data-view="siglive">SIG Live</button>
|
||
<button class="tab" data-view="siganzeige">SIG Anzeige</button>
|
||
<button class="tab" data-view="logs">Logs</button>
|
||
<button class="tab" data-view="stats">Statistik</button>
|
||
<button class="tab" data-view="news">News</button>
|
||
<button class="tab mute-tab" id="mute-btn" title="Töne an/aus">🔊</button>
|
||
</nav>
|
||
|
||
<header id="top">
|
||
<div class="sym-row">
|
||
<span id="symbol">—</span>
|
||
<div class="hdr-right">
|
||
<div class="hdr-meta">
|
||
<span id="hdr-clock" class="hdr-clock">—</span>
|
||
<span id="session" class="session-line dim">—</span>
|
||
</div>
|
||
<span id="conn" class="dot off" title="Verbindung"></span>
|
||
</div>
|
||
</div>
|
||
<div class="price-row">
|
||
<div class="px"><label>BALANCE</label><span id="balance">—</span></div>
|
||
<div class="px"><label>TAG P/L</label><span id="day-pl">—</span></div>
|
||
<div class="px"><label>EQUITY</label><span id="equity">—</span></div>
|
||
<div class="px"><label id="hdr-price-lbl">PEPPERSTONE KURS</label><span id="hdr-price">—</span></div>
|
||
<!-- Hyperliquid-Kurs NEBEN dem Broker-Kurs (User 2026-08-01). HL handelt 24/7,
|
||
Pepperstone nicht — am Wochenende der einzige lebende Kurs. Basis-korrigiert,
|
||
also direkt vergleichbar. Beide Quellen AUSGESCHRIEBEN (User 2026-08-01):
|
||
„KURS"/„HL" ließ offen, welcher Kurs woher kommt. -->
|
||
<div class="px" id="px-hl"><label>HYPERLIQUID KURS</label><span id="hdr-hl">—</span></div>
|
||
<div class="px"><label>G/V</label><span id="hdr-pnl">—</span></div>
|
||
</div>
|
||
</header>
|
||
|
||
<main id="view-dash" class="view">
|
||
<!-- Circuit Breaker (Tagesverlust-Stopp) — roter Banner, nur wenn ausgelöst/nah -->
|
||
<div id="circuit-banner" class="circuit hidden"></div>
|
||
<!-- Aktueller Trade (nur bei offener Position) — Anzeige + SL/TP/Close editierbar -->
|
||
<section class="card wide trade-bar hidden" id="trade-bar">
|
||
<h2 class="tb-title">aktueller Trade läuft <span class="tb-runtime" id="tb-runtime"></span></h2>
|
||
<div class="tb-row">
|
||
<span class="tb-field"><label>Laufzeit</label>
|
||
<b class="tb-val" id="tb-dur">—</b></span>
|
||
<span class="tb-field"><label>Richtung</label>
|
||
<b class="tb-val tb-dir" id="tb-dir">—</b></span>
|
||
<span class="tb-field"><label>Lots</label>
|
||
<b class="tb-val" id="tb-lots">—</b></span>
|
||
<span class="tb-field"><label>Einsatz</label>
|
||
<b class="tb-val" id="tb-margin">—</b></span>
|
||
<span class="tb-field"><label>Auto-Close</label>
|
||
<button id="srclose-btn" class="tb-val tb-btn">—</button></span>
|
||
<span class="tb-field stop"><label>SL</label>
|
||
<input id="tb-sl" type="number" inputmode="decimal" step="0.01" placeholder="—"></span>
|
||
<span class="tb-field gain"><label>TP</label>
|
||
<input id="tb-tp" type="number" inputmode="decimal" step="0.01" placeholder="—"></span>
|
||
<span class="tb-field gain"><label>Gewinn-Close</label>
|
||
<input id="srmin-input" type="number" inputmode="decimal" step="1" placeholder="€"></span>
|
||
<span class="tb-field stop"><label>Notfall-Close</label>
|
||
<input id="emg-input" type="number" inputmode="decimal" step="1" placeholder="€"></span>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Gesamtempfehlung (aus allen Modulen aggregiert) -->
|
||
<section class="card wide" id="card-verdict">
|
||
<h2>Gesamtempfehlung</h2>
|
||
<div class="vd-head">
|
||
<!-- ⚠ Der Ring ist ein SCORE, keine Trefferwahrscheinlichkeit. Gemessen
|
||
(`analyze_verdict_calibration.py`) ist conf_pct nicht kalibriert und
|
||
in H2 sogar invertiert — die Beschriftung sagt das jetzt auch. -->
|
||
<div class="vd-ring" id="vd-ring"
|
||
title="Aggregierter Score aus den Modulen — KEINE Trefferwahrscheinlichkeit. Gemessen ist conf_pct nicht kalibriert (in der zweiten Stichprobe sogar invertiert): hohe Werte bedeuten starken Trend + Konfluenz, und das sind im Chop-Regime gerade die Überdehnungen vor der Wende.">
|
||
<span class="vd-ring-in"><b id="vd-conf">—</b><i class="vd-ring-lbl">Score</i></span>
|
||
</div>
|
||
<div class="vd-main">
|
||
<div class="vd-signal" id="vd-signal">◌ —</div>
|
||
<div class="vd-consensus" id="vd-consensus">—</div>
|
||
</div>
|
||
</div>
|
||
<!-- ⚠⚠ STEHENDER VORBEHALT (2026-08-06, gemessen `analyze_signal_live.py`
|
||
an 1.071 Live-Episoden): die Richtungsaussage trifft in 48–51 % der
|
||
Fälle — ein Münzwurf. Der Ertrag entsteht nachweislich aus dem
|
||
EINSTIEGSPREIS (ruhende Order am Level: ØR +0,35/+0,32 gegen −0,09/−0,11
|
||
am Markt) und der Exit-Asymmetrie, nicht aus der Trefferquote. Die Zeile
|
||
steht bewusst fest im Markup und nicht in JS: sie ist ein Dauerhinweis,
|
||
kein Zustand. -->
|
||
<div class="vd-note" id="vd-note"
|
||
title="Gemessen an 1.071 Live-Episoden (08.05.–06.08.2026), gegen die Drift der jeweiligen Hälfte gelesen: Treffer 48,3–51,1 %, Überschuss max. +0,085×ATR — unter den realen Handelskosten von 0,265×ATR.">
|
||
ⓘ Richtung ≈ Münzwurf (gemessen 48–51 % Treffer). Der Ertrag kommt aus
|
||
Einstiegspreis und Exit, nicht aus der Trefferquote — lies das hier als
|
||
<b>Auslöser für eine Order am Level</b>, nicht als Kursprognose.
|
||
</div>
|
||
<!-- Warum WARTEN? Verteilung der blockierenden Gates über den heutigen Tag.
|
||
Ohne die Zeile war „warum gab es so wenige Empfehlungen?" nur per
|
||
DB-Abfrage zu beantworten (real 06.08.: 6 von 646 Zeilen ohne Block). -->
|
||
<div class="vd-blocks" id="vd-blocks"></div>
|
||
<!-- SELBST-KALIBRIERUNG (2026-08-06): die Karte zeigt ihre eigene
|
||
Trefferquote. Muster wie `pbreak_predictions` — das hat den Ausfall des
|
||
P(break)-Modells LIVE aufgedeckt, was kein Backtest konnte. ⚠ Gegen
|
||
50 % zu lesen, nicht gegen 0. -->
|
||
<div class="vd-selfcal dim" id="vd-selfcal"></div>
|
||
<div class="vd-meter">
|
||
<span class="vd-end short">SHORT</span>
|
||
<div class="vd-track"><div class="vd-needle" id="vd-needle"></div></div>
|
||
<span class="vd-end long">LONG</span>
|
||
</div>
|
||
<div class="vd-modules" id="vd-modules"></div>
|
||
<!-- Zeitebenen-Ampel (M1/M5/M15/M30/H1), aus der Welle hierher verschoben -->
|
||
<div class="tf-turns" id="wave-turns"></div>
|
||
<!-- Erwartete Spanne, komprimiert (User-Vorgabe 2026-08-05; die eigene Karte
|
||
`#card-cone` ist dafür entfallen). ⚠ STREUUNG, nicht Richtung — deshalb
|
||
bewusst UNTER der Bias-Nadel und neutral gefärbt, damit sie nicht als
|
||
Richtungsaussage gelesen wird. Beschriftet mit der REAL gemessenen
|
||
Abdeckung, nicht mit dem Nennwert 80 %. -->
|
||
<div class="vd-cone" id="vd-cone"></div>
|
||
</section>
|
||
|
||
<!-- Meldungen (ex-Position + Wellen-Meldungen; Welle-Karte entfällt) -->
|
||
<section class="card wide" id="card-pos">
|
||
<h2>Meldungen</h2>
|
||
<div class="squeeze-ind" id="wave-squeeze"></div>
|
||
<div class="bounce-ind" id="wave-bounce"></div>
|
||
<div class="cur-near" id="cur-near"></div>
|
||
<div class="pos-srhint hidden" id="pos-srhint"></div>
|
||
<div class="pos-stophint hidden" id="pos-stophint"></div>
|
||
<div class="news-conflict hidden" id="news-conflict"></div>
|
||
<div class="news-conflict hidden" id="cal-note"></div>
|
||
<!-- Auto-Flip-Close: schließt eine Position, wenn die Empfehlung dreht.
|
||
⚠ GEMESSEN in BEIDEN Halbjahren negativ (−92/−160 R,
|
||
backtest_flipclose2.py), läuft auf ausdrücklichen User-Wunsch. Hatte
|
||
bis 2026-08-05 KEINE Anzeige — ein Exit, der echtes Geld bewegt und den
|
||
niemand sieht. Jetzt sichtbar, damit die Entscheidung informiert ist. -->
|
||
<div class="news-conflict hidden" id="flip-note"></div>
|
||
<div class="reasons" id="wave-reasons"></div>
|
||
<div class="kv"><span>Setup</span><b id="wave-setup">—</b></div>
|
||
<div class="kv"><span>Lauf</span><b id="wave-move">—</b></div>
|
||
</section>
|
||
|
||
<!-- Karte „Erwartete Spanne" ENTFERNT 2026-08-05 (User-Vorgabe) — die Kernwerte
|
||
stehen jetzt komprimiert in der Gesamtempfehlung (`#vd-cone`). Backend
|
||
(`core/cone.py`, Snapshot `cone`, MT5-Export `CN;…`) ist unverändert aktiv. -->
|
||
|
||
<!-- Trailing (Dashboard-Kachel ausgeblendet 2026-07-22, User-Vorgabe; Backend/
|
||
Logik unverändert aktiv, nur die Anzeige raus) -->
|
||
<section class="card wide hidden" id="card-trail">
|
||
<h2>Trailing</h2>
|
||
<div class="kv"><span>Status</span><b id="trail-state">—</b></div>
|
||
<div class="kv"><span>Phase</span><b id="trail-phase">—</b></div>
|
||
<div class="kv"><span>SL</span><b id="trail-sl">—</b></div>
|
||
<div class="kv"><span>TP</span><b id="trail-tp">—</b></div>
|
||
<div class="kv"><span>ATR · TF</span><b id="trail-atr">—</b></div>
|
||
</section>
|
||
|
||
<!-- Live-Statistik — ganz unten -->
|
||
<section class="card wide" id="card-stats-live">
|
||
<h2>Statistik (live)</h2>
|
||
<div class="stx-row" id="stx-row"><span class="dim">lade …</span></div>
|
||
</section>
|
||
</main>
|
||
|
||
<!-- ══ SIG LIVE — Module MIT Verdict-Gewicht (fließen in die Empfehlung ein) ══
|
||
Die Zuordnung ist am Code prüfbar: `engine._verdict` ruft `add(name, vote,
|
||
gewicht, …)`. Wer hier steht, hat ein Gewicht > 0 und verschiebt die
|
||
Bias-Nadel. ⚠ Gewicht heißt NICHT „belegt": der KI-Copilot ist gemessen
|
||
nicht robust prädiktiv, hat aber Stimmrecht — genau deshalb ist die
|
||
Trennung nach WIRKUNG und nicht nach Beleglage sinnvoll. -->
|
||
<section id="view-siglive" class="view hidden">
|
||
<div class="view-head">
|
||
<h2>SIG Live</h2>
|
||
<span class="view-note">Module mit Einfluss auf die Gesamtempfehlung</span>
|
||
</div>
|
||
|
||
<!-- KI-Agent — Verdict-Gewicht 1,0 bei gerichteter Aussage, 0 bei NEUTRAL -->
|
||
<section class="card wide" id="card-agent">
|
||
<h2>KI-Copilot <span class="ca-tf">Gewicht 1,0</span></h2>
|
||
<div class="signal" id="agent-bias">◌ —</div>
|
||
<div class="agent-head" id="agent-head"></div>
|
||
<div class="agent-text" id="agent-reason"></div>
|
||
<ul class="risks" id="agent-risks"></ul>
|
||
</section>
|
||
|
||
<!-- Chartmuster — Verdict-Gewicht `_PAT_W`=0,25 (User-Vorgabe „5 %" 2026-08-01);
|
||
`forming` zählt halb. Deshalb LIVE, nicht Anzeige. -->
|
||
<section class="card wide" id="card-patterns">
|
||
<h2>Chartmuster <span class="pt-tf">M30 · Gewicht 0,25</span></h2>
|
||
<div class="pt-list" id="pt-list"><span class="dim">—</span></div>
|
||
</section>
|
||
</section>
|
||
|
||
<!-- ══ SIG ANZEIGE — gemessen OHNE Einfluss auf die Empfehlung ══════════════
|
||
Kein Verdict-Gewicht, kein Trade-Trigger. Beide Module wurden als Signal
|
||
gemessen und verworfen; sie bleiben als Kontext, nicht als Entscheidung. -->
|
||
<section id="view-siganzeige" class="view hidden">
|
||
<div class="view-head">
|
||
<h2>SIG Anzeige</h2>
|
||
<span class="view-note">reine Anzeige — gemessen ohne Einfluss</span>
|
||
</div>
|
||
|
||
<!-- Marktstruktur (M30) — Signalvariante gemessen verworfen
|
||
(backtest_structure.py + backtest_structure_tf.py: 24/24 Zellen negativ) -->
|
||
<section class="card wide" id="card-structure">
|
||
<h2>Marktstruktur <span class="ms-tf">M30 · nur Anzeige</span></h2>
|
||
<div class="ms-top">
|
||
<span class="ms-trend" id="ms-trend">—</span>
|
||
<div class="ms-swings" id="ms-swings"></div>
|
||
</div>
|
||
<div class="ms-bos" id="ms-bos"></div>
|
||
<div class="ms-chan" id="ms-chan">
|
||
<div class="ms-chan-head"><span id="ms-chan-dir">—</span>
|
||
<span class="ms-chan-note" id="ms-chan-note"></span></div>
|
||
<div class="ms-chan-track"><div class="ms-chan-fill" id="ms-chan-fill"></div>
|
||
<div class="ms-chan-dot" id="ms-chan-dot"></div></div>
|
||
<div class="ms-chan-scale"><span>Kanal unten</span><span>oben</span></div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Kerzen-Anatomie (M5) — 3× als Signal gemessen und verworfen; die
|
||
Lehrbuch-Deutung ist invertiert, deshalb steht die GEMESSENE Lesart im
|
||
Hinweistext und die Kachel ist bewusst neutral gefärbt. -->
|
||
<section class="card wide" id="card-candles">
|
||
<h2>Kerzen-Anatomie <span class="ca-tf">M5 · nur Anzeige</span></h2>
|
||
<div class="ca-list" id="ca-list"><span class="dim">—</span></div>
|
||
</section>
|
||
</section>
|
||
|
||
<!-- Logs -->
|
||
<section id="view-logs" class="view hidden">
|
||
<div class="view-head">
|
||
<h2>Logs</h2>
|
||
<button class="reload" id="logs-reload">↻</button>
|
||
</div>
|
||
<pre id="logs-body" class="logbox">lade …</pre>
|
||
</section>
|
||
|
||
<!-- Statistik -->
|
||
<section id="view-stats" class="view hidden">
|
||
<div class="view-head">
|
||
<h2>Statistik</h2>
|
||
<button class="reload" id="stats-reload">↻</button>
|
||
</div>
|
||
<div id="sqm-box"><div class="dim" style="padding:8px">lade Monitor …</div></div>
|
||
<div id="stats-body"></div>
|
||
<h2 class="sub-h">Setups (gesamt)</h2>
|
||
<div id="stats-setups"></div>
|
||
|
||
<!-- ⚠ Aus dem Dashboard hierher verschoben (User-Vorgabe 2026-08-05): das
|
||
Dashboard soll die HANDLUNGSrelevanten Module zeigen, die Rückschau
|
||
gehört in die Statistik. Die drei Karten werden weiterhin von `render()`
|
||
aus dem Snapshot gefüttert — sie hängen NICHT an `loadStats()`. Das
|
||
funktioniert, weil ein ausgeblendeter View nur `display:none` ist und
|
||
die Elemente im DOM bleiben; sonst würden die IDs beim Rendern fehlen. -->
|
||
|
||
<!-- Manuelle Trades — deskriptiv (2026-08-04). Zeigt die EIGENE Historie,
|
||
rechnet nichts hoch. Der volle Entscheidungskontext (ctx_*) wird erst
|
||
seit dem 04.08. mitgeschrieben; die Reifegrad-Zeile macht das sichtbar. -->
|
||
<section class="card wide" id="card-manual">
|
||
<h2>Manuelle Trades <span class="mt-sub">deine Historie · 30 Tage</span></h2>
|
||
<div class="mt-grid" id="mt-grid"></div>
|
||
<div class="mt-split" id="mt-split"></div>
|
||
<div class="mt-note dim" id="mt-note"></div>
|
||
</section>
|
||
|
||
<!-- Letzte Trades -->
|
||
<section class="card wide" id="card-trades">
|
||
<h2>Letzte Trades</h2>
|
||
<div class="trades" id="trades"></div>
|
||
</section>
|
||
|
||
<!-- Kurslücken (Gaps) — Fill-Magnete, nur Kontext -->
|
||
<section class="card wide" id="card-gaps">
|
||
<h2>Kurslücken (Gaps 2026)</h2>
|
||
<div class="gaps-list" id="gaps-list"><span class="dim">lade …</span></div>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
<!-- News -->
|
||
<section id="view-news" class="view hidden">
|
||
<div class="view-head">
|
||
<h2>News</h2>
|
||
<button class="reload" id="news-reload">↻</button>
|
||
</div>
|
||
<div id="news-sentiment" class="news-sent"></div>
|
||
<div id="news-body"></div>
|
||
</section>
|
||
|
||
<!-- Aktionsleiste (Trade-Steuerung) -->
|
||
<nav id="actions">
|
||
<!-- Einsatz-Margin manuell vorgeben (User 2026-08-04). Leer/0 = automatisch
|
||
(margin_buffer_pct % der freien Margin). ⚠ BEWUSST hier und nicht in der
|
||
Trade-Leiste: die ist nur bei OFFENER Position sichtbar, der Einsatz muss
|
||
aber VOR dem Öffnen einstellbar sein. Wirkt auf ALLE neuen Positionen. -->
|
||
<span class="mg-field" title="Feste Einsatz-Margin in € — leer/0 = automatisch (dann gilt der Prozentsatz rechts). Gilt auch für autonome Trades.">
|
||
<label for="margin-input">Einsatz €</label>
|
||
<input id="margin-input" type="number" inputmode="decimal" step="10" min="0" placeholder="auto">
|
||
</span>
|
||
<!-- Prozent-Gegenstück (User 2026-08-05). Steuert `margin_buffer_pct`, das
|
||
bisher nur in der ini stand. ⚠ Der feste €-Betrag hat VORRANG — steht er,
|
||
wird dieses Feld ausgegraut, damit nicht unklar bleibt, was gilt. -->
|
||
<span class="mg-field" id="marginpct-wrap" title="Einsatz als Prozent der freien Margin (1–99). Greift, solange links kein fester Betrag steht.">
|
||
<label for="marginpct-input">Einsatz %</label>
|
||
<input id="marginpct-input" type="number" inputmode="decimal" step="5" min="1" max="99" placeholder="95">
|
||
</span>
|
||
<button class="btn long" data-side="long">▲ LONG</button>
|
||
<button class="btn short" data-side="short">▼ SHORT</button>
|
||
<button class="btn close" data-side="close">✕ CLOSE</button>
|
||
<button class="btn tog" id="btn-squeeze" title="Autonomer Entry auf Squeeze-Ausbruch">🚀 BRK</button>
|
||
<button class="btn tog" id="btn-autosig" title="Autonomer Entry auf die Empfehlung — GEMESSEN NICHT tragfähig (H1 negativ), auf eigenen Wunsch aktiv">🎯 SIG</button>
|
||
<button class="btn tog" id="btn-trail">🎯 TRAIL</button>
|
||
</nav>
|
||
|
||
<!-- Modal (Bestätigung / Token-Eingabe) -->
|
||
<div id="modal" class="modal hidden">
|
||
<div class="box">
|
||
<div class="box-title" id="modal-title"></div>
|
||
<div class="box-msg" id="modal-msg"></div>
|
||
<input id="modal-input" class="hidden" type="password"
|
||
placeholder="App-Token" autocomplete="off" autocapitalize="off">
|
||
<div class="box-btns">
|
||
<button id="modal-cancel" class="mbtn cancel">Abbrechen</button>
|
||
<button id="modal-ok" class="mbtn ok">Bestätigen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="toast" class="toast hidden"></div>
|
||
|
||
<script src="app.js?v=144"></script>
|
||
</body>
|
||
</html>
|