Kamera und Chat -- die zwei fehlenden Host-Steuerungen

Filipes Notiz nennt acht: "Host-Steuerung fuer Kamera, Mikrofon,
Video, Gaeste, Lautstaerke, Chat, Layout und Start/Ende."
Nachgezaehlt war sechsmal etwas da und zweimal nichts.

KAMERA

Es gab keinen Weg, das eigene Bild abzuschalten. Wer kurz aufstehen,
trinken oder etwas holen wollte, musste die Sendung verlassen oder
sich dabei filmen lassen.

Jetzt liegt eine SENDERLEISTE ueber dem Bild -- Kamera, Mikro und ein
Pegel. Sie gehoert jedem, der sendet, Host wie Gast: Ein Gast, der
sein eigenes Bild nicht abschalten kann, muesste den Host darum
bitten, und das ist keine Bedienung, sondern eine Bitte.

DAS BILD WIRD AM GERAET ABGESCHALTET (`track.enabled = false`), nicht
am Server: Die Verbindung bleibt stehen, der Ton laeuft weiter, und
beim Wiedereinschalten ist das Bild sofort da. Der Server erfaehrt es
nur, damit bei den ANDEREN "Kamera aus" im Fenster steht. Ohne diese
Beschriftung sind ein abgeschaltetes und ein kaputtes Bild dasselbe
schwarze Rechteck -- und dann fragt jemand im Chat, ob die Technik
hakt.

Erst das Geraet, dann die Ansage. Andersherum stuende bei allen
"Kamera aus", waehrend noch ein Bild fliesst; man glaubte sich
unsichtbar. Geht die Ansage nicht durch, wird das Geraet
zurueckgesetzt -- ein Knopf, der halb wirkt, ist schlimmer als einer,
der gar nicht wirkt.

Das Mikro laeuft denselben Weg. Erst wollte ich es rein oertlich
lassen; das waere dieselbe stille Falle gewesen: Wer sich selbst
stummschaltet und trotzdem redet, saehe bei allen anderen ein ganz
normales Fenster.

CHAT

Es gab Moderation -- Beitraege wegnehmen -- aber keine Steuerung des
Chats selbst. Einen Beitrag zu loeschen, nachdem er stand, ist etwas
anderes, als ihn gar nicht erst zuzulassen.

Drei Stufen: OFFEN, TEAM (wer moderiert, darf -- wer aufraeumen soll,
muss dabei reden koennen) und ZU (nur die zwei, die fuehren). Zwei
Stufen waeren zu wenig: "zu" ist in einer Sendung fast immer zu viel,
dann sitzen alle vor einem stummen Fenster. Die mittlere ist die, die
man wirklich braucht.

Die Schalter stehen im Kopf der Chatschiene, nicht im Regiepult: Man
moderiert, wo man liest. Ein Umweg ueber ein Register waere in dem
Moment, in dem es laut wird, genau ein Umweg zu viel.

EIN GESPERRTES FELD SAGT, WARUM. "Gerade schreibt nur das Team" statt
eines Feldes, das sich nicht beschreiben laesst und schweigt --
sonst schreibt jemand in den Hauschat, dass die Reaction hakt. Und
die Stufe gilt AM SERVER: Ein ausgegrautes Feld haelt niemanden auf,
der die Schnittstelle kennt. Beide Antworten kommen aus derselben
Funktion; zwei Rechnungen waeren zwei Gelegenheiten, dass ein Feld da
ist und mit 403 antwortet.

EIN FUND NEBENBEI: "MEIN MIKRO" WAR EIN PLACEBO

Gemessen: `staende.mikro` wird nirgends gelesen. Der Schieber liess
sich bewegen, die Zahl daneben aenderte sich -- und es passierte
nichts. Das ist schlimmer als ein fehlender Regler: Man glaubt, man
haette leiser gestellt.

Technisch ist das auch richtig. Die eigene Lautstaerke laesst sich
nicht am Regler aendern; man muesste den Ton umrechnen und die Spur
in jeder Verbindung austauschen. Was man beim eigenen Mikro braucht,
ist AN oder AUS -- und ein Pegel, der zeigt, dass es ankommt. Genau
das steht jetzt dort, als vierte Spalte im Pult, mit demselben
Zustand wie die Senderleiste. Die drei anderen Regler bleiben Regler:
Sie steuern, was ICH hoere, und das geht am Empfaenger.

UND EINER IN MEINER EIGENEN ARBEIT

`kasten.append(el("div","pegel")).append(el("i"))` -- `Node.append()`
gibt `undefined` zurueck, nicht das angehaengte Element. Ein
TypeError beim Aufbau des Pults, den `node --check` nicht sieht.
Beim Verkuerzen nicht nachgesehen, was die Methode zurueckgibt.

Dazu: Die Pegel-Takte liefen in `pultAufbauen()`. Das Pult hat nur,
wer die Sendung fuehrt -- ein Gast haette seinen Pegel nie gesehen,
und genau er braucht ihn am dringendsten.

GEMESSEN

  mess-reaktion   Der Host schaltet ab, und bei der Zuschauerin steht
                  "Kamera aus" bei DogFather, Bild verdeckt.
                  Stufe "Team": Feld gesperrt mit Grund, und der
                  Server lehnt denselben Versuch mit 403 ab.
  pruef-reaktion  154 Punkte, 0 Fehler (vorher 132), neuer Abschnitt
                  13 mit 22 Punkten und Gegenprobe (es geht auch
                  wieder auf -- eine Sperre, die man nicht loesen
                  kann, ist keine Stufe, sondern ein Ende)
  dazu gruen      handy 180, css-klassen 33, struktur 35,
                  tippziele 11, aufbewahrung 45, meldungen 8

Der neue Abschnitt baut sich seine Buehne selbst. Abschnitt 9 beendet
die Sendung; sich auf den Stand eines frueheren Abschnitts zu
verlassen ist die Kopplung, die spaeter jemand aus Versehen
zerreisst.

