diff --git a/server/pruef-reaktion-schmal.mjs b/server/pruef-reaktion-schmal.mjs
index 86c809ef..7b76c7b0 100644
--- a/server/pruef-reaktion-schmal.mjs
+++ b/server/pruef-reaktion-schmal.mjs
@@ -322,6 +322,57 @@ for (const [breite, hoehe, wie] of GERAETE) {
" und der Knopf zum Zumachen ist auch jetzt da und anklickbar — "
+ "das trennt einen Schoenheitsfehler von einer Falle");
+ /* ==== DER HINWEIS: SICHTBAR, ABER NICHT AUF KOSTEN DES BILDES ===
+
+ Zwei Fehler an einer Stelle, beide am 02.10.2026 gemessen:
+
+ · Er war NULL PIXEL hoch, obwohl `hidden=false` und 104
+ Zeichen Text -- ein `role="alert"`, den niemand sieht.
+ · Und auf 320 px hatte er sich vorher eine stillschweigende
+ fuenfte Rasterzeile genommen: 71 Pixel, die dem Bild
+ fehlten (56 statt 127).
+
+ HIER WIRD DER ZUSTAND SELBST HERGESTELLT und nicht abgewartet.
+ Im Betrieb erscheint der Hinweis, wenn Kamera oder Mikrofon
+ fehlen -- auf einem Messrechner ist das immer so, auf einem
+ Handy mit Freigabe nie. Eine Pruefung, die auf die Kamera des
+ Messrechners baut, prueft die Messumgebung. Also: Text
+ hineinschreiben, sichtbar machen, messen. */
+ const hinweis = await seite.evaluate(() => {
+ const f = document.getElementById("fehler");
+ const bildVorher = Math.round(
+ document.getElementById("leinwand").getBoundingClientRect().height);
+ f.textContent = "Kamera oder Mikrofon sind nicht freigegeben. "
+ + "Im Browser oben in der Adresszeile laesst sich das aendern.";
+ f.hidden = false;
+ return { bildVorher };
+ });
+ await seite.waitForTimeout(300);
+ const hinweisLage = await seite.evaluate(() => {
+ const f = document.getElementById("fehler");
+ const r = f.getBoundingClientRect();
+ const mitte = document.elementFromPoint(
+ Math.min(innerWidth - 1, Math.max(0, r.left + r.width / 2)),
+ Math.min(innerHeight - 1, Math.max(0, r.top + r.height / 2)));
+ return {
+ hoch: Math.round(r.height),
+ imFenster: r.height > 0 && r.top >= 0 && r.bottom <= innerHeight,
+ obenauf: !!mitte && (mitte === f || f.contains(mitte)),
+ bildNachher: Math.round(
+ document.getElementById("leinwand").getBoundingClientRect().height),
+ };
+ });
+ ok(hinweisLage.hoch > 0 && hinweisLage.imFenster && hinweisLage.obenauf,
+ `der Kamerahinweis ist lesbar, wenn er erscheint (${hinweisLage.hoch} px, im Fenster`
+ + `, obenauf) — vorher war er 0 px hoch`);
+ ok(hinweisLage.bildNachher === hinweis.bildVorher,
+ ` und er kostet das Bild nichts (${hinweis.bildVorher} -> ${hinweisLage.bildNachher} px)`
+ + " — vorher nahm er sich auf 320 px eine eigene Rasterzeile");
+ await seite.evaluate(() => {
+ const f = document.getElementById("fehler");
+ f.textContent = ""; f.hidden = true;
+ });
+
ok(konsole.length === 0,
konsole.length ? "Fehler im Browser: " + konsole.join(" | ") : "kein Absturz im Browser");
diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html
index 79472dd4..44db2211 100644
--- a/workspace/anruf-probe.html
+++ b/workspace/anruf-probe.html
@@ -16,8 +16,8 @@
verdeckt. Gefunden hat es pruef-struktur.
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
-
-
+
+
-
+