diff --git a/server/pruef-css-klassen.mjs b/server/pruef-css-klassen.mjs index 83cfe892..26d64a5e 100644 --- a/server/pruef-css-klassen.mjs +++ b/server/pruef-css-klassen.mjs @@ -328,7 +328,12 @@ console.log("\n=== Ist irgendeine Schrift zu klein? ==="); Sie steht hier als Zahl und nicht als Liste, damit niemand eine neue Stelle in eine Ausnahmeliste einträgt und sie damit stillschweigend erlaubt. */ - const GRUNDLINIE = 43; + /* 43 -> 42 am 14.09.2026: Die Marke auf schmalen Bildschirmen stand + auf .68rem = 10,88 px (gate.css, Zugangswand von Team Dogi) und ist + jetzt .72rem. Die Grundlinie wird MITGEZOGEN -- sonst duerfte der + Fortschritt lautlos wieder verlorengehen, und eine Grundlinie, die + nur nach oben nachgibt, ist keine. */ + const GRUNDLINIE = 42; ok(zuKlein.length <= GRUNDLINIE && gemessen > 150, zuKlein.length > GRUNDLINIE ? `${zuKlein.length} Stellen unter ${GRENZE_PX} px — das sind ` diff --git a/server/pruef-handy.mjs b/server/pruef-handy.mjs index 0b33a4cc..b02cd865 100644 --- a/server/pruef-handy.mjs +++ b/server/pruef-handy.mjs @@ -221,13 +221,43 @@ const messen = () => ({ /* 3. Beruehrziele. 24x24 CSS-Pixel ist das Mindestmass nach WCAG 2.2 (2.5.8). Gemessen wird das Ziel selbst ODER sein umschliessender Bereich -- ein 16 px grosses Symbol in einem 44 px grossen Knopf - ist in Ordnung. */ - klein: [...document.querySelectorAll("button, a[href], input, select, textarea, [role=button]")] + ist in Ordnung. + + LINKS IN EINEM SATZ SIND AUSGENOMMEN -- und zwar nicht, weil es + bequemer ist, sondern weil 2.5.8 das selbst so sagt: "Inline: The + target is in a sentence or its size is otherwise constrained by + the line-height of non-target text." + + Die Pruefung zitierte bis zum 14.09.2026 die Regel, aber nicht + ihre Ausnahme. Gemeldet wurden dadurch die zwei Verweise im + Fliesstext der Treff-Regeln ("Der Treff", "Regeln & Hilfe", je + 20 px hoch). Sie auf 24 px zu bringen hiesse, die Zeilenhoehe des + Absatzes zu sprengen -- man wuerde also einen Text kaputtmachen, + um eine Regel zu erfuellen, die diesen Text ausdruecklich nicht + meint. + + ENG GEFASST: Nur , nur wirklich inline dargestellt, und nur + wenn im selben Absatz auch Text steht, der NICHT zum Link gehoert. + Ein allein stehender Link bleibt ein Beruehrziel. */ + klein: (() => { + const imSatz = (e) => { + if (e.tagName !== "A") return false; + if (!getComputedStyle(e).display.startsWith("inline")) return false; + const eltern = e.parentElement; + if (!eltern) return false; + const daneben = [...eltern.childNodes] + .filter((n) => n !== e) + .map((n) => (n.textContent || "").trim()) + .join(" ").trim(); + return daneben.length >= 10; // das ist der Satz drumherum + }; + return [...document.querySelectorAll("button, a[href], input, select, textarea, [role=button]")] .filter((e) => { const r = e.getBoundingClientRect(); if (r.width < 1 || r.height < 1) return false; const st = getComputedStyle(e); if (st.display === "none" || st.visibility === "hidden") return false; + if (imSatz(e)) return false; return r.width < 24 || r.height < 24; }) .map((e) => { @@ -235,7 +265,8 @@ const messen = () => ({ return `${e.tagName}"${(e.textContent || e.getAttribute("aria-label") || "").trim().slice(0, 14)}" ` + `${Math.round(r.width)}x${Math.round(r.height)}`; }) - .slice(0, 5), + .slice(0, 5); + })(), /* 4. Ueberlappende Bedienelemente. Zwei Knoepfe, die sich decken, heissen: Man trifft den falschen. Geprueft wird der Mittelpunkt -- @@ -620,6 +651,43 @@ ok(mitUmschalter.size >= 1 && fremdGeprueft === KOPF_GERAETE.length * mitUmschal ok(weckerGeprueft >= KOPF_GERAETE.length, `das Weckerfeld wurde ${weckerGeprueft}-mal wirklich gemessen`); +/* ===================================================================== + GEGENPROBE ZUR BERUEHRZIEL-REGEL (14.09.2026) + + Seit heute hat die Regel eine Ausnahme (Links im Satz, WCAG 2.5.8). + Eine Regel mit Ausnahme braucht den Beweis in BEIDE Richtungen -- + sonst laesst sich nicht unterscheiden, ob sie nichts findet, weil + nichts da ist, oder weil die Ausnahme alles verschluckt. + + Diese Datei hatte bis heute ueberhaupt keine Gegenprobe. Sie konnte + also nie zeigen, dass sie ein zu kleines Ziel ueberhaupt bemerkt. + ===================================================================== */ +console.log("\n=== Gegenprobe zur Beruehrziel-Regel ==="); +{ + const kontext = await browser.newContext({ + viewport: { width: 390, height: 844 }, isMobile: true, hasTouch: true }); + const seite = await kontext.newPage(); + await seite.goto(BASIS + "/workspace/", { waitUntil: "networkidle" }); + await seite.evaluate(() => { + const k = document.createElement("div"); + k.id = "gegenprobe"; + /* Zweimal dieselbe Hoehe: einmal allein stehend, einmal im Satz. */ + k.innerHTML = + "xx" + + "
Das hier ist ein ganz normaler Satz mit einem " + + "Verweis darin" + + " und noch etwas Text dahinter.
"; + document.body.append(k); + }); + const r = await seite.evaluate(messen); + const namen = r.klein.join(" | "); + ok(/20x20/.test(namen), + `ein allein stehendes 20x20-Ziel wird erkannt (${namen || "nichts gefunden"})`); + ok(!/Verweis darin/.test(namen), + "ein gleich grosser Verweis IM SATZ wird zu Recht nicht gemeldet (WCAG 2.5.8)"); + await seite.evaluate(() => document.getElementById("gegenprobe")?.remove()); + await kontext.close(); +} await browser.close(); try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ } console.log(fehler ? `\n${fehler} Prüfung(en) fehlgeschlagen.` : "\nAlles in Ordnung."); diff --git a/workspace/app.webmanifest b/workspace/app.webmanifest index ebd0cc78..5c9f4483 100644 --- a/workspace/app.webmanifest +++ b/workspace/app.webmanifest @@ -13,25 +13,25 @@ "theme_color": "#06090f", "icons": [ { - "src": "/assets/img/app-symbole/workspace-192.png?v=202609141819", + "src": "/assets/img/app-symbole/workspace-192.png?v=202609141948", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-512.png?v=202609141819", + "src": "/assets/img/app-symbole/workspace-512.png?v=202609141948", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609141819", + "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609141948", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609141819", + "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609141948", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/assets/css/gate.css b/workspace/assets/css/gate.css index e76ce961..936454bc 100644 --- a/workspace/assets/css/gate.css +++ b/workspace/assets/css/gate.css @@ -828,7 +828,12 @@ body.oeffnet .buehne__bild { filter: saturate(1) brightness(1); transition: filt .tafel { padding: 16px 18px 14px; } .titel { font-size: 1.42rem; margin-bottom: 4px; } .unterzeile { margin-bottom: 16px; font-size: .88rem; } - .marke { font-size: .68rem; margin-bottom: 3px; } + /* .72rem = 11,52 px. Vorher .68rem = 10,88 px und damit unter der + Hausuntergrenze von 11,5 px -- gefunden von pruef-handy auf der + Zugangswand von Team Dogi ("DogFather", "Team Dogi"). Das ist die + erste Seite, die ein neuer Modi ueberhaupt sieht, und sie wird mit + dem Daumen bedient. Dieselbe Hebung wie seinerzeit in heim.css. */ + .marke { font-size: .72rem; margin-bottom: 3px; } .feldschild { margin-bottom: 7px; font-size: .74rem; } .rollen { margin-bottom: 14px; } diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index f38beb82..4f65bbc0 100644 --- a/workspace/aufgaben.html +++ b/workspace/aufgaben.html @@ -12,19 +12,19 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - + + + + + + - + @@ -252,11 +252,11 @@ - - - - - - + + + + + +