SCHEMA: drei Spalten (reaktion_dabei.kamera_aus, .mikro_aus,
reaktion.chat_modus), alle per ALTER TABLE. Auf einer Kopie der
echten Datenbank durchgespielt: 20 Personen, keine Tabelle verliert
eine Spalte.
This commit is contained in:
2026-09-28 08:16:49 +02:00
parent d79f6faa23
commit 28b492527e
50 changed files with 1415 additions and 698 deletions
+46
View File
@@ -460,6 +460,52 @@ if (regie.regler !== 4 || regie.pegel !== 4 || regie.knoepfe_sichtbar !== 3) {
ausgang = 1;
}
/* ---- Kamera aus und Chat-Stufe ------------------------------------
Beides ist erst gebaut, wenn es beim ZUSCHAUER ankommt. */
console.log("");
console.log(" --- Kamera aus, Chat zu ---");
await host.seite.click("#s-kamera").catch(() => {});
await host.seite.waitForTimeout(1200);
const nachKamera = await zuschauer.seite.evaluate(() => {
const f = document.querySelector('#kameras .kamera[data-kamera="aus"]');
return {
schild: f ? f.querySelector(".kamera__aus")?.textContent?.trim() : null,
wessen: f ? f.querySelector(".kamera__name")?.textContent?.trim() : null,
videoVersteckt: f ? getComputedStyle(f.querySelector("video")).opacity === "0" : false,
};
});
console.log(` Zuschauerin sieht: „${nachKamera.schild || "(nichts)"}" `
+ `bei ${nachKamera.wessen || "(niemandem)"}, Bild verdeckt=${nachKamera.videoVersteckt}`);
if (nachKamera.schild !== "Kamera aus" || !nachKamera.videoVersteckt) {
console.log(" ACHTUNG: Das abgeschaltete Bild kommt nicht als Schild an.");
ausgang = 1;
}
await host.seite.click("#s-kamera").catch(() => {});
await host.seite.waitForTimeout(900);
await host.seite.click('#chat-stufen .stufe[data-modus="team"]').catch(() => {});
await host.seite.waitForTimeout(1200);
const nachChat = await zuschauer.seite.evaluate(() => {
const f = document.getElementById("chat-feld");
return { gesperrt: !!f?.disabled, grund: f?.placeholder || "",
stufe: document.getElementById("schiene")?.dataset.chat };
});
console.log(` Zuschauerin: Feld gesperrt=${nachChat.gesperrt} `
+ `Grund „${nachChat.grund}" Stufe=${nachChat.stufe}`);
/* GEGENPROBE AM SERVER. Ein ausgegrautes Feld haelt niemanden auf,
der die Schnittstelle kennt -- also wird auch dort nachgefragt. */
const trotzdem = await roh("/workspace/api/reaktion/chat", {
method: "POST", keks: k.gast, rumpf: { text: "geht das trotzdem?" },
});
console.log(` ... und der Server lehnt ab: ${trotzdem.code}/${trotzdem.j?.fehler}`);
if (!nachChat.gesperrt || !nachChat.grund.includes("Team") || trotzdem.code !== 403) {
console.log(" ACHTUNG: Die Chat-Stufe kommt nicht an.");
ausgang = 1;
}
await host.seite.click('#chat-stufen .stufe[data-modus="offen"]').catch(() => {});
await host.seite.waitForTimeout(900);
await vermessen(host.seite, "Host am Rechner");
await bild(host.seite, "3-live-host");
+156 -3
View File
@@ -880,10 +880,163 @@ melde("=== 12. Die Regie ===");
}
/* =======================================================================
13. KEIN WEG HEISST ZWEIMAL GLEICH
13. KAMERA UND CHAT — die zwei fehlenden Host-Steuerungen
Filipes Notiz nennt acht: Kamera, Mikrofon, Video, Gaeste,
Lautstaerke, Chat, Layout, Start/Ende. Nachgezaehlt war sechsmal
etwas da und zweimal nichts.
======================================================================= */
melde("");
melde("=== 13. Keine doppelten Wege ===");
melde("=== 13. Kamera und Chat ===");
{
/* ABSCHNITT 9 HAT DIE SENDUNG BEENDET -- also wird hier neu
aufgemacht. Sich auf den Stand eines frueheren Abschnitts zu
verlassen ist die Kopplung, die spaeter jemand aus Versehen
zerreisst; dann faellt ein Abschnitt um, an dem nichts falsch
ist. */
await roh(CREW, "/workspace/api/reaktion", {
method: "PUT", keks: k.admin,
rumpf: { titel: "Kamera und Chat", video: "dQw4w9WgXcQ" },
});
await roh(CREW, "/workspace/api/reaktion/stand", {
method: "POST", keks: k.admin, rumpf: { stand: "live" },
});
for (const rolle of ["admin", "hand", "linke", "modi", "gast", "gast2"]) {
await roh(CREW, "/workspace/api/reaktion/dabei", { method: "POST", keks: k[rolle] });
}
await roh(CREW, "/workspace/api/reaktion/gast", {
method: "POST", keks: k.admin, rumpf: { person_id: IDS.gast2 },
});
const stand0 = await roh(CREW, "/workspace/api/reaktion", { keks: k.admin });
ok(stand0.j?.stand === "live" && stand0.j?.gaeste?.length === 1,
`die Buehne steht (${stand0.j?.stand}, ${stand0.j?.gaeste?.length} Gast)`);
/* ---- Kamera ---- */
const fremd = await roh(CREW, "/workspace/api/reaktion/senden", {
method: "POST", keks: k.gast, rumpf: { kamera_aus: true },
});
ok(fremd.code === 403 && fremd.j?.fehler === "sendest_nicht",
`wer nicht sendet, schaltet nichts (${fremd.code}/${fremd.j?.fehler})`);
const aus = await roh(CREW, "/workspace/api/reaktion/senden", {
method: "POST", keks: k.admin, rumpf: { kamera_aus: true },
});
ok(aus.code === 200 && aus.j?.ich?.kamera_aus === true,
`der Host schaltet sein Bild ab (${aus.code})`);
ok(aus.j?.host?.kamera_aus === true,
"und es steht an der Sendung, damit es ALLE sehen");
/* TEILWEISE AENDERN DARF DEN ANDEREN WERT NICHT ANFASSEN. Sonst
muesste jede Seite immer beide Werte mitschicken -- und wer das
vergisst, schaltet dem anderen versehentlich das Bild wieder an. */
const nurMikro = await roh(CREW, "/workspace/api/reaktion/senden", {
method: "POST", keks: k.admin, rumpf: { mikro_aus: true },
});
ok(nurMikro.j?.ich?.mikro_aus === true && nurMikro.j?.ich?.kamera_aus === true,
"nur das Mikro zu schalten laesst die Kamera in Ruhe");
const leer = await roh(CREW, "/workspace/api/reaktion/senden", {
method: "POST", keks: k.admin, rumpf: {},
});
ok(leer.code === 400 && leer.j?.fehler === "nichts_zu_tun",
`ein Aufruf ohne Inhalt sagt das auch (${leer.code})`);
/* Ein Gast darf es fuer sich -- sonst muesste er den Host bitten. */
const gastAus = await roh(CREW, "/workspace/api/reaktion/senden", {
method: "POST", keks: k.gast2, rumpf: { kamera_aus: true },
});
ok(gastAus.code === 200,
`ein Gast schaltet sein eigenes Bild ab (${gastAus.code})`);
const beimHost = await roh(CREW, "/workspace/api/reaktion", { keks: k.admin });
ok(beimHost.j?.gaeste?.some((g) => g.id === IDS.gast2 && g.kamera_aus === true),
"und der Host sieht es an der Gastkarte");
/* Zurueck, damit der Rest der Pruefung von einem sauberen Stand
aus weiterlaeuft. */
await roh(CREW, "/workspace/api/reaktion/senden", {
method: "POST", keks: k.admin, rumpf: { kamera_aus: false, mikro_aus: false },
});
await roh(CREW, "/workspace/api/reaktion/senden", {
method: "POST", keks: k.gast2, rumpf: { kamera_aus: false },
});
/* ---- Chat ---- */
for (const rolle of ["linke", "modi", "gast"]) {
const a = await roh(CREW, "/workspace/api/reaktion/chatmodus", {
method: "POST", keks: k[rolle], rumpf: { modus: "zu" },
});
ok(a.code === 403, `${rolle}: stellt den Chat nicht um (${a.code})`);
}
const unsinn = await roh(CREW, "/workspace/api/reaktion/chatmodus", {
method: "POST", keks: k.admin, rumpf: { modus: "halboffen" },
});
ok(unsinn.code === 400 && unsinn.j?.fehler === "chatmodus_unbekannt",
`eine erfundene Stufe wird abgelehnt (${unsinn.code})`);
const offen = await roh(CREW, "/workspace/api/reaktion/chat", {
method: "POST", keks: k.gast, rumpf: { text: "offen geht" },
});
ok(offen.code === 201, `bei „offen" schreibt die Community (${offen.code})`);
const team = await roh(CREW, "/workspace/api/reaktion/chatmodus", {
method: "POST", keks: k.hand, rumpf: { modus: "team" },
});
ok(team.code === 200 && team.j?.chat_modus === "team",
`die rechte Hand stellt auf „Team" (${team.j?.chat_modus})`);
const gastTeam = await roh(CREW, "/workspace/api/reaktion/chat", {
method: "POST", keks: k.gast, rumpf: { text: "und jetzt?" },
});
ok(gastTeam.code === 403 && gastTeam.j?.fehler === "chat_nur_team",
`dann schweigt die Community (${gastTeam.code}/${gastTeam.j?.fehler})`);
const modiTeam = await roh(CREW, "/workspace/api/reaktion/chat", {
method: "POST", keks: k.modi, rumpf: { text: "wir ordnen kurz" },
});
ok(modiTeam.code === 201, `ein Modi schon -- er soll ja ordnen (${modiTeam.code})`);
/* DIE OBERFLAECHE MUSS DIESELBE ANTWORT BEKOMMEN wie der Server.
Sonst steht ein Feld da, das sich beschreiben laesst und beim
Absenden 403 sagt -- eine Falle, keine Bedienung. */
const sichtGast = await roh(CREW, "/workspace/api/reaktion", { keks: k.gast });
ok(sichtGast.j?.ich?.darf_schreiben === false,
"und die Oberflaeche erfaehrt es, bevor jemand tippt");
const sichtModi = await roh(CREW, "/workspace/api/reaktion", { keks: k.modi });
ok(sichtModi.j?.ich?.darf_schreiben === true,
"der Modi erfaehrt das Gegenteil");
const zu = await roh(CREW, "/workspace/api/reaktion/chatmodus", {
method: "POST", keks: k.admin, rumpf: { modus: "zu" },
});
ok(zu.j?.chat_modus === "zu", "die Stufe zu geht auch");
const modiZu = await roh(CREW, "/workspace/api/reaktion/chat", {
method: "POST", keks: k.modi, rumpf: { text: "auch ich?" },
});
ok(modiZu.code === 403 && modiZu.j?.fehler === "chat_zu",
`dann schweigt auch der Modi (${modiZu.code}/${modiZu.j?.fehler})`);
const hostZu = await roh(CREW, "/workspace/api/reaktion/chat", {
method: "POST", keks: k.admin, rumpf: { text: "ich sage noch etwas" },
});
ok(hostZu.code === 201,
`die zwei, die fuehren, koennen weiter reden (${hostZu.code})`);
/* GEGENPROBE: Es geht auch wieder auf. Eine Sperre, die man nicht
loesen kann, ist keine Stufe, sondern ein Ende. */
await roh(CREW, "/workspace/api/reaktion/chatmodus", {
method: "POST", keks: k.admin, rumpf: { modus: "offen" },
});
const wiederOffen = await roh(CREW, "/workspace/api/reaktion/chat", {
method: "POST", keks: k.gast, rumpf: { text: "wieder da" },
});
ok(wiederOffen.code === 201,
`Gegenprobe: zurueck auf „offen", und die Community schreibt wieder (${wiederOffen.code})`);
}
/* =======================================================================
14. KEIN WEG HEISST ZWEIMAL GLEICH
======================================================================= */
melde("");
melde("=== 14. Keine doppelten Wege ===");
{
/* Beim Notizblock hat genau das eine Stunde gekostet:
`DELETE /workspace/api/notizen/:id` gab es schon woanders, und
@@ -907,7 +1060,7 @@ melde("=== 13. Keine doppelten Wege ===");
ok(doppelt.length === 0,
doppelt.length ? `DOPPELT: ${[...new Set(doppelt)].join(", ")}` : "kein Weg kommt zweimal vor");
const reaktionswege = wege.filter((x) => x.includes("/api/reaktion")).length;
ok(reaktionswege >= 15, `die Reaction bringt ${reaktionswege} eigene Wege mit`);
ok(reaktionswege >= 17, `die Reaction bringt ${reaktionswege} eigene Wege mit`);
}
melde("");
+38
View File
@@ -83,6 +83,19 @@ export const STAENDE = ["zu", "vorbereitung", "live"];
/** Die Anordnungen des Bildes. */
export const LAYOUTS = ["kino", "gleich", "kamera"];
/** Wer im Live-Chat schreiben darf.
*
* Filipes Notiz nennt „Chat" als eine der acht Host-Steuerungen.
* Gemeint ist nicht die Moderation -- die gab es schon -- sondern
* der Chat selbst: Einen Beitrag wegzunehmen, nachdem er stand, ist
* etwas anderes, als ihn gar nicht erst zuzulassen.
*
* DREI STUFEN UND NICHT ZWEI. „Zu" ist in einer Sendung fast immer
* zu viel -- dann sitzen alle vor einem stummen Fenster. Die
* mittlere Stufe ist die, die man wirklich braucht: Es wird laut,
* das Team ordnet kurz, danach geht es wieder auf. */
export const CHAT_MODI = ["offen", "team", "zu"];
/** Hoechstens so viele Videos duerfen in der Warteschlange stehen.
*
* Die Zahl ist keine technische Grenze, sondern eine Ansage: Wer
@@ -216,6 +229,31 @@ export function reaktionTabellen(d) {
niemand pflegt, kann nicht veralten; `ADD COLUMN` braucht gar
keine. */
const da = new Set(d.prepare("PRAGMA table_info(reaktion)").all().map((z) => z.name));
if (!da.has("chat_modus")) {
/* Wer im Live-Chat schreiben darf. Gilt fuer die ganze Sendung,
nicht je Person -- deshalb hier und nicht an den Zusehenden. */
d.exec("ALTER TABLE reaktion ADD COLUMN chat_modus TEXT NOT NULL DEFAULT 'offen'");
console.log("[reaktion] Spalte chat_modus angelegt.");
}
const dabei = new Set(
d.prepare("PRAGMA table_info(reaktion_dabei)").all().map((z) => z.name));
if (!dabei.has("kamera_aus")) {
/* Wer sein Bild gerade abgeschaltet hat.
AN DIESER TABELLE UND NICHT AN DEN GAESTEN: Hier steht, wer
gerade da ist -- Host, Gaeste und Zuschauer in einer Liste.
Genau die richtige Lebensdauer: Wer geht, nimmt seinen Zustand
mit, und die Pflege raeumt ihn ohnehin weg. */
d.exec("ALTER TABLE reaktion_dabei ADD COLUMN kamera_aus INTEGER NOT NULL DEFAULT 0");
console.log("[reaktion] Spalte kamera_aus angelegt.");
}
if (!dabei.has("mikro_aus")) {
/* Und dasselbe fuers Mikro. Wer sich selbst stummschaltet und
trotzdem redet, saehe sonst bei allen anderen ein ganz
normales Fenster -- niemand merkt, dass nichts ankommt, und er
selbst am wenigsten. */
d.exec("ALTER TABLE reaktion_dabei ADD COLUMN mikro_aus INTEGER NOT NULL DEFAULT 0");
console.log("[reaktion] Spalte mikro_aus angelegt.");
}
if (!da.has("video_titel")) {
/* Der Name des laufenden Videos, einmal bei YouTube geholt.
Ohne ihn stuende im Pult und auf der Wartetafel nur die
+132 -4
View File
@@ -47,7 +47,7 @@ import { einstellung } from "./workspace.js";
import { mitZugangsdaten, wegeAusfaechern } from "./workspace-turn.js";
import {
SICHT_PLAETZE, GAESTE_MAX, TEXT_MAX, SCHREIB_BREMSE, STAENDE, LAYOUTS,
VERLAUF_TAGE, LISTE_MAX,
VERLAUF_TAGE, LISTE_MAX, CHAT_MODI,
} from "./reaktion-tabellen.js";
export const reaktionRouter = express.Router();
@@ -212,7 +212,8 @@ function dabeiListe() {
const grenze = new Date(Date.now() - 120_000).toISOString();
db().prepare("DELETE FROM reaktion_dabei WHERE gesehen < ?").run(grenze);
return db().prepare(`
SELECT d.person_id AS id, d.sicht, d.seit, p.name, p.rolle
SELECT d.person_id AS id, d.sicht, d.seit, d.kamera_aus, d.mikro_aus,
p.name, p.rolle
FROM reaktion_dabei d JOIN personen p ON p.id = d.person_id
ORDER BY d.seit`).all();
}
@@ -244,10 +245,26 @@ function lage(person) {
laeuft: !!s.laeuft,
sekunde: s.sekunde,
gestartet_am: s.gestartet_am,
/* WER GERADE SEIN BILD AUS HAT -- fuer den Host und fuer jeden
Gast. Ohne diese Auskunft waere ein abgeschaltetes Bild von
einem kaputten nicht zu unterscheiden: beides ein schwarzes
Fenster. Mit ihr steht „Kamera aus" darin, und niemand fragt
nach. */
host: s.host_id
? db().prepare("SELECT id, name, rolle FROM personen WHERE id = ?").get(s.host_id)
? (() => {
const p = db().prepare("SELECT id, name, rolle FROM personen WHERE id = ?").get(s.host_id);
if (!p) return null;
const z = dabei.find((d) => d.id === p.id);
return { ...p, kamera_aus: !!z?.kamera_aus, mikro_aus: !!z?.mikro_aus };
})()
: null,
gaeste: gaeste.map((g) => ({ id: g.id, name: g.name, rolle: g.rolle, stumm: !!g.stumm, platz: g.platz })),
gaeste: gaeste.map((g) => ({
id: g.id, name: g.name, rolle: g.rolle, stumm: !!g.stumm, platz: g.platz,
kamera_aus: !!(dabei.find((d) => d.id === g.id)?.kamera_aus),
mikro_aus: !!(dabei.find((d) => d.id === g.id)?.mikro_aus),
})),
chat_modus: s.chat_modus || "offen",
chat_modi: CHAT_MODI,
dabei: dabei.length,
/* ==== WER DIE LISTE BEKOMMT -- UND WARUM GENAU DIESE ==========
@@ -280,6 +297,9 @@ function lage(person) {
gast: binGast,
moderiert: MODERIERT.has(person.rolle),
sicht: !!(dabei.find((d) => d.id === person.id)?.sicht),
kamera_aus: !!(dabei.find((d) => d.id === person.id)?.kamera_aus),
mikro_aus: !!(dabei.find((d) => d.id === person.id)?.mikro_aus),
darf_schreiben: darfSchreiben(person, s),
},
/* DIE WARTESCHLANGE SEHEN NUR DIE ZWEI. Sie ist Teil der
Vorbereitung, und Filipe hat dazu gesagt: „nur die zwei sollen
@@ -301,6 +321,26 @@ function lage(person) {
};
}
/** Darf diese Person gerade in den Live-Chat schreiben?
*
* EINE STELLE FUER ZWEI FRAGEN. Der Server muss es wissen, um
* abzulehnen; die Oberflaeche muss es wissen, um das Feld gar nicht
* erst anzubieten. Zwei Rechnungen waeren zwei Gelegenheiten, dass
* ein Feld da ist und mit 403 antwortet -- und das ist eine Falle,
* keine Bedienung. */
function darfSchreiben(person, stand) {
if (stand.stand === "zu") return false;
const modus = stand.chat_modus || "offen";
if (modus === "offen") return true;
/* „team": wer moderiert, darf. Das ist dieselbe Menge, die auch
Beitraege wegnehmen darf -- wer aufraeumen soll, muss dabei
reden koennen. */
if (modus === "team") return MODERIERT.has(person.rolle);
/* „zu": nur die zwei, die die Sendung fuehren. Sonst saesse der
Saal vor einem Fenster, in dem gar nichts mehr passiert. */
return HOST_ROLLEN.has(person.rolle);
}
function melden(art, daten) {
stromAn(empfaenger(), art, daten);
}
@@ -752,6 +792,86 @@ reaktionRouter.post("/workspace/api/reaktion/weiter", nurHost, express.json({ li
}
});
/* ---------- Kamera aus, Kamera an ---------------------------------------
Filipes Notiz nennt „Kamera" als erste der acht Host-Steuerungen.
Sie fehlte: Wer kurz aufstehen, trinken oder etwas holen wollte,
musste die Sendung verlassen oder sich dabei filmen lassen.
DAS BILD WIRD AM GERAET ABGESCHALTET, NICHT AM SERVER. Die Spur
wird stillgelegt (`track.enabled = false`); die Verbindung bleibt
stehen, der Ton laeuft weiter, und beim Wiedereinschalten ist das
Bild sofort da statt nach einem neuen Verbindungsaufbau. Dieser
Weg hier sagt nur allen ANDEREN Bescheid, damit im Fenster
„Kamera aus" steht und nicht ein schwarzes Rechteck, das nach
einem Fehler aussieht.
JEDER SENDER DARF DAS FUER SICH -- Host wie Gast. Ein Gast, der
sein eigenes Bild nicht abschalten kann, muesste den Host darum
bitten. */
reaktionRouter.post("/workspace/api/reaktion/senden", express.json({ limit: "2kb" }),
(req, res) => {
try {
const s = sendung();
if (s.stand === "zu") return res.status(409).json({ fehler: "geschlossen" });
const istHost = HOST_ROLLEN.has(req.person.rolle);
const binGast = !!db().prepare("SELECT 1 FROM reaktion_gaeste WHERE person_id = ?")
.get(req.person.id);
if (!istHost && !binGast) return res.status(403).json({ fehler: "sendest_nicht" });
/* TEILWEISE AENDERN IST ERLAUBT. Wer nur die Kamera schaltet,
schickt nur die Kamera -- sonst muesste jede Seite immer
beide Werte mitschicken und koennte dabei den anderen
versehentlich zuruecksetzen. */
const felder = [];
const werte = [];
if (req.body?.kamera_aus !== undefined) {
felder.push("kamera_aus = ?"); werte.push(req.body.kamera_aus ? 1 : 0);
}
if (req.body?.mikro_aus !== undefined) {
felder.push("mikro_aus = ?"); werte.push(req.body.mikro_aus ? 1 : 0);
}
if (!felder.length) return res.status(400).json({ fehler: "nichts_zu_tun" });
const geschrieben = db().prepare(
`UPDATE reaktion_dabei SET ${felder.join(", ")} WHERE person_id = ?`)
.run(...werte, req.person.id);
/* WER NICHT IN DER LISTE STEHT, SITZT NICHT IM SAAL. Das ist
kein Sonderfall, sondern ein Hinweis: Die Seite hat sich
zwei Minuten nicht gemeldet. Stillschweigend nichts zu tun
waere ein Knopf, der nicht wirkt. */
if (!geschrieben.changes) return res.status(409).json({ fehler: "nicht_dabei" });
const l = lage(req.person);
melden("reaktion", { was: "senden", lage: oeffentlich(l) });
res.json(l);
} catch (fehler) {
console.error("[reaktion] Kamera:", fehler?.message);
res.status(503).json({ fehler: "nicht_verfuegbar" });
}
});
/* ---------- Der Chat als Ganzes ----------------------------------------
„Chat" aus Filipes Liste der acht Steuerungen. Gemeint ist nicht
die Moderation -- die gab es schon -- sondern der Chat selbst.
Einen Beitrag wegzunehmen, nachdem er stand, ist etwas anderes,
als ihn gar nicht erst zuzulassen. */
reaktionRouter.post("/workspace/api/reaktion/chatmodus", nurHost, express.json({ limit: "2kb" }),
(req, res) => {
try {
const modus = String(req.body?.modus ?? "");
if (!CHAT_MODI.includes(modus)) return res.status(400).json({ fehler: "chatmodus_unbekannt" });
db().prepare("UPDATE reaktion SET chat_modus = ? WHERE id = 1").run(modus);
protokolliere(req.person.id, "reaktion_chatmodus", modus, echteIp(req));
const l = lage(req.person);
melden("reaktion", { was: "chatmodus", lage: oeffentlich(l) });
res.json(l);
} catch (fehler) {
console.error("[reaktion] Chatmodus:", fehler?.message);
res.status(503).json({ fehler: "nicht_verfuegbar" });
}
});
reaktionRouter.post("/workspace/api/reaktion/layout", nurHost, express.json({ limit: "2kb" }),
(req, res) => {
try {
@@ -785,6 +905,14 @@ reaktionRouter.post("/workspace/api/reaktion/chat", express.json({ limit: "8kb"
try {
const s = sendung();
if (s.stand === "zu") return res.status(409).json({ fehler: "geschlossen" });
/* DIE STUFE GILT HIER, NICHT NUR IN DER OBERFLAECHE. Ein Feld,
das ausgegraut ist, haelt niemanden auf, der die Schnittstelle
kennt. */
if (!darfSchreiben(req.person, s)) {
return res.status(403).json({
fehler: s.chat_modus === "team" ? "chat_nur_team" : "chat_zu",
});
}
const text = String(req.body?.text ?? "").trim().slice(0, TEXT_MAX);
if (!text) return res.status(400).json({ fehler: "leer" });
if (zuSchnell(req.person.id)) return res.status(429).json({ fehler: "zu_schnell" });
+5 -5
View File
@@ -16,8 +16,8 @@
verdeckt. Gefunden hat es pruef-struktur.
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
@@ -33,7 +33,7 @@
schreibt jede Seite app.webmanifest -- auch die hier. -->
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<style>
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
@@ -135,7 +135,7 @@
<script src="assets/js/anruf-probe.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/anruf-probe.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
</body>
</html>
+4 -4
View File
@@ -23,25 +23,25 @@
},
"icons": [
{
"src": "/assets/img/app-symbole/workspace-192.png?v=202609280344",
"src": "/assets/img/app-symbole/workspace-192.png?v=202609280816",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/assets/img/app-symbole/workspace-512.png?v=202609280344",
"src": "/assets/img/app-symbole/workspace-512.png?v=202609280816",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609280344",
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609280816",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609280344",
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609280816",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
+134
View File
@@ -1210,3 +1210,137 @@
fill: none; stroke: currentColor; stroke-width: 1.8;
stroke-linecap: round; stroke-linejoin: round;
}
/* =====================================================================
DIE SENDERLEISTE (28.09.2026)
Kamera und Mikro gehoeren dem, der sendet -- Host wie Gast. Sie
liegen UEBER dem Bild und nicht im Regiepult: Waehrend einer
Sendung sieht man auf das Bild, und ein Gast hat ueberhaupt kein
Pult.
SIE IST LEISE, SOLANGE ALLES AN IST. Zwei dunkle Knoepfe am Rand.
Erst wenn etwas AUS ist, wird der Knopf rot -- dann ist es eine
Auskunft und keine Verzierung.
===================================================================== */
.senderleiste {
position: absolute;
left: 16px; bottom: 16px;
z-index: 30;
display: flex; align-items: center; gap: 8px;
padding: 6px;
border-radius: 999px;
background: rgba(10, 8, 16, .82);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--rand);
box-shadow: 0 16px 38px -20px #000;
}
.sender-knopf {
appearance: none; cursor: pointer;
display: inline-flex; align-items: center; gap: 8px;
min-height: 40px; padding: 0 14px 0 11px;
border-radius: 999px;
border: 1px solid transparent;
background: rgba(255, 255, 255, .06);
color: var(--schrift);
font-size: .8rem; font-weight: 700;
}
.sender-knopf svg {
width: 19px; height: 19px;
fill: none; stroke: currentColor; stroke-width: 1.7;
stroke-linecap: round; stroke-linejoin: round;
}
/* Der Schraegstrich erscheint nur, wenn es AUS ist -- dasselbe
Zeichen, das jedes Geraet dafuer benutzt. */
.sender-knopf__strich { opacity: 0; }
.sender-knopf[aria-pressed="true"] {
background: color-mix(in srgb, var(--an) 34%, transparent);
border-color: color-mix(in srgb, var(--an) 58%, transparent);
color: #ffe2e4;
}
.sender-knopf[aria-pressed="true"] .sender-knopf__strich { opacity: 1; }
/* Der Pegel in der Leiste: der kuerzeste Weg zur Antwort auf
„kommt mein Ton ueberhaupt an?". */
.sender-pegel {
display: block;
width: 5px; height: 26px;
margin: 0 8px 0 2px;
border-radius: 3px;
background: rgba(255, 255, 255, .1);
position: relative; overflow: hidden;
}
.sender-pegel i {
position: absolute; left: 0; right: 0; bottom: 0;
height: var(--stand, 0%);
border-radius: 3px;
background: linear-gradient(0deg, #4fb27a 0%, #4fb27a 64%, var(--gleich) 86%, var(--an) 100%);
transition: height .09s linear;
}
/* ---- „Kamera aus" im Fenster ----------------------------------------
Ein abgeschaltetes Bild ist nicht dasselbe wie ein kaputtes. Ohne
diese Beschriftung sind beide ein schwarzes Rechteck -- und dann
fragt jemand im Chat, ob die Technik hakt. */
.kamera__aus {
position: absolute; inset: 0;
display: grid; place-items: center;
background: rgba(8, 7, 14, .88);
color: var(--schrift-leise);
font-size: .74rem; font-weight: 700;
letter-spacing: .06em;
border-radius: inherit;
}
.kamera[data-kamera="aus"] video { opacity: 0; }
/* ---- Der Mikro-Schalter im Pult -------------------------------------
Dieselbe Spalte wie die drei Regler, nur ohne Schieber: Die eigene
Lautstaerke laesst sich nicht am Regler aendern. Was man braucht,
ist an/aus -- und der Pegel daneben. */
.regler--schalter {
grid-template-areas: "wort" "pegel" "stumm";
grid-template-columns: auto;
}
.regler--schalter .pegel { width: 9px; }
/* ---- Die Chat-Stufe --------------------------------------------------
Drei Schalter im Kopf der Schiene. Man moderiert, wo man liest.
===================================================================== */
.stufen {
display: flex; gap: 3px;
margin-left: auto;
padding: 3px;
border-radius: 10px;
background: rgba(0, 0, 0, .35);
border: 1px solid var(--rand);
}
.stufe {
appearance: none; cursor: pointer;
min-height: 28px; padding: 0 9px;
border: 0; border-radius: 7px;
background: none;
color: var(--schrift-leise);
font-size: .72rem; font-weight: 700;
}
.stufe[aria-pressed="true"] {
background: rgba(255, 255, 255, .1);
color: var(--schrift);
}
/* Ist der Chat eingeschraenkt, sieht man es der ganzen Schiene an --
nicht nur dem kleinen Schalter oben. */
.schiene[data-chat="team"] .schiene__form,
.schiene[data-chat="zu"] .schiene__form {
border-top-color: color-mix(in srgb, var(--gleich) 40%, transparent);
background: color-mix(in srgb, var(--gleich) 7%, transparent);
}
.schiene__feld[disabled] { opacity: .75; cursor: not-allowed; }
.schiene__senden[disabled] { opacity: .4; cursor: not-allowed; }
@media (max-width: 860px) {
/* Am Handy liegen unten rechts die Kamerafenster -- die Leiste
rueckt nach oben links unter das Schild. */
.senderleiste { left: 10px; bottom: auto; top: 46px; padding: 4px; gap: 5px; }
.sender-knopf { min-height: 38px; padding: 0 11px 0 9px; font-size: .74rem; }
.sender-pegel { height: 22px; margin: 0 5px 0 1px; }
}
+12
View File
@@ -207,6 +207,18 @@
'Es sind schon zwei Gäste dabei. Nimm erst jemanden heraus.',
layout_unbekannt:
'Diese Anordnung gibt es nicht.',
sendest_nicht:
'Kamera und Mikro schaltet nur, wer gerade sendet – '
+ 'der Host oder ein Gast auf der Bühne.',
nichts_zu_tun:
'Da war nichts zu schalten.',
chatmodus_unbekannt:
'Diese Chat-Stufe gibt es nicht. Möglich sind: offen, Team, zu.',
chat_nur_team:
'Gerade schreibt nur das Team. Gleich geht der Chat wieder auf.',
chat_zu:
'Der Chat ist gerade zu. Sobald DogFather ihn wieder aufmacht, '
+ 'geht es hier weiter.',
liste_voll:
'Die Warteschlange ist voll. Nimm erst etwas heraus – '
+ 'mehr überblickt im Live sowieso niemand.',
+202 -31
View File
@@ -178,6 +178,8 @@
const kino = $('teil-live');
kino.dataset.layout = lage.layout || 'kino';
kamerasZeichnen();
senderleisteZeichnen();
chatStufeZeichnen();
/* ---- Das Pult ---- */
const pult = $('pult');
@@ -228,7 +230,21 @@
behaelter.append(fenster);
}
fenster.dataset.host = s.host ? 'ja' : 'nein';
fenster.dataset.stumm = s.stumm ? 'ja' : 'nein';
/* EIN ABGESCHALTETES BILD IST NICHT DASSELBE WIE EIN KAPUTTES.
Ohne diese Beschriftung sind beide ein schwarzes Rechteck,
und man fragt den anderen, ob bei ihm etwas klemmt. */
fenster.dataset.kamera = s.kamera_aus ? 'aus' : 'an';
/* `stumm` setzt der Host fuer alle, `mikro_aus` der Mensch fuer
sich. Beides sieht man dem Fenster an, und beides heisst
dasselbe: von hier kommt gerade kein Ton. */
fenster.dataset.stumm = (s.stumm || s.mikro_aus) ? 'ja' : 'nein';
let schild = fenster.querySelector('.kamera__aus');
if (s.kamera_aus && !schild) {
schild = el('span', 'kamera__aus', 'Kamera aus');
fenster.append(schild);
} else if (!s.kamera_aus && schild) {
schild.remove();
}
const draht = drähte.get(s.id);
const v = fenster.querySelector('video');
if (s.id === meineId && meinStrom && v.srcObject !== meinStrom) {
@@ -246,6 +262,65 @@
}
}
/* ---- Die Senderleiste --------------------------------------------
Kamera und Mikro gehoeren dem, der sendet -- Host wie Gast. Sie
liegen ueber dem Bild, weil man waehrend einer Sendung dorthin
sieht und nicht auf ein Register.
DER ZUSTAND STEHT AM SERVER, NICHT NUR IM BROWSER. Die Spur
abzuschalten reicht technisch (`track.enabled = false`), aber
dann sehen die anderen ein schwarzes Fenster ohne Grund. Der
Server sagt es weiter, damit „Kamera aus" darin steht. */
function senderleisteZeichnen() {
const leiste = $('senderleiste');
if (!leiste) return;
const sende = !!(lage && binSender && lage.stand === 'live');
leiste.hidden = !sende;
if (!sende) return;
const kAus = !!lage.ich.kamera_aus;
const mAus = !!lage.ich.mikro_aus;
$('s-kamera').setAttribute('aria-pressed', String(kAus));
$('s-mikro').setAttribute('aria-pressed', String(mAus));
$('s-kamera-wort').textContent = kAus ? 'Kamera an' : 'Kamera';
$('s-mikro-wort').textContent = mAus ? 'Mikro an' : 'Mikro';
$('s-kamera').title = kAus ? 'Bild wieder einschalten' : 'Bild abschalten';
$('s-mikro').title = mAus ? 'Mikro wieder einschalten' : 'Mikro abschalten';
}
/** Kamera oder Mikro schalten -- Geraet UND Ansage in einem Zug.
*
* ERST DAS GERAET, DANN DIE ANSAGE. Andersherum stuende bei allen
* „Kamera aus", waehrend noch ein Bild fliesst -- und das ist die
* unangenehmere Reihenfolge: Man glaubt, man sei unsichtbar. */
async function sendenSchalten(was, aus) {
if (!meinStrom) return;
const spuren = was === 'kamera'
? meinStrom.getVideoTracks() : meinStrom.getAudioTracks();
for (const sp of spuren) sp.enabled = !aus;
try {
const a = await hole('/workspace/api/reaktion/senden', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(was === 'kamera' ? { kamera_aus: aus } : { mikro_aus: aus }),
});
if (!a.ok) {
/* Die Ansage ging nicht durch -- also auch das Geraet zurueck.
Ein Knopf, der halb wirkt, ist schlimmer als einer, der gar
nicht wirkt: Man weiss nicht, woran man ist. */
for (const sp of spuren) sp.enabled = aus;
melde(await a.json().catch(() => null), 'Das ging gerade nicht.');
return;
}
lage = { ...(await a.json()) };
zeichnen();
} catch {
for (const sp of spuren) sp.enabled = aus;
sagFehler('Das ging gerade nicht.');
}
}
/* ---- Der Ton ----------------------------------------------------
Er wird EINMAL freigegeben und bleibt dann frei. */
let tonFrei = false;
@@ -827,6 +902,35 @@
/* =================================================================
DER LIVE-CHAT
================================================================= */
/* ---- Die Chat-Stufe ----------------------------------------------
Drei Schalter fuer die zwei, die die Sendung fuehren; fuer alle
anderen die Auskunft, warum das Feld gerade nicht geht.
EIN GESPERRTES FELD MUSS SAGEN, WARUM. Ein Feld, das sich nicht
beschreiben laesst und schweigt, sieht kaputt aus -- und dann
schreibt jemand in den Hauschat, dass die Reaction hakt. */
function chatStufeZeichnen() {
const stufen = $('chat-stufen');
if (!stufen) return;
stufen.hidden = !lage.ich.host;
if (lage.ich.host) {
for (const k of stufen.children) {
k.setAttribute('aria-pressed', String(k.dataset.modus === lage.chat_modus));
}
}
const feld = $('chat-feld');
const senden = document.querySelector('.schiene__senden');
const darf = lage.ich.darf_schreiben !== false;
feld.disabled = !darf;
if (senden) senden.disabled = !darf;
feld.placeholder = darf ? 'Sag was …'
: (lage.chat_modus === 'team'
? 'Gerade schreibt nur das Team'
: 'Der Chat ist gerade zu');
$('schiene').dataset.chat = lage.chat_modus || 'offen';
}
async function chatLaden() {
try {
const a = await hole('/workspace/api/reaktion/chat');
@@ -899,7 +1003,12 @@
er sagt nur, wo der Knopf steht.
================================================================= */
const REGLER = [
{ schluessel: 'mikro', wort: 'Mein Mikro' },
/* `schalter: true` heisst: kein Schieber, nur an/aus und Pegel.
Die eigene Lautstaerke laesst sich nicht am Regler aendern --
dafuer muesste der Ton umgerechnet und die Spur in jeder
Verbindung ausgetauscht werden. Ein Schieber, der sich bewegen
laesst und nichts tut, ist schlimmer als keiner. */
{ schluessel: 'mikro', wort: 'Mein Mikro', schalter: true },
{ schluessel: 'gast1', wort: 'Gast 1' },
{ schluessel: 'gast2', wort: 'Gast 2' },
{ schluessel: 'video', wort: 'YouTube' },
@@ -924,6 +1033,7 @@
Lautstaerke. Einen erfundenen Ausschlag zu zeichnen waere
schlimmer als keiner -- man wuerde ihm glauben. */
let klangRaum = null;
let q2spitze = 0; // die Spitze fuer die Senderleiste
const pegelQuellen = new Map(); // schluessel -> { analyse, feld, spitze }
function klangRaumHolen() {
@@ -956,6 +1066,26 @@
}
function pegelTakt() {
/* Der Pegel in der Senderleiste -- fuer jeden, der sendet. Ein
Gast hat kein Pult, an dem er nachsehen koennte, ob sein Ton
ankommt; er braucht ihn am dringendsten. */
const leistenPegel = $('s-pegel');
if (leistenPegel) {
const q = pegelQuellen.get('mikro');
let hoch = 0;
if (q && !(lage && lage.ich.mikro_aus)) {
q.analyse.getByteTimeDomainData(q.feld);
let summe = 0;
for (let i = 0; i < q.feld.length; i++) {
const w = (q.feld[i] - 128) / 128;
summe += w * w;
}
hoch = Math.min(100, Math.round(Math.sqrt(Math.sqrt(summe / q.feld.length)) * 165));
}
q2spitze = hoch > q2spitze ? hoch : Math.max(hoch, q2spitze - 7);
leistenPegel.style.setProperty('--stand', q2spitze + '%');
}
for (const r of REGLER) {
const kasten = document.querySelector(`.regler[data-was="${r.schluessel}"]`);
if (!kasten) continue;
@@ -1068,28 +1198,33 @@
const reihe = $('regler');
reihe.textContent = '';
for (const r of REGLER) {
const kasten = el('div', 'regler');
const kasten = el('div', 'regler' + (r.schalter ? ' regler--schalter' : ''));
kasten.dataset.was = r.schluessel;
kasten.append(el('span', 'regler__wort', r.wort));
const schieber = document.createElement('input');
schieber.type = 'range';
schieber.min = '0'; schieber.max = '100'; schieber.value = '100';
schieber.setAttribute('aria-label', r.wort);
const zahl = el('span', 'regler__zahl', '100');
schieber.addEventListener('input', () => {
staende[r.schluessel] = Number(schieber.value);
zahl.textContent = schieber.value;
tonNachziehen();
});
kasten.append(schieber);
if (!r.schalter) {
const schieber = document.createElement('input');
schieber.type = 'range';
schieber.min = '0'; schieber.max = '100'; schieber.value = '100';
schieber.setAttribute('aria-label', r.wort);
const zahl = el('span', 'regler__zahl', '100');
schieber.addEventListener('input', () => {
staende[r.schluessel] = Number(schieber.value);
zahl.textContent = schieber.value;
tonNachziehen();
});
kasten.append(schieber);
const balken = el('div', 'pegel');
balken.append(el('i'));
kasten.append(balken);
kasten.append(zahl);
} else {
const balken = el('div', 'pegel');
balken.append(el('i'));
kasten.append(balken);
}
const balken = el('div', 'pegel');
balken.append(el('i'));
kasten.append(balken);
kasten.append(zahl);
const stumm = el('button', 'regler__stumm', 'stumm');
const stumm = el('button', 'regler__stumm', r.schalter ? 'aus' : 'stumm');
stumm.type = 'button';
stumm.addEventListener('click', () => stummSchalten(r.schluessel));
kasten.append(stumm);
@@ -1170,11 +1305,10 @@
tastaturAnhaengen();
/* Drei Takte, drei Geschwindigkeiten -- jeder so schnell, wie er
sein muss, und keiner schneller. */
setInterval(pegelTakt, 90); // Pegel: das Auge sieht darunter nichts mehr
/* Zwei Takte, die nur das Pult braucht. Die Pegel laufen
woanders -- sie gehoeren jedem, der sendet. */
setInterval(leisteTakt, 500); // Uhr und Positionsband
setInterval(() => { pegelNachziehen(); lastMessen(); }, 2500);
setInterval(lastMessen, 2500); // was die eigene Leitung traegt
}
function reiterWechseln(name) {
@@ -1187,18 +1321,18 @@
}
function stummSchalten(schluessel) {
/* DAS EIGENE MIKRO IST DERSELBE SCHALTER WIE IN DER SENDERLEISTE
-- ein Zustand, zwei Stellen, die ihn zeigen. Zwei getrennte
Zustaende waeren zwei, die auseinanderlaufen koennen. */
if (schluessel === 'mikro') {
sendenSchalten('mikro', !lage.ich.mikro_aus);
return;
}
const kasten = document.querySelector(`.regler[data-was="${schluessel}"]`);
if (!kasten) return;
const jetztStumm = kasten.dataset.stumm !== 'ja';
kasten.dataset.stumm = jetztStumm ? 'ja' : 'nein';
tonNachziehen();
/* Beim eigenen Mikro gilt das für ALLE -- die Spur wird
abgeschaltet, und dann kommt beim Empfänger nichts mehr an.
Bei den Gästen gilt es nur hier; für alle stummschalten geht
über den Knopf an der Gastkarte. */
if (schluessel === 'mikro' && meinStrom) {
for (const s of meinStrom.getAudioTracks()) s.enabled = !jetztStumm;
}
}
async function layoutSetzen(schluessel) {
@@ -1344,6 +1478,16 @@
const pult = $('pult');
pult.dataset.stand = lage.stand;
/* Der Mikro-Schalter im Pult zeigt denselben Zustand wie der in
der Senderleiste -- er wird hier nur nachgefuehrt, nicht
zweitgefuehrt. */
const mikro = document.querySelector('.regler[data-was="mikro"]');
if (mikro) {
mikro.dataset.stumm = lage.ich.mikro_aus ? 'ja' : 'nein';
const k = mikro.querySelector('.regler__stumm');
if (k) k.textContent = lage.ich.mikro_aus ? 'an' : 'aus';
}
/* ---- Die Leiste ---- */
const worte = { zu: 'Geschlossen', vorbereitung: 'Gleich', live: 'Auf Sendung' };
$('pult-wort').textContent = worte[lage.stand] || '…';
@@ -1734,6 +1878,33 @@
}
async function los() {
/* DIE PEGEL LAUFEN FUER JEDEN, DER SENDET -- und nicht nur fuer
das Pult. Vorher wurden sie in `pultAufbauen()` gestartet, und
das Pult hat nur, wer die Sendung fuehrt: Ein Gast haette
seinen Pegel nie gesehen. */
setInterval(pegelTakt, 90); // 90 ms -- darunter sieht das Auge nichts mehr
setInterval(pegelNachziehen, 2500);
/* Kamera und Mikro -- fuer jeden, der sendet */
$('s-kamera').addEventListener('click',
() => sendenSchalten('kamera', !lage.ich.kamera_aus));
$('s-mikro').addEventListener('click',
() => sendenSchalten('mikro', !lage.ich.mikro_aus));
/* Die Chat-Stufe -- nur fuer die zwei */
for (const k of $('chat-stufen').children) {
k.addEventListener('click', async () => {
const a = await hole('/workspace/api/reaktion/chatmodus', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ modus: k.dataset.modus }),
});
if (!a.ok) { melde(await a.json().catch(() => null), 'Das ging nicht.'); return; }
lage = { ...(await a.json()) };
zeichnen();
});
}
/* Der Chat: absenden */
$('chat-form').addEventListener('submit', async (e) => {
e.preventDefault();
+19 -19
View File
@@ -12,19 +12,19 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -391,22 +391,22 @@
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
<script src="assets/js/textform.js?v=202609280344"></script>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/hochladen.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/textform.js?v=202609280816"></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/hochladen.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/zuteilung.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/zuteilung.js?v=202609280816" defer></script>
<!-- Der Vorlagenkatalog stand bis zum 23.09.2026 mitten in
aufgaben.js. Er bedient jetzt zwei Seiten und hat deshalb eine
eigene Datei; hier zeigt er den Creator-Katalog.
Vor aufgaben.js, weil die Seite ihn beim Start einrichtet. -->
<script src="assets/js/vorlagenbrett.js?v=202609280344" defer></script>
<script src="assets/js/aufgaben.js?v=202609280344" defer></script>
<script src="assets/js/vorlagenbrett.js?v=202609280816" defer></script>
<script src="assets/js/aufgaben.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/automation.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/automation.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -168,15 +168,15 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/automation.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/automation.js?v=202609280816" defer></script>
</body>
</html>
+17 -17
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -197,16 +197,16 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/befinden.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<script src="assets/js/befinden.js?v=202609280816" defer></script>
</body>
</html>
+22 -22
View File
@@ -12,24 +12,24 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609280816" />
<!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett
„Mitmachen". Eine eigene Kopie der Regel hier waere die zweite
Stelle, an der dieselbe Sache anders aussieht. -->
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -304,19 +304,19 @@
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
<script src="assets/js/textform.js?v=202609280344"></script>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/textform.js?v=202609280816"></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/checkliste.js?v=202609280344" defer></script>
<script src="assets/js/ampel.js?v=202609280344" defer></script>
<script src="assets/js/schulung.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/bereich.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/checkliste.js?v=202609280816" defer></script>
<script src="assets/js/ampel.js?v=202609280816" defer></script>
<script src="assets/js/schulung.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<script src="assets/js/bereich.js?v=202609280816" defer></script>
</body>
</html>
+19 -19
View File
@@ -7,17 +7,17 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/treff.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/treff.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -108,15 +108,15 @@
</main>
<!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. -->
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/auskunft.js?v=202609280344" defer></script>
<script src="assets/js/bewerben.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/auskunft.js?v=202609280816" defer></script>
<script src="assets/js/bewerben.js?v=202609280816" defer></script>
</body>
</html>
+18 -18
View File
@@ -7,16 +7,16 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -80,16 +80,16 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/auskunft.js?v=202609280344" defer></script>
<script src="assets/js/bewerbungen.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/auskunft.js?v=202609280816" defer></script>
<script src="assets/js/bewerbungen.js?v=202609280816" defer></script>
</body>
</html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/calls.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/calls.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -89,15 +89,15 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/ki.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/calls.js?v=202609280344" defer></script>
<script src="assets/js/ki.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/calls.js?v=202609280816" defer></script>
</body>
</html>
+20 -20
View File
@@ -12,26 +12,26 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog,
.neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem
Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen
zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html.
Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten
Dialog zu sehen bekam. -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/chat.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/chat.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -739,24 +739,24 @@
</form>
</dialog>
<script src="assets/js/bereiche.js?v=202609280344"></script>
<script src="assets/js/bereiche.js?v=202609280816"></script>
<!-- TEXTFORM VOR ALLEM ANDEREN (21.09.2026): chat.js und bereich.js
fragen beim Zeichnen nach `window.Textform`. Kaeme sie spaeter,
waere die erste gezeichnete Nachricht ohne Gestaltung -- und das
faellt nur dem auf, der genau hinsieht. KEIN `defer`, damit sie
wirklich vor den anderen dasteht. -->
<script src="assets/js/textform.js?v=202609280344"></script>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/hochladen.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344"></script>
<script src="assets/js/glocke.js?v=202609280344"></script>
<script src="assets/js/textform.js?v=202609280816"></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/hochladen.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816"></script>
<script src="assets/js/glocke.js?v=202609280816"></script>
<!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten`
bereit, und chat.js baut die Knoepfe nur, wenn es das gibt.
Andersherum waere die Reihenfolge eine stille Abhaengigkeit --
die Knoepfe fehlten, und niemand wuesste warum. -->
<script src="assets/js/anruf.js?v=202609280344"></script>
<script src="assets/js/anruf.js?v=202609280816"></script>
<!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom
Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein
Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne
@@ -767,8 +767,8 @@
sie beim ersten Foto noch nicht da -- und der erste Klick ginge
wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal
auftritt, ist der, den man nie nachstellen kann. -->
<script src="assets/js/bildschau.js?v=202609280344"></script>
<script src="assets/js/chat.js?v=202609280344"></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/bildschau.js?v=202609280816"></script>
<script src="assets/js/chat.js?v=202609280816"></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
</body>
</html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/content.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/content.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -179,15 +179,15 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/checkliste.js?v=202609280344" defer></script>
<script src="assets/js/content.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/checkliste.js?v=202609280816" defer></script>
<script src="assets/js/content.js?v=202609280816" defer></script>
</body>
</html>
+6 -6
View File
@@ -36,15 +36,15 @@
<link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp"
type="image/webp" media="(max-width: 899px)" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst
404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen
statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es:
Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere
die eine Seite, auf der man das Umfaerben sieht. -->
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202609280816" />
</head>
<body class="gate gate--crew">
@@ -459,7 +459,7 @@
<script src="assets/js/gate.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/gate.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
</body>
</html>
+4 -4
View File
@@ -23,25 +23,25 @@
},
"icons": [
{
"src": "/assets/img/app-symbole/crew-192.png?v=202609280344",
"src": "/assets/img/app-symbole/crew-192.png?v=202609280816",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/assets/img/app-symbole/crew-512.png?v=202609280344",
"src": "/assets/img/app-symbole/crew-512.png?v=202609280816",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609280344",
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609280816",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609280344",
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609280816",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -108,15 +108,15 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/hochladen.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/hochladen.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/dateien.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/dateien.js?v=202609280816" defer></script>
</body>
</html>
+18 -18
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -297,20 +297,20 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<!-- VOR entwicklung.js: Die Seite richtet den Katalog beim Start ein,
also muss es ihn zu dem Zeitpunkt geben. Mit "defer" laufen beide
in Dokumentreihenfolge. -->
<script src="assets/js/vorlagenbrett.js?v=202609280344" defer></script>
<script src="assets/js/entwicklung.js?v=202609280344" defer></script>
<script src="assets/js/vorlagenbrett.js?v=202609280816" defer></script>
<script src="assets/js/entwicklung.js?v=202609280816" defer></script>
</body>
</html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/hilfe.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -146,14 +146,14 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/hilfe.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/hilfe.js?v=202609280816" defer></script>
</body>
</html>
+5 -5
View File
@@ -30,9 +30,9 @@
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
type="image/webp" media="(max-width: 899px)" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
</head>
<body class="gate">
@@ -427,7 +427,7 @@
<script src="assets/js/gate.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/gate.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
</body>
</html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -383,15 +383,15 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/kalender.js?v=202609280344" defer></script>
<script src="assets/js/kalender-abo.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/kalender.js?v=202609280816" defer></script>
<script src="assets/js/kalender-abo.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/leistung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/leistung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -444,13 +444,13 @@
</form>
</dialog>
<script src="assets/js/meldung.js?v=202609280344"></script>
<script src="assets/js/nachfrage.js?v=202609280344"></script>
<script src="assets/js/wahl.js?v=202609280344"></script>
<script src="assets/js/bereiche.js?v=202609280344"></script>
<script src="assets/js/kopf.js?v=202609280344"></script>
<script src="assets/js/glocke.js?v=202609280344"></script>
<script src="assets/js/leistung.js?v=202609280344"></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816"></script>
<script src="assets/js/nachfrage.js?v=202609280816"></script>
<script src="assets/js/wahl.js?v=202609280816"></script>
<script src="assets/js/bereiche.js?v=202609280816"></script>
<script src="assets/js/kopf.js?v=202609280816"></script>
<script src="assets/js/glocke.js?v=202609280816"></script>
<script src="assets/js/leistung.js?v=202609280816"></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -12,13 +12,13 @@
vergessen wird. -->
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/material.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/material.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start" data-ton="42" data-buehne="studio">
@@ -138,14 +138,14 @@
<p class="m-laedt" id="laedt">Einen Moment …</p>
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/hochladen.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/material.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/hochladen.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/material.js?v=202609280816" defer></script>
</body>
</html>
+14 -14
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/notizen.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/notizen.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start" data-ton="46">
@@ -181,12 +181,12 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. -->
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/notizen.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/notizen.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/personen.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/personen.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -453,14 +453,14 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/personen.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/personen.js?v=202609280816" defer></script>
</body>
</html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -214,16 +214,16 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/hochladen.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/hochladen.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/steckbrief.js?v=202609280344" defer></script>
<script src="assets/js/profil.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/steckbrief.js?v=202609280816" defer></script>
<script src="assets/js/profil.js?v=202609280816" defer></script>
</body>
</html>
+50 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/reaktion.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/reaktion.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start reaktion-seite" data-stand="laedt">
@@ -140,6 +140,32 @@
Knopf (oder die erste Berührung der Seite) schaltet sie
laut. Ohne ihn säße jemand vor einem stummen Bild und
suchte den Fehler bei sich. -->
<!-- DIE SENDERLEISTE. Sie gehört jedem, der sendet — Host wie
Gast — und liegt über dem Bild, weil man dorthin sieht.
Ein Gast, der sein eigenes Bild nicht abschalten kann,
müsste den Host darum bitten; das ist keine Bedienung,
das ist eine Bitte. -->
<div class="senderleiste" id="senderleiste" hidden>
<button type="button" class="sender-knopf" id="s-kamera" aria-pressed="false">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M3.5 6.5h11v11h-11z" />
<path d="M14.5 10.5l6-3.5v10l-6-3.5z" />
<path class="sender-knopf__strich" d="M3 21L21 3" />
</svg>
<span id="s-kamera-wort">Kamera</span>
</button>
<button type="button" class="sender-knopf" id="s-mikro" aria-pressed="false">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 3.2a2.6 2.6 0 0 1 2.6 2.6v6a2.6 2.6 0 0 1-5.2 0v-6A2.6 2.6 0 0 1 12 3.2z" />
<path d="M5.8 11.4a6.2 6.2 0 0 0 12.4 0M12 17.6V21" />
<path class="sender-knopf__strich" d="M3 21L21 3" />
</svg>
<span id="s-mikro-wort">Mikro</span>
</button>
<span class="sender-pegel" id="s-pegel" aria-hidden="true"><i></i></span>
</div>
<button type="button" class="ton-an" id="ton-an" hidden>
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M4 9.4h3.6L12 5.2v13.6L7.6 14.6H4z" />
@@ -157,6 +183,15 @@
<h2 class="schiene__titel">Live-Chat</h2>
<span class="schiene__zahl" id="chat-zahl">0</span>
<!-- DIE CHAT-STUFE STEHT DORT, WO DER CHAT IST, und nicht im
Regiepult. Man moderiert, wo man liest — ein Umweg über
ein Register wäre in dem Moment, in dem es laut wird,
genau ein Umweg zu viel. Nur die zwei sehen sie. -->
<div class="stufen" id="chat-stufen" hidden role="group" aria-label="Wer schreiben darf">
<button type="button" class="stufe" data-modus="offen" aria-pressed="true">Offen</button>
<button type="button" class="stufe" data-modus="team" aria-pressed="false">Team</button>
<button type="button" class="stufe" data-modus="zu" aria-pressed="false">Zu</button>
</div>
</header>
<ol class="schiene__liste" id="chat-liste" aria-live="polite"></ol>
<form class="schiene__form" id="chat-form">
@@ -370,13 +405,13 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. -->
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/reaktion.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/reaktion.js?v=202609280816" defer></script>
</body>
</html>
+17 -17
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/treff.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/treff.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -134,14 +134,14 @@
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. -->
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/rechte.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<script src="assets/js/rechte.js?v=202609280816" defer></script>
</body>
</html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/report.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/report.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -106,17 +106,17 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/ki.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/report.js?v=202609280344" defer></script>
<script src="assets/js/ki.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<script src="assets/js/report.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -173,14 +173,14 @@
</div>
</div>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/scouting.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/scouting.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -12,21 +12,21 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe
den Hinweis in start.css -- dort stand es bis zum 07.09.2026. -->
<link rel="stylesheet" href="assets/css/heim.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/heim.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -732,16 +732,16 @@
</p>
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/live.js?v=202609280344" defer></script>
<script src="assets/js/start.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/live.js?v=202609280816" defer></script>
<script src="assets/js/start.js?v=202609280816" defer></script>
</body>
</html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -85,16 +85,16 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/ki.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/startcheck.js?v=202609280344" defer></script>
<script src="assets/js/ki.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/startcheck.js?v=202609280816" defer></script>
</body>
</html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/profil.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -150,16 +150,16 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/hochladen.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/hochladen.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/auskunft.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/steckbrief.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/auskunft.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/steckbrief.js?v=202609280816" defer></script>
</body>
</html>
+14 -14
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/support.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/support.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -128,16 +128,16 @@
(reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese
Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam
trotzdem, deshalb sah man es nur in der Browserkonsole. -->
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<!-- wahl.js gehoert zu kopf.js: Der Sicht-Umschalter in der
Kopfleiste baut daraus seine Liste. pruef-css-klassen setzt das
seit dem 07.09.2026 durch -- damals fehlte es auf chat.html und
uebersicht.html, und heute hier. -->
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/support.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/support.js?v=202609280816" defer></script>
</body>
</html>
+18 -18
View File
@@ -7,18 +7,18 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280816" />
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
der Regel hier waere die zweite Stelle, an der dieselbe Sache
anders aussieht. -->
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -111,15 +111,15 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/talente.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<script src="assets/js/talente.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -7,20 +7,20 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/team.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/team.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -110,15 +110,15 @@
</main>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/team.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<script src="assets/js/team.js?v=202609280816" defer></script>
</body>
</html>
+17 -17
View File
@@ -7,20 +7,20 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/team.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/team.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
@@ -84,15 +84,15 @@
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
es niemandem auf, und deshalb prueft pruef-css-klassen die
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/teamlage.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<script src="assets/js/teamlage.js?v=202609280816" defer></script>
</body>
</html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -112,15 +112,15 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/teilen.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/teilen.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/treff.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/treff.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -126,14 +126,14 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/treff-moderation.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/treff-moderation.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -7,18 +7,18 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/treff.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/treff.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
Rudels biegt der Server genau diesen Dateinamen auf crew-haus.css
um, und die Seite kommt schon beim ERSTEN Abruf in Lila und
Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -248,14 +248,14 @@
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. -->
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/auskunft.js?v=202609280344" defer></script>
<script src="assets/js/treff-regeln.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/auskunft.js?v=202609280816" defer></script>
<script src="assets/js/treff-regeln.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -12,22 +12,22 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
Dialog "Creator anlegen". -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -149,16 +149,16 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/uebersicht.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/uebersicht.js?v=202609280816" defer></script>
</body>
</html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -335,14 +335,14 @@
</main>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/live.js?v=202609280344" defer></script>
<script src="assets/js/unsere-seiten.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/live.js?v=202609280816" defer></script>
<script src="assets/js/unsere-seiten.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -106,17 +106,17 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit
„Cannot read properties of undefined (reading 'LEITUNG')" ab. -->
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/holen.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<!-- Die Satz-Tafel. Ohne sie stand auf dieser Seite das Maschinenwort
des Servers (z.B. "nicht_gefunden") statt eines Satzes -- gemeldet
von pruef-meldungen, nicht beim Ansehen. -->
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/unterstuetzen.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/unterstuetzen.js?v=202609280816" defer></script>
</body>
</html>
+16 -16
View File
@@ -7,15 +7,15 @@
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -144,14 +144,14 @@
</main>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/werdegang.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/werdegang.js?v=202609280816" defer></script>
</body>
</html>
+15 -15
View File
@@ -12,13 +12,13 @@
vergessen wird. -->
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/willkommen.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<!-- KOERPERKLASSE "start", NICHT "gate" (berichtigt 21.09.2026).
`body.gate` ist die Anmeldewand: `display:flex; align-items:center`,
@@ -75,13 +75,13 @@
<p class="fehler" id="fehler" hidden></p>
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/willkommen.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/willkommen.js?v=202609280816" defer></script>
</body>
</html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280344" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280344" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280344" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609280344" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</head>
<body class="start">
@@ -190,15 +190,15 @@
</main>
<script src="assets/js/meldung.js?v=202609280344" defer></script>
<script src="assets/js/hochladen.js?v=202609280344" defer></script>
<script src="assets/js/nachfrage.js?v=202609280344" defer></script>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/hochladen.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280344" defer></script>
<script src="assets/js/bereiche.js?v=202609280344" defer></script>
<script src="assets/js/installieren.js?v=202609280344" defer></script>
<script src="assets/js/kopf.js?v=202609280344" defer></script>
<script src="assets/js/glocke.js?v=202609280344" defer></script>
<script src="assets/js/wissen.js?v=202609280344" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/wissen.js?v=202609280816" defer></script>
</body>
</html>