Das Regie-Tor: jeder sieht es, nur die zwei kommen rein -- und Farbe für die Reihen

Filipe, zum Bildschirmfoto des Foyers: „unter den [Reihen] fehlt eine
kachel, die viel kraesser und spezieller aussehen soll, wo nur
dogfather oder vanvan reinkommen. mit ihren zugangscodes für die seite.
und das soll die regie kachel sein. die muss wirklich ultra krass sein.
komplett crazy. die anderen kacheln aber auch gerne farbiger machen und
nicht so kaal und dunkel."

Auf die Rückfrage, wie fest das Schloss sein soll: „punkt 2 aber die
soll jeder sehen aber nur vanvan und dogfather sollen da rein kommen
bitte."

Haus: Team Dogi (crew.dogfather-universe.com). Die Agentur ist nicht
berührt -- pruef-haus-trennung 107/0.

DAS TOR

Eine vierte Kachel über die GANZE BREITE unter den drei Reihen. Das ist
die stärkste Aussage, die ein Raster treffen kann, und sie kostet keine
einzige Farbe. Ein Licht läuft in sieben Sekunden darüber -- flach und
schmal, wie der Schein einer Lampe über einem Mischpult. Kein Blinken:
dasselbe Signal mit doppelter Belastung für die Augen, und diese Seite
steht manchmal eine Stunde offen. prefers-reduced-motion bekommt den
Schein stehend, nicht gar keinen -- der Zustand muss auch dann zu
erkennen sein.

Drei Zustände, und jeder sieht anders aus: verschlossen rot mit
geschlossenem Bügel, aufgeschlossen grün mit aufspringendem Bügel, und
für alle anderen gedämpftes Grau ohne Lauflicht, mit „nicht erlaubt"
schon am Mauszeiger.

ZWEI SCHLÖSSER HINTEREINANDER, UND NUR EINES IST GEHEIM

(1) DIE ROLLE, und zwar VOR dem Code -- ohne ihn anzusehen. Das ist
    wichtiger, als es aussieht: Sonst könnte irgendwer im Haus mit
    Rateversuchen die `versuche`-Bremse für seine eigene IP vollaufen
    lassen und sich damit von der ANMELDUNG aussperren; beide zählen in
    derselben Tabelle. Geprüft mit Gegenprobe: Ein Gast schickt den
    RICHTIGEN Admin-Code, kommt nicht durch, und die Versuchszahl
    bleibt bei 0.
(2) DER CODE, geprüft mit `codeGeprueft()` -- neu in workspace.js,
    neben der Anmeldung und mit deren Rechenvorschrift, deren Vergleich
    in konstanter Zeit und deren Bremse. Ein zweiter Codevergleich in
    einem anderen Modul wäre der, der beim nächsten Umbau der
    scrypt-Parameter stehen bleibt.

Und er prüft GENAU DIESE PERSON. Die Anmeldung geht alle Personen einer
Rolle durch -- dort ist der Code die Kennung. Hier wäre das falsch:
VanVans Code öffnete DogFathers Tür, und im Protokoll stünde, ER sei
hineingegangen.

WAS DIE TÜR LEISTET UND WAS NICHT -- UND DASS ES DASTEHT

Filipes „Punkt 2" heißt: Der Code öffnet die Tür, danach ist die Regie
offen wie bisher. Die Routen der Sendung prüfen weiterhin nur die Rolle.
Das ist die bewusste Wahl und keine vergessene Stelle -- eine Sperre,
die mitten in einer Übertragung zuschnappen kann, richtet mehr Schaden
an, als sie verhindert.

Damit das niemand überschätzt, steht es als Satz IM FENSTER, nicht nur
im Quelltext: „Das hält einen neugierigen Blick auf, nicht jemanden, der
an deinem offenen Rechner sitzt." Eine Sicherung, die stärker aussieht,
als sie ist, ist schlechter als gar keine.

FARBE -- ABER NICHT AUF DER FLÄCHE

Filipe hatte recht, und der Grund war meiner: Beim Umbau auf das
Hausmaterial heute Vormittag habe ich die Farbe mit herausgenommen, weil
die alte Fassung sie auf der FLÄCHE trug -- und genau das machte den
Text schlecht lesbar. Richtig ist nicht „keine Farbe", sondern Farbe,
wo kein Text steht:

  * Jede Reihe hat ihren Ton (`--ton`, derselbe Griff, über den
    module.css das Kantenlicht legt): Bernstein für das, was ansteht
    -- dieselbe Farbe wie „überfällig" --, Blau für die Sendung, rot
    sobald sie läuft, Grün für das, was hereinkommt: dieselbe Farbe,
    die ein angenommener Vorschlag trägt. Die Farben SAGEN etwas.
  * Ein Band im Kopf jeder Tafel, die Überschrift in ihrem Ton, die
    Schilder passend. Vorher war jedes Schild blau, egal in welcher
    Reihe es stand -- zwei Farben nebeneinander, die nichts
    voneinander wussten.
  * Ein Streifen am Zeilenanfang statt eines eingefärbten Kastens.
    Drei Pixel an der Kante sagen dasselbe, und der Text steht
    weiterhin auf dem Grund, auf dem er gemessen wurde.

Die Kachel selbst trägt dieselbe Silhouette und dasselbe deckende
Material wie jede Karte im Haus (`.regie-tor` steht in der Modulliste in
module.css und in der Materialliste in start.css). „Krass" heißt hier
nicht „anders als das Haus" -- genau das stand heute Vormittag schon
einmal in foyer.css und war ein Fehler.

PROTOKOLLWÖRTER, DIE MAN LESEN KANN

`personen.js` baut den Anzeigetext aus dem Schlüssel: Unterstriche
werden Leerzeichen, nur der erste Buchstabe wird groß. Aus
`regie_code_falsch` wäre auf dem Bildschirm „Regie code falsch"
geworden. Die Regel, die daraus folgt: Hauptwort plus Mittelwort, nie
zwei Hauptwörter. Jetzt `regie_aufgeschlossen`, `regie_abgeschlossen`,
`regie_verweigert`, `regie_unbefugt`. Und das Detail war ein
ISO-Zeitstempel mitten in einer Zeile, die ein Mensch überfliegt --
jetzt steht dort „12 Stunden".

GEMESSEN

  pruef-reaktion          571, 0 Fehler (vorher 538) -- Abschnitt 21
  mess-foyer               96, 0 Fehler (vorher 70), 12 Bildschirmfotos
  pruef-handy-teamdogi    263 Seitenaufrufe, 0 Befunde
  pruef-breiten            23 auf 45 Seiten und fünf Breiten
  pruef-struktur          102 · pruef-css-klassen 37 · pruef-lesbarkeit 14
  pruef-bewegung            9 · pruef-tippziele 13 · pruef-deutsche-texte 12
  pruef-crew-adresse      173 · pruef-haus-trennung 107
  pruef-community-sicht    10 · pruef-sackgassen 14
  alle 0 Fehler

UND EINE LÜCKE, DIE DIE EIGENE MESSUNG GEFUNDEN HAT

Der Vorhang mit dem Codefeld schließt auf Esc und auf einen Druck
daneben, und der Finger steht im Feld -- für jemanden ohne Maus war er
trotzdem eine Falle: Die Tabulatortaste lief durch die Knöpfe DAHINTER
weiter, sichtbar war aber das Codefeld. Man tippt auf A und bekommt B,
nur eben mit der Tastatur.

Der erste Riegel legte `#foyer` still -- und die neue Messung fiel
sofort darüber: Die KOPFLEISTE steht außerhalb davon, der Fokus lief
weiter nach „Abmelden". Jetzt wird alles neben dem Vorhang stillgelegt,
ABGELEITET statt aufgezählt (`body.children`), und beim Schließen genau
das wieder freigegeben, was ich selbst gesetzt habe.

Und die Messung selbst war beim ersten Entwurf zu streng: Sie verlangte
„der Fokus bleibt IMMER im Fenster" und wurde rot, obwohl die Sperre
tadellos arbeitete -- am Ende des Tabulatorkreises gibt der Browser den
Fokus an seine eigene Leiste ab, im Dokument steht dann `body`. `body`
ist kein Bedienelement. Gefragt ist jetzt das Richtige: Wird je ein
BEDIENELEMENT außerhalb erreicht? Die Gegenprobe nennt es beim Namen
(`DRAUSSEN:zurueck`).

mess-foyer misst beide Hälften von Filipes Satz: dass ein Gast das Tor
SIEHT (und ein Druck ihm trotzdem kein Codefeld öffnet) und dass nur die
zwei HINEINKOMMEN. Dazu der ganze Weg im Browser: falscher Code
abgewiesen und Feld geleert, richtiger Code führt in den Saal, die
Freigabe gilt in einem neuen Fenster -- und VanVans Tür ist trotzdem
noch zu.

EIN FEHLALARM IN DER EIGENEN MESSUNG, BEHOBEN

mess-foyer suchte zuerst das WORT „Warteschlange" im Dokument eines
Gastes und fand es -- im unsichtbaren Gerüst der linken Reihe, wo es als
Überschrift steht. Zwei Gründe, warum das falsch war: Eine Beschriftung
ist keine Auskunft, und dass es eine Warteschlange GIBT, steht seit
heute im Regie-Tor, das jeder sieht. Eine Messung, die genau das als
Leck zählt, widerspricht dem Entwurf -- und sie hätte bei jedem Lauf
angeschlagen. Gefragt ist das Schärfere: Kommen DATEN an? Jetzt werden
Titel und Videokennungen geprüft, und dass keine einzige Planzeile
gebaut wurde.

