From e933de32486f132d446f1d8c5aa06aebfb33639c Mon Sep 17 00:00:00 2001 From: Dogfather Date: Fri, 18 Sep 2026 17:08:31 +0200 Subject: [PATCH] Anruf: der Lautsprecher -- und warum es kein Freisprech-Knopf ist 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, wenn es bei einem selbst laut ist; den Lautsprecher, wenn nebenher etwas laeuft oder jemand ins Zimmer kommt. WAS BEWUSST NICHT GEBAUT WURDE: der Umschalter zwischen Hoermuschel und Freisprechen, den ein Telefon hat. Recherchiert statt geraten -- den gibt es im Browser nicht: Auf dem iPhone entscheidet Safari selbst, wohin der Ton geht, und Android laesst einzelne Toene gar nicht auf ein anderes Geraet legen (setSinkId ist dort nicht verfuegbar, weil die Plattform es nicht hergibt). 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, Safari), steht dafuer eine echte Geraeteauswahl daneben. Sie erscheint nur, wenn es mehr als ein Geraet gibt UND die Namen bekannt sind; eine Auswahl mit einem Eintrag ist keine Auswahl, sondern eine Behauptung. DIE PRUEFUNG, AUF DIE ES ANKOMMT: 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. Gegenprobe (Anwenden nach dem Neuzeichnen ausgebaut) macht genau diese eine Pruefung rot, waehrend alle anderen gruen bleiben. Geprueft: pruef-anruf 73 -> 80, im echten Dreiergespraech im Browser. Co-Authored-By: Claude Opus 5 --- server/pruef-anruf.mjs | 63 +++++++++++++++++++ workspace/app.webmanifest | 8 +-- workspace/assets/css/chat.css | 16 +++++ workspace/assets/js/anruf.js | 108 ++++++++++++++++++++++++++++++++ workspace/aufgaben.html | 24 +++---- workspace/automation.html | 26 ++++---- workspace/befinden.html | 24 +++---- workspace/bereich.html | 36 +++++------ workspace/bewerben.html | 30 ++++----- workspace/bewerbungen.html | 28 ++++----- workspace/calls.html | 28 ++++----- workspace/chat.html | 28 ++++----- workspace/content.html | 30 ++++----- workspace/crew-index.html | 10 +-- workspace/crew.webmanifest | 8 +-- workspace/dateien.html | 26 ++++---- workspace/entwicklung.html | 24 +++---- workspace/index.html | 8 +-- workspace/kalender.html | 28 ++++----- workspace/leistung.html | 26 ++++---- workspace/personen.html | 26 ++++---- workspace/profil.html | 28 ++++----- workspace/rechte.html | 24 +++---- workspace/report.html | 28 ++++----- workspace/scouting.html | 26 ++++---- workspace/start.html | 24 +++---- workspace/startcheck.html | 28 ++++----- workspace/steckbrief.html | 28 ++++----- workspace/talente.html | 26 ++++---- workspace/team.html | 26 ++++---- workspace/teamlage.html | 24 +++---- workspace/teilen.html | 22 +++---- workspace/treff-moderation.html | 24 +++---- workspace/treff-regeln.html | 26 ++++---- workspace/uebersicht.html | 26 ++++---- workspace/wissen.html | 26 ++++---- 36 files changed, 589 insertions(+), 402 deletions(-) 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 @@ - - - - - + + + + +