diff --git a/04_Tablet-Quiz/app/index.html b/04_Tablet-Quiz/app/index.html
index a6745a7..2db2360 100644
--- a/04_Tablet-Quiz/app/index.html
+++ b/04_Tablet-Quiz/app/index.html
@@ -1294,7 +1294,7 @@ function stationTiefe(id){ return BEARBEITET.has(id) ? "bearbeitet" : "entwurf";
function tiefeBadge(id){
const t = stationTiefe(id);
return t==="bearbeitet"
- ? `● Bearbeitet`
+ ? `● Ausgearbeitet`
: `○ Entwurf`;
}
/* Dokumente mit eigenem Detail-Feedback (Frank): Gate 1/2/3 + Service Review. */
@@ -1325,7 +1325,7 @@ function defaultState(){
freigabeDone:false, freigabeWrong:null,
entryDone:false, entryWrong:null,
bonusReveal:false, bonusDone:{}, servicesDone:{}, akteFlash:null, svcModalSel:null,
- index:0, stage:"discuss", quizIndex:0, gateDeciderDone:false, gateCrit:0, gate1Approval:null,
+ index:0, stage:"discuss", quizIndex:0, gateDeciderDone:false, gateCrit:0, gateCritDone:false, gate1Approval:null,
feedback:{}, feedbackSaved:{}, feedbackQueue:[],
actStep:0, actReveal:false, actDone:false, arteWrong:null,
picks:{}, done:{}, akte:{},
@@ -1820,7 +1820,7 @@ function enterStation(idx){
}
S.index = idx;
S.stage = STATIONEN[idx].typ==="gate" ? "gate" : "act";
- S.gatePick = null; S.quizIndex = 0; S.gateDeciderDone = false; S.gateCrit = 0; S.gate1Approval = null;
+ S.gatePick = null; S.quizIndex = 0; S.gateDeciderDone = false; S.gateCrit = 0; S.gateCritDone = false; S.gate1Approval = null;
S.actStep = 0; S.actReveal = false; S.actDone = false; S.arteWrong = null;
S.akteFlash = null; document.body.classList.remove("akteOpen");
}
@@ -2071,6 +2071,25 @@ function renderGate(st){
${critItems}
${allChecked?`Alle Kriterien geprüft. Geforderte Artefakte in der Akte (siehe oben)? Pflicht-Figuren am Gate-Puck?
`:``}` : ``;
+ // ---- Schritt 2: Prüf-Kriterien (eigener Screen) ----
+ if(pruef.length && !S.gateCritDone){
+ return `
+ ${revisitNote}
+ ${zielLine}
+ Entscheidet: ${roleLabel(keeper)}
+ ${reqLine}
+ ${critWrap}
+
+
+
+
`;
+ }
+
+ // ---- Schritt 3: Entscheidung (eigener Screen, nach Kriterienprüfung) ----
+ const critRecap = pruef.length ? `✓ Alle Prüf-Kriterien geprüft
` : ``;
+ const critBack = pruef.length ? `` : ``;
+ const deciderLine = `Entscheidet: ${roleLabel(keeper)}
`;
+
// Zweistufiges Gate (Gate 1): erst Freigabe-Entscheidung, dann Build-/Konfig-Routing.
if(st.freigabe){
if(S.gate1Approval==null){
@@ -2078,12 +2097,12 @@ function renderGate(st){
``).join("");
return `
${revisitNote}
- ${zielLine}
- Entscheidet: ${roleLabel(keeper)}
+ ${critRecap}
${reqLine}
- ${critWrap}
Freigabe-Entscheidung
- ${fopts}
`;
+ ${deciderLine}
+ ${fopts}
+ `;
}
// Freigabe erteilt (0/1) → Routing-Schritt
const fa = st.freigabe[S.gate1Approval];
@@ -2096,13 +2115,15 @@ function renderGate(st){
`;
}
+ // Normales Gate (2/3): Entscheidung
return `
${revisitNote}
- ${zielLine}
- Entscheidet: ${roleLabel(keeper)}
+ ${critRecap}
${reqLine}
- ${critWrap}
- ${opts}
`;
+ Entscheidung
+ ${deciderLine}
+ ${opts}
+ `;
}
/* Gate — Konsequenz der Entscheidung */
@@ -2283,6 +2304,8 @@ function wire(st){
if(b("finish")) b("finish").onclick = ()=>{ captureFeedbackInputs(); S.done[st.id]=true; S.view="end"; S.endReason="done"; save(); draw(); };
// Gate
if(b("gateDeciderNext")) b("gateDeciderNext").onclick = ()=>{ S.gateDeciderDone=true; save(); draw(); };
+ if(b("gateToDecision")) b("gateToDecision").onclick = ()=>{ S.gateCritDone=true; save(); draw(); };
+ if(b("gateToCrit")) b("gateToCrit").onclick = ()=>{ S.gateCritDone=false; S.gate1Approval=null; save(); draw(); };
$("#panel").querySelectorAll(".critItem[data-ci]").forEach(el=>{
el.onclick = ()=>{ const i=+el.dataset.ci;
S.gateCrit = (i < (S.gateCrit||0)) ? i : i+1; // abgehaktes wieder lösen vs. nächstes aufdecken
diff --git a/04_Tablet-Quiz/app/sw.js b/04_Tablet-Quiz/app/sw.js
index 40a9a38..2568598 100644
--- a/04_Tablet-Quiz/app/sw.js
+++ b/04_Tablet-Quiz/app/sw.js
@@ -1,5 +1,5 @@
/* Service Worker — SLC-Workshop Companion (App-Shell, offline-first) */
-const CACHE = "slc-companion-v32";
+const CACHE = "slc-companion-v34";
const SHELL = ["./", "index.html", "manifest.webmanifest", "icon.svg"];
// Action-Card-Grafiken (cards/s-c.png) fuer Offline vorab cachen (alle 24).
const CARDS = [];
diff --git a/PROJEKTSTAND.md b/PROJEKTSTAND.md
index a5d66b4..c12d7d9 100644
--- a/PROJEKTSTAND.md
+++ b/PROJEKTSTAND.md
@@ -118,8 +118,9 @@ Konzept (`00_Konzept/README_konzept.md`), bis Rückkopplung mit Michael:**
- [x] **GRAFIK SLC (Gesamtbild) 6×** im **Major-Walk**: Start (Main-Intro), an den 4 Phasenübergängen
(`renderActivity`/`renderGateDone`) und am Schluss (`renderEnd`) — jeweils mit Highlight der
aktuellen/nächsten Phase (`slcOverview` auf Basis von `phaseDonut`). **Bonus unberührt.**
-- [x] **„Bearbeitet"/„Entwurf" sichtbar:** Badge im Stations-Header (`stationTiefe`/`tiefeBadge`).
- Bearbeitet = `ds_01, tr_01, tr_09, tr_12, rv_01`; alles andere Entwurf.
+- [x] **„Ausgearbeitet"/„Entwurf" sichtbar:** Badge im Stations-Header (`stationTiefe`/`tiefeBadge`;
+ Label „Ausgearbeitet" — Franks „Bearbeitet", klarer benannt). Ausgearbeitet = `ds_01, tr_01,
+ tr_09, tr_12, rv_01`; alles andere Entwurf.
- [x] **Gate 1 zweistufig:** erst **Freigabe-Entscheidung** (Freigabe / mit Auflagen / **Zurück an
Design** [Rückschleife] / **Ablehnung** [End-Screen]), dann **Routing** Entwicklung/Konfiguration.
Gate-Templates: `ziel` an Gate 1/2/3 ergänzt; Gate-1-Prüfdim. „Budget für die **Implementierung**".