diff --git a/server/pruef-anruf.mjs b/server/pruef-anruf.mjs index fdcb385f..cf802d49 100644 --- a/server/pruef-anruf.mjs +++ b/server/pruef-anruf.mjs @@ -628,6 +628,58 @@ melde("=== 8. Zu dritt ==="); `${wer} hoert BEIDE anderen (${z.stroeme} Stroeme, „${z.lage}")`); } + /* ---- DER LAUTSPRECHER (18.09.2026) ------------------------- + Filipe: „die funktion lautsprecher fehlt." + + Gegenstueck zum Mikrofon: „Mikro aus" heisst, die anderen + hoeren mich nicht; „Lautsprecher aus" heisst, ich hoere sie + nicht. + + DIE PRUEFUNG, AUF DIE ES ANKOMMT, ist die dritte: Kommt + jemand dazu oder geht jemand, werden die Toenelemente NEU + GEBAUT -- und neue Elemente wissen nichts von einem Schalter, + der vorher umgelegt wurde. Genau daran scheitern solche + Knoepfe sonst: Sie wirken, bis sich die Runde aendert, und + dann hoert man ploetzlich wieder mit. */ + const stumm = (x) => x.se.evaluate(() => + [...document.querySelectorAll("#anruf-leute audio, #anruf-leute video")] + .filter((m) => !m.classList.contains("anruf__bild--ich")) + .map((m) => m.muted)); + + { + const vorher = await stumm(a); + /* Die ANZAHL gehoert in die Bedingung: `every` ist auf einer + leeren Liste wahr, und dann waere diese Pruefung gruen, + ohne ein einziges Element gesehen zu haben. */ + ok(vorher.length >= 2 && vorher.every((m) => m === false), + `vorher hoert DogFather beide (${vorher.length} Stroeme, keiner stumm)`); + + const knopf = await a.se.evaluate(() => { + const k = document.getElementById("anruf-hoeren"); + return k ? { text: k.textContent.trim(), an: k.getAttribute("aria-pressed") } : null; + }); + ok(knopf?.text === "Lautsprecher an" && knopf?.an === "true", + `der Lautsprecher-Knopf ist da und steht auf an („${knopf?.text}")`); + + await a.se.click("#anruf-hoeren"); + await a.se.waitForTimeout(300); + const nachher = await stumm(a); + ok(nachher.length >= 2 && nachher.every((m) => m === true), + `nach dem Druecken ist ALLES stumm (${nachher.length} Stroeme)`); + const knopf2 = await a.se.evaluate(() => { + const k = document.getElementById("anruf-hoeren"); + return { text: k.textContent.trim(), an: k.getAttribute("aria-pressed") }; + }); + ok(knopf2.text === "Lautsprecher aus" && knopf2.an === "false", + `und der Knopf sagt es auch („${knopf2.text}")`); + + /* NUR BEI IHM. Ein Schalter, der bei den anderen mitwirkt, + waere kein Lautsprecher, sondern eine Fernbedienung. */ + const beiB = await stumm(b); + ok(beiB.length >= 2 && beiB.every((m) => m === false), + `bei der rechten Hand aendert sich nichts (${beiB.length} Stroeme, keiner stumm)`); + } + /* Einer legt auf -- fuer die anderen laeuft es weiter. */ await c.se.click("#anruf-auflegen"); await c.se.waitForTimeout(2000); @@ -638,6 +690,17 @@ melde("=== 8. Zu dritt ==="); ok(zA.stroeme === 1, `und bei DogFather ist genau ein Strom weniger (${zA.stroeme})`); + /* DIE FALLE: Die Runde hat sich geaendert, die Elemente wurden + neu gebaut. Bliebe der Schalter dabei auf der Strecke, wuerde + DogFather ploetzlich wieder mithoeren -- ohne dass irgendwo + etwas anders aussieht. */ + const nachWechsel = await stumm(a); + ok(nachWechsel.length === 1 && nachWechsel[0] === true, + `und der Lautsprecher bleibt aus, obwohl neu gezeichnet wurde (${nachWechsel.length} Strom)`); + const knopfNoch = await a.se.evaluate(() => + document.getElementById("anruf-hoeren")?.getAttribute("aria-pressed")); + ok(knopfNoch === "false", "auch der Knopf steht noch richtig"); + await a.se.click("#anruf-auflegen"); await b.se.click("#anruf-auflegen"); await a.se.waitForTimeout(1200); diff --git a/workspace/app.webmanifest b/workspace/app.webmanifest index 272e8a3d..1300784c 100644 --- a/workspace/app.webmanifest +++ b/workspace/app.webmanifest @@ -22,25 +22,25 @@ }, "icons": [ { - "src": "/assets/img/app-symbole/workspace-192.png?v=202609181700", + "src": "/assets/img/app-symbole/workspace-192.png?v=202609181708", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-512.png?v=202609181700", + "src": "/assets/img/app-symbole/workspace-512.png?v=202609181708", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609181700", + "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609181708", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609181700", + "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609181708", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/assets/css/chat.css b/workspace/assets/css/chat.css index 34a94278..310d0a49 100644 --- a/workspace/assets/css/chat.css +++ b/workspace/assets/css/chat.css @@ -1598,6 +1598,22 @@ } .anruf__knopf--auf:hover { border-color: var(--warn, #ff9aa2); } +/* Wohin der Ton geht -- nur auf Rechnern, wo der Browser das wirklich + umstellen kann. Schmal gehalten: Geraetenamen wie „Kopfhoerer + (RODECaster Duo Main)" wuerden die Knopfreihe sonst sprengen. */ +.anruf__ausgabe { + max-width: 11rem; + min-height: 40px; + padding: 6px 10px; + border: 1px solid var(--rand-hell); + border-radius: 999px; + background: color-mix(in srgb, var(--tinte) 88%, #ffffff 12%); + color: var(--text); + font: inherit; font-size: .8rem; + text-overflow: ellipsis; +} +.anruf__ausgabe:focus-visible { outline: 2px solid var(--akzent); outline-offset: 2px; } + /* --------------------------------------------------------------------- ES KLINGELT diff --git a/workspace/assets/js/anruf.js b/workspace/assets/js/anruf.js index 05c47cc1..ed5a6e77 100644 --- a/workspace/assets/js/anruf.js +++ b/workspace/assets/js/anruf.js @@ -118,12 +118,15 @@
+
`; document.body.append(k); $('anruf-ton').addEventListener('click', tonSchalten); + $('anruf-hoeren').addEventListener('click', hoerenSchalten); $('anruf-video').addEventListener('click', videoSchalten); $('anruf-auflegen').addEventListener('click', () => auflegen(true)); return k; @@ -380,6 +383,11 @@ } void wer; } + /* Der Zustand gilt auch fuer die Elemente, die es gerade eben noch + nicht gab -- und die Geraeteauswahl kann erst hier entstehen, + weil die Geraetenamen die Mikrofonerlaubnis voraussetzen. */ + hoerenAnwenden(); + ausgabeAnbieten(); } let uhr = null; @@ -404,6 +412,106 @@ k.setAttribute('aria-pressed', String(!an)); } + /* ---------- DER LAUTSPRECHER (18.09.2026) ------------------------------ + + Filipe: „die funktion lautsprecher fehlt." + + Er ist das Gegenstueck zum Mikrofon: „Mikro aus" heisst, die + anderen hoeren MICH nicht -- „Lautsprecher aus" heisst, ICH hoere + sie nicht. Beides braucht man, aus verschiedenen Gruenden: Das + Mikro macht man aus, wenn es bei einem selbst laut ist; den + Lautsprecher, wenn nebenher etwas anderes laeuft oder jemand + ins Zimmer kommt. + + WAS HIER BEWUSST NICHT STEHT: ein Umschalter zwischen Hoermuschel + und Freisprechen, wie ihn ein Telefon hat. Den gibt es im Browser + nicht. Auf dem iPhone entscheidet Safari selbst, wohin der Ton + geht; auf Android laesst das Betriebssystem einzelne Toene gar + nicht auf ein anderes Geraet legen. Ein Knopf, der dort nichts + tut, waere schlimmer als keiner -- man drueckt ihn und sucht den + Fehler dann bei sich. + + Wo es GEHT (Rechner mit Chrome, Edge oder Safari), steht dafuer + eine echte Geraeteauswahl daneben -- und nur dort. */ + + /** Hoeren wir die anderen? Steht ausserhalb von `anruf`: Wer den Ton + * abgestellt hat, will ihn nicht beim naechsten Gespraech wieder + * an. */ + let hoeren = true; + + /** Auf welches Geraet der Ton geht. Leer = das des Systems. */ + let ausgabe = ''; + + /** Setzt Stummschaltung und Geraet auf ALLE Toenelemente. + * + * Muss nach jedem `leuteZeichnen()` laufen: Das baut die Elemente + * neu, und neue Elemente wissen nichts von einer Einstellung, die + * vorher getroffen wurde. Genau daran scheitern solche Schalter + * sonst -- sie wirken, bis der Naechste dazukommt. */ + function hoerenAnwenden() { + const ziel = $('anruf-leute'); + if (!ziel) return; + for (const m of ziel.querySelectorAll('audio, video')) { + /* Das eigene Bild bleibt stumm, immer. Sich selbst zu hoeren ist + ein Echo, das jedes Gespraech unbrauchbar macht. */ + if (m.classList.contains('anruf__bild--ich')) continue; + m.muted = !hoeren; + if (ausgabe && typeof m.setSinkId === 'function') { + m.setSinkId(ausgabe).catch(() => { /* Geraet weg -> Standardgeraet */ }); + } + } + } + + function hoerenSchalten() { + hoeren = !hoeren; + const k = $('anruf-hoeren'); + if (k) { + k.textContent = hoeren ? 'Lautsprecher an' : 'Lautsprecher aus'; + k.setAttribute('aria-pressed', String(hoeren)); + } + hoerenAnwenden(); + } + + /** Baut die Geraeteauswahl -- oder eben nicht. + * + * SIE ERSCHEINT NUR, WENN ES ETWAS ZU WAEHLEN GIBT: wenn der Browser + * `setSinkId` kann UND mehr als ein Ausgabegeraet da ist. Eine + * Auswahl mit einem einzigen Eintrag ist keine Auswahl, sondern eine + * Behauptung -- und auf dem Handy waere sie eine falsche. */ + async function ausgabeAnbieten() { + const kasten = $('anruf'); + if (!kasten || $('anruf-ausgabe')) return; + if (typeof document.createElement('audio').setSinkId !== 'function') return; + if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) return; + let geraete = []; + try { + geraete = (await navigator.mediaDevices.enumerateDevices()) + .filter((g) => g.kind === 'audiooutput'); + } catch { return; } + /* Namen gibt es erst, seit das Mikrofon erlaubt wurde -- im Anruf + ist das der Fall. Ohne Namen waere die Liste eine Reihe von + Nummern, und niemand wuesste, was er waehlt. */ + if (geraete.length < 2 || !geraete.some((g) => g.label)) return; + + const w = el('select', 'anruf__ausgabe'); + w.id = 'anruf-ausgabe'; + w.setAttribute('aria-label', 'Wohin der Ton geht'); + for (const g of geraete) { + const o = document.createElement('option'); + o.value = g.deviceId; + o.textContent = g.label || 'Gerät'; + w.append(o); + } + w.value = ausgabe || geraete[0].deviceId; + w.addEventListener('change', () => { ausgabe = w.value; hoerenAnwenden(); }); + const reihe = kasten.querySelector('.anruf__knoepfe'); + /* VOR „Auflegen", nicht dahinter: Der Auflegen-Knopf sitzt per + `margin-inline-start: auto` ganz rechts. Wer danach anhaengt, + schiebt die Auswahl hinter den einzigen Knopf, der immer an + derselben Stelle stehen soll. */ + if (reihe) reihe.insertBefore(w, reihe.querySelector('.anruf__knopf--auf')); + } + function videoSchalten() { if (!anruf) return; const an = anruf.eigener.getVideoTracks().some((s) => s.enabled); diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index 5ad1139b..bcbd3ba6 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. --> - - - - - - + + + + + + - + @@ -291,10 +291,10 @@ - - - - - + + + + + diff --git a/workspace/automation.html b/workspace/automation.html index ee5e7a8c..4fa34981 100644 --- a/workspace/automation.html +++ b/workspace/automation.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -168,10 +168,10 @@ - - - - - + + + + + diff --git a/workspace/befinden.html b/workspace/befinden.html index bc6144e6..7206c63b 100644 --- a/workspace/befinden.html +++ b/workspace/befinden.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -105,9 +105,9 @@ - - - - + + + + diff --git a/workspace/bereich.html b/workspace/bereich.html index 8bc22168..216b8d6a 100644 --- a/workspace/bereich.html +++ b/workspace/bereich.html @@ -12,24 +12,24 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - + + + + + + - - + + - + @@ -243,14 +243,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/workspace/bewerben.html b/workspace/bewerben.html index a3e8f911..66d3137a 100644 --- a/workspace/bewerben.html +++ b/workspace/bewerben.html @@ -7,17 +7,17 @@ - - - - - - - - - + + + + + + + + + - + @@ -107,10 +107,10 @@ - - - - - + + + + + diff --git a/workspace/bewerbungen.html b/workspace/bewerbungen.html index 3a8aeb7d..5dbe447e 100644 --- a/workspace/bewerbungen.html +++ b/workspace/bewerbungen.html @@ -7,16 +7,16 @@ - - - - - - - - + + + + + + + + - + @@ -80,10 +80,10 @@ - - - - - + + + + + diff --git a/workspace/calls.html b/workspace/calls.html index 6d972c54..b773ac33 100644 --- a/workspace/calls.html +++ b/workspace/calls.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -89,11 +89,11 @@ - - - - - - + + + + + + diff --git a/workspace/chat.html b/workspace/chat.html index 21ed90f5..5a01e712 100644 --- a/workspace/chat.html +++ b/workspace/chat.html @@ -12,26 +12,26 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - - + + + - + @@ -341,15 +341,15 @@ - - - - + + + + - - + + diff --git a/workspace/content.html b/workspace/content.html index ae843fa2..50fad880 100644 --- a/workspace/content.html +++ b/workspace/content.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -179,12 +179,12 @@ - - - - - - - + + + + + + + diff --git a/workspace/crew-index.html b/workspace/crew-index.html index 4c62a9ab..377f9ac4 100644 --- a/workspace/crew-index.html +++ b/workspace/crew-index.html @@ -36,15 +36,15 @@ - - - + + + - + @@ -339,6 +339,6 @@ - + diff --git a/workspace/crew.webmanifest b/workspace/crew.webmanifest index ab3eaf68..71015a3d 100644 --- a/workspace/crew.webmanifest +++ b/workspace/crew.webmanifest @@ -22,25 +22,25 @@ }, "icons": [ { - "src": "/assets/img/app-symbole/crew-192.png?v=202609181700", + "src": "/assets/img/app-symbole/crew-192.png?v=202609181708", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/crew-512.png?v=202609181700", + "src": "/assets/img/app-symbole/crew-512.png?v=202609181708", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609181700", + "src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609181708", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609181700", + "src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609181708", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/dateien.html b/workspace/dateien.html index 008076e8..924383c0 100644 --- a/workspace/dateien.html +++ b/workspace/dateien.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -108,10 +108,10 @@ - - - - - + + + + + diff --git a/workspace/entwicklung.html b/workspace/entwicklung.html index 8d1b1fc2..e6d733d0 100644 --- a/workspace/entwicklung.html +++ b/workspace/entwicklung.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -102,9 +102,9 @@ - - - - + + + + diff --git a/workspace/index.html b/workspace/index.html index af44fc77..317cfa07 100644 --- a/workspace/index.html +++ b/workspace/index.html @@ -30,9 +30,9 @@ - - - + + + @@ -401,6 +401,6 @@ - + diff --git a/workspace/kalender.html b/workspace/kalender.html index 1dc41261..3c71e19e 100644 --- a/workspace/kalender.html +++ b/workspace/kalender.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -377,11 +377,11 @@ - - - - - - + + + + + + diff --git a/workspace/leistung.html b/workspace/leistung.html index e708dabe..51bfbd56 100644 --- a/workspace/leistung.html +++ b/workspace/leistung.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -444,10 +444,10 @@ - - - - - + + + + + diff --git a/workspace/personen.html b/workspace/personen.html index a0ebf863..128b378e 100644 --- a/workspace/personen.html +++ b/workspace/personen.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -423,10 +423,10 @@ - - - - - + + + + + diff --git a/workspace/profil.html b/workspace/profil.html index 683060aa..4cd4c123 100644 --- a/workspace/profil.html +++ b/workspace/profil.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -214,11 +214,11 @@ - - - - - - + + + + + + diff --git a/workspace/rechte.html b/workspace/rechte.html index 43ba6dc0..f18901f4 100644 --- a/workspace/rechte.html +++ b/workspace/rechte.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -134,9 +134,9 @@ Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, die seit dem 07.09. jede Seite danach absucht. --> - - - - + + + + diff --git a/workspace/report.html b/workspace/report.html index 85062b85..327b5eb3 100644 --- a/workspace/report.html +++ b/workspace/report.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -106,11 +106,11 @@ - - - - - - + + + + + + diff --git a/workspace/scouting.html b/workspace/scouting.html index e4ab2ca1..0a34d82d 100644 --- a/workspace/scouting.html +++ b/workspace/scouting.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -173,10 +173,10 @@ - - - - - + + + + + diff --git a/workspace/start.html b/workspace/start.html index 25f7fac7..60b93bd8 100644 --- a/workspace/start.html +++ b/workspace/start.html @@ -12,21 +12,21 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - + + - + @@ -674,10 +674,10 @@

- - - - - + + + + + diff --git a/workspace/startcheck.html b/workspace/startcheck.html index 81c946cc..4d340707 100644 --- a/workspace/startcheck.html +++ b/workspace/startcheck.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -85,11 +85,11 @@ - - - - - - + + + + + + diff --git a/workspace/steckbrief.html b/workspace/steckbrief.html index ba7d7e3b..63b3dea0 100644 --- a/workspace/steckbrief.html +++ b/workspace/steckbrief.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -146,11 +146,11 @@ - - - - - - + + + + + + diff --git a/workspace/talente.html b/workspace/talente.html index 30102ac1..273037a7 100644 --- a/workspace/talente.html +++ b/workspace/talente.html @@ -7,18 +7,18 @@ - - - - - - + + + + + + - - - + + + @@ -111,9 +111,9 @@ - - - - + + + + diff --git a/workspace/team.html b/workspace/team.html index 89fc7485..a0e40788 100644 --- a/workspace/team.html +++ b/workspace/team.html @@ -7,20 +7,20 @@ - - - - - - - + + + + + + + - + @@ -110,10 +110,10 @@ - - - - - + + + + + diff --git a/workspace/teamlage.html b/workspace/teamlage.html index 79cb6882..fe7d960b 100644 --- a/workspace/teamlage.html +++ b/workspace/teamlage.html @@ -7,20 +7,20 @@ - - - - - - - + + + + + + + - + - - - - + + + + diff --git a/workspace/teilen.html b/workspace/teilen.html index bea02fb2..da86a12c 100644 --- a/workspace/teilen.html +++ b/workspace/teilen.html @@ -7,13 +7,13 @@ - - - - - - - + + + + + + + @@ -112,9 +112,9 @@ - - - - + + + + diff --git a/workspace/treff-moderation.html b/workspace/treff-moderation.html index 85b8a5ea..55c942fc 100644 --- a/workspace/treff-moderation.html +++ b/workspace/treff-moderation.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -126,9 +126,9 @@ - - - - + + + + diff --git a/workspace/treff-regeln.html b/workspace/treff-regeln.html index 05d61055..4eeeeb9f 100644 --- a/workspace/treff-regeln.html +++ b/workspace/treff-regeln.html @@ -7,18 +7,18 @@ - - - - - - - + + + + + + + - + @@ -211,10 +211,10 @@ Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, die seit dem 07.09. jede Seite danach absucht. --> - - - - - + + + + + diff --git a/workspace/uebersicht.html b/workspace/uebersicht.html index a9016832..9d43c3cb 100644 --- a/workspace/uebersicht.html +++ b/workspace/uebersicht.html @@ -12,22 +12,22 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - - + + + - + @@ -149,11 +149,11 @@ - + - - - - + + + + diff --git a/workspace/wissen.html b/workspace/wissen.html index b51cd7c9..4a4bd2c0 100644 --- a/workspace/wissen.html +++ b/workspace/wissen.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -190,10 +190,10 @@ - - - - - + + + + +