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:
+215
-4
@@ -25,6 +25,10 @@
|
||||
* Und geht der ganze Weg durch: Gast schickt ein Video,
|
||||
DogFather sieht es MIT Namen, nimmt es -- und es steht links
|
||||
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
|
||||
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? */
|
||||
const mitteLesen = (seite) => seite.evaluate(() => {
|
||||
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
|
||||
absichtlich kaputtgemacht -- schlaegt sie nicht an, ist sie
|
||||
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);
|
||||
|
||||
@@ -655,6 +856,16 @@ console.log("\n=== 7. Gegenproben ===");
|
||||
await gast.seite.waitForTimeout(120);
|
||||
const sichtbar = await reihenLesen(gast.seite);
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -669,8 +880,8 @@ try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
einzige Messung, waere "0 Fehler" das beste Ergebnis ueberhaupt --
|
||||
und voellig wertlos. */
|
||||
console.log(`\n${geprueft} Messungen, ${fehler} Fehler`);
|
||||
if (geprueft < 40) {
|
||||
console.log(`NICHT NACHSEHBAR: nur ${geprueft} Messungen gelaufen, erwartet mindestens 40.`);
|
||||
if (geprueft < 55) {
|
||||
console.log(`NICHT NACHSEHBAR: nur ${geprueft} Messungen gelaufen, erwartet mindestens 55.`);
|
||||
process.exit(3);
|
||||
}
|
||||
if (fehler) {
|
||||
|
||||
@@ -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(`${geprueft} Pruefungen, ${fehler} Fehler`);
|
||||
melde(fehler === 0 ? "ALLES IN ORDNUNG" : "NICHT IN ORDNUNG");
|
||||
|
||||
@@ -148,6 +148,26 @@ export const VORSCHLAG_BREMSE_SEKUNDEN = 45;
|
||||
/** Die Zustaende eines Vorschlags. */
|
||||
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. */
|
||||
export const TEXT_MAX = 400;
|
||||
|
||||
@@ -548,6 +568,23 @@ export function reaktionTabellen(d) {
|
||||
CREATE INDEX IF NOT EXISTS idx_reaktion_vorschlag_stand
|
||||
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
|
||||
ON reaktion_liste (platz, id);
|
||||
CREATE INDEX IF NOT EXISTS idx_reaktion_chat_zeit
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
nicht, ein Handy geht einfach aus.
|
||||
===================================================================== */
|
||||
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 { buehneMelden } from "./workspace-buehne.js";
|
||||
/* Der Spender-Glanz im Chat. EINE RICHTUNG: Die Reaction fragt die
|
||||
@@ -54,6 +54,7 @@ import { mitZugangsdaten, wegeAusfaechern } from "./workspace-turn.js";
|
||||
import {
|
||||
SICHT_PLAETZE, GAESTE_MAX, EINLADUNG_SEKUNDEN, TEXT_MAX, SCHREIB_BREMSE,
|
||||
VORSCHLAEGE_JE_PERSON, VORSCHLAG_NOTIZ_MAX, VORSCHLAG_BREMSE_SEKUNDEN,
|
||||
REGIE_FREI_STUNDEN,
|
||||
STAENDE, LAYOUTS, TEMPI,
|
||||
KAMERA_GROESSEN, KAMERA_ECKEN,
|
||||
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.
|
||||
*
|
||||
* GETAUSCHT WIRD MIT DEM NACHBARN, nicht neu durchnummeriert. Beim
|
||||
|
||||
@@ -6910,6 +6910,92 @@ function zuVieleVersuche(ip) {
|
||||
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 ---------------------------------------------------- */
|
||||
|
||||
export function sitzungLesen(req) {
|
||||
|
||||
+14
-14
@@ -7,17 +7,17 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/anleitung.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/anleitung.css?v=202610081212" />
|
||||
<!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die
|
||||
Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur
|
||||
Variablen, und bei Variablen entscheidet allein, wer zuletzt
|
||||
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/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="halle">
|
||||
@@ -289,16 +289,16 @@
|
||||
|
||||
Und anleitung.js braucht es doppelt: Symbol, Farbe, Name und
|
||||
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
|
||||
Liste. pruef-css-klassen setzt das durch, und zwar auch die
|
||||
Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen
|
||||
Bedienelement. -->
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/anleitung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/anleitung.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
verdeckt. Gefunden hat es pruef-struktur.
|
||||
|
||||
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
<!-- Ohne diese drei nimmt ein iPhone einen Bildschirmausschnitt als
|
||||
Symbol, Android zeichnet die Leiste weiss, und die Seite oeffnet
|
||||
ausserhalb der App -- auf einer Seite, die genau erklaeren soll,
|
||||
@@ -33,7 +33,7 @@
|
||||
schreibt jede Seite app.webmanifest -- auch die hier. -->
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
|
||||
<style>
|
||||
/* Bewusst in der Seite und nicht in einer eigenen Datei: Diese Seite
|
||||
soll auch dann noch etwas anzeigen, wenn genau das schiefgeht,
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/anruf-probe.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/anruf-probe.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202610081119",
|
||||
"src": "/assets/img/app-symbole/workspace-192.png?v=202610081212",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202610081119",
|
||||
"src": "/assets/img/app-symbole/workspace-512.png?v=202610081212",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"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",
|
||||
"type": "image/png",
|
||||
"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",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
@@ -95,6 +95,49 @@
|
||||
}
|
||||
.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 {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
gap: 10px; min-width: 0;
|
||||
@@ -112,15 +155,24 @@
|
||||
verschiebt. */
|
||||
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 {
|
||||
margin: 0;
|
||||
font-size: .78rem; font-weight: 800;
|
||||
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
|
||||
„hier ist etwas verborgen"; dieses Schild sagt, dass die Reihe für
|
||||
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__zahl {
|
||||
/* .72rem sind 11,52 px — die Untergrenze des Hauses ist 11,5, und
|
||||
@@ -132,9 +184,9 @@
|
||||
padding: 3px 9px 4px;
|
||||
border-radius: 999px;
|
||||
white-space: nowrap;
|
||||
color: #cfe0ff;
|
||||
background: rgba(154, 183, 255, .12);
|
||||
border: 1px solid rgba(154, 183, 255, .3);
|
||||
color: color-mix(in srgb, var(--ton, var(--akzent)) 55%, #ffffff);
|
||||
background: color-mix(in srgb, var(--ton, var(--akzent)) 14%, transparent);
|
||||
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[hidden], .foyer-reihe__nur[hidden] { display: none; }
|
||||
@@ -159,7 +211,12 @@
|
||||
LINKS: DER PLAN
|
||||
===================================================================== */
|
||||
.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 {
|
||||
border-left: 3px solid color-mix(in srgb, var(--ton, var(--akzent)) 42%, transparent);
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
min-width: 0;
|
||||
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-zeile {
|
||||
border-left: 3px solid color-mix(in srgb, var(--ton, var(--akzent)) 42%, transparent);
|
||||
display: flex; align-items: flex-start; gap: 10px;
|
||||
min-width: 0;
|
||||
padding: 8px 10px 9px 8px;
|
||||
@@ -456,6 +514,274 @@
|
||||
steht links der Plan, und das soll so bleiben. Eine zweite Fassung
|
||||
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) {
|
||||
.foyer-reihen,
|
||||
.foyer-reihen:has(> .foyer-reihe--plan[hidden]) {
|
||||
@@ -466,6 +792,20 @@
|
||||
.foyer-reihe--raten { order: 2; }
|
||||
.foyer-reihe--plan { order: 3; }
|
||||
.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; }
|
||||
}
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
}
|
||||
|
||||
/* 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;
|
||||
clip-path: polygon(var(--fase) 0, 100% 0, 100% 100%, 0 100%, 0 var(--fase));
|
||||
border-radius: 0;
|
||||
@@ -168,7 +168,7 @@
|
||||
was übrig bleibt, ist eine Linie, die exakt der Form folgt, Schräge
|
||||
inklusive. Ein `border` könnte das nicht: Er folgt dem Rechteck. */
|
||||
/* 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: "";
|
||||
position: absolute; inset: 0;
|
||||
pointer-events: none;
|
||||
@@ -191,7 +191,7 @@
|
||||
/* RASTER UND ECKWINKEL. Beides auf ::after -- ein drittes Element gibt
|
||||
es nicht, und beides ist reine Optik ohne Klicks. */
|
||||
/* 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: "";
|
||||
position: absolute; inset: 0;
|
||||
pointer-events: none;
|
||||
@@ -398,7 +398,7 @@
|
||||
Gefunden beim Eintragen von `.foyer-reihe`: acht Vorkommen der
|
||||
Liste, sieben Marken. Die Pruefung erwartet jetzt acht. */
|
||||
/* 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-offset: -4px;
|
||||
}
|
||||
@@ -407,7 +407,7 @@
|
||||
/* Dieselbe Form, kleiner -- keine zweite Gestaltung. */
|
||||
:root { --fase: 12px; }
|
||||
/* 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));
|
||||
}
|
||||
}
|
||||
@@ -421,15 +421,15 @@
|
||||
/* Im Kontrastmodus zählt die Kante, und die muss ein echter `border`
|
||||
sein. Die Schräge bleibt: Sie ist Geometrie, keine Farbe. */
|
||||
/* 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;
|
||||
}
|
||||
/* 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;
|
||||
}
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7679,7 +7679,7 @@ body[data-fremde-sicht="ja"]::after {
|
||||
.spalte, .balance, .saeulen-kasten, .neu, .call-raum, .schulung__neu,
|
||||
.nachricht, .creator, .summe, .wert, .pdf, .pdf-ablage, .suchleiste,
|
||||
.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
|
||||
hatten bis zum 08.10.2026 ihre eigene Flaeche
|
||||
(`rgba(255,255,255,.045)`) -- also eine zweite Antwort auf die
|
||||
|
||||
@@ -343,6 +343,12 @@
|
||||
'Dieses Video hat schon jemand angeraten. Es liegt bei DogFather und VanVan.',
|
||||
steht_schon_bereit:
|
||||
'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:
|
||||
'Das ist nicht deiner. Zurückziehen kannst du nur, was du selbst '
|
||||
+ 'geschickt hast und worüber noch nicht entschieden ist.',
|
||||
|
||||
@@ -35,6 +35,10 @@
|
||||
|
||||
let lage = 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) {
|
||||
return fetch(pfad, { credentials: 'same-origin', ...(einstellungen || {}) });
|
||||
@@ -445,9 +449,184 @@
|
||||
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
|
||||
================================================================= */
|
||||
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() {
|
||||
try {
|
||||
const a = await hole('/workspace/api/reaktion');
|
||||
@@ -510,8 +689,28 @@
|
||||
$('raten-notiz').addEventListener('input', 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();
|
||||
ratenHolen();
|
||||
regieHolen();
|
||||
|
||||
/* ==== ALLE ZWANZIG SEKUNDEN NACHFRAGEN ====================
|
||||
Damit jemand, der das Foyer offen stehen laesst, den Start
|
||||
@@ -528,7 +727,9 @@
|
||||
if (document.visibilityState === 'visible') standHolen();
|
||||
}, 20000);
|
||||
document.addEventListener('visibilitychange', () => {
|
||||
if (document.visibilityState === 'visible') { standHolen(); ratenHolen(); }
|
||||
if (document.visibilityState === 'visible') {
|
||||
standHolen(); ratenHolen(); regieHolen();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+19
-19
@@ -12,19 +12,19 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="garage">
|
||||
@@ -430,22 +430,22 @@
|
||||
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
|
||||
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
|
||||
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
|
||||
<script src="assets/js/textform.js?v=202610081119"></script>
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/textform.js?v=202610081212"></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/zuteilung.js?v=202610081212" defer></script>
|
||||
<!-- Der Vorlagenkatalog stand bis zum 23.09.2026 mitten in
|
||||
aufgaben.js. Er bedient jetzt zwei Seiten und hat deshalb eine
|
||||
eigene Datei; hier zeigt er den Creator-Katalog.
|
||||
Vor aufgaben.js, weil die Seite ihn beim Start einrichtet. -->
|
||||
<script src="assets/js/vorlagenbrett.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="garage">
|
||||
@@ -168,15 +168,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/automation.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/automation.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -197,16 +197,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/befinden.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+24
-24
@@ -12,29 +12,29 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202610081212" />
|
||||
<!-- Wegen des Blocks „Willst du dazugehoeren?" auf dem Brett
|
||||
„Mitmachen". Eine eigene Kopie der Regel hier waere die zweite
|
||||
Stelle, an der dieselbe Sache anders aussieht. -->
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081212" />
|
||||
<!-- 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 und keine Kopie aus chat.css -- dieselbe Schau im Chat und
|
||||
hier, ein Stil. -->
|
||||
<link rel="stylesheet" href="assets/css/bildschau.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bildschau.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -454,20 +454,20 @@
|
||||
<!-- TEXTFORM ZUERST (21.09.2026): Die Seite fragt beim Zeichnen nach
|
||||
`window.Textform`. Kaeme sie spaeter, waere der erste Eintrag ohne
|
||||
Gestaltung. Kein `defer`, damit sie wirklich vorher dasteht. -->
|
||||
<script src="assets/js/textform.js?v=202610081119"></script>
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/textform.js?v=202610081212"></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bildschau.js?v=202610081119"></script>
|
||||
<script src="assets/js/bereich.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bildschau.js?v=202610081212"></script>
|
||||
<script src="assets/js/bereich.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+19
-19
@@ -7,17 +7,17 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- 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>
|
||||
|
||||
<body class="start">
|
||||
@@ -108,15 +108,15 @@
|
||||
</main>
|
||||
|
||||
<!-- Der Fuß gehört zu jeder Seite - siehe pruef-css-klassen. -->
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bewerben.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -7,16 +7,16 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- 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>
|
||||
|
||||
<body class="start">
|
||||
@@ -80,16 +80,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bewerbungen.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
<!-- DIE WERBEEINBLENDUNG. Dieselbe Datei wie in der Reaction-Seite:
|
||||
Zwei Fassungen altern unterschiedlich, und dann sieht der Stream
|
||||
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>
|
||||
<body class="obs-buehne">
|
||||
<div id="platz"></div>
|
||||
<script src="assets/js/werbung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/buehne.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/werbung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/buehne.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="lounge">
|
||||
@@ -89,15 +89,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/calls.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/ki.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/calls.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+21
-21
@@ -12,31 +12,31 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<!-- aufgaben.css bringt die Dialog- und Formularstile mit (.dialog,
|
||||
.neu__zeile, .dialog__knoepfe). Sie stehen dort seit dem
|
||||
Aufgabenbrett; sie hierher zu kopieren hiesse, sie an zwei Stellen
|
||||
zu pflegen. Dieselbe Lösung nutzen kalender.html und content.html.
|
||||
Gemeldet von pruef-css-klassen.mjs, bevor jemand einen ungestylten
|
||||
Dialog zu sehen bekam. -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/chat.css?v=202610081212" />
|
||||
<!-- 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
|
||||
eigene Datei. Sie steht GENAU HIER -- direkt hinter chat.css, also
|
||||
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/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bildschau.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="lounge">
|
||||
@@ -744,24 +744,24 @@
|
||||
</form>
|
||||
</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
|
||||
fragen beim Zeichnen nach `window.Textform`. Kaeme sie spaeter,
|
||||
waere die erste gezeichnete Nachricht ohne Gestaltung -- und das
|
||||
faellt nur dem auf, der genau hinsieht. KEIN `defer`, damit sie
|
||||
wirklich vor den anderen dasteht. -->
|
||||
<script src="assets/js/textform.js?v=202610081119"></script>
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119"></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119"></script>
|
||||
<script src="assets/js/textform.js?v=202610081212"></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212"></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212"></script>
|
||||
<!-- ANRUF VOR CHAT (18.09.2026): anruf.js stellt `window.anrufStarten`
|
||||
bereit, und chat.js baut die Knoepfe nur, wenn es das gibt.
|
||||
Andersherum waere die Reihenfolge eine stille Abhaengigkeit --
|
||||
die Knoepfe fehlten, und niemand wuesste warum. -->
|
||||
<script src="assets/js/anruf.js?v=202610081119"></script>
|
||||
<script src="assets/js/anruf.js?v=202610081212"></script>
|
||||
<!-- DIE BILDSCHAU (25.09.2026). Eigene Datei, weil sie nichts vom
|
||||
Chat weiss: Sie bekommt einen Weg und einen Namen und zeigt ein
|
||||
Bild. Jede andere Seite mit Fotos kann sie ebenso benutzen, ohne
|
||||
@@ -772,8 +772,8 @@
|
||||
sie beim ersten Foto noch nicht da -- und der erste Klick ginge
|
||||
wie frueher in den Tab. Ein Fehler, der nur beim ERSTEN Mal
|
||||
auftritt, ist der, den man nie nachstellen kann. -->
|
||||
<script src="assets/js/bildschau.js?v=202610081119"></script>
|
||||
<script src="assets/js/chat.js?v=202610081119"></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bildschau.js?v=202610081212"></script>
|
||||
<script src="assets/js/chat.js?v=202610081212"></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="portal">
|
||||
@@ -179,15 +179,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/content.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/content.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -36,15 +36,15 @@
|
||||
<link rel="preload" as="image" href="assets/img/buehne/crew-gate-hoch-580.webp"
|
||||
type="image/webp" media="(max-width: 899px)" />
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/crew-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/crew-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<!-- Diese Wand steht NUR auf der Adresse von Team Dogi (ueberall sonst
|
||||
404, siehe crewWeiche). Sie darf das Haus deshalb direkt nennen
|
||||
statt ueber den Platzhalter haus.css zu gehen -- und sie MUSS es:
|
||||
Eine Zugangswand, die sich erst nach dem Umbiegen faerbt, waere
|
||||
die eine Seite, auf der man das Umfaerben sieht. -->
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/crew-haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="gate gate--crew">
|
||||
@@ -459,7 +459,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/gate.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,25 +23,25 @@
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202610081119",
|
||||
"src": "/assets/img/app-symbole/crew-192.png?v=202610081212",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
},
|
||||
{
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202610081119",
|
||||
"src": "/assets/img/app-symbole/crew-512.png?v=202610081212",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"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",
|
||||
"type": "image/png",
|
||||
"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",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="arena">
|
||||
@@ -108,15 +108,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -306,20 +306,20 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<!-- VOR entwicklung.js: Die Seite richtet den Katalog beim Start ein,
|
||||
also muss es ihn zu dem Zeitpunkt geben. Mit "defer" laufen beide
|
||||
in Dokumentreihenfolge. -->
|
||||
<script src="assets/js/vorlagenbrett.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/vorlagenbrett.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/entwicklung.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/hilfe.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -146,14 +146,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/hilfe.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
<link rel="preload" as="image" href="assets/img/buehne/gate-hoch-580.webp"
|
||||
type="image/webp" media="(max-width: 899px)" />
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -427,7 +427,7 @@
|
||||
|
||||
|
||||
|
||||
<script src="assets/js/gate.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/gate.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="skyline">
|
||||
@@ -383,15 +383,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kalender-abo.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/leistung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="arena">
|
||||
@@ -444,13 +444,13 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119"></script>
|
||||
<script src="assets/js/wahl.js?v=202610081119"></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081119"></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119"></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119"></script>
|
||||
<script src="assets/js/leistung.js?v=202610081119"></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212"></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212"></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212"></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212"></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212"></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212"></script>
|
||||
<script src="assets/js/leistung.js?v=202610081212"></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,17 +7,17 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/manager-ziele.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/manager-ziele.css?v=202610081212" />
|
||||
<!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die
|
||||
Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur
|
||||
Variablen, und bei Variablen entscheidet allein, wer zuletzt
|
||||
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/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="arena">
|
||||
@@ -230,16 +230,16 @@
|
||||
kopf.js liest daraus die Leitungsrollen. Ohne sie stürzt jede
|
||||
Seite ab, und zwar nur in der Browserkonsole -- die Kopfleiste
|
||||
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
|
||||
Liste. pruef-css-klassen setzt das durch, und zwar auch die
|
||||
Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen
|
||||
Bedienelement. -->
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/manager-ziele.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/manager-ziele.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,13 +12,13 @@
|
||||
vergessen wird. -->
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/material.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
<body class="start" data-ton="42" data-buehne="studio">
|
||||
|
||||
@@ -138,14 +138,14 @@
|
||||
<p class="m-laedt" id="laedt">Einen Moment …</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/material.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/material.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/notizen.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/notizen.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-ton="46">
|
||||
@@ -181,12 +181,12 @@
|
||||
|
||||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||||
liest daraus die Leitungsrollen. -->
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/notizen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/notizen.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="halle">
|
||||
@@ -453,14 +453,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/personen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/personen.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="halle">
|
||||
@@ -214,16 +214,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/profil.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/profil.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+104
-15
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/foyer.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/foyer.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -190,17 +190,106 @@
|
||||
</section>
|
||||
|
||||
</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>
|
||||
|
||||
<!-- 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
|
||||
liest daraus die Leitungsrollen. -->
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/reaktion-foyer.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/reaktion-foyer.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+19
-19
@@ -7,15 +7,15 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/reaktion.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/werbung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/reaktion.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/werbung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start reaktion-seite" data-stand="laedt">
|
||||
@@ -1132,15 +1132,15 @@
|
||||
|
||||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||||
liest daraus die Leitungsrollen. -->
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/werbung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/reaktion.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/werbung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/reaktion.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -134,14 +134,14 @@
|
||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||
die seit dem 07.09. jede Seite danach absucht. -->
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/rechte.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="showbuehne">
|
||||
@@ -106,17 +106,17 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/report.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/ki.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/report.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="wald">
|
||||
@@ -194,14 +194,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+19
-19
@@ -12,26 +12,26 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<!-- Nur die Startseite: Begrüßungskachel, Uhr, Glockenmulde. Siehe
|
||||
den Hinweis in start.css -- dort stand es bis zum 07.09.2026. -->
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/heim.css?v=202610081212" />
|
||||
<!-- Die Einweisung bringt ihr Aussehen mit. Sie steht in
|
||||
anleitung.css, weil sie dorthin gehoert -- und nicht in
|
||||
start.css, wo sie zwischen 48 Kachelfarben verschwinden
|
||||
wuerde. -->
|
||||
<link rel="stylesheet" href="assets/css/anleitung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/anleitung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -768,22 +768,22 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/live.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/start.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/live.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/start.js?v=202610081212" defer></script>
|
||||
<!-- Die Begruessung und der Rundgang beim ersten Anmelden.
|
||||
EIGENE DATEI und nicht ein Stueck start.js: Sie laeuft auf der
|
||||
meistbenutzten Seite des Hauses, und wenn hier etwas schiefgeht,
|
||||
darf davon nichts anderes betroffen sein. -->
|
||||
<script src="assets/js/rundgang.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/aufstieg.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/rundgang.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/aufstieg.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="wald">
|
||||
@@ -85,16 +85,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/ki.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="halle">
|
||||
@@ -150,16 +150,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-14
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/support.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="studio">
|
||||
@@ -154,16 +154,16 @@
|
||||
(reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese
|
||||
Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam
|
||||
trotzdem, deshalb sah man es nur in der Browserkonsole. -->
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<!-- wahl.js gehoert zu kopf.js: Der Sicht-Umschalter in der
|
||||
Kopfleiste baut daraus seine Liste. pruef-css-klassen setzt das
|
||||
seit dem 07.09.2026 durch -- damals fehlte es auf chat.html und
|
||||
uebersicht.html, und heute hier. -->
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/support.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/support.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
„Eigenes CSS" leer lassen (der Grund ist schon
|
||||
durchsichtig).
|
||||
====================================================================== -->
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/spendenkarte.css?v=202610081212" />
|
||||
<style>
|
||||
/* DURCHSICHTIG BIS AUF DIE KARTEN. OBS legt die Quelle über das
|
||||
Bild; jede Fläche, die hier steht, deckt dort etwas zu. */
|
||||
@@ -109,7 +109,7 @@
|
||||
<body>
|
||||
<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/tafel.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/spendenkarte.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/tafel.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+18
-18
@@ -7,18 +7,18 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
|
||||
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
|
||||
der Regel hier waere die zweite Stelle, an der dieselbe Sache
|
||||
anders aussieht. -->
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -111,15 +111,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/talente.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/talente.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -7,20 +7,20 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="halle">
|
||||
@@ -110,15 +110,15 @@
|
||||
|
||||
</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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/team.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/team.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+17
-17
@@ -7,20 +7,20 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/team.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
|
||||
@@ -84,15 +84,15 @@
|
||||
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
|
||||
es niemandem auf, und deshalb prueft pruef-css-klassen die
|
||||
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/teamlage.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+15
-15
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -112,15 +112,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/teilen.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -126,14 +126,14 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/treff-moderation.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -7,18 +7,18 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
|
||||
Rudels biegt der Server genau diesen Dateinamen auf crew-haus.css
|
||||
um, und die Seite kommt schon beim ERSTEN Abruf in Lila und
|
||||
Babyblau an -- ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -248,14 +248,14 @@
|
||||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||||
die seit dem 07.09. jede Seite danach absucht. -->
|
||||
<script src="assets/js/nachfrage.js?v=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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/auskunft.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/treff-regeln.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -12,22 +12,22 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="showbuehne">
|
||||
@@ -149,16 +149,16 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" 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/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/unsere-seiten.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -335,14 +335,14 @@
|
||||
|
||||
</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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/live.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/live.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/unsere-seiten.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -106,17 +106,17 @@
|
||||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||||
liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit
|
||||
„Cannot read properties of undefined (reading 'LEITUNG')" ab. -->
|
||||
<script src="assets/js/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/holen.js?v=202610081212" defer></script>
|
||||
<!-- Die Satz-Tafel. Ohne sie stand auf dieser Seite das Maschinenwort
|
||||
des Servers (z.B. "nicht_gefunden") statt eines Satzes -- gemeldet
|
||||
von pruef-meldungen, nicht beim Ansehen. -->
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/unterstuetzen.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+16
-16
@@ -7,15 +7,15 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -144,14 +144,14 @@
|
||||
|
||||
</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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/werdegang.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
veraltet beim naechsten Umbau. -->
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081212" />
|
||||
|
||||
<style>
|
||||
/* Bewusst ohne eigenes Stilblatt: Die Seite ist in aller Regel nur
|
||||
|
||||
+17
-17
@@ -12,20 +12,20 @@
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081119" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?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=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202610081212" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202610081212" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081119" />
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202610081212" />
|
||||
</head>
|
||||
|
||||
<body class="start" data-buehne="arena">
|
||||
@@ -190,15 +190,15 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/nachfrage.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/meldung.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/hochladen.js?v=202610081212" 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/bereiche.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202610081119" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/installieren.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202610081212" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202610081212" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user