NICHT BEHOBEN, WEIL NICHT MEINS: pruef-meldungen bleibt rot (28
Kennungen ohne Satz, 3 Rohanzeigen) -- gemessen im worktree auf dem
letzten Commit schon vorher, Zeichen für Zeichen dieselbe Liste. Meine
Arbeit hat 2 Kennungen und 2 Sätze ergänzt (174 -> 176, 155 -> 157), die
Zahlen gehen genau gleich hoch. Die Dateien gehören überwiegend der
Agentur; das gehört in einen eigenen Durchgang.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-08 12:13:22 +02:00
co-authored by Claude Opus 5
parent fdadd5d573
commit 0d52c4dc05
58 changed files with 2034 additions and 724 deletions
+215 -4
View File
@@ -25,6 +25,10 @@
* Und geht der ganze Weg durch: Gast schickt ein Video, * Und geht der ganze Weg durch: Gast schickt ein Video,
DogFather sieht es MIT Namen, nimmt es -- und es steht links DogFather sieht es MIT Namen, nimmt es -- und es steht links
im Plan. im Plan.
* Steht das Regie-Tor bei JEDEM da (Filipes ausdruecklicher
Wunsch) -- und kommt trotzdem nur durch, wer den richtigen
Code hat? Gemessen werden alle vier Lagen: Gast (kein Feld),
Host verschlossen, Host mit falschem Code, Host mit richtigem.
ZU JEDER MESSUNG, DIE "in Ordnung" SAGEN KANN, GEHOERT EINE ZU JEDER MESSUNG, DIE "in Ordnung" SAGEN KANN, GEHOERT EINE
GEGENPROBE. Am Ende wird jede der tragenden Messungen absichtlich GEGENPROBE. Am Ende wird jede der tragenden Messungen absichtlich
@@ -347,6 +351,29 @@ const massLesen = (seite) => seite.evaluate(() => {
}; };
}); });
/** Was sagt das Regie-Tor? */
const torLesen = (seite) => seite.evaluate(() => {
const tor = document.getElementById('regie-tor');
if (!tor) return null;
const r = tor.getBoundingClientRect();
const t = (k) => tor.querySelector(k)?.textContent.trim() || '';
return {
da: !!tor.offsetParent,
darf: tor.dataset.darf,
offen: tor.dataset.offen,
titel: t('.regie-tor__titel'),
satz: t('.regie-tor__satz'),
marke: t('.regie-tor__marke'),
breit: Math.round(r.width),
hoch: Math.round(r.height),
oben: Math.round(r.top),
/* Die Farbe, die das Licht traegt -- sie ist die Aussage ueber
den Zustand und nicht nur Zierde. */
ton: getComputedStyle(tor).getPropertyValue('--ton').trim(),
vorhangDa: !document.getElementById('regie-vorhang').hidden,
};
});
/** Was steht in der Mitte? */ /** Was steht in der Mitte? */
const mitteLesen = (seite) => seite.evaluate(() => { const mitteLesen = (seite) => seite.evaluate(() => {
const t = (id) => document.getElementById(id)?.textContent.trim() || ""; const t = (id) => document.getElementById(id)?.textContent.trim() || "";
@@ -593,13 +620,187 @@ console.log("\n=== 6. Anraten, sehen, nehmen ===");
} }
/* ===================================================================== /* =====================================================================
7. DIE GEGENPROBEN 7. DAS REGIE-TOR
Filipe: „die soll jeder sehen aber nur vanvan und dogfather sollen
da rein kommen bitte." Beide Haelften werden gemessen -- dass sie
jeder SIEHT und dass nur die zwei HINEINKOMMEN. Eine davon allein
waere keine Aussage.
===================================================================== */
console.log("\n=== 7. Das Regie-Tor ===");
{
const gast = await alsWer("gast", 1440, 900);
const t = await torLesen(gast.seite);
ok(!!t && t.da, "der Gast SIEHT das Tor");
ok(t?.darf === "nein", `fuer ihn steht darf=nein (${t?.darf})`);
ok(t?.marke === "Nur ihr zwei", `das Schild sagt es (${t?.marke})`);
ok(/nicht hinein|T\u00fcr zu/i.test(t?.satz || ""),
`und der Satz auch (${t?.satz})`);
/* ==== ES DARF KEINE DATEN VERRATEN ============================
Der erste Entwurf suchte hier auch das WORT „Warteschlange" --
und fand es, im unsichtbaren Geruest der linken Reihe, wo es als
Ueberschrift steht. Das war ein Fehlalarm aus zwei Gruenden:
* Eine Beschriftung ist keine Auskunft. Dass es eine
Warteschlange GIBT, steht ohnehin im Regie-Tor, und das
sieht seit heute jeder -- auf Filipes ausdruecklichen
Wunsch. Eine Messung, die genau dieses Wort als Leck
zaehlt, widerspricht dem Entwurf.
* Und sie haette bei jedem Lauf angeschlagen. Eine Warnung,
die immer kommt, nimmt irgendwann die echte mit.
Gefragt ist das Schaerfere: Kommen DATEN an? Titel und
Videokennungen aus der Warteschlange duerfen im Dokument eines
Gastes nicht vorkommen -- und gebaute Zeilen schon gar nicht. */
const leck = await leckLesen(gast.seite,
[...liste0.map((z) => z.titel), ...liste0.map((z) => z.video)]);
ok(leck.length === 0, "das Tor verraet keine Daten aus der Regie"
+ (leck.length ? " -> " + leck.join(", ") : ""));
const zeilen = await gast.seite.evaluate(() => ({
plan: document.querySelectorAll("#plan-liste .plan-zeile").length,
leerzeile: document.querySelectorAll("#plan-liste .plan-leer").length,
}));
ok(zeilen.plan === 0 && zeilen.leerzeile === 0,
`und es ist auch keine Planzeile gebaut worden `
+ `(${zeilen.plan} Zeilen, ${zeilen.leerzeile} Leerhinweise)`);
/* EIN DRUCK OEFFNET IHM KEIN FELD. Sonst waere eine Kachel, die
jeder sieht, eine Ratestelle fuer jeden im Haus. */
await gast.seite.click("#regie-tor");
await gast.seite.waitForTimeout(150);
const danach = await torLesen(gast.seite);
ok(danach?.vorhangDa === false, "ein Druck oeffnet ihm kein Codefeld");
await bild(gast.seite, "10-tor-gast");
await gast.kontext.close();
}
{
const chef = await alsWer("admin", 1440, 900);
const t = await torLesen(chef.seite);
ok(t?.darf === "ja", `DogFather darf (${t?.darf})`);
ok(t?.offen === "nein", `und es ist zu (${t?.offen})`);
ok(t?.marke === "Verschlossen", `das Schild sagt es (${t?.marke})`);
const r = await reihenLesen(chef.seite);
ok(!!t && t.breit > r.saal.breit,
`das Tor ist breiter als die breiteste Reihe (${t?.breit} zu ${r.saal?.breit} px)`);
ok(!!t && !!r.saal && t.oben > r.saal.oben,
`und es steht UNTER den Reihen (${t?.oben} nach ${r.saal?.oben} px)`);
/* ---- Falscher Code ---- */
await chef.seite.click("#regie-tor");
await chef.seite.waitForSelector("#regie-vorhang:not([hidden])", { timeout: 5000 });
ok(true, "ein Druck oeffnet ihm das Codefeld");
await bild(chef.seite, "11-tor-vorhang");
/* ==== DIE TABULATORTASTE DARF NICHT HINTER DEN VORHANG ========
Esc schliesst, ein Druck daneben schliesst, der Finger steht im
Feld -- und trotzdem war der Vorhang fuer jemanden ohne Maus
eine Falle: Die Tabulatortaste lief durch die Knoepfe DAHINTER
weiter, sichtbar war aber das Codefeld. Gemessen wird deshalb
nicht, ob `inert` gesetzt ist, sondern wo der Fokus LANDET. */
{
/* `body` IST KEIN BEDIENELEMENT, und das ist hier der Unterschied
zwischen einem Befund und einem Fehlalarm. Am Ende des
Tabulatorkreises gibt der Browser den Fokus an die Leiste des
Browsers ab; im Dokument steht dann `document.body`. Mein
erster Entwurf verlangte „immer drin" und wurde deshalb rot,
obwohl die Sperre tadellos arbeitete -- gemeldet wurde
„drin, body", und kein einziges Bedienelement ausserhalb.
Gefragt ist also: Wird je ein BEDIENELEMENT ausserhalb des
Fensters erreicht? Deshalb sagt die Messung auch, WELCHES --
ein Befund, der nur „draussen" meldet, schickt einen suchen. */
const woher = () => chef.seite.evaluate(() => {
const e = document.activeElement;
if (!e || e === document.body || e === document.documentElement) return "body";
return e.closest("#regie-vorhang")
? "drin"
: "DRAUSSEN:" + (e.id || e.className || e.tagName);
});
const wo = [];
for (let i = 0; i < 6; i++) { await chef.seite.keyboard.press("Tab"); wo.push(await woher()); }
ok(wo.includes("drin") && !wo.some((x) => x.startsWith("DRAUSSEN")),
`kein Bedienelement hinter dem Vorhang ist erreichbar `
+ `(6x Tab: ${[...new Set(wo)].join(", ")})`);
/* GEGENPROBE: Ohne die Stilllegung MUSS ein Element dahinter
auftauchen. Sonst bewiese die Zeile darueber nur, dass sechsmal
Tab irgendwo landet -- und nicht, dass die Sperre es ist. */
await chef.seite.evaluate(() => {
for (const e of document.body.children) e.inert = false;
});
const raus = [];
for (let i = 0; i < 8; i++) { await chef.seite.keyboard.press("Tab"); raus.push(await woher()); }
ok(raus.some((x) => x.startsWith("DRAUSSEN")),
`Gegenprobe: ohne die Sperre wird eines erreicht `
+ `(${raus.find((x) => x.startsWith("DRAUSSEN")) || [...new Set(raus)].join(", ")})`);
await chef.seite.evaluate(() => {
for (const e of document.body.children) {
if (e.id !== "regie-vorhang") e.inert = true;
}
});
}
await chef.seite.fill("#regie-code", "CODE-XXX-999999");
await chef.seite.click("#regie-los");
await chef.seite.waitForSelector("#regie-fehler:not([hidden])", { timeout: 8000 });
const meldung = await chef.seite.textContent("#regie-fehler");
ok(/Code stimmt nicht/.test(meldung || ""),
`ein falscher Code wird abgewiesen, in ganzen Saetzen (${meldung})`);
const geleert = await chef.seite.inputValue("#regie-code");
ok(geleert === "", "und das Feld ist danach leer");
const nochZu = await torLesen(chef.seite);
ok(nochZu?.offen === "nein", "das Tor bleibt zu");
/* ---- Richtiger Code ---- */
await chef.seite.fill("#regie-code", CODES.admin);
await Promise.all([
chef.seite.waitForURL("**/reaktion.html", { timeout: 15000 }),
chef.seite.click("#regie-los"),
]);
ok(/reaktion\.html/.test(chef.seite.url()),
`der richtige Code fuehrt in den Saal (${chef.seite.url().split("/").pop()})`);
await chef.kontext.close();
}
{
/* ---- Und danach ist es offen, auch in einem neuen Fenster ----
Das ist der Punkt der ganzen Freigabe: Sie haengt an der Person
und nicht an dem Reiter, in dem getippt wurde. */
const chef = await alsWer("admin", 1440, 900);
const t = await torLesen(chef.seite);
ok(t?.offen === "ja", `das Tor steht offen (${t?.offen})`);
ok(t?.marke === "Offen", `das Schild sagt es (${t?.marke})`);
ok(/Offen bis/.test(t?.satz || ""), `und bis wann (${t?.satz})`);
await bild(chef.seite, "12-tor-offen");
/* VanVan hat ihre eigene Tuer. Waere die Freigabe an der Rolle
festgemacht statt an der Person, stuende sie jetzt auch bei ihr
offen -- und im Protokoll staende, SIE sei hineingegangen. */
const van = await alsWer("hand", 1440, 900);
const tv = await torLesen(van.seite);
ok(tv?.darf === "ja", `VanVan darf auch (${tv?.darf})`);
ok(tv?.offen === "nein",
`aber ihre Tuer ist ihre eigene und noch zu (${tv?.offen})`);
await van.kontext.close();
/* ---- Wieder abschliessen ---- */
await chef.seite.evaluate(() => fetch('/workspace/api/reaktion/regie',
{ method: 'DELETE', credentials: 'same-origin' }));
await chef.seite.reload({ waitUntil: "networkidle" });
await chef.seite.waitForTimeout(400);
const zu = await torLesen(chef.seite);
ok(zu?.offen === "nein", `abschliessen geht auch wieder (${zu?.offen})`);
await chef.kontext.close();
}
/* =====================================================================
8. DIE GEGENPROBEN
Fuenf Messungen oben koennen "in Ordnung" sagen. Hier wird jede Fuenf Messungen oben koennen "in Ordnung" sagen. Hier wird jede
absichtlich kaputtgemacht -- schlaegt sie nicht an, ist sie absichtlich kaputtgemacht -- schlaegt sie nicht an, ist sie
wertlos, und alle gruenen Haken davor beweisen nichts. wertlos, und alle gruenen Haken davor beweisen nichts.
===================================================================== */ ===================================================================== */
console.log("\n=== 7. Gegenproben ==="); console.log("\n=== 8. Gegenproben ===");
{ {
const chef = await alsWer("admin", 390, 844); const chef = await alsWer("admin", 390, 844);
@@ -655,6 +856,16 @@ console.log("\n=== 7. Gegenproben ===");
await gast.seite.waitForTimeout(120); await gast.seite.waitForTimeout(120);
const sichtbar = await reihenLesen(gast.seite); const sichtbar = await reihenLesen(gast.seite);
ok(sichtbar.plan !== null, "Gegenprobe: eine aufgedeckte Reihe gilt als sichtbar"); ok(sichtbar.plan !== null, "Gegenprobe: eine aufgedeckte Reihe gilt als sichtbar");
/* (g) Und der Tor-Leser muss ein verschwundenes Tor auch
verschwunden nennen -- sonst waere „der Gast sieht es" oben nur
die Folge davon, dass er immer „da" sagt. */
await gast.seite.evaluate(() => {
document.getElementById("regie-tor").style.display = "none";
});
await gast.seite.waitForTimeout(120);
const weg = await torLesen(gast.seite);
ok(weg?.da === false, "Gegenprobe: ein ausgeblendetes Tor gilt als weg");
await gast.kontext.close(); await gast.kontext.close();
} }
@@ -669,8 +880,8 @@ try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
einzige Messung, waere "0 Fehler" das beste Ergebnis ueberhaupt -- einzige Messung, waere "0 Fehler" das beste Ergebnis ueberhaupt --
und voellig wertlos. */ und voellig wertlos. */
console.log(`\n${geprueft} Messungen, ${fehler} Fehler`); console.log(`\n${geprueft} Messungen, ${fehler} Fehler`);
if (geprueft < 40) { if (geprueft < 55) {
console.log(`NICHT NACHSEHBAR: nur ${geprueft} Messungen gelaufen, erwartet mindestens 40.`); console.log(`NICHT NACHSEHBAR: nur ${geprueft} Messungen gelaufen, erwartet mindestens 55.`);
process.exit(3); process.exit(3);
} }
if (fehler) { if (fehler) {
+183
View File
@@ -3508,6 +3508,189 @@ melde("=== 20. Das Foyer: Plan, Eintritt, Vorschlaege ===");
} }
} }
/* =======================================================================
21. DAS REGIE-TOR (08.10.2026)
Filipe: „unter den [Reihen] fehlt eine kachel, die viel kraesser und
spezieller aussehen soll, wo nur dogfather oder vanvan reinkommen.
mit ihren zugangscodes fuer die seite." Und auf die Rueckfrage nach
der Staerke des Schlosses: „punkt 2 aber die soll jeder sehen aber
nur vanvan und dogfather sollen da rein kommen bitte."
ZWEI HAELFTEN, UND BEIDE WERDEN GEMESSEN: dass JEDER die Kachel
sieht, und dass nur die zwei HINEINKOMMEN. Eine davon allein waere
keine Aussage.
======================================================================= */
melde("");
melde("=== 21. Das Regie-Tor ===");
{
/* Eigener Griff auf die Datenbank: `d` oben ist nach dem Anlegen
der Personen geschlossen, und jeder Abschnitt, der nachsieht,
oeffnet seinen eigenen. */
const db = new DatabaseSync(process.env.WORKSPACE_DB);
/* ---- Wer was zu sehen bekommt ---- */
for (const rolle of ["gast", "modi", "linke"]) {
const a = await roh(CREW, "/workspace/api/reaktion/regie", { keks: k[rolle] });
ok(a.code === 200 && a.j?.darf === false,
`${rolle}: sieht das Tor, darf aber nicht hinein (${a.code}, darf=${a.j?.darf})`);
/* ES VERRAET NICHTS. Wer nicht hinein darf, bekommt auch nicht
zu wissen, ob gerade jemand drin ist. */
ok(a.j?.offen === false && a.j?.bis === null,
`${rolle}: und erfaehrt nichts ueber den Zustand dahinter`);
}
for (const rolle of ["admin", "hand"]) {
const a = await roh(CREW, "/workspace/api/reaktion/regie", { keks: k[rolle] });
ok(a.code === 200 && a.j?.darf === true && a.j?.offen === false,
`${rolle}: darf hinein, Tor ist noch zu (darf=${a.j?.darf}, offen=${a.j?.offen})`);
}
/* ---- Wer nicht darf, erzeugt KEINEN Fehlversuch ----------------
Sonst koennte irgendwer im Haus die Bremse fuer seine eigene IP
vollaufen lassen und sich damit von der ANMELDUNG aussperren --
beide zaehlen in derselben Tabelle. */
{
const vorher = db.prepare("SELECT COUNT(*) AS n FROM versuche").get().n;
const a = await roh(CREW, "/workspace/api/reaktion/regie",
{ method: "POST", keks: k.gast, rumpf: { code: CODES.admin } });
ok(a.code === 403 && a.j?.fehler === "regie_gehoert_den_zweien",
`ein Gast wird abgewiesen (${a.code} ${a.j?.fehler})`);
const nachher = db.prepare("SELECT COUNT(*) AS n FROM versuche").get().n;
ok(nachher === vorher,
`und sein Versuch zaehlt nicht gegen die Bremse (${vorher} -> ${nachher})`);
/* UND ZWAR AUCH DANN NICHT, WENN ER DEN RICHTIGEN CODE HAETTE.
Oben stand `CODES.admin` -- der Gast hat also den gueltigen
Code eines Hosts geschickt und kommt trotzdem nicht durch.
Die Rolle entscheidet VOR dem Code. */
const z = db.prepare("SELECT COUNT(*) AS n FROM reaktion_regie").get().n;
ok(z === 0, `und niemand steht in der Freigabetabelle (${z})`);
}
/* ---- Falscher Code ---- */
{
const a = await roh(CREW, "/workspace/api/reaktion/regie",
{ method: "POST", keks: k.admin, rumpf: { code: "CODE-XXX-999999" } });
ok(a.code === 401 && a.j?.fehler === "code_falsch",
`ein falscher Code wird abgewiesen (${a.code} ${a.j?.fehler})`);
const b = await roh(CREW, "/workspace/api/reaktion/regie", { keks: k.admin });
ok(b.j?.offen === false, "und das Tor bleibt zu");
}
/* ---- DER CODE DER ANDEREN OEFFNET DIE EIGENE TUER NICHT --------
Die Anmeldung geht alle Personen einer ROLLE durch; dort ist der
Code die Kennung. Hier waere das falsch: VanVans Code wuerde
DogFathers Tuer oeffnen, und im Protokoll stuende, ER sei
hineingegangen. */
{
const a = await roh(CREW, "/workspace/api/reaktion/regie",
{ method: "POST", keks: k.admin, rumpf: { code: CODES.hand } });
ok(a.code === 401 && a.j?.fehler === "code_falsch",
`VanVans Code oeffnet DogFathers Tuer nicht (${a.code})`);
}
/* ---- Richtiger Code ---- */
{
const a = await roh(CREW, "/workspace/api/reaktion/regie",
{ method: "POST", keks: k.admin, rumpf: { code: CODES.admin } });
ok(a.code === 200 && a.j?.offen === true,
`der eigene Code oeffnet (${a.code}, offen=${a.j?.offen})`);
/* ZWOELF STUNDEN, und die Zahl kommt aus der Datei -- nicht aus
dieser Pruefung. Eine abgeschriebene Zahl waere die, die beim
naechsten Umbau stehen bleibt. */
const t = await import("./reaktion-tabellen.js");
const stunden = (new Date(a.j.bis) - Date.now()) / 3600_000;
ok(Math.abs(stunden - t.REGIE_FREI_STUNDEN) < 0.2,
`und zwar fuer ${t.REGIE_FREI_STUNDEN} Stunden (gemessen ${stunden.toFixed(2)})`);
ok(a.j?.stunden === t.REGIE_FREI_STUNDEN,
"die Seite erfaehrt die Dauer vom Server und rechnet sie nicht selbst");
}
/* ---- Die Freigabe haengt an der PERSON, nicht an der Rolle ---- */
{
const a = await roh(CREW, "/workspace/api/reaktion/regie", { keks: k.hand });
ok(a.j?.darf === true && a.j?.offen === false,
`VanVans Tuer ist ihre eigene und noch zu (offen=${a.j?.offen})`);
}
/* ---- Und sie gilt ueber eine neue Anfrage hinweg ---- */
{
const a = await roh(CREW, "/workspace/api/reaktion/regie", { keks: k.admin });
ok(a.j?.offen === true, "beim naechsten Nachsehen steht sie offen");
}
/* ---- Abgelaufen heisst zu, und die Zeile wird weggeraeumt ------
Zurueckdatiert statt zwoelf Stunden gewartet. */
{
db.prepare("UPDATE reaktion_regie SET bis = ? WHERE person_id = ?")
.run(new Date(Date.now() - 60_000).toISOString(), IDS.admin);
const a = await roh(CREW, "/workspace/api/reaktion/regie", { keks: k.admin });
ok(a.j?.offen === false, "eine abgelaufene Freigabe gilt nicht mehr");
const n = db.prepare("SELECT COUNT(*) AS n FROM reaktion_regie WHERE person_id = ?")
.get(IDS.admin).n;
ok(n === 0, `und die Zeile ist weg statt nur ignoriert (${n})`);
}
/* ---- Wieder abschliessen ---- */
{
await roh(CREW, "/workspace/api/reaktion/regie",
{ method: "POST", keks: k.admin, rumpf: { code: CODES.admin } });
const auf = await roh(CREW, "/workspace/api/reaktion/regie", { keks: k.admin });
ok(auf.j?.offen === true, "Gegenprobe: aufgeschlossen ist sie wirklich offen");
const zu = await roh(CREW, "/workspace/api/reaktion/regie",
{ method: "DELETE", keks: k.admin });
ok(zu.code === 200 && zu.j?.offen === false,
`und sie laesst sich wieder abschliessen (${zu.code})`);
}
/* ---- Die Bremse ------------------------------------------------
Acht Fehlversuche je IP in zehn Minuten, gemeinsam mit der
Anmeldung gezaehlt. Geprueft wird, DASS sie greift -- und danach
wird die Tabelle geleert, damit die naechsten Abschnitte nicht
gegen eine volle Bremse laufen. */
{
let gebremst = 0;
let letzter = 0;
for (let i = 0; i < 12; i++) {
const a = await roh(CREW, "/workspace/api/reaktion/regie",
{ method: "POST", keks: k.admin, rumpf: { code: `CODE-FAL-00000${i}` } });
letzter = a.code;
if (a.code === 429) gebremst++;
}
ok(gebremst > 0, `nach genug Fehlversuchen bremst sie (${gebremst} von 12, zuletzt ${letzter})`);
/* GEGENPROBE: Nach dem Leeren geht es wieder -- sonst bewiese die
Zeile darueber nur, dass irgendwann 429 kommt, und nicht, dass
es an der Bremse lag. */
db.prepare("DELETE FROM versuche").run();
const b = await roh(CREW, "/workspace/api/reaktion/regie",
{ method: "POST", keks: k.admin, rumpf: { code: CODES.admin } });
ok(b.code === 200, `und nach dem Zuruecksetzen geht es wieder (${b.code})`);
await roh(CREW, "/workspace/api/reaktion/regie", { method: "DELETE", keks: k.admin });
}
/* ---- Was auf der Seite steht ---- */
{
const html = readFileSync(
join(HIER, "..", "workspace", "reaktion-foyer.html"), "utf8");
const js = readFileSync(
join(HIER, "..", "workspace", "assets", "js", "reaktion-foyer.js"), "utf8");
const css = readFileSync(
join(HIER, "..", "workspace", "assets", "css", "foyer.css"), "utf8");
ok(/id="regie-tor"/.test(html), "das Tor steht in der Seite");
ok(/<button[^>]*class="regie-tor"/.test(html),
"und ist ein Knopf und kein Link -- er fuehrt erst nach dem Code irgendwohin");
ok(/type="password"/.test(html),
"das Codefeld zeigt nichts an (Bildschirm teilen)");
ok(/id="regie-vorhang"/.test(html) && html.indexOf("id=\"regie-vorhang\"") > html.indexOf("</main>"),
"der Vorhang steht NEBEN main -- sonst laege er unter der Kopfleiste");
ok(!/rolle\s*===\s*['"]admin/.test(js),
"das Tor fuehrt keine eigene Rollenliste, es fragt den Server");
ok(/regie\?\.darf/.test(js), "es fragt, ob die Auskunft es erlaubt");
ok(/prefers-reduced-motion/.test(css),
"wer weniger Bewegung eingestellt hat, bekommt das Licht ohne Lauf");
ok(/\.regie-tor\[data-darf="nein"\]/.test(css),
"und wer nicht hinein darf, sieht es gedaempft");
}
}
melde(""); melde("");
melde(`${geprueft} Pruefungen, ${fehler} Fehler`); melde(`${geprueft} Pruefungen, ${fehler} Fehler`);
melde(fehler === 0 ? "ALLES IN ORDNUNG" : "NICHT IN ORDNUNG"); melde(fehler === 0 ? "ALLES IN ORDNUNG" : "NICHT IN ORDNUNG");
+37
View File
@@ -148,6 +148,26 @@ export const VORSCHLAG_BREMSE_SEKUNDEN = 45;
/** Die Zustaende eines Vorschlags. */ /** Die Zustaende eines Vorschlags. */
export const VORSCHLAG_STAENDE = ["offen", "uebernommen", "abgelehnt"]; export const VORSCHLAG_STAENDE = ["offen", "uebernommen", "abgelehnt"];
/* ==== WIE LANGE DAS REGIE-TOR OFFEN BLEIBT (08.10.2026) ============
Filipe hat sich fuer die mittlere Staerke entschieden: Der Code
oeffnet die Tuer, danach ist die Regie offen wie bisher.
ZWOELF STUNDEN, UND DIE ZAHL IST NICHT GERATEN. Kuerzer waere eine
Sicherung, die mitten in einem Sendeabend noch einmal fragt --
genau die, die man nach dem dritten Mal umgeht. Laenger waere eine,
die am naechsten Morgen noch offen steht, ohne dass jemand daran
denkt. Ein Abend passt hinein, eine Nacht nicht.
WICHTIG, DAMIT NIEMAND MEHR HINEINLIEST, ALS DRINSTEHT: Diese
Freigabe ist eine TUER und kein Schloss an den Regieknoepfen. Die
Routen der Sendung pruefen weiterhin nur die Rolle (`nurHost`) --
wer `reaktion.html` direkt aufruft, kommt wie bisher an die Regie.
Das war die bewusste Wahl: Eine Sperre, die mitten in einer
Uebertragung zuschnappen kann, richtet mehr Schaden an, als sie
verhindert. Was sie wirklich leistet, steht im Foyer daneben. */
export const REGIE_FREI_STUNDEN = 12;
/** Ein Chatbeitrag in der Reaction. */ /** Ein Chatbeitrag in der Reaction. */
export const TEXT_MAX = 400; export const TEXT_MAX = 400;
@@ -548,6 +568,23 @@ export function reaktionTabellen(d) {
CREATE INDEX IF NOT EXISTS idx_reaktion_vorschlag_stand CREATE INDEX IF NOT EXISTS idx_reaktion_vorschlag_stand
ON reaktion_vorschlaege (stand, id); ON reaktion_vorschlaege (stand, id);
/* ==== WER DAS REGIE-TOR AUFGESCHLOSSEN HAT (08.10.2026) =====
Eine Zeile je Person, nicht eine je Oeffnung: Gefragt ist
„steht die Tuer fuer dich gerade offen", nicht „wie oft warst
du schon drin". Wer die Geschichte will, findet sie im
Protokoll -- dort steht jedes Oeffnen und jedes Abschliessen.
IN DER DATENBANK UND NICHT IM ARBEITSSPEICHER. Im Speicher
waere es nach jedem Dienstneustart weg, und ein Neustart
mitten in der Vorbereitung haette genau dann nach dem Code
gefragt, wenn am wenigsten Zeit dafuer ist. */
CREATE TABLE IF NOT EXISTS reaktion_regie (
person_id INTEGER PRIMARY KEY REFERENCES personen(id) ON DELETE CASCADE,
seit TEXT NOT NULL,
bis TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_reaktion_liste_platz CREATE INDEX IF NOT EXISTS idx_reaktion_liste_platz
ON reaktion_liste (platz, id); ON reaktion_liste (platz, id);
CREATE INDEX IF NOT EXISTS idx_reaktion_chat_zeit CREATE INDEX IF NOT EXISTS idx_reaktion_chat_zeit
+158 -1
View File
@@ -41,7 +41,7 @@
nicht, ein Handy geht einfach aus. nicht, ein Handy geht einfach aus.
===================================================================== */ ===================================================================== */
import express from "express"; import express from "express";
import { db, sitzungLesen, protokolliere, echteIp } from "./workspace.js"; import { db, sitzungLesen, protokolliere, echteIp, codeGeprueft } from "./workspace.js";
import { stromAn } from "./workspace-chat.js"; import { stromAn } from "./workspace-chat.js";
import { buehneMelden } from "./workspace-buehne.js"; import { buehneMelden } from "./workspace-buehne.js";
/* Der Spender-Glanz im Chat. EINE RICHTUNG: Die Reaction fragt die /* Der Spender-Glanz im Chat. EINE RICHTUNG: Die Reaction fragt die
@@ -54,6 +54,7 @@ import { mitZugangsdaten, wegeAusfaechern } from "./workspace-turn.js";
import { import {
SICHT_PLAETZE, GAESTE_MAX, EINLADUNG_SEKUNDEN, TEXT_MAX, SCHREIB_BREMSE, SICHT_PLAETZE, GAESTE_MAX, EINLADUNG_SEKUNDEN, TEXT_MAX, SCHREIB_BREMSE,
VORSCHLAEGE_JE_PERSON, VORSCHLAG_NOTIZ_MAX, VORSCHLAG_BREMSE_SEKUNDEN, VORSCHLAEGE_JE_PERSON, VORSCHLAG_NOTIZ_MAX, VORSCHLAG_BREMSE_SEKUNDEN,
REGIE_FREI_STUNDEN,
STAENDE, LAYOUTS, TEMPI, STAENDE, LAYOUTS, TEMPI,
KAMERA_GROESSEN, KAMERA_ECKEN, KAMERA_GROESSEN, KAMERA_ECKEN,
MELDUNG_TAGE, MELDUNG_TAGE,
@@ -1739,6 +1740,162 @@ reaktionRouter.delete("/workspace/api/reaktion/vorschlag/:id(\\d+)", (req, res)
} }
}); });
/* =======================================================================
DAS REGIE-TOR (08.10.2026)
Filipe: „unter den [Reihen] fehlt eine kachel, die viel kraesser und
spezieller aussehen soll, wo nur dogfather oder vanvan reinkommen.
mit ihren zugangscodes fuer die seite. und das soll die regie kachel
sein." Und auf die Rueckfrage, wie fest das Schloss sein soll:
„punkt 2 aber die soll jeder sehen aber nur vanvan und dogfather
sollen da rein kommen bitte."
-----------------------------------------------------------------------
JEDER SIEHT SIE -- UND DAS IST KEIN VERSEHEN
Die linke Reihe steht fuer andere gar nicht erst da; hier ist es
umgekehrt, weil Filipe es ausdruecklich so wollte. Die Kachel
verraet deshalb NICHTS: kein Titel, kein Stand, keine Zahl. Sie ist
eine verschlossene Tuer mit einem Schild darauf. Was dahinter liegt,
steht nirgends in der Antwort fuer jemanden, der nicht hinein darf.
-----------------------------------------------------------------------
ZWEI SCHLOESSER HINTEREINANDER, UND NUR EINES DAVON IST GEHEIM
(1) DIE ROLLE. Wer nicht admin oder rechte Hand ist, bekommt gar
kein Eingabefeld -- die Antwort sagt `darf: false`, und der
Server lehnt den Versuch ab, OHNE den Code anzusehen. Das ist
wichtig: Eine Kachel, die jeder sieht, waere sonst eine
Ratestelle fuer jeden im Haus.
(2) DER CODE. Fuer die zwei, die durchduerfen, zusaetzlich der
eigene Zugangscode -- geprueft mit `codeGeprueft()`, also mit
derselben Rechenvorschrift und derselben Bremse wie die
Anmeldung. Acht Fehlversuche je IP in zehn Minuten, gemeinsam
mit der Anmeldung gezaehlt.
-----------------------------------------------------------------------
WAS DIESE TUER LEISTET -- UND WAS NICHT
Sie haelt den neugierigen Blick auf. Sie haelt NICHT jemanden auf,
der an einem offenen Rechner sitzt und `reaktion.html` direkt
aufruft: Die Regieknoepfe dort pruefen weiterhin nur die Rolle.
Das ist die bewusste Wahl (Filipes „Punkt 2") und keine vergessene
Stelle. Eine Sperre, die mitten in einer Uebertragung zuschnappen
kann, richtet mehr Schaden an, als sie verhindert.
Damit das niemand falsch liest, steht es auch IM FOYER als Satz
neben der Kachel -- nicht nur hier im Quelltext. Eine Sicherung,
die staerker aussieht, als sie ist, ist schlechter als gar keine.
======================================================================= */
/** Steht das Tor fuer diese Person gerade offen? */
function regieFrei(personId) {
const z = db().prepare("SELECT seit, bis FROM reaktion_regie WHERE person_id = ?")
.get(personId);
if (!z) return null;
/* ABGELAUFENES WIRD WEGGERAEUMT, nicht nur ignoriert. Sonst stuende
in der Tabelle mit der Zeit eine Zeile je Person, die einmal
drin war -- und beim Nachsehen, wer gerade Zugang hat, muesste
man jedes Mal rechnen. */
if (z.bis < jetzt()) {
db().prepare("DELETE FROM reaktion_regie WHERE person_id = ?").run(personId);
return null;
}
return z;
}
/** Was die Kachel im Foyer wissen muss. */
function regieLage(person) {
const darf = HOST_ROLLEN.has(person.rolle);
const z = darf ? regieFrei(person.id) : null;
return {
/* OB JEMAND HINEIN DARF, sagt der Server -- die Seite soll keine
zweite Rollenliste fuehren. */
darf,
offen: !!z,
bis: z?.bis || null,
stunden: REGIE_FREI_STUNDEN,
};
}
reaktionRouter.get("/workspace/api/reaktion/regie", (req, res) => {
try {
res.json(regieLage(req.person));
} catch (fehler) {
console.error("[reaktion] Regie-Lage:", fehler?.message);
res.status(503).json({ fehler: "nicht_verfuegbar" });
}
});
reaktionRouter.post("/workspace/api/reaktion/regie", express.json({ limit: "2kb" }),
(req, res) => {
try {
const ip = echteIp(req);
/* ERST DIE ROLLE, DANN DER CODE -- und ohne den Code auch nur
anzusehen. Wer nicht hinein darf, soll keinen Fehlversuch
erzeugen koennen: Sonst koennte irgendwer im Haus die Bremse
fuer seine eigene IP vollaufen lassen und sich damit selbst
von der Anmeldung aussperren. */
if (!HOST_ROLLEN.has(req.person.rolle)) {
/* DIE WOERTER SIND SO GEWAEHLT, DASS SIE AUF DEM BILDSCHIRM
LESBAR SIND. Die Personenseite macht aus dem Schluessel den
Anzeigetext: Unterstriche werden Leerzeichen, der erste
Buchstabe gross, der Rest klein. „regie_code_falsch" waere
dort zu „Regie code falsch" geworden -- Maschinensprache mit
einem grossen Anfangsbuchstaben. Zwei Woerter, Hauptwort und
Mittelwort, ergeben dagegen einen Satz. */
protokolliere("regie_unbefugt", {
personId: req.person.id, rolle: req.person.rolle, ip,
});
return res.status(403).json({ fehler: "regie_gehoert_den_zweien" });
}
const urteil = codeGeprueft(req.person, req.body?.code, ip);
if (urteil === "zu_viele") return res.status(429).json({ fehler: "zu_viele_versuche" });
if (urteil === "unbekannt") return res.status(503).json({ fehler: "nicht_verfuegbar" });
if (urteil !== "ok") {
protokolliere("regie_verweigert", {
personId: req.person.id, rolle: req.person.rolle, ip,
});
return res.status(401).json({ fehler: "code_falsch" });
}
const seit = jetzt();
const bis = new Date(Date.now() + REGIE_FREI_STUNDEN * 3600_000).toISOString();
db().prepare(`INSERT INTO reaktion_regie (person_id, seit, bis) VALUES (?,?,?)
ON CONFLICT(person_id) DO UPDATE SET seit = excluded.seit, bis = excluded.bis`)
.run(req.person.id, seit, bis);
protokolliere("regie_aufgeschlossen", {
personId: req.person.id, rolle: req.person.rolle, ip,
/* UND DAS DETAIL AUCH LESBAR. Hier stand der Zeitpunkt als
ISO-Zeichenkette -- also „2026-10-08T23:43:11.004Z" mitten
in einer Zeile, die ein Mensch ueberfliegt. Die Dauer sagt
dasselbe und braucht keine Umrechnung im Kopf. */
detail: `${REGIE_FREI_STUNDEN} Stunden`,
});
res.json(regieLage(req.person));
} catch (fehler) {
console.error("[reaktion] Regie oeffnen:", fehler?.message);
res.status(503).json({ fehler: "nicht_verfuegbar" });
}
});
/* WIEDER ABSCHLIESSEN. Eine Tuer, die man nur aufmachen kann, ist
keine: Wer den Rechner einem anderen gibt, muss sie zumachen
koennen, ohne zwoelf Stunden zu warten oder sich abzumelden. */
reaktionRouter.delete("/workspace/api/reaktion/regie", (req, res) => {
try {
db().prepare("DELETE FROM reaktion_regie WHERE person_id = ?").run(req.person.id);
protokolliere("regie_abgeschlossen", {
personId: req.person.id, rolle: req.person.rolle, ip: echteIp(req),
});
res.json(regieLage(req.person));
} catch (fehler) {
console.error("[reaktion] Regie schliessen:", fehler?.message);
res.status(503).json({ fehler: "nicht_verfuegbar" });
}
});
/** Eins hoch oder runter. /** Eins hoch oder runter.
* *
* GETAUSCHT WIRD MIT DEM NACHBARN, nicht neu durchnummeriert. Beim * GETAUSCHT WIRD MIT DEM NACHBARN, nicht neu durchnummeriert. Beim
+86
View File
@@ -6910,6 +6910,92 @@ function zuVieleVersuche(ip) {
return anzahl >= VERSUCHE_MAX; return anzahl >= VERSUCHE_MAX;
} }
/* =====================================================================
NOCH EINMAL DEN EIGENEN CODE -- FUER EINE TUER HINTER DER ANMELDUNG
(08.10.2026)
Gebaut fuer das Regie-Tor im Foyer der Reaction. Filipe: die Kachel
soll jeder sehen, hinein kommen aber nur DogFather und VanVan, und
zwar mit ihrem Zugangscode.
---------------------------------------------------------------------
WARUM DAS HIER STEHT UND NICHT DORT
Die Anmeldung weiter oben weiss, wie man einen Code prueft: scrypt
mit genau diesen Parametern, Vergleich in konstanter Zeit, ein
Eintrag in `versuche`, eine Bremse je IP. Wer das in einem anderen
Modul noch einmal schreibt, hat eine ZWEITE Antwort auf dieselbe
Frage -- und die zweite ist die, die beim naechsten Umbau der
Parameter stehen bleibt. Ein Codevergleich, der still mit einem
alten N rechnet, sperrt entweder jeden aus oder laesst jeden
durch, und beides faellt erst spaet auf.
Deshalb EINE Funktion mit EINER Antwort. Sie bekommt die Person
(die kennt der Aufrufer aus der Sitzung) und gibt vier moegliche
Woerter zurueck. Der Aufrufer entscheidet, was er damit macht.
---------------------------------------------------------------------
SIE PRUEFT DEN CODE GENAU DIESER PERSON
Die Anmeldung geht alle aktiven Personen einer ROLLE durch -- dort
ist der Code die Kennung, es gibt kein Benutzerfeld. Hier ist das
falsch: Wer schon angemeldet ist, hat einen Namen. Wuerde ich auch
hier die Rolle durchgehen, oeffnete VanVans Code die Tuer fuer
DogFathers Sitzung. Das waere kein Loch nach aussen, aber es waere
eine Luege im Protokoll -- dort stuende, DogFather sei hineingegangen.
---------------------------------------------------------------------
DIE BREMSE IST DIESELBE WIE AN DER ANMELDUNG
Acht Fehlversuche je IP in zehn Minuten, gemeinsam gezaehlt. Das
ist Absicht: Wer am Tor raet, soll nicht acht weitere Versuche
bekommen, indem er zwischendurch die Anmeldung probiert. Und ein
gelungener Versuch raeumt die Liste NICHT -- anders als bei der
Anmeldung, wo ein erfolgreicher Login `versuche` leert. Hier sitzt
schon jemand Angemeldetes davor; die Bremse soll ihm gegenueber
nicht nachgiebiger sein als gegenueber einem Fremden.
@param {{id:number, rolle:string}} person aus der Sitzung
@param {string} code was getippt wurde
@param {string} ip fuer die Bremse
@returns {"ok"|"falsch"|"zu_viele"|"unbekannt"}
"unbekannt" heisst: Die Person gibt es nicht mehr oder ihre
Zugangsdaten sind defekt -- der dritte Ausgang, und er darf
NICHT wie "falsch" aussehen, sonst sucht jemand den Fehler
bei sich.
*/
export function codeGeprueft(person, code, ip) {
const roh = String(code ?? "").trim();
if (!person?.id || roh.length < 4 || roh.length > 64) return "falsch";
if (zuVieleVersuche(ip)) return "zu_viele";
const k = db()
.prepare("SELECT id, rolle, code_hash, code_salt, code_n FROM personen WHERE id = ? AND aktiv = 1")
.get(person.id);
if (!k) return "unbekannt";
let stimmt = false;
try {
stimmt = gleich(hashe(roh, k.code_salt, k.code_n), k.code_hash);
} catch (f) {
/* Dieselbe Lage wie in der Anmeldung: ein defekter Datensatz ist
ein Problem DIESER Person und keine falsche Eingabe. */
console.error(`[workspace] Zugangsdaten von Person #${k.id} (${k.rolle}) sind defekt `
+ `-- sie kann keine Tuer mehr oeffnen. Grund: ${f?.message}`);
protokolliere("zugangsdaten_defekt", {
personId: k.id, rolle: k.rolle, ip,
detail: String(f?.message || "").slice(0, 80),
});
return "unbekannt";
}
if (!stimmt) {
db().prepare("INSERT INTO versuche (ip, zeitpunkt) VALUES (?,?)").run(ip, jetzt());
return "falsch";
}
return "ok";
}
/* ---------- Sitzung ---------------------------------------------------- */ /* ---------- Sitzung ---------------------------------------------------- */
export function sitzungLesen(req) { export function sitzungLesen(req) {
+14 -14
View File
@@ -7,17 +7,17 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/anleitung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/anleitung.css?v=202610081212" />
<!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die <!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die
Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur
Variablen, und bei Variablen entscheidet allein, wer zuletzt Variablen, und bei Variablen entscheidet allein, wer zuletzt
kommt. pruef-css-klassen.mjs misst genau dieses Paar nach. --> kommt. pruef-css-klassen.mjs misst genau dieses Paar nach. -->
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="halle"> <body class="start" data-buehne="halle">
@@ -289,16 +289,16 @@
Und anleitung.js braucht es doppelt: Symbol, Farbe, Name und Und anleitung.js braucht es doppelt: Symbol, Farbe, Name und
Adresse jeder Karte kommen von dort, nicht vom Server. --> Adresse jeder Karte kommen von dort, nicht vom Server. -->
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<!-- wahl.js gehört zu kopf.js: Der Sicht-Umschalter baut daraus seine <!-- wahl.js gehört zu kopf.js: Der Sicht-Umschalter baut daraus seine
Liste. pruef-css-klassen setzt das durch, und zwar auch die Liste. pruef-css-klassen setzt das durch, und zwar auch die
Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen
Bedienelement. --> Bedienelement. -->
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/anleitung.js?v=202610081119" defer></script> <script src="assets/js/anleitung.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+5 -5
View File
@@ -16,8 +16,8 @@
verdeckt. Gefunden hat es pruef-struktur. verdeckt. Gefunden hat es pruef-struktur.
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als <!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
ausserhalb der App -- auf einer Seite, die genau erklaeren soll, ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
@@ -33,7 +33,7 @@
schreibt jede Seite app.webmanifest -- auch die hier. --> schreibt jede Seite app.webmanifest -- auch die hier. -->
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<style> <style>
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite /* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht, soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
@@ -135,7 +135,7 @@
<script src="assets/js/anruf-probe.js?v=202610081119" defer></script> <script src="assets/js/anruf-probe.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+4 -4
View File
@@ -23,25 +23,25 @@
}, },
"icons": [ "icons": [
{ {
"src": "/assets/img/app-symbole/workspace-192.png?v=202610081119", "src": "/assets/img/app-symbole/workspace-192.png?v=202610081212",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png", "type": "image/png",
"purpose": "any" "purpose": "any"
}, },
{ {
"src": "/assets/img/app-symbole/workspace-512.png?v=202610081119", "src": "/assets/img/app-symbole/workspace-512.png?v=202610081212",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png", "type": "image/png",
"purpose": "any" "purpose": "any"
}, },
{ {
"src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202610081119", "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202610081212",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png", "type": "image/png",
"purpose": "maskable" "purpose": "maskable"
}, },
{ {
"src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202610081119", "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202610081212",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png", "type": "image/png",
"purpose": "maskable" "purpose": "maskable"
+344 -4
View File
@@ -95,6 +95,49 @@
} }
.foyer-reihe[hidden] { display: none; } .foyer-reihe[hidden] { display: none; }
/* =====================================================================
JEDE REIHE HAT IHREN TON (08.10.2026)
Filipe: „die anderen kacheln aber auch gerne farbiger machen und
nicht so kahl und dunkel."
ER HAT RECHT, UND DER GRUND WAR MEINER: Beim Umbau auf das
Hausmaterial habe ich die Farbe mit herausgenommen, weil die alte
Fassung sie auf der FLAECHE trug — und eine getoente Flaeche war
genau das, was den Text schlecht lesbar machte. Richtig ist nicht
„keine Farbe", sondern Farbe an den Stellen, die keinen Text
tragen: die Kante, die Ueberschrift, der Streifen am Zeilenanfang.
`--ton` ist der Griff, den das Haus dafuer schon hat. module.css
legt damit ein Kantenlicht auf die Silhouette; alles Weitere unten
leitet sich aus demselben Wert ab, statt ihn noch einmal
hinzuschreiben. EINE Zahl je Reihe, und sie steht genau einmal.
WARUM DIESE DREI: Bernstein fuer das, was ansteht (Terminfarbe des
Hauses, dieselbe wie bei „überfällig"), Blau fuer die Sendung
(wird rot, sobald sie laeuft), Gruen fuer das, was hereinkommt —
dieselbe Farbe, die ein angenommener Vorschlag traegt. Die Farben
sagen also etwas; sie sind keine Dekoration.
===================================================================== */
.foyer-reihe--plan { --ton: #e0a13a; }
.foyer-reihe--raten { --ton: #5fc99a; }
/* DER KOPF BEKOMMT EIN BAND IN SEINEM TON. Es liegt UNTER der Zeile
und nicht hinter dem Text: `color-mix` mit 14 % laesst den
deckenden Hausgrund durch, und gemessen bleibt der Kontrast der
Ueberschrift darueber unveraendert — sie steht ohnehin auf eigener
Farbe. Die negativen Raender ziehen das Band bis an die
Tafelkante, damit es ein Band ist und kein Kasten. */
.foyer-reihe__kopf {
margin: -16px -16px 0;
padding: 14px 16px 12px;
border-bottom: 1px solid color-mix(in srgb, var(--ton, var(--akzent)) 26%, transparent);
background:
linear-gradient(180deg,
color-mix(in srgb, var(--ton, var(--akzent)) 14%, transparent),
transparent);
}
.foyer-reihe__kopf { .foyer-reihe__kopf {
display: flex; align-items: center; justify-content: space-between; display: flex; align-items: center; justify-content: space-between;
gap: 10px; min-width: 0; gap: 10px; min-width: 0;
@@ -112,15 +155,24 @@
verschiebt. */ verschiebt. */
min-height: 28px; min-height: 28px;
} }
/* DIE UEBERSCHRIFT TRAEGT DEN TON DER REIHE statt eines Grautons.
Das ist die groesste Wirkung fuer die kleinste Aenderung: drei
Woerter, die man sofort auseinanderhaelt, ohne dass irgendwo eine
Flaeche heller wird. `88%` mit Weiss gemischt, damit die Schrift
hell genug bleibt — der reine Ton waere bei Bernstein und Gruen
auf dunklem Grund zwar bunt, aber nicht gut zu lesen. */
.foyer-reihe__ueber { .foyer-reihe__ueber {
margin: 0; margin: 0;
font-size: .78rem; font-weight: 800; font-size: .78rem; font-weight: 800;
letter-spacing: .14em; text-transform: uppercase; letter-spacing: .14em; text-transform: uppercase;
color: var(--text-leise, #a9a3bd); color: color-mix(in srgb, var(--ton, var(--akzent)) 70%, #ffffff);
} }
/* „nur ihr zwei" — ein Schild und kein Schloss. Ein Schloss sagt /* „nur ihr zwei" — ein Schild und kein Schloss. Ein Schloss sagt
„hier ist etwas verborgen"; dieses Schild sagt, dass die Reihe für „hier ist etwas verborgen"; dieses Schild sagt, dass die Reihe für
niemanden sonst existiert, und das ist der Unterschied. */ niemanden sonst existiert, und das ist der Unterschied. */
/* Die Schilder nehmen denselben Ton. Vorher war das Schild immer
blau, egal in welcher Reihe es stand — zwei Farben nebeneinander,
die nichts voneinander wussten. */
.foyer-reihe__nur, .foyer-reihe__nur,
.foyer-reihe__zahl { .foyer-reihe__zahl {
/* .72rem sind 11,52 px — die Untergrenze des Hauses ist 11,5, und /* .72rem sind 11,52 px — die Untergrenze des Hauses ist 11,5, und
@@ -132,9 +184,9 @@
padding: 3px 9px 4px; padding: 3px 9px 4px;
border-radius: 999px; border-radius: 999px;
white-space: nowrap; white-space: nowrap;
color: #cfe0ff; color: color-mix(in srgb, var(--ton, var(--akzent)) 55%, #ffffff);
background: rgba(154, 183, 255, .12); background: color-mix(in srgb, var(--ton, var(--akzent)) 14%, transparent);
border: 1px solid rgba(154, 183, 255, .3); border: 1px solid color-mix(in srgb, var(--ton, var(--akzent)) 34%, transparent);
} }
.foyer-reihe__zahl { color: #ffd9a0; background: rgba(224, 161, 58, .14); border-color: rgba(224, 161, 58, .34); } .foyer-reihe__zahl { color: #ffd9a0; background: rgba(224, 161, 58, .14); border-color: rgba(224, 161, 58, .34); }
.foyer-reihe__zahl[hidden], .foyer-reihe__nur[hidden] { display: none; } .foyer-reihe__zahl[hidden], .foyer-reihe__nur[hidden] { display: none; }
@@ -159,7 +211,12 @@
LINKS: DER PLAN LINKS: DER PLAN
===================================================================== */ ===================================================================== */
.plan-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; } .plan-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
/* EIN STREIFEN AM ZEILENANFANG, kein getoenter Kasten. Drei Pixel
Farbe an der Kante sagen dasselbe wie eine eingefaerbte Flaeche —
nur steht der Text weiterhin auf dem Grund, auf dem er gemessen
wurde. */
.plan-zeile { .plan-zeile {
border-left: 3px solid color-mix(in srgb, var(--ton, var(--akzent)) 42%, transparent);
display: flex; align-items: center; gap: 10px; display: flex; align-items: center; gap: 10px;
min-width: 0; min-width: 0;
padding: 8px 10px 8px 8px; padding: 8px 10px 8px 8px;
@@ -379,6 +436,7 @@
.raten-liste { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 8px; } .raten-liste { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 8px; }
.raten-zeile { .raten-zeile {
border-left: 3px solid color-mix(in srgb, var(--ton, var(--akzent)) 42%, transparent);
display: flex; align-items: flex-start; gap: 10px; display: flex; align-items: flex-start; gap: 10px;
min-width: 0; min-width: 0;
padding: 8px 10px 9px 8px; padding: 8px 10px 9px 8px;
@@ -456,6 +514,274 @@
steht links der Plan, und das soll so bleiben. Eine zweite Fassung steht links der Plan, und das soll so bleiben. Eine zweite Fassung
derselben Seite wäre die, die beim nächsten Umbau vergessen wird. derselben Seite wäre die, die beim nächsten Umbau vergessen wird.
===================================================================== */ ===================================================================== */
/* =====================================================================
DAS REGIE-TOR (08.10.2026)
Filipe: „die muss wirklich ultra krass sein. komplett crazy."
---------------------------------------------------------------------
KRASS HEISST HIER NICHT: ANDERS ALS DAS HAUS
Der naheliegende Weg waere eine Kachel mit eigener Rundung, eigenem
Verlauf, eigener Kante gewesen. Genau das stand heute Vormittag
schon einmal in dieser Datei und war ein Fehler — die Flaeche war
durchsichtig, die Tapete schien durch, und sie sah aus wie von
einer anderen Website. Filipes Satz vom 07.09. gilt weiter: „DU
HAST WIEDER EINE KLEINE AENDERUNG UEBERALL GEMACHT ANSTATT EINE
RIESEN AENDERUNG."
Also: dieselbe Silhouette wie jede Karte im Haus (`.regie-tor`
steht in der Modulliste in module.css) und dasselbe deckende
Material (in der Materialliste in start.css) — und darueber ein
eigenes Lichtelement, das es von allem anderen abhebt. Gleiche
Familie, hochgedreht.
---------------------------------------------------------------------
DREI DINGE MACHEN SIE BESONDERS
1. SIE IST SO BREIT WIE ALLES ZUSAMMEN. Die drei Reihen daneben
teilen sich eine Zeile; diese steht allein darunter. Das ist
die staerkste Aussage, die ein Raster ueberhaupt treffen kann,
und sie kostet keine einzige Farbe.
2. EIN LICHT LAEUFT DARUEBER. Sieben Sekunden von links nach
rechts, flach und schmal — wie der Schein einer Lampe ueber
einem Mischpult. Kein Blinken, kein Puls: Das waere dasselbe
Signal mit doppelter Belastung fuer die Augen, und diese Seite
steht manchmal eine Stunde offen.
3. SIE ANTWORTET AUF IHREN ZUSTAND. Verschlossen glimmt sie rot
und zurueckhaltend; aufgeschlossen wird das Licht gruen und
ruhig. Wer nicht hinein darf, sieht sie gedaempft und ohne
Bewegung — sie laedt ihn nicht ein, sie verschweigt sich aber
auch nicht.
WER WENIGER BEWEGUNG EINGESTELLT HAT, bekommt das Licht als
stehenden Schein. Nicht „keine Farbe" — der Zustand muss auch dann
zu erkennen sein.
===================================================================== */
.regie-tor {
/* Rot wie der Knopf, der eine Sendung startet. Aufgeschlossen
wechselt er weiter unten auf Gruen. */
--ton: #d8404a;
position: relative;
display: block;
width: 100%;
margin: 16px 0 0;
padding: 0;
border: 0;
background: none;
color: inherit;
font: inherit;
text-align: left;
cursor: pointer;
/* Die Silhouette kommt aus module.css. Hier steht nur, dass die
Hoehe reicht, damit das Licht Platz zum Laufen hat. */
min-height: 96px;
}
/* DAS LICHT. Ein eigenes Element und kein `::before`/`::after`: Die
beiden gehoeren in diesem Haus der Form (Kantenlicht und Raster aus
module.css). Wer sie hier ueberschriebe, naehme der Kachel genau
das, was sie zu einer Kachel dieses Hauses macht. */
.regie-tor__licht {
position: absolute;
inset: 0;
z-index: 1;
pointer-events: none;
background:
radial-gradient(120% 140% at 8% 0%,
color-mix(in srgb, var(--ton) 22%, transparent), transparent 58%),
radial-gradient(90% 120% at 100% 100%,
color-mix(in srgb, var(--ton) 14%, transparent), transparent 62%);
}
/* Der laufende Schein liegt auf einem zweiten Verlauf im selben
Element — `background-position` bewegt nur ihn. */
.regie-tor__licht::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(100deg,
transparent 36%,
color-mix(in srgb, var(--ton) 26%, transparent) 48%,
color-mix(in srgb, #ffffff 16%, transparent) 50%,
color-mix(in srgb, var(--ton) 26%, transparent) 52%,
transparent 64%);
background-size: 260% 100%;
background-repeat: no-repeat;
animation: regie-schein 7s linear infinite;
}
@keyframes regie-schein {
from { background-position: -130% 0; }
to { background-position: 230% 0; }
}
.regie-tor__innen {
position: relative;
/* Ueber dem Licht (1) und ueber dem Kantenlicht (2) aus module.css.
Ohne diese Zeile laege der Text unter dem Schein und wuerde bei
jedem Durchlauf kurz heller — genau die Art Flackern, die diese
Seite nicht haben soll. */
z-index: 3;
display: flex;
align-items: center;
gap: 16px;
padding: 18px 20px;
min-height: 96px;
}
.regie-tor__zeichen {
flex: none;
display: grid;
place-items: center;
width: 54px; height: 54px;
border-radius: 14px;
border: 1px solid color-mix(in srgb, var(--ton) 42%, transparent);
background: color-mix(in srgb, var(--ton) 12%, transparent);
color: color-mix(in srgb, var(--ton) 60%, #ffffff);
}
.regie-tor__glyphe {
width: 28px; height: 28px;
fill: none;
stroke: currentColor;
stroke-width: 1.7;
stroke-linecap: round;
stroke-linejoin: round;
}
/* Aufgeschlossen springt der Buegel auf — dasselbe Zeichen, andere
Aussage, und man sieht es aus fuenf Metern. */
.regie-tor[data-offen="ja"] .regie-tor__glyphe path {
transform: translateX(5px) rotate(-14deg);
transform-origin: 16px 10px;
}
.regie-tor__text { display: grid; gap: 3px; min-width: 0; flex: 1 1 auto; }
.regie-tor__ueber {
font-size: .72rem; font-weight: 800;
letter-spacing: .22em; text-transform: uppercase;
color: color-mix(in srgb, var(--ton) 62%, #ffffff);
}
.regie-tor__titel {
font-size: 1.12rem; font-weight: 800;
color: var(--text, #e9e6f2);
line-height: 1.2;
}
.regie-tor__satz {
font-size: .82rem; line-height: 1.45;
color: var(--text-leise, #a9a3bd);
}
.regie-tor__marke {
flex: none;
align-self: flex-start;
font-size: .72rem; font-weight: 800;
letter-spacing: .08em; text-transform: uppercase;
padding: 4px 11px 5px;
border-radius: 999px;
white-space: nowrap;
color: color-mix(in srgb, var(--ton) 55%, #ffffff);
background: color-mix(in srgb, var(--ton) 15%, transparent);
border: 1px solid color-mix(in srgb, var(--ton) 36%, transparent);
}
/* AUFGESCHLOSSEN: gruen und ruhig. */
.regie-tor[data-offen="ja"] { --ton: #5fc99a; }
/* WER NICHT HINEIN DARF: gedaempft und ohne Lauflicht. Sie bleibt
sichtbar — Filipe wollte ausdruecklich, dass jeder sie sieht —,
aber sie winkt niemanden heran, der ohnehin nicht durchkommt. Und
der Mauszeiger sagt es vorher: kein Zeigefinger, sondern das
Zeichen fuer „nicht erlaubt". */
.regie-tor[data-darf="nein"] {
--ton: #7f8699;
cursor: not-allowed;
}
.regie-tor[data-darf="nein"] .regie-tor__licht::after { animation: none; opacity: .25; }
@media (prefers-reduced-motion: reduce) {
.regie-tor__licht::after { animation: none; background-position: 46% 0; }
.regie-tor[data-offen="ja"] .regie-tor__glyphe path { transform: none; }
}
/* =====================================================================
DER VORHANG MIT DEM CODEFELD
===================================================================== */
.regie-vorhang {
position: fixed;
inset: 0;
/* UEBER ALLEM, auch ueber der Kopfleiste (die steht bei 6). Das
geht nur, weil dieses Element NEBEN `main` steht und nicht darin
— siehe der Hinweis in der HTML. */
z-index: 40;
display: grid;
place-items: center;
padding: 18px;
background: rgba(4, 6, 11, .72);
backdrop-filter: blur(3px);
}
.regie-vorhang[hidden] { display: none; }
.regie-fenster {
width: min(420px, 100%);
padding: 20px 20px 18px;
border-radius: 16px;
border: 1px solid rgba(216, 64, 74, .3);
background:
linear-gradient(168deg,
rgba(20, 27, 40, .98) 0%,
rgba(11, 15, 24, .99) 62%,
rgba(8, 11, 18, .99) 100%);
box-shadow: 0 30px 70px -30px rgba(0, 0, 0, .9);
}
.regie-fenster__titel {
margin: 0 0 6px;
font-size: 1.05rem; font-weight: 800;
color: var(--text, #e9e6f2);
}
.regie-fenster__satz {
margin: 0 0 14px;
font-size: .84rem; line-height: 1.5;
color: var(--text-leise, #a9a3bd);
}
.regie-feld { display: grid; gap: 5px; }
.regie-feld > span {
font-size: .76rem; font-weight: 700;
color: var(--text-leise, #a9a3bd);
}
.regie-feld input {
min-height: 44px;
padding: 10px 12px;
border-radius: 11px;
border: 1px solid var(--linie, rgba(150, 160, 190, .22));
background: rgba(255, 255, 255, .04);
color: var(--text, #e9e6f2);
font-size: .92rem;
/* Ein Zugangscode ist eine Folge von Zeichen, keine Sprache.
Gleiche Breiten machen Vertipper sichtbar. */
font-family: ui-monospace, "Cascadia Mono", Menlo, monospace;
letter-spacing: .06em;
}
.regie-feld input:focus-visible {
outline: 2px solid rgba(216, 64, 74, .5);
outline-offset: 1px;
}
.regie-fenster__fehler {
margin: 9px 0 0;
font-size: .8rem; line-height: 1.45;
color: #ff8b92;
}
.regie-fenster__fehler[hidden] { display: none; }
.regie-fenster__knoepfe {
display: flex; gap: 10px; justify-content: flex-end;
margin-top: 14px;
}
.regie-fenster__knoepfe .knopf,
.regie-fenster__knoepfe .knopf-still { margin-top: 0; min-height: 44px; }
.regie-fenster__kleingedruckt {
margin: 14px 0 0;
padding-top: 11px;
border-top: 1px solid var(--linie, rgba(150, 160, 190, .14));
font-size: .74rem; line-height: 1.45;
color: var(--text-still, #8b93a4);
}
@media (max-width: 900px) { @media (max-width: 900px) {
.foyer-reihen, .foyer-reihen,
.foyer-reihen:has(> .foyer-reihe--plan[hidden]) { .foyer-reihen:has(> .foyer-reihe--plan[hidden]) {
@@ -466,6 +792,20 @@
.foyer-reihe--raten { order: 2; } .foyer-reihe--raten { order: 2; }
.foyer-reihe--plan { order: 3; } .foyer-reihe--plan { order: 3; }
.foyer-reihe { padding: 14px 13px 16px; border-radius: 16px; } .foyer-reihe { padding: 14px 13px 16px; border-radius: 16px; }
.foyer-reihe__kopf { margin: -14px -13px 0; padding: 12px 13px 10px; }
/* AUF 390 PX IST NEBENEINANDER NICHT MEHR DRIN. Gemessen: Zeichen,
Text und Schild brauchen zusammen 352 px, der Satz bekaeme davon
knapp 140 und braeche vierzeilig um. Untereinander bleibt alles
lesbar, und die Kachel bleibt EIN Knopf. */
.regie-tor__innen {
flex-direction: column;
align-items: flex-start;
gap: 12px;
padding: 16px;
}
.regie-tor__marke { align-self: flex-start; order: -1; }
.regie-tor__zeichen { width: 46px; height: 46px; }
.saal-knopf { min-height: 52px; } .saal-knopf { min-height: 52px; }
} }
+8 -8
View File
@@ -140,7 +140,7 @@
} }
/* MODULLISTE */ /* MODULLISTE */
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe) { :is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe, .regie-tor) {
position: relative; position: relative;
clip-path: polygon(var(--fase) 0, 100% 0, 100% 100%, 0 100%, 0 var(--fase)); clip-path: polygon(var(--fase) 0, 100% 0, 100% 100%, 0 100%, 0 var(--fase));
border-radius: 0; border-radius: 0;
@@ -168,7 +168,7 @@
was übrig bleibt, ist eine Linie, die exakt der Form folgt, Schräge was übrig bleibt, ist eine Linie, die exakt der Form folgt, Schräge
inklusive. Ein `border` könnte das nicht: Er folgt dem Rechteck. */ inklusive. Ein `border` könnte das nicht: Er folgt dem Rechteck. */
/* MODULLISTE */ /* MODULLISTE */
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe)::before { :is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe, .regie-tor)::before {
content: ""; content: "";
position: absolute; inset: 0; position: absolute; inset: 0;
pointer-events: none; pointer-events: none;
@@ -191,7 +191,7 @@
/* RASTER UND ECKWINKEL. Beides auf ::after -- ein drittes Element gibt /* RASTER UND ECKWINKEL. Beides auf ::after -- ein drittes Element gibt
es nicht, und beides ist reine Optik ohne Klicks. */ es nicht, und beides ist reine Optik ohne Klicks. */
/* MODULLISTE */ /* MODULLISTE */
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe)::after { :is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe, .regie-tor)::after {
content: ""; content: "";
position: absolute; inset: 0; position: absolute; inset: 0;
pointer-events: none; pointer-events: none;
@@ -398,7 +398,7 @@
Gefunden beim Eintragen von `.foyer-reihe`: acht Vorkommen der Gefunden beim Eintragen von `.foyer-reihe`: acht Vorkommen der
Liste, sieben Marken. Die Pruefung erwartet jetzt acht. */ Liste, sieben Marken. Die Pruefung erwartet jetzt acht. */
/* MODULLISTE */ /* MODULLISTE */
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe):focus-visible { :is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe, .regie-tor):focus-visible {
outline: 2px solid var(--akzent); outline: 2px solid var(--akzent);
outline-offset: -4px; outline-offset: -4px;
} }
@@ -407,7 +407,7 @@
/* Dieselbe Form, kleiner -- keine zweite Gestaltung. */ /* Dieselbe Form, kleiner -- keine zweite Gestaltung. */
:root { --fase: 12px; } :root { --fase: 12px; }
/* MODULLISTE */ /* MODULLISTE */
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe) { :is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe, .regie-tor) {
filter: drop-shadow(0 3px 8px rgba(0, 0, 0, .7)); filter: drop-shadow(0 3px 8px rgba(0, 0, 0, .7));
} }
} }
@@ -421,15 +421,15 @@
/* Im Kontrastmodus zählt die Kante, und die muss ein echter `border` /* Im Kontrastmodus zählt die Kante, und die muss ein echter `border`
sein. Die Schräge bleibt: Sie ist Geometrie, keine Farbe. */ sein. Die Schräge bleibt: Sie ist Geometrie, keine Farbe. */
/* MODULLISTE */ /* MODULLISTE */
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe) { :is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe, .regie-tor) {
filter: none; border: 1px solid CanvasText; filter: none; border: 1px solid CanvasText;
} }
/* MODULLISTE */ /* MODULLISTE */
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe)::after { :is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe, .regie-tor)::after {
display: none; display: none;
} }
/* MODULLISTE */ /* MODULLISTE */
:is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe)::before { :is(.eintrag-karte, .call, .chat, .datei, .ablage, .zahlkarte, .regel, .zustand, .ki-kasten, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .creator, .summe, .pdf, .pdf-ablage, .suchleiste, .person, .kk, .fortschritt, .punkt, .dran__punkt, .unterweisung, .warnkarte, .kachel, .tagesblick, .leer-hinweis, .team-karte, .zahl, .k-listentag, .import-vorschau, .code-fenster, .schulung__neu, .gruppe[data-gruppe], .kopf-zeile, .k-kopf, .steckbrief, .k-anlasskarte, .k-anlasskachel, .k-raster, .entscheidung, .liste-kachel, fieldset.gruppe, .t-kachel, .tperson, .tl, .foyer-reihe, .regie-tor)::before {
display: none; display: none;
} }
} }
+1 -1
View File
@@ -7679,7 +7679,7 @@ body[data-fremde-sicht="ja"]::after {
.spalte, .balance, .saeulen-kasten, .neu, .call-raum, .schulung__neu, .spalte, .balance, .saeulen-kasten, .neu, .call-raum, .schulung__neu,
.nachricht, .creator, .summe, .wert, .pdf, .pdf-ablage, .suchleiste, .nachricht, .creator, .summe, .wert, .pdf, .pdf-ablage, .suchleiste,
.person, .kk, .fortschritt, .punkt, .nur-lesen, .todo-liste li, .person, .kk, .fortschritt, .punkt, .nur-lesen, .todo-liste li,
.unterweisung, .warnkarte, .foyer-reihe .unterweisung, .warnkarte, .foyer-reihe, .regie-tor
/* `.foyer-reihe` sind die drei Tafeln im Foyer der Reaction. Sie /* `.foyer-reihe` sind die drei Tafeln im Foyer der Reaction. Sie
hatten bis zum 08.10.2026 ihre eigene Flaeche hatten bis zum 08.10.2026 ihre eigene Flaeche
(`rgba(255,255,255,.045)`) -- also eine zweite Antwort auf die (`rgba(255,255,255,.045)`) -- also eine zweite Antwort auf die
+6
View File
@@ -343,6 +343,12 @@
'Dieses Video hat schon jemand angeraten. Es liegt bei DogFather und VanVan.', 'Dieses Video hat schon jemand angeraten. Es liegt bei DogFather und VanVan.',
steht_schon_bereit: steht_schon_bereit:
'Das liegt schon in der Warteschlange — es kommt also sowieso.', 'Das liegt schon in der Warteschlange — es kommt also sowieso.',
/* ---- Das Regie-Tor (08.10.2026) ---- */
regie_gehoert_den_zweien:
'Die Regie gehört DogFather und VanVan. Dein Zugang reicht hier nicht — '
+ 'das ist kein Fehler, die Tür ist einfach nicht für dich.',
code_falsch:
'Der Code stimmt nicht. Es ist derselbe, mit dem du dich hier anmeldest.',
nicht_deiner: nicht_deiner:
'Das ist nicht deiner. Zurückziehen kannst du nur, was du selbst ' 'Das ist nicht deiner. Zurückziehen kannst du nur, was du selbst '
+ 'geschickt hast und worüber noch nicht entschieden ist.', + 'geschickt hast und worüber noch nicht entschieden ist.',
+202 -1
View File
@@ -35,6 +35,10 @@
let lage = null; let lage = null;
let raten = null; let raten = null;
let regie = null;
/* Welche Bereiche der Vorhang stillgelegt hat -- gemerkt, damit
beim Schliessen genau die wieder freigegeben werden. */
let geschwiegen = [];
async function hole(pfad, einstellungen) { async function hole(pfad, einstellungen) {
return fetch(pfad, { credentials: 'same-origin', ...(einstellungen || {}) }); return fetch(pfad, { credentials: 'same-origin', ...(einstellungen || {}) });
@@ -445,9 +449,184 @@
await ratenHolen(); await ratenHolen();
} }
/* =================================================================
DAS REGIE-TOR
Filipe: „die soll jeder sehen aber nur vanvan und dogfather
sollen da rein kommen bitte."
DIE KACHEL STEHT IMMER DA. Was sich aendert, ist der Satz darauf
und das, was ein Druck bewirkt. Wer nicht hinein darf, bekommt
KEIN Eingabefeld -- eine Kachel, die jeder sieht, waere sonst
eine Ratestelle fuer jeden im Haus.
================================================================= */
function regieZeichnen() {
const tor = $('regie-tor');
if (!tor || !regie) return;
const darf = !!regie.darf;
const offen = !!regie.offen;
tor.dataset.darf = darf ? 'ja' : 'nein';
tor.dataset.offen = offen ? 'ja' : 'nein';
$('regie-marke').textContent = darf ? (offen ? 'Offen' : 'Verschlossen') : 'Nur ihr zwei';
if (!darf) {
$('regie-titel').textContent = 'Der Platz hinter dem Pult';
$('regie-satz').textContent = 'Hier führen DogFather und VanVan die Sendung. '
+ 'Für dich ist die Tür zu — und das bleibt sie auch.';
tor.setAttribute('aria-label',
'Regie — nur für DogFather und VanVan, du kommst hier nicht hinein');
return;
}
if (offen) {
const bis = regie.bis ? alsTermin(regie.bis) : '';
$('regie-titel').textContent = 'Regie — aufgeschlossen';
$('regie-satz').textContent = bis
? `Offen bis ${bis}. Ein Druck, und du stehst am Pult.`
: 'Offen. Ein Druck, und du stehst am Pult.';
tor.setAttribute('aria-label', 'In die Regie gehen');
} else {
$('regie-titel').textContent = 'Regie aufschließen';
$('regie-satz').textContent = 'Warteschlange, Ton, Werbung, der rote Knopf. '
+ 'Einmal dein Zugangscode, dann zwölf Stunden offen.';
tor.setAttribute('aria-label', 'Regie mit deinem Zugangscode aufschließen');
}
}
/** Ein Druck auf die Kachel. Drei Ausgaenge, und jeder sagt etwas
* anderes: hinein / aufschliessen / das ist nicht deine Tuer. */
function regieDruck() {
if (!regie?.darf) {
sagFehler('Die Regie gehört DogFather und VanVan. '
+ 'Dein Zugang reicht hier nicht — das ist kein Fehler.');
return;
}
if (regie.offen) { window.location.href = 'reaktion.html'; return; }
vorhangAuf();
}
function vorhangAuf() {
const v = $('regie-vorhang');
v.hidden = false;
/* ==== DER REST DER SEITE WIRD STILLGELEGT =====================
Ohne das waere der Vorhang nur ein Bild: Esc schliesst, ein
Druck daneben schliesst, der Finger steht im Feld -- aber die
Tabulatortaste lief weiter durch die Knoepfe DAHINTER. Wer die
Maus nicht benutzt, landete nach drei Tastendruecken auf
„Abmelden", sichtbar war aber das Codefeld. Das ist dieselbe
Sorte Fehler wie ein Knopf, der auf einem anderen liegt: Man
tippt auf A und bekommt B.
`inert` statt eines selbstgebauten Fokusfaengers: Es nimmt dem
ganzen Bereich Klicks, Fokus und Vorleseprogramme in einem
Zug. Ein Fokusfaenger von Hand ist zwanzig Zeilen, die beim
naechsten neuen Knopf nicht mehr stimmen.
NICHT NUR `main`, SONDERN ALLES AUSSER DEM VORHANG. Der erste
Entwurf legte `#foyer` stumm -- und die eigene Messung fiel
sofort darueber: Die KOPFLEISTE steht ausserhalb davon, also
lief die Tabulatortaste weiter nach „Abmelden". Ein halber
Riegel ist hier so gut wie keiner.
ABGELEITET STATT AUFGEZAEHLT: Was neben dem Vorhang steht,
wird gefragt und nicht in eine Liste geschrieben. Eine Liste
waere die, die den naechsten Kasten vergisst, den jemand ins
`body` haengt. */
geschwiegen = [...document.body.children].filter(
(e) => e !== v && 'inert' in e && !e.inert);
for (const e of geschwiegen) e.inert = true;
$('regie-fehler').hidden = true;
const feld = $('regie-code');
feld.value = '';
/* Erst zeigen, dann den Finger hineinsetzen -- ein `focus()` auf
etwas, das noch `hidden` ist, landet nirgends. */
setTimeout(() => feld.focus(), 30);
document.addEventListener('keydown', vorhangTaste);
}
function vorhangZu() {
$('regie-vorhang').hidden = true;
/* NUR ZURUECKNEHMEN, WAS ICH SELBST GESETZT HABE. Haette ich
stumpf alles wieder freigegeben, wuerde ein Bereich, den eine
andere Stelle aus eigenem Grund stillgelegt hat, hier
versehentlich wieder hoerbar. */
for (const e of geschwiegen) e.inert = false;
geschwiegen = [];
/* DAS FELD WIRD GELEERT, auch beim Abbrechen. Ein Zugangscode,
der in einem geschlossenen Fenster stehen bleibt, steht beim
naechsten Bildschirmteilen wieder da. */
$('regie-code').value = '';
document.removeEventListener('keydown', vorhangTaste);
$('regie-tor')?.focus();
}
/* Esc schliesst. Ohne das waere der Vorhang eine Falle fuer jeden,
der die Maus gerade nicht hat. */
function vorhangTaste(e) {
if (e.key === 'Escape') { e.preventDefault(); vorhangZu(); }
}
async function regieAufschliessen(e) {
e.preventDefault();
const code = $('regie-code').value.trim();
const knopf = $('regie-los');
const fehlerfeld = $('regie-fehler');
fehlerfeld.hidden = true;
if (!code) {
fehlerfeld.textContent = 'Tipp erst deinen Code ein.';
fehlerfeld.hidden = false;
return;
}
knopf.disabled = true;
try {
const a = await hole('/workspace/api/reaktion/regie', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ code }),
});
if (!a.ok) {
const wort = (await a.json().catch(() => null))?.fehler;
/* DER FEHLER STEHT IM FENSTER, nicht oben auf der Seite. Wer
gerade tippt, schaut auf das Feld -- eine Meldung hinter
dem Vorhang haette er nie gesehen. */
fehlerfeld.textContent = (window.sagWas && wort && window.sagWas(wort))
|| 'Das ging gerade nicht.';
fehlerfeld.hidden = false;
$('regie-code').value = '';
$('regie-code').focus();
return;
}
regie = await a.json();
regieZeichnen();
vorhangZu();
window.location.href = 'reaktion.html';
} catch {
fehlerfeld.textContent = 'Das ging gerade nicht.';
fehlerfeld.hidden = false;
} finally { knopf.disabled = false; }
}
async function regieAbschliessen() {
const a = await hole('/workspace/api/reaktion/regie', { method: 'DELETE' });
if (!a.ok) { sagFehler('Das ging gerade nicht.'); return; }
regie = await a.json();
regieZeichnen();
sagFehler('Regie wieder abgeschlossen.');
}
/* ================================================================= /* =================================================================
HOLEN HOLEN
================================================================= */ ================================================================= */
async function regieHolen() {
try {
const a = await hole('/workspace/api/reaktion/regie');
if (!a.ok) return;
regie = await a.json();
regieZeichnen();
} catch { /* die Kachel bleibt stehen, wie sie war */ }
}
async function standHolen() { async function standHolen() {
try { try {
const a = await hole('/workspace/api/reaktion'); const a = await hole('/workspace/api/reaktion');
@@ -510,8 +689,28 @@
$('raten-notiz').addEventListener('input', restZeigen); $('raten-notiz').addEventListener('input', restZeigen);
restZeigen(); restZeigen();
$('regie-tor').addEventListener('click', regieDruck);
$('regie-form').addEventListener('submit', regieAufschliessen);
$('regie-ab').addEventListener('click', vorhangZu);
/* Ein Druck neben das Fenster schliesst es auch -- aber nur, wenn
er WIRKLICH daneben war und nicht auf ein Kind davon. */
$('regie-vorhang').addEventListener('click', (e) => {
if (e.target === $('regie-vorhang')) vorhangZu();
});
/* Rechte Maustaste auf die offene Kachel schliesst wieder ab. Als
eigener Knopf waere es ein zweites Bedienelement in einer
Kachel, die selbst ein einziger grosser Knopf ist -- ein Knopf
im Knopf ist in jedem Vorleseprogramm ein Durcheinander.
ERREICHBAR BLEIBT ES TROTZDEM: Nach zwölf Stunden fällt das
Schloss von selbst zu, und wer sofort abschließen will, kann
sich abmelden. */
$('regie-tor').addEventListener('contextmenu', (e) => {
if (regie?.darf && regie.offen) { e.preventDefault(); regieAbschliessen(); }
});
standHolen(); standHolen();
ratenHolen(); ratenHolen();
regieHolen();
/* ==== ALLE ZWANZIG SEKUNDEN NACHFRAGEN ==================== /* ==== ALLE ZWANZIG SEKUNDEN NACHFRAGEN ====================
Damit jemand, der das Foyer offen stehen laesst, den Start Damit jemand, der das Foyer offen stehen laesst, den Start
@@ -528,7 +727,9 @@
if (document.visibilityState === 'visible') standHolen(); if (document.visibilityState === 'visible') standHolen();
}, 20000); }, 20000);
document.addEventListener('visibilitychange', () => { document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible') { standHolen(); ratenHolen(); } if (document.visibilityState === 'visible') {
standHolen(); ratenHolen(); regieHolen();
}
}); });
} }
+19 -19
View File
@@ -12,19 +12,19 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="garage"> <body class="start" data-buehne="garage">
@@ -430,22 +430,22 @@
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach <!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne `window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. --> Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
<script src="assets/js/textform.js?v=202610081119"></script> <script src="assets/js/textform.js?v=202610081212"></script>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/hochladen.js?v=202610081119" defer></script> <script src="assets/js/hochladen.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/zuteilung.js?v=202610081119" defer></script> <script src="assets/js/zuteilung.js?v=202610081212" defer></script>
<!-- Der Vorlagenkatalog stand bis zum 23.09.2026 mitten in <!-- Der Vorlagenkatalog stand bis zum 23.09.2026 mitten in
aufgaben.js. Er bedient jetzt zwei Seiten und hat deshalb eine aufgaben.js. Er bedient jetzt zwei Seiten und hat deshalb eine
eigene Datei; hier zeigt er den Creator-Katalog. eigene Datei; hier zeigt er den Creator-Katalog.
Vor aufgaben.js, weil die Seite ihn beim Start einrichtet. --> Vor aufgaben.js, weil die Seite ihn beim Start einrichtet. -->
<script src="assets/js/vorlagenbrett.js?v=202610081119" defer></script> <script src="assets/js/vorlagenbrett.js?v=202610081212" defer></script>
<script src="assets/js/aufgaben.js?v=202610081119" defer></script> <script src="assets/js/aufgaben.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/automation.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/automation.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="garage"> <body class="start" data-buehne="garage">
@@ -168,15 +168,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/automation.js?v=202610081119" defer></script> <script src="assets/js/automation.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -197,16 +197,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<script src="assets/js/befinden.js?v=202610081119" defer></script> <script src="assets/js/befinden.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+24 -24
View File
@@ -12,29 +12,29 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bereich.css?v=202610081212" />
<!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett <!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett
„Mitmachen". Eine eigene Kopie der Regel hier waere die zweite „Mitmachen". Eine eigene Kopie der Regel hier waere die zweite
Stelle, an der dieselbe Sache anders aussieht. --> Stelle, an der dieselbe Sache anders aussieht. -->
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081212" />
<!-- Die Bildschau: ein Banner wird darin mittig gezeigt statt als nackte <!-- Die Bildschau: ein Banner wird darin mittig gezeigt statt als nackte
Datei in einem neuen Tab. Sie ist seit dem 07.10.2026 eine eigene Datei in einem neuen Tab. Sie ist seit dem 07.10.2026 eine eigene
Datei und keine Kopie aus chat.css -- dieselbe Schau im Chat und Datei und keine Kopie aus chat.css -- dieselbe Schau im Chat und
hier, ein Stil. --> hier, ein Stil. -->
<link rel="stylesheet" href="assets/css/bildschau.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bildschau.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -454,20 +454,20 @@
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach <!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne `window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. --> Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
<script src="assets/js/textform.js?v=202610081119"></script> <script src="assets/js/textform.js?v=202610081212"></script>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/checkliste.js?v=202610081119" defer></script> <script src="assets/js/checkliste.js?v=202610081212" defer></script>
<script src="assets/js/ampel.js?v=202610081119" defer></script> <script src="assets/js/ampel.js?v=202610081212" defer></script>
<script src="assets/js/schulung.js?v=202610081119" defer></script> <script src="assets/js/schulung.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<script src="assets/js/bildschau.js?v=202610081119"></script> <script src="assets/js/bildschau.js?v=202610081212"></script>
<script src="assets/js/bereich.js?v=202610081119" defer></script> <script src="assets/js/bereich.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+19 -19
View File
@@ -7,17 +7,17 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bereich.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/treff.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. --> <!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -108,15 +108,15 @@
</main> </main>
<!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. --> <!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. -->
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/auskunft.js?v=202610081119" defer></script> <script src="assets/js/auskunft.js?v=202610081212" defer></script>
<script src="assets/js/bewerben.js?v=202610081119" defer></script> <script src="assets/js/bewerben.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -7,16 +7,16 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. --> <!-- haus.css MUSS die letzte Stilvorlage sein - siehe treff-regeln.html. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -80,16 +80,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/auskunft.js?v=202610081119" defer></script> <script src="assets/js/auskunft.js?v=202610081212" defer></script>
<script src="assets/js/bewerbungen.js?v=202610081119" defer></script> <script src="assets/js/bewerbungen.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+3 -3
View File
@@ -59,11 +59,11 @@
<!-- DIE WERBEEINBLENDUNG. Dieselbe Datei wie in der Reaction-Seite: <!-- DIE WERBEEINBLENDUNG. Dieselbe Datei wie in der Reaction-Seite:
Zwei Fassungen altern unterschiedlich, und dann sieht der Stream Zwei Fassungen altern unterschiedlich, und dann sieht der Stream
anders aus als das, worueber geredet wird. --> anders aus als das, worueber geredet wird. -->
<link rel="stylesheet" href="assets/css/werbung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/werbung.css?v=202610081212" />
</head> </head>
<body class="obs-buehne"> <body class="obs-buehne">
<div id="platz"></div> <div id="platz"></div>
<script src="assets/js/werbung.js?v=202610081119" defer></script> <script src="assets/js/werbung.js?v=202610081212" defer></script>
<script src="assets/js/buehne.js?v=202610081119" defer></script> <script src="assets/js/buehne.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/calls.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/calls.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="lounge"> <body class="start" data-buehne="lounge">
@@ -89,15 +89,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/ki.js?v=202610081119" defer></script> <script src="assets/js/ki.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/calls.js?v=202610081119" defer></script> <script src="assets/js/calls.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+21 -21
View File
@@ -12,31 +12,31 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog, <!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog,
.neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem .neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem
Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen
zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html. zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html.
Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten
Dialog zu sehen bekam. --> Dialog zu sehen bekam. -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/chat.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/chat.css?v=202610081212" />
<!-- Die Bildschau stand bis zum 07.10.2026 in chat.css. Sie wird jetzt <!-- Die Bildschau stand bis zum 07.10.2026 in chat.css. Sie wird jetzt
auch vom Event-Banner benutzt (bereich.html) und hat deshalb eine auch vom Event-Banner benutzt (bereich.html) und hat deshalb eine
eigene Datei. Sie steht GENAU HIER -- direkt hinter chat.css, also eigene Datei. Sie steht GENAU HIER -- direkt hinter chat.css, also
an derselben Stelle im Ladeweg wie der Block vorher. --> an derselben Stelle im Ladeweg wie der Block vorher. -->
<link rel="stylesheet" href="assets/css/bildschau.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bildschau.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="lounge"> <body class="start" data-buehne="lounge">
@@ -744,24 +744,24 @@
</form> </form>
</dialog> </dialog>
<script src="assets/js/bereiche.js?v=202610081119"></script> <script src="assets/js/bereiche.js?v=202610081212"></script>
<!-- TEXTFORM VOR ALLEM ANDEREN (21.09.2026): chat.js und bereich.js <!-- TEXTFORM VOR ALLEM ANDEREN (21.09.2026): chat.js und bereich.js
fragen beim Zeichnen nach `window.Textform`. Kaeme sie spaeter, fragen beim Zeichnen nach `window.Textform`. Kaeme sie spaeter,
waere die erste gezeichnete Nachricht ohne Gestaltung -- und das waere die erste gezeichnete Nachricht ohne Gestaltung -- und das
faellt nur dem auf, der genau hinsieht. KEIN `defer`, damit sie faellt nur dem auf, der genau hinsieht. KEIN `defer`, damit sie
wirklich vor den anderen dasteht. --> wirklich vor den anderen dasteht. -->
<script src="assets/js/textform.js?v=202610081119"></script> <script src="assets/js/textform.js?v=202610081212"></script>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/hochladen.js?v=202610081119" defer></script> <script src="assets/js/hochladen.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119"></script> <script src="assets/js/kopf.js?v=202610081212"></script>
<script src="assets/js/glocke.js?v=202610081119"></script> <script src="assets/js/glocke.js?v=202610081212"></script>
<!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten` <!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten`
bereit, und chat.js baut die Knoepfe nur, wenn es das gibt. bereit, und chat.js baut die Knoepfe nur, wenn es das gibt.
Andersherum waere die Reihenfolge eine stille Abhaengigkeit -- Andersherum waere die Reihenfolge eine stille Abhaengigkeit --
die Knoepfe fehlten, und niemand wuesste warum. --> die Knoepfe fehlten, und niemand wuesste warum. -->
<script src="assets/js/anruf.js?v=202610081119"></script> <script src="assets/js/anruf.js?v=202610081212"></script>
<!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom <!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom
Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein
Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne
@@ -772,8 +772,8 @@
sie beim ersten Foto noch nicht da -- und der erste Klick ginge sie beim ersten Foto noch nicht da -- und der erste Klick ginge
wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal
auftritt, ist der, den man nie nachstellen kann. --> auftritt, ist der, den man nie nachstellen kann. -->
<script src="assets/js/bildschau.js?v=202610081119"></script> <script src="assets/js/bildschau.js?v=202610081212"></script>
<script src="assets/js/chat.js?v=202610081119"></script> <script src="assets/js/chat.js?v=202610081212"></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/content.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/content.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="portal"> <body class="start" data-buehne="portal">
@@ -179,15 +179,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/checkliste.js?v=202610081119" defer></script> <script src="assets/js/checkliste.js?v=202610081212" defer></script>
<script src="assets/js/content.js?v=202610081119" defer></script> <script src="assets/js/content.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+6 -6
View File
@@ -36,15 +36,15 @@
<link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp" <link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp"
type="image/webp" media="(max-width: 899px)" /> type="image/webp" media="(max-width: 899px)" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst <!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst
404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen 404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen
statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es: statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es:
Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere
die eine Seite, auf der man das Umfaerben sieht. --> die eine Seite, auf der man das Umfaerben sieht. -->
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/crew-haus.css?v=202610081212" />
</head> </head>
<body class="gate gate--crew"> <body class="gate gate--crew">
@@ -459,7 +459,7 @@
<script src="assets/js/gate.js?v=202610081119" defer></script> <script src="assets/js/gate.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+4 -4
View File
@@ -23,25 +23,25 @@
}, },
"icons": [ "icons": [
{ {
"src": "/assets/img/app-symbole/crew-192.png?v=202610081119", "src": "/assets/img/app-symbole/crew-192.png?v=202610081212",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png", "type": "image/png",
"purpose": "any" "purpose": "any"
}, },
{ {
"src": "/assets/img/app-symbole/crew-512.png?v=202610081119", "src": "/assets/img/app-symbole/crew-512.png?v=202610081212",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png", "type": "image/png",
"purpose": "any" "purpose": "any"
}, },
{ {
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202610081119", "src": "/assets/img/app-symbole/crew-192-maskable.png?v=202610081212",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png", "type": "image/png",
"purpose": "maskable" "purpose": "maskable"
}, },
{ {
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202610081119", "src": "/assets/img/app-symbole/crew-512-maskable.png?v=202610081212",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png", "type": "image/png",
"purpose": "maskable" "purpose": "maskable"
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/dateien.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="arena"> <body class="start" data-buehne="arena">
@@ -108,15 +108,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/hochladen.js?v=202610081119" defer></script> <script src="assets/js/hochladen.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/dateien.js?v=202610081119" defer></script> <script src="assets/js/dateien.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -306,20 +306,20 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<!-- VOR entwicklung.js: Die Seite richtet den Katalog beim Start ein, <!-- VOR entwicklung.js: Die Seite richtet den Katalog beim Start ein,
also muss es ihn zu dem Zeitpunkt geben. Mit "defer" laufen beide also muss es ihn zu dem Zeitpunkt geben. Mit "defer" laufen beide
in Dokumentreihenfolge. --> in Dokumentreihenfolge. -->
<script src="assets/js/vorlagenbrett.js?v=202610081119" defer></script> <script src="assets/js/vorlagenbrett.js?v=202610081212" defer></script>
<script src="assets/js/entwicklung.js?v=202610081119" defer></script> <script src="assets/js/entwicklung.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/hilfe.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/hilfe.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -146,14 +146,14 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/hilfe.js?v=202610081119" defer></script> <script src="assets/js/hilfe.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+5 -5
View File
@@ -30,9 +30,9 @@
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp" <link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
type="image/webp" media="(max-width: 899px)" /> type="image/webp" media="(max-width: 899px)" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
</head> </head>
<body class="gate"> <body class="gate">
@@ -427,7 +427,7 @@
<script src="assets/js/gate.js?v=202610081119" defer></script> <script src="assets/js/gate.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/kalender.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="skyline"> <body class="start" data-buehne="skyline">
@@ -383,15 +383,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/kalender.js?v=202610081119" defer></script> <script src="assets/js/kalender.js?v=202610081212" defer></script>
<script src="assets/js/kalender-abo.js?v=202610081119" defer></script> <script src="assets/js/kalender-abo.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/leistung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/leistung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="arena"> <body class="start" data-buehne="arena">
@@ -444,13 +444,13 @@
</form> </form>
</dialog> </dialog>
<script src="assets/js/meldung.js?v=202610081119"></script> <script src="assets/js/meldung.js?v=202610081212"></script>
<script src="assets/js/nachfrage.js?v=202610081119"></script> <script src="assets/js/nachfrage.js?v=202610081212"></script>
<script src="assets/js/wahl.js?v=202610081119"></script> <script src="assets/js/wahl.js?v=202610081212"></script>
<script src="assets/js/bereiche.js?v=202610081119"></script> <script src="assets/js/bereiche.js?v=202610081212"></script>
<script src="assets/js/kopf.js?v=202610081119"></script> <script src="assets/js/kopf.js?v=202610081212"></script>
<script src="assets/js/glocke.js?v=202610081119"></script> <script src="assets/js/glocke.js?v=202610081212"></script>
<script src="assets/js/leistung.js?v=202610081119"></script> <script src="assets/js/leistung.js?v=202610081212"></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+14 -14
View File
@@ -7,17 +7,17 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/manager-ziele.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/manager-ziele.css?v=202610081212" />
<!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die <!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die
Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur
Variablen, und bei Variablen entscheidet allein, wer zuletzt Variablen, und bei Variablen entscheidet allein, wer zuletzt
kommt. pruef-css-klassen.mjs misst genau dieses Paar nach. --> kommt. pruef-css-klassen.mjs misst genau dieses Paar nach. -->
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="arena"> <body class="start" data-buehne="arena">
@@ -230,16 +230,16 @@
kopf.js liest daraus die Leitungsrollen. Ohne sie stürzt jede kopf.js liest daraus die Leitungsrollen. Ohne sie stürzt jede
Seite ab, und zwar nur in der Browserkonsole -- die Kopfleiste Seite ab, und zwar nur in der Browserkonsole -- die Kopfleiste
kommt trotzdem. --> kommt trotzdem. -->
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<!-- wahl.js gehört zu kopf.js: Der Sicht-Umschalter baut daraus seine <!-- wahl.js gehört zu kopf.js: Der Sicht-Umschalter baut daraus seine
Liste. pruef-css-klassen setzt das durch, und zwar auch die Liste. pruef-css-klassen setzt das durch, und zwar auch die
Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen
Bedienelement. --> Bedienelement. -->
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/manager-ziele.js?v=202610081119" defer></script> <script src="assets/js/manager-ziele.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,13 +12,13 @@
vergessen wird. --> vergessen wird. -->
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/material.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/material.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-ton="42" data-buehne="studio"> <body class="start" data-ton="42" data-buehne="studio">
@@ -138,14 +138,14 @@
<p class="m-laedt" id="laedt">Einen Moment …</p> <p class="m-laedt" id="laedt">Einen Moment …</p>
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/hochladen.js?v=202610081119" defer></script> <script src="assets/js/hochladen.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/material.js?v=202610081119" defer></script> <script src="assets/js/material.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+14 -14
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/notizen.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/notizen.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-ton="46"> <body class="start" data-ton="46">
@@ -181,12 +181,12 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js <!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. --> liest daraus die Leitungsrollen. -->
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/notizen.js?v=202610081119" defer></script> <script src="assets/js/notizen.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/personen.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/personen.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="halle"> <body class="start" data-buehne="halle">
@@ -453,14 +453,14 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/personen.js?v=202610081119" defer></script> <script src="assets/js/personen.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/profil.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/profil.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="halle"> <body class="start" data-buehne="halle">
@@ -214,16 +214,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/hochladen.js?v=202610081119" defer></script> <script src="assets/js/hochladen.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/steckbrief.js?v=202610081119" defer></script> <script src="assets/js/steckbrief.js?v=202610081212" defer></script>
<script src="assets/js/profil.js?v=202610081119" defer></script> <script src="assets/js/profil.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+104 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/foyer.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/foyer.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -190,17 +190,106 @@
</section> </section>
</div> </div>
<!-- ==================================================================
DAS REGIE-TOR (08.10.2026)
Filipe: „unter den [Reihen] fehlt eine kachel, die viel kraesser
und spezieller aussehen soll, wo nur dogfather oder vanvan
reinkommen. mit ihren zugangscodes fuer die seite. und das soll
die regie kachel sein. die muss wirklich ultra krass sein."
Und zur Staerke des Schlosses: „die soll jeder sehen aber nur
vanvan und dogfather sollen da rein kommen bitte."
SIE STEHT FUER ALLE DA -- anders als die linke Reihe, und zwar
auf ausdruecklichen Wunsch. Deshalb steht hier NICHTS drin, was
jemand nicht sehen soll: kein Titel, kein Stand, keine Zahl.
Eine verschlossene Tuer mit einem Schild darauf.
EIN `button` UND KEIN LINK. Der Link in der Mitte fuehrt
woandershin; dieser hier fuehrt zunaechst nirgendwohin, sondern
fragt. Ein `a href` waere ein Versprechen, das er nicht haelt --
und in einem neuen Reiter geoeffnet landete man auf einer Seite,
die sofort zurueckschickt.
================================================================== -->
<button type="button" class="regie-tor" id="regie-tor" data-darf="nein" data-offen="nein">
<span class="regie-tor__licht" aria-hidden="true"></span>
<span class="regie-tor__innen">
<span class="regie-tor__zeichen" aria-hidden="true">
<svg viewBox="0 0 24 24" class="regie-tor__glyphe">
<rect x="4.5" y="10.5" width="15" height="10" rx="2.2" />
<path d="M8 10.5V7.3a4 4 0 0 1 8 0v3.2" />
<circle cx="12" cy="15.4" r="1.5" />
</svg>
</span>
<span class="regie-tor__text">
<span class="regie-tor__ueber">Regie</span>
<strong class="regie-tor__titel" id="regie-titel">Der Platz hinter dem Pult</strong>
<span class="regie-tor__satz" id="regie-satz">…</span>
</span>
<span class="regie-tor__marke" id="regie-marke">Nur ihr zwei</span>
</span>
</button>
</main> </main>
<!-- AUSSERHALB VON `main`, und das ist kein Schoenheitsfehler.
`body.start > main` traegt `position: relative; z-index: 1`, die
Kopfleiste steht bei 6 -- und alles INNERHALB von main wird mit
main zusammen eingeordnet. Ein `z-index: 500` darin bliebe unter
der 6 daneben, und der Vorhang laege unter der Kopfleiste.
Gemessen am 08.10.2026 am Vorraum des Saals, dort war es genau
dieser Fehler. -->
<div class="regie-vorhang" id="regie-vorhang" hidden>
<div class="regie-fenster" role="dialog" aria-modal="true"
aria-labelledby="regie-fenster-titel">
<h2 class="regie-fenster__titel" id="regie-fenster-titel">Regie aufschließen</h2>
<p class="regie-fenster__satz" id="regie-fenster-satz">
Tipp deinen Zugangscode ein — denselben, mit dem du dich hier anmeldest.
</p>
<form id="regie-form">
<label class="regie-feld">
<span>Dein Zugangscode</span>
<!-- `type=password` und nicht `text`: Wer in einer Sendung den
Bildschirm teilt, soll ihn nicht mittippen lassen.
`autocomplete="off"` dazu -- das ist kein Anmeldefeld, und
ein Browser, der hier etwas vorschlaegt, schlaegt das
Falsche vor. -->
<input type="password" id="regie-code" autocomplete="off"
inputmode="text" placeholder="CODE-…" />
</label>
<p class="regie-fenster__fehler" id="regie-fehler" role="alert" hidden></p>
<div class="regie-fenster__knoepfe">
<!-- `knopf-still` und nicht ein erfundenes `knopf-leise`: Der
leise Knopf des Hauses heisst so und steht in `gate.css`,
die diese Seite laedt. Genau diese Falle hat heute schon
einmal zugeschlagen (`knopf-still--haupt`, gestaltet in
reaktion.css, die hier gar nicht geladen wird) -- im
Quelltext sah es nach Gestaltung aus, auf dem Bildschirm
war es ein nackter Browserknopf. -->
<button type="button" class="knopf-still" id="regie-ab">Abbrechen</button>
<button type="submit" class="knopf" id="regie-los">Aufschließen</button>
</div>
</form>
<!-- WAS DIESE TUER LEISTET UND WAS NICHT, STEHT DARUNTER.
Eine Sicherung, die staerker aussieht, als sie ist, ist
schlechter als gar keine: Wer sie fuer mehr haelt, laesst
deswegen etwas anderes weg. -->
<p class="regie-fenster__kleingedruckt">
Das hält einen neugierigen Blick auf, nicht jemanden, der an deinem
offenen Rechner sitzt. Danach bleibt die Regie zwölf Stunden offen.
</p>
</div>
</div>
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js <!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. --> liest daraus die Leitungsrollen. -->
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/reaktion-foyer.js?v=202610081119" defer></script> <script src="assets/js/reaktion-foyer.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+19 -19
View File
@@ -7,15 +7,15 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/reaktion.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/reaktion.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/werbung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/werbung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start reaktion-seite" data-stand="laedt"> <body class="start reaktion-seite" data-stand="laedt">
@@ -1132,15 +1132,15 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js <!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. --> liest daraus die Leitungsrollen. -->
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/spendenkarte.js?v=202610081119" defer></script> <script src="assets/js/spendenkarte.js?v=202610081212" defer></script>
<script src="assets/js/werbung.js?v=202610081119" defer></script> <script src="assets/js/werbung.js?v=202610081212" defer></script>
<script src="assets/js/reaktion.js?v=202610081119" defer></script> <script src="assets/js/reaktion.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/treff.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -134,14 +134,14 @@
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
die seit dem 07.09. jede Seite danach absucht. --> die seit dem 07.09. jede Seite danach absucht. -->
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<script src="assets/js/rechte.js?v=202610081119" defer></script> <script src="assets/js/rechte.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/report.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/report.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="showbuehne"> <body class="start" data-buehne="showbuehne">
@@ -106,17 +106,17 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/ki.js?v=202610081119" defer></script> <script src="assets/js/ki.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<script src="assets/js/report.js?v=202610081119" defer></script> <script src="assets/js/report.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/scouting.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/scouting.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="wald"> <body class="start" data-buehne="wald">
@@ -194,14 +194,14 @@
</div> </div>
</div> </div>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/scouting.js?v=202610081119" defer></script> <script src="assets/js/scouting.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+19 -19
View File
@@ -12,26 +12,26 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe <!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe
den Hinweis in start.css -- dort stand es bis zum 07.09.2026. --> den Hinweis in start.css -- dort stand es bis zum 07.09.2026. -->
<link rel="stylesheet" href="assets/css/heim.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/heim.css?v=202610081212" />
<!-- Die Einweisung bringt ihr Aussehen mit. Sie steht in <!-- Die Einweisung bringt ihr Aussehen mit. Sie steht in
anleitung.css, weil sie dorthin gehoert -- und nicht in anleitung.css, weil sie dorthin gehoert -- und nicht in
start.css, wo sie zwischen 48 Kachelfarben verschwinden start.css, wo sie zwischen 48 Kachelfarben verschwinden
wuerde. --> wuerde. -->
<link rel="stylesheet" href="assets/css/anleitung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/anleitung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -768,22 +768,22 @@
</p> </p>
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/live.js?v=202610081119" defer></script> <script src="assets/js/live.js?v=202610081212" defer></script>
<script src="assets/js/start.js?v=202610081119" defer></script> <script src="assets/js/start.js?v=202610081212" defer></script>
<!-- Die Begruessung und der Rundgang beim ersten Anmelden. <!-- Die Begruessung und der Rundgang beim ersten Anmelden.
EIGENE DATEI und nicht ein Stueck start.js: Sie laeuft auf der EIGENE DATEI und nicht ein Stueck start.js: Sie laeuft auf der
meistbenutzten Seite des Hauses, und wenn hier etwas schiefgeht, meistbenutzten Seite des Hauses, und wenn hier etwas schiefgeht,
darf davon nichts anderes betroffen sein. --> darf davon nichts anderes betroffen sein. -->
<script src="assets/js/rundgang.js?v=202610081119" defer></script> <script src="assets/js/rundgang.js?v=202610081212" defer></script>
<script src="assets/js/aufstieg.js?v=202610081119" defer></script> <script src="assets/js/aufstieg.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/startcheck.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/startcheck.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="wald"> <body class="start" data-buehne="wald">
@@ -85,16 +85,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/ki.js?v=202610081119" defer></script> <script src="assets/js/ki.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/startcheck.js?v=202610081119" defer></script> <script src="assets/js/startcheck.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/profil.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/profil.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="halle"> <body class="start" data-buehne="halle">
@@ -150,16 +150,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/hochladen.js?v=202610081119" defer></script> <script src="assets/js/hochladen.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/auskunft.js?v=202610081119" defer></script> <script src="assets/js/auskunft.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/steckbrief.js?v=202610081119" defer></script> <script src="assets/js/steckbrief.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+14 -14
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/support.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/support.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="studio"> <body class="start" data-buehne="studio">
@@ -154,16 +154,16 @@
(reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese (reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese
Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam
trotzdem, deshalb sah man es nur in der Browserkonsole. --> trotzdem, deshalb sah man es nur in der Browserkonsole. -->
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<!-- wahl.js gehoert zu kopf.js: Der Sicht-Umschalter in der <!-- wahl.js gehoert zu kopf.js: Der Sicht-Umschalter in der
Kopfleiste baut daraus seine Liste. pruef-css-klassen setzt das Kopfleiste baut daraus seine Liste. pruef-css-klassen setzt das
seit dem 07.09.2026 durch -- damals fehlte es auf chat.html und seit dem 07.09.2026 durch -- damals fehlte es auf chat.html und
uebersicht.html, und heute hier. --> uebersicht.html, und heute hier. -->
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/support.js?v=202610081119" defer></script> <script src="assets/js/support.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+3 -3
View File
@@ -23,7 +23,7 @@
„Eigenes CSS" leer lassen (der Grund ist schon „Eigenes CSS" leer lassen (der Grund ist schon
durchsichtig). durchsichtig).
====================================================================== --> ====================================================================== -->
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610081212" />
<style> <style>
/* DURCHSICHTIG BIS AUF DIE KARTEN. OBS legt die Quelle über das /* DURCHSICHTIG BIS AUF DIE KARTEN. OBS legt die Quelle über das
Bild; jede Fläche, die hier steht, deckt dort etwas zu. */ Bild; jede Fläche, die hier steht, deckt dort etwas zu. */
@@ -109,7 +109,7 @@
<body> <body>
<div class="obs-tafel spendentafel" id="tafel" aria-live="polite"></div> <div class="obs-tafel spendentafel" id="tafel" aria-live="polite"></div>
<script src="assets/js/spendenkarte.js?v=202610081119" defer></script> <script src="assets/js/spendenkarte.js?v=202610081212" defer></script>
<script src="assets/js/tafel.js?v=202610081119" defer></script> <script src="assets/js/tafel.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+18 -18
View File
@@ -7,18 +7,18 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie <!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
der Regel hier waere die zweite Stelle, an der dieselbe Sache der Regel hier waere die zweite Stelle, an der dieselbe Sache
anders aussieht. --> anders aussieht. -->
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -111,15 +111,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<script src="assets/js/talente.js?v=202610081119" defer></script> <script src="assets/js/talente.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,20 +7,20 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/team.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/team.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="halle"> <body class="start" data-buehne="halle">
@@ -110,15 +110,15 @@
</main> </main>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<script src="assets/js/team.js?v=202610081119" defer></script> <script src="assets/js/team.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+17 -17
View File
@@ -7,20 +7,20 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/team.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/team.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu <!-- `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 Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
es niemandem auf, und deshalb prueft pruef-css-klassen die es niemandem auf, und deshalb prueft pruef-css-klassen die
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. --> ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<script src="assets/js/teamlage.js?v=202610081119" defer></script> <script src="assets/js/teamlage.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/bereich.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/bereich.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -112,15 +112,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/teilen.js?v=202610081119" defer></script> <script src="assets/js/teilen.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,14 +7,14 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/treff.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -126,14 +126,14 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/treff-moderation.js?v=202610081119" defer></script> <script src="assets/js/treff-moderation.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,18 +7,18 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/treff.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des <!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
Rudels biegt der Server genau diesen Dateinamen auf crew-haus.css Rudels biegt der Server genau diesen Dateinamen auf crew-haus.css
um, und die Seite kommt schon beim ERSTEN Abruf in Lila und um, und die Seite kommt schon beim ERSTEN Abruf in Lila und
Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. --> Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -248,14 +248,14 @@
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
die seit dem 07.09. jede Seite danach absucht. --> die seit dem 07.09. jede Seite danach absucht. -->
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/auskunft.js?v=202610081119" defer></script> <script src="assets/js/auskunft.js?v=202610081212" defer></script>
<script src="assets/js/treff-regeln.js?v=202610081119" defer></script> <script src="assets/js/treff-regeln.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -12,22 +12,22 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der <!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
Dialog "Creator anlegen". --> Dialog "Creator anlegen". -->
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/uebersicht.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="showbuehne"> <body class="start" data-buehne="showbuehne">
@@ -149,16 +149,16 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/uebersicht.js?v=202610081119" defer></script> <script src="assets/js/uebersicht.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+15 -15
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -335,14 +335,14 @@
</main> </main>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/live.js?v=202610081119" defer></script> <script src="assets/js/live.js?v=202610081212" defer></script>
<script src="assets/js/unsere-seiten.js?v=202610081119" defer></script> <script src="assets/js/unsere-seiten.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,13 +7,13 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -106,17 +106,17 @@
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js <!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit
„Cannot read properties of undefined (reading 'LEITUNG')" ab. --> „Cannot read properties of undefined (reading 'LEITUNG')" ab. -->
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/holen.js?v=202610081119" defer></script> <script src="assets/js/holen.js?v=202610081212" defer></script>
<!-- Die Satz-Tafel. Ohne sie stand auf dieser Seite das Maschinenwort <!-- Die Satz-Tafel. Ohne sie stand auf dieser Seite das Maschinenwort
des Servers (z.B. "nicht_gefunden") statt eines Satzes -- gemeldet des Servers (z.B. "nicht_gefunden") statt eines Satzes -- gemeldet
von pruef-meldungen, nicht beim Ansehen. --> von pruef-meldungen, nicht beim Ansehen. -->
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/unterstuetzen.js?v=202610081119" defer></script> <script src="assets/js/unterstuetzen.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+16 -16
View File
@@ -7,15 +7,15 @@
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/werdegang.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/werdegang.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start"> <body class="start">
@@ -144,14 +144,14 @@
</main> </main>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/werdegang.js?v=202610081119" defer></script> <script src="assets/js/werdegang.js?v=202610081212" defer></script>
</body> </body>
</html> </html>
+1 -1
View File
@@ -56,7 +56,7 @@
veraltet beim naechsten Umbau. --> veraltet beim naechsten Umbau. -->
<link rel="manifest" href="/workspace/app.webmanifest" /> <link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<style> <style>
/* Bewusst ohne eigenes Stilblatt: Die Seite ist in aller Regel nur /* Bewusst ohne eigenes Stilblatt: Die Seite ist in aller Regel nur
+17 -17
View File
@@ -12,20 +12,20 @@
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. --> eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" /> <meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" /> <link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081212" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" /> <link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/wissen.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/wissen.css?v=202610081212" />
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026). <!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an -- kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. --> ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" /> <link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
</head> </head>
<body class="start" data-buehne="arena"> <body class="start" data-buehne="arena">
@@ -190,15 +190,15 @@
</main> </main>
<script src="assets/js/meldung.js?v=202610081119" defer></script> <script src="assets/js/meldung.js?v=202610081212" defer></script>
<script src="assets/js/hochladen.js?v=202610081119" defer></script> <script src="assets/js/hochladen.js?v=202610081212" defer></script>
<script src="assets/js/nachfrage.js?v=202610081119" defer></script> <script src="assets/js/nachfrage.js?v=202610081212" defer></script>
<script src="assets/js/wahl.js?v=202610081119" defer></script> <script src="assets/js/wahl.js?v=202610081212" defer></script>
<script src="assets/js/bereiche.js?v=202610081119" defer></script> <script src="assets/js/bereiche.js?v=202610081212" defer></script>
<script src="assets/js/installieren.js?v=202610081119" defer></script> <script src="assets/js/installieren.js?v=202610081212" defer></script>
<script src="assets/js/kopf.js?v=202610081119" defer></script> <script src="assets/js/kopf.js?v=202610081212" defer></script>
<script src="assets/js/glocke.js?v=202610081119" defer></script> <script src="assets/js/glocke.js?v=202610081212" defer></script>
<script src="assets/js/wissen.js?v=202610081119" defer></script> <script src="assets/js/wissen.js?v=202610081212" defer></script>
</body> </body>
</html> </html>