From d3d613068c72d47b26199bd3b655a4ee05aadf70 Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Thu, 20 Aug 2026 00:11:17 +0200 Subject: [PATCH] M15-Karte: Pruefkette als Akkordeon in drei Abschnitten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-Wunsch. Die Karte war auf zehn Zeilen gewachsen und dominierte das Dashboard; jetzt sind sie in drei aufklappbare Gruppen sortiert: ① - ④ Pruefkette (offen) Bias · Kosten · Zone · Reichweite ⑤ Kontext - Motor · M5 · RSI (zu) Motor/Raum · M5-Zustand · RSI ⑥ - ⑦ Selbstmessung · Ausfuehrung · Veto (zu) Track · Exec · Veto Das Status-Banner bleibt IMMER sichtbar - es ist die eine Zeile, die eine Handlungsaussage traegt, und es bestaetigt ausdruecklich auch das Nicht-Handeln. ⚠⚠ NATIVES
/, kein JS fuer das Klappen. Entscheidend ist, dass die Elemente IM DOM bleiben: der Render schreibt weiter in alle zehn IDs, auch wenn ein Abschnitt zugeklappt ist. Ein Container, der die Elemente ENTFERNT, haette den Render abbrechen lassen - genau der Ausfall von gestern Abend, als ein ReferenceError in renderM15 das halbe Dashboard auf "—" stehen liess. JS macht nur EINES: den Auf-/Zu-Zustand in localStorage merken. Ohne das waere jeder Reload ein Rueckschritt - und die Seite wird bei jedem ?v=-Bump neu geladen. Faellt localStorage aus (privater Modus), greift der Default. Verifiziert: 10 m15-Items unveraendert vorhanden, keine doppelten IDs, div 86/86 und details 3/3 ausgeglichen, node --check gruen, Render-Probe (Stufe B2) gruen. Reine Frontend-Aenderung (v=190), kein Neustart. Co-Authored-By: Claude Opus 5 --- web/app.js | 23 +++++++++++++++++++++++ web/index.html | 46 ++++++++++++++++++++++------------------------ web/style.css | 17 +++++++++++++++++ 3 files changed, 62 insertions(+), 24 deletions(-) diff --git a/web/app.js b/web/app.js index e98ee7a..e25eb96 100644 --- a/web/app.js +++ b/web/app.js @@ -2183,3 +2183,26 @@ async function setMgGlobal() { if (e.key === "Enter") { e.preventDefault(); e.target.blur(); } }); }); + + +// --- M15-Akkordeon: Auf-/Zuklappen merken ------------------------------- +// ⚠ Das Auf- und Zuklappen macht natives
selbst - hier wird NUR der +// Zustand gemerkt, damit die Karte nach jedem Reload so aussieht, wie der +// Nutzer sie zuletzt hatte. Ohne das waere jede Seitenaktualisierung ein +// Rueckschritt, und die Seite wird bei jedem `?v=`-Bump neu geladen. +// ⚠ KEIN Eingriff in den Render: die Elemente bleiben im DOM, auch zugeklappt. +// Ein zugeklapptes
ist nur nicht sichtbar - `textContent` wird +// weiter gesetzt, und die naechste Oeffnung zeigt den aktuellen Stand. +{ + const KEY = "oil_m15_akk"; + let stand = {}; + try { stand = JSON.parse(localStorage.getItem(KEY) || "{}"); } catch (e) { stand = {}; } + document.querySelectorAll("details.m15-akk").forEach(el => { + const k = el.dataset.akk; + if (k && Object.prototype.hasOwnProperty.call(stand, k)) el.open = !!stand[k]; + el.addEventListener("toggle", () => { + stand[k] = el.open; + try { localStorage.setItem(KEY, JSON.stringify(stand)); } catch (e) { /* privater Modus */ } + }); + }); +} diff --git a/web/index.html b/web/index.html index e857b2e..2aa1553 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. --> - + @@ -111,28 +111,26 @@ gemessen 68 % WR. Sichtbar machen, nicht bevormunden. -->
-
-
-
-
- -
-
-
- -
- -
-
-
+
+ ① – ④ Prüfkette +
+
+
+
+
+
+ ⑤ Kontext — Motor · M5 · RSI +
+
+
+
+
+ ⑥ – ⑦ Selbstmessung · Ausführung · Veto +
+
+
+
+
@@ -392,6 +390,6 @@ - + diff --git a/web/style.css b/web/style.css index 90a2c4f..92c1fb5 100644 --- a/web/style.css +++ b/web/style.css @@ -630,3 +630,20 @@ main{padding-bottom:4.1111rem} /* Platz für die fixe Leiste */ nicht bedienbar (User: „Einsatz je Pfad kann ich nichts eingeben"). */ .mg-row{margin-top:0.4444rem;padding-top:0.4444rem;border-top:1px solid var(--line)} .mg-row .tb-field input{width:7ch} + +/* ── M15-Prüfkette als Akkordeon (User-Wunsch 2026-08-20) ───────────────── + ⚠ Natives
/: kein JS für das Auf- und Zuklappen, und — + entscheidend — die Elemente bleiben IM DOM, auch wenn zugeklappt. Ein + `display:none`-Container würde den Render NICHT stören (die IDs existieren + weiter), ein Entfernen dagegen schon. */ +.m15-akk{border:1px solid var(--line);border-radius:var(--r-sm); + margin-bottom:0.3333rem;background:var(--surface-2)} +.m15-akk > summary{cursor:pointer;padding:0.3889rem 0.5556rem; + font-size:0.8333rem;color:var(--dim);letter-spacing:.3px; + list-style:none;user-select:none} +.m15-akk > summary::-webkit-details-marker{display:none} +.m15-akk > summary::before{content:"▸ ";color:var(--dim)} +.m15-akk[open] > summary::before{content:"▾ "} +.m15-akk > summary:hover{color:var(--bright)} +.m15-akk[open] > summary{border-bottom:1px solid var(--line)} +.m15-akk .m15-item{margin:0.2222rem 0.3333rem}